Catterpillar Script

Code by Trickster
RPG Revolution Topics
As a temporary workaround, if you want to turn on/off the catepillar, you can do it with a switch.
The script right now defaults to switch#2, if you want to change that, look for:

CATERPILLAR = 2

in the code, and change the 2 to whatever switch you want. the switch needs to be on for the followers to disappear.
Be sure to add a call script right after you toggle the switch with:

$game_map.need_refresh = true


class Game_Player
#--------------——

  1. * Move Down
  2. turn_enabled : a flag permits direction change on that spot

#--------------
def move_down(turn_enabled = true)
super(turn_enabled)
end
#
--------------

  1. * Move Left
  2. turn_enabled : a flag permits direction change on that spot

#--------------
def move_left(turn_enabled = true)
super(turn_enabled)
end
#
--------------

  1. * Move Right
  2. turn_enabled : a flag permits direction change on that spot

#--------------
def move_right(turn_enabled = true)
super(turn_enabled)
end
#
--------------

  1. * Move up
  2. turn_enabled : a flag permits direction change on that spot

#--------------
def move_up(turn_enabled = true)
super(turn_enabled)
end
#
--------------

  1. * Move Lower Left

#--------------
def move_lower_left
super
end
#
--------------

  1. * Move Lower Right

#--------------
def move_lower_right
super
end
#
--------------

  1. * Move Upper Left

#--------------
def move_upper_left
super
end
#
--------------

  1. * Move Upper Right

#--------------——
def move_upper_right
super
end
end

class Game_Follower < Game_Character
#--------------——

  1. * Public Instance Variables

#--------------
attr_reader :actor
attr_accessor :move_speed
#
--------------

  1. * Object Initialization

#--------------
def initialize(actor)
super()
@through = true
@actor = actor
end
#
--------------

  1. * Set Actor

#--------------
def actor=(actor)
@actor = actor
setup
end
#
--------------

  1. * Setup

#--------------——
def setup
if @actor != nil
@character_name = $game_actors[@actor].character_name
@character_index = $game_actors[@actor].character_index
else
@character_name = ""
@character_index = 0
end
@opacity = 255
@blend_type = 0
@priority_type = 0
end

#--------------——

  1. * Screen Z

#--------------
def screen_z
if $game_player.x == @x and $game_player.y == @y
return $game_player.screen_z - 1
end
super
end
#
--------------

  1. * Same Position Starting Determinant (Disabled)

#--------------
def check_event_trigger_here(triggers)
result = false
return result
end
#
--------------

  1. * Front Envent Starting Determinant (Disabled)

#--------------
def check_event_trigger_there(triggers)
result = false
return result
end
#
--------------

  1. * Touch Event Starting Determinant (Disabled)

#--------------——
def check_event_trigger_touch(x, y)
result = false
return result
end
end

class Spriteset_Map
alias_method :spriteset_map_create_characters, :create_characters
def create_characters
spriteset_map_create_characters
$game_party.followers.each do |char|
@character_sprites « Sprite_Character.new(@viewport1, char)
end
end
end

class Game_Party
#--------------——

  1. * Constants

#--------------
MAX_SIZE = 8
CATERPILLAR = 2
#
--------------

  1. * Public Instance Variables

#--------------
attr_reader :followers
#
--------------

  1. * Object Initialization

#--------------
alias_method :trick_caterpillar_party_initialize, :initialize
def initialize
trick_caterpillar_party_initialize
@followers = Array.new(MAX_SIZE - 1) {Game_Follower.new(nil)}
@move_list = []
end
#
--------------

  1. * Update Followers

#--------------
def update_followers
flag = $game_player.transparent || $game_switches[CATERPILLAR]
@followers.each_with_index do |char, i|
char.actor = @actors[i + 1]
char.move_speed = $game_player.move_speed
if $game_player.dash?
char.move_speed += 1
end
char.update
char.transparent = flag
end
end
#
--------------

  1. * Move To Party

#--------------
def moveto_party(x, y)
@followers.each {|char| char.moveto(x, y)}
@move_list.clear
end
#
--------------

  1. * Move Party

