I'm pretty sure this is the last scripting help my game needs. (I plan to have the game completed in less than 2 weeks!)
So the problem is that the followers are not solid. What I mean is that events will go right through them! It is pretty crucial that they are solid since I have many puzzles set up to work that way. Here's the script I hope it's not a hard edit to make and it would be very much appreciated!!!
Please help me someone this is very important for my game and my game is nearly done!
So the problem is that the followers are not solid. What I mean is that events will go right through them! It is pretty crucial that they are solid since I have many puzzles set up to work that way. Here's the script I hope it's not a hard edit to make and it would be very much appreciated!!!
Code:
#
# Train_Actor
#
# fukuyama@alles.or.jp
# http://www4.big.or.jp/~fukuyama/
#
# â—é€æ˜ŽçŠ¶æ…‹ç”¨ã‚¹ã‚¤ãƒƒãƒè¨å®š
# true ã ã¨ã‚¹ã‚¤ãƒƒãƒåˆ¶å¾¡ã‚’è¡Œã†
# TRAIN_ACTOR_TRANSPARENT_SWITCH = true
TRAIN_ACTOR_TRANSPARENT_SWITCH = false
# â—é€æ˜ŽçŠ¶æ…‹ç”¨ã‚¹ã‚¤ãƒƒãƒç•ªå·
# ã“ã®ç•ªå·ã®ã‚¹ã‚¤ãƒƒãƒãŒ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
Please help me someone this is very important for my game and my game is nearly done!