#============================================================================== # ■ 追尾攻撃 -変化版- Ver.1.0.2 by Claimh #------------------------------------------------------------------------------ # ・通常攻撃をしたときにタイミング良くキーを入力することで、追加攻撃が発動する。 # ・オート発動、連続追尾回数も設定可能 # ・追尾攻撃を発動させるキー入力のタイミング # 対象側のアニメーションが表示されている時 # ・クリティカル時にアニメーションを変えることができる # ダメージ一括表示時でも攻撃途中に一度でもクリティカルが出たときは # 最後のダメージ表示時に"CRITICAL"の文字が出る # ・攻撃ミス時には追尾攻撃を中止させることもできる # ・追尾攻撃が成功するとアニメーションの変化 #============================================================================== module Add_attack ADD_ATK = [] #============================================================================== # □ カスタマイズSTART #============================================================================== # 追尾攻撃発動キー ADD_ATK_KEY = Input::C # ダメージ一括表示 ADD_ATK_DMG_ALL = true # 不要ならfalse # 対象側アニメーションの間にウェイトを入れる ADD_ATK_WAIT = 4 # 数値はフレーム数、不要ならnil # 通常攻撃がミスなら追尾しない ADD_ATK_MISS = true # 不要ならfalse # クリティカル発生時にアニメーションを変化させる ADD_ATK_CRITICAL = true # 不要ならfalse # 追尾攻撃成功時に鳴らすSE ADD_ATK_SE = "020-Teleport03" # 不要ならnil # アニメ変化セット(アニメーションID) ADD_ANIME1 = [30,31,32] # ← 連続回数が4以下に対応可 ADD_ANIME2 = [33,33,34,34,35] # ← 連続回数が6以下に対応可 ADD_ANIME3 = [42,44,43,44] # ← 連続回数が5以下に対応可 ADD_ANIME4 = [48,49] # ← 連続回数が3以下に対応可 # 追尾攻撃設定例 # [武器ID, 追尾攻撃力(%), アニメ変化セット, オート発生フラグ, 成功率, # 連続回数, クリティカル時アニメーション] # 注:連続回数に対応したアニメ変化セットを使用してください ADD_ATK[0] = [1, 120, ADD_ANIME1, false, 100, 4, 32] ADD_ATK[1] = [5, 70, ADD_ANIME2, false, 50, 6, 35] ADD_ATK[2] = [25, 80, ADD_ANIME3, false, 100, 5, 44] ADD_ATK[3] = [29, 150, ADD_ANIME4, false, 20, 3, 49] #============================================================================== # □ カスタマイズEND #============================================================================== end class Scene_Battle include Add_attack #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備) #-------------------------------------------------------------------------- alias update_phase4_step1_add_atk update_phase4_step1 def update_phase4_step1 update_phase4_step1_add_atk @add_atk_flg = false # 追尾攻撃開始 $add_atk_exercise = false # 追尾攻撃実行中 $add_atk_end = false # 追尾攻撃終了 @add_atk_check_key = false # 追尾判定実行中 @add_atk_success = false # 追尾成功 @add_atk_count = 0 # 追尾数カウント $add_atk_first = true # 初期フラグ end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション) #-------------------------------------------------------------------------- alias update_phase4_step3_add_atk update_phase4_step3 def update_phase4_step3 # 追尾実行中ならステップ4に強制移行 if $add_atk_exercise # ステップ 4 に移行 @phase4_step = 4 return elsif @active_battler.current_action.basic == 0 if @active_battler.is_a?(Game_Actor) # 追尾チェック add_atk_check(@active_battler) end end update_phase4_step3_add_atk # 原物 end #-------------------------------------------------------------------------- # ● 追尾チェック #-------------------------------------------------------------------------- def add_atk_check(actor) for i in 0..ADD_ATK.size-1 $add_atk_set = ADD_ATK[i] # 追尾攻撃に整合 if actor.weapon_id == $add_atk_set[0] @add_atk_flg = true return end end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション) #-------------------------------------------------------------------------- alias update_phase4_step4_add_atk update_phase4_step4 def update_phase4_step4 # 追尾攻撃 if @add_atk_flg # キーチェックを開始する @add_atk_check_key = true # 追尾実行中ならアニメーション再セット if $add_atk_exercise ch_anime_set = $add_atk_set[2] @animation2_id = ch_anime_set[@add_atk_count-1] end # 対象側アニメーション for target in @target_battlers # クリティカルでアニメーション変化 if ADD_ATK_CRITICAL and target.critical and $add_atk_first target.animation_id = $add_atk_set[6] else # 一度でもクリティカルがあった if target.one_critical and ADD_ATK_DMG_ALL target.critical = true end target.animation_id = @animation2_id end target.animation_hit = (target.damage != "Miss") end # ウェイトを入れる if ADD_ATK_WAIT != nil @wait_count = ADD_ATK_WAIT end # ステップ 5 に移行 @phase4_step = 5 return end update_phase4_step4_add_atk # 原物 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias update_phase4_step5_add_atk update_phase4_step5 def update_phase4_step5 # キーチェック終了 @add_atk_check_key = false # 追尾成功 if @add_atk_success # 追尾実行中に移行 $add_atk_exercise = true end # ダメージ一括表示 if ADD_ATK_DMG_ALL and $add_atk_exercise # 追尾終了or追尾失敗 if $add_atk_end or !@add_atk_success $add_atk_exercise = false @add_atk_flg = false $add_atk_end = false # ヘルプウィンドウを隠す @help_window.visible = false # ステータスウィンドウをリフレッシュ @status_window.refresh # 積算ダメージの描写 for target in @target_battlers if target.add_atk_all_dmg != nil target.damage = target.add_atk_all_dmg target.damage_pop = true target.add_atk_all_dmg = nil # 途中で死んでたらトドメをさす if target.add_atk_dead_end target.hp = 0 target.add_atk_dead_end = false end end end # ステップ 6 に移行 @phase4_step = 6 return end else update_phase4_step5_add_atk # 原物 end # 追尾終了or追尾失敗 if $add_atk_end or !@add_atk_success $add_atk_exercise = false @add_atk_flg = false $add_atk_end = false if ADD_ATK_DMG_ALL for target in @target_battlers target.add_atk_all_dmg = nil if target.add_atk_dead_end target.hp = 0 end end end end if $add_atk_exercise @add_atk_success = false # 追尾開始 @phase4_step = 2 end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_add_atk update def update if @add_atk_check_key and @add_atk_flg # 追尾攻撃発動チェック if (Input.trigger?(ADD_ATK_KEY) or $add_atk_set[3]) # 確率チェック if rand(100) <= $add_atk_set[4] @add_atk_success = true @add_atk_check_key = false @add_atk_count += 1 # 追尾回数チェック if @add_atk_count >= $add_atk_set[5] or $add_atk_end $add_atk_end = true end # 追尾成功SEを鳴らしてみる if ADD_ATK_SE != nil and !$add_atk_end Audio.se_play("Audio/SE/" + ADD_ATK_SE) end end end end update_add_atk # 原物 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ) #-------------------------------------------------------------------------- alias update_phase4_step6_add_atk update_phase4_step6 def update_phase4_step6 @add_atk_flg = false # 追尾攻撃開始 $add_atk_exercise = false # 追尾攻撃実行中 $add_atk_end = false # 追尾攻撃終了 @add_atk_check_key = false # 追尾判定実行中 @add_atk_success = false # 追尾成功 @add_atk_count = 0 # 追尾数カウント $add_atk_first = false # 初期フラグ update_phase4_step6_add_atk end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler include Add_attack attr_accessor :add_atk_all_dmg # 積算ダメージ attr_accessor :add_atk_dead_end # 死亡フラグ attr_accessor :one_critical # クリティカルフラグ(一括表示用) #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_skill_add_atk initialize def initialize initialize_skill_add_atk @add_atk_all_dmg = nil @add_atk_dead_end = false @one_critical = false end #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 # attacker : 攻撃者 (バトラー) #-------------------------------------------------------------------------- alias attack_effect_addition attack_effect def attack_effect(attacker) if $add_atk_exercise # クリティカルフラグをクリア self.critical = false # 基本ダメージを計算 atk = [attacker.atk * $add_atk_set[1]/100 - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 # 属性修正 self.damage *= elements_correct(attacker.element_set) self.damage /= 100 # ダメージの符号が正の場合 if self.damage > 0 # クリティカル修正 if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true self.one_critical = true end # 防御修正 if self.guarding? self.damage /= 2 end end # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # 第二命中判定 eva = 8 * self.agi / attacker.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) # 命中の場合 if hit_result == true # ステート衝撃解除 remove_states_shock # HP からダメージを減算 self.hp -= self.damage # ステート変化 @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) # ミスの場合 else # ダメージに "Miss" を設定 self.damage = "Miss" # クリティカルフラグをクリア self.critical = false end else attack_effect_addition(attacker) # 原物 end if self.dead? # こいつはもう死んでいる @add_atk_dead_end = true # ダメージ一括表示 if ADD_ATK_DMG_ALL and ($add_atk_exercise or $add_atk_first) # とりあえず生かしておく self.hp = 1 else $add_atk_end = true end end # ダメージ一括表示ならダメージの蓄積 if ADD_ATK_DMG_ALL and self.damage != "Miss" and $add_atk_exercise @add_atk_all_dmg = (@add_atk_all_dmg == nil ? 0 : @add_atk_all_dmg) @add_atk_all_dmg += self.damage self.damage = nil elsif ADD_ATK_DMG_ALL and self.damage != "Miss" and $add_atk_first @add_atk_all_dmg = (@add_atk_all_dmg == nil ? 0 : @add_atk_all_dmg) @add_atk_all_dmg += self.damage $add_atk_first = false else # ダメージミスなら終了 if ADD_ATK_MISS and self.damage == "Miss" $add_atk_end = true if ADD_ATK_DMG_ALL and @add_atk_all_dmg == nil @add_atk_all_dmg = "Miss" end end end # メソッド終了 return true end end