【ざくざくアクターズ】ダメージ計算式検証まとめ

はじめに

この記事はフリーゲーム「ざくざくアクターズ」の記事です。
未プレイ者はとりあえずプレイして。しろ!
プレイ時間150時間くらいでクリアできるRPGです。

はむすたブログ (livedoor.jp)
ざくざくアクターズの詳細情報 : Vector ソフトを探す!


シナリオに触れる記事ではないですが普通にキャラクターや技、敵キャラクターの話は出るので一応ネタバレ注意です。ver1.8シナリオをやり始めたくらいの人ならOKです。


経緯

ざくざくアクターズをプレイしてたら通常プレイでも普通に起きる現象として、「ダメージが0になる」現象がありますよね。
普段からツクール製ゲームに慣れ親しんでる人にとっては当たり前かもしれないんですけど、私はとっては違和感バリバリでした。
私はポケットモンスターシリーズの所謂ガチ対戦界隈出身で、その界隈ではダメージ計算専用のツールが当たり前に存在してたり、電卓で手計算したりしてました。
ポケモンのダメージ計算は基本的に乗算・除算しか絡みません。そのため、攻撃力や防御力を高めると、元の数値から何倍になったかという相対的な割合でダメージの変化割合が決まります。
ここで以下の動画を見てみます。

EX.龍宮王アリウープ Lv1 撃破 【ざくざくアクターズ】 - ニコニコ動画 (nicovideo.jp)

体力730防御力1160のジュリアが高々防御力を3~6倍程度に上げただけで、EXアリウープの5桁ダメージ連打を耐えてます。
これが本当に衝撃的でした。薄々分かってましたけど、根本的に自分の感覚とは異なる計算が行われていることがハッキリしました。

感覚を矯正しないと、キャラクターの評価(特にタンク役)を適切に判断できない可能性が高いです。
実際私は献身のイージスを「防御力1.5倍とか大ダメージが飛び交う環境では無意味に等しい」とカタログスペックで判断して、攻略中に一回も使いませんでした。逆に「防御力4倍強すぎワロタ」とインビンシブルを擦ってました。

2022年9月にざくざくアクターズがアップデートされました。
これにてこのゲームは完結という形になり、最終的な環境が提供されたことになります。
ここで各キャラクターの評価などを考えた時にこのダメージ感覚のズレは致命的なので、ようやく重い腰を上げて検証をしてみようと思った次第です。


式の仮定

まずは現状判明している仕様から、計算式の想像をしてみます。


  • 極端に攻撃力を下げるまたは防御力を上げると、ダメージは0になる。

  • 防御力をn倍した時に、ダメージが1/n倍になるとは限らない。

上記は経緯の項でも触れたように、ゲーム中でもすぐに確認できる仕様です。
これから導かれるのは、少なくとも計算式のメイン部分に加算・減算が絡んでいます。
乗算・除算メインでは既に数百~数万ダメージが出ている攻撃が0まで落ち込むとは考えにくいです。


  • 同じ攻撃、同じ敵でもダメージは一定ではない。

よくある仕様です。一般的なのはベースとなるダメージ計算結果に一定の振れ幅を持たせた乱数値(ランダムな値)をかけるやり方でしょう。


ざくざくアクターズはRPGツクールVX Ace製です。
通常攻撃デフォルトの計算式は

攻撃力×4 - 防御力×2

https://tkool.jp/products/rpgvxace/lecture/004_006d/
http://coelacanth.jp.net/rpg_maker_vx_ace_001/

になってるようです(ツクールを持ってないのでググりました)。
ダメージのランダム性を作る分散度というパラメータは20のようです。
ここまでの想定と合致するため、暫定的にこれに近い形で実装されていると仮定して検証を行い、微調整していく方針とします。


通常攻撃

攻撃力の倍率補正

とりあえず条件を変えてみて雑魚モンスターを60回殴ってみました。
以下ダメージ結果。バフや弱点属性などの諸々は無し。

①攻撃力1500,てこてこ山のオオナメクジ
※降順にソートしちゃってますが検証に影響はありません
②攻撃力500,てこてこ山のオオナメクジ
➂攻撃力1500,ドンコッコ海底のみなさん(睡眠状態)

睡眠状態は防御力が0になるとゲーム内で明言されていますので、防御力の影響を無視した値用に➂も用意しました。

