• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
  • Reminder: AI-generated content is not allowed on the forums per the Rules and Regulations. Please contact us if you have any questions!
Marins Footprints

Resource Marins Footprints 19.1+

LadyPlaan02

Novice
Member
Joined
Dec 25, 2025
Posts
11
LadyPlaan02 submitted a new resource:

Marins Footprints v19+ - The Marins resource we were missing

Hiii!
I wanted to share a script I couldn't get to work in my game. I thought it was my problem, but then I read online that it wasn't working for other people, too. So I edited and fixed some parts of the script, and... Now it works! The version I tested it on is 19.1 (the one I use), but I think it works on other versions too. Let me know.
I hope this helps someone!
I'm also leaving you the link to Marins's original version, where you'll find all the instructions. Credit for this resource...

Read more about this resource...
 
Anyone working on a v21 port?
if you want to port it to v21, all you have to is replace all instances of Pokemontemp and dependentevents with game_temp.followers since that is the new class for followers now.

Ruby:
Expand Collapse Copy
 alias footsteps_initialize initialize
  def initialize(*args)
    footsteps_initialize(*args)
    if $game_temp && $game_temp.respond_to?(:followers) &&
       $game_temp.followers && $game_temp.followers.respond_to?(:realEvents) &&
       $game_temp.followers.realEvents.is_a?(Array) &&
       $game_temp.followers.realEvents.include?(@character)
      @follower = true
    end
    @steps = []
  end
 
  alias footsteps_dispose dispose
  def dispose
    @steps.each { |e| e[0].dispose }
    footsteps_dispose
  end
 
  alias footsteps_update update
  def update
    footsteps_update
    @old_x ||= @character.x
    @old_y ||= @character.y
    if (@character.x != @old_x || @character.y != @old_y) && !["", "nil"].include?(@character.character_name)
      if @character == $game_player && $game_temp.followers &&
         $game_temp.followers.respond_to?(:realEvents) &&
         $game_temp.followers.realEvents.select { |e| !["", "nil"].include?(e.character_name) }.size > 0 &&
         !DUPLICATE_FOOTSTEPS_WITH_FOLLOWER
        if !EVENTNAME_MAY_NOT_INCLUDE.include?($game_temp.followers.realEvents[0].name) &&
           !FILENAME_MAY_NOT_INCLUDE.include?($game_temp.followers.realEvents[0].character_name)
          make_steps = false
        else
          make_steps = true
        end
      elsif (!@character.respond_to?(:name) || !EVENTNAME_MAY_NOT_INCLUDE.include?(@character.name)) &&
             !FILENAME_MAY_NOT_INCLUDE.include?(@character.character_name)
        tilesetid = @character.map.instance_eval { @map.tileset_id }
        make_steps = [2,1,0].any? do |e|
          tile_id = @character.map.data[@old_x, @old_y, e]
        next false if tile_id.nil?
          if $game_player.terrain_tag == :Sand
          $data_tilesets[tilesetid].terrain_tags[tile_id]
          end
        end
      end
      if make_steps
        fstep = Sprite.new(self.viewport)
        fstep.z = 0
        dirs = [nil,"DownLeft","Down","DownRight","Left","Still","Right","UpLeft",
            "Up", "UpRight"]
        if @character == $game_player && $PokemonGlobal.bicycle
          fstep.bmp("Graphics/Characters/steps#{dirs[@character.direction]}Bike")
        else
          fstep.bmp("Graphics/Characters/steps#{dirs[@character.direction]}")
        end
        @steps ||= []
        if @character == $game_player && $PokemonGlobal.bicycle
          x = BIKE_X_OFFSET
          y = BIKE_Y_OFFSET
        else
          x = WALK_X_OFFSET
          y = WALK_Y_OFFSET
        end
        @steps << [fstep, @character.map, @old_x + x / Game_Map::TILE_WIDTH.to_f, @old_y + y / Game_Map::TILE_HEIGHT.to_f]
      end
    end
    @old_x = @character.x
    @old_y = @character.y
    update_footsteps
  end
 
  def update_footsteps
    if @steps
      for i in 0...@steps.size
        next unless @steps[i]
        sprite, map, x, y, ox = @steps[i]
        sprite.x = -map.display_x / Game_Map::X_SUBPIXELS + x * Game_Map::TILE_WIDTH
        sprite.y = -map.display_y / Game_Map::Y_SUBPIXELS + (y + 1) * Game_Map::TILE_HEIGHT
        sprite.y -= Game_Map::TILE_HEIGHT
        sprite.opacity -= FADE_OUT_SPEED
        if sprite.opacity <= 0
          sprite.dispose
          @steps[i] = nil
        end
      end
      @steps.compact!
    end
  end
end

class DependentEventSprites
  attr_accessor :sprites
 
  def refresh
    steps = []
    for sprite in @sprites
      steps << sprite.steps
      if sprite.follower
        $FollowerSteps = sprite.steps
      end
      sprite.steps = []
      sprite.dispose
    end
    @sprites.clear
    $game_temp.followers.eachEvent do |event, data|
      if data[0] == @map.map_id # Check original map
        #@map.events[data[1]].erase
      end
 
Last edited:
Back
Top