[RESOLVED] Wachungs Footprints - don't works with RGSS3

Started by Josey, January 15, 2015, 09:19:51 am

Previous topic - Next topic

Josey

Hi! :D

I have something different:

The Dynamic Footprint Script by Wachunga is not compatible with my Ace Kit :/ (RGSS3 XP Game)
Can someone help me with it?
Does anyone know a script with the function that works? :3


Here is the script:

Spoiler: ShowHide
[ruby]=begin
============
 Dynamic Footprints - version 1.0 (2005-11-07)
============
 by Wachunga

0.95 - original release
1.0 - fixed a small bug with directional footprints and
      updated the compatibility list
 
SETUP:
1) From the database (Tileset tab), give the appropriate tiles of any
   tilesets that you want to show footprints (e.g. sand in "Desert",
   snow in "Snow Field") the terrain tag 1.
2) Place the footprints file in the Graphics/Tilesets folder.

To prevent an event from having any footprints (e.g. birds), include <nofp>
somewhere in its name.

(If using non-RTP sprites, you may want to create customized footprints.)

FEATURES:
* customizable duration footprint fading (optional)
* direction-specific footprints (optional)
* rounded footprints paths
* overlapping footprints supported
* handles move events (jumping, speed changes, etc) and teleportation

COMPATIBILITY:
1) Cogwheel's Pixel Movement script - unfortunately, pixel movement by its
   very nature isn't very compatible with footprints (short of using sprites
   or pictures instead of a tileset) because a character can move part way
   across a tile without footprints appearing.
   
 2) Near Fantastica's Squad Based Movement/Action Battle System script -
    make sure it is below this script
 
 3) Near Fantastica's Updated Day Night script - again, make sure it is below
    this script
 
 4) Baskinein's Animated Sprite script - see:
    http://www.rmxp.net/forums/index.php?s=&showtopic=27407&view=findpost&p=261921
   
 5) Fukuyama's Caterpillar script - to only have one set of footprints
    for the whole group, no modifications are necessary (just make sure his
    script is above this one). To have a separate (overlapping) set of
    footprints for each character, uncomment (by moving the "= end") the
    following lines:

module Train_Actor
class Game_Party_Actor < Game_Character    
 def move_down(turn_enabled = true)
   if turn_enabled
     turn_down
   end
   if passable?(@x, @y, Input::DOWN)
     turn_down
     @y += 1
     increase_steps
   end
 end
 def move_left(turn_enabled = true)
   if turn_enabled
     turn_left
   end
   if passable?(@x, @y, Input::LEFT)
     turn_left
     @x -= 1
     increase_steps
   end
 end
 def move_right(turn_enabled = true)
   if turn_enabled
     turn_right
   end
   if passable?(@x, @y, Input::RIGHT)
     turn_right
     @x += 1
     increase_steps
   end
 end
 def move_up(turn_enabled = true)
   if turn_enabled
     turn_up
   end
   if passable?(@x, @y, Input::UP)
     turn_up
     @y -= 1
     increase_steps
   end
 end
end
end

=end

#----------------------------------------------------------------------
# Footprints for six situations (down->up, left->right, down->left,
# left->up, up->right and right->down) are required (twelve for
# directional footprints). See the provided footprints template
# (footprints_template.png) for specific details, noting
# that the right half of the template can be empty if using the default
# of non-directional footprints (i.e. leaving FP_DIRECTIONAL = false).
FP_FILE = "footprints_default"
#----------------------------------------------------------------------
# FP_DIRECTIONAL specifies whether there are direction-specific
# footprints (e.g. footprints from player moving up are different
# from those left when player is moving down)
FP_DIRECTIONAL = false
#----------------------------------------------------------------------
# Terrain tag(s) as set in the database
FP_TAG = 1
#----------------------------------------------------------------------
# How much time elapses before footprints begin to fade
FP_BEFORE_FADE_TIME = 100
# After beginning to fade, how long the fading process actually takes
FP_FADE_TIME = 100
# Note: it's possible to maintain footprints indefinitely (with
# FP_FADE_TIME = 0), but if the player opens a menu or changes maps,
# the footprints won't be saved. To allow them to persist even then,
# use Near's Dynamic Maps script (slight modifications would be needed).
#----------------------------------------------------------------------
# tilemap indexes (do not modify)
# regular:
FP_DU = 384
FP_LR = 385
FP_DL = 386
FP_LU = 387
FP_UR = 388
FP_RD = 389
# directional:
FP_UD = 512
FP_RL = 513
FP_DR = 514
FP_RU = 515
FP_UL = 516
FP_LD = 517