てこてこ山のオオナメクジはゲーム中で初めて遭遇する敵モンスターで、防御力の影響はあまりないだろうというチョイスで選びました。
実際に値を見る限り大きな影響はなさそうです。
少なくとも防御力の倍率は数百倍というようなめちゃくちゃな値ではなさそうです。

ちょっと上下の限界値が分かりづらいですが、総じて攻撃力の4~6倍の間で推移してます。もしかしたら基準の値付近が出やすくなってるなどの確率設定はあるかもしれません。

攻撃力が3倍(②→①or➂)になると、おおよそダメージが3倍になっています。
防御力の影響を無視すると、ダメージと攻撃力は比例関係にあることが考えられます。

仮定した式に当てはめると以下になります。

(攻撃力×5)×(0.8~1.2)

「×(0.8~1.2)」の部分は分散度によるもので、VXAceのデフォルトの仕様だとこれは分散度20に相当します。想定通りですね。
実際には結果の数値だけを見ると、攻撃力の倍率6倍で振れ幅が(0.66666…~1.0)の可能性もありますが、VXAceの仕様を踏襲した方を想定します。
後ほど追加検証。


分散度の補正位置、防御力の倍率補正

次に攻撃力を少しずつ下げながら、ドンコッコ海底のインドアピラニアを殴ってみました。
結果は以下(概要だけ)。

  • 攻撃力200でダメージ60~70程度

  • 攻撃力190でダメージ15~20程度

  • 攻撃力188でダメージ6~8程度

  • 攻撃力187でダメージ2固定

まず特筆すべき点として、ダメージの振れ幅の絶対値が小さいです。
これは分散度の補正が防御力による減算の後であることを意味しています。
減算より前であれば攻撃力の4倍から6倍の振れ幅、すなわち400程度のブレになるはずです。

{(攻撃力×5) × (0.8~1.2)} - 防御力×Y ←×
{(攻撃力×5) - (防御力×Y)} × (0.8~1.2) ←○

ダメージが2固定になった現象から、分散度の補正が(0.66666…~1.0)である可能性は低くなりました。
VXAceでは戦闘中の計算結果はデフォルトだと小数点以下は四捨五入するようなので、1ダメージが出ることがそれなりにあるはずだからです(運が悪くて出なかった可能性は捨てきれないですが)。

ここで分かっている値から式を変形すると

{(攻撃力×5) - (防御力×Y)} = 2
{(187×5) - (防御力×Y)} = 2
(防御力×Y) = 933

となります。
幸運にも933を素因数分解すると(3×311)なので、防御力の倍率は3で、インドアピラニアの防御力が311であろうことが判明しました(倍率が整数でない可能性はまだ潰しきれていません)。


更に、今度は防御力を少しずつ上げながら、てこてこ山のオオナメクジの通常攻撃を食らってみました。

  • 防御力1で110~130ダメージ程度

  • 防御力31で25~35ダメージ程度

  • 防御力40で4~6ダメージ

  • 防御力41で2ダメージ固定

防御力40のパターンは分散補正の前は5ダメージであろうと想像できるため、防御力1上がる毎に3ダメージ減算されると見てよさそうです。
オオナメクジの攻撃力は25になります。


結論

通常攻撃のダメージ計算式は以下です。

{(攻撃力×5) - (防御力×3)} × (0.8~1.2)

以降は矛盾が発生するまではこの式を正として考えていきます。
通常攻撃のダメージが1~5になる攻撃力を見つければ、式に当てはめて正確な防御力を測ることが可能になりました。
ちなみにてこてこ山の雑魚モンスターは、スライムとオオナメクジが15、殺人クワガタが36でした。
通常攻撃をしてくれる敵であれば、攻撃力も測定できます。
(近接物理ブースト持ちの敵がいるのかは不明)


振り下ろす(未確定)

全てのデータを満たす計算式を思いついてません。
意見・助言・新情報を真剣に募集してます。


次に巻物スキルの検証をします。
ランク1特技書の振り下ろすをジーナで撃って検証していきます。

攻撃力の倍率補正、防御力の倍率補正

とりあえずいくつかの結果を貼ります。

