#=============================================================================== # Klein Footprints / WolfPP for Pokémon Essentials # Give credits if you're using this! # http://kleinstudio.deviantart.com # # bo4p5687 update (v.19) #=============================================================================== # Fix event comment def pbEventCommentInput(*args) parameters = [] list = *args[0].list # Event or event page elements = *args[1] # Number of elements trigger = *args[2] # Trigger return nil if list == nil return nil unless list.is_a?(Array) for item in list next unless item.code == 108 || item.code == 408 if item.parameters[0] == trigger[0] start = list.index(item) + 1 finish = start + elements[0] for id in start...finish next if !list[id] parameters.push(list[id].parameters[0]) end return parameters end end return nil end module FootprintVariables # If you set pokemon here, they doesn't have footprints FOLLOWING_DONT_WALK = [ # Example: # 12,15,17 ] # Set here the terrain tag for footprints, 3 is sand TERRAIN_FOOT = 3 # Initial opacity for footprints FOOT_OPACITY = 62 # Delay velocity FOOT_DELAY = 1.1 def self.get_new_id newId = 1 while !$game_map.events[newId].nil? do break if $game_map.events[newId].erased newId += 1 end return newId end def self.show(event, position) if event != $game_player return if event.character_name == "" || event.character_name == "nil" || event.name.include?("/nofoot/") return if pbEventCommentInput(event, 0, "NoFoot") if $Trainer.party.length > 0 return if (!($game_map.events[event] && $game_map.events[event].name == "Dependent") && (FOLLOWING_DONT_WALK.include?($Trainer.party[0].species) || $PokemonGlobal.bicycle)) end end character_sprites = $scene.spriteset.character_sprites viewport = $scene.spriteset.viewport1 footsprites = $scene.spriteset.footsprites nid = self.get_new_id rpgEvent = RPG::Event.new(position[0], position[1]) rpgEvent.id = nid fev = Game_Event.new($game_map.map_id, rpgEvent, $game_map) eventsprite = Sprite_Character.new(viewport, fev) character_sprites.push(eventsprite) footsprites.push(Footsprite.new(eventsprite, fev, viewport, $game_map, position[2], nid, character_sprites, (event==$game_player))) end end class Game_Event < Game_Character attr_reader :erased end class Sprite_Character alias old_initialize_foot initialize def initialize(viewport, character=nil) old_initialize_foot(viewport, character) @disposed = false end alias old_update_foot update def update return if @disposed old_update_foot end alias old_dispose_foot dispose def dispose old_dispose_foot @disposed = true end end class Spriteset_Map attr_accessor :character_sprites attr_accessor :footsprites alias old_initialize initialize def initialize(map=nil) old_initialize(map) @footsprites = [] end def viewport1 return @@viewport1 end def putFootprint(event, pos) return FootprintVariables.show(event, pos) end alias old_dispose dispose def dispose old_dispose @footsprites.each { |sprite| sprite.dispose } if !@footsprites.nil? @footsprites.clear end alias old_update update def update old_update return if @footsprites.nil? @footsprites.each { |sprite| sprite.update } end end class Scene_Map def spriteset? return !@spritesets.nil? end end class Game_Character def get_last_pos case direction when 2 then return [@x, @y-1, direction] # Move down when 4 then return [@x+1, @y, direction] # Move left when 6 then return [@x-1, @y, direction] # Move right when 8 then return [@x, @y+1, direction] # Move up end return false end def foot_prints? return $game_map.terrain_tag(get_last_pos[0], get_last_pos[1]) == FootprintVariables::TERRAIN_FOOT && $scene.is_a?(Scene_Map) && $scene.spriteset? end alias leave_tile_footprints triggerLeaveTile def triggerLeaveTile leave_tile_footprints $scene.spriteset.putFootprint(self, get_last_pos) if foot_prints? end end class Footsprite def initialize(sprite,event,viewport,map,direction,nid,chardata,player) @rsprite = sprite # Sprite @sprite = Sprite.new(viewport) file = player && $PokemonGlobal.bicycle ? "footsetbike.png" : "footset.png" @sprite.bitmap = RPG::Cache.load_bitmap("Graphics/Pictures/", file) # Set position @realwidth = @sprite.bitmap.width/4 @sprite.src_rect.width = @realwidth @opacity = FootprintVariables::FOOT_OPACITY setFootset(direction) # Values @map = map @event = event @disposed = false @eventid = nid @viewport = viewport @chardata = chardata update end def setFootset(direction) @sprite.src_rect.x = case direction when 2 then 0 # Move down when 4 then @realwidth * 3 # Move left when 6 then @realwidth * 2 # Move right when 8 then @realwidth # Move up end @sprite.opacity = @opacity end def dispose return if @disposed @disposed = true @event.erase (0...@chardata.length).each { |i| @chardata.delete_at(i) if @chardata[i] == @rsprite } @rsprite.dispose @sprite.dispose @sprite = nil end def update return if @disposed x = @rsprite.x - @rsprite.ox y = @rsprite.y - @rsprite.oy width = @rsprite.src_rect.width height = @rsprite.src_rect.height @sprite.x = x + width / 2 @sprite.y = y + height @sprite.ox = @realwidth / 2 @sprite.oy = @sprite.bitmap.height @sprite.z = @rsprite.z - 2 @opacity -= FootprintVariables::FOOT_DELAY @sprite.opacity = @opacity dispose if @sprite.opacity <= 0 end end