#============================================================================ # # ■イベントをグイグイ押す □Ver1.00 □製作者:月紳士 # ・RPGツクールVX用 RGSS2スクリプト # # ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド # # ※二次配布禁止!配布元には利用規約があります。必ずそちらを見てください。 #------------------------------------------------------------------------------ =begin  このスクリプトは、移動をランダムに設定した自律移動するイベントを、  プレイヤーがグイグイ押すような表現が出来るようになるスクリプトです。  押すことが出来るイベントにプレイヤーがぶつかり続けると、  音やアニメで押す表現を繰り返します。  押されたイベントは、普通よりも早く、次の移動をします。  プレイヤーは、通行の邪魔になる自律移動イベントを、グイグイ押して急かせます。  ※また、このスクリプトには   イベントが移動した際に、移動元のマスに衝突判定を残す機能も含みます。   通常ですと、イベントが移動を始めたと同時に、イベントの移動元のマスに   すぐにプレイヤーが進入できてしまい、不自然な表現になります。   (場合によっては一時的にイベントと重なるようになってしまいます)   移動元のマスに衝突判定をしばらく残すことで、この進入を遅らせます。 =end #============================================================================== # □ カスタマイズ項目 #============================================================================== module Random_Move_Event_Push PUSH_SE = "Cancel" # イベントを押した際の効果音です。 # Audio/SEフォルダ内にインポートしたファイル名を指定してください。 # 効果音を使用しない場合は = "" としてください。 PUSH_ANIME = true # イベントを押した際に、プレイヤーにアニメをさせるか? # させるなら = true 、させないなら = false と記入してください。 end #============================================================================== # ■ Game_Character #------------------------------------------------------------------------------ #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event # クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ◎ キャラクター衝突判定 # x : X 座標 # y : Y 座標 # プレイヤーと乗り物を含め、通常キャラの衝突を検出する。 #-------------------------------------------------------------------------- alias tig_rmep_collide_with_characters? collide_with_characters? def collide_with_characters?(x, y) #- イベントの移動直後にも衝突判定を持たせる為の処理です。 events = [] for event in $game_map.events.values events.push(event) if event.after_movement_pos?(x, y) end for event in events # イベントの座標と一致 unless event.through # すり抜け OFF? return true if self.is_a?(Game_Event) # 自分がイベント return true if event.priority_type == 1 # 相手が通常キャラ end end return tig_rmep_collide_with_characters?(x, y) end end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :move_type #-------------------------------------------------------------------------- # ○ 急がせる処理(stop_countの増加) #-------------------------------------------------------------------------- def hastens unless @stop_count == 0 @stop_count *= 2 # プレイヤーがイベントを押した際、stop_countを倍にしています。 end end #-------------------------------------------------------------------------- # ○ 移動後の座標一致判定 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- def after_movement_pos?(x, y) range = 64 # 移動中に保持する、移動元マスの障害判定の度合いを指定します。(256〜0) x_dif = (@x * 256 - @real_x) ; y_dif = (@y * 256 - @real_y) if x_dif == 0 and y_dif == 0 return false elsif x_dif == 0 return if y_dif.abs > 256 return if y_dif.abs < 256 - range if y_dif > 0 return true if ( y == $game_map.round_y(@y - 1) and x == @x) elsif y_dif < 0 return true if ( y == $game_map.round_y(@y + 1) and x == @x) end elsif y_dif == 0 return if x_dif.abs > 256 return if x_dif.abs < 256 - range if x_dif > 0 return true if ( x == $game_map.round_x(@x - 1) and y == @y) elsif x_dif < 0 return true if ( x == $game_map.round_x(@x + 1) and y == @y) end end return false end end #============================================================================== # ■ Game_Player #------------------------------------------------------------------------------ #  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。 #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # ◎ オブジェクト初期化 #-------------------------------------------------------------------------- alias tig_rmep_pl_initialize initialize def initialize tig_rmep_pl_initialize @push_count = 0 # 一度イベントを押してから次に押すまでの間隔計測用 end #-------------------------------------------------------------------------- # ◎ 接触イベントの起動判定 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- alias tig_rmep_check_event_trigger_touch check_event_trigger_touch def check_event_trigger_touch(x, y) return false if $game_map.interpreter.running? for event in $game_map.events_xy(x, y) if not [1,2].include?(event.trigger) and event.priority_type == 1 and event.move_type == 1 if @push_count >= 15 # ←この値が再度イベントを押すまでの間隔になります。 if Random_Move_Event_Push::PUSH_ANIME @pattern += 1 end event.hastens @push_count = 0 unless Random_Move_Event_Push::PUSH_SE == "" Audio.se_play("Audio/SE/" + Random_Move_Event_Push::PUSH_SE, 80) end else @push_count += 1 end end end return tig_rmep_check_event_trigger_touch(x, y) end #-------------------------------------------------------------------------- # ◎ 歩数増加(@push_countのリセット) #-------------------------------------------------------------------------- alias tig_rmep_pl_increase_steps increase_steps def increase_steps tig_rmep_pl_increase_steps @push_count = 0 # 歩数増加処理のタイミングで、@push_countをリセットします。 end end