①攻撃力1500,てこてこ山のオオナメクジ
②攻撃力1,てこてこ山のオオナメクジ
➂攻撃力1,てこてこ山の殺人クワガタ
④攻撃力2,てこてこ山の殺人クワガタ
⑤攻撃力1,てこてこ山のみなさん(睡眠状態)

①について、同条件の通常攻撃とほぼ同値に見えます。
ゲーム中でも巻物スキルはキャラが成長していくと意味が薄くなるという旨の説明があり、wikiにも同様の記述があります。
通常攻撃より威力が低くはなっていないことから、以下のような計算式になっている可能性が高いです。

{ n + (攻撃力×5) - (防御力×3)} × (0.8~1.2)

通常攻撃に一定のボーナスが上乗せされている形で、攻撃力が極端に上がるとボーナスが大勢に影響を与えない、というわけです。

オオナメクジと殺人クワガタの防御力の差は21です。
➂のダメージ基準値が14、②のダメージ基準値が70中盤あたりと思われるため、防御力の倍率補正は3でよさそうです。


定数項

定数項の特定のために、敵を変えて殴ってきました。

  1. 攻撃力4でヘンテ鉱山のキラーアント(防御力45)に振り下ろすを撃ち、4ダメージ

  2. 攻撃力5でサムサ村地下洞窟の謎の触手(防御力47)に振り下ろすを撃ち、4ダメージ


?????????????

明らかにこれまでの仮定と矛盾した結果が出てますが、いったん置いといて定数項を求めると、
①のパターンでは119、②のパターンでは120。
ここが変動してるのも想定外です。
また、もし120だとすると前項の⑤の結果で出ている99ダメージが矛盾してます(分散度20想定)。

もう一つの問題は、①と②の比較で、こちらの攻撃力1=敵の防御力2 となっている点です。これは攻撃力の倍率補正5、防御力の倍率補正3とした仮定と矛盾してます。


矛盾点・要検討点

  1. データから求めた定数項が一定にならない

  2. 攻撃力の倍率補正、防御力の倍率補正に関して矛盾したデータが取れる

どちらも「通常攻撃に酷似した計算式である」ことを前提としたアプローチで発生しました。

防御力の倍率補正が2.9などで、切り捨て処理が絡んでいると考えると解決する可能性はありますが、その場合正確な補正値を導くことが困難なので悩んでます。
また、それだと防御力が極端に高い敵に対して通常攻撃と差が出るので半信半疑です。



ジーナのクラッシャー・ワン(未確定)

全てのデータを満たす計算式を思いついてません。
意見・助言・新情報を真剣に募集してます。


キャラクター毎の固有スキルはスキル毎に式が違う可能性が高いですが、とりあえずジーナのクラッシャー・ワンで検証します。

レベルの倍率補正

固有スキルにはレベルによって補正がかかるらしいです(wiki談。多分どこかでゲーム中でも言及あり)。
ジーナのレベルを変えて打ってきました。
全て攻撃力は1、敵は睡眠状態の結果です。

①レベル600,ドンコッコ海底のみなさん(睡眠状態)
②レベル300,ドンコッコ海底のみなさん(睡眠状態)
➂レベル1,ドンコッコ海底のみなさん(睡眠状態)

攻撃力1で4桁ダメージが出ているため、ゲームバランスや実体験から考えてレベルによるなんらかの補正が入っているのは確定と見ていいでしょう。
①と②がおおよそ比例の関係にある点から、レベルに一定の倍率が入り加算されているとします。
値の幅から、レベルの7倍とみなします。

{(レベル×7) + (攻撃力×X) - (防御力×Y)} × (0.8~1.2)

クラッシャー・ワン暫定

また、➂の結果はいろいろと語るべきところがあるのですが次以降の項目で触れていきます。


攻撃力の倍率補正、防御力の倍率補正

次に攻撃力を調整してダメージを見ていきます。
特に触れていない場合レベル1です。
殴る対象はてこてこ山のオオナメクジ(防御力15)。

  1. 攻撃力5でダメージ0

  2. 攻撃力6でダメージ5~7程度

  3. 攻撃力7でダメージ11~15程度

  4. 攻撃力2でダメージ1固定(防御力2段階ダウン中)

  5. 攻撃力2でダメージ15~21程度(睡眠状態)

  6. 攻撃力3でダメージ7~9程度(防御力2段階ダウン中)

  7. レベル2、攻撃力1でダメージ1固定(防御力2段階ダウン中)

  8. レベル2、攻撃力1でダメージ15~21程度(睡眠状態)

