#============================================================================== # ■ XP-RGSS-12 追尾攻撃 [Ver.4.8.0] by Claimh #------------------------------------------------------------------------------ # ・通常攻撃をしたときにタイミング良くキーを入力することで追加攻撃が発動する # ・オート発動、連続追尾回数も設定可能 # ・追尾攻撃を発動させるキー入力のタイミング # 対象側のアニメーションが表示されている時 # ・クリティカル時にアニメーションを変えることができる # ダメージ一括表示時でも攻撃途中に一度でもクリティカルが出たときは # 最後のダメージ表示時に"CRITICAL"の文字が出る # ・攻撃ミス時には追尾攻撃を中止させることもできる # ・各アクターごとの全設定をイベント等で操作することが可能 # ・装備変更時に各パラメータの自動設定機能付き #============================================================================== module ExtraAttack ADD_AUTO=[];ADD_POW=[];ADD_MAX=[];ADD_PRO=[];ADD_ELE=[];ADD_ANIME=[] ADD_CRIT=[];CNT=[];W_ATTR=[];WAIT_ANIME=[];KEY_MISS=[];INPUT_START=[] INPUT_END=[];ATK_UP=[];HIT_DOWN=[] #============================================================================== # □ カスタマイズSTART #============================================================================== # 追尾攻撃発動キー ADD_ATK_KEY = Input::C # ダメージ一括表示 ADD_ATK_DMG_ALL = true # 不要ならfalse # 通常攻撃がミスなら追尾しない ADD_ATK_MISS = true # 不要ならfalse # クリティカル発生時にアニメーションを変化させる ADD_ATK_CRITICAL = true # 不要ならfalse # 追尾攻撃成功時に鳴らすSE ADD_ATK_SE = nil # 不要ならnil #----------------------------------------------------------------- # 各アクターの初期設定 # アクターID:0の設定は全アクター共通値となります(ID:0は設定必須) #----------------------------------------------------------------- # 追尾オートフラグ # ADD_AUTO[アクターID] = true(オート)/false(手動) ADD_AUTO[0] = false # 追尾攻撃力(%) # ADD_POW[アクターID] = 追尾攻撃力(%) ADD_POW[0] = 80 # 最大攻撃回数 # ADD_MAX[アクターID] = 最大攻撃回数 ADD_MAX[0] = 2 # 追尾成功率(%) # ADD_PRO[アクターID] = 追尾成功率(%) ADD_PRO[0] = 100 # 追尾攻撃の属性ID配列(追加属性なしは[]) # ADD_ELE[アクターID] = 追尾時のアニメID ADD_ELE[0] = [] ADD_ELE[1] = [1] ADD_ELE[8] = [2] # 追尾攻撃時のアニメID # 追尾攻撃が成功するごとにアニメーションを変化させる場合は、 # 複数アニメIDを指定してください # ADD_ANIME[アクターID] = [追尾時のアニメID, ・・・] ADD_ANIME[0] = [30] ADD_ANIME[1] = [33,34] ADD_ANIME[2] = [36,37] # クリティカル時アニメID # ADD_CRIT[アクターID] = 回数 ADD_CRIT[0] = 31 ADD_CRIT[1] = 34 ADD_CRIT[2] = 37 #------------------------------------------------------ # 追尾攻撃の最大回数の操作 #------------------------------------------------------ # 追尾攻撃の最大回数の操作を使用する ADD_MAX_CONT = false # 『追尾回数+1』ステートID ADD_PLUS = 20 # 『追尾回数-1』ステートID ADD_MINUS = 21 #------------------------------------------------------ # 追尾攻撃の属性+アニメーション操作 # 戦闘中、指定したステートを付与されたとき、 # 追尾攻撃の属性、アニメーションを変化させることができます #------------------------------------------------------ # 追尾攻撃の属性+アニメーション操作を使用する ADD_ELE_CONT = false # CNT[数字] = [ステートID, [通常アニメID配列], # クリティカル時アニメID, [属性ID]] # ※nilを入れると通常設定になります CNT[0] = [22, [27], 28, [1]] CNT[1] = [23, [30,31], 32, [2]] CNT[2] = [24, [33], 34, [3]] #-------------------------------------------------------------------------- # 武器変更による属性オート変更設定(武器ID順に設定) # W_ATTR[武器ID] = [追尾攻撃力(%), [通常アニメID配列], オート発生フラグ, # 追尾成功率, 連続回数, クリティカル時アニメ, [属性]] # ※nilを指定すると、アクターごとの初期設定が適応されます # (注)装備変更を使用するとイベントの設定は継続されません。 #-------------------------------------------------------------------------- # 装備変更時の自動設定機能を使用する(アクター別のみなら不要) EPUIP_AUTO = false # 不要ならfalse # 各武器設定 W_ATTR[0] = nil # 装備解除(武器なし)時の設定 W_ATTR[2] = [20, [33], false, 90, nil, 34, [3]] W_ATTR[6] = [80, [30], false, 100, nil, 31, [2]] #------------------------------------------------------------------ # 対象側アニメーションウェイト機能 # 対象側のアニメーションが表示されるタイミングを少し遅らせる #------------------------------------------------------------------ # 対象側アニメーションウェイト機能を使う USE_WAIT_ANIME = false # 個別設定 # WAIT_ANIME[アクターID] = ウェイト時間 WAIT_ANIME[0] = 0 # 全アクター共通設定(必須) WAIT_ANIME[1] = rand(10) WAIT_ANIME[8] = 5 #----------------------------------------------------------------- # キーの入力判定 # 1.キーの入力ミス # 2.キー連打は無効 #----------------------------------------------------------------- # キーの入力ミス判定を使用する USE_KEY_CHECK = false # 入力ミスと判定するキー(デフォルト:Input::C以外) KEY_MISS = [Input::A, Input::B, Input::L, Input::R, Input::X, Input::Y, Input::Z, Input::UP, Input::DOWN, Input::RIGHT, Input::LEFT, Input::SHIFT, Input::CTRL, Input::ALT, Input::F5, Input::F6, Input::F7, Input::F8, Input::F9] # キー連打無効を使用する USE_KEY_MULT = false # キー連打をされたときの警告SE(nil:使用しない) KEY_MULT_SE = "058-Wrong02" #----------------------------------------------------------------- # キー入力期間設定 # キー入力を判定する時間帯を任意に設定できます #----------------------------------------------------------------- # キー入力期間設定機能を使用する USE_INPUT_TERM = false # キー入力期間設定の種別(アクター別:0 / 装備武器別:1) TERM_PATTERN = 0 # 入力開始時期(対象側アニメが始まって何フレーム目から判定を開始するか) # INPUT_START[アクターID/武器ID] = 開始フレーム INPUT_START[0] = 5 # 全アクター/武器共通設定(必須) INPUT_START[1] = 2 INPUT_START[2] = 8 # 入力終了時期(対象側アニメが始まって何フレーム目で判定を終了するか) # INPUT_END[アクターID/武器ID] = 終了フレーム INPUT_END[0] = 20 # 全アクター/武器共通設定(必須) INPUT_END[1] = 15 INPUT_END[2] = 30 #----------------------------------------------------------------- # キー入力期間演出 # キー入力を判定する時間帯に何かの表示をします #----------------------------------------------------------------- # キー入力期間演出を使用する USE_KEY_EFFECT = true # 表示位置を敵の頭上に合わせる(false=>画面右側に表示) INPUT_ENEMY_HEAD = true # キー入力期間中のメッセージ INPUT_SCENE = "Ready・・・" # キー入力成功時のメッセージ INPUT_SUCCESS = "Good!!" # キー入力失敗時のメッセージ INPUT_MISS = "Miss・・・" #----------------------------------------------------------------- # 威力UP/成功率DOWN # 追尾攻撃が成功するごとに威力UP/成功率DOWNします #----------------------------------------------------------------- # 威力UPを使用する POWER_UP = false # 威力UP率 # ATK_UP[アクターID] = 威力UP率 ATK_UP[0] = 0 # 全アクター共通設定(必須) ATK_UP[1] = 1 # 成功率DOWNを使用する SUC_DOWN = false # 成功DOWN率 # HIT_DOWN[アクターID] = 成功DOWN率 HIT_DOWN[0] = 0 # 全アクター共通設定(必須) HIT_DOWN[1] = 1 HIT_DOWN[2] = 3 #============================================================================== # □ カスタマイズEND #============================================================================== module_function #-------------------------------------------------------------------------- # ● 汎用データチェッカー #-------------------------------------------------------------------------- def data_checker(actor_id, data) unless data[actor_id].nil? return data[actor_id] end return data[0] end #-------------------------------------------------------------------------- # ● 装備交換用データチェッカー #-------------------------------------------------------------------------- def equip_change_data(actor_id, changedata, equip_data) if changedata.nil? return data_checker(actor_id, equip_data) else return changedata end end #-------------------------------------------------------------------------- # ● 閃き判定 #-------------------------------------------------------------------------- def flash_attack(actor) # 閃き時には追尾攻撃は発動しない if defined?(SysFlash) return true if actor.flash_flg end return false end #-------------------------------------------------------------------------- # ● 追尾設定 #-------------------------------------------------------------------------- def set_add_atk_data(actor, data) # 各パラメータのセッティング data[1] = actor.add_power data[2] = actor.add_anime data[3] = actor.add_auto data[4] = actor.add_hit data[5] = actor.add_cnt data[6] = actor.add_crit data[7] = actor.add_attr # 最大回数操作 if ADD_MAX_CONT # 『追尾回数+1』ステート if actor.state?(ADD_PLUS) data[5] += 1 # 『追尾回数-1』ステート elsif actor.state?(ADD_MINUS) data[5] -= 1 if data[5] != 0 end end # 属性変化+アニメーション変化 if ADD_ELE_CONT for i in 0..CNT.size-1 change = CNT[i] if actor.state?(change[0]) data[2] = change[1] if change[1] != nil data[6] = change[2] if change[2] != nil data[7] = change[3] if change[3] != nil end end end return data end end class Game_Actor < Game_Battler attr_accessor :add_power # 追尾攻撃力 attr_accessor :add_anime # アニメーション attr_accessor :add_auto # オートフラグ attr_accessor :add_hit # 成功率 attr_accessor :add_cnt # 最大回数 attr_accessor :add_crit # クリティカル時アニメ attr_accessor :add_attr # 属性ID #-------------------------------------------------------------------------- # ● イニシャル処理 #-------------------------------------------------------------------------- alias initialize_add_atk initialize def initialize(actor_id) initialize_add_atk(actor_id) @add_power = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_POW) @add_anime = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_ANIME) @add_auto = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_AUTO) @add_hit = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_PRO) @add_cnt = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_MAX) @add_crit = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_CRIT) @add_attr = ExtraAttack.data_checker(actor_id, ExtraAttack::ADD_ELE) end #-------------------------------------------------------------------------- # ● 装備の変更 # equip_type : 装備タイプ # id : 武器 or 防具 ID (0 なら装備解除) #-------------------------------------------------------------------------- alias equip_add_atk equip def equip(equip_type, id) equip_add_atk(equip_type, id) if ExtraAttack::EPUIP_AUTO and equip_type == 0 # 武器 w_equip = ExtraAttack::W_ATTR[id] # 設定なし w_equip = [] if w_equip.nil? # 各追尾パラメータの変更 @add_power = ExtraAttack.equip_change_data(self.id, w_equip[0], ExtraAttack::ADD_POW) @add_anime = ExtraAttack.equip_change_data(self.id, w_equip[1], ExtraAttack::ADD_ANIME) @add_auto = ExtraAttack.equip_change_data(self.id, w_equip[2], ExtraAttack::ADD_AUTO) @add_hit = ExtraAttack.equip_change_data(self.id, w_equip[3], ExtraAttack::ADD_PRO) @add_cnt = ExtraAttack.equip_change_data(self.id, w_equip[4], ExtraAttack::ADD_MAX) @add_crit = ExtraAttack.equip_change_data(self.id, w_equip[5], ExtraAttack::ADD_CRIT) @add_attr = ExtraAttack.equip_change_data(self.id, w_equip[6], ExtraAttack::ADD_ELE) end end end class Scene_Battle attr_accessor :add_atk_exercise # 追尾攻撃実行中 attr_accessor :add_atk_end # 追尾攻撃終了 attr_accessor :add_atk_count # 追尾数カウント attr_accessor :add_atk_set # 追尾攻撃オプション #-------------------------------------------------------------------------- # ● 追尾判定用データ初期化 #-------------------------------------------------------------------------- def init_add_atk @add_atk_flg = false # 追尾攻撃開始 self.add_atk_exercise = false # 追尾攻撃実行中 self.add_atk_end = false # 追尾攻撃終了 self.add_atk_count = 0 # 追尾数カウント self.add_atk_set = [] # 追尾攻撃オプション @add_atk_check_key = false # 追尾判定実行中 @add_atk_success = false # 追尾成功 @add_atk_first = true # 初期攻撃フラグ @flame_counter = 0 # フレームカウンタ @input_term = false # 入力可能期間中 @anime_actor = false # 行動側アニメ中 @already_flash = false # 閃き判定 for battler in $game_party.actors + $game_troop.enemies battler.add_atk_all_dmg = nil battler.add_atk_dead_end = false battler.one_critical = false end end #-------------------------------------------------------------------------- # ● アニメーションウェイト処理 #-------------------------------------------------------------------------- def wait_anime # アニメウェイト if ExtraAttack::USE_WAIT_ANIME @wait_anime = ExtraAttack.data_chacker(@active_battler.id, ExtraAttack::WAIT_ANIME) end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備) #-------------------------------------------------------------------------- alias update_phase4_step1_add_atk update_phase4_step1 def update_phase4_step1 update_phase4_step1_add_atk init_add_atk end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション) #-------------------------------------------------------------------------- alias update_phase4_step3_add_atk update_phase4_step3 def update_phase4_step3 # 追尾実行中ならステップ4に強制移行 if self.add_atk_exercise # ステップ 4 に移行 @phase4_step = 4 return elsif @active_battler.is_a?(Game_Actor) if @active_battler.current_action.kind == 0 if @active_battler.current_action.basic == 0 # 閃き判定 unless @already_flash @already_flash = ExtraAttack.flash_attack(@active_battler) end unless @already_flash # 追尾チェック @anime_actor = true @add_atk_flg = true # パラメータ設定 self.add_atk_set = ExtraAttack.set_add_atk_data(@active_battler, self.add_atk_set) # アニメウェイト wait_anime end end end end update_phase4_step3_add_atk # 原物 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション) #-------------------------------------------------------------------------- alias update_phase4_step4_add_atk update_phase4_step4 def update_phase4_step4 # 追尾攻撃 if @add_atk_flg @anime_actor = false if self.add_atk_count < self.add_atk_set[5] and !self.add_atk_end # キーチェックを開始する @add_atk_check_key = true # 演出開始 if ExtraAttack::USE_KEY_EFFECT if self.add_atk_count < self.add_atk_set[5] win_pos = [600, 120, 160] # 表示位置を敵の頭上に合わせる if ExtraAttack::INPUT_ENEMY_HEAD e_bitmap = RPG::Cache.battler(@target_battlers[0].battler_name, 0) win_pos[0] = @target_battlers[0].screen_x win_pos[1] = @target_battlers[0].screen_y - e_bitmap.height - 32 win_pos[2] = e_bitmap.width end @add_atk_window = Window_AddAtkEx.new(win_pos) @key_effect = false end end end # 追尾実行中ならアニメーション再セット if self.add_atk_exercise add_anime = self.add_atk_set[2] if !add_anime[self.add_atk_count-1].nil? @animation2_id = add_anime[self.add_atk_count-1] else @animation2_id = add_anime[rand(add_anime.size)] end end # 対象側アニメーション for target in @target_battlers # クリティカルでアニメーション変化 if ExtraAttack::ADD_ATK_CRITICAL and target.critical and !@add_atk_first target.animation_id = self.add_atk_set[6] else target.animation_id = @animation2_id end target.animation_hit = (target.damage != "Miss") 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 # 初撃終了 @add_atk_first = false @input_term = false # 演出終了 if ExtraAttack::USE_KEY_EFFECT and @key_effect @add_atk_window.dispose @key_effect = false end # フレームカウンタリセット @flame_counter = 0 # 追尾成功 if @add_atk_success # 追尾実行中に移行 self.add_atk_exercise = true end # ダメージ一括表示 if ExtraAttack::ADD_ATK_DMG_ALL and self.add_atk_exercise # 追尾終了or追尾失敗 if self.add_atk_end or !@add_atk_success self.add_atk_exercise = false @add_atk_flg = false self.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 # クリティカルが発生している if target.one_critical target.critical = true target.one_critical = false end end end # ステップ 6 に移行 @phase4_step = 6 return end else update_phase4_step5_add_atk # 原物 end # 追尾終了or追尾失敗 if self.add_atk_end or !@add_atk_success self.add_atk_exercise = false @add_atk_flg = false self.add_atk_end = false if ExtraAttack::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 self.add_atk_exercise # アニメウェイト wait_anime @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 ExtraAttack::USE_INPUT_TERM @flame_counter += 1 case ExtraAttack::TERM_PATTERN when 0 checker = @active_battler.id when 1 checker = @active_battler.weapon_id else p "設定ミス" end input_start = ExtraAttack.data_checker(checker, ExtraAttack::INPUT_START) input_end = ExtraAttack.data_checker(checker, ExtraAttack::INPUT_END) if @flame_counter >= input_start and @flame_counter <= input_end @input_term = true else @input_term = false end else @input_term = true end # 入力表示 if ExtraAttack::USE_KEY_EFFECT and !@key_effect if @input_term # 入力可能期間突入表示 @add_atk_window.set_message(ExtraAttack::INPUT_SCENE) else # 入力可能期間未突入表示 @add_atk_window.set_message("") end @key_effect = true end # 追尾攻撃発動チェック if (Input.trigger?(ExtraAttack::ADD_ATK_KEY) or self.add_atk_set[3]) and (!ExtraAttack::USE_INPUT_TERM or @input_term) if ExtraAttack::SUC_DOWN success = ExtraAttack.data_checker(@active_battler.id, ExtraAttack::HIT_DOWN) hit = self.add_atk_set[4] - success else hit = self.add_atk_set[4] end # 確率チェック if rand(100) <= hit @add_atk_success = true @add_atk_check_key = false self.add_atk_count += 1 # 入力成功表示 if ExtraAttack::USE_KEY_EFFECT and @key_effect @add_atk_window.set_message(ExtraAttack::INPUT_SUCCESS, Color.new(255, 64, 0)) end # 追尾成功SEを鳴らしてみる if ExtraAttack::ADD_ATK_SE != nil and !self.add_atk_end Audio.se_play("Audio/SE/" + ExtraAttack::ADD_ATK_SE) end else self.add_atk_end = true @add_atk_check_key = false if ExtraAttack::USE_KEY_EFFECT and @key_effect @add_atk_window.set_message(ExtraAttack::INPUT_MISS, Color.new(192, 224, 255, 255)) end end elsif !ExtraAttack::USE_INPUT_TERM or @input_term # 入力期間外の入力は不可 if ExtraAttack::USE_INPUT_TERM and !@input_term if Input.trigger?(ExtraAttack::ADD_ATK_KEY) and !self.add_atk_set[3] self.add_atk_end = true @add_atk_check_key = false @add_atk_success = false self.add_atk_count -= 1 # 入力ミス表示 if ExtraAttack::USE_KEY_EFFECT and @key_effect @add_atk_window.set_message(ExtraAttack::INPUT_MISS, Color.new(192, 224, 255, 255)) end # キー連打警告SE if ExtraAttack::KEY_MULT_SE != nil Audio.se_stop Audio.se_play("Audio/SE/" + ExtraAttack::KEY_MULT_SE) end end end # 入力ミス判定 if ExtraAttack::USE_KEY_CHECK for i in 0...ExtraAttack::KEY_MISS.size if Input.trigger?(ExtraAttack::KEY_MISS[i]) # 入力ミス表示 if ExtraAttack::USE_KEY_EFFECT and @key_effect @add_atk_window.set_message(ExtraAttack::INPUT_MISS, Color.new(192, 224, 255, 255)) end self.add_atk_end = true end end end end elsif (@anime_actor or @add_atk_success) and @add_atk_flg # キー連打無効判定 if ExtraAttack::USE_KEY_MULT if Input.trigger?(ExtraAttack::ADD_ATK_KEY) self.add_atk_end = true @add_atk_success = false self.add_atk_count -= 1 @add_atk_check_key = false # 入力ミス表示 if ExtraAttack::USE_KEY_EFFECT and @key_effect @add_atk_window.set_message(ExtraAttack::INPUT_MISS, Color.new(192, 224, 255, 255)) end # キー連打警告SE if ExtraAttack::KEY_MULT_SE != nil Audio.se_stop Audio.se_play("Audio/SE/" + ExtraAttack::KEY_MULT_SE) end end end if ExtraAttack::USE_KEY_EFFECT and @key_effect and self.add_atk_end @add_atk_window.set_message(ExtraAttack::INPUT_MISS, Color.new(192, 224, 255, 255)) end end update_add_atk # 原物 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ) #-------------------------------------------------------------------------- alias update_phase4_step6_add_atk update_phase4_step6 def update_phase4_step6 init_add_atk update_phase4_step6_add_atk end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler 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 $scene.add_atk_exercise # クリティカルフラグをクリア self.critical = false # 威力補正値算出 if ExtraAttack::POWER_UP atk_up = ExtraAttack.data_checker(attacker.id, ExtraAttack::ATK_UP) add_atk_pow = $scene.add_atk_set[1] + atk_up * ($scene.add_atk_count-1) else add_atk_pow = $scene.add_atk_set[1] end # 基本ダメージを計算 atk = [attacker.atk * add_atk_pow/100 - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 # 属性修正 add_element = attacker.element_set add_element.concat($scene.add_atk_set[7]) self.damage *= elements_correct(add_element) self.damage /= 100 # ダメージの符号が正の場合 if self.damage > 0 # クリティカル修正 if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true @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 # 致死量のダメージ if self.hp <= self.damage # 一括表示 if ExtraAttack::ADD_ATK_DMG_ALL # 既死 @add_atk_dead_end = true else # 死亡終了 $scene.add_atk_end = true @add_atk_dead_end = false end end if !@add_atk_dead_end # HP からダメージを減算 self.hp -= self.damage end # ステート変化 @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 # ダメージ初期化 @add_atk_all_dmg = nil # クリティカルフラグ初期化(一括表示用) self.one_critical = false # 通常攻撃開始時のHPを保存 current_hp = self.hp # 通常攻撃 attack_effect_addition(attacker) # 原物 if self.is_a?(Game_Enemy) if self.dead? # ダメージ一括表示 if ExtraAttack::ADD_ATK_DMG_ALL # とりあえず生かす self.hp = current_hp @add_atk_dead_end = true else $scene.add_atk_end = true end end end end if self.is_a?(Game_Enemy) # 攻撃命中時 if self.damage != "Miss" # ダメージ一括表示ならダメージの蓄積 if ExtraAttack::ADD_ATK_DMG_ALL @add_atk_all_dmg = (@add_atk_all_dmg == nil ? 0 : @add_atk_all_dmg) @add_atk_all_dmg += self.damage end else # ダメージミスなら終了 if ExtraAttack::ADD_ATK_MISS $scene.add_atk_end = true if ExtraAttack::ADD_ATK_DMG_ALL if @add_atk_all_dmg.nil? @add_atk_all_dmg = "Miss" end end end end end # メソッド終了 return true end end class Window_AddAtkEx < Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(pos=[600,120,160]) super(nil) width = pos[2] < 160 ? 160 : pos[2] self.x = pos[0] - width / 2 self.y = pos[1] self.bitmap = Bitmap.new(width, 32) end def set_key(key) self.bitmap.clear self.bitmap.font.size = 32 # 表示位置を敵の頭上に合わせる aling = ExtraAttack::INPUT_ENEMY_HEAD ? 1 : 0 self.bitmap.draw_text(50, 0, bitmap.width, bitmap.height, key, aling) end def set_message(message, color = Color.new(255,255,255)) self.bitmap.clear self.bitmap.font.size = 24 self.bitmap.font.color = color # 表示位置を敵の頭上に合わせる aling = ExtraAttack::INPUT_ENEMY_HEAD ? 1 : 0 self.bitmap.draw_text(0, 0, bitmap.width, bitmap.height, message, aling) end end