RPGのインフレ破綻防止についての log10 ベース計算
はじめに
RPGを開発していると避けて通れない問題があります。
それは数値のインフレです。
最初は
HP 100
攻撃力 10
だったものが、
やり込み要素や転生システムを追加すると
HP 1億
攻撃力 5000万
になり、
さらに進むと
HP 1兆
攻撃力 1000億
になります。
数値が大きくなること自体は問題ではありません。
問題は、
戦闘が大味になり、ゲームとしての面白さが失われること
です。
log10ベース計算って?
最新版:
この記事では、自作RPGで採用している
damage ≒ POW × log10(POW)
という計算について紹介します。
よくあるダメージ計算
例えばシンプルなRPGでは、
damage = pow;
のような式が使われます。
攻撃力100なら100ダメージ。
攻撃力1000なら1000ダメージ。
攻撃力10000なら10000ダメージ。
攻撃力 10倍
↓
ダメージ 10倍
です。
非常に分かりやすいですが、
レベルや装備で数値が増え続けるゲームではスケーリングが追いつきません。
さらに危険な二乗系
開発中についやりたくなるのが、
damage = pow * pow;
のような式です。
例えば
POW=100
→ 10000
POW=1000
→ 1000000
POW=10000
→ 100000000
になります。
見た目は派手ですが、
すぐに桁が爆発します。
log10 を利用する
そこで採用したのが対数計算です。
JavaScriptなら次のようになります。
let damage =
attackerPow *
Math.log10(attackerPow);
例えば
POW=100
→ 約200
POW=1000
→ 約3000
POW=10000
→ 約40000
POW=100000
→ 約500000
となります。
一般化すると
判定式:A + B・P・log_10(P)
A,B:係数パラメータ,P:ステータス値
でしょうか。
この判定式はよく知られたレベルアップの必要経験値やステータス評価に応用できます。
さらに応用すると
// 【追加】Plog10Pベースの対数補正値を計算するヘルパー関数
// ステータスが高くなっても「200」に漸近する対数補正関数
function getLogP(val) {
let v = Math.max(0, Number(val));
let logVal = Math.log10(1 + v); // 0以上の対数
// 分母の「10」を調整することで、200に近づくスピード(曲線の傾き)を変えられます
// logVal が無限大に向かうと、この式は 200 * (1) = 200 に漸近します
let maxLimit = 200;
let stiffness = 5.5; // 立ち上がりの鋭さ(お好みで調整してください)
return maxLimit * (logVal / (stiffness + logVal));
}
- maxLimit = 200,stiffness = 5.5
補正値 (f(P))の表
| P \ k | 1.0 | 5.5 | 10.0 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 10 | 101.9 | 31.8 | 18.8 |
| 100 | 133.3 | 53.3 | 33.3 |
| 1,000 | 153 | 70.6 | 46.1 |
| 10,000 | 160 | 84.2 | 57.1 |
| 1,000,000 | 171.4 | 104.3 | 75 |
| 非常に大きい値 | 200に接近 | 200に接近 | 200に接近 |
このように非線形で、maxLimitに漸近する評価式が得られます。
$$
F(P)=M\frac{\log_{10}(1+P)}
{k+\log_{10}(1+P)}
$$
です。ここで $(k)$ が stiffness, $(M)$ が maxLimit です。
・ maxLimit, P, F(P) が定まった時の stiffness の逆算式
まず、両辺を $(M)$ で割ります。
$$
\frac{F(P)}{M}
=\frac{\log_{10}(1+P)}
{k+\log_{10}(1+P)}
$$
これを $(k)$ について解くと、
$$
k=\log_{10}(1+P)
\left(\frac{M}{F(P)}-1\right)
$$
となります。
M = 200, P = 1,000,000, F(P) = 104.3 の時
$$
k=\log_{10}(1+1000000)
\left(\frac{200}{104.3}-1\right)=5.5
$$
なぜ安定するのか
重要なのは
log10(10)
= 1
log10(100)
= 2
log10(1000)
= 3
log10(10000)
= 4
という性質です。
数値が10倍になっても+1
しか増えません。
つまりPOWは成長するが、倍率は緩やかにしか増えません。
実際の実装
私のゲームでは次のような形になっています。
let log10Factor =
Math.log10(
10 + Math.max(0, attackerPow)
);
let baseDmg =
log10Factor *
(10 + attackerPow * 0.8);
POWが0に近い時でも破綻しないように
10 + attackerPow
としています。
高レベル帯でも壊れにくい
例えば
POW = 100
と
POW = 1,000,000
を比較します。
線形計算では
100倍
1000倍
10000倍
と急激に差が開きます。
しかし対数補正を入れると
100 → × 2
↓
1,000,000 → × 6
程度になります。
完全な抑制ではありませんが、
二乗や指数関数的な爆発より遥かに扱いやすいです。
現実世界も対数でできている
実はこれはゲームだけの話ではありません。
現実にも対数で表現されるものが存在します。
音量(デシベル)
地震(マグニチュード)
天体の明るさ
などです。
理由は単純で、
巨大な数量差を人間が扱いやすくするためです。
ただし、現実世界で使われる対数尺度と、RPGのダメージ計算に対数を掛ける方法は同じものではありません。「対数は非常に大きな値の差を扱う際に便利」 です
それでもインフレは起こる
もちろん log10 を入れればすべて解決するわけではありません。
例えば
攻撃力×5
覚醒×10
超覚醒×20
転生×50
のような乗算バフを大量に積めば、
結局インフレします。
重要なのは
線形成長
+
対数補正
で数値の暴走を緩和することです。
おわりに え!?インフレ破綻!?
私の考えでは、多くのRPGがインフレで破綻する理由は
ステータスだけを増やし続けて、成長率を制御する仕組みが無い
ことです。
その解決策の一つとして、
damage ≒ POW × log10(POW)
はかなり有効でした。
実際に自作RPGでは、通常プレイでは到達しないような巨大ステータスをチートで与えても、戦闘システムそのものは破綻せず動作しています。
戦闘ログ例
ここでSPとはHP,POW,SPDのステータス総量です。
- SP=200
SP=200付近では、ダメージ量は数百〜数千程度で、
戦闘は2〜4ターンで決着するケースが多く見られました。
ここをクリックすると簡易ログが開きます
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 548 のダメージ (残りHP: 154)
⚡ 【俊敏なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 1279 の大ダメージ! (残りHP: 323)
--- ターン 2 ---
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 71 のダメージ (残りHP: 83)
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 1819 の大ダメージ! (残りHP: 0)
💀 俊敏なダークエルフ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +33 Pts. 生命力(HP) +26 攻撃力(POWER) +36 素早さ(SPEED) +49
🎁 宝箱を発見! [スピア] を獲得! (ボーナスSP +274)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
剛力なキメラ A の攻撃 ➔ 無名戦士 に 603 のダメージ (残りHP: 95)
無名戦士 の攻撃 ➔ 剛力なキメラ A に 211 のダメージ (残りHP: 1378)
--- ターン 2 ---
無名戦士 の攻撃 ➔ 剛力なキメラ A に 518 のダメージ (残りHP: 860)
剛力なキメラ A の攻撃 ➔ 無名戦士 に 100 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +3 Pts. 生命力(HP) +4 攻撃力(POWER) +4 素早さ(SPEED) +3
ここをクリックすると詳細ログが開きます
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
剛力なキメラ A の攻撃 ➔ 無名戦士 に 603 のダメージ (残りHP: 95)
無名戦士 の攻撃 ➔ 剛力なキメラ A に 211 のダメージ (残りHP: 1378)
--- ターン 2 ---
無名戦士 の攻撃 ➔ 剛力なキメラ A に 518 のダメージ (残りHP: 860)
剛力なキメラ A の攻撃 ➔ 無名戦士 に 100 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +3 Pts. 生命力(HP) +4 攻撃力(POWER) +4 素早さ(SPEED) +3
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 548 のダメージ (残りHP: 154)
⚡ 【俊敏なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 1279 の大ダメージ! (残りHP: 323)
--- ターン 2 ---
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 71 のダメージ (残りHP: 83)
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 1819 の大ダメージ! (残りHP: 0)
💀 俊敏なダークエルフ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +33 Pts. 生命力(HP) +26 攻撃力(POWER) +36 素早さ(SPEED) +49
🎁 宝箱を発見! [スピア] を獲得! (ボーナスSP +274)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
強靭なレッサーデーモン A の攻撃 ➔ 無名戦士 に 314 のダメージ (残りHP: 414)
💥 無名戦士 の必殺技! 強靭なレッサーデーモン A に 135 の大ダメージ! (残りHP: 4693)
--- ターン 2 ---
💥 強靭なレッサーデーモン A の必殺技! 無名戦士 に 829 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +2 Pts. 生命力(HP) +3 攻撃力(POWER) +4 素早さ(SPEED) +2
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なスライム A の攻撃 ➔ 無名戦士 に 655 のダメージ (残りHP: 76)
⚡ 【俊敏なスライム A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なスライム A に 1891 の大ダメージ! (残りHP: 132)
--- ターン 2 ---
💥 俊敏なスライム A の必殺技! 無名戦士 に 257 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +2 Pts. 生命力(HP) +4 攻撃力(POWER) +3 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 強靭なスライム A の必殺技! 無名戦士 に 694 の大ダメージ! (残りHP: 41)
💥 無名戦士 の必殺技! 強靭なスライム A に 1452 の大ダメージ! (残りHP: 3168)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なスライム A に 717 の大ダメージ! (残りHP: 2451)
強靭なスライム A の攻撃 ➔ 無名戦士 に 13 のダメージ (残りHP: 28)
--- ターン 3 ---
無名戦士 の攻撃 ➔ 強靭なスライム A に 257 のダメージ (残りHP: 2194)
💥 強靭なスライム A の必殺技! 無名戦士 に 46 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +2 Pts. 生命力(HP) +3 攻撃力(POWER) +3 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
平凡なレッサーデーモン A の攻撃 ➔ 無名戦士 に 566 のダメージ (残りHP: 172)
無名戦士 の攻撃 ➔ 平凡なレッサーデーモン A に 313 のダメージ (残りHP: 2508)
--- ターン 2 ---
💥 無名戦士 の必殺技! 平凡なレッサーデーモン A に 863 の大ダメージ! (残りHP: 1645)
💥 平凡なレッサーデーモン A の必殺技! 無名戦士 に 56 の大ダメージ! (残りHP: 116)
--- ターン 3 ---
💥 無名戦士 の必殺技! 平凡なレッサーデーモン A に 1705 の大ダメージ! (残りHP: 0)
💀 平凡なレッサーデーモン A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +33 Pts. 生命力(HP) +45 攻撃力(POWER) +37 素早さ(SPEED) +40
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なブラックナイト A に 788 の大ダメージ! (残りHP: 4383)
強靭なブラックナイト A の攻撃 ➔ 無名戦士 に 384 のダメージ (残りHP: 399)
--- ターン 2 ---
💥 強靭なブラックナイト A の必殺技! 無名戦士 に 605 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +2 Pts. 生命力(HP) +4 攻撃力(POWER) +2 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 584 のダメージ (残りHP: 203)
⚡ 【俊敏なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 1256 の大ダメージ! (残りHP: 474)
--- ターン 2 ---
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 194 のダメージ (残りHP: 9)
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 1408 の大ダメージ! (残りHP: 0)
💀 俊敏なダークエルフ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +42 Pts. 生命力(HP) +38 攻撃力(POWER) +33 素早さ(SPEED) +41
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なオーク A の攻撃 ➔ 無名戦士 に 308 のダメージ (残りHP: 517)
💥 無名戦士 の必殺技! 俊敏なオーク A に 602 の大ダメージ! (残りHP: 1044)
--- ターン 2 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なオーク A の必殺技! 無名戦士 に 294 の大ダメージ! (残りHP: 223)
💥 無名戦士 の必殺技! 俊敏なオーク A に 1405 の大ダメージ! (残りHP: 0)
💀 俊敏なオーク A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +34 Pts. 生命力(HP) +49 攻撃力(POWER) +27 素早さ(SPEED) +29
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なオーク A の攻撃 ➔ 無名戦士 に 297 のダメージ (残りHP: 577)
💥 無名戦士 の必殺技! 俊敏なオーク A に 220 の大ダメージ! (残りHP: 1492)
--- ターン 2 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なオーク A の必殺技! 無名戦士 に 309 の大ダメージ! (残りHP: 268)
💥 無名戦士 の必殺技! 俊敏なオーク A に 1746 の大ダメージ! (残りHP: 0)
💀 俊敏なオーク A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +38 Pts. 生命力(HP) +31 攻撃力(POWER) +48 素早さ(SPEED) +40
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なキメラ A の攻撃 ➔ 無名戦士 に 327 のダメージ (残りHP: 578)
💥 無名戦士 の必殺技! 俊敏なキメラ A に 604 の大ダメージ! (残りHP: 1259)
--- ターン 2 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なキメラ A の攻撃 ➔ 無名戦士 に 276 のダメージ (残りHP: 302)
⚡ 【俊敏なキメラ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なキメラ A に 952 の大ダメージ! (残りHP: 307)
--- ターン 3 ---
💥 俊敏なキメラ A の必殺技! 無名戦士 に 282 の大ダメージ! (残りHP: 20)
無名戦士 の攻撃 ➔ 俊敏なキメラ A に 599 のダメージ (残りHP: 0)
💀 俊敏なキメラ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +33 Pts. 生命力(HP) +27 攻撃力(POWER) +48 素早さ(SPEED) +38
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 強靭なリザードマン A の必殺技! 無名戦士 に 1032 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +2 Pts. 生命力(HP) +4 攻撃力(POWER) +4 素早さ(SPEED) +3
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 剛力なブラックナイト A の必殺技! 無名戦士 に 5956 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +2 Pts. 生命力(HP) +4 攻撃力(POWER) +3 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
剛力なダークエルフ A の攻撃 ➔ 無名戦士 に 2071 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +4 Pts. 生命力(HP) +3 攻撃力(POWER) +3 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
剛力なレッサーデーモン A の攻撃 ➔ 無名戦士 に 526 のダメージ (残りHP: 417)
無名戦士 の攻撃 ➔ 剛力なレッサーデーモン A に 262 のダメージ (残りHP: 2036)
--- ターン 2 ---
剛力なレッサーデーモン A の攻撃 ➔ 無名戦士 に 2815 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +4 Pts. 生命力(HP) +4 攻撃力(POWER) +4 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
平凡なレッサーデーモン A の攻撃 ➔ 無名戦士 に 657 のダメージ (残りHP: 290)
💥 無名戦士 の必殺技! 平凡なレッサーデーモン A に 824 の大ダメージ! (残りHP: 2417)
--- ターン 2 ---
無名戦士 の攻撃 ➔ 平凡なレッサーデーモン A に 993 のダメージ (残りHP: 1424)
平凡なレッサーデーモン A の攻撃 ➔ 無名戦士 に 112 のダメージ (残りHP: 178)
--- ターン 3 ---
💥 無名戦士 の必殺技! 平凡なレッサーデーモン A に 1625 の大ダメージ! (残りHP: 0)
💀 平凡なレッサーデーモン A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +34 Pts. 生命力(HP) +42 攻撃力(POWER) +25 素早さ(SPEED) +37
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 210 のダメージ (残りHP: 779)
無名戦士 の攻撃 ➔ 俊敏なダークエルフ A に 544 のダメージ (残りHP: 1553)
--- ターン 2 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なダークエルフ A の必殺技! 無名戦士 に 679 の大ダメージ! (残りHP: 100)
⚡ 【俊敏なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
無名戦士 の攻撃 ➔ 俊敏なダークエルフ A に 1267 のダメージ (残りHP: 286)
--- ターン 3 ---
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 156 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +3 Pts. 生命力(HP) +3 攻撃力(POWER) +4 素早さ(SPEED) +4
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 強靭なブラックナイト A の必殺技! 無名戦士 に 871 の大ダメージ! (残りHP: 121)
💥 無名戦士 の必殺技! 強靭なブラックナイト A に 973 の大ダメージ! (残りHP: 4286)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なブラックナイト A に 674 の大ダメージ! (残りHP: 3612)
強靭なブラックナイト A の攻撃 ➔ 無名戦士 に 62 のダメージ (残りHP: 59)
--- ターン 3 ---
💥 無名戦士 の必殺技! 強靭なブラックナイト A に 784 の大ダメージ! (残りHP: 2828)
強靭なブラックナイト A の攻撃 ➔ 無名戦士 に 34 のダメージ (残りHP: 25)
--- ターン 4 ---
無名戦士 の攻撃 ➔ 強靭なブラックナイト A に 635 のダメージ (残りHP: 2193)
強靭なブラックナイト A の攻撃 ➔ 無名戦士 に 54 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
- SP=100000
SP=100000まで成長するとダメージは数万〜十数万に達しますが、
依然として数ターンで決着する戦闘が成立しています。
ここをクリックすると簡易ログが開きます
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なオーク A に 36640 の大ダメージ! (残りHP: 66499)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 強靭なオーク A の必殺技! 無名戦士 に 22196 の大ダメージ! (残りHP: 12684)
--- ターン 2 ---
⚡ 【強靭なオーク A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 強靭なオーク A に 55260 の大ダメージ! (残りHP: 11239)
💥 強靭なオーク A の必殺技! 無名戦士 に 3182 の大ダメージ! (残りHP: 9502)
--- ターン 3 ---
💥 無名戦士 の必殺技! 強靭なオーク A に 65419 の大ダメージ! (残りHP: 0)
💀 強靭なオーク A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +50 Pts. 生命力(HP) +90 攻撃力(POWER) +53 素早さ(SPEED) +90
🎁 宝箱を発見! [エクスカリバー] を獲得! (ボーナスSP +838)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なゴブリン A に 32701 の大ダメージ! (残りHP: 103225)
💥 強靭なゴブリン A の必殺技! 無名戦士 に 19921 の大ダメージ! (残りHP: 14919)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なゴブリン A に 41283 の大ダメージ! (残りHP: 61942)
💥 強靭なゴブリン A の必殺技! 無名戦士 に 20582 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +5 攻撃力(POWER) +8 素早さ(SPEED) +5
ここをクリックすると詳細ログが開きます
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なゴブリン A に 32701 の大ダメージ! (残りHP: 103225)
💥 強靭なゴブリン A の必殺技! 無名戦士 に 19921 の大ダメージ! (残りHP: 14919)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なゴブリン A に 41283 の大ダメージ! (残りHP: 61942)
💥 強靭なゴブリン A の必殺技! 無名戦士 に 20582 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +5 攻撃力(POWER) +8 素早さ(SPEED) +5
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なリザードマン A の攻撃 ➔ 無名戦士 に 46531 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +8 攻撃力(POWER) +8 素早さ(SPEED) +5
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なリザードマン A の攻撃 ➔ 無名戦士 に 10780 のダメージ (残りHP: 24073)
💥 無名戦士 の必殺技! 平凡なリザードマン A に 7831 の大ダメージ! (残りHP: 76477)
--- ターン 2 ---
💥 平凡なリザードマン A の必殺技! 無名戦士 に 37575 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +7 Pts. 生命力(HP) +9 攻撃力(POWER) +7 素早さ(SPEED) +9
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なリザードマン A の攻撃 ➔ 無名戦士 に 40149 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +7 Pts. 生命力(HP) +6 攻撃力(POWER) +9 素早さ(SPEED) +5
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なリザードマン A の攻撃 ➔ 無名戦士 に 17186 のダメージ (残りHP: 17682)
⚡ 【俊敏なリザードマン A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なリザードマン A に 51903 の大ダメージ! (残りHP: 7883)
--- ターン 2 ---
俊敏なリザードマン A の攻撃 ➔ 無名戦士 に 62232 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +9 Pts. 生命力(HP) +7 攻撃力(POWER) +8 素早さ(SPEED) +8
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
無名戦士 の攻撃 ➔ 強靭なスライム A に 24262 のダメージ (残りHP: 103880)
強靭なスライム A の攻撃 ➔ 無名戦士 に 11971 のダメージ (残りHP: 22904)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なスライム A に 48850 の大ダメージ! (残りHP: 55030)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なスライム A の攻撃 ➔ 無名戦士 に 21162 のダメージ (残りHP: 1742)
--- ターン 3 ---
⚡ 【強靭なスライム A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 強靭なスライム A に 39557 の大ダメージ! (残りHP: 15473)
強靭なスライム A の攻撃 ➔ 無名戦士 に 4601 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +5 攻撃力(POWER) +5 素早さ(SPEED) +9
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なオーク A に 36640 の大ダメージ! (残りHP: 66499)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 強靭なオーク A の必殺技! 無名戦士 に 22196 の大ダメージ! (残りHP: 12684)
--- ターン 2 ---
⚡ 【強靭なオーク A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 強靭なオーク A に 55260 の大ダメージ! (残りHP: 11239)
💥 強靭なオーク A の必殺技! 無名戦士 に 3182 の大ダメージ! (残りHP: 9502)
--- ターン 3 ---
💥 無名戦士 の必殺技! 強靭なオーク A に 65419 の大ダメージ! (残りHP: 0)
💀 強靭なオーク A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +50 Pts. 生命力(HP) +90 攻撃力(POWER) +53 素早さ(SPEED) +90
🎁 宝箱を発見! [エクスカリバー] を獲得! (ボーナスSP +838)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
平凡なスライム A の攻撃 ➔ 無名戦士 に 29585 のダメージ (残りHP: 5385)
⚡ 【平凡なスライム A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 平凡なスライム A に 43958 の大ダメージ! (残りHP: 23661)
--- ターン 2 ---
💥 平凡なスライム A の必殺技! 無名戦士 に 11081 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +6 攻撃力(POWER) +9 素早さ(SPEED) +9
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なダークエルフ A に 35251 の大ダメージ! (残りHP: 92743)
強靭なダークエルフ A の攻撃 ➔ 無名戦士 に 6848 のダメージ (残りHP: 28128)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なダークエルフ A に 29207 の大ダメージ! (残りHP: 63536)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なダークエルフ A の攻撃 ➔ 無名戦士 に 16276 のダメージ (残りHP: 11852)
--- ターン 3 ---
⚡ 【強靭なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 強靭なダークエルフ A に 45183 の大ダメージ! (残りHP: 18353)
強靭なダークエルフ A の攻撃 ➔ 無名戦士 に 6062 のダメージ (残りHP: 5790)
--- ターン 4 ---
💥 無名戦士 の必殺技! 強靭なダークエルフ A に 143759 の大ダメージ! (残りHP: 0)
💀 強靭なダークエルフ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +86 Pts. 生命力(HP) +50 攻撃力(POWER) +67 素早さ(SPEED) +64
🎁 宝箱を発見! [グンニグル] を獲得! (ボーナスSP +589)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なリザードマン A の攻撃 ➔ 無名戦士 に 20873 のダメージ (残りHP: 14153)
💥 無名戦士 の必殺技! 俊敏なリザードマン A に 18023 の大ダメージ! (残りHP: 29628)
--- ターン 2 ---
💥 俊敏なリザードマン A の必殺技! 無名戦士 に 35395 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +5 攻撃力(POWER) +5 素早さ(SPEED) +9
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なハーピー A の必殺技! 無名戦士 に 25141 の大ダメージ! (残りHP: 9890)
💥 無名戦士 の必殺技! 俊敏なハーピー A に 19330 の大ダメージ! (残りHP: 25923)
--- ターン 2 ---
俊敏なハーピー A の攻撃 ➔ 無名戦士 に 742 のダメージ (残りHP: 9148)
無名戦士 の攻撃 ➔ 俊敏なハーピー A に 46277 のダメージ (残りHP: 0)
💀 俊敏なハーピー A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +74 Pts. 生命力(HP) +78 攻撃力(POWER) +65 素早さ(SPEED) +72
🎁 宝箱を発見! [エクスカリバー] を獲得! (ボーナスSP +669)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なゴブリン A の攻撃 ➔ 無名戦士 に 21003 のダメージ (残りHP: 14106)
無名戦士 の攻撃 ➔ 平凡なゴブリン A に 28097 のダメージ (残りHP: 41827)
--- ターン 2 ---
⚡ 【平凡なゴブリン A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 平凡なゴブリン A に 20826 の大ダメージ! (残りHP: 21001)
💥 平凡なゴブリン A の必殺技! 無名戦士 に 129412 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +8 Pts. 生命力(HP) +8 攻撃力(POWER) +6 素早さ(SPEED) +6
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なスライム A の必殺技! 無名戦士 に 34566 の大ダメージ! (残りHP: 551)
無名戦士 の攻撃 ➔ 俊敏なスライム A に 55340 のダメージ (残りHP: 0)
💀 俊敏なスライム A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +72 Pts. 生命力(HP) +61 攻撃力(POWER) +96 素早さ(SPEED) +97
🎁 宝箱を発見! [エクスカリバー] を獲得! (ボーナスSP +833)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
無名戦士 の攻撃 ➔ 強靭なレッサーデーモン A に 26188 のダメージ (残りHP: 105579)
💥 強靭なレッサーデーモン A の必殺技! 無名戦士 に 13947 の大ダメージ! (残りHP: 21231)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なレッサーデーモン A に 44826 の大ダメージ! (残りHP: 60753)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 強靭なレッサーデーモン A の必殺技! 無名戦士 に 14220 の大ダメージ! (残りHP: 7011)
--- ターン 3 ---
💥 無名戦士 の必殺技! 強靭なレッサーデーモン A に 118565 の大ダメージ! (残りHP: 0)
💀 強靭なレッサーデーモン A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +81 Pts. 生命力(HP) +88 攻撃力(POWER) +67 素早さ(SPEED) +68
🎁 宝箱を発見! [エクスカリバー] を獲得! (ボーナスSP +605)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 平凡なオーク A の必殺技! 無名戦士 に 62775 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +6 Pts. 生命力(HP) +6 攻撃力(POWER) +8 素早さ(SPEED) +8
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なブラックナイト A に 42230 の大ダメージ! (残りHP: 61485)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 強靭なブラックナイト A の必殺技! 無名戦士 に 34738 の大ダメージ! (残りHP: 534)
--- ターン 2 ---
💥 無名戦士 の必殺技! 強靭なブラックナイト A に 141395 の大ダメージ! (残りHP: 0)
💀 強靭なブラックナイト A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +59 Pts. 生命力(HP) +82 攻撃力(POWER) +91 素早さ(SPEED) +73
🎁 宝箱を発見! [ホーリーメイル] を獲得! (ボーナスSP +729)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なダークエルフ A の必殺技! 無名戦士 に 23359 の大ダメージ! (残りHP: 11995)
⚡ 【俊敏なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 57316 の大ダメージ! (残りHP: 5770)
--- ターン 2 ---
俊敏なダークエルフ A の攻撃 ➔ 無名戦士 に 2963 のダメージ (残りHP: 9032)
💥 無名戦士 の必殺技! 俊敏なダークエルフ A に 67622 の大ダメージ! (残りHP: 0)
💀 俊敏なダークエルフ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +70 Pts. 生命力(HP) +88 攻撃力(POWER) +76 素早さ(SPEED) +98
🎁 宝箱を発見! [グンニグル] を獲得! (ボーナスSP +751)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 無名戦士 の必殺技! 強靭なダークエルフ A に 57071 の大ダメージ! (残りHP: 64773)
強靭なダークエルフ A の攻撃 ➔ 無名戦士 に 6569 のダメージ (残りHP: 28873)
--- ターン 2 ---
⚡ 【強靭なダークエルフ A】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
無名戦士 の攻撃 ➔ 強靭なダークエルフ A に 22703 のダメージ (残りHP: 42070)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なダークエルフ A の攻撃 ➔ 無名戦士 に 22710 のダメージ (残りHP: 6163)
--- ターン 3 ---
💥 無名戦士 の必殺技! 強靭なダークエルフ A に 130373 の大ダメージ! (残りHP: 0)
💀 強靭なダークエルフ A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +53 Pts. 生命力(HP) +50 攻撃力(POWER) +63 素早さ(SPEED) +97
🎁 宝箱を発見! [グンニグル] を獲得! (ボーナスSP +603)
- SP=8000000000000000
チートによる極端な検証です。
ダメージは京単位になりますが、
戦闘ログの流れ自体は低レベル帯と大きく変わっていません。
ここをクリックすると簡易ログが開きます
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 俊敏なオーク B の必殺技! 無名戦士 に 1992920566725672 の大ダメージ! (残りHP: 4730084128110140)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なレッドドラゴン A の攻撃 ➔ 無名戦士 に 2707229982045122 のダメージ (残りHP: 2022854146065018)
剛力なレッサーデーモン C の攻撃 ➔ 無名戦士 に 336512137732181 のダメージ (残りHP: 1686342008332837)
無名戦士 の攻撃 ➔ 俊敏なレッドドラゴン A に 4407697941864315 のダメージ (残りHP: 0)
💀 俊敏なレッドドラゴン A は倒れた!
--- ターン 2 ---
俊敏なオーク B の攻撃 ➔ 無名戦士 に 200501153204683 のダメージ (残りHP: 1485840855128154)
剛力なレッサーデーモン C の攻撃 ➔ 無名戦士 に 582825315837871 のダメージ (残りHP: 903015539290283)
💥 無名戦士 の必殺技! 剛力なレッサーデーモン C に 10166563931539744 の大ダメージ! (残りHP: 0)
💀 剛力なレッサーデーモン C は倒れた!
--- ターン 3 ---
俊敏なオーク B の攻撃 ➔ 無名戦士 に 49144418062081 のダメージ (残りHP: 853871121228202)
💥 無名戦士 の必殺技! 俊敏なオーク B に 7416865830824683 の大ダメージ! (残りHP: 0)
💀 俊敏なオーク B は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +236 Pts. 生命力(HP) +225 攻撃力(POWER) +215 素早さ(SPEED) +266
🎁 宝箱を発見! [グンニグル] を獲得! (ボーナスSP +2515)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なダークエルフ B の攻撃 ➔ 無名戦士 に 1681606290198959 のダメージ (残りHP: 5041398404681488)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
剛力なハーピー A の攻撃 ➔ 無名戦士 に 3810606291888639 のダメージ (残りHP: 1230792112792849)
強靭なブラックナイト C の攻撃 ➔ 無名戦士 に 62236276626157 のダメージ (残りHP: 1168555836166692)
💥 無名戦士 の必殺技! 平凡なダークエルフ B に 8440404201731899 の大ダメージ! (残りHP: 0)
💀 平凡なダークエルフ B は倒れた!
--- ターン 2 ---
強靭なブラックナイト C の攻撃 ➔ 無名戦士 に 239385046829109 のダメージ (残りHP: 929170789337583)
剛力なハーピー A の攻撃 ➔ 無名戦士 に 972852410175133 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +36 Pts. 生命力(HP) +34 攻撃力(POWER) +33 素早さ(SPEED) +38
ここをクリックすると詳細ログが開きます
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 俊敏なオーク B の必殺技! 無名戦士 に 1992920566725672 の大ダメージ! (残りHP: 4730084128110140)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
俊敏なレッドドラゴン A の攻撃 ➔ 無名戦士 に 2707229982045122 のダメージ (残りHP: 2022854146065018)
剛力なレッサーデーモン C の攻撃 ➔ 無名戦士 に 336512137732181 のダメージ (残りHP: 1686342008332837)
無名戦士 の攻撃 ➔ 俊敏なレッドドラゴン A に 4407697941864315 のダメージ (残りHP: 0)
💀 俊敏なレッドドラゴン A は倒れた!
--- ターン 2 ---
俊敏なオーク B の攻撃 ➔ 無名戦士 に 200501153204683 のダメージ (残りHP: 1485840855128154)
剛力なレッサーデーモン C の攻撃 ➔ 無名戦士 に 582825315837871 のダメージ (残りHP: 903015539290283)
💥 無名戦士 の必殺技! 剛力なレッサーデーモン C に 10166563931539744 の大ダメージ! (残りHP: 0)
💀 剛力なレッサーデーモン C は倒れた!
--- ターン 3 ---
俊敏なオーク B の攻撃 ➔ 無名戦士 に 49144418062081 のダメージ (残りHP: 853871121228202)
💥 無名戦士 の必殺技! 俊敏なオーク B に 7416865830824683 の大ダメージ! (残りHP: 0)
💀 俊敏なオーク B は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +236 Pts. 生命力(HP) +225 攻撃力(POWER) +215 素早さ(SPEED) +266
🎁 宝箱を発見! [グンニグル] を獲得! (ボーナスSP +2515)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なダークエルフ B の攻撃 ➔ 無名戦士 に 1681606290198959 のダメージ (残りHP: 5041398404681488)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
剛力なハーピー A の攻撃 ➔ 無名戦士 に 3810606291888639 のダメージ (残りHP: 1230792112792849)
強靭なブラックナイト C の攻撃 ➔ 無名戦士 に 62236276626157 のダメージ (残りHP: 1168555836166692)
💥 無名戦士 の必殺技! 平凡なダークエルフ B に 8440404201731899 の大ダメージ! (残りHP: 0)
💀 平凡なダークエルフ B は倒れた!
--- ターン 2 ---
強靭なブラックナイト C の攻撃 ➔ 無名戦士 に 239385046829109 のダメージ (残りHP: 929170789337583)
剛力なハーピー A の攻撃 ➔ 無名戦士 に 972852410175133 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +36 Pts. 生命力(HP) +34 攻撃力(POWER) +33 素早さ(SPEED) +38
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
平凡なスライム C の攻撃 ➔ 無名戦士 に 1892716487618655 のダメージ (残りHP: 4830288207261826)
💥 平凡なダークエルフ A の必殺技! 無名戦士 に 5100549148627930 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +28 Pts. 生命力(HP) +28 攻撃力(POWER) +21 素早さ(SPEED) +36
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なキメラ B の攻撃 ➔ 無名戦士 に 1235553192168847 のダメージ (残りHP: 5487451502711662)
平凡なブラックナイト A の攻撃 ➔ 無名戦士 に 2168504807747231 のダメージ (残りHP: 3318946694964431)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なオーク C の攻撃 ➔ 無名戦士 に 1605650657065999 のダメージ (残りHP: 1713296037898432)
無名戦士 の攻撃 ➔ 強靭なオーク C に 3870268687819099 のダメージ (残りHP: 0)
💀 強靭なオーク C は倒れた!
--- ターン 2 ---
💥 俊敏なキメラ B の必殺技! 無名戦士 に 585700015025180 の大ダメージ! (残りHP: 1127596022873252)
💥 平凡なブラックナイト A の必殺技! 無名戦士 に 337200266834330 の大ダメージ! (残りHP: 790395756038922)
無名戦士 の攻撃 ➔ 平凡なブラックナイト A に 4770166185205128 のダメージ (残りHP: 0)
💀 平凡なブラックナイト A は倒れた!
--- ターン 3 ---
💥 俊敏なキメラ B の必殺技! 無名戦士 に 444142206297134 の大ダメージ! (残りHP: 346253549741788)
💥 無名戦士 の必殺技! 俊敏なキメラ B に 10080798379497508 の大ダメージ! (残りHP: 0)
💀 俊敏なキメラ B は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +330 Pts. 生命力(HP) +238 攻撃力(POWER) +218 素早さ(SPEED) +261
🎁 宝箱を発見! [グンニグル] を獲得! (ボーナスSP +3446)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 剛力なブラックナイト C の必殺技! 無名戦士 に 18915295621822404 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +38 Pts. 生命力(HP) +29 攻撃力(POWER) +26 素早さ(SPEED) +33
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なブラックナイト A の攻撃 ➔ 無名戦士 に 2296108915339048 のダメージ (残りHP: 4426895779541728)
俊敏なゴブリン C の攻撃 ➔ 無名戦士 に 1064403888461807 のダメージ (残りHP: 3362491891079921)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なレッドドラゴン B の攻撃 ➔ 無名戦士 に 846238739106422 のダメージ (残りHP: 2516253151973499)
💥 無名戦士 の必殺技! 強靭なレッドドラゴン B に 8922649808902653 の大ダメージ! (残りHP: 0)
💀 強靭なレッドドラゴン B は倒れた!
--- ターン 2 ---
💥 俊敏なブラックナイト A の必殺技! 無名戦士 に 609562330958670 の大ダメージ! (残りHP: 1906690821014829)
俊敏なゴブリン C の攻撃 ➔ 無名戦士 に 192298252650132 のダメージ (残りHP: 1714392568364697)
無名戦士 の攻撃 ➔ 俊敏なゴブリン C に 3734139299940961 のダメージ (残りHP: 0)
💀 俊敏なゴブリン C は倒れた!
--- ターン 3 ---
俊敏なブラックナイト A の攻撃 ➔ 無名戦士 に 318598453337033 のダメージ (残りHP: 1395794115027664)
無名戦士 の攻撃 ➔ 俊敏なブラックナイト A に 5049662664947932 のダメージ (残りHP: 0)
💀 俊敏なブラックナイト A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +369 Pts. 生命力(HP) +322 攻撃力(POWER) +235 素早さ(SPEED) +216
🎁 宝箱を発見! [イージスの盾] を獲得! (ボーナスSP +2949)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なオーク B の攻撃 ➔ 無名戦士 に 1505360398699033 のダメージ (残りHP: 5217644296182065)
剛力なゴブリン A の攻撃 ➔ 無名戦士 に 9148877901860472 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +23 Pts. 生命力(HP) +36 攻撃力(POWER) +25 素早さ(SPEED) +32
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なオーク C の攻撃 ➔ 無名戦士 に 1062067762333204 のダメージ (残りHP: 5660936932547930)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
剛力なゴブリン B の攻撃 ➔ 無名戦士 に 3727873127926551 のダメージ (残りHP: 1933063804621379)
💥 剛力なキメラ A の必殺技! 無名戦士 に 1702346454034736 の大ダメージ! (残りHP: 230717350586643)
💥 無名戦士 の必殺技! 剛力なキメラ A に 7976733479653443 の大ダメージ! (残りHP: 0)
💀 剛力なキメラ A は倒れた!
--- ターン 2 ---
俊敏なオーク C の攻撃 ➔ 無名戦士 に 150586915867281 のダメージ (残りHP: 80130434719362)
剛力なゴブリン B の攻撃 ➔ 無名戦士 に 234608930198316 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +36 Pts. 生命力(HP) +29 攻撃力(POWER) +34 素早さ(SPEED) +20
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なキメラ A の攻撃 ➔ 無名戦士 に 2221782598816973 のダメージ (残りHP: 4501222096064190)
強靭なハーピー C の攻撃 ➔ 無名戦士 に 1674627627335443 のダメージ (残りHP: 2826594468728747)
剛力なゴブリン B の攻撃 ➔ 無名戦士 に 5899290139776674 のダメージ (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +21 Pts. 生命力(HP) +37 攻撃力(POWER) +29 素早さ(SPEED) +35
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なキメラ B の攻撃 ➔ 無名戦士 に 791706926880376 のダメージ (残りHP: 5931297768000824)
💥 平凡なダークエルフ A の必殺技! 無名戦士 に 9065464310329192 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +36 Pts. 生命力(HP) +35 攻撃力(POWER) +29 素早さ(SPEED) +37
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 剛力なレッドドラゴン A の必殺技! 無名戦士 に 16000077134928424 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +25 Pts. 生命力(HP) +39 攻撃力(POWER) +36 素早さ(SPEED) +35
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
💥 俊敏なハーピー C の必殺技! 無名戦士 に 4529212397293209 の大ダメージ! (残りHP: 2193792297588065)
剛力なキメラ B の攻撃 ➔ 無名戦士 に 162942821519543 のダメージ (残りHP: 2030849476068522)
剛力なリザードマン A の攻撃 ➔ 無名戦士 に 183286933126570 のダメージ (残りHP: 1847562542941952)
💥 無名戦士 の必殺技! 俊敏なハーピー C に 7355524395485160 の大ダメージ! (残りHP: 0)
💀 俊敏なハーピー C は倒れた!
--- ターン 2 ---
剛力なキメラ B の攻撃 ➔ 無名戦士 に 757796411636887 のダメージ (残りHP: 1089766131305065)
💥 無名戦士 の必殺技! 剛力なキメラ B に 9433192487524884 の大ダメージ! (残りHP: 0)
💀 剛力なキメラ B は倒れた!
剛力なリザードマン A の攻撃 ➔ 無名戦士 に 215422081230304 のダメージ (残りHP: 874344050074761)
--- ターン 3 ---
無名戦士 の攻撃 ➔ 剛力なリザードマン A に 4851576272240492 のダメージ (残りHP: 0)
💀 剛力なリザードマン A は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +293 Pts. 生命力(HP) +267 攻撃力(POWER) +301 素早さ(SPEED) +385
🎁 宝箱を発見! [イージスの盾] を獲得! (ボーナスSP +2302)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
強靭なレッドドラゴン B の攻撃 ➔ 無名戦士 に 1329321454906289 のダメージ (残りHP: 5393683239975252)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なキメラ C の攻撃 ➔ 無名戦士 に 2932155618549504 のダメージ (残りHP: 2461527621425748)
💥 剛力なブラックナイト A の必殺技! 無名戦士 に 717888641241115 の大ダメージ! (残りHP: 1743638980184633)
💥 無名戦士 の必殺技! 強靭なキメラ C に 9475856584924624 の大ダメージ! (残りHP: 0)
💀 強靭なキメラ C は倒れた!
--- ターン 2 ---
強靭なレッドドラゴン B の攻撃 ➔ 無名戦士 に 196496124486934 のダメージ (残りHP: 1547142855697699)
⚡ 【強靭なレッドドラゴン B】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
無名戦士 の攻撃 ➔ 強靭なレッドドラゴン B に 3619925689778454 のダメージ (残りHP: 273220237341073)
剛力なブラックナイト A の攻撃 ➔ 無名戦士 に 782736019133197 のダメージ (残りHP: 764406836564502)
--- ターン 3 ---
強靭なレッドドラゴン B の攻撃 ➔ 無名戦士 に 499360117302352 のダメージ (残りHP: 265046719262150)
💥 無名戦士 の必殺技! 強靭なレッドドラゴン B に 7092234476677741 の大ダメージ! (残りHP: 0)
💀 強靭なレッドドラゴン B は倒れた!
💥 剛力なブラックナイト A の必殺技! 無名戦士 に 557768546742360 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +22 Pts. 生命力(HP) +36 攻撃力(POWER) +30 素早さ(SPEED) +20
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なブラックナイト C の攻撃 ➔ 無名戦士 に 2928935106072657 のダメージ (残りHP: 3794069588808920)
💥 平凡なオーク A の必殺技! 無名戦士 に 7011949370333660 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +30 Pts. 生命力(HP) +24 攻撃力(POWER) +20 素早さ(SPEED) +39
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
俊敏なスライム B の攻撃 ➔ 無名戦士 に 562204564501894 のダメージ (残りHP: 6160800130379707)
🔥 【無名戦士】は追い詰められ、怒涛の奮戦状態に突入した!全能力が大幅強化!
強靭なゴブリン C の攻撃 ➔ 無名戦士 に 3532866380972115 のダメージ (残りHP: 2627933749407592)
強靭なスライム A の攻撃 ➔ 無名戦士 に 366548563145037 のダメージ (残りHP: 2261385186262555)
無名戦士 の攻撃 ➔ 俊敏なスライム B に 3687712200246298 のダメージ (残りHP: 0)
💀 俊敏なスライム B は倒れた!
--- ターン 2 ---
強靭なゴブリン C の攻撃 ➔ 無名戦士 に 325980529259444 のダメージ (残りHP: 1935404657003111)
無名戦士 の攻撃 ➔ 強靭なスライム A に 4946370290185689 のダメージ (残りHP: 0)
💀 強靭なスライム A は倒れた!
--- ターン 3 ---
💥 強靭なゴブリン C の必殺技! 無名戦士 に 414475179346525 の大ダメージ! (残りHP: 1520929477656586)
⚡ 【強靭なゴブリン C】は追い詰められ、狂乱の闘気(奮戦状態)に突入した!
無名戦士 の攻撃 ➔ 強靭なゴブリン C に 4042232031022647 のダメージ (残りHP: 398478202047101)
--- ターン 4 ---
💥 強靭なゴブリン C の必殺技! 無名戦士 に 892612460550981 の大ダメージ! (残りHP: 628317017105605)
無名戦士 の攻撃 ➔ 強靭なゴブリン C に 5068337197836534 のダメージ (残りHP: 0)
💀 強靭なゴブリン C は倒れた!
🎉 無名戦士 の勝利!
獲得報酬: SP +214 Pts. 生命力(HP) +224 攻撃力(POWER) +213 素早さ(SPEED) +237
🎁 宝箱を発見! [イージスの盾] を獲得! (ボーナスSP +2473)
=== 戦闘開始 (無名戦士 VS 敵グループ) ===
--- ターン 1 ---
💥 平凡なレッドドラゴン C の必殺技! 無名戦士 に 11166434183053812 の大ダメージ! (残りHP: 0)
💀 無名戦士 は倒れた!
チームは全滅した...
獲得報酬: SP +25 Pts. 生命力(HP) +27 攻撃力(POWER) +22 素早さ(SPEED) +26
ログから推察されるように数値インフレしてもlog10ベース計算だと比較的安定しています。
数値インフレに悩んでいるゲーム開発者の方は、一度 log10 ベースのスケーリング を試してみる価値があるかもしれません。
対数補正は、攻撃力が大きくなるほどダメージの増加率を相対的に抑える仕組みです。ただし、ダメージ自体は増え続けるため、敵のHPや防御力、報酬などのバランスも重要になります。
デモリンクでは
勝利ボーナス:
難易度ボーナス+宝箱獲得チャンス
敗北ボーナス:
難易度ボーナス×0.1
と調整してあります
最新版:
本当に安定しているのか?
もちろん log10 を入れたからといって 全てのインフレ問題が解決するわけではありません。
敵HPの設計 防御力 報酬量 バフ倍率
などのバランスも重要です。
しかし少なくとも
「攻撃力が100倍になったら戦闘時間が100分の1になる」
ような破綻は抑えやすくなります。
今回のサンプルでは SP=200 と SP=8000000000000000 の両方で 数ターンの殴り合いが成立していました。
X. 別方向のアプローチ
スプライン曲線は、RPGのステータス成長を設計するうえで、最大値に漸近する関数とは別の、かなり柔軟なアプローチです。
特に、先ほどの maxLimit と stiffness を使う方式との違いは、「曲線の形を数式のパラメータで調整する」のではなく、「いくつかの成長目標を指定し、その間を滑らかにつなぐ」 ことができる点です。
例えば、こんな成長を作りたいとします。
- 序盤は成長が速い。
- 中盤はいったん成長が緩やかになる。
- 高レベル帯で再び成長を加速する。
- 最終的には上限値を超えないようにする。
単一の対数関数でもある程度調整できますが、こうした局所的な変化はスプラインのほうが設計しやすいです。
X-1. まず、成長目標を点で指定する
例えば、ステータス $(P)$ に対する補正値 $(F(P))$ を次のように設定します。
| ステータス $(P)$ | 補正値 $(F(P))$ |
|---|---|
| 0 | 0 |
| 100 | 30 |
| 500 | 65 |
| 1,000 | 90 |
| 5,000 | 130 |
| 10,000 | 150 |
| 100,000 | 180 |
これらは、ゲーム設計者が決めた目標値です。実際のゲームバランスに合わせて自由に変更できます。
スプライン曲線は、この点を通る、あるいは点の近くを通る曲線を作ります。
ただし、スプラインそのものには、最大値に漸近する性質はありません。通常のスプラインは指定点の間を補間する仕組みなので、上限を保証するには別の工夫が必要です。
X-2. 方法A:区分線形スプライン
最も簡単なのは、指定した点と点を直線で結ぶ方法です。
2点 $((P_0,F_0))$、$((P_1,F_1))$ の間では、
$$F(P)=F_0+ \frac{P-P_0}{P_1-P_0}(F_1-F_0)$$
を使います。
例えば、ステータス100で補正値30、500で補正値65なら、その間は直線的に増加します。
この方式は分かりやすく、目標値をそのまま通ります。ただし、直線のつなぎ目で傾きが変わるため、成長速度が急に切り替わるように感じる場合があります。
X-3. 方法B:三次スプライン・三次Hermite補間
より自然な成長曲線にしたいなら、三次関数を使って区間をつなぐ方法があります。
各区間で、
$$F(t)=at^3+bt^2+ct+d$$
という形を使い、隣接する区間との接続を調整します。
通常の三次スプラインでは、接続点で曲線の傾きや曲率が滑らかにつながるようにします。一方、RPGの成長値では、通常の三次スプラインだと指定点の間で値がオーバーシュートし、意図しない上限超過や成長値の減少が発生する場合があります。
そこで、単調性を保つ三次Hermite補間などが有力です。
- 指定点を通す。
- 曲線を滑らかにつなぐ。
- 目標値が増加している区間では、補間値も減少しないようにする。
- 補間点の間で意図しない大きな振れを抑える。
X-4. 最大値を超えないようにするには?
ここが重要です。
スプラインを使うだけでは、上限値 $(M)$ は保証されません。大きく分けて、3つの設計方法があります。
| 方法 | 特徴 |
|---|---|
| 補間結果を $(0)~(M)$ に制限する | 実装が簡単。上限に達すると頭打ちになる |
| $(M)$ を最終目標点にして、そこへ滑らかにつなぐ | 上限に到達する成長曲線を作れる |
| 上限の内側で動くよう、別の関数変換を組み合わせる | 上限に漸近する設計も可能 |
例えば、上限200に対して、スプラインで作った中間値 $(S(P))$ を次のように変換する方法があります。
$$F(P)=\frac{M}{1+e^{-S(P)}}$$
この式では、有限の $(S(P))$ に対して $(F(P))$ は必ず0より大きく、$(M)$ より小さくなります。$(S(P))$ が増加し続ければ、$(F(P))$ は $(M)$ に漸近します。
ただし、この方法ではスプラインの出力値がそのまま最終補正値になるわけではありません。目標値を厳密に通したい場合は、各目標点 $(F_i)$ を
$$S_i=\ln\left(\frac{F_i}{M-F_i}\right)$$
に変換してからスプライン補間し、最後に逆変換します。目標値は $(0<F_i<M)$ の範囲で指定します。ゼロから始めたい場合は、初期点だけ別途処理します。
X-5. 端点傾きから分割するスプライン構築法
X-5-1. 最初に両端の目標値を決める
例えば、ステータス $(P)$ に対する補正値 $(F(P))$ を設計するとします。
- 最小点:$(P_0,F_0)$
- 最大点:$(P_1,F_1)$
この2点を結ぶ直線の傾きを、最初の仮傾きとします。
例えば、$(0,0)$ と $(1000,100)$ なら、最初の傾きは $(0.1)$ です。
これは、区間全体を直線で近似した場合の平均的な成長率に相当します。
X-5-2. 区間を分割して中間点を追加する
次に、区間の中間に新しい点を置きます。
例えば、
$$P_m=\frac{P_0+P_1}{2}$$
として、$(P_m)$ における目標値 $(F_m)$ を決めます。
このとき、左右の区間の傾きはそれぞれ、
$$m_L=\frac{F_m-F_0}{P_m-P_0}$$
$$m_R=\frac{F_1-F_m}{P_1-P_m}$$
になります。
ここで重要なのは、中間点の値を決めることと、中間点の接線の傾きを決めることは別の作業だという点です。
中間点の値はゲームバランスから指定し、接線の傾きは前後の区間の傾きから推定できます。
X-5-3. 中間点の仮傾きを求める
最も簡単な方法は、左右の傾きを平均することです。
$$m_m=\frac{m_L+m_R}{2}$$
これを中間点での仮傾きとします。
ただし、区間の長さが異なる場合には、単純平均よりも区間幅を考慮した方法が適切です。また、成長値が単調増加する必要があるなら、傾きが負にならないように制約を設けることも重要です。
この処理を繰り返せば、最初は粗い曲線でも、必要な箇所を細かく分割して形を調整できます。
X-5-4. 傾きを使って区間を滑らかにつなぐ
各区間の両端の値と傾きが決まったら、三次Hermite補間などを使って区間をつなぎます。
この方法では、各区間の始点と終点の値だけでなく、それぞれの接線の傾きも指定できます。
そのため、直線補間で生じる角を滑らかにできます。
ただし、通常の三次補間では指定点の間で値が行き過ぎる場合があります。RPGの成長値で単調性や上限を守りたいなら、単調性を保つ傾き制限を加えるとより安全です。
X-5-5. 最大値に漸近させたい場合
ここはスプラインの構築と分けて考えると整理しやすいです。
通常のスプラインは、指定した点の間を補間する方法であり、それ自体が最大値に漸近するわけではありません。
選択肢は大きく2つです。
- 有限の上限値に到達させる: 最大値を終点として設計し、その点までの曲線を作る。
- 上限値に漸近させる: スプラインの出力を有界な関数に変換するか、上限に近づくことを前提とした関数を使う。
後者では、指定点の値を厳密に通したい場合、変換前の値も逆算しておく必要があります。
X-5-6. この方法の実用上の注意点
このアプローチを安定させるには、次のルールがおすすめです。
- 最初に両端の目標値を決める。
- 区間を分割し、中間点の目標値を設定する。
- 各区間の傾きを計算する。
- 前後の傾きから中間点の仮傾きを推定する。
- 必要に応じて傾きを制限し、三次Hermite補間などで曲線をつなぐ。
- 補間結果が目標値、単調性、上限の条件を満たすか確認する。
- 誤差が大きい区間だけをさらに分割する。
特に最後の「必要な区間だけを分割する」方法は、計算量を抑えながら曲線の精度を上げるうえで有効です。
この方法で面白いと思うのは、最初から複雑な関数を選ぶ必要がないところです。
両端の情報から始め、仮傾きを置き、中間点を増やしながら曲線を育てていく。
これは、ゲーム設計者が持っている「このレベルではこの程度の強さにしたい」という感覚を、徐々に数値化していく方法として使えます。
なお、この構築手順はスプラインの標準的な一方式そのものというより、スプライン補間に使う節点や傾きを逐次推定するための設計手法です。傾きの平均方法や制限方法を明確に定めれば、再現可能なアルゴリズムとしてまとめられます。
X-5-7. 具体例
曲線を単調増加に保つことを優先するなら、PCHIP(単調三次エルミート補間) の傾き計算を採用できます。与えられた $(P,F(P))$ の値から計算すると、次のようになります。
$(P,F(P))$は代表値しかわからないとする。
傾きstepXなんてやらないでP10差分ごとで一発という声も聞こえてきますが、
実践では$(P,F(P))$は代表値しかわからない場合が多くこの場合はこうした端点分割法か三次エルミート補間に頼ることになります。
| P | F(P) | 傾きstep1 | 傾きstep2 | 傾きstep3 | PCHIP |
|---|---|---|---|---|---|
| 0 | 0 | - | - | - | 0.250 |
| 10 | 5 | - | 0.76 | 0.833 | 0.667 |
| 20 | 15 | - | 0.76 | 0.833 | 1.000 |
| 30 | 25 | - | 0.76 | 0.833 | 0.667 |
| 40 | 30 | - | 0.76 | 0.566 | 0.615 |
| 50 | 38 | 1.0 | 1.0 | 0.566 | 0.533 |
| 60 | 42 | - | 1.24 | 0.9 | 0.533 |
| 70 | 50 | - | 1.24 | 0.9 | 1.043 |
| 80 | 65 | - | 1.24 | 1.75 | 1.200 |
| 90 | 75 | - | 1.24 | 1.75 | 1.429 |
| 100 | 100 | - | - | - | 3.250 |
三次エルミート補間単一区間の補間
1. 単位区間 [0, 1]
単位区間 [0,1] について、以下を与える。
- $t=0$ における始点:$p_0$
- $t=1$ における終点:$p_1$
- $t=0$ における開始接ベクトル:$m_0$
- $t=1$ における終了接ベクトル:$m_1$
このとき、3次エルミート補間多項式は次のように定義される。
$$
\begin{aligned}
p(t)={}&(2t^3-3t^2+1)p_0\
&+(t^3-2t^2+t)m_0\
&+(-2t^3+3t^2)p_1\
&+(t^3-t^2)m_1
\end{aligned}
$$
ただし、
$$
t\in[0,1]
$$
とする。
2. 任意区間の補間
任意の区間 $[x_k,x_{k+1}]$ における補間を考える。
まず、区間を単位区間 ([0,1]) に変換する。
$$
t=\frac{x-x_k}{x_{k+1}-x_k}
$$
エルミート基底関数を次のように定義する。
$$
h_{00}(t)=2t^3-3t^2+1
$$
$$
h_{10}(t)=t^3-2t^2+t
$$
$$
h_{01}(t)=-2t^3+3t^2
$$
$$
h_{11}(t)=t^3-t^2
$$
これらを使うと、任意区間での補間関数は次のようになる。
$$
\begin{aligned}
p(x)={}&h_{00}(t)p_k\
&+h_{10}(t)(x_{k+1}-x_k)m_k\
&+h_{01}(t)p_{k+1}\
&+h_{11}(t)(x_{k+1}-x_k)m_{k+1}
\end{aligned}
$$
ここで、
- $p_k$:区間の始点における関数値
- $p_{k+1}$:区間の終点における関数値
- $m_k$:始点における接線の傾き
- (m_{k+1}):終点における接線の傾き
- (x_{k+1}-x_k):区間の幅
である。
接線の傾きには区間幅を掛けるため、単位区間の式から任意区間の式へ変換できる。
3. 一意性
指定された始点・終点の値と、両端の接線の傾きを満たす3次多項式は一意に定まる。
4. 標準形式
単位区間上の補間多項式は、次の標準形式でも表せる。
$$
\begin{aligned}
p(t)={}&(2p_0+m_0-2p_1+m_1)t^3\
&+(-3p_0+3p_1-2m_0-m_1)t^2\
&+m_0t+p_0
\end{aligned}
$$
この形式では係数を一度計算しておけば、さまざまな $t$ に対して効率よく補間値を計算できる。
X-6. RPGなら、どの方法が向いているか
次のように使い分けます。
- 経験値テーブルやレベルごとの目標値:スプライン補間。レベルごとに目標を置きやすい。
- 攻撃力などの継続的な成長:$(P\log P)$ などの非線形関数。成長の傾向を数式で管理しやすい。
- クリティカル率や速度補正などの上限付き能力:上限に漸近する関数、または有界変換付きスプライン。
- 特定レベル帯だけ成長を緩めたい・速めたい場合:スプライン。局所的な調整がしやすい。
スプラインの最大の利点は、曲線全体を1つのパラメータで調整する必要がないことです。「レベル100でこの値、500でこの値、1000でこの値」と、設計したいゲームバランスから直接曲線を作れます。
一方、漸近関数は上限や成長傾向を数式で管理しやすいのが利点です。
目標値を自由に指定したいならスプライン、上限へ近づく性質そのものを設計したいなら漸近関数。 この2つは競合するというより、組み合わせても使える手法です。
作者
GitHub: https://github.com/NAS6mixfoolv
X(旧Twitter): https://x.com/NAS6_oxo
作者HP: https://nas6.net
気に入っていただけたら GitHub に ⭐ をいただけると嬉しいです!
