mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +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_accessor :character_name
|
||||
attr_accessor :character_hue
|
||||
attr_reader :opacity
|
||||
attr_accessor :opacity
|
||||
attr_reader :blend_type
|
||||
attr_accessor :direction
|
||||
attr_accessor :pattern
|
||||
|
||||
@@ -9,21 +9,27 @@ class FollowerData
|
||||
attr_accessor :name
|
||||
attr_accessor :common_event_id
|
||||
attr_accessor :visible
|
||||
attr_accessor :invisible_after_transfer
|
||||
|
||||
def initialize(original_map_id, event_id, event_name, current_map_id, x, y,
|
||||
direction, character_name, character_hue)
|
||||
@original_map_id = original_map_id
|
||||
@event_id = event_id
|
||||
@event_name = event_name
|
||||
@current_map_id = current_map_id
|
||||
@x = x
|
||||
@y = y
|
||||
@direction = direction
|
||||
@character_name = character_name
|
||||
@character_hue = character_hue
|
||||
@name = nil
|
||||
@common_event_id = nil
|
||||
@visible = true
|
||||
@original_map_id = original_map_id
|
||||
@event_id = event_id
|
||||
@event_name = event_name
|
||||
@current_map_id = current_map_id
|
||||
@x = x
|
||||
@y = y
|
||||
@direction = direction
|
||||
@character_name = character_name
|
||||
@character_hue = character_hue
|
||||
@name = nil
|
||||
@common_event_id = nil
|
||||
@visible = true
|
||||
@invisible_after_transfer = false
|
||||
end
|
||||
|
||||
def visible?
|
||||
return @visible && !@invisible_after_transfer
|
||||
end
|
||||
|
||||
def interact(event)
|
||||
@@ -147,10 +153,59 @@ class Game_FollowerFactory
|
||||
event.map = $game_map
|
||||
event.moveto($game_player.x, $game_player.y)
|
||||
event.direction = $game_player.direction
|
||||
follower.x = event.x
|
||||
follower.y = event.y
|
||||
follower.current_map_id = event.map.map_id
|
||||
follower.direction = event.direction
|
||||
event.opacity = 255
|
||||
follower.x = event.x
|
||||
follower.y = event.y
|
||||
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
|
||||
|
||||
@@ -161,20 +216,23 @@ class Game_FollowerFactory
|
||||
return if followers.length == 0
|
||||
# Update all followers
|
||||
leader = $game_player
|
||||
player_moving = $game_player.moving? || $game_player.jumping?
|
||||
followers.each_with_index do |follower, i|
|
||||
event = @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.transparent = !follower.visible
|
||||
event.transparent = !follower.visible?
|
||||
if $PokemonGlobal.sliding
|
||||
event.straighten
|
||||
event.walk_anime = false
|
||||
else
|
||||
event.walk_anime = true
|
||||
end
|
||||
if event.jumping? || event.moving? ||
|
||||
!($game_player.jumping? || $game_player.moving?)
|
||||
if event.jumping? || event.moving? || !player_moving
|
||||
event.update
|
||||
elsif !event.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_index
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -788,6 +788,8 @@ module Compiler
|
||||
push_move_route_and_wait(list,-1,[ # Move Route for player entering door
|
||||
PBMoveRoute::ThroughOn,PBMoveRoute::Up,PBMoveRoute::ThroughOff])
|
||||
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
|
||||
PBMoveRoute::TurnRight,PBMoveRoute::Wait,2,
|
||||
PBMoveRoute::TurnLeft,PBMoveRoute::Wait,2,
|
||||
@@ -803,10 +805,12 @@ module Compiler
|
||||
list.clear
|
||||
push_branch(list,"get_character(0).onEvent?") # Conditional Branch
|
||||
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
|
||||
PBMoveRoute::TurnLeft,PBMoveRoute::Wait,6],1)
|
||||
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_script(list, "Followers.put_followers_on_player", 1)
|
||||
push_move_route_and_wait(list,0,[ # Move Route for door closing
|
||||
PBMoveRoute::TurnUp,PBMoveRoute::Wait,2,
|
||||
PBMoveRoute::TurnRight,PBMoveRoute::Wait,2,
|
||||
|
||||
Reference in New Issue
Block a user