#----------------------------------------------------------------------

class Spriteset_Map
attr_accessor :footprints  
attr_accessor :fp_tilemap
def initialize
  @viewport1 = Viewport.new(0, 0, 640, 480)
  @viewport2 = Viewport.new(0, 0, 640, 480)
  @viewport3 = Viewport.new(0, 0, 640, 480)
  @viewport2.z = 200
  @viewport3.z = 5000
  @tilemap = Tilemap.new(@viewport1)
  @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  for i in 0..6
    autotile_name = $game_map.autotile_names
    @tilemap.autotiles = RPG::Cache.autotile(autotile_name)
  end
  @tilemap.map_data = $game_map.data
  @tilemap.priorities = $game_map.priorities
  @panorama = Plane.new(@viewport1)
  @panorama.z = -1000
  @fog = Plane.new(@viewport1)
  @fog.z = 3000
  @character_sprites = []
  for i in $game_map.events.keys.sort
    sprite = Sprite_Character.new(@viewport1, $game_map.events)
    @character_sprites.push(sprite)
  end
  @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  @weather = RPG::Weather.new(@viewport1)
  @picture_sprites = []
  for i in 1..50
    @picture_sprites.push(Sprite_Picture.new(@viewport2,
      $game_screen.pictures))
  end
  @timer_sprite = Sprite_Timer.new

  # Dynamic Footprints additions begin
  @footprints = []
  fp_tileset = FP_DIRECTIONAL ? Bitmap.new(256,1024) : Bitmap.new(256,512)
  # make a column for each footprint image
  # right -> down
  fp_tileset.blt(160, 0, RPG::Cache.tileset(FP_FILE), Rect.new(0, 0, 32, 32))
  # up -> right
  fp_tileset.blt(128, 0, RPG::Cache.tileset(FP_FILE), Rect.new(0, 32, 32, 32))  
  # left -> right  
  fp_tileset.blt(32, 0, RPG::Cache.tileset(FP_FILE), Rect.new(0, 64, 32, 32))    
  # down -> left
  fp_tileset.blt(64, 0, RPG::Cache.tileset(FP_FILE), Rect.new(32, 0, 32, 32))
  # left -> up
  fp_tileset.blt(96, 0, RPG::Cache.tileset(FP_FILE), Rect.new(32, 32, 32, 32))  
  # down -> up
  fp_tileset.blt(0, 0, RPG::Cache.tileset(FP_FILE), Rect.new(32, 64, 32, 32))

  # fill out each column, making copies of the image with decreasing opacity
  0.step(5*32, 32) do |x|
    opacity = 255
    0.step(15*32, 32) do |y|
      fp_tileset.blt(x, y, fp_tileset, Rect.new(x, 0, 32, 32), opacity)
      opacity -= 16
    end
  end

  if FP_DIRECTIONAL
    # down -> right
    fp_tileset.blt(160, 512, RPG::Cache.tileset(FP_FILE), Rect.new(64, 0, 32, 32))
    # right -> up
    fp_tileset.blt(128, 512, RPG::Cache.tileset(FP_FILE), Rect.new(64, 32, 32, 32))  
    # right -> left
    fp_tileset.blt(32, 512, RPG::Cache.tileset(FP_FILE), Rect.new(64, 64, 32, 32))    
    # left -> down
    fp_tileset.blt(64, 512, RPG::Cache.tileset(FP_FILE), Rect.new(96, 0, 32, 32))
    # up -> left
    fp_tileset.blt(96, 512, RPG::Cache.tileset(FP_FILE), Rect.new(96, 32, 32, 32))  
    # up -> down
    fp_tileset.blt(0, 512, RPG::Cache.tileset(FP_FILE), Rect.new(96, 64, 32, 32))
   
    0.step(5*32, 32) do |x|
      opacity = 255
      512.step(32*32, 32) do |y|
        fp_tileset.blt(x, y, fp_tileset, Rect.new(x, 512, 32, 32), opacity)
        opacity -= 16
      end
    end  
  end
 
  @fp_tilemap = Tilemap.new(@viewport1)  
  @fp_tilemap.tileset = fp_tileset
  @fp_tilemap.map_data = Table.new($game_map.width, $game_map.height, 3)
  # end Dynamic Footprints additions
 
  update
