#============================================================================== # ■ RGSS3 簡単ジャンプ Ver2.00 by 星潟 #------------------------------------------------------------------------------ # プレイヤーキャラクターが、向いている方向へ # 指定した数値分のタイル分ジャンプする # イベントコマンドを作成します。 # 足場をジャンプして進んでいくタイプの道で # いちいち上下左右それぞれの向きのジャンプ判定を作るのが面倒な方や # 少しでも容量を節約したいという方はどうぞ。 # ただし、移動先が移動不可セルでも平気でジャンプするのでご利用は計画的に。 # Ver2.00から、ジャンプ着地点までの間に特定の地形タグ・リージョンがある場合 # ジャンプを行わせないようにする設定が可能になりました。 # # 接触判定拡張スクリプト等と組み合わせる事で # より効果的に容量の節約が可能となるでしょう。 # # また、ジャンプ時のSEも指定する事ができます。 # # イベントコマンド→スクリプト→easy_jump(2) # (2の部分を変更する事で、ジャンプ距離が変わります。 # 数値を指定しなかった場合や、ただeasy_jumpとだけ書き込んだ場合 # その場で移動を行わずにジャンプします) #============================================================================== module E_JUMP #ジャンプ時にSEを鳴らすか否かを指定します。 #trueで鳴らす。falseで鳴らさない。 SE_USE = true #ジャンプ時のSE、音量、ピッチを順に指定します。 #SE_USEがtrueの時のみ有効です。 SE = ["Jump1",100,100] #侵入不可リージョンIDを指定します。この機能が不要の場合は負の値にしてください。 #(着地点までの間に侵入不可リージョンが存在する場合はジャンプ不可) R_ID = 1 #侵入不可地形タグIDを指定します。この機能が不要の場合は負の値にしてください。 #(着地点までの間に侵入不可地形タグが存在する場合はジャンプ不可) T_ID = 1 end class Game_Interpreter #-------------------------------------------------------------------------- # 簡単ジャンプ #-------------------------------------------------------------------------- def easy_jump(j_data = 0) #プレイヤーの向き別に処理を行う。 case $game_player.direction when 2;array1 = [0, j_data] # 下 when 4;array1 = [-j_data, 0] # 左 when 6;array1 = [j_data, 0] # 右 when 8;array1 = [0, -j_data] # 上 else;array1 = [0, 0] # 方向なし等、念の為 end #簡単ジャンプが不可能な場合は処理を中断する。 return unless easy_jumpable?(j_data, array1) #SEを鳴らす場合はSEの処理を行う。 if E_JUMP::SE_USE #SE生成用の配列を取得する。 array2 = E_JUMP::SE #配列を元にSEを作成する。 RPG::SE.new(array2[0],array2[1],array2[2]).play end #ジャンプを実行する。 $game_player.jump(array1[0], array1[1]) end #-------------------------------------------------------------------------- # 簡単ジャンプが可能か? #-------------------------------------------------------------------------- def easy_jumpable?(j_data, array) #侵入不可地形タグと侵入不可リージョンの判定を元に可否判定。 easy_jumpable_by_tag?(j_data, array) && easy_jumpable_by_reg?(j_data, array) end #-------------------------------------------------------------------------- # 侵入不可地形タグ判定 #-------------------------------------------------------------------------- def easy_jumpable_by_tag?(j_data, array) #侵入不可地形タグIDを取得。 t_id = E_JUMP::T_ID #侵入不可地形タグIDが負の値の場合は無条件でtrueを返す。 return true if t_id < 0 #プレイヤーの座標を取得する。 x = $game_player.x y = $game_player.y #プレイヤーの向き別に処理を行う。 case $game_player.direction when 2 # 下 #ジャンプの飛距離分のタイルを計算する。 j_data.times {|a| #タイルの地形タグIDと侵入不可地形タグIDが一致している場合はfalseを返す。 return false if $game_map.terrain_tag( $game_map.round_x(x), $game_map.round_y(y + (a + 1))) == t_id} when 4 # 左 #ジャンプの飛距離分のタイルを計算する。 j_data.abs.times {|a| #タイルの地形タグIDと侵入不可地形タグIDが一致している場合はfalseを返す。 return false if $game_map.terrain_tag( $game_map.round_x(x - (a + 1)), $game_map.round_y(y)) == t_id} when 6 # 右 #ジャンプの飛距離分のタイルを計算する。 j_data.abs.times {|a| #タイルの地形タグIDと侵入不可地形タグIDが一致している場合はfalseを返す。 return false if $game_map.terrain_tag( $game_map.round_x(x + (a + 1)), $game_map.round_y(y)) == t_id} when 8 # 上 #ジャンプの飛距離分のタイルを計算する。 j_data.abs.times {|a| #タイルの地形タグIDと侵入不可地形タグIDが一致している場合はfalseを返す。 return false if $game_map.terrain_tag( $game_map.round_x(x), $game_map.round_y(y - (a + 1))) == t_id} else;false # 方向なし等、念の為 end #trueを返す。 true end #-------------------------------------------------------------------------- # 侵入不可地形リージョン判定 #-------------------------------------------------------------------------- def easy_jumpable_by_reg?(j_data, array) #侵入不可リージョンIDを取得。 r_id = E_JUMP::R_ID #侵入不可地形リージョンIDが負の値の場合は無条件でtrueを返す。 return true if r_id < 0 #プレイヤーの座標を取得する。 x = $game_player.x y = $game_player.y #プレイヤーの向き別に処理を行う。 case $game_player.direction when 2 # 下 #ジャンプの飛距離分のタイルを計算する。 j_data.times {|a| #タイルのリージョンIDと侵入不可地形リージョンIDが一致している場合はfalseを返す。 return false if $game_map.region_id( $game_map.round_x(x), $game_map.round_y(y + (a + 1))) == r_id} when 4 # 左 #ジャンプの飛距離分のタイルを計算する。 j_data.abs.times {|a| #タイルのリージョンIDと侵入不可地形リージョンIDが一致している場合はfalseを返す。 return false if $game_map.region_id( $game_map.round_x(x - (a + 1)), $game_map.round_y(y)) == r_id} when 6 # 右 #ジャンプの飛距離分のタイルを計算する。 j_data.abs.times {|a| #タイルのリージョンIDと侵入不可地形リージョンIDが一致している場合はfalseを返す。 return false if $game_map.region_id( $game_map.round_x(x + (a + 1)), $game_map.round_y(y)) == r_id} when 8 # 上 #ジャンプの飛距離分のタイルを計算する。 j_data.abs.times {|a| #タイルのリージョンIDと侵入不可地形リージョンIDが一致している場合はfalseを返す。 return false if $game_map.region_id( $game_map.round_x(x), $game_map.round_y(y - (a + 1))) == r_id} else;false # 方向なし等、念の為 end #trueを返す。 true end end