#==============================================================================
# ■ 水中倒影 Reflect
# Version: 1.0
#------------------------------------------------------------------------------
# 这个脚本特定地区反映字符精灵和活动。
#==============================================================================
# 说明:
#
# Create areas using the area creator of the map editor and call them "Reflect".
#
# For events you can use these two commands in part of their name.
#
# Reflect
#
# Any event with "Reflect" as part of it's name will have the reflect effect on
# the special areas of the map.
#
#
# /OFFSET[#]
#
# [#] = Numerical value of the offset.
#
# Example:
# /OFFSET[10]
#
# Offset changes the Y offset of the sprite in the water.(How far is the
# Reflection from the characters original standing point)
#
#
# $game_player.reflect_offset = #
#
# # = Value of the character offset.
#
# Just the same as the event offset except this one handles the characters
# offset reflection.
#==============================================================================
#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
# This sprite is used to display characters. It observes a instance of the
# Game_Character class and automatically changes sprite conditions.
#==============================================================================
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Create Character Sprite
#--------------------------------------------------------------------------
alias tds_sprite_reflection_create_characters create_characters
def create_characters
tds_sprite_reflection_create_characters
@character_sprites = []
@event_reflection_sprite = []
@reflecting_events = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events)
@character_sprites.push(sprite)
end
for vehicle in $game_map.vehicles
sprite = Sprite_Character.new(@viewport1, vehicle)
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
for i in $game_map.events.keys.sort
@event_name_offset = $game_map.events.name
@event_name_offset[ /\/OFFSET\[(.*?)\]/ ]
sprite = Sprite_Reflect.new(@viewport1, $game_map.events, $1 != nil ? $1.to_i : 0)
if $game_map.events.name.include?("Reflect")
@event_reflection_sprite.push(sprite)
@reflecting_events.push($game_map.events)
end
end
@reflection_sprite = Sprite_Reflect.new(@viewport1, $game_player, 0)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias tds_sprite_reflection_update update
def update
tds_sprite_reflection_update
if $game_player.current_area_name == "Reflect"
if $game_player.moving? == false
@reflection_sprite.visible = true
end
else
@reflection_sprite.visible = false
end
for i in 0...@reflecting_events.size
if @reflecting_events.current_area_name == "Reflect"
if @reflecting_events.moving? == false
@event_reflection_sprite.visible = true
end
else
@event_reflection_sprite.visible = false
end
end
if @reflection_sprite.visible == true
@reflection_sprite.update
end
for i in 0...@event_reflection_sprite.size
if @event_reflection_sprite.visible == true
@event_reflection_sprite.update
end
end
update_tilemap
update_parallax
update_characters
update_shadow
update_weather
update_pictures
update_timer
update_viewports
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# This class deals with characters. It's used as a superclass of the
# Game_Player and Game_Event classes.
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :reflect_offset # Character Reflection Offset
#----------------------------------------------------------------------
# @ 对象初始化
#----------------------------------------------------------------------
alias tds_sprite_reflection_initialize initialize
def initialize
tds_sprite_reflection_initialize
@reflect_offset = 0
end
#--------------------------------------------------------------------------
# * Current Area Name
#--------------------------------------------------------------------------
def current_area_name
# Checks the areas in the maps
for area in $data_areas.values
# If the character is currently on an area
if in_area?(area) == true
# Give the value of the name of the area to the return variable
return_area_name = area.name
# Break loop
break
end
end
return return_area_name
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Clear Starting Flag
#--------------------------------------------------------------------------
def name
return @event.name
end
#--------------------------------------------------------------------------
# * Determine if in Area
# area : Area data (RPG::Area)
#--------------------------------------------------------------------------
def in_area?(area)
return false if area == nil
return false if $game_map.map_id != area.map_id
return false if @x < area.rect.x
return false if @y < area.rect.y
return false if @x >= area.rect.x + area.rect.width
return false if @y >= area.rect.y + area.rect.height
return true
end