微分積分良い気分!
先日このようなTweetがTLに
RPG作ってて、もうだしてていいころなのに、経験値とか色々ハマって1周間以上遅れてるwwww誰か微分積分が魔法のように出来る方法を教えておくれw
— Rento (@rento83) 2013年11月16日
そこですかさずTweet!
@Rento83 つ http://t.co/hEix6CQBln
— カン@Game Creator(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2013年11月16日
高専で使われている微積の教科書です.
一説によるとかなり分かり易いとかなんとか…
いや,重要なの微積では無く,
経験値をどのように計算するかというアルゴリズムの話です.
経験値に関わらず,ゲームバランスを左右する計算式を考えるのは骨が折れます.
場合によっては実装より時間が掛かってしまうこともしばしば.
実際,現在作成中のローグライクゲームにおいても
- ダメージ計算式
- 武具の能力決定式
- モンスターの能力決定式
などなど,決める事が多数あって難航中です…ローグムズカシイ
箱庭RPGの経験値計算式
無印の箱庭RPGを作る際に色々なゲームの計算式を調べ,
かなり勉強になったサイトもあったはずが,ブクマしておらずorz
そんな事はさておき,せっかくネタが出来たので
一例として箱庭RPGの経験値計算方法を解説します.
※あくまで例です.良い悪いは別ということで.
あと数学は得意じゃありませんので,悪しからず.
経験値を決めるのに重要な事
まずは計算式を考える前に,経験値を決めるのに重要な事をまとめます.
なんらかの問題を解決するには,重要なことを洗い出すのが先決ですね.
経験値において重要なのは
- 「次のレベルまでの必要経験値」?
- 「モンスターが持っている経験値」?
など実際の数値がまず考えられます.
確かにこれらは重要ですが,これはあくまで計算結果であって
計算式を立てる段階では置いておきましょう.
(数値が予め決めっているなら別ですが)
そもそも経験値とは何か.RPGにおいてはレベルアップに必要な要素ですね.
つまり,「レベルアップまでのゲーム時間に影響する要素」ということです.
そしてこの「レベルアップまでのゲーム時間」を決定付けるのが,
レベルが上がるまでの戦闘回数
と
1回の戦闘時間
です.
戦闘時間
戦闘時間についてはゲームによって変わります.例えば箱庭RPGであれば
ザコ戦は長くとも1分程度としています.(ボス戦は例外)
この1分というのは,同レベルのプレイヤーとモンスターが戦うと
約3回の通常攻撃で戦闘が終了するように能力を設定しているからです.
(あくまで目安)
戦闘回数
次に戦闘回数ですが,箱庭RPGではサクサクレベルアップ
するようにしたかったので,決め打ちで8回としました.
1戦闘1分なので,1レベルアップ8分,経験則で言うとかなりサクサクなはずです.
ただし,戦闘時間を同レベルのモンスターという設定で1分としているので,
戦闘回数も同レベルのモンスターと戦った時とします.
モンスターが持っている経験値
上記から同レベルのモンスターと戦った時の
レベルアップまでの戦闘回数が8回と決まりました.
なので,モンスター(レベル : x)が持っている経験値も
( (x + 1)レベルの必要経験値 - xレベルの必要経験値 ) / 8
で計算出来るようになりました!
必要経験値
あとは必要経験値の式を決めるだけです.
必要経験値とはそのレベルになるのに必要な経験値の事です.
必要経験値で重要なのが,レベルが上がるにつれてどの程度必要経験値が増えていくか,つまり上昇率です.
なぜなら,相手が異なるレベルの時の
次のレベルまでの戦闘回数を決めるのが上昇率だからです.
例えば,レベルが低い相手の時はレベルアップを遅くしたい時は上昇率を上げる.
逆に,ある程度レベル差があってもレベルアップに時間がかからないようしたい場合は上昇率を下げる.といった具合です.
箱庭RPGでは後者です.これはレベルさえ上げればゴリ押し出来るように,
つまり誰でもクリア出来るようにしたかったため,上昇率を抑えました.
さてこの上昇率ですが,どのように変えるかと言えば
一番簡単なのが計算式を多項式にして次数を調整することです.
レベルを上げていくと同じ場所では上げ辛くなるような
一般的なRPGであれば多項式で問題無いと思います.
実際に箱庭RPGは2次多項式*1となっています.
低レベル時は係数と切片の影響をもろに受けるので,
そこらへんを配慮して決めた気がします.(ウロオボエ)
最後に
最終的には2次多項式というかなり簡単な式(具体的な式はカット)になりましたが,
これに至るまでに結構時間が掛かっています.しかもかなり簡易的に決めているにも関わらずです.
また,箱庭RPGは戦闘時間→戦闘回数→経験値と決めましたが、
例えば相手とのレベル差で経験値を決めるという方法で,
経験値から決めて行く事もできると思います.
今回はあくまで経験値の計算方法のみでしたが,実際には
- 「一度の戦闘での攻撃回数はどれくらいか」
- 「レベルアップでどれだけ能力が上がるか」
- 「能力が上がったらどれだけ戦闘に影響がでるか」
- 「装備能力と基礎能力の影響の程度はどれくらいか」
- 「敵の能力はどれだけ上がっていくか」
- 「ボスにはどれぐらいのレベルで勝てるか」
など,複数の要素が絡み合ってゲームバランスが決まります.
しかし,同時に考えていく事は非常に困難です.
時には決め打ちしてでも,一つずつ決めていく事が重要(というか楽)だと思います.
ゲーム作りって難しい!でも楽しい!!そして微積はどこいった!!!>_('ω' 」)_
*1:ax^2 + bx + c というやつ x:次のレベル