Beruflich Dokumente
Kultur Dokumente
setup_new_game_fog_and_overlay
$game_battle_fogs = VE_BATTLE_FOGS
end
#-------------------------------------------------------------------------# * Alias method: setup_battle_test
#-------------------------------------------------------------------------alias :setup_battle_test_fog_and_overlay :setup_battle_test
def setup_battle_test
setup_battle_test_fog_and_overlay
$game_battle_fogs = VE_BATTLE_FOGS
end
#-------------------------------------------------------------------------# * Alias method: create_game_objects
#-------------------------------------------------------------------------alias :create_game_objects_fog_and_overlay :create_game_objects
def create_game_objects
create_game_objects_fog_and_overlay
$game_battle_fogs = VE_BATTLE_FOGS
end
#-------------------------------------------------------------------------# * Alias method: make_save_contents
#-------------------------------------------------------------------------alias :make_save_contents_fog_and_overlay :make_save_contents
def make_save_contents
contents = make_save_contents_fog_and_overlay
contents[:battle_fogs] = $game_battle_fogs
contents
end
#-------------------------------------------------------------------------# * Alias method: extract_save_contents
#-------------------------------------------------------------------------alias :extract_save_contents_fog_and_overlay :extract_save_contents
def extract_save_contents(contents)
extract_save_contents_fog_and_overlay(contents)
$game_battle_fogs = contents[:battle_fogs]
end
end
#==============================================================================
# ** Game_Screen
#-----------------------------------------------------------------------------# This class handles screen maintenance data, such as change in color tone,
# flashes, etc. It's used within the Game_Map and Game_Troop classes.
#==============================================================================
class Game_Screen
#-------------------------------------------------------------------------# * Public Instance Variables
#-------------------------------------------------------------------------attr_reader :fogs
#-------------------------------------------------------------------------# * Alias method: initialize
#-------------------------------------------------------------------------alias :initialize_ve_fog_and_overlay :initialize
def initialize
@fogs = Game_Fogs.new
initialize_ve_fog_and_overlay
end
#-------------------------------------------------------------------------# * Alias method: clear
# ** Game_Map
#-----------------------------------------------------------------------------# This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================
class Game_Map
#-------------------------------------------------------------------------# * Public Instance Variables
#-------------------------------------------------------------------------attr_accessor :fog_x
attr_accessor :fog_y
#-------------------------------------------------------------------------# * Alias method: setup
#-------------------------------------------------------------------------alias :setup_ve_fog_and_overlay :setup
def setup(map_id)
setup_ve_fog_and_overlay(map_id)
setup_fogs_effect
end
#-------------------------------------------------------------------------# * Alias method: scroll_down
#-------------------------------------------------------------------------alias :scroll_down_ve_fog_and_overlay :scroll_down
def scroll_down(distance)
last_y = @display_y
scroll_down_ve_fog_and_overlay(distance)
@fog_y += loop_vertical? ? distance : @display_y - last_y
end
#-------------------------------------------------------------------------# * Alias method: scroll_left
#-------------------------------------------------------------------------alias :scroll_left_ve_fog_and_overlay :scroll_left
def scroll_left(distance)
last_x = @display_x
scroll_left_ve_fog_and_overlay(distance)
@fog_x += loop_horizontal? ? -distance : @display_x - last_x
end
#-------------------------------------------------------------------------# * Alias method: scroll_right
#-------------------------------------------------------------------------alias :scroll_right_ve_fog_and_overlay :scroll_right
def scroll_right(distance)
last_x = @display_x
scroll_right_ve_fog_and_overlay(distance)
@fog_x += loop_horizontal? ? distance : @display_x - last_x
end
#-------------------------------------------------------------------------# * Alias method: scroll_up
#-------------------------------------------------------------------------alias :scroll_up_ve_fog_and_overlay :scroll_up
def scroll_up(distance)
last_y = @display_y
scroll_up_ve_fog_and_overlay(distance)
@fog_y += loop_vertical? ? -distance : @display_y - last_y
end
#-------------------------------------------------------------------------# * New method: setup_fogs_effect
#-------------------------------------------------------------------------def setup_fogs_effect
@fog_x = 0
@fog_y = 0
create_fog(note)
set_fog_opacity(note)
set_fog_move(note)
set_fog_tone(note)
end
#-------------------------------------------------------------------------# * New method: create_fog
#-------------------------------------------------------------------------def create_fog(note)
regexp = get_all_values("FOG EFFECT")
note.scan(regexp) { setup_fog($1) }
end
#-------------------------------------------------------------------------# * New method: set_fog_opacity
#-------------------------------------------------------------------------def set_fog_opacity(note)
regexp = /<FOG OPACITY (\d+): (\d+) *, *(\d+)>/i
note.scan(regexp) do |id, o, d|
@screen.set_fog_opacity(id.to_i, o.to_i, d.to_i)
end
end
#-------------------------------------------------------------------------# * New method: set_fog_move
#-------------------------------------------------------------------------def set_fog_move(note)
regexp = /<FOG MOVE (\d+): ([+-]?\d+) *, *([+-]?\d+)>/i
note.scan(regexp) do |id, sx, sy|
@screen.set_fog_move(id.to_i, sx.to_i, sy.to_i)
end
end
#-------------------------------------------------------------------------# * New method: set_fog_tone
#-------------------------------------------------------------------------def set_fog_tone(note)
values = "(\\d+) *, *(\\d+) *, *(\\d+) *, *(\\d+)(?: *, *(\\d+))?"
regexp = /<FOG TONE (\d+): #{values}>/i
note.scan(regexp) do |i, r, g, b, a, d|
info = [i.to_i, r.to_i, g.to_i, b.to_i, a.to_i, d ? d.to_i : 0]
@screen.set_fog_tone(*info)
end
end
#-------------------------------------------------------------------------# * New method: setup_fog
#-------------------------------------------------------------------------def setup_fog(info)
id
= info =~ /ID: (\d+)/i
? $1.to_i : 0
name = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
op
= info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
move = info =~ /MOVE: (\d+)/i
? $1.to_i : 32
zoom = info =~ /ZOOM: (\d+)/i
? $1.to_f : 100.0
hue = info =~ /HUE: (\d+)/i
? $1.to_i : 0
blend = info =~ /BLEND: (\d+)/i
? $1.to_i : 0
depth = info =~ /DEPTH: ([+-]?\d+)/i ? $1.to_i : 300
@screen.create_fog(id, name, op, move, zoom, hue, blend, depth)
end
end
#==============================================================================
# ** Game_Interpreter
#-----------------------------------------------------------------------------# An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================
class Game_Interpreter
#-------------------------------------------------------------------------# * Alias method: comment_call
#-------------------------------------------------------------------------alias :comment_call_ve_fog_and_overlay :comment_call
def comment_call
call_create_fog_effect
comment_call_ve_fog_and_overlay
end
#-------------------------------------------------------------------------# * New method: call_create_fog_effect
#-------------------------------------------------------------------------def call_create_fog_effect
$game_map.create_fog(note)
$game_map.set_fog_opacity(note)
$game_map.set_fog_move(note)
$game_map.set_fog_tone(note)
end
end
#==============================================================================
# ** Spriteset_Map
#-----------------------------------------------------------------------------# Esta classe reune os sprites da tela de mapa e tilesets. Esta classe
# usada internamente pela classe Scene_Map.
#==============================================================================
class Spriteset_Map
#-------------------------------------------------------------------------# * Alias method: initialize
#-------------------------------------------------------------------------alias :initialize_ve_fog_and_overlay :initialize
def initialize
create_fogs
initialize_ve_fog_and_overlay
end
#-------------------------------------------------------------------------# * Alias method: dispose
#-------------------------------------------------------------------------alias :dispose_ve_fog_and_overlay :dispose
def dispose
dispose_ve_fog_and_overlay
dispose_fogs
end
#-------------------------------------------------------------------------# * Alias method: update
#-------------------------------------------------------------------------alias :update_ve_fog_and_overlay :update
def update
update_ve_fog_and_overlay
update_fogs
end
#-------------------------------------------------------------------------# * New method: create_fogs
#-------------------------------------------------------------------------def create_fogs
@fog_sprites = []
end
#-------------------------------------------------------------------------# * New method: dispose_fogs
#-------------------------------------------------------------------------def dispose_fogs
if @fog_sprites
@fog_sprites.compact.each {|sprite| sprite.dispose }
@fog_sprites.clear
end
end
#-------------------------------------------------------------------------# * New method: update_fogs
#-------------------------------------------------------------------------def update_fogs
$game_map.screen.fogs.each do |fog|
@fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)
@fog_sprites[fog.id].update
end
end
end
#==============================================================================
# ** Spriteset_Battle
#-----------------------------------------------------------------------------# This class brings together battle screen sprites. It's used within the
# Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#-------------------------------------------------------------------------# * Alias method: initialize
#-------------------------------------------------------------------------alias :initialize_ve_fog_and_overlay :initialize
def initialize
create_fogs if $game_battle_fogs
initialize_ve_fog_and_overlay
end
#-------------------------------------------------------------------------# * Alias method: dispose
#-------------------------------------------------------------------------alias :dispose_ve_fog_and_overlay :dispose
def dispose
dispose_fogs if $game_battle_fogs
dispose_ve_fog_and_overlay
end
#-------------------------------------------------------------------------# * Alias method: update
#-------------------------------------------------------------------------alias :update_ve_fog_and_overlay :update
def update
update_fogs if $game_battle_fogs
update_ve_fog_and_overlay
end
#-------------------------------------------------------------------------# * New method: create_fogs
#-------------------------------------------------------------------------def create_fogs
@fog_sprites = []
end
#-------------------------------------------------------------------------# * New method: dispose_fogs
#-------------------------------------------------------------------------def dispose_fogs
if @fog_sprite
$game_map.screen.fogs.clear
@fog_sprites.compact.each {|sprite| sprite.dispose }
@fog_sprites.clear
end
end
#-------------------------------------------------------------------------# * New method: update_fogs
#-------------------------------------------------------------------------def update_fogs
$game_map.screen.update_fogs
$game_map.screen.fogs.each do |fog|
@fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)
@fog_sprites[fog.id].update
end
end
end
#==============================================================================
# ** Scene_Map
#-----------------------------------------------------------------------------# This class performs the map screen processing.
#==============================================================================
class Scene_Map
#-------------------------------------------------------------------------# * Alias method: pre_transfer
#-------------------------------------------------------------------------alias :pre_transfer_ve_fog_and_overlay :pre_transfer
def pre_transfer
pre_transfer_ve_fog_and_overlay
if $game_player.new_map_id != $game_map.map_id
@spriteset.dispose_fogs
$game_map.screen.clear_fogs
$game_map.screen.fogs.clear
end
end
end
#==============================================================================
# ** Game_Fog
#-----------------------------------------------------------------------------# This class handles fog data. This class is used within the Game_Fogs class.
#==============================================================================
class Game_Fog
#-------------------------------------------------------------------------# * Public Instance Variables
#-------------------------------------------------------------------------attr_reader :id
attr_reader :name
attr_reader :hue
attr_reader :sx
attr_reader :sy
attr_reader :ox
attr_reader :oy
attr_reader :depth
attr_reader :move
attr_reader :zoom_x
attr_reader :zoom_y
attr_reader :opacity
attr_reader :blend_type
attr_reader :tone
#-------------------------------------------------------------------------# * initialize
#-------------------------------------------------------------------------def initialize(id)
@id = id
init_basic
init_target
init_tone
end
#-------------------------------------------------------------------------# * init_basic
#-------------------------------------------------------------------------def init_basic
@name
= ""
@depth = 300
@zoom_x = 1.0
@zoom_y = 1.0
@move
= 32
@opacity = 255.0
@blend_type = 1
@sx = 0
@sy = 0
@ox = 0
@oy = 0
@hue = 0
@opacity_duration = 0
@tone_duration
= 0
end
#-------------------------------------------------------------------------# * init_target
#-------------------------------------------------------------------------def init_target
@target_x = @x
@target_y = @y
@target_zoom_x = @zoom_x
@target_zoom_y = @zoom_y
@target_opacity = @opacity
end
#-------------------------------------------------------------------------# * init_tone
#-------------------------------------------------------------------------def init_tone
@tone
= Tone.new
@tone_target = Tone.new
@tone_duration = 0
end
#-------------------------------------------------------------------------# * show
#-------------------------------------------------------------------------def show(id, name, opacity, move, zoom, hue, blend, depth)
@id
= id
@name
= name
@move
= move
@zoom_x = zoom.to_f
@zoom_y = zoom.to_f
@depth = depth
@opacity = opacity.to_f
@blend_type = blend
@ox = 0
@oy = 0
init_target
init_tone
end
#-------------------------------------------------------------------------# * start_movement
#-------------------------------------------------------------------------def start_movement(sx, sy)
@sx = sx
@sy = sy
end
#-------------------------------------------------------------------------# * start_tone_change
#-------------------------------------------------------------------------def start_tone_change(tone, duration)
@tone_target = tone.clone
@tone_duration = [duration.to_i, 0].max
@tone = @tone_target.clone if @tone_duration == 0
end
#-------------------------------------------------------------------------# * start_opacity_change
#-------------------------------------------------------------------------def start_opacity_change(opacity, duration)
@opacity_target = opacity
@opacity_duration = [duration.to_i, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
#-------------------------------------------------------------------------# * erase
#-------------------------------------------------------------------------def erase
@name = ""
end
#-------------------------------------------------------------------------# * update
#-------------------------------------------------------------------------def update
update_move
update_tone
update_opacity
end
#-------------------------------------------------------------------------# * update_move
#-------------------------------------------------------------------------def update_move
@ox -= @sx / 16.0
@oy -= @sy / 16.0
end
#-------------------------------------------------------------------------# * update_opacity
#-------------------------------------------------------------------------def update_opacity
return if @opacity_duration == 0
d = @opacity_duration
@opacity = (@opacity * (d - 1) + @opacity_target) / d
@opacity_duration -= 1
end
#-------------------------------------------------------------------------# * update_tone
#-------------------------------------------------------------------------def update_tone
return if @tone_duration == 0
d = @tone_duration
@tone.red = (@tone.red * (d - 1) + @tone_target.red) / d
@tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
@tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d
@tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d
@tone_duration -= 1
end
end
#==============================================================================
# ** Game_Fogs
#-----------------------------------------------------------------------------# This class handles fogs. This class is used within the Game_Screen class.
#==============================================================================
class Game_Fogs
#-------------------------------------------------------------------------# * initialize
#-------------------------------------------------------------------------def initialize
@data = []
end
#-------------------------------------------------------------------------# * []
#-------------------------------------------------------------------------def [](number)
@data[number] ||= Game_Fog.new(number)
end
#-------------------------------------------------------------------------# * each
#-------------------------------------------------------------------------def each
@data.compact.each {|fog| yield fog } if block_given?
end
#-------------------------------------------------------------------------# * clear
#-------------------------------------------------------------------------def clear
@data.clear
end
end
#==============================================================================
# ** Sprite_Fog
#-----------------------------------------------------------------------------# This sprite is used to display fgos. It observes a instance of the
# Game_Fog class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Fog < Plane
#-------------------------------------------------------------------------# * initialize
#-------------------------------------------------------------------------def initialize(viewport, fog)
super(viewport)
@fog = fog
@x = 0
@y = 0
$game_map.fog_x = 0
$game_map.fog_y = 0
@initi_ox = $game_map.display_x * 32
@initi_oy = $game_map.display_y * 32
update
end
#-------------------------------------------------------------------------# * dispose
#-------------------------------------------------------------------------def dispose
bitmap.dispose if bitmap
super
end
#-------------------------------------------------------------------------# * update
#-------------------------------------------------------------------------def update
update_bitmap
update_position
update_zoom
update_other
end
#-------------------------------------------------------------------------# * update bitmap
#-------------------------------------------------------------------------def update_bitmap
if @fog_name != @fog.name
self.bitmap = Cache.fogs(@fog.name)
@fog_name = @fog.name.dup
end
end
#-------------------------------------------------------------------------# * update_position
#-------------------------------------------------------------------------def update_position
self.ox = $game_map.fog_x * @fog.move + @fog.ox + @initi_ox
self.oy = $game_map.fog_y * @fog.move + @fog.oy + @initi_oy
self.z = @fog.depth
end
#-------------------------------------------------------------------------# * update_zoom
#-------------------------------------------------------------------------def update_zoom
self.zoom_x = @fog.zoom_x / 100.0
self.zoom_y = @fog.zoom_y / 100.0
end
#-------------------------------------------------------------------------# * update_other
#-------------------------------------------------------------------------def update_other
self.opacity
= @fog.opacity
self.blend_type = @fog.blend_type
self.tone.set(@fog.tone)
end
end