#◆◇◆◇◆ 足跡スクリプトVX ver 1.03 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 1.03(2011/01/16) 飛行船で足跡が付いていたミスを修正 ○ ver 1.02(2010/12/13) スイッチによる演出無効化機能を追加 ○ ver 1.01(2010/12/12) スクロールの計算が違っていたミスを修正 ○ ver 1.00(2010/12/06) 公開 ■ 説明 プレイヤー、もしくは指定イベントが特定のタイルの上にいる場合、 足跡を残すようになります。 足跡を付けるタイルの登録には専用のマップを別に使います。 詳しい設定方法はスクリーンショットを参照してください。 雪や砂漠の演出に向いています。 プレイヤーの場合は自動で、 イベントの場合は名前に 影 の文字が含まれていれば足跡を描写します。 画像はピクチャーフォルダにインポートしてください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 足跡スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Character_Step"] = true end # 足跡スクリプトが有効な場合に以降の処理を実行する if MINTO::RGSS["Character_Step"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 足跡用のダミーマップのID # (このダミーマップに配置したタイル全てが足跡を付けるタイルとみなされます) Step_Map_ID = 7 # 機能を一時的に無効化するスイッチ # このスイッチが オン の時、機能を無効化します Not_Step_Switch = 3 end #============================================================================== # ☆ MINTO_Character_Step #------------------------------------------------------------------------------ # 足跡のメイン処理を行うモジュールです。 #============================================================================== module MINTO_Character_Step #-------------------------------------------------------------------------- # ● 足跡セット #-------------------------------------------------------------------------- def self.character_step_set # データが既に存在する場合 unless @character_step_data.nil? # メソッドを返す return end # 足跡用のダミーマップをロード map = load_data(sprintf("Data/Map%03d.rvdata", MINTO::Step_Map_ID)) # 足跡データを初期化 @character_step_data = {} character_step_data = [] # ループ処理(全タイル) for x in (0..map.width) do for y in (0..map.height) do # 足跡データに保存 character_step_data.push(map.data[x, y, 0]) character_step_data.push(map.data[x, y, 1]) character_step_data.push(map.data[x, y, 2]) end end # 重複する要素を除外 character_step_data.uniq! # 無効なデータを除外 character_step_data -= [0] character_step_data -= [nil] # ループ処理 for id in character_step_data do @character_step_data[id] = true end end #-------------------------------------------------------------------------- # ● 足跡データの習得 #-------------------------------------------------------------------------- def self.data return @character_step_data end 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 #-------------------------------------------------------------------------- # ● 足跡有効判定 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- def character_step_include?(x, y) if MINTO_Character_Step.data[$game_map.map.data[x, y, 0]] or MINTO_Character_Step.data[$game_map.map.data[x, y, 1]] or MINTO_Character_Step.data[$game_map.map.data[x, y, 2]] return true end return false end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # 継承先の処理に移行 super # 現在の位置を取得 x = @character.x y = @character.y # 足跡表示フラグを作成 step = false # キャラクターのタイプに応じて分岐 case @character # プレイヤー when Game_Player then # 足跡表示フラグをオン step = true # 機能が無効化されている場合 if $game_map.airship.driving == true then step = false end # イベント when Game_Event then # イベントの名前に 影 が含まれている場合 if @character.event.name.include?("影") == true then # 足跡表示フラグをオン step = true end end # 機能が無効化されている場合 if $game_switches[MINTO::Not_Step_Switch] == true then step = false end # 足跡作成フラグが有効な場合 if step == true # 足跡をつける地形が存在する場合 if character_step_include?(x, y) 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 #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :map # マップの情報 end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :event # イベント end #============================================================================== # ■ Sprite_Character #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- 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 / 8) @dy = ($game_map.display_y / 8) self.x = @ori_x self.y = @ori_y self.z = 1 self.bitmap = Cache.picture("Step") sy = (sprite.character.direction - 2) / 2 * 32 self.src_rect.set(0, sy, 32, 32) @count = 384 end #-------------------------------------------------------------------------- # ● カウントの取得 #-------------------------------------------------------------------------- def count return @count end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # スーパークラスの処理に移行 super # 位置を調節 self.x = @ori_x - (($game_map.display_x / 8) - @dx) self.y = @ori_y - (($game_map.display_y / 8) - @dy) # カウントが残っている場合 if @count >= 1 then # カウントを減らす @count -= 1 # 不透明度を下げる self.opacity = ((@count * 256) / 384) end end end # 足跡データセット MINTO_Character_Step.character_step_set end