#◆◇◆◇◆ 分身回避スクリプトVX ver 1・00 ◇◆◇◆◇ # ☆ マスタースクリプト ver 2.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 説明 特定のIDのステートが掛かっている場合、 攻撃を回避した祭に、キャラクターの分身を発生させます。 分身は攻撃アニメ中に発生し、 アニメの終了が近くなるにつれ、分身も弱くなっていきます。 発生する分身の数は任意で変更可能です。 ただし、あまり多くすると重くなるので、 6程度を目安にしてください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 分身回避スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Blink_Sprite"] = true end if MINTO::RGSS["Blink_Sprite"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行います。 #============================================================================== module MINTO_Sprite_Battler_03 #-------------------------------------------------------------------------- # ● 発生する分身の数の取得 #-------------------------------------------------------------------------- def get_blink_size # 発生する分身の数を返す(あまり多くすると重くなります) return 6 end #-------------------------------------------------------------------------- # ● 分身とみなすステートIDの取得 #-------------------------------------------------------------------------- def get_blink_state_id # 分身とみなすステートのIDを返す return 17 end end #============================================================================== # ☆ MINTO_Sprite_Battler_03 #------------------------------------------------------------------------------ # Sprite_Battlerクラスの強化システムモジュールです。 #============================================================================== module MINTO_Sprite_Battler_03 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート #-------------------------------------------------------------------------- def initialize(viewport) # 分身回避用のデータを定義 @_blink_duration = 0 @_blink_sprite = [] # スーパークラスを実行 (継承先の処理に移行する) super(viewport) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # ループ処理(イテレータ) (0...get_blink_size).each do |i| # 分身スプライトが存在する場合 if @_blink_sprite[i] != nil then # 分身スプライトが未解放の場合 if @_blink_sprite[i].disposed? == false then # 分身スプライトを解放 sprite.bitmap.dispose sprite.dispose sprite = nil end end end # スーパークラスを実行 (継承先の処理に移行する) super end #-------------------------------------------------------------------------- # ● 分身回避 #-------------------------------------------------------------------------- def blink_effect # アニメの最大フレームを取得(最低でも 32 フレームとする) @_blink_duration = [@animation.frame_max * 4, 32].max # ループ処理(イテレータ) (0...get_blink_size).each do |i| # バトラーの複製を作成 @_blink_sprite[i] = self.dup # 半透明にする @_blink_sprite[i].opacity = 160 end end #-------------------------------------------------------------------------- # ● フレーム更新(分身回避) #-------------------------------------------------------------------------- def update_blink_effect # 分身カウントが残っている場合 if @_blink_duration >= 1 then # 影が存在する場合 if @shadow_sprite != nil then # 影を見えなくする @shadow_sprite.visible = false end # 最大修正値を取得(最大で300とする) max_blink = [@_blink_duration, 100].min * 3 # ループ処理(イテレータ) @_blink_sprite.each do |sprite| # バトラーの位置からランダムで位置を取得する amp = [self.bitmap.width * max_blink / 100, 1].max # 分身スプライトの位置を初期化 sprite.x = self.x # 分身スプライト用の位置を設定 sprite.x += rand(amp+1) + rand(amp+1) - amp end # 分身カウントを減らす @_blink_duration -= 1 # 分身カウントが 0 になった場合 if @_blink_duration == 0 then # ループ処理(イテレータ) @_blink_sprite.each do |sprite| # 分身スプライトを解放 sprite.bitmap.dispose sprite.dispose sprite = nil end # 配列を空っぽにする @_blink_sprite = [] # 影が存在する場合 if @shadow_sprite != nil then # 影を可視状態にする @shadow_sprite.visible = true end end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # バトラーがエネミーの場合 if @battler.class == Game_Enemy then # アニメーション表示中の場合 if self.animation? == true then # 回避成功か命中失敗の場合(対象が攻撃を回避した場合) if @battler.evaded == true or @battler.missed == true then # ステート 分身 が付加されている場合 if @battler.state?(get_blink_state_id) == true then # 分身が存在しない場合 if @_blink_sprite == [] then # 分身回避 blink_effect end end end end # 分身を更新 update_blink_effect end # スーパークラスを実行 (継承先の処理に移行する) super end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● システムインクルード宣言 #-------------------------------------------------------------------------- include MINTO_Sprite_Battler_03 # みんとスプライトバトラー end end