#◆◇◆◇◆ キャラ分身スクリプトVX ver 1・00 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 1.00(2010/12/18) 公開 ■ 説明 マップ上のキャラに分身を表示させます。 イベントの演出に一役買ってくれるかもしれません。 分身を表示するには、 フラッシュに 分身実行 という名前のSEが設定されているアニメを、 分身をつけたいキャラクターに表示してください。 1フレームのアニメに、フラッシュ[分身実行]だけで構いません。 分身のデータは フラッシュの赤→分身のカラーID フラッシュの青→分身の数 フラッシュの緑→分身の演出タイプ フラッシュの強さ→分身の発生範囲の幅 フラッシュの時間→分身の時間 にそれぞれ変換されます。 分身の色はソース内部で設定してください。 分身の演出タイプは 0→縦のみの分身 1→横みの分身 それ以外→ランダム分身 となります。 分身は時間が短くなるにつれ、次第に弱くなっていきます。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # キャラ分身スクリプトVXを有効化 ( true で有効 / false で無効 ) RGSS["キャラ分身スクリプトVX"] = true end # キャラ分身スクリプトVXが有効な場合に以降の処理を実行する if MINTO::RGSS["キャラ分身スクリプトVX"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO_Sprite_Character_02 #-------------------------------------------------------------------------- # ● 分身の色の取得 # n : 分身の色番号 #-------------------------------------------------------------------------- def blink_color(n) case n when 0 # 分身の表示形式(0 : 通常, 1 : 加算, 2 : 減算) blend = 1 # 分身の色(赤, 緑, 青, 強さ) color = Color.new(255, 0, 0, 160) when 1 # 分身の表示形式(0 : 通常, 1 : 加算, 2 : 減算) blend = 1 # 分身の色(赤, 緑, 青, 強さ) color = Color.new(0, 255, 0, 160) when 2 # 分身の表示形式(0 : 通常, 1 : 加算, 2 : 減算) blend = 1 # 分身の色(赤, 緑, 青, 強さ) color = Color.new(0, 0, 255, 160) when 3 # 分身の表示形式(0 : 通常, 1 : 加算, 2 : 減算) blend = 1 # 分身の色(赤, 緑, 青, 強さ) color = Color.new(128, 0, 255, 160) when 4 # 分身の表示形式(0 : 通常, 1 : 加算, 2 : 減算) blend = 0 # 分身の色(赤, 緑, 青, 強さ) color = Color.new(225, 225, 225, 96) else # 0〜3までのデータからランダムで選択 return blink_color(rand(4)) end return [blend, color] end end #============================================================================== # ■ Numeric #------------------------------------------------------------------------------ #  数値全般を扱う組み込みクラスです。 #============================================================================== class Numeric #-------------------------------------------------------------------------- # ● 最大値の設定 # max : 求められた最大の数値 #-------------------------------------------------------------------------- def to_m(max) if self > max return max else return self end end #-------------------------------------------------------------------------- # ● 最小値の設定 # min : 求められた最小の数値 #-------------------------------------------------------------------------- def to_min(min) if self < min return min else return self end end end #============================================================================== # ☆ MINTO_Sprite_Base_02 #------------------------------------------------------------------------------ # Sprite_Baseクラスの強化システムモジュールです。 #============================================================================== module MINTO_Sprite_Base_02 #-------------------------------------------------------------------------- # ● SE とフラッシュのタイミング処理 # timing : タイミングデータ (RPG::Animation::Timing) #-------------------------------------------------------------------------- def animation_process_timing(timing) # SE 分身実行 が設定されている場合 if timing.se.name == "分身実行" then # 分身実行 self.blink_effect(timing) # SE 分身実行 が設定されていない場合 else # スーパークラスを実行 (継承先の処理に移行する) super(timing) end end end #============================================================================== # ☆ MINTO_Sprite_Character_02 #------------------------------------------------------------------------------ # Sprite_Battlerクラスの強化システムモジュールです。 #============================================================================== module MINTO_Sprite_Character_02 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート #-------------------------------------------------------------------------- def initialize(viewport) # 分身回避用のデータを定義 @_blink_size = 0 @_blink_duration = 0 @_blink_sprite = [] # スーパークラスを実行 (継承先の処理に移行する) super(viewport) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # 分身の解放 dispose_blink # スーパークラスを実行 (継承先の処理に移行する) super end #-------------------------------------------------------------------------- # ● 分身の解放 #-------------------------------------------------------------------------- def dispose_blink # ループ処理(イテレータ) (0...@_blink_sprite.size).each do |i| # 分身スプライトが存在する場合 unless @_blink_sprite[i].nil? then # 分身スプライトが未解放の場合 if @_blink_sprite[i].disposed? == false then # 分身スプライトを解放 @_blink_sprite[i].dispose @_blink_sprite[i] = nil end end end # 無効な配列を削除 @_blink_sprite.compact! # 影が存在する場合 unless @character_shadow.nil? then # 影を可視状態にする @character_shadow.visible = true end # 自身を可視にする @character.transparent = false end #-------------------------------------------------------------------------- # ● 分身回避 # timing : タイミングデータ (RPG::Animation::Timing) #-------------------------------------------------------------------------- def blink_effect(timing) # 分身を解放 dispose_blink # 影が存在する場合 unless @character_shadow.nil? then # 影を見えなくする @character_shadow.visible = false end # フラッシュの緑を分身の数に変換 @_blink_size = timing.flash_color.green.to_m(16) # フラッシュの青を分身のタイプに変換 @_blink_type = timing.flash_color.blue # フラッシュの強さを分身の強さに変換 @_blink_alpha = timing.flash_color.alpha # 分身の時間(フラッシュの時間) @_blink_duration = timing.flash_duration # ループ処理(イテレータ) (0...@_blink_size).each do |i| # 分身の色データを取得 data = blink_color(timing.flash_color.red) # キャラクターの複製を作成 @_blink_sprite[i] = self.dup # ブレンドを設定 @_blink_sprite[i].blend_type = data[0] # 色を設定 @_blink_sprite[i].color = data[1] # 半透明にする @_blink_sprite[i].opacity = ((self.opacity * 160) / 255) end # 自身を不可視にする @character.transparent = true end #-------------------------------------------------------------------------- # ● フレーム更新(分身回避) #-------------------------------------------------------------------------- def update_blink_effect # 分身カウントが残っている場合 if @_blink_duration >= 1 then # ループ処理(イテレータ) @_blink_sprite.each do |sprite| # バトラーの位置からランダムで位置を取得する amp = (@_blink_alpha * @_blink_duration / 100).to_min(1) # 分身スプライトの位置を初期化 sprite.x = self.x sprite.y = self.y # 分身のタイプに応じて分岐 case @_blink_type # 縦分身 when 0 # 分身スプライト用の位置を設定 sprite.y += rand(amp+1) + rand(amp+1) - amp # 横分身 when 1 # 分身スプライト用の位置を設定 sprite.x += rand(amp+1) + rand(amp+1) - amp # ランダム分身 else # 分身スプライト用の位置を設定 sprite.x += rand(amp+1) + rand(amp+1) - amp # 分身スプライト用の位置を設定 sprite.y += rand(amp+1) + rand(amp+1) - amp end end # 分身カウントを減らす @_blink_duration -= 1 # 分身カウントが 0 になった場合 if @_blink_duration == 0 then # 分身を解放 dispose_blink end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # スーパークラスを実行 (継承先の処理に移行する) super # 分身を更新 update_blink_effect end end #============================================================================== # ■ Sprite_Character #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include(MINTO_Sprite_Base_02) # みんとスプライトベース include(MINTO_Sprite_Character_02) # みんとスプライトキャラクター end end