RPGダメージフォーミュラの開発方法


117

私は古典的な2d RPGを開発しています(ファイナルファンタジーと同じような流れで)、誰かにダメージの式/リソース/例へのリンクを行う方法についてアドバイスがあればと思っていましたか?現在の設定について説明します。この質問でやりすぎないことを願っています。質問が大きすぎる/広すぎる場合は謝罪します

私のキャラクターの統計は以下で構成されています:

enum Stat
{
    HP = 0,
    MP = 1,
    SP = 2,
    Strength = 3,
    Vitality = 4,
    Magic = 5,
    Spirit = 6,
    Skill = 7,
    Speed = 8, //Speed/Agility are the same thing
    Agility = 8,
    Evasion = 9,
    MgEvasion = 10,
    Accuracy = 11,
    Luck = 12,
};

活力は基本的に物理的な攻撃に対する防御であり、精神は魔法による攻撃に対する防御です。

すべての統計の最大値は固定です(HPの場合は9999、MP / SPの場合は999、残りの場合は255)。能力の場合、能力+装備品などの前/後の典型的な値(レベル100)で最大値(HPの場合は99999、HP / SPの場合は9999、残りの場合は999)を増やすことができます。 SP / MPの場合は2000、その他の統計の場合は180/350

後半のゲームの敵HPは通常、数百万人未満になります(スーパーボスの最大数は1,200万人)。

私は、人々が実際に正しくスケーリングする適切なダメージフォーミュラを実際にどのように開発するのだろうと思っていましたか?たとえば、このデータに基づいて、ファイナルファンタジーXの損傷式をベースとして使用すると、非常に有望に見えました。完全なリファレンスはこちらhttp://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381ですが、簡単な例として:Str = 127、「攻撃」コマンドを使用、敵の防御= 34。

