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.

Train Actor Modification

I need someone to help me modify a train actor script I found or to make a new one so that you can control the direction that charactes following you are facing. (EX. transfer player to new room on player touch)

Code:
#
# Train_Actor
#
# [email]fukuyama@alles.or.jp[/email]
# [url]http://www4.big.or.jp/~fukuyama/[/url]
#

# ●透明状態用スイッチ設定
# true だとスイッチ制御を行う
# TRAIN_ACTOR_TRANSPARENT_SWITCH = false
TRAIN_ACTOR_TRANSPARENT_SWITCH = true

# ●透明状態用スイッチ番号
# この番号のスイッチがONだと透明になる
TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX = 20

# 定数
#Input::DOWN  = 2
#Input::LEFT  = 4
#Input::RIGHT = 6
#Input::UP    = 8
DOWN_LEFT  = 1
DOWN_RIGHT = 3
UP_LEFT    = 7
UP_RIGHT  = 9
JUMP      = 5

class Game_Party_Actor < Game_Character
def initialize
 super()
 @through = true
end
def setup(actor)
 # キャラクターのファイル名と色相を設定
 if actor != nil
   @character_name = actor.character_name
   @character_hue = actor.character_hue
 else
   @character_name = ""
   @character_hue = 0
 end
 # 不透明度と合成方法を初期化
 @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
#--------------------------------------------------------------------------
# ● 下に移動
#    turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
 # 下を向く
 if turn_enabled
   turn_down
 end
 # 通行可能な場合
 if passable?(@x, @y, Input::DOWN)
   # 下を向く
   turn_down
   # 座標を更新
   @y += 1
 end
end
#--------------------------------------------------------------------------
# ● 左に移動
#    turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
 # 左を向く
 if turn_enabled
   turn_left
 end
 # 通行可能な場合
 if passable?(@x, @y, Input::LEFT)
   # 左を向く
   turn_left
   # 座標を更新
   @x -= 1
 end
end
#--------------------------------------------------------------------------
# ● 右に移動
#    turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
 # 右を向く
 if turn_enabled
   turn_right
 end
 # 通行可能な場合
 if passable?(@x, @y, Input::RIGHT)
   # 右を向く
   turn_right
   # 座標を更新
   @x += 1
 end
end
#--------------------------------------------------------------------------
# ● 上に移動
#    turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
 # 上を向く
 if turn_enabled
   turn_up
 end
 # 通行可能な場合
 if passable?(@x, @y, Input::UP)
   # 上を向く
   turn_up
   # 座標を更新
   @y -= 1
 end
end
#--------------------------------------------------------------------------
# ● 左下に移動
#--------------------------------------------------------------------------
def move_lower_left
 # 向き固定でない場合
 unless @direction_fix
   # 右向きだった場合は左を、上向きだった場合は下を向く
   @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
 end
 # 下→左、左→下 のどちらかのコースが通行可能な場合
 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))
   # 座標を更新
   @x -= 1
   @y += 1
 end
end
#--------------------------------------------------------------------------
# ● 右下に移動
#--------------------------------------------------------------------------
def move_lower_right
 # 向き固定でない場合
 unless @direction_fix
   # 左向きだった場合は右を、上向きだった場合は下を向く
   @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
 end
 # 下→右、右→下 のどちらかのコースが通行可能な場合
 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))
   # 座標を更新
   @x += 1
   @y += 1
 end
end
#--------------------------------------------------------------------------
# ● 左上に移動
#--------------------------------------------------------------------------
def move_upper_left
 # 向き固定でない場合
 unless @direction_fix
   # 右向きだった場合は左を、下向きだった場合は上を向く
   @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
 end
 # 上→左、左→上 のどちらかのコースが通行可能な場合
 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))
   # 座標を更新
   @x -= 1
   @y -= 1
 end
end
#--------------------------------------------------------------------------
# ● 右上に移動
#--------------------------------------------------------------------------
def move_upper_right
 # 向き固定でない場合
 unless @direction_fix
   # 左向きだった場合は右を、下向きだった場合は上を向く
   @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
 end
 # 上→右、右→上 のどちらかのコースが通行可能な場合
 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))
   # 座標を更新
   @x += 1
   @y -= 1
 end
end

def set_move_speed(move_speed)
 @move_speed = move_speed
end
end

class Spriteset_Map
def setup_actor_character_sprites?
 return @setup_actor_character_sprites_flag != nil
end
def setup_actor_character_sprites(characters)
 if !setup_actor_character_sprites?
   index_game_player = 0
   @character_sprites.each_index do |i|
     if @character_sprites[i].character.instance_of?(Game_Player)
       index_game_player = i
       break
     end
   end
   for character in characters.reverse
     @character_sprites.unshift(
       Sprite_Character.new(@viewport1, character)
     )
   end
   @setup_actor_character_sprites_flag = true
 end
end
end

class Scene_Map
def setup_actor_character_sprites(characters)
 @spriteset.setup_actor_character_sprites(characters)
end
end

class Game_Party
def set_transparent_actors(transparent)
 @transparent = transparent
end
def setup_actor_character_sprites
 if @characters == nil
   @characters = []
   for i in 1 .. 4
     @characters.push(Game_Party_Actor.new)
   end
 end
 if @actors_chach == nil
   @actors_chach = []
 end
 if @actors_chach != @actors
   @actors_chach = @actors.clone
   for i in 1 .. 4
     @characters[i - 1].setup(actors[i])
   end
 end
 if $scene.instance_of?(Scene_Map)
   $scene.setup_actor_character_sprites(@characters)
 end
end
def update_party_actors
 setup_actor_character_sprites
 transparent = $game_player.transparent
 if transparent == false
   if TRAIN_ACTOR_TRANSPARENT_SWITCH
     transparent = $game_switches[TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX]
   else
     transparent = $game_player.transparent
   end
 end
 for character in @characters
   character.transparent = transparent
   character.set_move_speed($game_player.get_move_speed)
   character.update
 end
end
def moveto_party_actors( x, y )
 setup_actor_character_sprites
 for character in @characters
   character.moveto( x, y )
 end
 if @move_list == nil
   @move_list = []
 end
 for i in 0 .. 10
   @move_list[i] = nil
 end
end
def move_party_actors
 if @move_list == nil
   @move_list = []
   for i in 0 .. 10
     @move_list[i] = nil
   end
 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 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

module Game_Player_Module
def update
 $game_party.update_party_actors
 super
end
def moveto( x, y )
 super
 $game_party.moveto_party_actors( 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
 # 下→左、左→下 のどちらかのコースが通行可能な場合
 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
 # 下→右、右→下 のどちらかのコースが通行可能な場合
 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
 # 上→左、左→上 のどちらかのコースが通行可能な場合
 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
 # 上→右、右→上 のどちらかのコースが通行可能な場合
 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_x = @x + x_plus
 new_y = @y + y_plus
 # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
 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

# -----------------------------------------------
# move_speed を外から見れるように
# -----------------------------------------------
def get_move_speed
 return @move_speed
end
end

class Game_Player
include Game_Player_Module
end
 
Thanks for the advise gorechild. (first time using forums) But I had trouble installing that script last time I tried to. I couldn't get the addition to Game_Player class to work. Could someone tell me what I might be doing wrong?

I went back over the page again. Does the class Game_Party_Actor refer to the class done by fukuyama that he posted? Because I can't find it listed (still have problem with Game_Player)
 

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