end

alias fp_dispose dispose
def dispose
  @fp_tilemap.dispose
  fp_dispose
end

alias fp_update update
def update
  @fp_tilemap.ox = $game_map.display_x / 4
  @fp_tilemap.oy = $game_map.display_y / 4
  @fp_tilemap.update
  unless FP_FADE_TIME == 0
    for fp in @footprints
      if fp.time > 1
        fp.time -= 1
        if fp.fade and (FP_FADE_TIME - fp.time) % (FP_FADE_TIME/16.0) < 1
          @fp_tilemap.map_data[fp.x,fp.y,fp.z] += 8
        end
      else
        if not fp.fade
          # begin fading
          fp.time = FP_FADE_TIME
          fp.fade = true
        else        
          @fp_tilemap.map_data[fp.x,fp.y,fp.z] = 0
          @footprints.delete(fp)
        end
      end
    end
  end
  fp_update
end

 def show_footprints(fp_index,fp_x,fp_y)
   # start with first layer, then stack footprints as necessary
   fp_z = 0
   if @fp_tilemap.map_data[fp_x,fp_y,fp_z] == 0
    @fp_tilemap.map_data[fp_x,fp_y,fp_z] = fp_index
   else
    fp_z = 1
    if @fp_tilemap.map_data[fp_x,fp_y,fp_z] == 0
      @fp_tilemap.map_data[fp_x,fp_y,fp_z] = fp_index
    else
      fp_z = 2
      if @fp_tilemap.map_data[fp_x,fp_y,fp_z] != 0
        # delete the existing footprint at these coords from the list
        # (to prevent having multiples)
        for i in @footprints.reverse
          if i.x == fp_x and i.y == fp_y and i.z == fp_z
            @footprints.delete(i)
            break
          end
        end
      end
      @fp_tilemap.map_data[fp_x,fp_y,fp_z] = fp_index
    end
   end
   @footprints.push(Footprint.new(fp_x,fp_y,fp_z))    
 end  

end

#-------------------------------------------------------------------------------

class Game_Event < Game_Character
 alias fp_ge_init initialize
 def initialize(map_id, event)
  fp_ge_init(map_id, event)
  if @event.name.upcase.include?('<NOFP>')
    @fp_id = nil
  end
 end
end

#-------------------------------------------------------------------------------

class Game_Character

alias fp_gc_init initialize
def initialize
  fp_gc_init
  # 1st argument = second last x/y
  # 2nd argument = last x/y
  @last_x = [0,0]
  @last_y = [0,0]
  @fp_id = 0 # default footprints
end

def footprints
  # determine which prints to draw and where
  if terrain_tag(@last_x[1],@last_y[1]) != FP_TAG
    return
  end
  fp_index = nil
  # left
  if @x > @last_x[1]
    if @last_y[1] > @last_y[0]
      fp_index = FP_UR
    elsif @last_y[1] < @last_y[0]
      fp_index = FP_DIRECTIONAL ? FP_DR : FP_RD
    else
      fp_index = FP_LR
    end
  else
    # right
    if @x < @last_x[1]
      if @last_y[1] > @last_y[0]
        fp_index = FP_DIRECTIONAL ? FP_UL : FP_LU
      elsif @last_y[1] < @last_y[0]
        fp_index = FP_DL
      else
        fp_index = FP_DIRECTIONAL ? FP_RL : FP_LR
      end
    else
      # up
      if @y < @last_y[1]
        if @last_x[1] > @last_x[0]
          fp_index = FP_LU
        elsif @last_x[1] < @last_x[0]
          fp_index = FP_DIRECTIONAL ? FP_RU : FP_UR
        else
          fp_index = FP_DU
        end
      # down
      elsif @y > @last_y[1]
        if @last_x[1] > @last_x[0]
          fp_index = FP_DIRECTIONAL ? FP_LD : FP_DL
        elsif @last_x[1] < @last_x[0]
          fp_index = FP_RD
        else
          fp_index = FP_DIRECTIONAL ? FP_UD : FP_DU
        end
      end
    end
  end
  if fp_index != nil
    fp_x = @last_x[1]
    fp_y = @last_y[1]
    $scene.spriteset.show_footprints(fp_index,fp_x,fp_y)
  end
