#◆◇◆◇◆ 鏡床スクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
■ 更新履歴
○ ver 1.00(2010/11/23)
公開
■ 説明
現在キャラクターが立っている
「一歩下」のタイルが、特定のタイルだった場合、
一歩下のタイルにキャラクターの半透明の映像を映し出します。
水面などの演出に向いています。
鏡床とみなされるタイルの登録には地形タグを使用します。
タイルセットの地形タグを任意の値に設定してください。
イベントの場合は、「最初の」実行内容が
「注釈」で、注釈の内容が 鏡床描写 のみの場合、同様に映し出します。
設定していない場合は映し出さないので、
映し出したいイベントにだけ設定してください。
導入場所の注意
エイリアスで構成されていますので、
出来るだけ下のほうに導入してください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 鏡床スクリプトVXを有効化 ( true で有効 / false で無効 )
RGSS["鏡床スクリプトVX"] = true
# 鏡床のタイルとして扱う地形タグのID
# キャラクターが立っている一歩下のレイヤー1~3の中で、
# 1つでも該当する地形タグがあれば鏡床を作成します
Mirror_Tile_ID = 1
# 鏡床無効のタイルとして扱う地形タグのID
# キャラクターが立っている一歩下のレイヤー1~3の中で、
# 1つでも該当する地形タグがあれば鏡床を無効化します
# 無効化タイルを使用しない場合は nil を収納してください
Not_Mirror_Tile_ID = 2
# 機能を一時的に無効化するスイッチ
# このスイッチが オン の時、機能を無効化します
Not_Mirror_Switch = 0
end
# 鏡床スクリプトVXが有効な場合に以降の処理を実行する
if MINTO::RGSS["鏡床スクリプトVX"] == true then
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
# このクラスのインスタンスは $game_map で参照されます。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :map # マップの情報
#--------------------------------------------------------------------------
# ● 地形タグの取得
# x : 指定 X 座標
# y : 指定 Y 座標
# tag : 指定地形タグ
#--------------------------------------------------------------------------
def terrain_tag_include?(x, y, tag)
# 無効なタイルの場合
unless valid?(x, y)
# メソッドを返す
return false
end
# 全レイヤーを検索
for tile_id in layered_tiles(x, y) do
# タグを取得
t = tileset.flags[tile_id] >> 12
# 地系タグが一致した場合
if tag == t
# メソッドを返す
return true
end
end
# メソッドを返す
return false
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。
# Game_Character クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● 解放
# alias : dispose_MINTO_Mirror_Tile
#--------------------------------------------------------------------------
alias :dispose_MINTO_Mirror_Tile :dispose
def dispose
# 鏡床が存在する場合
if @mirror_tile_sprite != nil then
# 鏡床を解放
@mirror_tile_sprite.bitmap.dispose
@mirror_tile_sprite.dispose
end
# 元の処理を実行
dispose_MINTO_Mirror_Tile
end
#--------------------------------------------------------------------------
# ● 鏡床有効判定
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def mirror_tile_include?(x, y)
# 目標のタイルが鏡床の場合
if $game_map.terrain_tag_include?(x, y, MINTO::Mirror_Tile_ID)
# 鏡床無効化タイルが有効な場合
unless MINTO::Not_Mirror_Tile_ID.nil?
# 鏡床が無効化されていない場合
unless $game_map.terrain_tag_include?(x, y, MINTO::Not_Mirror_Tile_ID)
# メソッドを返す
return true
end
# 無効化タイルを使用していない場合
else
# メソッドを返す
return true
end
end
# メソッドを返す
return false
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
# 鏡床用のスプライトを生成
@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
# 機能が無効化されている場合
if $game_switches[MINTO::Not_Mirror_Switch] == true then
# 不可視状態にする
@mirror_tile_sprite.visible = false
# メソッドを返す
return
end
# プレイヤーの場合
unless @character.is_a?(Game_Event) then
# 機能が無効化されている場合
if $game_map.airship.driving == true then
# 不可視状態にする
@mirror_tile_sprite.visible = false
# メソッドを返す
return
end
end
# 下のタイルが鏡床以外の場合
if mirror_tile_include?(x, (y + 1)) == false then
# 鏡床を不可視状態にする
@mirror_tile_sprite.visible = false
# メソッドを返す
return
# 下のタイルが鏡床の場合
else
# Y座標補正値を初期化する
@y_plus = 6
#@mirror_tile_sprite.wave_amp = 1
#@mirror_tile_sprite.wave_length = 60
#@mirror_tile_sprite.wave_speed = 320
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
@mirror_tile_sprite.update
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
# 鏡床が存在する場合
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