#--------------------------------------------------------------------- # ★ キー入力ジャンプスクリプト ver1.60 ※隊列歩行非対応 # 作成者:Jun.A #--------------------------------------------------------------------- =begin 【更新】12' 1/28:強制ジャンプ用スイッチを追加。 12' 1/21:強制ジャンプ可能リージョンPを追加。 12' 1/16:細かい挙動を修正、リージョンIDを追加。 12' 1/13:イベント実行中・ウィンドウ表示中のジャンプを不可能に。  ※スクリプト:追加コマンドセット必須です。   http://sepher.jp/game/rgss3/RGSS3_add_commandset.txt  キーボードならSキー、パッドならYボタンを押す事で、  進行方向の2グリッド先へジャンプするスクリプトです。  もし2グリッド先がイベントや進行不能だった場合、1グリッド先へジャンプ。  1グリッド先もイベントや進行不能な場合は、その場でジャンプを行います。  また、柱など、タテ2グリッドに渡るマップチップなどの、  ジャンプされたくない箇所に指定リージョン(デフォルト61番)を配置する事で、  2グリッドジャンプを禁止する機能もつけました。    ジャンプ対応は上下左右の4方向のみですが、  他サイトさんの8方向移動スクリプトを使用している際も通常動作するようです。  (擬似的に斜めジャンプをしますが、通行不箇所を斜めに飛び越えません)  競合する場合は、このスクリプトを削除してください。  <追加仕様A>   ジャンプ不可リージョンBは、天井のある床下に書いてください。(例:家の入り口)   家の入り口に使用する場合、入り口を前にみて、後ろにもリージョンBを書くと、   天井をすり抜けるジャンプを行わなくなります。   (文章で説明しづらいので、実際にお試しください)   また、モジュール内の変数の値がそのまま隠し通路リージョンと同期しています。   隠し通路リージョンと併用する場合、変数の値に気をつけてください。      ※隠し通路と併用する場合、当スクリプトの88・91行目のコメントアウトを削除してください。 <追加仕様B>   強制ジャンプ可能リージョンPは、  壁などのジャンプ不可能な場所に飛び移るために使うリージョンです。  壁登攀(リージョン隠し通路スクリプトに同梱)を使う際には、  壁登攀リージョンIDと同じにしておくと壁登攀中にもジャンプ可能になり、  壁飛び移りなども出来るようになります。  使用する場合は、強制ジャンプ用の指定スイッチをオンにしてください。  壁登攀リージョンのデフォルトスイッチIDと同じ値にすると、  壁にハマるバグを防ぐことが可能になります。  <ポイント>   $game_map.interpreter.running? // インタプリタ実行中?   イベント実行中は必ずtrueになります。イベント実行中判定として使えます! 便利! =end #--------------------------------------------------------------------- # ■ 設定用 ジャンプモジュール #--------------------------------------------------------------------- module SSS_JUMP_SYSTEM USE_JUMP = 71 # ジャンプ使用スイッチ REGION_A = 61 # ジャンプ不可リージョンAの番号指定(飛び越え不可能な壁リージョン) REGION_B = 59 # ジャンプ不可リージョンBの番号指定(天井のある場所の下のリージョン) REGION_C = 63 # ジャンプ不可リージョンCの番号指定(隠し通路リージョンAと同じID) REGION_P = 58 # 強制ジャンプ可能なリージョンP FORCE_JUMP_SID = 84 #強制ジャンプ可能にするスイッチ end # 以下、スクリプト class Game_Player #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update last_real_x = @real_x last_real_y = @real_y last_moving = moving? # 独自定義・隠し通路通行中 # メッセージウィンドウ実行中、乗り物に乗っているとき、強制移動中はジャンプ不可 #unless $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] # ジャンプスイッチがオンならジャンプ可能に jump_by_input if $game_switches[SSS_JUMP_SYSTEM::USE_JUMP] == true && jumpping? #end move_by_input super update_scroll(last_real_x, last_real_y) update_vehicle update_nonmoving(last_moving) unless moving? @followers.update end #-------------------------------------------------------------------------- # ● ジャンプ可能判定(追加) #-------------------------------------------------------------------------- def jumpping? return false if @move_route_forcing || @followers.gathering? return false if @vehicle_getting_on || @vehicle_getting_off return false if $game_message.busy? || $game_message.visible return false if vehicle && !vehicle.movable? return false if $game_map.interpreter.running? return true end #-------------------------------------------------------------------------- # ● ジャンプ処理 #-------------------------------------------------------------------------- def jump_by_input # 今いる場所がリージョンBで、目の前がリージョンCのとき、実行しない return if $add_commandset.check_region_id(0) == SSS_JUMP_SYSTEM::REGION_B && $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_C # 今いる場所がリージョンCで、目の前がリージョンCのとき、実行しない return if $add_commandset.check_region_id(0) == SSS_JUMP_SYSTEM::REGION_B && $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_A # 上記を満たさない状態で、今居る場所がリージョンBなら特殊処理を行う mini_jump if $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_B # 上記のいずれも満たさず、ジャンプ中ではない状態でYボタンを押した場合に実行 if Input.trigger?(:Y) && !jumping? case @direction when 2 #下 指向方向1歩前がリージョンAでなければ通常ジャンプを実行 unless $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_A jump_down_pass else #リージョンAであれば1グリッドジャンプを呼び出す jump_down_pass_one_grid end when 4 #左 以下、全て同様の処理 unless $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_A jump_left_pass else jump_left_pass_one_grid end when 6 #右 unless $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_A jump_right_pass else jump_right_pass_one_grid end when 8 #上 unless $add_commandset.direction_region_id == SSS_JUMP_SYSTEM::REGION_A jump_up_pass else jump_up_pass_one_grid end end end end #-------------------------------------------------------------------------- # 1グリッドジャンプ実行 #-------------------------------------------------------------------------- def mini_jump # 2グリッド先にリージョンが存在しない場合、通常のジャンプを行う(戻る) return if $add_commandset.direction_region_id_two_grid == 0 # 上記を満たさず、ジャンプ中ではない状態でYボタンを押した場合に実行 if Input.trigger?(:Y) && !jumping? case @direction when 2 #下 1グリッドジャンプを実行 jump_down_pass_one_grid when 4 #左 以下、全て同様の処理 jump_left_pass_one_grid when 6 #右 jump_right_pass_one_grid when 8 #上 jump_up_pass_one_grid end end end #-------------------------------------------------------------------------- # 2グリッド下へのジャンプ判定(内部に1グリッド用メソッドあり) #-------------------------------------------------------------------------- def jump_down_pass #2歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x, @y + 2,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x, @y + 2) # 2グリッド下はイベントではないか? Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,2) else jump_down_pass_one_grid end else jump_down_pass_one_grid end end #-------------------------------------------------------------------------- # 2グリッド左へのジャンプ判定(内部に1グリッド用メソッドあり) #-------------------------------------------------------------------------- def jump_left_pass #2歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x - 2, @y,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x - 2, @y) Audio.se_play('Audio/SE/Jump1', 80) self.jump(-2,0) else jump_left_pass_one_grid end else jump_left_pass_one_grid end end #-------------------------------------------------------------------------- # 2グリッド右へのジャンプ判定(内部に1グリッド用メソッドあり) #-------------------------------------------------------------------------- def jump_right_pass #2歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x + 2, @y,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x + 2, @y) Audio.se_play('Audio/SE/Jump1', 80) self.jump(2,0) else jump_right_pass_one_grid end else jump_right_pass_one_grid end end #-------------------------------------------------------------------------- # 2グリッド上へのジャンプ判定(内部に1グリッド用メソッドあり) #-------------------------------------------------------------------------- def jump_up_pass #2歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x, @y - 2,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x, @y - 2) Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,-2) else jump_up_pass_one_grid end else jump_up_pass_one_grid end end #-------------------------------------------------------------------------- # 1グリッド下へのジャンプ判定 #-------------------------------------------------------------------------- def jump_down_pass_one_grid #1歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x, @y + 1,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x, @y + 1) # 1グリッド下はイベントではないか? Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,1) else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end end #-------------------------------------------------------------------------- # 1グリッド左へのジャンプ判定 #-------------------------------------------------------------------------- def jump_left_pass_one_grid #1歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x - 1, @y,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x - 1, @y) # 1グリッド左はイベントではないか? Audio.se_play('Audio/SE/Jump1', 80) self.jump(-1,0) else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end end #-------------------------------------------------------------------------- # 1グリッド右へのジャンプ判定 #-------------------------------------------------------------------------- def jump_right_pass_one_grid #1歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x + 1, @y,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x + 1, @y) # 1グリッド右はイベントではないか? Audio.se_play('Audio/SE/Jump1', 80) self.jump(1,0) else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end end #-------------------------------------------------------------------------- # 1グリッド上へのジャンプ判定 #-------------------------------------------------------------------------- def jump_up_pass_one_grid #1歩先のグリッドが通行可能、もしくは強制通過リージョンPを配置している場合、強制通過フラグオンなら通常ジャンプを行う if map_passable?(@x, @y - 1,@direction) || ($add_commandset.direction_region_id_two_grid == SSS_JUMP_SYSTEM::REGION_P && $game_switches[SSS_JUMP_SYSTEM::FORCE_JUMP_SID]) unless collide_with_events?(@x, @y - 1) # 1グリッド上はイベントではないか? Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,-1) else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end else # 通れない場合、その場でジャンプ Audio.se_play('Audio/SE/Jump1', 80) self.jump(0,0) end end end