#============================================================================== # ■ RGSS3 遠景フォグシステム Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 遠景グラフィックを利用したフォグの設定を行えるようになります。 # ファイル名、進行するX座標進行度とY座標進行度、Z座標、不透明度、合成方法、 # 表示座標との同期設定がそれぞれ設定出来ます。 # X座標進行度とY座標進行度は、遠景の物と同じです。 #============================================================================== # マップのメモ欄を使用する場合 # ファイル名、X座標進行度、Y座標進行度、 # Z座標(-100以上で遠景より上、0より上でプライオリティ:通常キャラより下よりも上、 # 100より上でプライオリティ:通常キャラと同じよりも上、 # 200より上でプライオリティ:通常キャラより上よりも上)、 # 不透明度(0〜255)、合成方法(0:通常 1:加算 2:減算)、 # 表示座標との同期(0:無効 1:緩め 2:厳格)の順に設定します。 #------------------------------------------------------------------------------ # # # このフォグのグラフィックは遠景グラフィックのfog、 # X座標進行度は1、Y座標進行度は1、Z座標は250、 # 不透明度255、合成方法は減算、表示座標との同期は無効となります。 #------------------------------------------------------------------------------ # # # このフォグのグラフィックは遠景グラフィックのfog、 # X座標進行度は-1、Y座標進行度は-1、Z座標は100、 # 不透明度150、合成方法は通常、表示座標との同期は有効(緩め)となります。 #============================================================================== # イベントコマンドのスクリプトを使用する場合 #------------------------------------------------------------------------------ # ap_fog("fog",-1,1,220,210,1,2) # # 現在のマップのフォグのグラフィックは遠景グラフィックのfog、 # X座標進行度は-1、Y座標進行度は1、Z座標は220、 # 不透明度210、合成方法は加算、表示座標との同期は有効(厳格)となります。 #------------------------------------------------------------------------------ # ap_fog_clear # # 現在のマップのフォグを無効化します。 #============================================================================== module APStyleFog #設定用キーワードを指定。 Word = "APフォグ" #ビューポートを文字列として指定。 Viewport = "@viewport1" end class Spriteset_Map #-------------------------------------------------------------------------- # 遠景の作成 #-------------------------------------------------------------------------- alias create_parallax_ap_style_fog create_parallax def create_parallax create_parallax_ap_style_fog @ap_style_fog_parallax = Plane.new(eval(APStyleFog::Viewport)) end #-------------------------------------------------------------------------- # 遠景の解放 #-------------------------------------------------------------------------- alias dispose_parallax_ap_style_fog dispose_parallax def dispose_parallax dispose_parallax_ap_style_fog @ap_style_fog_parallax.bitmap.dispose if @ap_style_fog_parallax.bitmap && !@ap_style_fog_parallax.bitmap.disposed? @ap_style_fog_parallax.dispose end #-------------------------------------------------------------------------- # 遠景の更新 #-------------------------------------------------------------------------- alias update_parallax_ap_style_fog update_parallax def update_parallax update_parallax_ap_style_fog update_ap_style_fog end #-------------------------------------------------------------------------- # 遠景フォグの更新 #-------------------------------------------------------------------------- def update_ap_style_fog a = $game_map.ap_style_fog_parallax_array if @ap_style_fog_parallax_name != a[0] or (@ap_style_fog_parallax.bitmap && @ap_style_fog_parallax.bitmap.disposed?) @ap_style_fog_parallax_name = a[0] @ap_style_fog_parallax.bitmap.dispose if @ap_style_fog_parallax.bitmap && @parallax.bitmap != @ap_style_fog_parallax.bitmap && !@ap_style_fog_parallax.bitmap.disposed? @ap_style_fog_parallax.bitmap = Cache.parallax(a[0]) Graphics.frame_reset end if @ap_style_fog_parallax_name b = @ap_style_fog_parallax.bitmap $game_map.ap_style_fog_parallax_array[7] %= b.width $game_map.ap_style_fog_parallax_array[8] %= b.height end @ap_style_fog_parallax.ox = (a[6] > 1 ? $game_map.display_x * 32 : 0) + $game_map.ap_style_fog_parallax_ox @ap_style_fog_parallax.oy = (a[6] > 1 ? $game_map.display_y * 32 : 0) + $game_map.ap_style_fog_parallax_oy @ap_style_fog_parallax.z = a[3] if @ap_style_fog_parallax.z != a[3] @ap_style_fog_parallax.opacity = a[4] if @ap_style_fog_parallax.opacity != a[4] @ap_style_fog_parallax.blend_type = a[5] if @ap_style_fog_parallax.blend_type != a[5] end end class Game_Map attr_accessor :ap_style_fog_parallax_array #-------------------------------------------------------------------------- # 遠景のセットアップ #-------------------------------------------------------------------------- alias setup_parallax_ap_style_fog setup_parallax def setup_parallax setup_parallax_ap_style_fog @ap_style_fog_parallax_array = @map.ap_style_fog_parallax_array + [0,0] end #-------------------------------------------------------------------------- # 遠景の更新 #-------------------------------------------------------------------------- alias update_parallax_ap_style_fog update_parallax def update_parallax update_parallax_ap_style_fog a = @ap_style_fog_parallax_array @ap_style_fog_parallax_array[7] += a[1] / 64.0 if a[1] != 0 @ap_style_fog_parallax_array[8] += a[2] / 64.0 if a[2] != 0 end #-------------------------------------------------------------------------- # フォグの原点X座標の計算 #-------------------------------------------------------------------------- def ap_style_fog_parallax_ox a = @ap_style_fog_parallax_array a[0].empty? ? 0 : a[7] * 16 end #-------------------------------------------------------------------------- # フォグの原点Y座標の計算 #-------------------------------------------------------------------------- def ap_style_fog_parallax_oy a = @ap_style_fog_parallax_array a[0].empty? ? 0 : a[8] * 16 end #-------------------------------------------------------------------------- # 下にスクロール #-------------------------------------------------------------------------- alias scroll_down_ap_style_fog scroll_down def scroll_down(distance) last_y = @display_y scroll_down_ap_style_fog(distance) return if @ap_style_fog_parallax_array[6] != 1 if loop_vertical? @ap_style_fog_parallax_array[8] += distance else @ap_style_fog_parallax_array[8] += @display_y - last_y end end #-------------------------------------------------------------------------- # 左にスクロール #-------------------------------------------------------------------------- alias scroll_left_ap_style_fog scroll_left def scroll_left(distance) last_x = @display_x scroll_left_ap_style_fog(distance) return if @ap_style_fog_parallax_array[6] != 1 if loop_horizontal? @ap_style_fog_parallax_array[7] -= distance else @ap_style_fog_parallax_array[7] += @display_x - last_x end end #-------------------------------------------------------------------------- # 右にスクロール #-------------------------------------------------------------------------- alias scroll_right_ap_style_fog scroll_right def scroll_right(distance) last_x = @display_x scroll_right_ap_style_fog(distance) return if @ap_style_fog_parallax_array[6] != 1 if loop_horizontal? @ap_style_fog_parallax_array[7] += distance else @ap_style_fog_parallax_array[7] += @display_x - last_x end end #-------------------------------------------------------------------------- # 上にスクロール #-------------------------------------------------------------------------- alias scroll_up_ap_style_fog scroll_up def scroll_up(distance) last_y = @display_y scroll_up_ap_style_fog(distance) return if @ap_style_fog_parallax_array[6] != 1 if loop_vertical? @ap_style_fog_parallax_array[8] -= distance else @ap_style_fog_parallax_array[8] += @display_y - last_y end end end class RPG::Map #-------------------------------------------------------------------------- # フォグデータ #-------------------------------------------------------------------------- def ap_style_fog_parallax_array @ap_style_fog_parallax_array ||= create_ap_style_fog_parallax_array end #-------------------------------------------------------------------------- # フォグデータの作成 #-------------------------------------------------------------------------- def create_ap_style_fog_parallax_array t = /<#{APStyleFog::Word}[::](\S+)>/ =~ note ? $1.to_s : "" t = t.split(/\s*,\s*/).inject([]) {|r,t| r.push(t)} if t.size == 7 6.times {|i| t[i + 1] = eval(t[i + 1])} else t = ["",0,0,0,0,0,0] end t end end class Game_Interpreter #-------------------------------------------------------------------------- # フォグの指定 #-------------------------------------------------------------------------- def ap_fog(name,x,y,z,o,b,t) $game_map.ap_style_fog_parallax_array = [name,x,y,z,o,b,t,0,0] end #-------------------------------------------------------------------------- # フォグをクリア #-------------------------------------------------------------------------- def ap_fog_clear $game_map.ap_style_fog_parallax_array = ["",0,0,0,0,0,0,0,0] end end