#--------------
def move_party
@move_list.each_index do |i|
if @followers[i] == nil
@move_list[i…@move_list.size] = nil
next
end
case @move_list[i].type
when 2
@followers[i].move_down(*@move_list[i].args)
when 4
@followers[i].move_left(*@move_list[i].args)
when 6
@followers[i].move_right(*@move_list[i].args)
when 8
@followers[i].move_up(*@move_list[i].args)
when 1
@followers[i].move_lower_left
when 3
@followers[i].move_lower_right
when 7
@followers[i].move_upper_left
when 9
@followers[i].move_upper_right
when 5
@followers[i].jump(*@move_list[i].args)
end
end
end
#
--------------

  1. * Add Move List

#--------------——
def update_move(type, *args)
move_party
@move_list.unshift(Game_MoveListElement.new(type, args))
end
end

class Game_MoveListElement
#--------------——

  1. * Object Initialization

#--------------
def initialize(type, args)
@type = type
@args = args
end
#
--------------

  1. * Type

#--------------
def type
return @type
end
#
--------------

  1. * Args

#--------------——
def args
return @args
end
end

class Game_Player
#--------------——

  1. * Public Instance Variables

#--------------——
attr_reader :move_speed

#--------------——

  1. * Update

#--------------
alias_method :trick_caterpillar_player_update, :update
def update
$game_party.update_followers
trick_caterpillar_player_update
end
#
--------------

  1. * Moveto

#--------------
alias_method :trick_caterpillar_player_moveto, :moveto
def moveto(x, y)
$game_party.moveto_party(x, y)
trick_caterpillar_player_moveto(x, y)
end
#
--------------

  1. * Move Down

#--------------
alias_method :trick_caterpillar_player_move_down, :move_down
def move_down(turn_enabled = true)
if passable?(@x, @y+1)
$game_party.update_move(2, turn_enabled)
end
trick_caterpillar_player_move_down(turn_enabled)
end
#
--------------

  1. * Move Left

#--------------
alias_method :trick_caterpillar_player_move_left, :move_left
def move_left(turn_enabled = true)
if passable?(@x-1, @y)
$game_party.update_move(4, turn_enabled)
end
trick_caterpillar_player_move_left(turn_enabled)
end
#
--------------

  1. * Move Right

#--------------
alias_method :trick_caterpillar_player_move_right, :move_right
def move_right(turn_enabled = true)
if passable?(@x+1, @y)
$game_party.update_move(6, turn_enabled)
end
trick_caterpillar_player_move_right(turn_enabled)
end
#
--------------

  1. * Move Up

#--------------
alias_method :trick_caterpillar_player_move_up, :move_up
def move_up(turn_enabled = true)
if passable?(@x, @y-1)
$game_party.update_move(8, turn_enabled)
end
trick_caterpillar_player_move_up(turn_enabled)
end
#
--------------

  1. * Move Lower Left

#--------------
alias_method :trick_caterpillar_player_move_lower_left, :move_lower_left
def move_lower_left
if passable?(@x - 1, @y) and passable?(@x, @y + 1)
$game_party.update_move(1)
end
trick_caterpillar_player_move_lower_left
end
#
--------------

  1. * Move Lower Right

#--------------
alias_method :trick_caterpillar_player_move_lower_right, :move_lower_right
def move_lower_right
if passable?(@x + 1, @y) and passable?(@x, @y + 1)
$game_party.update_move(3)
end
trick_caterpillar_player_move_lower_right
end
#
--------------

  1. * Move Upper Left

#--------------
alias_method :trick_caterpillar_player_move_upper_left, :move_upper_left
def move_upper_left
if passable?(@x - 1, @y) and passable?(@x, @y - 1)
$game_party.update_move(7)
end
trick_caterpillar_player_move_upper_left
end
#
--------------

  1. * Move Upper Right

#--------------
alias_method :trick_caterpillar_player_move_upper_right, :move_upper_right
def move_upper_right
if passable?(@x + 1, @y) and passable?(@x, @y - 1)
$game_party.update_move(9)
end
trick_caterpillar_player_move_upper_right
end
#
--------------

  1. * Jump

#--------------——
alias_method :trick_caterpillar_player_jump, :jump
def jump(x_plus, y_plus)
new_x = @x + x_plus
new_y = @y + y_plus
if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
$game_party.update_move(5, x_plus, y_plus)
end
trick_caterpillar_player_jump(x_plus, y_plus)
end
end###########
###########
###########