1. Physical Damage Calculation:
Step 1 ------------------------------------- [{(Stat^3 ÷ 32) + 32} x DmCon ÷16]
Step 2 ---------------------------------------- [{(127^3 ÷ 32) + 32} x 16 ÷ 16]
Step 3 -------------------------------------- [{(2048383 ÷ 32) + 32} x 16 ÷ 16]
Step 4 --------------------------------------------------- [{(64011) + 32} x 1]
Step 5 -------------------------------------------------------- [{(64043 x 1)}]
Step 6 ---------------------------------------------------- Base Damage = 64043
Step 7 ----------------------------------------- [{(Def - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------ [{(34 - 280.4)^2} ÷ 110] + 16
Step 9 ------------------------------------------------- [(-246)^2) ÷ 110] + 16
Step 10 ---------------------------------------------------- [60516 ÷ 110] + 16
Step 11 ------------------------------------------------------------ [550] + 16
Step 12 ---------------------------------------------------------- DefNum = 566
Step 13 ---------------------------------------------- [BaseDmg * DefNum ÷ 730]
Step 14 --------------------------------------------------- [64043 * 566 ÷ 730]
Step 15 ------------------------------------------------------ [36248338 ÷ 730]
Step 16 ------------------------------------------------- Base Damage 2 = 49655
Step 17 ------------ Base Damage 2 * {730 - (Def * 51 - Def^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ---------------------- 49655 * {730 - (34 * 51 - 34^2 ÷ 11) ÷ 10} ÷ 730
Step 19 ------------------------- 49655 * {730 - (1734 - 1156 ÷ 11) ÷ 10} ÷ 730
Step 20 ------------------------------- 49655 * {730 - (1734 - 105) ÷ 10} ÷ 730
Step 21 ------------------------------------- 49655 * {730 - (1629) ÷ 10} ÷ 730
Step 22 --------------------------------------------- 49655 * {730 - 162} ÷ 730
Step 23 ----------------------------------------------------- 49655 * 568 ÷ 730
Step 24 -------------------------------------------------- Final Damage = 38635

仕切りを変更して、武器の攻撃評価と鎧の鎧評価を含めるようにしました。

魔法ダメージは次のように計算されます:Mag = 255、Ultimaが使用され、敵MDef = 1

Step 1 ----------------------------------- [DmCon * ([Stat^2 ÷ 6] + DmCon) ÷ 4]
Step 2 ------------------------------------------ [70 * ([255^2 ÷ 6] + 70) ÷ 4]
Step 3 ------------------------------------------ [70 * ([65025 ÷ 6] + 70) ÷ 4]
Step 4 ------------------------------------------------ [70 * (10837 + 70) ÷ 4]
Step 5 ----------------------------------------------------- [70 * (10907) ÷ 4]
Step 6 ------------------------------------ Base Damage = 190872 [cut to 99999]
Step 7 ---------------------------------------- [{(MDef - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------- [{(1 - 280.4)^2} ÷ 110] + 16
Step 9 ---------------------------------------------- [{(-279.4)^2} ÷ 110] + 16
Step 10 -------------------------------------------------- [(78064) ÷ 110] + 16
Step 11 ------------------------------------------------------------ [709] + 16
Step 12 --------------------------------------------------------- MDefNum = 725
Step 13 --------------------------------------------- [BaseDmg * MDefNum ÷ 730]
Step 14 --------------------------------------------------- [99999 * 725 ÷ 730]
Step 15 ------------------------------------------------- Base Damage 2 = 99314
Step 16 ---------- Base Damage 2 * {730 - (MDef * 51 - MDef^2 ÷ 11) ÷ 10} ÷ 730
Step 17 ------------------------ 99314 * {730 - (1 * 51 - 1^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ------------------------------ 99314 * {730 - (51 - 1 ÷ 11) ÷ 10} ÷ 730
Step 19 --------------------------------------- 99314 * {730 - (49) ÷ 10} ÷ 730
Step 20 ----------------------------------------------------- 99314 * 725 ÷ 730
Step 21 -------------------------------------------------- Final Damage = 98633

問題は、統計値が255を超えると、式が完全にバラバラになることです。特に、300を超える防御値は、非常に奇妙な動作を生成し始めます。たとえば、高強度+防御の統計は、大きな負の値につながります。ユースケースに合わせて式が正しく機能するように変更できるかもしれませんが、まったく新しい式を使用する方が簡単でしょう。人々は実際にどのようにダメージフォーミュラを開発していますか?私はExcelを開き、その方法で数式を構築しようと考えていました(たとえば、攻撃統計と防衛統計をマッピングする)が、もっと簡単な方法があるかどうか疑問に思っていましたか?ここで私のゲームの完全なゲームの仕組みを伝えることはできませんが、誰かがダメージ公式を構築するための良い出発点を提案できるでしょうか?

ありがとう


1
どんな種類の統計、HPなどを望むかを最初に設定する際に正しいことをしたと思います。これはプレイヤーエクスペリエンスの一部であり、計算はこれらの値の「周り」に収まる必要があります。しかし非常に多くの統計では、直感的に最初の大きな問題は、元PhDefを守るために(統計が攻撃に対応し、どのような統計は、これらの統計情報を防御するものであるのでなど彼の魔法のような、物理的な攻撃に影響するかを統計知っておくべきプレイヤーのみに対してPhAtk)。
ジョナサンコネル

大きなことはバランスです。おそらく、統計を変更し、どのような結果が得られるかを確認できる対話型プログラム(C#など)を作成することをお勧めします。実行時に式を変更できる場合は、それも役立ちます:)
ジョナサンコネル

4
これを行うには、Excelの使用を検討してください。タスクに適しているようで、コードを記述する必要はありません。
アレックスSchearer

2
最も重要な質問は次のとおりです。どの式がプレイヤーに最も楽しいを与えるか?(ページで「楽しい」を検索しましたが、言及された答えはありません:P)ステータスやダメージが上がるとプレイヤーは鈍感になり、ゆっくりと上がると退屈します。プレイヤーはレベルを上げると幸せを感じる必要があります。そのため、レベルを上げたように感じ、ゲームのパフォーマンスに顕著な影響を与えるように感じる必要があります。(それは私の2ペンスです)
アナン

3
「(Def-280.4)^ 2」ですか?まあ、Def> 255またはDef> 300ではなく、Def> 280.4の場合はほぼ間違いなく奇妙になります;)その後、defが高くなると、式のこの時点でdefが低くなりますが、他の時点で予想される。ところで、Wolfram Alphaを使ってこのようなものをプロットすることができます。2つだけを保持するように十分な変数を修正すると、素敵な表面プロットが得られます。
クリスチャン14年

回答:


140

このような数式を作成するには、初等数学関数の知識が必要です。これは、代数および事前計算クラスで学んだことです。

それらを習得したら、自分に問いかけます(「価値」を「損害」、「健康」、「速度」などに置き換えます)

それから、気分が良くなるまで微調整(ものの追加/乗算、ベース値の変更など)します。グラフ電卓は、パラメーターの変更が機能にどのように影響するかを視覚化するのに役立ちます。


ところで、あなたが経験している問題は整数オーバーフローによるものです。

作業している数値を保持するのに十分な大きさの変数タイプを使用します。サイズはC ++のプラットフォームによって異なりますが、32ビットVisual Studioコンパイラを使用する場合unsigned intは32ビットで、unsigned __int64 MS固有の場合は64ビットです。の使用も検討してくださいdouble

さらに、最初にそのような大きな数に遭遇しないように、操作を再編成してみてください(たとえばMDef * MDef / 110、do ではなく(int)((float)MDef / 110 * MDef)


3
整数オーバーフローが発生している場合、整数部分の24ビットのみを確実にサポートするfloatへの変換には、異なる精度の問題が発生します。

@ジョー:編集内容をロールバックしました。Visual Studio 2008以前では利用できないため、私が特に選ん__int64だのは、彼がすでにいる以上に貧しい少年を混乱させたくなかったからです。uint64_tstdint.h
BlueRaja-ダニーPflughoeft

1
@BlueRaja:質問者がVisual Studioを使用している証拠は見当たらず、他のすべての標準ツールチェーン(Visual Studio 2010を含む)に存在しています。

同様に、重要なバリアントを1つ省略しました:ダメージに上限を設定できますが、上限に近づけることはできますが、決して到達できない場合は、シグモイド関数を使用できます。
マーティンソイカ

1
user127817:本当に重要なのは、関数がどのように成長するかです。残りについては、バランスがとれるまでテストしてください。キャラクターの力が強すぎると感じたら、ダメージを減らします。特定のボスや敵を殺すのに時間がかかりすぎると感じたら、その敵のヘルスやアーマーを下げてください。等々。
BlueRaja-ダニーPflughoeft

31

私のキャラクターの統計は以下で構成されています:

あなたの本当の問題があります:それらの統計が実際に意味するものを定義する前に、統計定義しました。馬の前にカートを置いています。

D&D(卓上)の仕組みをご覧ください。「強度」はそれ自体では何も意味しません。「近接攻撃に強度ボーナスを追加する」というルールがあるため、それは何かを意味するだけです。このルールは、D&Dの戦闘ルールの一部です。戦闘ルールがなければ、「強さ」は一般に無意味な量です。

あなたが自問する必要がある最初の質問はこれです:キャラクター間でどれくらいの差別化が必要ですか?繰り返しますが、D&Dを見てください。そこには、6つの基本的な統計があります。これらの統計は、キャラクターのプレイのさまざまな次元を定義します。器用さの高いキャラクターには、器用さの低いキャラクターとは異なるオプションがあります。

しかし、その違いでさえ理由はすべてルールに戻っています。高い器用さは、遠隔攻撃に対するボーナスを意味します。遠隔攻撃でより頻繁に攻撃できます。そのため、StrengthとDexterityの間には、遠距離戦と近接戦という2つの次元の遊びがあります。

インテリジェンスとウィズダムもペアリングのようなものを形成しますが、これらは特定のクラスとより相互作用します。Intは、ウィザードやその他の秘術の呪文使いをより良くします(またはいくつかのルールセットの下で可能になります)。神の呪文と秘儀の呪文は異なる呪文リストを持っているため、これらの2つの統計はプレイの異なる次元に関係しています。

成長の進行関数などを定義する前に、統計に関する基本的なルールを定義する必要があります。詳細は必要ありません。「近接攻撃がヒットしたかどうかを判断するために、各強度ポイントがランダムロールに追加される」と言う必要はありません。必要なのは、「器用さが遠隔攻撃者を良くする」などのメタルールです。後でどのように改善されるかを正確に把握できます。

キャラクターを進化させるにはさまざまな方法があります。一般的な昔ながらのファイナルファンタジーのトリックは、ダメージ計算の一部としてキャラクターのレベルを単純に使用することでした。これは、単純にレベルに適切な統計を掛けること、または機能をキャラクターのレベルに適用することを意味します。キャラクターのダメージの割合がレベルごとに増加するように、二次的な進行と言います。

戦闘機能を機能させるには、進行を考慮する必要があります。関数には、進行のためのフックが必要です。

D&Dには面白い方法があります。部分クラスベースです。レベルを上げるたびに、キャラクタークラスに基づいて、新しいクラスの機能とヒットのフラットボーナスが得られます。ただし、一部のクラス機能はそれ自体で改善されました。D&Dのスペルには、進行が組み込まれています。呪文は、最初の呪文使いの2レベルごとに1d4のダメージを与える可能性があります。したがって、他のすべてのウィザードレベルは、そのスペルを改善します。

D&Dは、アイテムベースの進行も多用しました。第4版まで、アイテムベースの進行は主にキャラクターとの戦いでしたが、古いエディションでも、呪文の使い手はステータスバフやその他の調整を与える(またはフラットアウトにスペルを与える)アイテムを持っていました。

そのため、アイテムは戦闘機能を考慮する必要があるもう1つのものです。アイテムは装備中に1つ以上のステータスをバフしますか、それとも他のこともしますか?D&Dは少し奇妙で、統計値はめったに変更されませんでした。武器は単純にXdYダメージを与え、おそらくあなたのステータスの1つに基づいたボーナスがありました。それがそれでした。したがって、戦闘でより多くのダメージを与える唯一の方法は、より良い武器を見つけることでした。多くのビデオゲームRPGでは、武器に加えてレベルが考慮されます。


6
あなたの本当の問題があります:それらの統計が実際に意味するものを定義する前に統計を定義しました。あなたは馬の前にカートを置いています。」私は強く反対します。それ自体の数字は、プレイヤーに自分の力などを知らせるための手段にすぎません。これゲームデザインの一部です。逆方向に進むと、147 hpのエンドボスになってしまう可能性があります。
ジョナサンコネル

8
まあ、(Baldurs門中)Sarevokは135 HP ...持っていた
マーティンSojka

12
@ 3nixios:エンドボスに147Hpがある場合、何が問題になりますか?重要なのは、最後のボスが挑戦的で、面白く、何よりも敗北に報いるかどうかです。多くのHPを持つボスは面白くありません。時間の無駄です。その刻々と変化する特殊な戦術を必要とするあなたのパーティー、との混乱をできる上司は、それはあなたがその最大の潜在的に持っているすべての機能を使用するためにしなければならないことを必要とし、それは偉大な最後のボスのために作るものです。面白い147Hpボスを、Hpの退屈なブロックにいつでも連れて行きます。
ニコルボーラス

@Nicol Bolas私はあなたに完全に同意します、私は出発点が統計からでなければならないと信じる理由をサポートしようとしていました。プレイヤーが開始する統計は、プレイヤーがゲーム中にプレイする主な指標とゲームプレイです。ボス用の巨大なHPバーは必要ではないことに同意します。これにより、プレイヤーはボスに対する最適なセットアップ、どのステータス武器などがより効果的であるかをより適切に示すことができます。もちろん、最終的な計算を定数cで除算または乗算して実行することができるので、計算量は計算方法とは無関係です。
ジョナサンコネル

2
@ 3nixios:しかし、それは私のポイントの一部です。D&Dの器用さは、近接スペシャリストキャラクターと遠隔スペシャリストの区別を可能にするために存在します。近接攻撃や遠隔攻撃の概念がなかった場合(そして、例えば多くのFFゲームではありません)、この区別は存在する必要はありません。6の代わりに5つの統計を取得できます。Hp範囲を定義することは1つのことですが、あなたが持っている基本的な統計を定義することは別です。統計には、意味を理解する前にルールが必要であり、その統計を持つことは良い考えだと言う前に、統計の意図を知っておく必要があります。
ニコルボラス

22

数式はかなり複雑に見えます。プロのRPG開発者がこれをどのように処理するかはわかりませんが、シンプルさを重視することをお勧めします。使用したい統計情報の範囲がまだ組み込まれている、可能な限り簡単な数式を見つけてください。たとえば、計算中にダメージを修正するのではなく、ダメージ計算の前に統計を相互に修正できますか?数式が決まったら、可能な範囲の値についてグラフを作成して、プレイヤーがレベルアップしたときの動作を確認します。明らかにあなたが持っている変数が少ないほど、これはより実現可能です。

さらに、BlueRajaは、高い統計レベルで予期しない値が表示される理由について重要な説明を提供しました。符号なしの型を使用し、オーバーフローをチェックすることが重要です。


10
シンプルな場合は+1。誰でも厳密に複雑なものを作ることができますが、それは良いゲームにはなりません。
aaaaaaaaaaaa

8
@Randolfは、Apple 2などで実行している場合を除いて、ここで乗算または除算を削除すると、測定可能な方法でパフォーマンスに影響を与えることは非常に疑わしいです。
テトラッド

8
@Randolf RPGでの大きな戦いは、毎秒10のダメージ計算のようなものを意味するかもしれません。現代のCPUは毎秒数十億の操作を行うことができます。そのような「目に見える」数学のパフォーマンスへの影響は無視できると想定できます。この場合の単純なのは、コンピューターではなく、設計者とゲームをプレイする人のためです。
aaaaaaaaaaaa

6
@Randolf Richardson:この場合、ターゲットが少し欠けているかもしれません。MMOの場合、優れた高速無脂肪プロトコルが最重要であり、物理学などの重いタスクはパフォーマンスを考慮して設計する必要があります。しかし、ダメージの計算はゲームプレイの中核であり、ゲームプレイを考慮して設計する必要があります。パフォーマンスの懸念をそのような質問に持ち込んだ場合、ゲームプレイの部分を損なう危険があります。重要な場合はパフォーマンスについて話します。これは最適化する重要な領域であるという印象を与え、実際のパフォーマンスの罪人から注意を奪います。
aaaaaaaaaaaa

5
@ランドルフ:私は何も意味しない。ボトルネックではない何かを最適化することは時間の無駄だと言っています。
ニコルボーラス

11

後半のゲームの敵HPは通常、数百万人未満になります(スーパーボスの最大数は1,200万人)。

これには問題があります。プレイヤーが処理できると思うものを中心にボスを構築する必要があります。ボスをどのようにしたいのかを中心に、プレイヤーと戦闘フォーミュラを構築しています。

戦闘の仕組みと役割を構築したら、プレイヤーが与える/吸収できるダメージと、ボスが与える/吸収できるダメージのバランスが取れるように、ボスをどのように設計するかを決定できます。


4
+1敵の体力は、プレイヤーがその時点で合理的に処理できるものに基づいている必要があり、逆ではありません。
BlueRaja-ダニーPflughoeft 14

7

あなたが引用したこれらの数値は、数千回の実行でシミュレーションを微調整した結果である可能性があります。

そのため、レベル20のキャラクターを作成するシミュレーションを作成し、その時点で戦うはずの敵タイプに対して200戦程度戦う様子を見てください。レベル30キャラクター(おそらく世界の次のセクション)でもう一度やります。

正しくなるにはしばらく時間がかかりますが、自動シミュレーションを作成すると、推測して手動で再生するよりも間違いなく簡単になります。


5

適切な設計を考慮せずに数式を作成したいという間違いを犯したと思います。

最初に設計から始めてから、式で設計を表すことについて考え始めます。設計が明確であればあるほど、単純な式や正確な式を見つけやすくなります。

敵の「タイプ」を実装してみてください。例えば、「装甲」=>物理的なタイプのプレイヤーの攻撃は50%減少します。バトルフローを抽象化しないで、関連性のあるものとそうでないものについて考えてください。

「装甲敵」が魔法には弱いが物理的なダメージには強いというデザインの場合は、コードでそれを表してください。ただし、コードを最初に記述するときに値が魔法のように機能しないため、多くのテストを行っていることを忘れないでください。設計を作成し、ロジックをコードに入れて、これが意図したものの技術的表現であるかどうか、またそれが変更されるまで値を変更しないかどうかを常に確認してください。


私はすでにそのようなことを包含していました-鎧の格付けは、攻撃が鎧貫通としてフラグを立てられるか、%ベースのダメージ式を使用しない限り、物理的な攻撃ダメージを
縮小します-user127817

5

私の設計はスプレッドシートフェーズを終了していませんが、RPGの数学の設計に関する1つの結論に達しました。

できるだけシンプルにしてください。私が取り組んでいる設計では、セミクラスレスシステムに適した非常に単純な式を使用しました。すなわち。ファイアボールスペルのダメージは30です。フォーラムの内容は次のとおりです。

BaseSpellDamage * Attribute (5 * 6)

次のような修飾子を追加することもできます。

Result = (BaseSpellDamage * Attribute) (5*6)
Result = Result + (Result * 50%) (30 = 30 + (30 * 50%))

最終結果は45ダメージになります。precentage乗数の使用は非常に簡単で、非常にスケーラブルなソリューションであることがわかりました。必要な結果を得るために、複雑な数学を使用した奇数を入力する代わりに。

これで、損傷耐性を計算できます。これは、設定された種類の損傷に対する防御を計算するだけです。2つのアプローチがあり、私は正直にどちらがより適しているかを決めていませんが、どちらもシンプルで実行可能です:

DamageResult = Resistance * Damage ( 50% * 45)

そのため、最終結果は22の損害を被ることになります(部分的な結果を削減しました)。

その他の式:

DamageResult = Damage - Resistnace (45 - 22).

したがって、最終結果は23になります。抵抗が受けるダメージよりも大きい場合、キャラクターはダメージを受けません。もちろん、必要な場合を除いて、そのような状況に場所がないことを確認するのはあなた次第です。

割合のスケーリングは、バランスとスケーリングがいくぶん簡単であることを認めなければなりませんが。ただし、これはベース番号にも依存します。パーセンテージスケーリングは、100以上から開始すると最適に機能します。少数(正直なところ100未満)を操作している場合、浮動小数点の結果が得られるので気が狂う可能性があります。

その場合のおそらく最適な解決策は、両方のアプローチが適合すると判断したときに両方のアプローチを使用することです。または、あなたが大きな数字のファンなら1000から始めます。

そして、終わりに。私は自分でこの結論に完全には達していません。私は実際にさまざまなRPGマニュアル(Hero、DnD)を読むのにかなりの時間を費やしました。特にDnDは類似の原理で動作するため役立ちましたが、式のレベルを使用する属性の代わりに、より複雑になる場合があります。ここで紹介したものよりも。

いずれにせよ、最善のアドバイスは、できるだけシンプルに保つことです。高度な数学や長い方程式を使用しないでください。87234のその他の問題を同時に処理する必要がある場合、エラーが発生しやすく、見つけにくいためです。


3

他の人が述べたように、ファイナルファンタジーXの式はかなり複雑です。一般に、そのシリーズでは、ゲームが遅くなるほど、式が複雑になります。他のゲームに完全に基づいてダメージ式を作成する方がおそらく簡単です。しかし、一般的に、私は非常に一般的なレベルから、あなたが世界で見つけることができるダメージの公式の種類と、それらに基づいてゲームを作る方法を議論する価値があると思います。最初に決定する必要があるのは、ゲームの終了時にどの程度のダメージを与えたいか、そしてプレイヤーにどのようなステータスを持たせたいかです。それができたら、フォーミュラシステムを選択し、フォーミュラと武器の値を最適化して、それらの範囲を長期的に反映させることができます。

純粋に統計ベース

キャラクターがどのレベルの敵に挑戦できるかに関して柔軟にしたい場合、これは良い考えです。このような式は、プレイヤーのステータス、装備、および敵のステータスにのみ依存します。これらの式は通常かなり単純です。ファイナルファンタジーレジェンドII(http://www.shenafu.com/ffl2/weapon.phpを参照してください。たとえば、単純な式に基づいてダメージを与える武器があります。

(Stat+StatBonus)*WeaponStrength - Defense*4

このような式は、ダメージを推定する非常に簡単な方法、またはスキルや要素の弱さなどの他の要因に基づいてダメージを変更するための迅速なジャンプポイントが必要な場合に適しています。

この種の式が実際にどれだけ広く適用できるかを示すために、AndroidおよびIOSゲームであるInflation RPGのダメージ式を検討してください(http://inflation-rpg.wikia.com/wiki/Calculationsを参照)。この式は、ステータスと機器に大きく依存します。各装備には2つの統計があります-ATK統計へのボーナスと乗数。機器の中には乗数が低いが、ボーナスが高いものもあれば、ボーナスが低いが乗数が高いものもあります。ATKが10個しかないキャラクターの場合、バトルアックスは5000 ATKボーナスですが、145%の低い乗数が最適です。合計ダメージは(10+5000)*1.45 = 7264ですが、ボーナスが0で乗数が300%のEstocは選択肢として不適切です-ダメージは(10+0)*3 = 30です。ゲームの後半では、攻撃が5000のキャラクターは武器の切り替えを好みます。

統計およびレベルベース:

この良い例は、ファイナルファンタジーV、VI、およびファイナルファンタジーXIIです(たとえば、http: //www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900を参照)。FFXIIの剣の公式は次のとおりです。

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+STR)/256]

そして、譜表の損傷式は次のとおりです。

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+MAG)/256]

これらは非常に似ていますが、剣の式は強さとレベルにのみ依存し、スタッフの式は強さ、魔法、レベルに依存することに注意してください。この種のフォーミュラの利点は、プレイヤーが成長の2つの手段-ステータスを構築するか、レベルを構築できることです。欠点は、どちらの方法でもキャラクターにペナルティを科すことです。これが本当にやることは、プレイヤーがレベルを上げてダメージ出力を増やすことです(FFXIIでは、ステータスゲインを考慮するとレベル50の周りでレベルごとにダメージ出力が約4%増加します)快適レベル。

固定ダメージ:

固定ダメージの計算式は、キャラクターのステータスやレベルに依存せず、武器自体の内部ダメージの計算式のみに依存します。それらは範囲内で変化する可能性がありますが、ユーザーに関係なく同じダメージを与えます(他の特殊効果やキャラクター特性を除きます)。武器が固定ダメージを与える場合、武器を装備する能力がステータスとレベルのいずれか、または両方に依存する場合に最適です。たとえば、Diablo 2は、ダイスロールに依存する武器を持つ多くのローグライクが行うように、これを行います。とはいえ、「固定ダメージ」は「非ランダム」を意味するものではありません。実際、通常、行われたダメージにはランダム性の要素があります。

これは、キャラクター間で簡単に移動できる武器を持ちたい場合や、ドロップテーブル、チェストを介してアクセスできる装備がわかっている場合に、ゲーム内の特定のポイントのキャラクターができるダメージ出力を慎重に制御したい場合に適した方法です、およびテーブルを盗みます)。

これに出くわす別の場所は、ファイナルファンタジーの特定のタイプの機器またはアイテムです。たとえば、1000本の針は常に1000のダメージを与えます。ファイナルファンタジーレジェンドIIでは、格闘技は次の式に基づいてダメージを与えます。

Damage = WeaponStrength*(90-UsesLeft) - 4*Defense

ファイナルファンタジーXIIは、銃のダメージもいくらか修正されており、次の公式に従ってダメージを与えます。

DMG = [ATK x RANDOM(1~1.125)]^2

ダメージはいくぶんランダムですが、全体の範囲で26.5%しか変化しないため、一定期間平均して一定レベルのダメージを与えることが保証されています。これらのタイプの攻撃は、通常、ダメージを与える要因を考慮しているゲームで低いステータスと低いレベルの両方を持つキャラクターに役立ちます。さらに、ターゲットの防御を無視します(ただし、必要に応じて、防御に合うように式を簡単に作り直すことができます)。


2

ファイナルファンタジーシリーズのすべてのゲームは、発生している問題のために、255のステータスキャップがあります。レベル100の統計は255です。

あなたは能力と装備で統計を増やすことについて言い、ゲームでこれを見たことを覚えていますが、これは式で行われます。能力と装備の修正をチェックし、統計が使用された後にそれらを適用する追加のステップがあります。

あなたの場合、それはステップ21:能力変更子を適用しますステップ22:装備変更子を適用しますステップ23:最終ダメージ。

ファイナルファンタジーのフォーミュラにグーグルに興味があるなら、彼らはそこにいます。ファイナルファンタジー4、6、7、9のAIを含む実際の戦闘機構のコピーがあります。エミュレーター用のROMを作成していたときに、元のゲームから人々がそれらをクラックしました。あなたが十分に一見するかどうかを見つけるのは難しいことはありません。

数式を作成するための最大のことはテストです。両方の側でaiを使用して戦闘を実行し、数百の戦闘を実行するスクリプトを設定します。モンスターとステータスを変えて、それが機能するかどうか、またはLV 40がすべてを殺すかどうかを確認してください、ボスが実際に笑を殺すことは完全に不可能です。ヒントは、誰も見ていないときにAIがどれほど速く戦えるかが印象的であるため、すべてのアニメーションをオフにすることです。


2

私は、人々が実際に正しくスケーリングする適切なダメージフォーミュラを実際にどのように開発するのだろうと思っていましたか?

最初の2つのことは:

  • 「正しく」とはどういう意味かを決めてください-「正しいダメージ」についてはどう思いますか?
  • 「スケール」で何を意味するかを決定します-どの値が変更されるのか、そしてそれらの変更にどのような影響を与えたいのですか?

それを知ったら、BlueRajaが彼の答えで言及し数式を使用するのに十分な情報があります。「適切な」ダメージの公式というものは存在しないことを覚えておいてください-プレイヤーが望む経験のタイプに合わせて設計に一致するものだけです。


これは非常に役に立たないコメントです。要約すると「わからない」ということであり、そのため全員の時間の無駄です。削除のフラグ。
クリシック

1

別の方法として、非常に単純な式を探している場合は、次の手順を実行します。

(これは式の私の考えであることに注意してください)

まず、単純な攻撃式では、必要な統計情報はわずかです。プレイヤーの攻撃ステータス(これは、移動のタイプに応じて、筋力、または魔法になります。)

次に、MovePowerという変数を作成します。これは動きに依存し、より良い動きはより良いMovePowerを持ちます。私の式では、一般的な「攻撃」コマンドのMovePowerは5です。

次に、防御をパーセントベースの統計にします(そしてもちろん、ダメージに対して100%の防御を達成することは不可能にします)

次に、攻撃フェーズ中に、攻撃力に移動力を掛け、敵の防御に基づいてダメージを除去するだけです!シンプル!

また、移動がヒットする場合(精度)、移動に別の効果(バイオ、毒を与える)がある場合など、他のモディファイヤを選択することもできます。統計を変える動き、電気ショック療法。それを楽しんでください!


パーセンタイルの問題として鎧を回避する別のオプション(したがって、その値を同じに見えるようにする)は、乗数になる比較としてダメージと鎧を計算することです。ベースとしてのLn(atk / def)のようなもの。これにより、同じように時間が経過するにつれて、防御装甲の統計情報を拡大できます。ダメージとアーマーの統計値が同じで、そこから外挿する場合の基本的な望ましいダメージ範囲を取得する方法を見つけてください。これにより、「装甲回避」攻撃を作成するためのトリックが必要になりますが、それは創造性の目的の一部です。
Aviose

1

本質的に、2つのことを理解する必要があります。

  1. 大量の計算を適切に実行する方法。
  2. 弱点と強敵に対する攻撃ダメージの振る舞い方と期待する方法。

1

ユーザーdoubleまたは多数のライブラリを使用できます。大きな数で計算を行う(クリック/アイドルゲームのように、多くの場合、そのような大きな数のライブラリに依存します)。あなたの場合、数値は比較的小さいため、64ビット浮動小数点を使用すると必要な柔軟性が得られます。

2

ゲームをどのように動作させたいですか?いくつかの例:

  • 1つのアプローチはATK、武器に応じて既知のダメージレーティングでヒットしたかどうかを判断し、ダイスを振る方法です。たとえば、長い剣1d8、両手剣1d10、短剣1d4などです。馬力がどんどん大きくなっていくと、これは驚くほどうまくスケールしません。ATKキャラクターがヒットするかミスするかを判断するために使用する場合、ヒットの成功後にATK* 80%で別のスローを行い、クリティカルを判断できます。
  • ダメージ式を使用する場合、ダメージ式(ATK - DEF) +/- 20%はWorld's End(RPG戦略ゲーム)で行われるのと同じくらい簡単です。これは、強い相手への攻撃DEFはまったくダメージを与えられないことを意味します。instaceのためにATK = 10ENEMY DEF = 12(ATK - DEF) = -2それはまた少し低いDEF対その高い攻撃を意味し、潜在的に増加HPとの長い戦いを作り、少しダメージを行うことができます。と例えばATK = 1010ENEMY DEF = 1005損傷があれば被害は今も飛躍的に増加します。5.だろうATK小さな割合で増加しています。たとえばATK = 1055ATK値がわずか5%増加するだけで、ダメージが900%増加します。
  • これを回避するには、「増加」または「増加」のATK / DEF * WEAPON_DAMAGEときにこれを徐々にスケーリングし、弱い攻撃者が強いクリーチャーにダメージを与えるようにすることができます。ATKDEFDEF

tl; dr数字を責任を持って扱い、さまざまな状況でゲームがどのように動作するかを把握する必要があります。自問する質問:

  1. そのボス/ミニオンを倒すには何回攻撃(ターン)する必要がありますか?
  2. さまざまなスキル、バフ、デバフがx戦闘にどのように影響しますか?それは絶望的である必要y%がありますか、勝つ可能性は低い/高い可能性がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.