Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

f0tz!baerchan's Pixelmovement script Caterpillar help

Hello, community. I'm in need of some help concerning f0tz!'s Pixelmovement script.

I have everything set up correctly and I'm not experiencing any script problems that i know of, it's just something with the caterpillars. The party members follow behind me fine until the player receives a move command in an event. If I tell they player to "Move Left" he will do it, but the party members stay put. Only when I move again do they catch up with me.

What I'd like is for the party members to keep following the leader when a Move Route is specified. Can someone explain what I can do to fix this?

Thank you.  :thumb:
 
I don't use Pixelmovement or Caterpillar scripts, as I find no true need for them. However, you can try this pixelmovement script. You'll have to be a registered member to gain access to any resources, scripts or anything else of interest on this site, but registration is simple.

http://www.rpg-palace.com/downloads/details.php?id=4

And combine it with this caterpillar script in the spoiler below and see if it works. (Search for the =begin and =end and delete them, I used them to simply disable the script because I wasn't using it at the time.)

Code:
#============================================================================== 
# ■ Train_Actor (Copyright © 2005 fukuyama)
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 
=begin #KN::DISABLE_SCRIPT
module Train_Actor 

# ●Switch setup for transparent status 
# When true, switch control is used 
# TRANSPARENT_SWITCH = true 
TRANSPARENT_SWITCH = true 

# ●Switch number for transparent status 
# When TRANSPARENT_SWITCH is true, transparency will be activated when the switch of this number is on 
TRANSPARENT_SWITCHES_INDEX = 149

# ●Maximum number of actors 
# There will be support for a large number of people in a party in the future... 
TRAIN_ACTOR_SIZE_MAX = 4

# Constants 
DOWN_LEFT  = 1 
DOWN_RIGHT = 3 
UP_LEFT    = 7 
UP_RIGHT   = 9 
JUMP       = 5 

# Put any actor IDs who should have a "stopped animation" if in the caterpillar
# i.e. if a party member "is floating" it will look stupid if he suddenly stops
# moving in the air.
# - added by Blizzard
ACTOR_IDS = []

end 

# rgss 

# Spriteset_Map_Module.rb 
#============================================================================== 
# â–  Spriteset_Map_Module 
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 

module Train_Actor 

module Spriteset_Map_Module 
  def setup_actor_character_sprites? 
    return @setup_actor_character_sprites_flag != nil 
  end 
  def setup_actor_character_sprites(characters) 
    if !setup_actor_character_sprites? 
      for character in characters.reverse 
        @character_sprites.unshift( 
          Sprite_Character.new(@viewport1, character)
        ) 
      end 
      @setup_actor_character_sprites_flag = true 
    end 
  end 
end 

end 

class Spriteset_Map 
  include Train_Actor::Spriteset_Map_Module 
end 

# Scene_Map_Module.rb 
#============================================================================== 
# â–  Scene_Map_Module 
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 

module Train_Actor 

module Scene_Map_Module 
  def setup_actor_character_sprites(characters) 
    @spriteset.setup_actor_character_sprites(characters) 
  end 
end 

end 

class Scene_Map 
  include Train_Actor::Scene_Map_Module 
end

# Game_Party_Module.rb 
#============================================================================== 
# â–  Game_Party_Module 
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 

module Train_Actor 

module Game_Party_Module
  
  attr_reader :characters
  
  def update_party_order() return actors end
  
  def setup_actor_character_sprites 
    if @characters.nil? 
      @characters = [] 
      for i in 1 ... TRAIN_ACTOR_SIZE_MAX 
        @characters.push(Game_Party_Actor.new) 
      end 
    end 
    setup_actors = update_party_order 
    for i in 1 ... TRAIN_ACTOR_SIZE_MAX 
      @characters[i - 1].setup(setup_actors[i]) 
    end
    if $scene.class.method_defined?('setup_actor_character_sprites') 
      $scene.setup_actor_character_sprites(@characters) 
    end
  end
  
  def update_party_actors
     update_party_order
    setup_actor_character_sprites 
    transparent = $game_player.transparent 
    if transparent == false and TRANSPARENT_SWITCH 
      transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX] 
    end
    for character in @characters 
      character.transparent = transparent 
      character.move_speed = $game_player.move_speed 
      if ACTOR_IDS.include?(character.cp_id) # Blizzard's support for stopped animation
        character.step_anime = true # Blizzard's support for stopped animation
      else # Blizzard's support for stopped animation
        character.step_anime = $game_player.step_anime
      end # Blizzard's support for stopped animation
      character.update 
    end 
  end 
  
  def moveto_party_actors( x, y ) 
    setup_actor_character_sprites 
    for character in @characters 
      character.moveto( x, y ) 
    end 
    @move_list = [] if @move_list == nil 
    move_list_setup 
  end 
  
  def move_party_actors 
    if @move_list == nil 
      @move_list = [] 
      move_list_setup 
    end 
    @move_list.each_index do |i| 
    if @characters[i] != nil 
      case @move_list[i].type 
        when Input::DOWN 
          @characters[i].move_down(@move_list[i].args[0]) 
        when Input::LEFT 
          @characters[i].move_left(@move_list[i].args[0]) 
        when Input::RIGHT 
          @characters[i].move_right(@move_list[i].args[0]) 
        when Input::UP 
          @characters[i].move_up(@move_list[i].args[0]) 
        when DOWN_LEFT 
          @characters[i].move_lower_left 
        when DOWN_RIGHT 
          @characters[i].move_lower_right 
        when UP_LEFT 
          @characters[i].move_upper_left 
        when UP_RIGHT 
          @characters[i].move_upper_right 
        when JUMP 
          @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1]) 
        end 
      end
    end 
  end

  class Move_List_Element
    
    def initialize(type,args) 
      @type = type 
      @args = args 
    end
    
    def type() return @type end 
    
    def args() return @args end 
    
    end
    
    def move_list_setup 
      for i in 0 .. TRAIN_ACTOR_SIZE_MAX 
        @move_list[i] = nil 
      end
    end 
    
    def add_move_list(type,*args) 
      @move_list.unshift(Move_List_Element.new(type,args)).pop 
    end
    
    def move_down_party_actors(turn_enabled = true) 
      move_party_actors 
      add_move_list(Input::DOWN,turn_enabled) 
    end
    
    def move_left_party_actors(turn_enabled = true) 
      move_party_actors 
      add_move_list(Input::LEFT,turn_enabled) 
    end
    
    def move_right_party_actors(turn_enabled = true) 
      move_party_actors 
      add_move_list(Input::RIGHT,turn_enabled) 
    end
    
    def move_up_party_actors(turn_enabled = true) 
      move_party_actors 
      add_move_list(Input::UP,turn_enabled) 
    end
    
    def move_lower_left_party_actors 
      move_party_actors 
      add_move_list(DOWN_LEFT) 
    end
    
    def move_lower_right_party_actors 
      move_party_actors 
      add_move_list(DOWN_RIGHT) 
    end
    
    def move_upper_left_party_actors 
      move_party_actors 
      add_move_list(UP_LEFT) 
    end
    
    def move_upper_right_party_actors 
      move_party_actors 
      add_move_list(UP_RIGHT) 
    end
    
    def jump_party_actors(x_plus, y_plus) 
      move_party_actors 
      add_move_list(JUMP,x_plus, y_plus) 
    end
    
  end  

