#------------------------------------------------------------------------------- # ★ リージョン隠し通路 アシストスクリプト + 壁登攀機能 ver 2.10 # 作成者:Jun.A #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # ■ 設定用 追加コマンドセット用モジュール #------------------------------------------------------------------------------- module HPRegion_module HIDDEN_PASSAGES_SID = 99 # 隠し通路起動スイッチID HIDDEN_PASSAGES_OPACITY_SID = 98 # 隠し通路通過中? HIDDEN_PASSAGES_OPACITY_VALUE = 127 # 隠し通路 透過値 HIDDEN_PASSAGES_REGION_ID_A = 63 # 隠し通路リージョンID A(通行可・透過) HIDDEN_PASSAGES_REGION_ID_B = 62 # 隠し通路リージョンID B(通行可・不透過) # キー入力ジャンプと組み合わせる際、HIDDEN_PASSAGES_REGION_ID_Cは # ジャンプ不可リージョンIDと同じIDにしてください。 HIDDEN_PASSAGES_REGION_ID_C = 61 # 隠し通路リージョンID C(通行不可) HIDDEN_PASSAGES_REGION_ID_D = 60 # 隠し通路リージョンID D(通行可・透過) end module CWRegion_module CLIMB_WALL_SID = 84 # 壁登攀起動スイッチID CLIMB_WALL_PASSAGES_SID = 85 # 壁登攀中? CLIMB_WALL_REGION_ID_A = 58 # 壁登攀リージョン(梯子状態オン) CLIMB_WALL_REGION_ID_B = 57 # 壁登攀リージョン(梯子状態オフ) end =begin ---------------------------------------------------------------マニュアル  このスクリプトは指定されたリージョンを書く事によって、  普段通れない場所を隠し通路として通過可能にするスクリプトです。  動作させるには、追加コマンドセットが必須です。  リージョン隠し通路ver1.00より細かく設定できますが、設定が複雑なので注意。  HIDDEN_PASSAGES_SIDに指定したスイッチIDをオンにする事で動作します。  また、IDは変更可能です。  ★壁登攀機能(ver 2.10より追加)   壁登攀機能と隠し通路機能は別管理のため、どちらかのみ利用する事も可能です。   キー入力ジャンプと併用すると、壁と壁を飛び移ったり出来るようにもなります。   (Kamesoftさんのミニマップを使う場合、壁登攀ルートは表示されません)  CLIMB_WALL_REGION_ID_Aは登攀させたい壁に、   CLIMB_WALL_REGION_ID_Bは床との接地点に書いてください。  ★リージョン隠し通路 詳細  隠し通路用のリージョンIDは、下記の値を変更する事で自由に指定できます。  -----------------------------------------------------------------------------  ・HIDDEN_PASSAGES_REGION_ID_A:進行不可、4方向通行問わず通行可能になります。             ただし、タイル設置していない箇所に書く場合、             接続する床にリージョンBを書かないと、             一方通行になり戻る事が不可能になります。             隠し通路起動スイッチIDをオンにすると起動。 透過します。  -----------------------------------------------------------------------------  ・HIDDEN_PASSAGES_REGION_ID_B:タイル設置していない箇所と床を接続できます。             隠し通路起動スイッチIDをオンにすると起動。 透過しません。  -----------------------------------------------------------------------------  ・HIDDEN_PASSAGES_REGION_ID_C:通行可能な床も通行不可にするリージョンIDです。             スイッチをONにする必要はありません。 透過しません。  -----------------------------------------------------------------------------  ・HIDDEN_PASSAGES_REGION_ID_D:進行不可なタイルが通行可能になります。 リージョンAと違うのは、4方向通行が動作する点。 透過します。一方通行の壁に利用します。  -----------------------------------------------------------------------------  HIDDEN_PASSAGES_OPACITY_VALUEの値を変更すると、  隠し通路通行時のプレイヤーの透過の強さが変わります。  初期値は127、0で完全な透明に、最大値は255です。  ★改造ポイント   改造用トリガーとしてHIDDEN_PASSAGES_OPACITY_SIDを用意しました。   このトリガーは"隠し通路を通っている最中"、trueになります。      $game_playerの@opacityを強制変更する他のスクリプト等を使っている場合、   隠し通路に入っても透過しませんので、   競合するスクリプトをこのスイッチをトリガーにして修正してください。   例)ろかんさんの「シンボルエンカウント補助」修正ポイントは333行目、    @opacity = @origin_opacity を    # リージョン隠し通路との競合修正(Jun.A) if $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] == false @opacity = @origin_opacity end に変更してください。 ★オマケ----------------------------------------------------------------------   Kamesoftさんのミニマップを利用して、ミニマップから   「確認できる隠し通路」と「確認できない隠し通路」を作ることが可能です。   仕様上、マップチップを書いてない箇所にリージョンAを書いた場合、   ミニマップから確認自体は出来ませんが、通行が出来ます。   (直接床に戻る際は、リージョンAと接続する床にリージョンBを書いてください)   通行不能な透過タイルや黒バックのマップチップを書いた上に   リージョンAを書くと、ミニマップから確認する事が出来ます。   これとジャンプを併用すると、かなり複雑なマップを作成出来るようになります。 =end ---------------------------------------------------------マニュアルここまで #--------------------------------------------------------------------- # ■ Game_CharacterBaseクラス 〜passable?の改造 #--------------------------------------------------------------------- class Game_CharacterBase #-------------------------------------------------------------------------- # ● 通行可能判定 # d : 方向(2,4,6,8) #-------------------------------------------------------------------------- alias s004_passable? passable? def passable?(x, y, d) x2 = $game_map.round_x_with_direction(x, d) y2 = $game_map.round_y_with_direction(y, d) # 隠し通路判定 return true if hidden_passage_process(x2,y2) # 壁登攀判定 return true if climb_wall_process(x2,y2) # 全ての条件が当てはまらない場合、通常動作を行う。 return false unless $game_map.valid?(x2, y2) return true if @through || debug_through? return false unless map_passable?(x, y, d) return false unless map_passable?(x2, y2, reverse_dir(d)) return false if collide_with_characters?(x2, y2) return true end #-------------------------------------------------------------------------- # ● 隠し通路判定 #-------------------------------------------------------------------------- def hidden_passage_process(x2,y2) # 隠し通路スイッチチェック if $game_switches[HPRegion_module::HIDDEN_PASSAGES_SID] == true # HIDDEN_PASSAGES_REGION_ID_D 通過・透過条件 # 前方のリージョンが隠し通路Dだった場合 if $add_commandset.assign_region_id(x2, y2) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_D return false if collide_with_characters?(x2, y2) # イベントキャラ衝突判定 return true # 通行不可でも強制的に通れる else # 隠し通路通過中フラグをオフにする(ジャンプ可能) $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] = false end # HIDDEN_PASSAGES_REGION_ID_B 通過・透過条件 # 前方のリージョンが隠し通路Bだった場合 if $add_commandset.assign_region_id(x2, y2) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_B return false if collide_with_characters?(x2, y2) # イベントキャラ衝突判定 return true # 通行不可でも強制的に通れる else # 隠し通路通過中フラグをオフにする(ジャンプ可能) $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] = false end # HIDDEN_PASSAGES_REGION_ID_A 通過・透過条件 # 前方のリージョンが隠し通路Aだった場合 if $add_commandset.assign_region_id(x2, y2) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_A return false if collide_with_characters?(x2, y2) #イベントキャラ衝突判定 return true # 通行不可でも強制的に通れる else # 隠し通路通過中フラグをオフにする(ジャンプ可能) $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] = false end end end #-------------------------------------------------------------------------- # ● 壁登攀判定 #-------------------------------------------------------------------------- def climb_wall_process(x2,y2) # 壁登攀判定 # 壁登攀スイッチチェック if $game_switches[CWRegion_module::CLIMB_WALL_SID] == true # CLIMB_WALL_REGION_ID_A 通過 # 前方のリージョンが壁登攀Aだった場合 if $add_commandset.assign_region_id(x2, y2) == CWRegion_module::CLIMB_WALL_REGION_ID_A # もし壁登攀中フラグがオフならオンにする $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] = true unless $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] return false if collide_with_characters?(x2, y2) #イベントキャラ衝突判定 return true # 通行不可でも強制的に通れる elsif $add_commandset.assign_region_id(x2, y2) == CWRegion_module::CLIMB_WALL_REGION_ID_B # 前方のリージョンが壁登攀Bだった場合は、 # 登攀中フラグをオフにするが壁登攀リージョンを通過可能。 $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] = false if $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] return false if collide_with_characters?(x2, y2) #イベントキャラ衝突判定 return true # 通行不可でも強制的に通れる elsif $add_commandset.check_region_id(0) == CWRegion_module::CLIMB_WALL_REGION_ID_A $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] = true unless $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] else # 壁登攀リージョンAでもBでもない場合は壁登攀中フラグをオフにする $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] = false if $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] end end end end class Game_Player #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias sss_old_update update def update sss_old_update after_moving #移動アニメーション後処理 end #-------------------------------------------------------------------------- # ○ 移動アニメーション後処理 #-------------------------------------------------------------------------- def after_moving # A:透過、透過スイッチもtrue if $game_map.region_id(@x, @y) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_A @opacity = HPRegion_module::HIDDEN_PASSAGES_OPACITY_VALUE $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] = true end # B:不透過、透過スイッチはfalse if $game_map.region_id(@x, @y) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_B $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] = false end # C:透過、透過スイッチもtrue if $game_map.region_id(@x, @y) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_D @opacity = HPRegion_module::HIDDEN_PASSAGES_OPACITY_VALUE $game_switches[HPRegion_module::HIDDEN_PASSAGES_OPACITY_SID] = true end end end class Game_Map #-------------------------------------------------------------------------- # ● 通行チェック # bit : 調べる通行禁止ビット // 隠し通路リージョン対応版 #-------------------------------------------------------------------------- def check_passage(x, y, bit) # 隠し通路スイッチがオフなら、通常動作する unless $game_switches[HPRegion_module::HIDDEN_PASSAGES_SID] all_tiles(x, y).each do |tile_id| flag = tileset.flags[tile_id] next if flag & 0x10 != 0 # [☆] : 通行に影響しない # リージョン隠し通路Cは通常動作でも通行不能 return false if flag & bit == 0 && $add_commandset.assign_region_id(x,y) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_C # [-] : リージョン隠し通路C return true if flag & bit == 0 # [○] : 通行可 return false if flag & bit == bit # [×] : 通行不可 end return false # 通行不可 else # 隠し通路スイッチがオンなら、リージョンCを通行不能・リージョンAを通行可に all_tiles(x, y).each do |tile_id| flag = tileset.flags[tile_id] next if flag & 0x10 != 0 # [☆] : 通行に影響しない return false if flag & bit == 0 && $add_commandset.assign_region_id(x,y) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_C # [-] : リージョン隠し通路C return true if flag & bit == 0 # [○] : 通行可 return true if flag & bit == bit && $add_commandset.assign_region_id(x,y) == HPRegion_module::HIDDEN_PASSAGES_REGION_ID_A # [-] : リージョン隠し通路A return false if flag & bit == bit # [×] : 通行不可 end return false # 通行不可 end end #-------------------------------------------------------------------------- # ● 梯子判定 // 壁登攀中は強制的にtrueを返す #-------------------------------------------------------------------------- alias sss_old01_ladder? ladder? def ladder?(x, y) return true if $game_switches[CWRegion_module::CLIMB_WALL_PASSAGES_SID] sss_old01_ladder?(x, y) #valid?(x, y) && layered_tiles_flag?(x, y, 0x20) end end