#============================================================================== # ★フェードタイプ拡張 ver1.0 by USK #------------------------------------------------------------------------------ # ・場所移動イベント時のフェード処理のバリエーションを増やします。 # ・13行目から26行目に設定項目と説明があります。 #============================================================================== #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp # ↓拡張フェードのタイプ設定用に使う変数のID Ex_Fade_Type_Id = 1 # 変数の値とフェードタイプの対応 # 0 => イベントで設定したフェードタイプ # 1 => ノイズ, 2 => 縦スクロール, 3 => 横スクロール # 4 => 横圧縮, 5 => 縦圧縮, 6 => 全体圧縮 # ↓拡張フェードにかけるフレーム数を決める変数のID Ex_Fade_Speed_Id = 24 # 変数に代入した値だけのフレームを掛けてフェードアウト、フェードインを行う。 # 値が 0 のときはデフォルト値の 50 フレームになる。 # ↓ true にすると場所移動するごとに Ex_Fade_Type_Id の値が 0 になる。 Reset_Fade_Type = false #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fade_type $game_variables[Ex_Fade_Type_Id] == 0 ? @fade_type : $game_variables[Ex_Fade_Type_Id] + 2 end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fade_speed $game_variables[Ex_Fade_Speed_Id] == 0 ? 50 : $game_variables[Ex_Fade_Speed_Id] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def reset_fade_type $game_variables[Fade_Ex_Id] = 0 if Reset_Fade_Type end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● 場所移動前の処理 #-------------------------------------------------------------------------- def pre_transfer @map_name_window.close case $game_temp.fade_type when 0 ; fadeout(fadeout_speed) when 1 ; white_fadeout(fadeout_speed) when 2 ; nil when 3 ; fadeout_wave when 4 ; fadeout_gv when 5 ; fadeout_gh when 6,7,8 ; fadeout_ex($game_temp.fade_type - 5) end end #-------------------------------------------------------------------------- # ● 場所移動後の処理 #-------------------------------------------------------------------------- def post_transfer case $game_temp.fade_type when 0 Graphics.wait(fadein_speed >> 1) fadein(fadein_speed) when 1 Graphics.wait(fadein_speed >> 1) white_fadein(fadein_speed) when 2 nil when 3 fadein_wave when 4 fadein_gv when 5 fadein_gh when 6,7,8 fadein_ex($game_temp.fade_type - 5) end $game_temp.reset_fade_type @map_name_window.open end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadeout_ex(mode) sprite = Sprite.new sprite.bitmap = Graphics.snap_to_bitmap sprite.x = sprite.ox = sprite.width >> 1 sprite.y = sprite.oy = sprite.height >> 1 sprite.z = 1000 bk = Sprite.new bk.bitmap = Bitmap.new(Graphics.width, Graphics.height) bk.bitmap.fill_rect(bk.bitmap.rect, Color.new(0,0,0)) bk.z = 999 ds = 1.0 / $game_temp.fade_speed $game_temp.fade_speed.times do |i| sprite.zoom_x -= ds if mode & 0b01 != 0 sprite.zoom_y -= ds if mode & 0b10 != 0 Graphics.update end sprite.dispose Graphics.freeze bk.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadein_ex(mode) update_for_fade sprite = Sprite.new sprite.bitmap = Graphics.snap_to_bitmap sprite.x = sprite.ox = sprite.width >> 1 sprite.y = sprite.oy = sprite.height >> 1 sprite.z = 1000 sprite.zoom_x = 0 if mode & 0b01 != 0 sprite.zoom_y = 0 if mode & 0b10 != 0 bk = Sprite.new bk.bitmap = Bitmap.new(Graphics.width, Graphics.height) bk.bitmap.fill_rect(bk.bitmap.rect, Color.new(0, 0, 0)) bk.z = 999 Graphics.transition ds = 1.0 / $game_temp.fade_speed $game_temp.fade_speed.times do |i| sprite.zoom_x += ds if mode & 0b01 != 0 sprite.zoom_y += ds if mode & 0b10 != 0 Graphics.update end sprite.dispose bk.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadeout_wave sprite = Sprite.new sprite.bitmap = Graphics.snap_to_bitmap sprite.x = sprite.ox = sprite.width >> 1 sprite.y = h = sprite.oy = sprite.height >> 1 sprite.z = 1000 bk = Sprite.new bk.bitmap = Bitmap.new(Graphics.width, Graphics.height) bk.bitmap.fill_rect(bk.bitmap.rect, Color.new(0, 0, 0)) bk.z = 999 ds = 1.0 / $game_temp.fade_speed bmp = sprite.bitmap.clone $game_temp.fade_speed.times do |i| (h >> 1).times do |j| x = rand(i << 1) - i y = ((j << 1) + (i & 1)) << 1 rect = Rect.new(0, y, bmp.width - x, 2) sprite.bitmap.blt(x, y, bmp, rect) end Graphics.frame_reset Graphics.update end bmp.dispose sprite.dispose bk.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadein_wave update_for_fade sprite = Sprite.new sprite.bitmap = Graphics.snap_to_bitmap sprite.x = sprite.ox = sprite.width >> 1 sprite.y = h = sprite.oy = sprite.height >> 1 sprite.z = 1000 bk = Sprite.new bk.bitmap = Bitmap.new(Graphics.width, Graphics.height) bk.bitmap.fill_rect(bk.bitmap.rect, Color.new(0, 0, 0)) bk.z = 999 ds = 1.0 / $game_temp.fade_speed bmp = sprite.bitmap.clone $game_temp.fade_speed.downto(0) do |i| (h >> 1).times do |j| x = rand(i << 1) - i y = ((j << 1) + (i & 1)) << 1 rect = Rect.new(0, y, bmp.width - x, 2) sprite.bitmap.blt(x, y, bmp, rect) end Graphics.frame_reset Graphics.update end bmp.dispose sprite.dispose bk.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadeout_gh bmp = Cache.fade(4) sprite = Sprite.new sprite.bitmap = Bitmap.new(Graphics.width << 1, Graphics.height) sprite.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(0,0,0)) rect = Rect.new(Graphics.width,0,Graphics.width, Graphics.height) sprite.bitmap.stretch_blt(rect,bmp,bmp.rect) sprite.ox = sprite.width - 1 sprite.z = 1000 ds = sprite.width / $game_temp.fade_speed $game_temp.fade_speed.times do |i| sprite.ox -= ds Graphics.update end Graphics.freeze sprite.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadeout_gv bmp = Cache.fade(2) sprite = Sprite.new sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height << 1) sprite.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(0,0,0)) rect = Rect.new(0,Graphics.height,Graphics.width, Graphics.height) sprite.bitmap.stretch_blt(rect,bmp,bmp.rect) sprite.oy = sprite.height - 1 sprite.z = 1000 ds = sprite.height / $game_temp.fade_speed $game_temp.fade_speed.times do |i| sprite.oy -= ds Graphics.update end Graphics.freeze sprite.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadein_gh update_for_fade bmp = Cache.fade(6) sprite = Sprite.new sprite.bitmap = Bitmap.new(Graphics.width << 1, Graphics.height) sprite.bitmap.fill_rect(Graphics.width, 0, Graphics.width, Graphics.height, Color.new(0,0,0)) rect = Rect.new(0,0,Graphics.width, Graphics.height) sprite.bitmap.stretch_blt(rect,bmp,bmp.rect) sprite.ox = Graphics.width - 1 sprite.z = 1000 Graphics.transition(2) ds = sprite.width / $game_temp.fade_speed $game_temp.fade_speed.times do |i| sprite.ox -= ds Graphics.update end sprite.dispose end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def fadein_gv update_for_fade bmp = Cache.fade(8) sprite = Sprite.new sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height << 1) sprite.bitmap.fill_rect(0, Graphics.height, Graphics.width, Graphics.height, Color.new(0,0,0)) rect = Rect.new(0,0,Graphics.width, Graphics.height) sprite.bitmap.stretch_blt(rect,bmp,bmp.rect) sprite.oy = Graphics.height - 1 sprite.z = 1000 Graphics.transition(2) ds = sprite.height / $game_temp.fade_speed $game_temp.fade_speed.times do |i| sprite.oy -= ds Graphics.update end sprite.dispose end end #============================================================================== # ■ Cache #============================================================================== module Cache #-------------------------------------------------------------------------- # ● Fade #-------------------------------------------------------------------------- def self.fade(direction) @cache ||= {} path = [:fade, direction] @cache[path] = create_fade(direction) unless include?(path) @cache[path] end #-------------------------------------------------------------------------- # ● Fade #-------------------------------------------------------------------------- def self.create_fade(direction) pi = Math::PI / 510 fiber = Fiber.new do 256.times do |i| Fiber.yield Color.new(0, 0, 0, 255 * (Math.cos(i * pi))) end end bmp = nil case direction when 2 bmp = Bitmap.new(1, 256) 256.times {|i| bmp.fill_rect(0, i, 1, 1, fiber.resume)} when 4 bmp = Bitmap.new(256, 1) 256.times {|i| bmp.fill_rect(i, 0, 1, 1, fiber.resume)} when 6 bmp = Bitmap.new(256, 1) 256.times {|i| bmp.fill_rect(255 - i, 0, 1, 1, fiber.resume)} when 8 bmp = Bitmap.new(1, 256) 256.times {|i| bmp.fill_rect(0, 255 - i, 1, 1, fiber.resume)} end fiber = nil bmp end end