end 

class Game_Party 
  include Train_Actor::Game_Party_Module 
end 

# Game_Player_Module.rb 
#============================================================================== 
# â–  Game_Player_Module 
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 

module Train_Actor 

module Game_Player_Module
  
  attr_reader :move_speed
  attr_reader :step_anime
  
  def update_party_actors 
    $game_party.update_party_actors 
    $game_party.actors.each do |actor| 
      @character_name = actor.character_name 
      @character_hue = actor.character_hue 
      break 
    end 
  end
   
  def update 
    update_party_actors 
    super 
  end
  
  def moveto( x, y ) 
    $game_party.moveto_party_actors( x, y ) 
    super( x, y ) 
  end
  
  def move_down(turn_enabled = true) 
    if passable?(@x, @y, Input::DOWN) 
      $game_party.move_down_party_actors(turn_enabled) 
    end 
    super(turn_enabled) 
  end
  
  def move_left(turn_enabled = true) 
    if passable?(@x, @y, Input::LEFT) 
      $game_party.move_left_party_actors(turn_enabled) 
    end 
    super(turn_enabled) 
  end
  
  def move_right(turn_enabled = true) 
    if passable?(@x, @y, Input::RIGHT) 
      $game_party.move_right_party_actors(turn_enabled) 
    end 
    super(turn_enabled) 
  end
  
  def move_up(turn_enabled = true) 
    if passable?(@x, @y, Input::UP) 
      $game_party.move_up_party_actors(turn_enabled) 
    end 
    super(turn_enabled) 
  end
  
  def move_lower_left 
    # When possible to move from down→left or from left→down 
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or 
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN)) 
      $game_party.move_lower_left_party_actors 
    end 
    super 
  end
  
  def move_lower_right 
    # When possible to move from down→right or from right→down 
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or 
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN)) 
      $game_party.move_lower_right_party_actors 
    end 
    super 
  end
  
  def move_upper_left 
    # When possible to move from up→left or from left→up 
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or 
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP)) 
      $game_party.move_upper_left_party_actors 
    end 
    super 
  end
  
  def move_upper_right 
    # When possible to move from up→right or from right→up 
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or 
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP)) 
      $game_party.move_upper_right_party_actors 
    end 
    super 
  end
  
  def jump(x_plus, y_plus) 
    # New coordinates are calculated 
    new_x = @x + x_plus 
    new_y = @y + y_plus 
    # When addition values are (0,0), it is possible to jump to the destination 
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0) 
      $game_party.jump_party_actors(x_plus, y_plus) 
    end 
    super(x_plus, y_plus) 
  end
  
end  

end 

class Game_Player 
 include Train_Actor::Game_Player_Module 
end 

# Game_Event_Module.rb 
#============================================================================== 
# â–  Game_Event_Module 
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 

