#◆◇◆◇◆ ☆☆ 鏡の壁スクリプト ver 1.13 ◇◆◇◆◇ # ☆☆ マスタースクリプト ver 3.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.13(2012/03/21) 条件次第で鏡が重複するミスを修正 ver 1.12(2010/12/14) 歯車の城さんに対応 ver 1.11(2008/11/10) 鏡床スクリプト1.03に対応 ver 1.10 全く動かないイベントに限り、 そのイベントを鏡の壁とみなす機能を追加 ver 1.01 イベントのグラフィックを タイルチップにした場合のエラー落ちを修正 セクション指定上下関係 鏡床スクリプト ↓ このスクリプト 導入場所の注意 エイリアスで構成されていますので、 出来るだけ下のほうに導入してください。 説明 鏡床スクリプト(ver 1.03以降)専用拡張スクリプトです。 このスクリプト素材を使用する場合は、 鏡床スクリプト(ver 1.03以降)が必須となります。 キャラクターの「一歩上」のタイルの地形タグが特定のIDだった場合、 そのタイルにキャラクターの鏡写し映像を描写します。 イベントの場合は、鏡床スクリプトのものをそのまま継承します。 氷のダンジョン等に向いているかもしれません。 ◆ 鏡の壁イベントの設定 鏡の壁とみなすイベントには、 まず移動タイプを 固定 にし、 名前に 鏡 の文字を含ませてください。 そのイベントは鏡の壁とみなされます。 (途中でそのイベントを動かしても、 鏡の壁の判定は更新されません。 あくまで絶対に動かないイベント専用の機能です) =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 鏡の壁スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Mirror_Wall"] = true end if MINTO::RGSS["Mirror_Wall"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 鏡の壁タイルとして扱う地形タグのID # キャラクターが立っている一歩下のレイヤー1〜3の中で、 # 1つでも該当する地形タグがあれば鏡の壁を作成します Mirror_Wall_ID = 2 end #============================================================================== # ■ Game_Character (分割定義 1) #------------------------------------------------------------------------------ #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event # クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :move_type # 移動タイプ end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :event # イベント end #============================================================================== # ■ Spriteset_Map #------------------------------------------------------------------------------ #  マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは # Scene_Map クラスの内部で使用されます。 #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :mirror_wall # 鏡の壁イベントの位置情報 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # alias : initialize_Mirror_Wall #-------------------------------------------------------------------------- alias :initialize_Mirror_Wall :initialize def initialize # 鏡の壁イベントの位置情報を定義 @mirror_wall = Table.new($game_map.width, $game_map.height) # 元の処理を実行 initialize_Mirror_Wall # ループ処理 for character in @character_sprites do # キャラクターがイベントの場合 if character.character.class == Game_Event then # キャラクターの移動タイプが固定の場合 if character.character.move_type == 0 then # イベント名に 鏡 が含まれる場合 if character.character.event.name.include?("鏡") == true then # 位置を取得 x = character.character.x y = character.character.y # 位置を保存 @mirror_wall[x, y] = 1 end end end end end end #============================================================================== # ■ Sprite_Character (分割定義 2) #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。 # Game_Character クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < RPG::Sprite #-------------------------------------------------------------------------- # ● 解放 # alias : dispose_Mirror_Wall #-------------------------------------------------------------------------- alias :dispose_Mirror_Wall :dispose def dispose # 鏡の壁を解放 dispose_mirror_wall # 元の処理を実行 dispose_Mirror_Wall end #-------------------------------------------------------------------------- # ● 鏡の壁の解放 #-------------------------------------------------------------------------- def dispose_mirror_wall # 鏡が存在する場合 if @mirror_sprite != nil then # 鏡を解放 @mirror_sprite.bitmap.dispose @mirror_sprite.bitmap = nil @mirror_sprite.dispose @mirror_sprite = nil end end #-------------------------------------------------------------------------- # ● 鏡床の作成 # alias : mirror_tile_set_Mirror_Wall #-------------------------------------------------------------------------- alias :mirror_tile_set_Mirror_Wall :mirror_tile_set def mirror_tile_set # 元の処理を実行 mirror_tile_set_Mirror_Wall # 鏡を作成 mirror_set end #-------------------------------------------------------------------------- # ● 鏡の作成 #-------------------------------------------------------------------------- def mirror_set # 鏡の壁を解放 dispose_mirror_wall # 鏡用のスプライトを生成 @mirror_sprite = self.dup # 座標を調節する @mirror_sprite.y = self.y + (self.oy / 6) @mirror_sprite.z = self.z # 色を白っぽくする @mirror_sprite.tone.red = 64 @mirror_sprite.tone.green = 64 @mirror_sprite.tone.blue = 64 # 不透明にする @mirror_sprite.opacity = 0 # 左右を反転させる @mirror_sprite.mirror = (!self.mirror == true) # タイル ID が有効な値の場合 if @tile_id >= 384 then # メソッドを返す return end # キャラクターの向きに応じて分岐 case @character.direction # 下 when 2 then direction = 8 # 左 when 4 then direction = 6 # 右 when 6 then direction = 4 # 上 when 8 then direction = 2 end sx = @character.pattern * @cw sy = (direction - 2) / 2 * @ch @mirror_sprite.src_rect.set(sx, sy, @cw, @ch) update_mirror end #-------------------------------------------------------------------------- # ● 影の更新 # alias : update_mirror_tile_Mirror_Wall #-------------------------------------------------------------------------- alias :update_mirror_tile_Mirror_Wall :update_mirror_tile def update_mirror_tile # 元の処理を実行 update_mirror_tile_Mirror_Wall # 鏡を更新 update_mirror end #-------------------------------------------------------------------------- # ● 鏡の更新 #-------------------------------------------------------------------------- def update_mirror # 現在の位置を取得 x = @character.x y = @character.y # 元々鏡が存在しない場合 if @mirror_sprite == nil then # 処理を終了 return end # スプライトセットの有効判定 effective = ($scene.spriteset != nil) # スプライトセットが有効で、且つ一歩上に鏡の壁イベントが存在する場合 if effective and $scene.spriteset.mirror_wall[x, y-1] == 1 then # Y座標補正値を初期化する @y_plus = -48 # 透明度を調節 @mirror_sprite.opacity = [@mirror_sprite.opacity + 12, 160].min # 一歩上のタイルの地形タグのIDが MINTO::Mirror_Wall_ID 以外の場合 elsif terrain_tag_include?(x, y-1, MINTO::Mirror_Wall_ID) == false then # 不透明にする @mirror_sprite.opacity = 32 # 鏡を不可視状態にする @mirror_sprite.visible = false # 処理を終了 return # 一歩上のタイルの地形タグのIDが MINTO::Mirror_Wall_ID の場合 else # Y座標補正値を初期化する @y_plus = -48 # 透明度を調節 @mirror_sprite.opacity = [@mirror_sprite.opacity + 12, 160].min end # タイル ID が有効な値の場合 if @tile_id >= 384 then # 各情報を更新する @mirror_sprite.src_rect = self.src_rect @mirror_sprite.x = self.x @mirror_sprite.y = self.y + (self.oy / 6) + @y_plus @mirror_sprite.z = self.z - 1 @mirror_sprite.visible = self.visible # メソッドを返す return end # キャラクターの向きに応じて分岐 case @character.direction # 下 when 2 then direction = 8 # 左 when 4 then direction = 6 # 右 when 6 then direction = 4 # 上 when 8 then direction = 2 end # 各情報を更新する sx = @character.pattern * @cw sy = (direction - 2) / 2 * @ch @mirror_sprite.src_rect.set(sx, sy, @cw, @ch) @mirror_sprite.x = self.x @mirror_sprite.y = self.y + (self.oy / 6) + @y_plus @mirror_sprite.z = self.z - 1 @mirror_sprite.visible = self.visible end end #============================================================================== # ■ Scene_Map #------------------------------------------------------------------------------ #  マップ画面の処理を行うクラスです。 #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :spriteset # スプライトセット end #============================================================================== # ■ Scene_Menu #------------------------------------------------------------------------------ #  メニュー画面の処理を行うクラスです。 #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :spriteset # スプライトセット end end