# 先制攻撃 計算式 デフォルト版 # パーティー全員の素早さの合計に、ステートによる補正を百分率でかける。 # その値が大きい方が先制攻撃になる確率が高い。 # その確率は以下の通り # # アクター側がとても大きい # アクター先制 15% エネミー先制 3% # アクター側が少し大きい # アクター先制 10% エネミー先制 5% # エネミー側が少し大きい # アクター先制 5% エネミー先制 10% # エネミー側がとても大きい # アクター先制 3% エネミー先制 15% class Scene_Battle #-------------------------------------------------------------------------- # ◎ 追加:先制攻撃の計算式 # return 1 : アクター先制 # return 0 : 通常通り # return -1 : エネミー先制 #-------------------------------------------------------------------------- def first_attack_calculate # とりあえずサンプルとしての計算式 # 両方とも素早さ合計を出す。 # 計算開始 # 全員のステートと計算を確認する # アクター側 actor_size = 0 actors_agi = 0 actor_correct = 0 for actor in $game_party.actors next if not actor.exist? # 生存していない場合はスルー actor_size += 1 # 人数の増加 if actor.movable? # 行動可能ならばAGIを増加させる actors_agi += actor.agi end # ステート補正チェック actor_correct += actor.first_attack_state_check end # 敵側 enemy_size = 0 enemies_agi = 0 enemy_correct = 0 for enemy in $game_troop.enemies next if not enemy.exist? # 不可視の場合などはスルー enemy_size += 1 # 人数の増加 if enemy.movable? # 行動可能ならばAGIを増加させる enemies_agi += enemy.agi end # ステート補正チェック enemy_correct += actor.first_attack_state_check end actors = actors_agi * (100 + actor_correct) / 100 enemies = enemies_agi * (100 + enemy_correct) / 100 # 全員の素早さの平均値を算出 avg = (actors_agi + enemies_agi) / (actor_size + enemy_size) # この「平均値」以上の差がある場合 if actors > enemies + avg actor_rate = 15 # 先制攻撃 15% enemy_rate = 3 # 不意打ち 3% # アクターのAGIのが高いけど平均値ほどの差が無い場合 elsif actors >= enemies actor_rate = 10 # 先制攻撃 10% enemy_rate = 5 # 不意打ち 5% # エネミーのAGIが平均値以上大きい場合 elsif actors + avg <= enemies actor_rate = 3 # 先制攻撃 3% enemy_rate = 15 # 不意打ち 15% # その他 (エネミーのAGIが大きいけど差が平均値以下) else actor_rate = 5 # 先制攻撃 5% enemy_rate = 10 # 不意打ち 10% end # 先にアクター側の先制攻撃計算を実行 if rand(100) < actor_rate return 1 end # エネミー側の先制攻撃計算を実行 if rand(100) < enemy_rate return -1 end # 通常通り return 0 end end # ココまでが計算式設定