#◆◇◆◇◆ 足跡スクリプト ver 1.01 ◇◆◇◆◇ # 全マスタースクリプト共通スクリプト # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ver 1.01(2009/05/31) エフェクトが更新されないミスを修正 ver 1.00(2009/05/28) 公開 ■ 説明 プレイヤー、もしくは指定イベントが 特定の地形の上にいる場合、 足跡を残すようになります。 雪や砂漠の演出に向いています。 プレイヤーの場合は自動で、 イベントの場合は名前に 影 の文字が含まれていれば足跡を描写します。 画像はピクチャーフォルダにインポートしてください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 足跡スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Character_Step"] = true end # 遮光スクリプトが有効な場合に以降の処理を実行する if MINTO::RGSS["Character_Step"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 足跡をつける地形タグのID # ※ キャラクターが立っているレイヤー1〜3の中で、 # 1つでも該当する地形タグが足跡をつけます Step_Tile_ID = 4 end #============================================================================== # ■ Sprite_Step_Module #------------------------------------------------------------------------------ #  影表示用のスプライトです。 # Game_Character クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== module Sprite_Step_Module #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート #-------------------------------------------------------------------------- def initialize(viewport) @steps = [] # 継承先の処理に移行 super(viewport) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # ループ処理 for sprite in @steps do # 足跡を解放 sprite.bitmap.dispose sprite.dispose end # 継承先の処理に移行 super end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # 継承先の処理に移行 super # 現在の位置を取得 x = @character.x y = @character.y # 足跡表示フラグを作成 step = false # キャラクターのタイプに応じて分岐 case @character # プレイヤー when Game_Player then # 足跡表示フラグをオン step = true # イベント when Game_Event then # イベントの名前に 影 が含まれている場合 if @character.event.name.include?("影") == true then # 足跡表示フラグをオン step = true end end # 足跡作成フラグが有効な場合 if step == true # 足跡をつける地形が存在する場合 if $game_map.terrain_tag_include?(x, y, MINTO::Step_Tile_ID) then # 動いた場合 if @step_x != x or @step_y != y then # 位置を記憶 @step_x = x @step_y = y # 足跡をつける @steps.push(Sprite_Step.new(self)) end end end # ループ処理 for i in 0...@steps.size do # 足跡を取得 steps = @steps[i] # 足跡が存在する場合 unless steps.nil? then # 足跡を更新 steps.update # 足跡の保留カウントがなくなった場合 if steps.count.zero? then # 足跡を解放 steps.dispose @steps[i] = nil @steps.compact! end end end 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 #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :event # イベント end #============================================================================== # ■ Sprite_Character #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < RPG::Sprite #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include(Sprite_Step_Module) # 影描写モジュール end #============================================================================== # ■ Sprite_Step #------------------------------------------------------------------------------ #  足跡表示用のスプライトです。 # このクラスのインスタンスはSprite_Characterクラスの内部で使用されます。 #============================================================================== class Sprite_Step < Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 # sprite : スプライト #-------------------------------------------------------------------------- def initialize(sprite) super(sprite.viewport) @sprite = sprite @ori_x = sprite.x - 16 @ori_y = sprite.y - 20 @dx = ($game_map.display_x / 4) @dy = ($game_map.display_y / 4) self.x = @ori_x self.y = @ori_y self.z = 1 self.bitmap = RPG::Cache.picture("足跡") sy = (sprite.character.direction - 2) / 2 * 32 self.src_rect.set(0, sy, 32, 32) @count = 255 end #-------------------------------------------------------------------------- # ● カウントの取得 #-------------------------------------------------------------------------- def count return @count end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # スーパークラスの処理に移行 super # 位置を調節 self.x = @ori_x - (($game_map.display_x / 4) - @dx) self.y = @ori_y - (($game_map.display_y / 4) - @dy) # カウントが残っている場合 if @count >= 1 then # カウントを減らす @count -= 1 # 不透明度を下げる self.opacity -= 1 end end end end