#============================================================================== # ■ RGSS3 バックグラウンドマルチエフェクト Ver1.00 by 星潟 #------------------------------------------------------------------------------ # 複数のSE・フラッシュ・シェイクをウェイトを挟んでループで実行出来ます。 # それぞれ実行確率も設定可能です。 # 実行されるのはあくまでSE・フラッシュ・シェイクなので # それぞれ、それに準じた各種影響を受ける他、設定がかなり面倒です。 # なお、似たような処理を並列イベントでも行う事は一応は可能です。 #============================================================================== # マップに自動変更で設定する場合(マップのメモ欄に記述) #============================================================================== # # # これで、このマップに入った時に # バックグラウンドエフェクトパターン2が自動設定されます。 #============================================================================== # # # これで、このマップに入った時に # バックグラウンドエフェクトパターンの設定が自動解除されます。 #============================================================================== # イベントコマンドで設定する場合(イベントコマンドのスクリプトで記述) #============================================================================== # bge_pattern_change(1) # # バックグラウンドエフェクトパターン1が設定されます。 #============================================================================== # bge_pattern_change(0) # # バックグラウンドエフェクトパターンの設定が解除されます。 #============================================================================== module BackGroundEffect #バックグラウンドエフェクト設定用キーワードを指定。 Word = "BGE" #空のハッシュを用意。 P = {} #以下にパターンを指定。 #例. # #P[1] = {:m => 240,:h => {}} # #P[1][:h][60] = {} #P[1][:h][60][:se] = [100,"Hammer",80,100] # #P[1][:h][120] = {} #P[1][:h][120][:se] = [50,"Break",90,80] #P[1][:h][120][:fl] = [75,255,255,255,50,60] # #P[1][:h][180] = {} #P[1][:h][180][:se] = [100,"Fire1",80,80] #P[1][:h][180][:sh] = [60,1,2,60] # #P[1][:h][240] = {} #P[1][:h][240][:se] = [100,"Ice1",80,120] #P[1][:h][240][:fl] = [90,0,100,200,100,60] #P[1][:h][240][:sh] = [80,3,4,120] # #この場合、パターン1は240カウントを1ループとする。 # #60カウント目 #100%の確率でSE「Hammer」を音量80、ピッチ100で演奏。 # #120カウント目 #50%の確率でSE「Break」を音量90、ピッチ80で演奏。 #75%の確率で赤255、緑255、青255、透明度50のフラッシュを60フレーム分実行。 # #180カウント目 #100%の確率でSE「Fire1」を音量80、ピッチ80で演奏。 #60%の確率で強さ1、速さ2のシェイクを60フレーム分実行。 # #240カウント目 #100%の確率でSE「Ice1」を音量80、ピッチ120で演奏。 #90%の確率で赤0、緑100、青200、透明度100のフラッシュを60フレーム分実行。 #80%の確率で強さ3、速さ4のシェイクを120フレーム分実行。 #パターン1を指定。 P[1] = {:m => 360,:h => {}} #パターン1の60フレーム目の処理 P[1][:h][60] = {} P[1][:h][60][:se] = [100,"Break",80,100] #パターン1の120フレーム目の処理 P[1][:h][120] = {} P[1][:h][120][:se] = [100,"Hammer",80,100] #パターン1の180フレーム目の処理 P[1][:h][180] = {} P[1][:h][180][:se] = [100,"Break",80,80] P[1][:h][180][:fl] = [100,255,255,255,50,60] #パターン1の240フレーム目の処理 P[1][:h][240] = {} P[1][:h][240][:se] = [100,"Hammer",80,120] P[1][:h][240][:sh] = [100,1,1,60] #パターン1の300フレーム目の処理 P[1][:h][300] = {} P[1][:h][300][:se] = [100,"Break",80,90] P[1][:h][300][:fl] = [100,255,255,255,50,60] P[1][:h][300][:sh] = [100,2,2,60] #パターン1の360フレーム目の処理 P[1][:h][360] = {} P[1][:h][360][:se] = [100,"Hammer",80,110] P[1][:h][360][:fl] = [100,255,255,255,50,60] P[1][:h][360][:sh] = [100,3,3,120] #パターン2 P[2] = {:m=> 240,:h => {}} P[2][:h][120] = {} P[2][:h][120][:se] = [50,"Wolf",80,100] end class Game_Map #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_bge initialize def initialize initialize_bge @bge_pattern_id = 0 end #-------------------------------------------------------------------------- # BGM / BGS 自動切り替え #-------------------------------------------------------------------------- alias autoplay_bge autoplay def autoplay autoplay_bge bge_pattern_change(@map.bge_pattern_id,true) end #-------------------------------------------------------------------------- # フレーム更新 #-------------------------------------------------------------------------- alias update_bge update def update(main = false) update_bge(main) bge_update end #-------------------------------------------------------------------------- # バックグラウンドエフェクト変更 #-------------------------------------------------------------------------- def bge_pattern_change(type,auto = false) return if type < 0 or @bge_pattern_id == type if auto if type == 0 return @bge_pattern_id = 0 elsif type > 0 @bge_pattern_id = type end else @bge_pattern_id = type end @bge_count = 0 return if type <= 0 h = BackGroundEffect::P[type] @bge_max = h[:m] @bge_hash = h[:h] end #-------------------------------------------------------------------------- # バックグラウンドエフェクト更新 #-------------------------------------------------------------------------- def bge_update return if @bge_pattern_id == 0 @bge_count += 1 h = @bge_hash[@bge_count] if h if h[:se] a = h[:se] RPG::SE.new(a[1],a[2],a[3]).play if rand(100) < a[0] end if h[:fl] a = h[:fl] screen.start_flash(Color.new(a[1],a[2],a[3],a[4]), a[5]) if rand(100) < a[0] end if h[:sh] a = h[:sh] screen.start_shake(a[1], a[2], a[3]) if rand(100) < a[0] end end @bge_count = 0 if @bge_count > @bge_max end end class Game_Interpreter #-------------------------------------------------------------------------- # バックグラウンドエフェクト変更 #-------------------------------------------------------------------------- def bge_pattern_change(type) $game_map.bge_pattern_change(type) end end class RPG::Map #-------------------------------------------------------------------------- # バックグラウンドエフェクト自動変更ID #-------------------------------------------------------------------------- def bge_pattern_id @bge_pattern_id ||= /<#{BackGroundEffect::Word}[::](\d+)>/ =~ note ? $1.to_i : -1 end end