攻撃力1上がる毎に、ダメージが7増えているように見えますね。
(①→②→➂が-1→6→13、④→⑥が1→8)
レベルと攻撃力の倍率が同じなのも、⑤⑥と⑦⑧の値が同じことで証明出来てそうです。

{(レベル×7) + (攻撃力×7) - (防御力×Y)} × (0.8~1.2)

クラッシャー・ワン暫定


防御力の倍率補正の話の前に、防御力ダウンについて調査します。
てこてこ山のオオナメクジ(防御力15)に対して、防御力ダウンを2段階かけ攻撃力5で通常攻撃を撃った場合、ダメージは4でした。
(50回ほど試行して3と5を引かなかったのが運の問題なのか不明。)

また、てこてこ山の殺人クワガタ(防御力36)に対して、防御力ダウンを2段階かけ攻撃力11で通常攻撃を撃った場合、ダメージは1でした。

{(攻撃力×5) - (防御力×3)} = 4
{(5×5) - (防御力×3)} = 4
防御力×3 = 21
防御力 = 7
 
{(攻撃力×5) - (防御力×3)} = 1
{(11×5) - (防御力×3)} = 1
防御力×3 = 54
防御力 = 18

通常攻撃計算式

防御力半減と見てよさそうです(wikiによると1段階で25%減)。
15の半分が7になってるので端数切り捨ての模様。

防御力7ということで上記結果の④⑤を見ると、防御力の倍率は通常攻撃と同じ3では説明がつきません。
倍率2.5付近が妥当でしょうか。

{(レベル×7) + (攻撃力×7) - (防御力×2.5)} × (0.8~1.2)

クラッシャー・ワン暫定



矛盾点・要検討点

ここまででクラッシャー・ワンの計算式の主要な要素は判明したように思えますが、実際のダメージと計算式を当てはめるとだいたい合いません。

レベルの倍率補正の項の結果➂で、レベル1攻撃力1のクラッシャー・ワンが10~14ダメージ出てます。
分散補正がかかる前は12ダメージだと思われますが、計算式では14のはずです。

いろいろ考えましたが、最も可能性が高そうなのは、実際のレベルの倍率補正や攻撃力の倍率補正は7より小さく、切り捨て処理が入ってる説です。
7+7=14ではなく、6.9(6)+6.9(6)=12というような具合に。

固有スキルは数が多いため、整数だけでは柔軟なバランス調整が取れなくなることが想定され、倍率を小数に設定している可能性は十分にあります。
振り下ろすの項でも触れましたが、倍率に小数が絡むと検証が非常に困難で、お手上げ状態になってます。

参考に、いくつか追加で取ったデータを置いておきます。

  1. ヘンテ鉱山のカマキリメイジ(防御力16)に攻撃力6で撃つとダメージ3

  2. ドンコッコ海底のインドアピラニア(防御力311)に攻撃力126で撃つとダメージ4~6(防御倍率2.5だと少なすぎで3だと多すぎ)


  • 説明は省略してますが敵に魔法防御力ダウンをかけてダメージが変化しないことは確認済みです。

  • 分散の幅が少し狭い可能性はありますが、試行回数が少ないことを考えると端のダメージは出てなくてもおかしくないかなと思ってます。


執筆予定項目のメモ

メモです。
まだ詳細な検証はしてません。

ドンコッコ海底のインドアピラニアに対してシューティングバブルを撃って、ダメージ0が出る状況で、防御力ダウンをかけるとダメージが通る現象を確認。
魔法書だが防御力も参照してる模様。

ノーフューチャーの防御力ダウンの補正次第では、もう少し検証がやりやすくなるかも(まず倍率を求めるところから)

クリティカル倍率は2.5~3ぐらいだと思うが、正確な値不明。
2ダメージのクリティカルが4と6出るのを確認、4ダメージのクリティカルが10と11と13が出るのを確認。
ツクールデフォだとクリティカル補正→分散補正らしい。
もしかしたら四捨五入処理が入る前にクリティカル補正かも。


この記事が気に入ったらサポートをしてみませんか?