mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 21:24:59 +00:00
Improved how followers go through and come out of doors
This commit is contained in:
@@ -12,7 +12,7 @@ class Game_Character
|
|||||||
attr_reader :tile_id
|
attr_reader :tile_id
|
||||||
attr_accessor :character_name
|
attr_accessor :character_name
|
||||||
attr_accessor :character_hue
|
attr_accessor :character_hue
|
||||||
attr_reader :opacity
|
attr_accessor :opacity
|
||||||
attr_reader :blend_type
|
attr_reader :blend_type
|
||||||
attr_accessor :direction
|
attr_accessor :direction
|
||||||
attr_accessor :pattern
|
attr_accessor :pattern
|
||||||
|
|||||||
@@ -9,21 +9,27 @@ class FollowerData
|
|||||||
attr_accessor :name
|
attr_accessor :name
|
||||||
attr_accessor :common_event_id
|
attr_accessor :common_event_id
|
||||||
attr_accessor :visible
|
attr_accessor :visible
|
||||||
|
attr_accessor :invisible_after_transfer
|
||||||
|
|
||||||
def initialize(original_map_id, event_id, event_name, current_map_id, x, y,
|
def initialize(original_map_id, event_id, event_name, current_map_id, x, y,
|
||||||
direction, character_name, character_hue)
|
direction, character_name, character_hue)
|
||||||
@original_map_id = original_map_id
|
@original_map_id = original_map_id
|
||||||
@event_id = event_id
|
@event_id = event_id
|
||||||
@event_name = event_name
|
@event_name = event_name
|
||||||
@current_map_id = current_map_id
|
@current_map_id = current_map_id
|
||||||
@x = x
|
@x = x
|
||||||
@y = y
|
@y = y
|
||||||
@direction = direction
|
@direction = direction
|
||||||
@character_name = character_name
|
@character_name = character_name
|
||||||
@character_hue = character_hue
|
@character_hue = character_hue
|
||||||
@name = nil
|
@name = nil
|
||||||
@common_event_id = nil
|
@common_event_id = nil
|
||||||
@visible = true
|
@visible = true
|
||||||
|
@invisible_after_transfer = false
|
||||||
|
end
|
||||||
|
|
||||||
|
def visible?
|
||||||
|
return @visible && !@invisible_after_transfer
|
||||||
end
|
end
|
||||||
|
|
||||||
def interact(event)
|
def interact(event)
|
||||||
@@ -147,10 +153,59 @@ class Game_FollowerFactory
|
|||||||
event.map = $game_map
|
event.map = $game_map
|
||||||
event.moveto($game_player.x, $game_player.y)
|
event.moveto($game_player.x, $game_player.y)
|
||||||
event.direction = $game_player.direction
|
event.direction = $game_player.direction
|
||||||
follower.x = event.x
|
event.opacity = 255
|
||||||
follower.y = event.y
|
follower.x = event.x
|
||||||
follower.current_map_id = event.map.map_id
|
follower.y = event.y
|
||||||
follower.direction = event.direction
|
follower.current_map_id = event.map.map_id
|
||||||
|
follower.direction = event.direction
|
||||||
|
follower.invisible_after_transfer = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def follow_into_door
|
||||||
|
# Setting an event's move route also makes it start along that move route,
|
||||||
|
# so we need to record all followers' current positions first before setting
|
||||||
|
# any move routes
|
||||||
|
follower_pos = []
|
||||||
|
follower_pos.push([$game_player.map.map_id, $game_player.x, $game_player.y])
|
||||||
|
$PokemonGlobal.followers.each_with_index do |follower, i|
|
||||||
|
event = @events[i]
|
||||||
|
follower_pos.push([event.map.map_id, event.x, event.y])
|
||||||
|
end
|
||||||
|
# Calculate and set move route from each follower to player
|
||||||
|
move_route = []
|
||||||
|
$PokemonGlobal.followers.each_with_index do |follower, i|
|
||||||
|
event = @events[i]
|
||||||
|
leader = follower_pos[i]
|
||||||
|
vector = $map_factory.getRelativePos(event.map.map_id, event.x, event.y,
|
||||||
|
leader[0], leader[1], leader[2])
|
||||||
|
if vector[0] != 0
|
||||||
|
move_route.prepend((vector[0].positive?) ? PBMoveRoute::Right : PBMoveRoute::Left)
|
||||||
|
elsif vector[1] != 0
|
||||||
|
move_route.prepend((vector[1].positive?) ? PBMoveRoute::Down : PBMoveRoute::Up)
|
||||||
|
end
|
||||||
|
pbMoveRoute(event, move_route + [PBMoveRoute::Opacity, 0])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Used when coming out of a door.
|
||||||
|
def hide_followers
|
||||||
|
$PokemonGlobal.followers.each_with_index do |follower, i|
|
||||||
|
event = @events[i]
|
||||||
|
event.opacity = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Used when coming out of a door. Makes all followers invisible until the
|
||||||
|
# player starts moving.
|
||||||
|
def put_followers_on_player
|
||||||
|
$PokemonGlobal.followers.each_with_index do |follower, i|
|
||||||
|
event = @events[i]
|
||||||
|
event.moveto($game_player.x, $game_player.y)
|
||||||
|
event.opacity = 255
|
||||||
|
follower.x = event.x
|
||||||
|
follower.y = event.y
|
||||||
|
follower.invisible_after_transfer = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -161,20 +216,23 @@ class Game_FollowerFactory
|
|||||||
return if followers.length == 0
|
return if followers.length == 0
|
||||||
# Update all followers
|
# Update all followers
|
||||||
leader = $game_player
|
leader = $game_player
|
||||||
|
player_moving = $game_player.moving? || $game_player.jumping?
|
||||||
followers.each_with_index do |follower, i|
|
followers.each_with_index do |follower, i|
|
||||||
event = @events[i]
|
event = @events[i]
|
||||||
next if !@events[i]
|
next if !@events[i]
|
||||||
event.transparent = $game_player.transparent
|
if follower.invisible_after_transfer && player_moving
|
||||||
|
follower.invisible_after_transfer = false
|
||||||
|
event.turn_towards_leader($game_player)
|
||||||
|
end
|
||||||
event.move_speed = leader.move_speed
|
event.move_speed = leader.move_speed
|
||||||
event.transparent = !follower.visible
|
event.transparent = !follower.visible?
|
||||||
if $PokemonGlobal.sliding
|
if $PokemonGlobal.sliding
|
||||||
event.straighten
|
event.straighten
|
||||||
event.walk_anime = false
|
event.walk_anime = false
|
||||||
else
|
else
|
||||||
event.walk_anime = true
|
event.walk_anime = true
|
||||||
end
|
end
|
||||||
if event.jumping? || event.moving? ||
|
if event.jumping? || event.moving? || !player_moving
|
||||||
!($game_player.jumping? || $game_player.moving?)
|
|
||||||
event.update
|
event.update
|
||||||
elsif !event.starting
|
elsif !event.starting
|
||||||
event.set_starting
|
event.set_starting
|
||||||
@@ -319,6 +377,18 @@ module Followers
|
|||||||
return $game_temp.followers.get_follower_by_name(name) if name
|
return $game_temp.followers.get_follower_by_name(name) if name
|
||||||
return $game_temp.followers.get_follower_by_index
|
return $game_temp.followers.get_follower_by_index
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def follow_into_door
|
||||||
|
$game_temp.followers.follow_into_door
|
||||||
|
end
|
||||||
|
|
||||||
|
def hide_followers
|
||||||
|
$game_temp.followers.hide_followers
|
||||||
|
end
|
||||||
|
|
||||||
|
def put_followers_on_player
|
||||||
|
$game_temp.followers.put_followers_on_player
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -788,6 +788,8 @@ module Compiler
|
|||||||
push_move_route_and_wait(list,-1,[ # Move Route for player entering door
|
push_move_route_and_wait(list,-1,[ # Move Route for player entering door
|
||||||
PBMoveRoute::ThroughOn,PBMoveRoute::Up,PBMoveRoute::ThroughOff])
|
PBMoveRoute::ThroughOn,PBMoveRoute::Up,PBMoveRoute::ThroughOff])
|
||||||
push_event(list,208,[0]) # Change Transparent Flag (invisible)
|
push_event(list,208,[0]) # Change Transparent Flag (invisible)
|
||||||
|
push_script(list, "Followers.follow_into_door")
|
||||||
|
push_event(list, 210, [], indent) # Wait for Move's Completion
|
||||||
push_move_route_and_wait(list,0,[PBMoveRoute::Wait,2, # Move Route for door closing
|
push_move_route_and_wait(list,0,[PBMoveRoute::Wait,2, # Move Route for door closing
|
||||||
PBMoveRoute::TurnRight,PBMoveRoute::Wait,2,
|
PBMoveRoute::TurnRight,PBMoveRoute::Wait,2,
|
||||||
PBMoveRoute::TurnLeft,PBMoveRoute::Wait,2,
|
PBMoveRoute::TurnLeft,PBMoveRoute::Wait,2,
|
||||||
@@ -803,10 +805,12 @@ module Compiler
|
|||||||
list.clear
|
list.clear
|
||||||
push_branch(list,"get_character(0).onEvent?") # Conditional Branch
|
push_branch(list,"get_character(0).onEvent?") # Conditional Branch
|
||||||
push_event(list,208,[0],1) # Change Transparent Flag (invisible)
|
push_event(list,208,[0],1) # Change Transparent Flag (invisible)
|
||||||
|
push_script(list, "Followers.hide_followers", 1)
|
||||||
push_move_route_and_wait(list,0,[ # Move Route for setting door to open
|
push_move_route_and_wait(list,0,[ # Move Route for setting door to open
|
||||||
PBMoveRoute::TurnLeft,PBMoveRoute::Wait,6],1)
|
PBMoveRoute::TurnLeft,PBMoveRoute::Wait,6],1)
|
||||||
push_event(list,208,[1],1) # Change Transparent Flag (visible)
|
push_event(list,208,[1],1) # Change Transparent Flag (visible)
|
||||||
push_move_route_and_wait(list,-1,[PBMoveRoute::Down],1) # Move Route for player exiting door
|
push_move_route_and_wait(list,-1,[PBMoveRoute::Down],1) # Move Route for player exiting door
|
||||||
|
push_script(list, "Followers.put_followers_on_player", 1)
|
||||||
push_move_route_and_wait(list,0,[ # Move Route for door closing
|
push_move_route_and_wait(list,0,[ # Move Route for door closing
|
||||||
PBMoveRoute::TurnUp,PBMoveRoute::Wait,2,
|
PBMoveRoute::TurnUp,PBMoveRoute::Wait,2,
|
||||||
PBMoveRoute::TurnRight,PBMoveRoute::Wait,2,
|
PBMoveRoute::TurnRight,PBMoveRoute::Wait,2,
|
||||||
|
|||||||
Reference in New Issue
Block a user