# * KEvents XP # v 0.6.2 - 2017-08-02 # Scripter : Kyonides-Arkanthos # This scriptlet allows you to show names and icons over an NPC head. # To show an icon you just need to enter any of the following OPTIONS: # New Quest, Rewards, Failure, Shop, Inn, Broken Heart, Love, Angry, Cool, # Deadly, Help, Stop, Fine # ...as a comment on top of the event page. # In case you need to enter an event name you have to ways to do it. The first # ones is to just enter Name and event name will be taken from the event name # box. The other one would be to enter the name as a comment. # Follow any of the next two examples: # Name: Jay Garrick # Name: Speedster,Barry Allen # The only difference is the latter will separate the name in two lines. # You may use . or , or : or ; as the separator. # Name: \c1Speedster,Wally West # \c - Change Font Color, 1 - Color Option 1 - some sort of blue # Option Range: 0 through 10, include no color or 1 color per line. # Read Constant COLORS comments for more info regarding Color Options. # If you prefer to change the font name then just leave another comment below # the event name that says: Font Your Font Name # Setup a New Font Size: FontSize 15 # Setup New Font Weight: Bold # Setup Italic Font Style: Italic # Setup All of Them: FontSize 15 Italic Bold # Any icon will be disposed if the event activates any other page, to prevent # this from happening, copy and paste the same comment on the new page. # # Script Calls # # # Show Event Name (if hidden) # # KEvents.show_name(Event_ID) # Hide Event Name (Temporarily?) # # KEvents.hide_name(Event_ID) # Dispose Event Name # # KEvents.dispose_name(Event_ID) # Show Event Names and Icons (if hidden) # # KEvents.show_names_icons # Hide Event Names and Icons (Temporarily?) # # KEvents.hide_names_icons # Show Icon while not activating next event page (temporarily) # # Options: Check lines 7 and 8, ie. 'New Quest' # KEvents.show_icon(Event_ID, Option, Keep_Icon) # (Keep_Icon is optional and should be assigned a true or false value) # Dispose Icon while not activating next event page (Permanent and Temporary)# # KEvents.dispose_icon(Event_ID) # KEvents.dispose_icon(Event_ID, nil) # # Calls Available If KMessage XP (0.5.x) script is Included # # # Show Icon starting at any particular dialog window # # Options: 0 - New Quest, 1 - Rewards, 2 - Failure, 3 - Shop, 4 - Inn # 5 - Broken Heart, 6 - Love, 7 - Angry, 8 - Cool # \SI[Option] o \si[Option] # Dispose Icon once any particular dialog window closes # # 0_or_1 stand for: 0 - temporary, 1 - permanent # \DI[0_or_1] o \di[0_or_1] module KEvents # Options for displaying Event Name and Icons OPTIONS = {} # Do Not Edit This Line OPTIONS[:'New Quest'] = '038-Item07' OPTIONS[:'Rewards'] = '032-Item01' OPTIONS[:'Failure'] = 'cancel' # Failed Mission OPTIONS[:'Shop'] = '034-Item03' OPTIONS[:'Inn'] = '031-Key03' OPTIONS[:'Broken Heart'] = 'broken heart' OPTIONS[:'Love'] = 'heart small' OPTIONS[:'Angry'] = 'smiley angry' OPTIONS[:'Cool'] = 'smiley cool' OPTIONS[:'Deadly'] = '046-Skill03' OPTIONS[:'Help'] = 'help' OPTIONS[:'Stop'] = 'stop' OPTIONS[:'Fine'] = 'tick' COLORS = [] # Colors for Names - Do Not Edit This Line COLORS[0] = Color.new(255, 255, 255) # White - Default Color COLORS[1] = Color.new(128, 128, 255) # Blue? COLORS[2] = Color.new(255, 128, 128) # Red? COLORS[3] = Color.new(128, 255, 128) # Green COLORS[4] = Color.new(128, 255, 255) # Skyblue COLORS[5] = Color.new(255, 128, 255) # Fuchsia COLORS[6] = Color.new(255, 255, 128) # Yellow? COLORS[7] = Color.new(192, 192, 192) # Gray COLORS[8] = Color.new(192, 224, 255, 255) # Skyblue 2 COLORS[9] = Color.new(255, 255, 64, 255) # Yellow 2 COLORS[19] = Color.new(255, 64, 0) # Red 2 # Do Not Edit Anything Else # @map_events = [] @show_all = true class << self attr_accessor :refresh attr_reader :map_events, :show_all end module_function def add_map_event(event) @map_events << event @map_events = @map_events.uniq end def add_icon_event(event, tag) @map_icons[$game_map.map_id] ||= {} @map_icons[$game_map.map_id][event.id] = tag end def show_names_icons $game_system.show_names_icons = true @map_events.each {|e| e.show_name e.show_icon_only } end def hide_names_icons $game_system.show_names_icons = false @map_events.each {|e| e.hide_name e.hide_icon } end def show_icons $game_system.show_names_icons = true @map_events.each {|e| e.show_icon_only } end def dispose_icon(id, prm=true) $game_map.events[id].dispose_icon(prm) icons = KEvents.map_icons[$game_map.map_id] || {} icons.delete id end def show_icon(id, tag, keep=nil) $game_map.events[id].show_icon(tag, keep) end def show_name(id) $game_map.events[id].show_name end def hide_name(id) $game_map.events[id].hide_name end def dispose_name(id) $game_map.events[id].dispose_name end end class Game_System attr_accessor :show_names_icons attr_reader :erased_event_icons, :temp_event_icons alias kyon_kevents_gm_sys_init initialize def initialize @erased_event_icons = {} @temp_event_icons = {} @erased_event_icons.default = [] @temp_event_icons.default = [] @show_names_icons = true kyon_kevents_gm_sys_init end def clear_map_event_icons map_id = $game_map.map_id @erased_event_icons[map_id] = [] @temp_event_icons[map_id] = [] end end class Game_Character attr_accessor :event_name_mode, :event_name, :event_icon_mode, :event_icon attr_accessor :event_name_colors, :event_name_font, :event_name_fontsize attr_accessor :event_name_font_bold, :event_name_font_italic, :keep_erased attr_accessor :event_name_refresh end class Game_Event def name() @event.name end def show_sprites return unless @list temp_icons = $game_system.temp_event_icons[$game_map.map_id] erased_icons = $game_system.erased_event_icons[$game_map.map_id] page_index = @event.pages.index(@page) prev_icon = temp_icons.include?(@event.id) erase_i = erased_icons.include?([@event.id, page_index]) codes = [108, 408] new_list = @list.select{|list| codes.include?(list.code) } new_list.each {|list| list.parameters.each {|prm| if (prm =~ /\w+:/) == 0 a_name = (prm =~ /: [\\\w+]/) == nil ? @event.name : prm.sub(/\w+: /,'') @event_name_colors = a_name.scan(/\\c\d+/).map{|d| d[2..-1].to_i } @event_name_colors = [0, 0] if @event_name_colors.empty? @event_name = a_name.gsub(/\\c\d+/,'').split(/\.|,|:|;/) @event_name_mode = :make @event_name_refresh = true next end if prm.include?('Font ') @event_name_font = prm.sub('Font ','') next end @event_name_fontsize = prm.scan(/\d+/)[0].to_i if prm.include?('FontSize') @event_name_font_bold = true if prm.include?('Bold') @event_name_font_italic = true if prm.include?('Italic') if !prev_icon and (current_icon = KEvents::OPTIONS[prm.to_sym]) @event_icon_mode = :make @event_icon = current_icon next end } } KEvents.add_map_event(self) if @event_name_mode or @event_icon_mode show_icon(@current_tag) if prev_icon dispose_icon unless @event_icon_mode or prev_icon or erase_i end def show_icon(tag, keep=nil) current_tag = tag.to_sym @current_tag = current_tag if @current_tag != current_tag @event_icon_mode = :make @event_icon = KEvents::OPTIONS[@current_tag] mid = $game_map.map_id $game_system.temp_event_icons[mid] << [@event.id, @current_tag] $game_system.temp_event_icons[mid] = $game_system.temp_event_icons[mid].uniq KEvents.add_icon_event(self, @current_tag) if keep end def dispose_icon(erase=nil) @event_icon_show = :dispose @event_icon = nil return unless erase page_index = @event.pages.index(@page) $game_system.erased_event_icons[$game_map.map_id] << [@event.id, page_index] end def show_name @event_name_mode = :show @event_name_refresh = true end def hide_name @event_name_mode = :hide @event_name_refresh = true end def show_icon_only() @event_icon_mode = :show end def hide_icon() @event_icon_mode = :hide end def dispose_name @event_name_mode = :dispose @event_name = nil @event_name_refresh = true end def clear_name_flags @event_name_refresh = false @event_name_font_bold = false @event_name_font_italic = false end def refresh new_page = get_current_page return if new_page == @page @page = new_page clear_starting return clear_variables if @page == nil @tile_id = @page.graphic.tile_id @character_name = @page.graphic.character_name @character_hue = @page.graphic.character_hue if @original_direction != @page.graphic.direction @direction = @page.graphic.direction @original_direction = @direction @prelock_direction = 0 end if @original_pattern != @page.graphic.pattern @pattern = @page.graphic.pattern @original_pattern = @pattern end @opacity = @page.graphic.opacity @blend_type = @page.graphic.blend_type @move_type = @page.move_type @move_speed = @page.move_speed @move_frequency = @page.move_frequency @move_route = @page.move_route @move_route_index = 0 @move_route_forcing = false @walk_anime = @page.walk_anime @step_anime = @page.step_anime @direction_fix = @page.direction_fix @through = @page.through @always_on_top = @page.always_on_top @trigger = @page.trigger @list = @page.list show_sprites @interpreter = nil @interpreter = Interpreter.new if @trigger == 4 check_event_trigger_auto end def get_current_page for page in @event.pages.reverse c = page.condition if c.switch1_valid next unless $game_switches[c.switch1_id] end if c.switch2_valid next unless $game_switches[c.switch2_id] end if c.variable_valid next if $game_variables[c.variable_id] < c.variable_value end if c.self_switch_valid key = [@map_id, @event.id, c.self_switch_ch] next unless $game_self_switches[key] end return page end end def clear_variables @tile_id = 0 @character_name = "" @character_hue = 0 @move_type = 0 @through = true @trigger = nil @list = nil @interpreter = nil @event_name_mode = :dispose @event_icon_show = :dispose end end class Game_Map alias kyon_kevents_gm_map_setup setup def setup(map_id) KEvents.map_events.clear $game_system.erased_event_icons[map_id] ||= [] kyon_kevents_gm_map_setup(map_id) end def setup_event_sprites @events.each {|k, e| e.show_sprites } map_icons = KEvents.map_icons[@map_id] || {} map_icons.each {|eid, tag| @events[eid].show_icon(tag) } end end class Sprite_Character alias kyon_kevents_sprite_char_up update alias kyon_kevents_sprite_char_dispose dispose def update kyon_kevents_sprite_char_up if @character.event_name_refresh mode = @character.event_name_mode mode = :make if !@_name_sprite and mode == :show case mode when :make then make_event_name when :show then @_name_sprite.visible = true when :hide then @_name_sprite.visible = false if @_name_sprite when :dispose then dispose_event_name end @character.clear_name_flags end if @_name_sprite @_name_sprite.x = self.x - 70 @_name_sprite.y = self.y - @ch * 2 end if @character.event_icon_mode mode = @character.event_icon_mode mode = :make if !@_icon_sprite and mode == :show case mode when :make then make_icon when :show then @_icon_sprite.visible = true when :hide then @_icon_sprite.visible = false if @_icon_sprite when :dispose then dispose_icon end @character.event_icon_mode = nil end place_icon if @_icon_sprite end def make_event_name names = @character.event_name colors = @character.event_name_colors font = @character.event_name_font fontsize = @character.event_name_fontsize unless @_name_sprite @_name_sprite = RPG::Sprite.new @_name_sprite.x = self.x - 70 @_name_sprite.y = self.y - @ch * 2 end @_name_sprite.visible = $game_system.show_names_icons @_name_sprite.bitmap.dispose if @_name_sprite.bitmap @_name_sprite.bitmap = bitmap = Bitmap.new(140, 52) bitmap.font.name = font ? font : "Arial" bitmap.font.size = fontsize ? fontsize : 18 bitmap.font.bold = @character.event_name_font_bold bitmap.font.italic = @character.event_name_font_italic bitmap.font.color.set(60, 60, 0) name = names.shift color = colors.shift if names.size == 2 unless fontsize and fontsize > 11 bitmap.draw_text(-1, 11, 140, 22, name, 1) bitmap.draw_text(+1, 11, 140, 22, name, 1) end bitmap.draw_text(-1, 13, 140, 22, name, 1) bitmap.draw_text(+1, 13, 140, 22, name, 1) bitmap.font.color = KEvents::COLORS[color] bitmap.draw_text(0, 12, 140, 22, name, 1) name = names.shift color = colors.shift end bitmap.font.color.set(60, 60, 0) unless fontsize and fontsize > 11 bitmap.draw_text(-1, 11, 140, 48, name, 1) bitmap.draw_text(+1, 11, 140, 48, name, 1) end bitmap.draw_text(-1, 13, 140, 48, name, 1) bitmap.draw_text(+1, 13, 140, 48, name, 1) color = 0 if color == nil bitmap.font.color = KEvents::COLORS[color] bitmap.draw_text(0, 12, 140, 48, name, 1) end def dispose_event_name return unless @_name_sprite @_name_sprite.bitmap.dispose @_name_sprite.dispose @_name_sprite = nil end def make_icon return dispose_icon unless @character.event_icon @_icon_sprite.bitmap.dispose if @_icon_sprite @_icon_sprite = RPG::Sprite.new @_icon_sprite.visible = $game_system.show_names_icons @_icon_sprite.bitmap = bit = RPG::Cache.icon(@character.event_icon).dup place_icon end def place_icon @_icon_sprite.x = self.x - (@_icon_sprite.bitmap.width == 24 ? 13 : 16) icon_y = @_icon_sprite.bitmap.height == 24 ? 12 : 20 ih = @_name_sprite ? @ch * 2 : @ch + 8 @_icon_sprite.y = self.y - icon_y - ih end def dispose_icon return unless @_icon_sprite @_icon_sprite.bitmap.dispose @_icon_sprite.dispose @_icon_sprite = nil end def dispose dispose_event_name dispose_icon kyon_kevents_sprite_char_dispose end end class Scene_Title alias kyon_kevents_scn_title_cng command_new_game def command_new_game KEvents.map_icons.clear kyon_kevents_scn_title_cng end end class Scene_Map alias kyon_kevents_scn_map_main main alias kyon_kevents_scn_map_call_battle call_battle alias kyon_kevents_scn_map_call_shop call_shop alias kyon_kevents_scn_map_call_name call_name alias kyon_kevents_scn_map_call_menu call_menu alias kyon_kevents_scn_map_call_save call_save def main if KEvents.refresh $game_map.setup_event_sprites KEvents.refresh = nil end KEvents.hide_names_icons unless KEvents.show_all kyon_kevents_scn_map_main KEvents.refresh = true unless $scene == nil end def call_battle KEvents.refresh = true kyon_kevents_scn_map_call_battle end def call_shop KEvents.refresh = true kyon_kevents_scn_map_call_shop end def call_name KEvents.refresh = true kyon_kevents_scn_map_call_name end def call_menu KEvents.refresh = true kyon_kevents_scn_map_call_menu end def call_save KEvents.refresh = true kyon_kevents_scn_map_call_save end def transfer_player $game_temp.player_transferring = false if (new_map = $game_map.map_id != $game_temp.player_new_map_id) $game_map.setup($game_temp.player_new_map_id) end $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y) case $game_temp.player_new_direction when 2 then $game_player.turn_down when 4 then $game_player.turn_left when 6 then $game_player.turn_right when 8 then $game_player.turn_up end $game_player.straighten $game_map.update @spriteset.dispose @spriteset = Spriteset_Map.new $game_map.setup_event_sprites unless new_map if $game_temp.transition_processing $game_temp.transition_processing = false Graphics.transition(20) end $game_map.autoplay Graphics.frame_reset Input.update end end class Scene_Load alias kyon_kevents_scn_load_rsd read_save_data def read_save_data(file) kyon_kevents_scn_load_rsd(file) $game_map.setup_event_sprites end end