#◆◇◆◇◆ 鏡床スクリプト ver 1.03 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.03 グラフィックの変更に対応していなかったミスを修正。 ver 1.02 特定の条件下でエラー落ちするミスを修正。 ver 1.01 スプライト解放時のミスを修正。 説明 現在キャラクターが立っている 「一歩下」のタイルの地形タグが、特定の値だった場合、 一歩下のタイルにキャラクターの半透明の映像を映し出します。 水面などの演出に向いています。 イベントの場合は、「最初の」実行内容が 「注釈」で、注釈の内容が 鏡床描写 のみの場合、同様に映し出します。 設定していない場合は映し出さないので、 映し出したいイベントにだけ設定してください。 導入場所の注意 エイリアスで構成されていますので、 出来るだけ下のほうに導入してください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 鏡床スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Mirror_Tile"] = true end if MINTO::RGSS["Mirror_Tile"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 鏡床のタイルとして扱う地形タグのID # キャラクターが立っている一歩下のレイヤー1〜3の中で、 # 1つでも該当する地形タグがあれば鏡床を作成します Mirror_Tile_ID = 1 end #============================================================================== # ■ Sprite #------------------------------------------------------------------------------ #  スプライト表示を扱う組み込みクラスです。 #============================================================================== class Sprite #-------------------------------------------------------------------------- # ● 複製の作成 #-------------------------------------------------------------------------- def dup # 各データをコピー sprite = Sprite.new(self.viewport) sprite.bitmap = self.bitmap.dup if self.bitmap != nil sprite.x = self.x sprite.y = self.y sprite.z = self.z sprite.visible = self.visible sprite.ox = self.ox sprite.oy = self.oy sprite.angle = self.angle sprite.mirror = self.mirror sprite.opacity = self.opacity sprite.blend_type = self.blend_type sprite.color = self.color.dup sprite.src_rect = self.src_rect.dup sprite.zoom_x = self.zoom_x sprite.zoom_y = self.zoom_y return sprite end end #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● 地形タグの取得 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- def terrain_tag(x, y) # マップIDが有効な場合 if @map_id != 0 then # レイヤー3の地形タグを取得 tag1 = terrain_tag_check(x, y, 2) # レイヤー2の地形タグを取得 tag2 = terrain_tag_check(x, y, 1) # レイヤー1の地形タグを取得 tag3 = terrain_tag_check(x, y, 0) # レイヤー3の地形タグが有効な場合 if tag1 != nil then # 地形タグの情報を返す return tag1 end # レイヤー2の地形タグが有効な場合 if tag2 != nil then # 地形タグの情報を返す return tag2 end # レイヤー1の地形タグが有効な場合 if tag3 != nil then # 地形タグの情報を返す return tag3 end end # 無効判定を返す return 0 end #-------------------------------------------------------------------------- # ● 地形タグの取得(判定) # x : X 座標 # y : Y 座標 # id : 要求されたレイヤーID #-------------------------------------------------------------------------- def terrain_tag_check(x, y, id) # タイルのデータを取得 tile_id = data[x, y, id] # タイルが無効な場合 if tile_id == nil then # 無効フラグを返す return nil # タイルが有効で、且つ地形が存在する場合 elsif @terrain_tags[tile_id] >= 1 then # 地形タグの情報を返す return @terrain_tags[tile_id] end # 無効フラグを返す return nil end #-------------------------------------------------------------------------- # ● 地形タグに含まれているかどうか # x : X 座標 # y : Y 座標 # id : 要求されたID #-------------------------------------------------------------------------- def terrain_tag_include?(x, y, id) # マップIDが有効な場合 if @map_id != 0 then # レイヤー3の地形タグを取得 tag1 = terrain_tag_check(x, y, 2) # レイヤー2の地形タグを取得 tag2 = terrain_tag_check(x, y, 1) # レイヤー1の地形タグを取得 tag3 = terrain_tag_check(x, y, 0) # レイヤー1〜3の中で1つでも指定されたIDの地形が存在する場合 if tag1 == id or tag2 == id or tag3 == id then # 有効フラグを返す return true end end # 無効フラグを返す return false end end #============================================================================== # ■ Sprite_Character #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。 # Game_Character クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < RPG::Sprite #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # 鏡床が存在する場合 if @mirror_tile_sprite != nil then # 鏡床を解放 @mirror_tile_sprite.bitmap.dispose @mirror_tile_sprite.dispose end # スーパークラスを実行 super end #-------------------------------------------------------------------------- # ● 地形タグの取得 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- def terrain_tag(x, y) # 地形タグの情報を返す return $game_map.terrain_tag(x, y) end #-------------------------------------------------------------------------- # ● 特定の地形タグの有無の取得 # x : X 座標 # y : Y 座標 # id : 要求されたID #-------------------------------------------------------------------------- def terrain_tag_include?(x, y, id) # 地形タグの情報を返す return $game_map.terrain_tag_include?(x, y, id) end #-------------------------------------------------------------------------- # ● 鏡床の作成 #-------------------------------------------------------------------------- def mirror_tile_set # 鏡床が存在する場合 if @mirror_tile_sprite != nil then # 鏡床を解放 @mirror_tile_sprite.bitmap.dispose @mirror_tile_sprite.bitmap = nil @mirror_tile_sprite.dispose @mirror_tile_sprite = nil end # 最終ファイル名を更新 @last_tile_id = @character.tile_id @last_character_name = @character.character_name.dup @last_character_hue = @character.character_hue # 鏡床用のスプライトを生成 @mirror_tile_sprite = self.dup # 座標を調節する @mirror_tile_sprite.y = self.y - (self.oy / 6) @mirror_tile_sprite.z = self.z # 色を白っぽくする @mirror_tile_sprite.tone.red = 64 @mirror_tile_sprite.tone.green = 64 @mirror_tile_sprite.tone.blue = 64 # 半透明にする @mirror_tile_sprite.opacity = self.opacity * 62 / 100 # 180度回転させる @mirror_tile_sprite.angle = 180 # 左右を反転させる @mirror_tile_sprite.mirror = (not self.mirror == true) end #-------------------------------------------------------------------------- # ● 鏡床の更新 #-------------------------------------------------------------------------- def update_mirror_tile # キャラクターの現在位置を取得 x = @character.x y = @character.y # 元々鏡床が存在しない場合 if @mirror_tile_sprite == nil then # メソッドを返す return end # 下のタイルの地形タグのIDが Mirror_Tile_ID 以外の場合 if terrain_tag_include?(x, y+1, MINTO::Mirror_Tile_ID) == false then # 鏡床を不可視状態にする @mirror_tile_sprite.visible = false # メソッドを返す return # 下のタイルの地形タグのIDが Mirror_Tile_ID の場合 else # Y座標補正値を初期化する @y_plus = 0 end # 各情報を更新する @mirror_tile_sprite.src_rect = self.src_rect.dup @mirror_tile_sprite.x = self.x @mirror_tile_sprite.y = self.y - (self.oy / 6) + @y_plus @mirror_tile_sprite.opacity = self.opacity * 62 / 100 @mirror_tile_sprite.z = self.z - 1 @mirror_tile_sprite.visible = self.visible end #-------------------------------------------------------------------------- # ● フレーム更新 # alias : update_MINTO_Mirror_Tile #-------------------------------------------------------------------------- alias update_MINTO_Mirror_Tile update def update # ファイル名、色相のどれかが現在のものと異なる場合 if @last_tile_id != @character.tile_id or @last_character_name != @character.character_name or @last_character_hue != @character.character_hue # 鏡床が存在する場合 if @mirror_tile_sprite != nil then # 元の処理を実行 update_MINTO_Mirror_Tile # 鏡床を再作成 mirror_tile_set # 鏡床を更新 update_mirror_tile # メソッドを返す return end end # 元の処理を実行 update_MINTO_Mirror_Tile # まだ鏡床を作成していない場合 if @mirror_tile == nil then # キャラクターがイベントの場合 if @character.is_a?(Game_Event) == true then # 有効なイベントの場合 if @character.list != nil then # 最初の内容が注釈の場合 if @character.list[0].code == 108 then # 注釈の内容が「鏡床描写」だった場合 if @character.list[0].parameters == ["鏡床描写"] then # 鏡床を作成 mirror_tile_set # 作成済みフラグをオン @mirror_tile = true end end end # キャラクターがプレイヤーの場合 else # 鏡床を作成 mirror_tile_set # 作成済みフラグをオン @mirror_tile = true end end # 鏡床を更新 update_mirror_tile end end end