第五章 システムとバランスNo.039
成長曲線
Leveling Curve別名 経験値テーブル
概要
レベルが上がるまでの間隔と、上がったときの強さの伸びをレベルの順に並べたもの。間隔はレベルごとに要る経験値の表(経験値テーブル)と、1 戦で得る経験値の組で決まる。表の増え方が 1 戦の経験値の増え方より速いと途中から上がりにくくなり、遅いとすぐに上がってありがたみがなくなる。何戦で上げたいかを先に決め、1 戦の経験値を掛けて表を逆算する。
使われる場面
- 経験値でレベルが上がるゲーム
- 敵ごとの経験値とレベルごとに要る経験値を決める。要る経験値を 1 戦で得る経験値で割った値をレベルの順に並べ、どのレベルで何戦かかるかを確かめる。
- 先へ進むほど強い敵が出るゲーム
- 場所ごとの敵の経験値の増え方に合わせて表の増え方を決める。先の場所へ進んだときに間隔が延びすぎも縮みすぎもしないようにする。
- 技や装備の熟練度
- 使うたびに熟練度が貯まって段が上がる仕組みで、段ごとに要る熟練度を決める。1 回使って得る量で割り、次の段までに何回使うかを確かめる。
- 遊んだ量で段が上がる報酬の仕組み
- 1 日に得る点数の見込みから段ごとに要る点数を逆算する。合計を 1 日の見込みで割り、期間の終わりまでに最後の段へ届くかを確かめる。
- 1 回ごとに最初からやり直すゲームの中のレベル
- 1 回の挑戦のうちに上限近くまで上がるよう、短い表にする。挑戦の長さを先に決め、そのあいだに上げたい回数で割って間隔を決める。
判断基準
| こういうとき | こうする |
|---|---|
| 途中からレベルがなかなか上がらなくなる | レベルごとに「要る経験値 ÷ 1 戦で得る経験値」を並べ、延び始める所を探す。そこから先の表の増え方を 1 戦の経験値の増え方に合わせる(倍率を下げる、同じ量を足す形に変える)。 |
| すぐにレベルが上がって、ありがたみがない | 表の増え方が 1 戦の経験値の増え方に追いついていない。先の敵の経験値を増やすなら、同じ割合で表の要る経験値も増やす。 |
| 経験値テーブルをどう決めればよいかわからない | 先にレベルごとに何戦(何分)で上げたいかを決める。その時点で 1 戦に得る経験値を掛けて、要る経験値を逆算する。 |
| 敵の経験値を変えたら、レベルの上がり方まで変わった | 間隔は表と敵の経験値の組で決まる。敵の経験値を変えたら、変える前と同じ戦いの数になるよう表も掛け直す。 |
| 最初のレベルアップまでが遠い | 最初の数レベルが 1〜3 戦で上がるように表の始めを小さくする。 |
| 終盤で 1 レベル上げるのに長くかかりすぎる | 1 回にまとめて遊ぶ時間のうちに 1 回は上がる長さを間隔の上限にする。上限に届いたレベルから先は、上限の戦いの数で逆算した表に切り替える。 |
| 同じ敵を倒し続けてレベルを上げすぎ、先の敵が弱く感じる | 自分よりレベルの低い敵から得る経験値をレベルの差に応じて減らす。先の場所の敵の経験値を手前の場所より大きくし、先へ進むほうが早く上がるようにする。 |
| レベルが上がっても強くなった気がしない | 1 レベルでの能力値の伸びを、同じあいだに敵が強くなる量(「難易度曲線」)と比べる。敵を倒すのに要る攻撃の回数が何レベルか上げると減るまで、伸びを大きくする。 |
遊んでこう感じたら
指示の例
Lv 17 を過ぎたあたりからレベルがなかなか上がらない。成長曲線を見直して、経験値テーブルを前のレベルの 1.2 倍ではなくその時点の敵の経験値の 5 倍にし、どのレベルも 5 戦ほどで上がるようにして
敵を倒すたびにレベルが上がって、ありがたみがない。経験値テーブルの増え方が敵の経験値の増え方に追いついていないので、要る経験値をその時点の敵の経験値の 4〜6 倍で決め直して
最初のレベルアップまでに 10 分かかり、レベルを上げると何が変わるのかわからないまま遊んでいる。成長曲線の序盤を短くして、Lv 5 までは 2〜3 戦ごとに上がるようにして
最初の森で敵を倒し続けたら、次の町の敵が弱すぎた。自分よりレベルの低い敵から得る経験値を 1 レベル差ごとに 2 割ずつ減らし、5 レベル以上低い敵からは得られないようにして
Lv 25 からは 1 レベル上げるのに 1 時間近くかかり、同じことの繰り返しで飽きる。成長曲線の終盤に上限を付けて、どのレベルも 20 戦以内で上がるようにして
詳細
レベルごとに要る経験値の表
経験値でレベルが上がるゲームでは、敵を倒すなどして貯めた経験値が決まった量に届くとレベルが上がる。Lv L から L + 1 に上がるのに要る経験値をレベルごとに並べた表を経験値テーブルと呼ぶ。表は 1 つ上げるのに要る量で書くほか、Lv 1 からの累計で書くこともある。デモの上の段の表(既定の設定のとき)は Lv 1 → 2 が 50、Lv 2 → 3 が 100 で、Lv L → L + 1 は 50 × L である。累計では Lv 30 までに 21750 になる。
レベルが上がる間隔と、上がるたびに強くなる量をレベルの順に並べると、キャラクターの育ち方が一本の線になる。この線を成長曲線と呼ぶ。以下では前半で間隔を扱い、強くなる量は後の「能力値の伸び」の節で扱う。
間隔は表だけでは決まらない
1 レベル上げるのにかかる戦いの数は、要る経験値を 1 戦で得る経験値で割った値になる。要る経験値が同じ 300 でも、1 戦で 10 を得るなら 30 戦、100 を得るなら 3 戦である。そのため、経験値テーブルを見ただけでは間隔は決まらない。レベルが上がるにつれて 1 戦の経験値がどう増えるかと組にして、はじめて決まる。
先へ進むほど強い敵と戦うゲームでは、1 戦の経験値もレベルとともに増える。表の増え方がそれより速いレベルでは間隔が延び、遅いレベルでは縮む。途中から間隔が延びていくのは、そのあたりから表の増え方が 1 戦の経験値の増え方を上回るからである。遊んだ人からは「途中からレベルがなかなか上がらなくなる」という感想が出る。反対に表の増え方が追いつかないと、「すぐにレベルが上がって、ありがたみがない」になる。
デモのモデル
デモの 2 つの段は同じ回数だけ戦い、1 戦ごとに経験値を得る。経験値が要る量に届いたらレベルが上がり、余りは次のレベルに持ち越す。1 戦で 2 つ以上上がることもある。乱数は使っていないので、同じ設定なら毎回同じ結果になる。値はこのデモで決めたもので、遊んだ人を測ったものではない。
- 1 戦で得る経験値:操作パネルで両方の段をまとめて切り替える。「一定」はどのレベルでも同じ敵と戦い、1 戦で 10 を得る。「レベルに比例」は先へ進むほど強い敵と戦い、Lv L のあいだは 1 戦で 10 × L を得る(既定)。
- 上の段の表:毎レベル 5 戦で上がるように、要る経験値をその時点の 1 戦の経験値の 5 倍にした表。「一定」なら毎レベル 50、「レベルに比例」なら 50 × L になる。
- 下の段の表:Lv 1 → 2 はどの形も 50 で、上の段と同じである。そこから先の増え方を 4 つの形から選ぶ。
下の段の形は次のとおりである。操作パネルの「増え方」では形ごとに次の範囲を試せる。
- 毎レベル同じ:どのレベルも 50。
- 比例:1 レベルごとに同じ量 d を足す。Lv L → L + 1 は 50 + d × (L − 1) で、d は 10〜100。
- 二乗:足す量を 1 レベルごとに c ずつ増やす(c、2c、3c と足していく)。Lv L → L + 1 は 50 + c × (L − 1) × L ÷ 2 で、L が大きいと L の二乗にほぼ比例する。c は 1〜10。
- 一定の倍率:1 レベルごとに同じ倍率 r を掛ける。Lv L → L + 1 は 50 × r の (L − 1) 乗を四捨五入した値で、r は 1.05〜1.25(既定は 1.2)。
下のグラフはレベルごとに要る経験値を 1 戦の経験値で割った値である。右の欄の「Lv 30 まで」は、余りを持ち越して戦ったときに Lv 30 に着くまでの戦いの数である。
1 戦の経験値が一定のとき
1 戦の経験値を「一定」にすると、どのレベルでも 1 戦で 10 を得る。表の増え方がそのまま間隔の延び方になる。上の段はどのレベルも 5 戦で、Lv 30 まで 145 戦である。
下の段を「比例」にして d を 10 にすると、Lv L → L + 1 に 5 + (L − 1) 戦かかる。間隔は 1 レベルごとに 1 戦ずつ延び、Lv 10 で 14 戦、Lv 29 で 33 戦になる。Lv L に着くまでの戦いの数は 5 × (L − 1) + (L − 1) × (L − 2) ÷ 2 で、L の二乗にほぼ比例する。Lv 30 までは 145 + 406 = 551 戦になり、右の欄の値と合う。
「二乗」にして c を 1 にすると、Lv 30 までに要る経験値の合計は「比例」の d = 10 と同じ 5510 で、戦いの数も同じ 551 戦である。ただし配り方が違う。Lv 10 は 9.5 戦で「比例」より短く、Lv 29 は 45.6 戦で長い。合計が同じでも、二乗の形は前半を軽くして後半に重さを寄せる。L が大きいと、Lv L に着くまでの戦いの数は L の三乗にほぼ比例する。
「一定の倍率」では間隔も 1 レベルごとに r 倍になる。r が 1.1 なら Lv 10 で 11.8 戦、Lv 20 で 30.6 戦、Lv 29 で 72.1 戦になる。Lv 30 までは 744 戦かかる。r が 1.2 なら Lv 29 で 824 戦、Lv 30 まで 4921 戦になる。10 レベル進むごとに間隔は 1.1 倍では 2.6 倍に、1.2 倍では 6.2 倍に延びる。序盤の数レベルでは 1.1 倍も 1.2 倍も差が小さい(Lv 2 で 5.5 戦と 6 戦)。倍率の違いは後半になってから大きく開く。
1 戦の経験値がレベルとともに増えるとき
既定の「レベルに比例」では、Lv L のあいだは 1 戦で 10 × L を得る。1 レベル上げるのにかかる戦いの数は、要る経験値 ÷ (10 × L) である。
- 毎レベル同じ:5 ÷ L 戦になる。Lv 5 で 1 戦になり、Lv 8 を過ぎると 1 戦で 2 つ以上上がる。Lv 30 まで 21 戦で着く。表が増えないまま 1 戦の経験値だけが増え、間隔が縮み続ける。
- 比例:(50 + d × (L − 1)) ÷ (10 × L) 戦で、L が大きくなると d ÷ 10 戦に近づく。d を 50 にすると 50 × L になり、上の段とまったく同じ表になる。d が 20 なら Lv 29 で 2.1 戦、100 なら 9.8 戦で、どちらも途中からほぼ一定の間隔になる。
- 二乗:5 ÷ L + c × (L − 1) ÷ 20 戦になる。c を 5 にすると Lv 4〜5 で 2 戦まで縮んでから延び始め、Lv 20 で 5 戦、Lv 29 で 7.2 戦になる。後半では間隔がレベルに比例して延びる。
- 一定の倍率:既定の r = 1.2 では Lv 1 の 5 戦から縮み、Lv 5〜6 で 2.1 戦になる。そこから延び続けて Lv 17 で 5.4 戦と上の段を超え、Lv 29 では 28 戦かかる。
間隔が延びるか縮むかは、1 レベル進むごとに要る経験値が何倍になるかと、1 戦の経験値が何倍になるかの比べ合いで決まる。間隔の倍率は、前者を後者で割った値である。
一定の倍率の間隔が縮んでから延びるのは、1 戦の経験値の増え方がレベルとともに鈍るからである。1 戦の経験値は Lv 1 → 2 で 2 倍になるが、Lv 10 → 11 では 1.1 倍、Lv 29 → 30 では 1.03 倍にしかならない。表のほうはどのレベルでも 1.2 倍に増える。間隔は Lv L から次のレベルへ進むごとに 1.2 × L ÷ (L + 1) 倍になる。この値は L が 5 のときにちょうど 1 になる。L が 5 より小さいあいだは 1 を下回って間隔が縮み、6 からは 1 を上回って延びる。
自動再生で見ると、40 戦の時点では下の段が Lv 15 で、上の段の Lv 9 より先を行く。120 戦前後で上の段が追いつく。145 戦で上の段が Lv 30 に着いたとき、下の段は Lv 26 である。下の段が Lv 30 に着くのは 230 戦目である。倍率で増える表は、一つの表で 2 つの感想を生みうる。序盤では「すぐにレベルが上がって、ありがたみがない」、終盤では「途中からレベルがなかなか上がらなくなる」である。
何戦で上げたいかから逆算する
表の形を先に選ぶと、間隔は 1 戦の経験値との組み合わせで後から決まる。間隔を思いどおりにしたいなら、順番を逆にする。先にレベルごとに何戦で上げたいかを決め、その時点で 1 戦に得る経験値を掛けて要る経験値を出す。デモの上の段はこの作り方で、どのレベルも 5 戦で上げると決めてから 1 戦の経験値の 5 倍にしている。
// fightsPlan[L]:Lv L → L + 1 を何戦で上げたいか。xpPerFight(L):Lv L のころに 1 戦で得る経験値の見込み
const need: number[] = [];
for (let L = 1; L < MAX_LEVEL; L++) {
need[L] = Math.round(fightsPlan[L] * xpPerFight(L));
}
1 戦の経験値の見込みは、そのレベルのころに戦う敵の経験値の平均にする。戦い 1 回にかかる時間がわかれば、戦いの数を時間に直せる。1 戦に 30 秒かかるなら、5 戦は 2 分半である。上げたい間隔を時間で決めたときは、時間を 1 戦の長さで割って戦いの数にしてから掛ける。
後で敵の経験値を変えたときは、表も同じ割合で掛け直す。表をそのままにすると、敵の経験値を変えた割合の分だけ間隔が変わる。
AI に作らせたゲームでは、レベルごとに要る経験値と、そのレベルのころに戦う敵の経験値を一覧にして出させる。割った値を並べれば、デモの下のグラフと同じ線が描ける。線が急に立ち上がる所が、なかなか上がらなくなる所である。
序盤と終盤の間隔
最初の数レベルは 1〜3 戦で上がるようにする。レベルが上がると何が変わるか(能力値が伸びる、新しい技を覚える、など)を早いうちに見せ、経験値を貯める意味を先に伝えるためである。デモの既定の下の段では Lv 2〜11 が 2〜3 戦で上がる。
終盤で間隔を延ばすなら、上限を決めておく。上限は 1 回にまとめて遊ぶ時間から決める。1 回に遊ぶあいだに少なくとも 1 回は上がる長さにとどめる。1 戦に 1 分かかり、1 回に 30 分遊ぶゲームなら、1 レベルは 30 戦までである。デモの既定の下の段は Lv 29 で 28 戦で、この上限にほぼ届く。「一定の倍率」の r を 1.25 にすると Lv 29 で 89 戦になり、上限を大きく超える。
上限に届いたレベルから先は、上限の戦いの数で逆算した表に切り替える。そうすれば倍率で増やしてきた表でも、終盤の間隔はそれ以上延びない。
同じ敵を倒し続けてレベルを上げすぎる場合
弱い敵のいる場所にとどまって戦い続けると、先の場所の敵より強くなってから先へ進むことになる。先の場所の難しさが「難易度曲線」で見込んだより下がり、手応えがなくなる。
表が増えていれば同じ敵を倒し続けるほど間隔が延びるので、上げすぎにはある程度の歯止めがかかる。デモで 1 戦の経験値を「一定」(同じ敵と戦い続ける場合)にすると、倍率 1.2 の表では Lv 10 で 26 戦、Lv 15 で 64 戦かかる。ただし、この歯止めは表の増え方しだいである。「毎レベル同じ」の表では間隔が延びないので、いくらでも上げられる。
歯止めを確かにするには、自分よりレベルの低い敵から得る経験値を減らす。たとえば 1 レベル下の敵ごとに 2 割減らし、5 レベル以上下の敵からは得られないようにする。あわせて、先の場所の敵の経験値を手前の場所より大きくし、先へ進んだほうが早く上がるようにする。
能力値の伸び
レベルが上がると体力や攻撃力などの能力値が伸びる。1 レベルでどれだけ伸びるかも成長曲線の一部である。
伸びが小さいと、レベルが上がっても敵を倒すのに要る攻撃の回数や、受けられる攻撃の回数が変わらない。このとき出る感想が「強くなっても、何も変わらない」である。伸びは同じあいだに敵がどれだけ強くなるか(「難易度曲線」)と比べて決める。次の場所の敵を倒すのに要る攻撃の回数をレベルごとに数えて並べると比べられる。何レベルか上げるとその回数が 1 回以上減るなら、伸びは足りている。
伸び方の形も経験値テーブルと同じように選べる。毎レベル同じ量を足すと、後半ほど 1 レベルの伸びの割合が小さくなる(攻撃力 10 に毎レベル 2 を足すと、Lv 1 から 2 では 2 割増えるが、Lv 20 から 21 では 4% 増えるだけである)。同じ割合を掛けると、割合は変わらないが数値が大きく膨らむ。キャラクターごとに伸びる時期を変える(序盤に大きく伸びる形と、後半に大きく伸びる形)と、育て方に違いが出る。
ほかの用語との関係
「難易度曲線」は面を進むにつれて敵の強さをどう上げるかを扱う。レベルで強くなるゲームでは、その面に着くころのレベルを経験値テーブルから見込み、そのレベルの能力値と敵の強さを比べる。着くころのレベルは、その面までに戦う数と 1 戦の経験値からデモと同じ数え方で求められる。
「コアループ」は戦って報酬を得て強くなり、強い敵に挑む輪である。レベルアップはこの輪の報酬の一つである。表の増え方が 1 戦の経験値の増え方より速いと、輪がつながっていても強くなるまでの周回の数が増えていく。
「報酬の間隔」は報酬をどれだけ間を空けて出すかを扱う。レベルアップは間隔が経験値テーブルで決まる報酬である。終盤で間隔を延ばしたときは、そのあいだに装備や素材などの別の報酬を挟むと、何も得られない時間が長く続かない。