RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

能力値曲線をp次曲線で作る

過去ブログの転載です。

RPGを作ろうと思うと、おおむねこの能力値曲線決めをする過程にぶつかります。だいたい線形でもいい気はしますが、やっぱりHPとかはレベルが上がるにつれて上昇量が大きくなる方がいいですよね。そのため、線形を少し進化させて2次曲線によって能力値曲線を作ることがあります。

でも2次曲線は曲がり具合が急だと思われることもたまにあります。原点頂点の放物線にした場合、レベルが低い段階ではほとんど成長しないのに、最高レベル付近では相当上昇量が大きくなるなど。

原点を頂点にしなければいいのかもしれませんが、うまく調整しないとレベルの上昇に伴って逆に能力値が下がってしまうなんていう曲線ができてしまうこともあり、案外調整がめんどくさかったりします。

それだったら、頂点は原点だって決めて曲がり具合だけ変えてやれば良さそうですよね。その曲がり具合の調整を、2次曲線じゃなくてp次曲線(pは実数)にすることで実現します。

まず、頂点の位置をキャラクターの性質に応じて次の2通りで分岐します。

f:id:fermiumbay13:20190802013929p:plain

初期レベルaのとき能力値c
最終レベルbのとき能力値d
のとき、レベルnのときのパラメータ値は上の通りとします。
最初は成長が遅いけど後からどんどん強くなる晩成型、
最初は成長が速いけど段々頭打ちになってしまう早熟型の2種類です。
晩成型は、初期レベルを頂点にしたもの、
早熟型は、最終レベルを頂点にしたもの、と考えてよいでしょう。
式中のpの値を変えれば、曲線の曲がり具合が変わります(p≧1)。どちらでもない平均型は、この場合どっちかの式にp=1を入れればOKです。p=1のとき、晩成型も早熟型も同じ式(直線)になります。

この式にp=2を代入すれば2次曲線となって、これまでも考えていた能力値曲線に似るのですが、そうすると結構急なカーブになってしまって、最初はまったく成長しないのに後からとんでもなく成長する怪奇主人公が作られてしまう可能性があるので、pは2より小さな値にしてやったほうがいいと思います。

1.1乗とか1.2乗とかが無難かもしれません。aのb乗は、eの(b×lna)乗として計算してやればOKです。

能力値決めの流れ

上の式を用いて能力値を決める流れを確認してみましょう。まず第一段階として、式に代入するa~dの値を決めておきましょう。

今回はベイ助君のHPを決めることにしてみます。レベルの下限は1、レベルの上限は99としましょう。今から決めるキャラクターの加入時初期レベルが例えば10とかだったとしても、そのゲームにおけるレベルの下限が1なら、初期レベルには1を採用して代入すべきです。そうじゃないと頂点の位置がずれちゃいますからね。実際その辺りは裁量の兼ね合いなので、何とも言えませんが。

というわけで、ベイ助君はレベル1のときHPが32、レベル99のときHPが8500になるようにしてみましょう。

そして成長の仕方ですが、こういうHPはどんなに早熟であっても、低いレベルのうちは上昇量が少なく、レベルが高くなれば上昇量が大きくなる、という特性を持たせるのが一般的ですので、ここでは晩成型としておきます。案外晩成型ベースの方が扱いやすいかもしれませんね。

晩成型の式にa=1, b=99, c=32, d=8500をそれぞれ代入して……

f:id:fermiumbay13:20190802013942p:plain

こうなりました。レベルnのときのHPがa[n]です。aをこっちの記号としても使っちゃったのでややこしいですね……本当に成り立つのかな?

レベル1のときはn=1を代入して、
a[1]=8468×(0/98)^p+32=8468×0^p+32=32

レベル99のときはn=99を代入して、
a[99]=8468×(98/98)^p+32=8468×1^p+32=8500

ちゃんと決めた通りの値になりました。0と1は何乗してもそのままなのがみそですね。

それでは曲がり具合を意味するpの値を決めて、能力値曲線を完成させましょう。決め方は色々あります。もうひとつ条件を増やして、レベルなんとかのときHPなんとか、としてやれば、pを消去することが可能になりますね。でも曲がり具合を決めたいので、今回は表計算ソフトで数値を入れながら納得のできるパラメータを探す方法でやってみましょう。泥くさい計算するよりはきっと楽しいでしょ。

f:id:fermiumbay13:20190802013953p:plain

HPは整数でしょうから、小数点以下は四捨五入して構いません。実運用では整数への四捨五入は、0.5足して小数点以下切り捨てることで実現可能です。上のグラフはp=1のとき、つまり線形の場合ですね。

f:id:fermiumbay13:20190802014005p:plain

p=2(2次曲線)にしてみたグラフです。晩成型なので、後の方になればなるほど上昇量が増加します。形はそれっぽくなっていい気がしますけど、実際のHPを確認してみるとレベル1のとき32ですが、その次は33, 36, 40, ……と、非常にのっそりと上昇し、最後の方になると……, 7989, 8158, 8328, 8500となって、ずいぶん両極端な成長をしてしまっていることが確認できます。別にこれでもいいような気もしますけど、やっぱりちょっと気になりますよね。

f:id:fermiumbay13:20190802014020p:plain

p=1.5にしてみました。こうするとHPは32, 41, 57, 77, ……と成長し、結構納得のいく値になったのではないかと感じられます。最後の方は……, 8114, 8242, 8371, 8500となっています。これで良さそうですね。こうしてベイ助君のHP曲線が完成しました。

f:id:fermiumbay13:20190802014031p:plain

一見すると数式がちょっと複雑なんじゃないかと思えそうなのですが、実際には色んな値をそのキャラクターに合わせて入れてやって作ることができる、自由度を持たせた作りになっていることが確認できましょう。

いま作ってるRPGはもう全部2次曲線にしちゃいましたが、今後RPGを作ることがあったら、私はとりあえずこの方法で能力値を決めるようにしてみようと思っています。