end

 def moveto(x, y)
   @x = x
   @y = y
   @real_x = x * 128
   @real_y = y * 128
   if @fp_id != nil
     # track the last positions
     @last_x = [@x,@x]
     @last_y = [@y,@y]
   end
 end

 def increase_steps
   @stop_count = 0
   # show footprints if enabled for this character
   if @fp_id != nil and $scene.is_a?(Scene_Map)
     footprints
     # track the last positions
     @last_x.shift
     @last_x.push(@x)  
     @last_y.shift
     @last_y.push(@y)  
   end
 end

 def terrain_tag(x=@x,y=@y)
   return $game_map.terrain_tag(x, y)
 end

 def update_jump
   @jump_count -= 1
   @real_x = (@real_x * @jump_count + @x * 128) / (@jump_count + 1)
   @real_y = (@real_y * @jump_count + @y * 128) / (@jump_count + 1)
   if @fp_id != nil and @jump_count == 0
     # track the last positions
     @last_x = [@x,@x]
     @last_y = [@y,@y]      
   end
 end  
 
end

#-------------------------------------------------------------------------------

class Scene_Map
 attr_reader :spriteset

 # only change is a couple of (commented) sections to prevent teleporting
 # within same map from losing footprints when the spriteset is recreated
 def transfer_player
   $game_temp.player_transferring = false
   if $game_map.map_id != $game_temp.player_new_map_id
     $game_map.setup($game_temp.player_new_map_id)
   else # Dynamic Footprints
     fp = @spriteset.footprints
     md = @spriteset.fp_tilemap.map_data
   end
   $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
   case $game_temp.player_new_direction
   when 2
     $game_player.turn_down
   when 4
     $game_player.turn_left
   when 6
     $game_player.turn_right
   when 8
     $game_player.turn_up
   end
   $game_player.straighten
   $game_map.update
   @spriteset.dispose
   @spriteset = Spriteset_Map.new
   if fp != nil or md != nil # Dynamic Footprints
     @spriteset.footprints = fp
     @spriteset.fp_tilemap.map_data = md
   end
   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 Footprint
attr_reader :x
attr_reader :y
attr_reader :z
attr_accessor :time
attr_accessor :fade

def initialize(x,y,z)
  @x = x
  @y = y
  @z = z
  @time = FP_BEFORE_FADE_TIME
  @fade = false
end

end
[/ruby]


The error is that the footprints simply do not show up :<
Otherwise it is running, no error messages or anything, just the footprints are not there.

I've created a demo where you can see the script once with RGSS1 and RGSS3.

I would greatly appreciate the help!

Josey~

Zexion

I'm almost 100% that it has to do with the tilemap rewrite. The strange thing is that it won't event start up if the tilemap is changed to kk20's version. This whole script might need to be rewritten :s

Josey

Thank you for your answear :)
Should I try another tilemap-rewrite?

Which script would have to be rewritten? The Footprints?
Should I prefer to make a whole new scriptinquiry?

PhoenixFire

Did this work in your project before you switched it to the Ace engine? If you never tried it, could you do so, and let me know what the result is?

Pro-tip: easiest way to do this will be to copy your project content into a new folder, open up the copy in the XP editor, and simply remove all of the conversion kit pieces; simply reverse the directions listed here: XPAce Conversion
Quote from: Subsonic_Noise on July 01, 2011, 02:42:19 amNext off, how to create a first person shooter using microsoft excel.

