#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# alias method: create_viewports
#--------------------------------------------------------------------------
alias mapAreaTint_create_viewports create_viewports
def create_viewports
mapAreaTint_create_viewports
#---
@nullRect = Rect.new(0,0,0,0)
#---
@viewport1b = Viewport.new
@viewport1b.z = @viewport1.z + 10
@viewport1b.rect = @nullRect
end
#--------------------------------------------------------------------------
# alias method: create_tilemap
#--------------------------------------------------------------------------
alias mapAreaTint_create_tilemap create_tilemap
def create_tilemap
@tilemap_tinted = Tilemap.new(@viewport1b)
@tilemap_tinted.map_data = Table.new(0)
#---
mapAreaTint_create_tilemap
end
#--------------------------------------------------------------------------
# alias method: load_tileset
#--------------------------------------------------------------------------
alias mapAreaTint_load_tileset load_tileset
def load_tileset
mapAreaTint_load_tileset
#---
@tileset.tileset_names.each_with_index do |name, i|
@tilemap_tinted.bitmaps[i] = Cache.tileset(name)
end
@tilemap_tinted.flags = @tileset.flags
end
#--------------------------------------------------------------------------
# alias method: create_characters
#--------------------------------------------------------------------------
alias mapAreaTint_create_characters create_characters
def create_characters
mapAreaTint_create_characters
@character_sprites_tinted = []
$game_map.events.values.each do |event|
@character_sprites_tinted.push(Sprite_Character.new(@viewport1b, event))
end
$game_map.vehicles.each do |vehicle|
@character_sprites_tinted.push(Sprite_Character.new(@viewport1b, vehicle))
end
$game_player.followers.reverse_each do |follower|
@character_sprites_tinted.push(Sprite_Character.new(@viewport1b, follower))
end
@character_sprites_tinted.push(Sprite_Character.new(@viewport1b, $game_player))
@map_id = $game_map.map_id
end
#--------------------------------------------------------------------------
# alias method: update
#--------------------------------------------------------------------------
alias mapAreaTint_update update
def update
update_viewports_rect
mapAreaTint_update
end
#--------------------------------------------------------------------------
# new method: update_viewports_rect
#--------------------------------------------------------------------------
def update_viewports_rect
if $game_map.screen.area_tint?
viewport_rect = $game_map.screen.area_tint_rect.clone
viewport_rect.width = (viewport_rect.width + 1) * 32
viewport_rect.height = (viewport_rect.height + 1) * 32
viewport_rect.x *= 32
viewport_rect.y *= 32
viewport_rect.x -= ($game_map.display_x * 32)
viewport_rect.y -= ($game_map.display_y * 32)
#---
@viewport1b.rect = viewport_rect
end
end
#--------------------------------------------------------------------------
# alias method: update_tilemap
#--------------------------------------------------------------------------
alias mapAreaTint_update_tilemap update_tilemap
def update_tilemap
mapAreaTint_update_tilemap
#---
if $game_map.screen.area_tint?
inside, outside = cut_from_mapdata($game_map.screen.area_tint_rect.clone)
#---
@tilemap.map_data = outside
@tilemap_tinted.map_data = inside
end
#---
@tilemap.update
end
#--------------------------------------------------------------------------
# alias method: update_viewports
#--------------------------------------------------------------------------
alias mapAreaTint_update_viewports update_viewports
def update_viewports
mapAreaTint_update_viewports
#---
if $game_map.screen.area_tint?
@viewport1b.tone.set($game_map.screen.area_tone)
@viewport1b.ox = $game_map.screen.shake
@viewport1b.update
else
@viewport1b.rect = @nullRect
end
end
#--------------------------------------------------------------------------
# alias method: update_characters
#--------------------------------------------------------------------------
alias mapAreaTint_update_characters update_characters
def update_characters
mapAreaTint_update_characters
#---
@character_sprites_tinted.each {|sprite| sprite.update }
end
#--------------------------------------------------------------------------
# new method: cut_from_mapdata(rect)
# rect : Rect
# returns inside:Table, outside:Table
#--------------------------------------------------------------------------
def cut_from_mapdata(rect)
outside = $game_map.data.clone
inside = Table.new(rect.width + 1, rect.height + 1, outside.zsize)
#---
width = 0
loop do
break if width >= inside.xsize
height = 0
loop do
break if height >= inside.ysize
depth = 0
loop do
break if depth >= inside.zsize
x = rect.x + width
y = rect.y + height
if (x >= 0) && (y >= 0) && (x < outside.xsize) && (y < outside.ysize)
inside[width,height,depth] = outside[x,y,depth]
#outside[x,y,depth] = 0
end
#---
depth += 1
end #/loop depth
height += 1
end #/loop height
width += 1
end #/loop width
#---
return inside, outside
end
#--------------------------------------------------------------------------
# alias method: dispose_tilemap
#--------------------------------------------------------------------------
alias mapAreaTint_dispose_tilemap dispose_tilemap
def dispose_tilemap
mapAreaTint_dispose_tilemap
#---
@tilemap_tinted.dispose
end
#--------------------------------------------------------------------------
# alias method: dispose_characters
#--------------------------------------------------------------------------
alias mapAreaTint_dispose_characters dispose_characters
def dispose_characters
mapAreaTint_dispose_characters
#---
@character_sprites_tinted.each {|sprite| sprite.dispose }
end
end # /Spriteset_Map
#==============================================================================
# ■ Game_Screen
#==============================================================================
class Game_Screen
#--------------------------------------------------------------------------
# new accessor: area_tint_rect, area_tone (readonly)
#--------------------------------------------------------------------------
attr_reader :area_tint_rect
attr_reader :area_tone
#--------------------------------------------------------------------------
# alias method: initialize
#--------------------------------------------------------------------------
alias mapAreaTint_initialize initialize
def initialize
mapAreaTint_initialize
#---
@area_tint_rect = nil
@area_tone = nil
@area_tone_target = nil
@area_tone_duration = -1
end
#--------------------------------------------------------------------------
# new method: set_area_tint(rect, tone, duration)
#--------------------------------------------------------------------------
def set_area_tint(rect, tone, duration)
@area_tint_rect = rect
@area_tone_target = tone.clone
@area_tone_duration = duration
#---
@area_tone = @area_tone_target.clone if duration <= 0
end
#--------------------------------------------------------------------------
# new method: reset_area_tint
#--------------------------------------------------------------------------
def reset_area_tint
@area_tint_rect = nil
@area_tone = nil
end
#--------------------------------------------------------------------------
# new method: area_tint?
#--------------------------------------------------------------------------
def area_tint?
@area_tint_rect != nil
end
#--------------------------------------------------------------------------
# alias method: update_tone
#--------------------------------------------------------------------------
alias mapAreaTint_update_tone update_tone
def update_tone
mapAreaTint_update_tone
#---
if @area_tone_duration != nil && @area_tone_duration > 0
d = @area_tone_duration
#---
@area_tone = Tone.new(0,0,0,0) if @area_tone == nil
#---
@area_tone.red = (@area_tone.red * (d - 1) + @area_tone_target.red) / d
@area_tone.green = (@area_tone.green * (d - 1) + @area_tone_target.green) / d
@area_tone.blue = (@area_tone.blue * (d - 1) + @area_tone_target.blue) / d
@area_tone.gray = (@area_tone.gray * (d - 1) + @area_tone_target.gray) / d
@area_tone_duration -= 1
end
end
end # /Game_Screen
#==============================================================================
# ■ Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# alias method: update_position
#--------------------------------------------------------------------------
alias mapAreaTint_update_position update_position
def update_position
mapAreaTint_update_position
#---
self.x = @character.screen_x - viewport.rect.x
self.y = @character.screen_y - viewport.rect.y
end
end # /Sprite_Character