#◆◇◆◇◆ 残像スクリプト ver 1・00 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin セクション指定上下関係 A・C・A・システム ↓ 追尾アニメーション ↓ このスクリプト 導入場所の注意 上記の条件をクリアし、且つシステム下部推奨 説明 アニメーション表示中に対象バトラーを追跡する残像を表示させます。 ACAシステムなどでバトラーが動いていることが必要です。 残像は 対象なし のフラッシュに 特定の名前のSEが設定されている場合に可視状態になり、 以降はアニメ終了まで残像が表紙されます。 残像の色はフラッシュの色がそのまま適用されます。 発生する残像の数は任意で変更可能です。 ただし、あまり多くすると重くなるので、 6程度を目安にしてください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 残像スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Blink_Anime"] = true end if MINTO::RGSS["Blink_Anime"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 発生する残像の数(あまり多くすると重くなります) Blink_Anime_Size = 6 # 残像を表示させるフラッシュのSE名 Blink_SE_Name = "残像ON" end #============================================================================== # ■ Sprite #------------------------------------------------------------------------------ #  スプライト表示を扱う組み込みクラスです。 #============================================================================== class Sprite #-------------------------------------------------------------------------- # ● 残像用の複製の作成 #-------------------------------------------------------------------------- def blink # 各データをコピー sprite = Sprite.new(self.viewport) sprite.bitmap = self.bitmap.dup if self.bitmap sprite.x = self.x sprite.y = self.y sprite.z = self.z-1 sprite.visible = false sprite.ox = self.ox sprite.oy = self.oy sprite.angle = self.angle sprite.mirror = self.mirror sprite.opacity = self.opacity - 95 sprite.blend_type = 1 sprite.color = self.color.dup sprite.src_rect = self.src_rect sprite.zoom_x = self.zoom_x sprite.zoom_y = self.zoom_y return sprite end #-------------------------------------------------------------------------- # ● データの取得 #-------------------------------------------------------------------------- def data_copy(data) return if data.disposed? or self.disposed? # 各データをコピー self.x = data.x self.y = data.y self.z = data.z-1 self.visible = data.visible self.ox = data.ox self.oy = data.oy self.angle = data.angle self.mirror = data.mirror self.src_rect = data.src_rect self.zoom_x = data.zoom_x self.zoom_y = data.zoom_y end end #============================================================================== # ■ Blink_Sprite #------------------------------------------------------------------------------ #  残像スプライト表示を扱う組み込みクラスです。 #============================================================================== class Blink_Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 # sprite : オリジナルの画像 #-------------------------------------------------------------------------- def initialize(sprite) # 残像のサイズを取得 @size = MINTO::Blink_Anime_Size # 残像用の配列を作成 @blink = Array.new(@size) # ループ処理 (0...@size).each do |i| # 残像スプライトを作成 @blink[i] = sprite.blink end end #-------------------------------------------------------------------------- # ● 可視状態の変更 # flag : 新しい可視状態 #-------------------------------------------------------------------------- def visible=(flag) # ループ処理 (0...@size).each do |i| # 可視状態を変更 @blink[i].visible = flag end end #-------------------------------------------------------------------------- # ● 残像カラーの変更 # color : 新しいカラー #-------------------------------------------------------------------------- def color_set(color) # ループ処理 (0...@size).each do |i| # 残像カラーを変更 @blink[i].color = color.dup end end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # ループ処理(イテレータ) (0...@blink.size).each do |i| # 残像スプライトが存在する場合 if @blink[i] != nil then # 残像スプライトが未解放の場合 if @blink[i].disposed? == false then # 残像スプライトを解放 @blink[i].dispose end end end end #-------------------------------------------------------------------------- # ● フレーム更新 # sprite : オリジナルの画像 #-------------------------------------------------------------------------- def update(sprite) # 残像が可視状態でない場合 if @blink[0].visible == false then # メソッドを返す return end # ループ処理 (0...@size).each do |i| # 前の残像データを渡す @blink[@size-1 - i].data_copy(@blink[@size-1 - (i + 1)]) end # 残像データを更新 @blink[0].data_copy(sprite) end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # battler : バトラー (Game_Battler) # alias : initialize_Blink_Anima #-------------------------------------------------------------------------- alias :initialize_Blink_Anima :initialize def initialize(viewport, battler = nil) # 元の処理を実行 initialize_Blink_Anima(viewport, battler) # 残像用のデータを定義 @_blink_anime = Blink_Sprite.new(self) end #-------------------------------------------------------------------------- # ● 解放 # alias : dispose_Blink_Anima #-------------------------------------------------------------------------- alias :dispose_Blink_Anima :dispose def dispose # 元の処理を実行 dispose_Blink_Anima # 残像を解放 @_blink_anime.dispose end #-------------------------------------------------------------------------- # ● アニメーション・プロセスタイミング # timing : SEなどのデータ # hit : ヒットフラグ # alias : process_timing_Blink_Anima #-------------------------------------------------------------------------- # 多重エイリアスでない場合 unless method_defined?("process_timing_Blink_Anima") then alias :process_timing_Blink_Anima :animation_process_timing def animation_process_timing(timing, hit) # 条件が ヒット で攻撃がヒットした場合か、 # 条件が ミス で攻撃がミスだった場合、 # もしくは条件が なし だった場合 if (timing.condition == 0) or (timing.condition == 1 and hit == true) or (timing.condition == 2 and hit == false) then # 対象無しのフラッシュが設定されている場合 if timing.flash_scope == 0 then # SE Blink_SE_Name が設定されている場合 if timing.se.name == MINTO::Blink_SE_Name then # 残像を可視状態にする @_blink_anime.visible = true # 残像のカラーを定義 @_blink_anime.color_set(timing.flash_color) # メソッドを返す return end end end # スーパークラスを実行 super(timing, hit) end end #-------------------------------------------------------------------------- # ● アニメーション解放 #-------------------------------------------------------------------------- def dispose_animation # スーパークラスを実行 super # ACAシステムが有効な場合 if MINTO::RGSS["A・C・A・システム"] == true then # 各データを初期化 self.zoom_x = 1 self.zoom_y = 1 self.angle = 0 self.opacity = 255 end # 残像を不可視にする @_blink_anime.visible = false end #-------------------------------------------------------------------------- # ● フレーム更新 # alias : update_Blink_Anima #-------------------------------------------------------------------------- alias :update_Blink_Anima :update def update # 残像を更新 @_blink_anime.update(self) # 元の処理を実行 update_Blink_Anima end end end