module Train_Actor 

module Game_Event_Module 
  #-------------------------------------------------------------------------- 
  # ● Judgement determined 
  #     x  : X coordinates 
  #     y  : Y coordinates 
  #     d  : Direction (0,2,4,6,8)  ※ 0 = Checks if all directions are not able to be passed (for a jump) 
  # return : Passing is impossible (false), possible (true) 
  #-------------------------------------------------------------------------- 
  def passable?(x, y, d)
    result = super(x, y, d) 
    if result 
      # New coordinates are searched for 
      new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0) 
      new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0) 
      # Loops for actor in train 
      for actor in $game_party.characters 
        # When displayed 
        if not actor.character_name.empty? 
          # When actor's coordinates correspond to the destination 
          if actor.x == new_x and actor.y == new_y 
          # When event 
            return false if self != $game_player
          end 
        end 
      end 
    end 
    return result 
  end
  
end 

end 

class Game_Event 
  include Train_Actor::Game_Event_Module 
end 
  
# Game_Party_Actor.rb 
#============================================================================== 
# â–  Game_Party_Actor 
#------------------------------------------------------------------------------ 
# Caterpillar movement of actor is carried out on map 
#============================================================================== 

module Train_Actor 

class Game_Party_Actor < Game_Character
  
  attr_reader :cp_id
  attr_writer :move_speed 
  attr_writer :step_anime 

  def initialize 
    super() 
    @through = true 
  end
  
  def setup(actor) 
    # The file name and hue of the character are set 
    @cp_id = $data_actors[actor.id].id
    if actor != nil
      @character_name = actor.character_name 
      @character_hue = actor.character_hue 
    else 
      @character_name = "" 
      @character_hue = 0 
    end 
    # Opacity and blending method are initialized 
    @opacity = 255 
    @blend_type = 0 
  end
  
  def screen_z(height = 0) 
    if $game_player.x == @x and $game_player.y == @y 
      return $game_player.screen_z(height) - 1 
    end 
    super(height) 
  end 
  #-------------------------------------------------------------------------- 
  # ● Move down 
  #     turn_enabled : Flag that permits direction change on the spot 
  #-------------------------------------------------------------------------- 
  def move_down(turn_enabled = true) 
    # Face down 
    turn_down if turn_enabled
    # When possible to pass 
    if passable?(@x, @y, Input::DOWN) 
      # Face down 
      turn_down 
      # Update coordinates 
      @y += 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● Move left 
  #     turn_enabled : Flag that permits direction change on the spot 
  #-------------------------------------------------------------------------- 
  def move_left(turn_enabled = true) 
    # Face left 
    turn_left if turn_enabled 
    # When possible to pass 
    if passable?(@x, @y, Input::LEFT) 
      # Face left 
      turn_left 
      # Update coordinates 
      @x -= 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● Move right 
  #     turn_enabled : Flag that permits direction change on the spot 
  #-------------------------------------------------------------------------- 
  def move_right(turn_enabled = true) 
    # Face right 
    turn_right if turn_enabled
    # When possible to pass 
    if passable?(@x, @y, Input::RIGHT) 
      # Face right 
      turn_right 
      # Update coordinates 
      @x += 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● Move up 
  #     turn_enabled : Flag that permits direction change on the spot 
  #-------------------------------------------------------------------------- 
  def move_up(turn_enabled = true) 
    # Face up 
    turn_up if turn_enabled
    # When possible to pass 
    if passable?(@x, @y, Input::UP) 
      # Face up 
      turn_up 
      # Update coordinates 
      @y -= 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● Move lower left 
  #-------------------------------------------------------------------------- 
  def move_lower_left 
    # When no direction fixation 
    unless @direction_fix 
      # Turn left when facing right, turn down when facing up 
      @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction) 
    end 
    # When possible to move from down→left or from left→down 
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or 
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN)) 
      # Update coordinates 
      @x -= 1 
      @y += 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● Move lower right 
  #-------------------------------------------------------------------------- 
  def move_lower_right 
    # When no direction fixation 
    unless @direction_fix 
      # Turn right when facing left, turn down when facing up 
      @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction) 
    end 
    # When possible to move from down→right or from right→down 
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or 
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN)) 
      # Update coordinates 
      @x += 1 
      @y += 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● move upper left 
  #-------------------------------------------------------------------------- 
  def move_upper_left 
    # When no direction fixation 
    unless @direction_fix 
      # Turn left when facing right, turn up when facing down 
      @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction) 
    end 
    # When possible to move from up→left or from left→up 
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or 
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP)) 
      # Update coordinates 
      @x -= 1 
      @y -= 1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● move upper right 
  #-------------------------------------------------------------------------- 
  def move_upper_right 
    # When no direction fixation 
    unless @direction_fix 
      # Turn right when facing left, turn up when facing down 
      @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction) 
    end 
    # When possible to move from up→right or from right→up 
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or 
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP)) 
      # Update coordinates 
      @x += 1 
      @y -= 1 
    end 
  end
end
end
=end #KN::DISABLE_SCRIPT
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top