Advertisement
strelokhalfer

Napoleon Event

Feb 5th, 2015
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 17.64 KB | None | 0 0
  1. #sb:nap_ev_text [field]
  2. =begin
  3. #===============================================================================
  4. Napoleons Event Text
  5. Version 1.03
  6. By Napoleon
  7.  
  8. About:
  9. - Displays text above events
  10.  
  11. Instructions:
  12. - Place below "▼ Materials" but above "▼ Main Process".
  13. - If you use Khas's new lighting script then this script must be placed below his
  14.   "Character Render" script.
  15. - Comment tag: <evtxt:Your text here>
  16. - or use the script calls:
  17.   - nap_ev_text(ev_id, text) # ev_id = id of the event.
  18.   - nap_ev_erase_text(ev_id)
  19. - Note: Does NOT work for the player himself (event id == 0)
  20.  
  21. - settings sample from script call (all settings are optional):
  22. nap_ev_conf(1, {
  23. :name => 'Arial',
  24. :size => 20,
  25. :bold => false,
  26. :italic => false,
  27. :outline => true,
  28. :shadow => false,
  29. :fg_color => Color.new(255, 0, 0, 0),
  30. :out_color => Color.new(0, 255, 0, 0),
  31. :bg_color => Color.new(128, 128, 128, 128),
  32. })
  33. - Note: Do not call nap_ev_conf from a parallel process. Use an autorun instead
  34.   to avoid a 'nil error message'.
  35.  
  36. - More comment-tag setting examples:
  37. <evtxt_font_name:'Verdana'>
  38. <evtxt_font_size:40>
  39. <evtxt_font_bold:true>
  40. <evtxt_font_italic:false>
  41. <evtxt_font_outline:true>
  42. <evtxt_font_shadow:false>
  43. <evtxt_fg_color:128, 128, 128, 128>
  44. <evtxt_bg_color:128, 128, 128, 128>
  45. <evtxt_out_color:128, 128, 128, 128>
  46. # Note that presets must be called BEFORE setting the text with
  47. # <evtxt:Your text here> or by script call or the preset will not be applied.
  48. <evtxt_preset:sample>
  49.  
  50. Requires:
  51. - RPG Maker VX Ace
  52.  
  53. Terms of Use:
  54. - Attribution 3.0 Unported (CC BY 3.0)
  55.   http://creativecommons.org/licenses/by/3.0/
  56. - Credit: Napoleon Dutch
  57.  
  58. Version History:
  59. 1.03 (8 June 2014)
  60.   - Added compatibility for Khas new lighting script.
  61.   - Most modications for this specific version were made by Khas himself.
  62.   - Removed a debug message.
  63. 1.02 (18 May 2014)
  64.   - Added Presets.
  65. 1.01 (16 Januari 2014)
  66.   - Added Z-index setting.
  67. 1.00 (02 Januari 2014)
  68.   - First Release.
  69. #===============================================================================
  70. =end
  71. $imported ||= {}
  72. $imported[:nap_ev_text] = 1.03
  73. p $imported
  74. #===============================================================================
  75. # Configurable section
  76. #===============================================================================
  77. module NAP_EV_TEXT_CONF
  78.   Z_INDEX               = 99 # Use a nil value to use the
  79.                              # Sprite_Character's z-index.
  80.                              # Note: Window_Base has a Z-index of 100.
  81.   COMMENT_TAG           = 'evtxt' # Do not use '<' or '>' characters!
  82.   DEFAULT_FONT_NAME     = 'Arial'
  83.   DEFAULT_FONT_SIZE     = 20
  84.   DEFAULT_FONT_BOLD     = true
  85.   DEFAULT_FONT_ITALIC   = false
  86.   DEFAULT_FONT_OUTLINE  = true
  87.   DEFAULT_FONT_SHADOW   = true
  88.  
  89.   DEFAULT_FG_COLOR  = Color.new(255, 255, 255, 255)
  90.   DEFAULT_BG_COLOR  = Color.new(0, 0, 0, 0) # Color.new(128,128,128,128) # transparent gray
  91.   DEFAULT_OUT_COLOR = Color.new(128, 0, 128, 255)
  92.  
  93.   PRESETS = {
  94.     :Sample => { # All entries are optional. Entries that are not supplied are set to the default.
  95.       :name      => 'Times New Roman',
  96.       :size      => 20,
  97.       :bold      => false,
  98.       :outline   => true,
  99.       :shadow    => true,
  100.       :fg_color  => Color.new(255, 255, 255, 255),
  101.       :bg_color  => Color.new(0, 0, 0, 0),
  102.       :out_color => Color.new(64, 30, 96, 160)
  103.     },
  104.     :Sample2 => {
  105.       :name      => 'Arial',
  106.       :size      => 24,
  107.       :bold      => true,
  108.       :outline   => true,
  109.       :shadow    => true,
  110.       :fg_color  => Color.new(190, 255, 128, 255),
  111.       :bg_color  => Color.new(0, 0, 0, 0),
  112.       :out_color => Color.new(128, 0, 128, 255)
  113.     },
  114.   }
  115. end
  116. #===============================================================================
  117. # Below is to make this script standalone from Napoleons Core Script
  118. #===============================================================================
  119. if !$imported[:nap_core] || $imported[:nap_core] < 1.05
  120. # Global bitmap just for measuring text size
  121.   # DO NOT FORGET to change the font size and stuff before measuring!
  122.   $txt_measure_bmp = Bitmap.new(1,1)
  123.  
  124.   class Game_CharacterBase
  125.     @@sprites = {}
  126.    
  127.     def sprite
  128.       @@sprites[self]
  129.     end
  130.    
  131.     def register_sprite(s)
  132.       @@sprites[self] = s
  133.     end
  134.    
  135.     def detach_sprite
  136.       @@sprites.delete(self)
  137.     end
  138.   end
  139. end
  140.  
  141. if $khas_graphics
  142.   class Texture_Character
  143.     alias init_mith_charref initialize
  144.     def initialize(*args)
  145.       init_mith_charref(*args)
  146.       @character.register_sprite(self) if @character
  147.     end
  148.    
  149.     alias character_set_mith_charref character=
  150.     def character=(char)
  151.       @character.detach_sprite if @character
  152.       character_set_mith_charref(char)
  153.       @character.register_sprite(self) if @character    
  154.     end
  155.   end # class Sprite_Character
  156. elsif !$imported[:nap_core] || $imported[:nap_core] < 1.05
  157.   class Sprite_Character
  158.     alias init_mith_charref initialize
  159.     def initialize(*args)
  160.       init_mith_charref(*args)
  161.       @character.register_sprite(self) if @character
  162.     end
  163.    
  164.     alias character_set_mith_charref character=
  165.     def character=(char)
  166.       @character.detach_sprite if @character
  167.       character_set_mith_charref(char)
  168.       @character.register_sprite(self) if @character    
  169.     end
  170.   end # class Sprite_Character
  171. end # if $khas_graphics
  172. #===============================================================================
  173. # Sprite/Texture Character
  174. #===============================================================================
  175. if $khas_graphics
  176.   class Texture_Character
  177.     attr_accessor :ev_text_sprite
  178.     attr_accessor :ev_text_options
  179.     attr_accessor :ev_text_text
  180.    
  181.     alias nap_ev_text_initialize initialize
  182.     def initialize(*args)
  183.       nap_ev_text_initialize(*args)
  184.       nap_ev_text_reset_options
  185.     end
  186.    
  187.     def nap_ev_text_reset_options
  188.       @ev_text_options = {
  189.         :name      => NAP_EV_TEXT_CONF::DEFAULT_FONT_NAME,
  190.         :size      => NAP_EV_TEXT_CONF::DEFAULT_FONT_SIZE,
  191.         :bold      => NAP_EV_TEXT_CONF::DEFAULT_FONT_BOLD,
  192.         :italic    => NAP_EV_TEXT_CONF::DEFAULT_FONT_ITALIC,
  193.         :outline   => NAP_EV_TEXT_CONF::DEFAULT_FONT_OUTLINE,
  194.         :shadow    => NAP_EV_TEXT_CONF::DEFAULT_FONT_SHADOW,
  195.         :fg_color  => NAP_EV_TEXT_CONF::DEFAULT_FG_COLOR,    
  196.         :bg_color  => NAP_EV_TEXT_CONF::DEFAULT_BG_COLOR,
  197.         :out_color => NAP_EV_TEXT_CONF::DEFAULT_OUT_COLOR
  198.       }
  199.     end
  200.    
  201.     def nap_ev_set_text(text)    
  202.       @ev_text_text = text    
  203.       nap_ev_refresh
  204.     end
  205.    
  206.     def nap_ev_refresh
  207.       # If there already is a text in place then it will be overwritten.
  208.       @ev_text_sprite.dispose if @ev_text_sprite
  209.      
  210.       # Do not create a (new) sprite if the text is nil (means that we want to erase it)
  211.       if @ev_text_text.nil?
  212.         @ev_text_sprite = nil
  213.         return
  214.       end
  215.      
  216.       # Create sprite
  217.       @ev_text_sprite = Sprite.new
  218.      
  219.       # Z-index
  220.       if NAP_EV_TEXT_CONF::Z_INDEX
  221.         @ev_text_sprite.z = NAP_EV_TEXT_CONF::Z_INDEX
  222.       else
  223.         @ev_text_sprite.z = @z
  224.       end
  225.      
  226.       # Measure text size
  227.       nap_ev_text_apply_font($txt_measure_bmp)
  228.       txt_size = $txt_measure_bmp.text_size(@ev_text_text)
  229.      
  230.       # Create & render on bitmap
  231.       @ev_text_sprite.bitmap = Bitmap.new(txt_size.width, txt_size.height)
  232.       nap_ev_text_apply_font(@ev_text_sprite.bitmap)
  233.       @ev_text_sprite.bitmap.fill_rect(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_options[:bg_color])
  234.       @ev_text_sprite.bitmap.draw_text(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_text, 1)
  235.     end
  236.    
  237.     def nap_ev_text_apply_font(bitmap)    
  238.       bitmap.font = Font.new(@ev_text_options[:name], @ev_text_options[:size])
  239.       bitmap.font.bold      = @ev_text_options[:bold]
  240.       bitmap.font.italic    = @ev_text_options[:italic]
  241.       bitmap.font.outline   = @ev_text_options[:outline]
  242.       bitmap.font.shadow    = @ev_text_options[:shadow]
  243.       bitmap.font.color     = @ev_text_options[:fg_color]
  244.       bitmap.font.out_color = @ev_text_options[:out_color]
  245.     end
  246.    
  247.     alias nap_ev_text_update update
  248.     def update
  249.       nap_ev_text_update
  250.       return if !@ev_text_sprite
  251.      
  252.       nap_ev_text_update_location
  253.     end
  254.    
  255.     def nap_ev_text_update_location
  256.       @ev_text_sprite.x = @x - @ev_text_sprite.width / 2
  257.       @ev_text_sprite.y = @y - @rh - @ev_text_sprite.height
  258.     end
  259.  
  260.     alias nap_ev_text_dispose dispose
  261.     def dispose
  262.       @ev_text_sprite.dispose if @ev_text_sprite
  263.       nap_ev_text_dispose
  264.     end
  265.   end
  266. else
  267.   class Sprite_Character < Sprite_Base
  268.     attr_accessor :ev_text_sprite
  269.     attr_accessor :ev_text_options
  270.     attr_accessor :ev_text_text
  271.    
  272.     alias nap_ev_text_initialize initialize
  273.     def initialize(*args)
  274.       nap_ev_text_initialize(*args)
  275.       nap_ev_text_reset_options
  276.     end
  277.    
  278.     def nap_ev_text_reset_options
  279.       @ev_text_options = {
  280.         :name      => NAP_EV_TEXT_CONF::DEFAULT_FONT_NAME,
  281.         :size      => NAP_EV_TEXT_CONF::DEFAULT_FONT_SIZE,
  282.         :bold      => NAP_EV_TEXT_CONF::DEFAULT_FONT_BOLD,
  283.         :italic    => NAP_EV_TEXT_CONF::DEFAULT_FONT_ITALIC,
  284.         :outline   => NAP_EV_TEXT_CONF::DEFAULT_FONT_OUTLINE,
  285.         :shadow    => NAP_EV_TEXT_CONF::DEFAULT_FONT_SHADOW,
  286.         :fg_color  => NAP_EV_TEXT_CONF::DEFAULT_FG_COLOR,    
  287.         :bg_color  => NAP_EV_TEXT_CONF::DEFAULT_BG_COLOR,
  288.         :out_color => NAP_EV_TEXT_CONF::DEFAULT_OUT_COLOR
  289.       }
  290.     end
  291.    
  292.     def nap_ev_set_text(text)    
  293.       @ev_text_text = text    
  294.       nap_ev_refresh
  295.     end
  296.    
  297.     def nap_ev_refresh
  298.       # If there already is a text in place then it will be overwritten.
  299.       @ev_text_sprite.dispose if @ev_text_sprite
  300.      
  301.       # Do not create a (new) sprite if the text is nil (means that we want to erase it)
  302.       if @ev_text_text.nil?
  303.         @ev_text_sprite = nil
  304.         return
  305.       end
  306.      
  307.       # Create sprite
  308.       @ev_text_sprite = Sprite.new
  309.      
  310.       # Z-index
  311.       if NAP_EV_TEXT_CONF::Z_INDEX
  312.         @ev_text_sprite.z = NAP_EV_TEXT_CONF::Z_INDEX
  313.       else
  314.         @ev_text_sprite.z = z
  315.       end
  316.      
  317.       # Measure text size
  318.       nap_ev_text_apply_font($txt_measure_bmp)
  319.       txt_size = $txt_measure_bmp.text_size(@ev_text_text)
  320.      
  321.       # Create & render on bitmap
  322.       @ev_text_sprite.bitmap = Bitmap.new(txt_size.width, txt_size.height)
  323.       nap_ev_text_apply_font(@ev_text_sprite.bitmap)
  324.       @ev_text_sprite.bitmap.fill_rect(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_options[:bg_color])
  325.       @ev_text_sprite.bitmap.draw_text(0, 0, @ev_text_sprite.bitmap.width, @ev_text_sprite.bitmap.height, @ev_text_text, 1)
  326.     end
  327.    
  328.     def nap_ev_text_apply_font(bitmap)    
  329.       bitmap.font = Font.new(@ev_text_options[:name], @ev_text_options[:size])
  330.       bitmap.font.bold      = @ev_text_options[:bold]
  331.       bitmap.font.italic    = @ev_text_options[:italic]
  332.       bitmap.font.outline   = @ev_text_options[:outline]
  333.       bitmap.font.shadow    = @ev_text_options[:shadow]
  334.       bitmap.font.color     = @ev_text_options[:fg_color]
  335.       bitmap.font.out_color = @ev_text_options[:out_color]
  336.     end
  337.    
  338.     alias nap_ev_text_update update
  339.     def update
  340.       nap_ev_text_update
  341.       return if !@ev_text_sprite
  342.      
  343.       nap_ev_text_update_location
  344.     end
  345.    
  346.     def nap_ev_text_update_location
  347.       @ev_text_sprite.x = x - @ev_text_sprite.width / 2
  348.       @ev_text_sprite.y = y - height - @ev_text_sprite.height
  349.     end
  350.  
  351.     alias nap_ev_text_dispose dispose
  352.     def dispose
  353.       @ev_text_sprite.dispose if @ev_text_sprite
  354.       nap_ev_text_dispose
  355.     end
  356.   end
  357. end
  358. #===============================================================================
  359. # Game Event
  360. #===============================================================================
  361. class Game_Event < Game_Character
  362.   alias nap_ev_text_setup_page_settings setup_page_settings
  363.   def setup_page_settings
  364.     nap_ev_text_setup_page_settings
  365.     nap_ev_text_commenttag
  366.   end  
  367.  
  368.   def nap_ev_text_load_preset(preset_sym)
  369.     raise "Nap Event Text Error. Preset symbol: \"#{preset_sym}\" not found for event with id: \"#{@id}\" " if !NAP_EV_TEXT_CONF::PRESETS.has_key?(preset_sym)
  370.     self.sprite.nap_ev_text_reset_options
  371.    
  372.     NAP_EV_TEXT_CONF::PRESETS[preset_sym].each { |k, v| self.sprite.ev_text_options[k] = NAP_EV_TEXT_CONF::PRESETS[preset_sym][k] }
  373.   end
  374.  
  375.   def nap_ev_text_commenttag
  376.     return if self.list.nil?
  377.    
  378.     sprite_character = self.sprite
  379.     return if !sprite_character
  380.    
  381.     preset_found = false
  382.     for command in self.list
  383.       if command.code == 108
  384.        
  385.         # set text
  386.         if command.parameters[0] =~ /<#{NAP_EV_TEXT_CONF::COMMENT_TAG}:(.*?)>/ix
  387.           sprite_character.nap_ev_set_text($1)
  388.         end
  389.        
  390.         # Preset
  391.         if command.parameters[0] =~ /<evtxt_preset:(.*?)>/ix
  392.           nap_ev_text_load_preset($1.to_sym)
  393.           refresh = true
  394.         end
  395.        
  396.         if !preset_found
  397.           # options
  398.           refresh = false
  399.           if command.parameters[0] =~ /<evtxt_name:(.*?)>/ix
  400.             sprite_character.ev_text_options[:name] = $1.strip
  401.             refresh = true
  402.           end
  403.           if command.parameters[0] =~ /<evtxt_font_size:(.*?)>/ix
  404.             sprite_character.ev_text_options[:size] = $1.strip.to_i
  405.             refresh = true
  406.           end
  407.           if command.parameters[0] =~ /<evtxt_bold:(.*?)>/ix
  408.             sprite_character.ev_text_options[:bold] = $1.strip.downcase == 'true'
  409.             refresh = true
  410.           end
  411.           if command.parameters[0] =~ /<evtxt_italic:(.*?)>/ix
  412.             sprite_character.ev_text_options[:italic] = $1.strip.downcase == 'true'
  413.             refresh = true
  414.           end
  415.           if command.parameters[0] =~ /<evtxt_outline:(.*?)>/ix
  416.             sprite_character.ev_text_options[:outline] = $1.strip.downcase == 'true'
  417.             refresh = true
  418.           end
  419.           if command.parameters[0] =~ /<evtxt_shadow:(.*?)>/ix
  420.             sprite_character.ev_text_options[:shadow] = $1.strip.downcase == 'true'
  421.             refresh = true
  422.           end
  423.           if command.parameters[0] =~ /<evtxt_fg_color:(.*?)>/ix
  424.             sprite_character.ev_text_options[:fg_color] = nap_ev_text_str2Color($1)
  425.             refresh = true
  426.           end
  427.           if command.parameters[0] =~ /<evtxt_bg_color:(.*?)>/ix
  428.             sprite_character.ev_text_options[:bg_color] = nap_ev_text_str2Color($1)
  429.             refresh = true
  430.           end
  431.           if command.parameters[0] =~ /<evtxt_out_color:(.*?)>/ix
  432.             sprite_character.ev_text_options[:out_color] = nap_ev_text_str2Color($1)
  433.             refresh = true
  434.           end
  435.         end
  436.      
  437.         sprite_character.nap_ev_refresh if refresh
  438.       end
  439.     end
  440.   end # nap_ev_text_commenttag
  441.  
  442.   def nap_ev_text_str2Color(str)
  443.     s = str.clone
  444.     s.delete!(' ')
  445.     s = s.split(',')
  446.     raise "ERROR: nap_ev_text_str2Color(#{str}) does not contain 4 integer values!" if s.length < 4
  447.     return Color.new(s[0].to_i, s[1].to_i, s[2].to_i, s[3].to_i)
  448.   end
  449. end # class Game_Event < Game_Character
  450. #===============================================================================
  451. # Game Interpreter
  452. # For: Adding commands
  453. #===============================================================================
  454. class Game_Interpreter
  455.   def nap_ev_text(ev_id, text)
  456.     return if !SceneManager.scene.is_a?(Scene_Map) || !SceneManager.scene.spriteset
  457.     $game_map.events[ev_id].sprite.nap_ev_set_text(text)
  458.   end
  459.  
  460.   def nap_ev_erase_text(ev_id)
  461.     return if !SceneManager.scene.is_a?(Scene_Map) || !SceneManager.scene.spriteset
  462.     $game_map.events[ev_id].sprite.nap_ev_set_text(nil)
  463.   end
  464.  
  465.   def nap_ev_conf(ev_id, hash)
  466.     $game_map.events[ev_id].sprite.ev_text_options[:name] = hash[:name] if hash.has_key?(:name)
  467.     $game_map.events[ev_id].sprite.ev_text_options[:size] = hash[:size] if hash.has_key?(:size)
  468.     $game_map.events[ev_id].sprite.ev_text_options[:bold] = hash[:bold] if hash.has_key?(:bold)
  469.     $game_map.events[ev_id].sprite.ev_text_options[:italic] = hash[:italic] if hash.has_key?(:italic)
  470.     $game_map.events[ev_id].sprite.ev_text_options[:outline] = hash[:outline] if hash.has_key?(:outline)
  471.     $game_map.events[ev_id].sprite.ev_text_options[:shadow] = hash[:shadow] if hash.has_key?(:shadow)
  472.     $game_map.events[ev_id].sprite.ev_text_options[:fg_color] = hash[:fg_color] if hash.has_key?(:fg_color)
  473.     $game_map.events[ev_id].sprite.ev_text_options[:out_color] = hash[:out_color] if hash.has_key?(:out_color)
  474.     $game_map.events[ev_id].sprite.ev_text_options[:bg_color] = hash[:bg_color] if hash.has_key?(:bg_color)
  475.        
  476.     $game_map.events[ev_id].sprite.nap_ev_refresh
  477.   end
  478. end
  479. #===============================================================================
  480. # Class Spriteset Map
  481. # For: Showing the texts when the map starts. The initial setup_page_settings
  482. #      is called before the map-scene is activated (like if the player came from
  483. #      the title-scene or another map) and therefor could have the wrong or none
  484. #      Spriteset set.
  485. #===============================================================================
  486. class Spriteset_Map
  487.  alias nap_ev_text_create_characters create_characters
  488.  def create_characters
  489.    nap_ev_text_create_characters
  490.    $game_map.events.each{ |ev| ev[1].nap_ev_text_commenttag } # array note: [0] = id, [1] = event
  491.  end
  492. end
  493. #===============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement