#============================================================================== # ■ BMSP マップフォグ[MAPFOG] Ver1.00 2012/08/06 #------------------------------------------------------------------------------ #  マップ画面にフォグを表示します. #============================================================================== #------------------------------------------------------------------------------ # ■内容 # RPGツクールXPにあったフォグ機能を再現します. # マップに霧などの様な画像を表示することが出来ます. # # 位置:特に指定はありません # # ■使用方法 # スクリプトに丸ごと貼り付けていただければ使用できます。 # # マップのメモ欄に # 以下のフォーマットで記述します. # ==マップフォグ%filename%[%xspd%,%yspd%,%z%,%opacity%,%blend%]== # # %filename%は表示するファイル名を記述します. # このとき,参照される場所は「Graphics/Parallaxes」です. # # %xspd%,%yspd%はそれぞれx方向,y方向のスクロール速度です. # 20で1フレームごとに1ピクセル移動します. # # %z%はフォグのZ座標を記述します. # 参考までに,マップタイルのZ座標は0,ピクチャや天候などは50, # メッセージウインドウなどは100です. # # %opacity%はフォグの不透明度です.0~255で指定します. # # %blend%はフォグのブレンドタイプを指定します. # 0:通常 # 1:加算 # 2:減算 # # 例 # ==マップフォグfogfile[-5,2,10,128,0]== # # また,スクリプトコマンドにより,一時的にフォグの設定を変えることができます. # それぞれ以下のように対応します. # MapFog.name :フォグのファイル名 # MapFog.xspeed :フォグのX方向の速度 # MapFog.yspeed :フォグのY方向の速度 # MapFog.z :フォグのZ座標 # MapFog.opacity :フォグの不透明度 # MapFog.blend_type:フォグのブレンドタイプ # これらのプロパティに対して任意の操作を行うことができます. # # 例・実行するたびに速くなる # MapFog.xspeed += 2 # # 例・実行するたびに流れる方向が反転する # MapFog.yspeed *= -1 # # ■注意 # このスクリプトでは # 「RPG::Map」「Game_Map」「Spriteset_Map」 # のメソッドを改変しています。 # ■情報 # このスクリプトはgentlawkによって作られたものです。 # 利用規約はhttp://blueredzone.comをご覧ください。 #------------------------------------------------------------------------------ module BMSP @@includes ||= {} @@includes[:MapFog] = true module MapFog # メモ欄から設定を抽出する正規表現 MATCH = /==マップフォグ(.*)\[([+-]?\d+),([+-]?\d+),([+-]?\d+),(\d+),(\d)\]==/o #-------------------------------------------------------------------------- # ● 正規表現とのマッチ #-------------------------------------------------------------------------- def self.match(str) ret = [] if MATCH =~ str filename = $1 xspeed = $2.to_i yspeed = $3.to_i z = $4.to_i alpha = $5.to_i blend = [[0, $6.to_i].max, 2].min return {file: filename, xspd: xspeed, yspd: yspeed, z: z, alpha: alpha, blend: blend} else return {file: "", xspd: 0, yspd: 0, z: 0, alpha: 255, blend: 0} end end module Interface ::MapFog = self #------------------------------------------------------------------------ # ● アクセス:フォグ画像 #------------------------------------------------------------------------ def self.name $game_map.bmsp_fog[:file] end def self.name=(new_name) $game_map.bmsp_fog[:file] = new_name end #------------------------------------------------------------------------ # ● アクセス:X速度 #------------------------------------------------------------------------ def self.xspeed $game_map.bmsp_fog[:xspd] end def self.xspeed=(new_xspd) $game_map.bmsp_fog[:xspd] = new_xspd end #------------------------------------------------------------------------ # ● アクセス:Y速度 #------------------------------------------------------------------------ def self.yspeed $game_map.bmsp_fog[:yspd] end def self.yspeed=(new_yspd) $game_map.bmsp_fog[:yspd] = new_yspd end #------------------------------------------------------------------------ # ● アクセス:Z座標 #------------------------------------------------------------------------ def self.z $game_map.bmsp_fog[:z] end def self.z=(new_z) $game_map.bmsp_fog[:z] = new_z end #------------------------------------------------------------------------ # ● アクセス:不透明度 #------------------------------------------------------------------------ def self.opacity $game_map.bmsp_fog[:alpha] end def self.opacity=(new_alpha) $game_map.bmsp_fog[:alpha] = new_alpha end #------------------------------------------------------------------------ # ● アクセス:ブレンドタイプ #------------------------------------------------------------------------ def self.blend_type $game_map.bmsp_fog[:blend] end def self.blend_type=(new_blend) $game_map.bmsp_fog[:blend] = [[0, new_blend].max, 2].min end end end end #============================================================================== # ■ RPG::Map #============================================================================== class RPG::Map #-------------------------------------------------------------------------- # ● フォグ情報取得 #-------------------------------------------------------------------------- def fog_data return BMSP::MapFog.match(@note) end end #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :bmsp_fog # フォグの情報 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias bmsp_mapfog_initialize initialize def initialize bmsp_mapfog_initialize @bmsp_fog = nil end #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias bmsp_mapfog_setup setup def setup(map_id) bmsp_mapfog_setup(map_id) @bmsp_fog = @map.fog_data @bmsp_fog_x = 0 @bmsp_fog_y = 0 end #-------------------------------------------------------------------------- # ● 表示位置の設定 #-------------------------------------------------------------------------- alias bmsp_mapfog_set_display_pos set_display_pos def set_display_pos(x, y) bmsp_mapfog_set_display_pos(x, y) @bmsp_fog_x = x @bmsp_fog_y = y end #-------------------------------------------------------------------------- # ● 下にスクロール #-------------------------------------------------------------------------- alias bmsp_mapfog_scroll_down scroll_down def scroll_down(distance) last_y = @display_y if loop_vertical? @bmsp_fog_y += distance else @bmsp_fog_y += @display_y - last_y end bmsp_mapfog_scroll_down(distance) end #-------------------------------------------------------------------------- # ● 左にスクロール #-------------------------------------------------------------------------- alias bmsp_mapfog_scroll_left scroll_left def scroll_left(distance) last_x = @display_x if loop_horizontal? @bmsp_fog_x -= distance else @bmsp_fog_x += @display_x - last_x end bmsp_mapfog_scroll_left(distance) end #-------------------------------------------------------------------------- # ● 右にスクロール #-------------------------------------------------------------------------- alias bmsp_mapfog_scroll_right scroll_right def scroll_right(distance) last_x = @display_x if loop_horizontal? @bmsp_fog_x += distance else @bmsp_fog_x += @display_x - last_x end bmsp_mapfog_scroll_right(distance) end #-------------------------------------------------------------------------- # ● 上にスクロール #-------------------------------------------------------------------------- alias bmsp_mapfog_scroll_up scroll_up def scroll_up(distance) last_y = @display_y if loop_vertical? @bmsp_fog_y -= distance else @bmsp_fog_y += @display_y - last_y end bmsp_mapfog_scroll_up(distance) end #-------------------------------------------------------------------------- # ● フォグのX座標 #-------------------------------------------------------------------------- def bmsp_mapfog_fog_x @bmsp_fog_x / 20 end #-------------------------------------------------------------------------- # ● フォグのY座標 #-------------------------------------------------------------------------- def bmsp_mapfog_fog_y @bmsp_fog_y / 20 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias bmsp_mapfog_update update def update(main = false) bmsp_mapfog_update(main) bmsp_mapfog_update_fog end #-------------------------------------------------------------------------- # ● フォグの更新 #-------------------------------------------------------------------------- def bmsp_mapfog_update_fog return if @bmsp_fog[:file].empty? @bmsp_fog_x += @bmsp_fog[:xspd] @bmsp_fog_y += @bmsp_fog[:yspd] end end #============================================================================== # ■ Spriteset_Map #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias bmsp_mapfog_initialize initialize def initialize bmsp_mapfog_create_fog bmsp_mapfog_initialize end #-------------------------------------------------------------------------- # ● フォグの作成 #-------------------------------------------------------------------------- def bmsp_mapfog_create_fog @bmsp_fog = Plane.new @bmsp_fog.z = $game_map.bmsp_fog[:z] @bmsp_fog.opacity = $game_map.bmsp_fog[:alpha] @bmsp_fog.blend_type = $game_map.bmsp_fog[:blend] end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- alias bmsp_mapfog_dispose dispose def dispose bmsp_mapfog_dispose bmsp_mapfog_dispose_fog end #-------------------------------------------------------------------------- # ● フォグの解放 #-------------------------------------------------------------------------- def bmsp_mapfog_dispose_fog @bmsp_fog.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias bmsp_mapfog_update update def update bmsp_mapfog_update bmsp_mapfog_update_fog end #-------------------------------------------------------------------------- # ● フォグの更新 #-------------------------------------------------------------------------- def bmsp_mapfog_update_fog fog_data = $game_map.bmsp_fog if @bmsp_fog_name != fog_data[:file] @bmsp_fog_name = fog_data[:file] if @bmsp_fog.bitmap != nil @bmsp_fog.bitmap.dispose @bmsp_fog.bitmap = nil end end unless @bmsp_fog_name.empty? @bmsp_fog.bitmap = Cache.parallax(@bmsp_fog_name) end @bmsp_fog.z = fog_data[:z] if @bmsp_fog.z != fog_data[:z] @bmsp_fog.opacity = fog_data[:alpha] if @bmsp_fog.opacity != fog_data[:alpha] @bmsp_fog.blend_type = fog_data[:blend] if @bmsp_fog.blend_type != fog_data[:blend] @bmsp_fog.ox = $game_map.bmsp_mapfog_fog_x @bmsp_fog.oy = $game_map.bmsp_mapfog_fog_y end end