Quote from: Zeriab on September 09, 2011, 02:58:58 pm<Remember when computers had turbo buttons?

KK20

January 15, 2015, 07:51:12 pm #4 Last Edit: January 15, 2015, 09:56:49 pm by KK20
@Phoenix: He provided demos of XP and XPA. XP works, XPA doesn't do anything (it's like the script doesn't even exist).

Main problem I see with this script is that it uses another Tilemap instance to draw the footprints. The author assumes the user is using the RGSS1 Tilemap, so there's going to be some conflict here. I'm looking into it more with my XPA Tilemap--I have a feeling it's crashing because there are missing bitmaps being passed to the DLL.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

PhoenixFire

Quote from: KK20 on January 15, 2015, 07:51:12 pm
@Phoenix: He provided demos of XP and XPA. XP works, XPA doesn't do anything (it's like the script doesn't even exist).


Okay, sorry I was at work, and I tend not to check offsite links while I'm there.

Also, kk20, I've revamped rmxpace.com and added a ticket system if you're still interested in helping out with this stuff! =)
Quote from: Subsonic_Noise on July 01, 2011, 02:42:19 amNext off, how to create a first person shooter using microsoft excel.

Quote from: Zeriab on September 09, 2011, 02:58:58 pm<Remember when computers had turbo buttons?

KK20

January 15, 2015, 08:35:17 pm #6 Last Edit: January 15, 2015, 09:58:00 pm by KK20
That'd be great if I could even access the site. Still getting 404's and "Default Website Page".

EDIT: Got it to work with XPA Tilemap. Simply replace me(tm)'s with mine.
Around line 223 in the footprint script, you're going to want to add the line of code I point out below

  @fp_tilemap = Tilemap.new(@viewport1)  
  @fp_tilemap.tileset = fp_tileset
  @fp_tilemap.map_data = Table.new($game_map.width, $game_map.height, 3)
  @fp_tilemap.priorities = Table.new(8*32) #<=================== ADD THIS LINE OF CODE INTO THE SCRIPT
  # end Dynamic Footprints additions
  update

I'll have to work on XPA Tilemap again and remember about this. I think the simplest fix would be to define a simple Table for @priorities if
1) @priorities is nil, or
2) @priorities Table size is not as large as the number of tiles in the tileset graphic

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

PhoenixFire

Quote from: KK20 on January 15, 2015, 08:35:17 pm
That'd be great if I could even access the site. Still getting 404's and "Default Website Page".


I'm working on that.. I have no idea why the site keeps getting knocked off like that. Might have to get that last IP address dedicated to the site.
Quote from: Subsonic_Noise on July 01, 2011, 02:42:19 amNext off, how to create a first person shooter using microsoft excel.

Quote from: Zeriab on September 09, 2011, 02:58:58 pm<Remember when computers had turbo buttons?

Josey

January 16, 2015, 02:57:59 am #8 Last Edit: January 16, 2015, 11:48:17 am by Josey
Hi! :D

Thank you very much, KK20!

This is your Tilemap, right?
http://forum.chaos-project.com/index.php/topic,14638.0.html

I have managed to implement it and it works! :D
Now, I must see, if it works with my other scripts D:

Thank you very much! :)

Edit: Oww, I have Errors D: *sigh*

Zexion


Josey

I do not want to make the whole scripts so much in public. I only send via PM :)
So I know who has them. Some of them are specially edited for me. ._.

Who wants? XD

PS: Please explain "sucka"? D:

KK20

You don't have to post the scripts (although, in most cases, it helps a lot). If the error is pretty general, we can give a pretty good guess as to what's going on.
Could also just post the base, unmodified scripts that you have for us to reference to as well.

sucka
Zexion uses this word loosely and playfully.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Josey

Okay. Thank you :)

The Error:
"Action Descripting" line 288: NoMethodError occurred.
undefined method 'dispose' for nil:NilClass

Here ist the Link.

However, it may also be that it is up to the other scripts.