日々、ITエンジニアリングのレベルアップに勤しむ、弓削田です。
お金と経験値がたまるようになったことで、いよいよレベルアップする仕様を組み込まないといけなくなりました。
RPGの本筋である経験値の累積によって、レベルアップを地道にしていくという観点は崩さないようにすると、
やっぱりドラクエの基本仕様を参考にして考えてみることにした。
ここは、何故FFではないのかというと、FFは内部数値がインフレーションを起こして、ゲーム終盤は、途方も無い数値を追わなければいけなくなるのと
ラスボスの戦闘値やHPって考えると恐ろしくなる数値なのでは・・・と容易に想像できてしまうので、
シンプルな構造が見て分かるドラクエシステムを参考にさせてもらうことにした。
ドラクエ1のレベルアップ数値仕様について
さすが、ドラクエというだけあって、内部数値を調査してくれているページがありました。
【ドラクエ1】レベルアップに必要な経験値【経験値テーブル】
ここには、レベルアップに必要な経験値と、アップしたレベルで得られる魔法の種類が書かれています。
ただ、ドラクエは、若干のゆらぎ乱数が入っているので、厳密な数値ではなさそうですが、真意の程はわかりません・・・
でも、この値は参考になります。
ちなみに、ドラクエ1では、レベルの最大が30で、経験値の最大が65535という、当時のビット数のデータを扱う最大値にセットされているので、
今回は、レベル99で、javascriptで扱える数値上限ぐらいまでは、対応できるので、レベルアップ感の参考として見させてもらいました。
表を見ていると、大体1.5~2倍ぐらいの増加傾向になっていることがわかります。
ただ、レベル15を超えたあたりから、約0.5ぐらいの値が加算されていくような、反比例的な増加傾向にしているようです。
記憶が確かなら、当時ドラクエ1は、レベル20ぐらいで竜王を倒すことができて、レベル30ぐらいまでは、難なくあげられたように覚えています。
この辺の数値がクリアしやすい感覚なんでしょうね。
レベルアップは倍々ゲームにすると、とんでもない値になってしまう件
とりあえず、レベル99まで、数値を倍にしていくとすると、以下のJSコードで試してみると・・・
let total = 3;
console.log(0 +" : 0" +" / "+total);
for(let i =1; i<99; i++){
let num = total * 2;
total += num;
console.log(i +" : "+ num +" / "+total);
}
console.log(total);
0 : 0 / 3
1 : 6 / 9
2 : 18 / 27
3 : 54 / 81
4 : 162 / 243
5 : 486 / 729
左の数値がレベル、次がレベルアップに必要な経験値、右の値が、アップした後の経験値。
このままレベル44になると、
44 : 1.9695418043672227e+21 / 2.954312706550834e+21
となってしまい、JSで扱える数値上限を超えてしまいました。
こうした、RPGでのレベルアップ計算は、アルゴリズムがありそうな感じもしましたが、
ちゃんとそうした研究をブログアップしている人もいました。
ゲーム制作で使える!経験値テーブルの作り方のコツ
ここでは、反比例グラフで、絶妙な値を計算してくれています。
そして作った計算式
とりあえず、今回は、次のような計算式を用意してみました。
~~(Math.pow(lv,3.6) + (lv+1))
これを実行してみると、
0 : 0 / 3
1 : 3 / 6
2 : 15 / 21
3 : 56 / 77
4 : 152 / 229
5 : 334 / 563
6 : 639 / 1202
7 : 1110 / 2312
8 : 1791 / 4103
9 : 2734 / 6837
...
30 : 207826 / 1461648
...
60 : 2519735 / 34139621
...
98 : 14737261 / 321,384,235
こんな感じで、maxレベルの値は、恐ろしい数値になっていますが、1.8倍ぐらいの数値の累積にしているので、
インフレーション感は少ないんじゃないかと思います。
あとは、これに該当するモンスターを作れば、レベルアップの難易度調整もできるでしょう。
とりあえず、今回は、ここまで。
実際のレベルアップできるまで、今しばらくお待ちくだされ。
0 件のコメント:
コメントを投稿