Advertisement
SSTrihan

HorrorVale - BattleName

Apr 30th, 2023
1,314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.46 KB | Source Code | 0 0
  1. #-------------------------------------------------------------------------------
  2. # Don't remove this header!
  3. #-------------------------------------------------------------------------------
  4. # Show Enemy Name on Select
  5. # by Trihan
  6. #
  7. # Version: 1.0
  8. #
  9. # This script is commissioned by Batworks Software.
  10. #-------------------------------------------------------------------------------
  11.  
  12. #-------------------------------------------------------------------------------
  13. # Version History
  14. #-------------------------------------------------------------------------------
  15. # 1.0 - Initial script.
  16. #-------------------------------------------------------------------------------
  17.  
  18. module TLBBattleName
  19.   def self.line_height
  20.     return 24
  21.   end
  22.   def self.text_color(n)
  23.     Cache.system("Window").get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
  24.   end
  25.   def self.normal_color;      text_color(0);   end;    # Normal
  26.   def self.change_color(contents, color, enabled = true)
  27.     contents.font.color.set(color)
  28.     contents.font.color.alpha = translucent_alpha unless enabled
  29.   end
  30.   def self.text_size(contents, str)
  31.     contents.text_size(str)
  32.   end
  33.   def self.draw_text_ex(contents, x, y, text)
  34.     reset_font_settings(contents)
  35.     text = convert_escape_characters(text)
  36.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(contents, text)}
  37.     process_character(contents, text.slice!(0, 1), text, pos) until text.empty?
  38.   end
  39.   def self.reset_font_settings(contents)
  40.     change_color(contents, normal_color)
  41.     contents.font.size = Font.default_size
  42.     contents.font.bold = Font.default_bold
  43.     contents.font.italic = Font.default_italic
  44.   end
  45.   def self.convert_escape_characters(text)
  46.     result = text.to_s.clone
  47.     result.gsub!(/\\/)            { "\e" }
  48.     result.gsub!(/\e\e/)          { "\\" }
  49.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  50.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  51.     result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
  52.     result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
  53.     result.gsub!(/\eG/i)          { Vocab::currency_unit }
  54.     result
  55.   end
  56.   def self.strip_escape_characters(text)
  57.     stripped_text = text.to_s.clone
  58.     stripped_text.gsub!(/\\/)            { "\e" }
  59.     stripped_text.gsub!(/\\/)            { "\e" }
  60.     stripped_text.gsub!(/\e\e/)          { "\\" }
  61.     stripped_text.gsub!(/\eV\[(\d+)\]/i) { "" }
  62.     stripped_text.gsub!(/\eV\[(\d+)\]/i) { "" }
  63.     stripped_text.gsub!(/\eN\[(\d+)\]/i) { "" }
  64.     stripped_text.gsub!(/\eP\[(\d+)\]/i) { "" }
  65.     stripped_text.gsub!(/\eG/i)          { "" }
  66.     stripped_text.gsub!(/\eC\[(\d+)\]/i) { "" }
  67.     stripped_text
  68.   end
  69.   def self.process_character(contents, c, text, pos)
  70.     case c
  71.     when "\n"   # New line
  72.       process_new_line(text, pos)
  73.     when "\f"   # New page
  74.       process_new_page(text, pos)
  75.     when "\e"   # Control character
  76.       process_escape_character(contents, obtain_escape_code(text), text, pos)
  77.     else        # Normal character
  78.       process_normal_character(contents, c, pos)
  79.     end
  80.   end
  81.   def self.process_normal_character(contents, c, pos)
  82.     text_width = text_size(contents, c).width
  83.     contents.draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
  84.     pos[:x] += text_width
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # * New Line Character Processing
  88.   #--------------------------------------------------------------------------
  89.   def self.process_new_line(text, pos)
  90.     pos[:x] = pos[:new_x]
  91.     pos[:y] += pos[:height]
  92.     pos[:height] = calc_line_height(text)
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # * New Page Character Processing
  96.   #--------------------------------------------------------------------------
  97.   def self.process_new_page(text, pos)
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # * Destructively Get Control Code
  101.   #--------------------------------------------------------------------------
  102.   def self.obtain_escape_code(text)
  103.     text.slice!(/^[\$\.\|\^!><\{\}\\]|^[A-Z]+/i)
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # * Destructively Get Control Code Argument
  107.   #--------------------------------------------------------------------------
  108.   def self.obtain_escape_param(text)
  109.     text.slice!(/^\[\d+\]/)[/\d+/].to_i rescue 0
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # * Control Character Processing
  113.   #     code : the core of the control character
  114.   #            e.g. "C" in the case of the control character \C[1].
  115.   #--------------------------------------------------------------------------
  116.   def self.process_escape_character(contents, code, text, pos)
  117.     case code.upcase
  118.     when 'C'
  119.       change_color(contents, text_color(obtain_escape_param(text)))
  120.     when 'I'
  121.       process_draw_icon(obtain_escape_param(text), pos)
  122.     when '{'
  123.       make_font_bigger(contents)
  124.     when '}'
  125.       make_font_smaller(contents)
  126.     end
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # * Icon Drawing Process by Control Characters
  130.   #--------------------------------------------------------------------------
  131.   def self.process_draw_icon(icon_index, pos)
  132.     draw_icon(icon_index, pos[:x], pos[:y])
  133.     pos[:x] += 24
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # * Increase Font Size
  137.   #--------------------------------------------------------------------------
  138.   def self.make_font_bigger(contents)
  139.     contents.font.size += 8 if contents.font.size <= 64
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # * Decrease Font Size
  143.   #--------------------------------------------------------------------------
  144.   def self.make_font_smaller(contents)
  145.     contents.font.size -= 8 if contents.font.size >= 16
  146.   end
  147.   def self.calc_line_height(contents, text, restore_font_size = true)
  148.     result = [line_height, contents.font.size].max
  149.     last_font_size = contents.font.size
  150.     text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc|
  151.       make_font_bigger(contents)  if esc == "\e{"
  152.       make_font_smaller(contents) if esc == "\e}"
  153.       result = [result, contents.font.size].max
  154.     end
  155.     contents.font.size = last_font_size if restore_font_size
  156.     result
  157.   end
  158. end
  159.  
  160. class Sprite_Battler < Sprite_Base
  161.   alias :tlb_enemyname_initialize_2eb8 :initialize
  162.   def initialize(viewport, battler = nil)
  163.     tlb_enemyname_initialize_2eb8(viewport, battler)
  164.     if @battler.class.name == 'Game_Enemy'
  165.       @enemy_name_sprite = Sprite.new
  166.       @enemy_name_sprite.bitmap = Bitmap.new(1, 1)
  167.     end
  168.   end
  169.   alias :tlb_enemyname_icon_update_0ej4 :enemy_hp_icon_update
  170.   def enemy_hp_icon_update
  171.     tlb_enemyname_icon_update_0ej4
  172.     if @enemy_name_sprite
  173.       if @battler.hp_icon
  174.         text = @battler.name
  175.         stripped_text = TLBBattleName.strip_escape_characters(text)
  176.         width = @enemy_name_sprite.bitmap.text_size(stripped_text).width
  177.         @enemy_name_sprite.bitmap = Bitmap.new(width, 24)
  178.         TLBBattleName.draw_text_ex(@enemy_name_sprite.bitmap, 0, 0, text)
  179.         @enemy_name_sprite.x = @battler.screen_x - width / 2
  180.         @enemy_name_sprite.y = @enemy_hp_icon[0].y + 20
  181.         @enemy_name_sprite.visible = true
  182.       else
  183.         @enemy_name_sprite.visible = false
  184.       end
  185.     end
  186.   end
  187. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement