Wie entwickelt man RPG Damage Formulas?


117

Ich entwickle ein klassisches 2D-Rollenspiel (ähnlich wie in Final Fantasy) und habe mich gefragt, ob jemand Ratschläge dazu hat, wie man Schadensformeln / Links zu Ressourcen / Beispielen erstellt. Ich erkläre mein aktuelles Setup. Hoffentlich übertreibe ich es mit dieser Frage nicht und entschuldige mich, wenn meine Fragen zu groß sind

Meine Charakterstatistiken setzen sich wie folgt zusammen:

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,
};

Vitalität ist im Grunde eine Verteidigung gegen physische Angriffe und Geist eine Verteidigung gegen magische Angriffe.

Alle Statistiken haben feste Höchstwerte (9999 für HP, 999 für MP / SP und 255 für den Rest). Mit Fähigkeiten können die Maximalwerte erhöht werden (99999 für HP, 9999 für HP / SP, 999 für den Rest), wobei typische Werte (auf Stufe 100) vor / nach Fähigkeiten + Ausrüstung + usw. 8000 / 20.000 für HP, 800 / 2000 für SP / MP, 180/350 für andere Statistiken

Late Game Enemy HP wird in der Regel in den unteren Millionen liegen (wobei ein Super-Boss das Maximum von ~ 12 Millionen hat).

Ich habe mich gefragt, wie Menschen tatsächlich die richtigen Schadensformeln entwickeln, die richtig skaliert werden? Basierend auf diesen Daten sah es beispielsweise vielversprechend aus, die Schadensformeln für Final Fantasy X als Grundlage zu verwenden. Eine vollständige Referenz finden Sie hier http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381, aber als kurzes Beispiel: Str = 127, Befehl 'Attack' verwendet, feindlicher Def = 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

Ich habe einfach die Teiler geändert, um die Angriffswertung von Waffen und die Rüstungswertung von Rüstungen einzuschließen.

Der magische Schaden wird wie folgt berechnet: Mag = 255, Ultima wird verwendet, feindliches 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

Das Problem ist, dass die Formeln vollständig auseinanderfallen, sobald die Werte über 255 steigen. Insbesondere Verteidigungswerte über 300 führen zu merkwürdigem Verhalten. Werte für "Hohe Stärke + Verteidigung" führen beispielsweise zu massiven negativen Werten. Während ich möglicherweise in der Lage bin, die Formeln so zu ändern, dass sie für meinen Anwendungsfall korrekt funktionieren, ist es wahrscheinlich einfacher, nur eine völlig neue Formel zu verwenden. Wie entwickeln Menschen tatsächlich Schadensformeln? Ich überlegte, Excel zu öffnen und zu versuchen, die Formel so zu erstellen (z. B. Attack Stats vs. Defense Stats), aber ich fragte mich, ob es einen einfacheren Weg gibt. Obwohl ich hier nicht die vollständige Spielmechanik meines Spiels vermitteln kann, könnte jemand einen guten Ausgangspunkt für die Erstellung einer Schadensformel vorschlagen?

Vielen Dank


1
Ich denke, Sie haben das Richtige getan, als Sie zuerst festgelegt haben, welche Art von Statistiken, HP usw. Sie möchten. Dies ist ein Teil der Spielerfahrung und die Mathematik sollte 'um' diese Werte passen. Bei so vielen Statistiken sollte der Spieler intuitiv wissen, welche Statistiken seine magischen, physischen Angriffe usw. beeinflussen. Die erste große Frage ist also, welche Statistiken einem Angriff entsprechen und welche Statistiken sich gegen diese Statistiken verteidigen (zum Beispiel verteidigt PhDef nur gegen PhAtk).
Jonathan Connell

Das große Problem ist die Ausgewogenheit. Es ist wahrscheinlich eine gute Idee, ein interaktives Programm (etwa in C # oder etwas Schnellem) zu erstellen, in dem Sie Statistiken ändern und sehen können, welche Ergebnisse Sie erzielen. Wenn Sie die Formeln zur Laufzeit ändern können, würde das auch helfen :)
Jonathan Connell

4
Verwenden Sie hierfür möglicherweise Excel. Scheint für die Aufgabe gut geeignet zu sein und Sie müssten keine Codezeile schreiben.
Alex Schearer

2
Die wichtigste Frage ist: Welche Formel macht den Spielern am meisten Spaß ? (suchte auf der Seite nach "Spaß" und fand keine der genannten Antworten: P) Wenn die Werte oder der Schaden zu schnell ansteigen, werden die Spieler unempfindlich, wenn sie zu langsam ansteigen, langweilen sie sich. Die Spieler müssen sich glücklich fühlen, wenn sie ein Level erreichen. Sie müssen sich also so fühlen, als würden sie Arbeit darin stecken und auch, dass dies einen spürbaren Einfluss auf ihre Spielleistung hat. (Das ist meine 2 Pence)
Annan

3
"(Def - 280.4) ^ 2" huh? Nun, ich würde erwarten, dass die Dinge nicht für Def> 255 oder Def> 300 seltsam werden, sondern ziemlich genau für Def> 280.4;) Danach bedeutet ein höherer Def effektiv einen niedrigeren Def an diesem Punkt der Formel, während man sich weiterhin so verhält an anderen Stellen zu erwarten. Übrigens, Sie können dieses Zeug einfach mit Wolfram Alpha oder so plotten. Wenn Sie genügend Variablen festlegen, um nur zwei zu behalten, erhalten Sie ein schönes Flächendiagramm.
Christian

Antworten:


140

Das Erstellen solcher Formeln erfordert Kenntnisse elementarer mathematischer Funktionen - die Dinge, die Sie in der Algebra- und Vorkalkülklasse gelernt haben.

Sobald Sie diese beherrschen, fragen Sie sich einfach (ersetzen Sie "Wert" durch "Schaden" oder "Gesundheit" oder "Geschwindigkeit" oder was auch immer) :

  • Möchten Sie, dass der Wert mit einer konstanten Geschwindigkeit wächst? Verwenden Sie eine lineare Funktion .
  • Möchten Sie, dass der Wert zuerst langsam, später aber schnell wächst? Verwenden Sie eine Polynom- oder Exponentialfunktion .
  • Möchten Sie, dass der Wert zuerst schnell wächst und später verlangsamt wird? Verwenden Sie eine n-te Wurzel oder eine logarithmische Funktion .
  • Möchten Sie, dass der Wert am Anfang / Ende langsam, aber in der Mitte schnell wächst? Oder möchten Sie, dass es schnell wächst und trotzdem eine Obergrenze hat? Verwenden Sie eine Sigmoidkurve wie atan oder die logistische Funktion .
  • Möchten Sie, dass der Wert schwingt? Benutze eine Sünde oder eine andere Welle.

Dann passen Sie es einfach an (Addieren / Multiplizieren, Ändern des Basiswerts usw.), bis es sich richtig anfühlt. Mithilfe eines Grafikrechners können Sie visualisieren, wie sich Änderungen an den Parametern auf die Funktion auswirken.


Übrigens sind die Probleme, die auftreten, auf Ganzzahlüberläufe zurückzuführen .

Verwenden Sie Variablentypen, die groß genug sind, um die Zahlen aufzunehmen, mit denen Sie arbeiten. Die Größen unterscheiden sich je nach Plattform in C ++, bei Verwendung des 32-Bit-Visual Studio-Compilers sind unsigned intes jedoch 32-Bit, während unsigned __int64 (MS-spezifisch) 64-Bit sind. Erwägen Sie auch die Verwendung von a double.

Versuchen Sie außerdem, Ihre Vorgänge neu zu organisieren, damit Sie nicht an erster Stelle auf so große Zahlen stoßen (z. B. statt zu MDef * MDef / 110tun (int)((float)MDef / 110 * MDef)) .


3
Wenn Sie auf Integer-Überläufe stoßen, wird die Konvertierung in Float - das nur 24-Bit-Integer-Teile zuverlässig unterstützt - andere Genauigkeitsprobleme haben.

@ Joe: Ich habe deine Bearbeitung zurückgesetzt. Ich habe mich speziell für " __int64over" entschieden, uint64_tweil stdint.hes in Visual Studio 2008 und darunter nicht verfügbar ist, und ich wollte den armen Jungen nicht mehr verwirren, als er es bereits ist.
BlueRaja - Danny Pflughoeft

1
@BlueRaja: Ich sehe keine Beweise dafür, dass der Fragesteller Visual Studio verwendet, und es ist in jeder anderen Standard-Toolchain (einschließlich Visual Studio 2010) vorhanden.

Sie haben auch eine wichtige Variante ausgelassen, denke ich: Wenn Sie möchten, dass der Schaden eine Obergrenze hat, die Sie erreichen, aber nie ganz erreichen können, können Sie eine Sigmoid-Funktion verwenden.
Martin Sojka

1
user127817: Alles was wirklich wichtig ist, ist wie die Funktion wächst. Im Übrigen testen Sie es einfach, bis es sich ausgeglichen anfühlt. Wenn Sie der Meinung sind, dass der Charakter zu mächtig ist, verringern Sie seinen Schaden. Wenn Sie der Meinung sind, dass es zu lange dauert, einen bestimmten Boss oder Feind zu töten, senken Sie die Gesundheit oder Rüstung des Gegners. Und so weiter.
BlueRaja - Danny Pflughoeft

31

Meine Charakterstatistiken setzen sich wie folgt zusammen:

Es gibt Ihr eigentliches Problem: Sie haben Ihre Statistiken definiert, bevor Sie definieren, was diese Statistiken tatsächlich bedeuten . Du stellst den Karren vor das Pferd.

Schauen Sie sich an, wie D & D (Tabletop) funktioniert. "Stärke" bedeutet nichts für sich; Es bedeutet nur etwas, weil es eine Regel gibt, die besagt: "Füge deinen Stärkebonus zu deinem Nahkampfangriff hinzu." Diese Regel ist Teil der Kampfregeln von D & D. Ohne die Kampfregeln ist "Stärke" im Allgemeinen eine bedeutungslose Größe.

Die erste Frage, die Sie sich stellen müssen, lautet: Wie viel Differenzierung möchte ich zwischen Zeichen? Schauen Sie sich noch einmal D & D an. Dort haben sie 6 grundlegende Statistiken. Diese Statistiken definieren unterschiedliche Spieldimensionen für Charaktere. Ein Charakter mit hoher Geschicklichkeit hat andere Optionen als ein Charakter mit niedriger Geschicklichkeit.

Aber der Grund für diesen Unterschied liegt in den Regeln. Hohe Geschicklichkeit bedeutet Boni für Fernkampfangriffe. Sie können häufiger mit Fernkampfangriffen treffen. Nur zwischen Stärke und Geschicklichkeit gibt es also zwei Dimensionen: Fernkampf und Nahkampf.

Intelligenz und Weisheit bilden ebenfalls eine Art Paarung, aber diese interagieren mehr mit bestimmten Klassen. Int macht Wizards und andere arkane Zauberwirker besser (oder möglich unter bestimmten rulesets), Weisheit ist von entscheidender Bedeutung für Kleriker und andere göttliche Zauberwirker. Da göttliche und arkane Zaubersprüche unterschiedliche Zauberlisten haben, sind diese beiden Statistiken an unterschiedlichen Dimensionen des Spiels beteiligt.

Sie müssen die Grundregeln für Statistiken definieren, bevor Sie Wachstumsfortschrittsfunktionen und dergleichen definieren können. Sie brauchen keine Angaben; Sie müssen nicht sagen, dass "jeder Stärkepunkt dem Zufallswurf hinzugefügt wird, um festzustellen, ob ein Nahkampfangriff erfolgt". Was Sie brauchen, sind Metaregeln wie "Geschicklichkeit macht Distanzangreifer besser." Sie können später genau herausfinden, wie sie dadurch besser werden.

Es gibt verschiedene Möglichkeiten, um Charaktere voranzubringen. Ein üblicher alter Final Fantasy-Trick bestand darin, das Level des Charakters einfach als Teil seiner Schadensberechnungen zu verwenden. Dies kann einfach das Multiplizieren des Levels mit dem entsprechenden Wert bedeuten oder das Anwenden einer Funktion auf das Level des Charakters. Sagen wir, ein quadratischer Verlauf, so dass die Schadensrate eines Charakters pro Level zunimmt.

Wie auch immer Ihre Kampffunktionen funktionieren sollen, sie müssen den Fortschritt berücksichtigen. Ihre Funktionen benötigen Haken für den Fortschritt.

D & D hat eine lustige Art des Fortschritts. Es ist teilklassenbasiert; Jedes Mal, wenn Sie in ein Level aufsteigen, erhalten Sie neue Klassenfunktionen und einen Pauschalbonus für Ihren Treffer, basierend auf Ihrer Charakterklasse. Einige Klassenmerkmale wurden jedoch von selbst besser. In D & D-Zaubersprüchen wäre ein Fortschritt eingebaut. Ein Zauber kann 1W4 Schaden pro 2 Zauberwirkerstufen über dem ersten verursachen. Daher verbessert jede zweite Zauberstufe diesen Zauber.

D & D nutzte auch stark die Item-basierte Progression. Bis zur 4. Ausgabe galt der auf Gegenständen basierende Fortschritt hauptsächlich dem Kampf gegen Charaktere, aber selbst in älteren Ausgaben hatten Zauberwirker Gegenstände, die ihnen Stärkungszauber oder andere Anpassungen verliehen (oder sie wurden mit allen Mitteln verzaubert).

Gegenstände sind also eine weitere Sache, die Ihre Kampffunktionen berücksichtigen müssen. Verstärken Gegenstände nur eine oder mehrere Statistiken, während sie ausgerüstet sind, oder tun sie auch andere Dinge? D & D war etwas seltsam, da sich die Statistiken selten änderten. Waffen haben einfach XdY Schaden zugefügt, möglicherweise mit einem Bonus, der auf einer deiner Statistiken basiert. Und das war es auch schon. Ihre einzige Möglichkeit, mehr Schaden im Kampf zu verursachen, bestand darin, eine bessere Waffe zu finden. In vielen Videospiel-RPGs werden neben einer Waffe auch Level berücksichtigt.


6
" Es gibt ein echtes Problem: Sie haben Ihre Statistiken definiert, bevor Sie definieren, was diese Statistiken tatsächlich bedeuten. Sie stellen den Karren vor das Pferd. " Ich stimme überhaupt nicht zu. Die Zahlen an sich sind nur ein Weg, um den Spieler über seine Macht zu informieren. Dies ist Teil des Spieldesigns. Wenn Sie umgekehrt vorgehen, könnten Sie einen Endboss mit 147 PS haben ... wer will das wirklich?
Jonathan Connell

8
Nun, Sarevok (in Baldurs Gate) hatte nur 135 PS ...
Martin Sojka

12
@ 3nixios: Was macht es, wenn der Endboss 147PS hat? Entscheidend ist , ob der letzte Chef ist herausfordernd, interessant und vor allem lohnend zu besiegen. Ein Chef mit viel PS ist nicht interessant; Es ist Zeitverschwendung. Ein Chef, der kann Schlamassel mit Ihrer Partei, die besondere Taktik erfordert , die von einem Moment zum anderen zu ändern, dass es erforderlich , dass Sie müssen jede Möglichkeit , Sie zu ihr maximales Potenzial haben zu verwenden, das ist es, was für einen großen Endgegner macht. Ich werde den interessanten 147-PS-Chef jeden Tag über den langweiligen Block von HP führen.
Nicol Bolas

@Nicol Bolas Ich stimme dir voll und ganz zu, ich habe versucht zu unterstützen, warum ich glaube, dass der Ausgangspunkt aus den Statistiken stammen muss. Die Statistiken, mit denen ein Spieler beginnt, sind die primäre Anzeige und das Gameplay, mit denen der Spieler während des Spiels spielt. Ich bin damit einverstanden, dass riesige HP-Balken für Bosse nicht erforderlich sind. Sie geben dem Spieler einen besseren Hinweis darauf, was das beste Setup gegen den Chef ist, welche Statistikwaffen usw. effektiver sind. Der Betrag ist natürlich für die Art und Weise, wie Sie ihn berechnen, unerheblich, da Sie Ihre endgültigen Berechnungen einfach durch eine Konstante c dividieren oder multiplizieren und damit fertig werden können.
Jonathan Connell

2
@ 3nixios: Aber das gehört zu meinem Punkt. Geschicklichkeit in D & D ermöglicht die Unterscheidung zwischen Nahkampfspezialisten und Fernkampfspezialisten. Wenn es kein Konzept für Nahkampf- und Distanzangriffe gäbe (und in vielen FF-Spielen zum Beispiel nicht), müsste diese Unterscheidung nicht existieren. Sie könnten mit 5 anstatt 6 Statistiken davonkommen. Das Definieren eines HP-Bereichs ist eine Sache, aber das Definieren der grundlegenden Statistiken, die Sie haben, ist eine andere. Statistiken erfordern Regeln, bevor Sie einen Sinn daraus ziehen können, und Sie müssen wissen, was Sie mit einer Statistik vorhaben, bevor Sie sagen können, dass es eine gute Idee ist, diese Statistik zu haben.
Nicol Bolas

22

Ihre Formeln scheinen ziemlich kompliziert zu sein. Ich bin mir nicht sicher, wie professionelle RPG-Entwickler damit umgehen, aber ich würde empfehlen, sich auf die Einfachheit zu konzentrieren. Versuchen Sie, die einfachste mögliche Formel zu finden, die noch den Wertebereich enthält, den Sie verwenden möchten. Könnten Sie zum Beispiel die Statistiken vor der Schadensberechnung ändern lassen, anstatt den Schaden während der Berechnung zu ändern? Sobald Sie sich eine Formel überlegt haben, würde ich versuchen, sie für eine Vielzahl von möglichen Werten grafisch darzustellen, um zu sehen, wie sie sich beim Aufstieg der Spieler verhält. Je weniger Variablen Sie haben, desto praktikabler ist dies.

Darüber hinaus lieferte BlueRaja eine wichtige Erklärung dafür, warum bei höheren Statusstufen möglicherweise unerwartete Werte angezeigt werden. Es ist wichtig, nicht signierte Typen zu verwenden und nach Überläufen zu suchen.


10
+1 für einfach. Jeder kann rigoros komplizierte Sachen machen, was allerdings kein gutes Spiel ist.
aaaaaaaaaaa

8
@Randolf Wenn Sie nicht mit Apple 2 oder ähnlichem arbeiten, ist es höchst zweifelhaft, ob das Entfernen einer Multiplikation oder einer Division die Leistung in irgendeiner messbaren Weise beeinträchtigt.
Tetrad

8
@Randolf Eine große Schlacht in einem RPG kann ungefähr 10 Schadensberechnungen pro Sekunde bedeuten. Eine moderne CPU kann mehrere Milliarden Operationen pro Sekunde ausführen. Sie können davon ausgehen, dass die Auswirkungen solcher "sichtbaren" Berechnungen auf die Leistung vernachlässigbar sind. Einfach ist in diesem Fall für diejenigen, die entwerfen und das Spiel spielen, nicht für unsere Computer.
aaaaaaaaaaaa

6
@Randolf Richardson: Ich denke nur, dass Sie in diesem Fall das Ziel ein wenig verfehlen könnten. Für ein MMO ist ein gutes, schnelles und fettfreies Protokoll von größter Bedeutung, und schwere Aufgaben wie die Physik müssen unter Berücksichtigung der Leistung konzipiert werden. Die Schadensberechnung ist jedoch das Kern-Gameplay. Sie sollte im Hinblick auf das Gameplay entwickelt werden. Wenn Sie Leistungsprobleme in eine solche Frage einbeziehen, besteht die Gefahr, dass der Gameplay-Teil beeinträchtigt wird. Wenn Sie über Leistung sprechen, besteht die Gefahr, dass Sie den Eindruck erwecken, dass dies ein wichtiger Optimierungsbereich ist, der die Aufmerksamkeit der echten Leistungssünder stiehlt.
aaaaaaaaaaa 30.06.11

5
@Randolf: Ich impliziere nichts; Ich sage , dass es Zeitverschwendung ist, etwas zu optimieren, das kein Engpass ist.
Nicol Bolas

11

Spätes Spiel Enemy HP wird in der Regel in den unteren Millionen liegen (wobei ein Super-Boss das Maximum von ~ 12 Millionen hat).

Damit habe ich ein Problem. Sie sollten Ihre Bosse auf das aufbauen, womit Ihre Spieler Ihrer Meinung nach umgehen können sollten. Sie bauen Ihre Spieler- und Kampfformel so auf, wie Ihre Bosse sein sollen.

Sobald Sie Ihre Kampfmechanismen und -rollen aufgebaut haben, können Sie entscheiden, wie Sie Ihre Bosse gestalten möchten, da dies ein ausgewogenes Verhältnis zwischen dem Schaden, den die Spieler verursachen / absorbieren können, und dem Schaden, den der Boss verursachen / absorbieren kann, darstellen soll.


4
+1 Die Gesundheit des Feindes sollte auf dem basieren, was der Spieler an diesem Punkt vernünftigerweise handhaben kann, und nicht umgekehrt.
BlueRaja - Danny Pflughoeft

7

Diese Zahlen, die Sie angegeben haben, stammen wahrscheinlich aus einer einfachen Optimierung einer Simulation über Tausende von Läufen.

Sie sollten also eine Simulation schreiben, um einen Charakter der Stufe 20 zu erstellen, und sehen, wie er sich durch etwa 200 Schlachten gegen die feindlichen Typen schlägt, gegen die er an diesem Punkt kämpfen soll. Wiederholen Sie den Vorgang für einen Charakter der Stufe 30 (vermutlich im nächsten Abschnitt der Welt).

Es wird eine Weile dauern, bis das Problem behoben ist, aber das Schreiben automatisierter Simulationen macht es auf jeden Fall viel einfacher, als es nur zu erraten und manuell abzuspielen.


5

Ich denke, Sie machen den Fehler, dass Sie eine Formel erstellen möchten, ohne ein richtiges Design im Auge zu haben.

Beginnen Sie zuerst mit einem Entwurf und überlegen Sie dann, ob Sie den Entwurf in Formeln darstellen möchten. Je klarer Ihr Design ist, desto einfacher sollte es sein, einfache und / oder präzise Formeln zu finden.

Versuche "Arten" von Feinden zu implementieren, zB "gepanzert" => ein Spielerangriff, wenn er physisch ist, wird um 50% reduziert. Lass keinen Kampf fließen, um zu abstrahieren, denke darüber nach, was relevant ist und was nicht.

Wenn Ihr Design besagt, dass "gepanzerte Feinde" schwach gegen Magie, aber stark gegen physischen Schaden sind, stellen Sie dies im Code dar. Denken Sie jedoch daran, dass Sie viele Tests durchgeführt haben, da die Werte beim ersten Schreiben des Codes nicht auf magische Weise funktionieren. Versuchen Sie, ein Design zu erstellen, setzen Sie die Logik in Code, überprüfen Sie immer, ob dies die technische Darstellung dessen ist, was Sie im Sinn hatten, und ändern Sie die Werte nicht, bis es ist.


Ich habe diese Art von Dingen bereits berücksichtigt
Rüstungswertung verringert den

5

Obwohl mein Design die Spreadsheet-Phase nicht verlassen hat, bin ich zu einer Schlussfolgerung über das Entwerfen von Mathematik für RPG gekommen:

Halte sie so einfach wie möglich. Bei dem Design, an dem ich arbeite, habe ich sehr vereinfachte Formeln verwendet, die für ein System ohne Klassen geeignet sind. Dh Feuerballzauber haben einen Schaden von 30. Das Forum ist:

BaseSpellDamage * Attribute (5 * 6)

Wir können auch Modifikatoren wie diese hinzufügen:

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

Das Endergebnis wäre also 45 Schaden. Ich fand, dass die Verwendung von Precentage-Multiplikatoren sehr einfach und die Arbeit mit einer sehr skalierbaren Lösung ist. Anstatt mit einigen ungeraden Zahlen mit komplexer Mathematik zu kommen, um das gewünschte Ergebnis herauszufinden.

Jetzt können wir die Schadensresistenz berechnen, die nur die Verteidigung gegen festgelegte Schadensarten berechnet. Es gibt zwei Ansätze und ich habe ehrlich gesagt nicht entschieden, welche besser passen würden, aber beide sind einfach und machbar:

DamageResult = Resistance * Damage ( 50% * 45)

Das Endergebnis wird also beschädigt (ich habe nur das Teilergebnis abgeschnitten).

Andere Formel:

DamageResult = Damage - Resistnace (45 - 22).

Das Endergebnis ist also 23. Wenn der Widerstand größer ist als der erlittene Schaden, erhält der Charakter einfach keinen Schaden. Natürlich liegt es an Ihnen, sicherzustellen, dass eine solche Situation keinen Platz hat, es sei denn, Sie möchten, dass dies der Fall ist.

Obwohl ich zugeben muss, dass die Präzisionsskalierung etwas einfacher zu balancieren und zu skalieren ist. Dies hängt aber auch von Ihren Basisnummern ab. Die vorläufige Skalierung funktioniert am besten, wenn Sie ab 100 beginnen. Wenn Sie mit kleinen Zahlen arbeiten (alles unter 100, um ehrlich zu sein), kann es unangenehm werden, wenn Sie anfangen, Gleitkommaergebnisse zu erhalten, die schwer zu balancieren sind und tatsächlich irgendetwas Interessantes mit ihnen machen.

In diesem Fall ist es wahrscheinlich die beste Lösung, beide Ansätze zu verwenden, wenn sie passen. Oder wenn Sie ein Fan von großen Zahlen sind, fangen Sie bei 1000 an.

Und am Schluss endet. Ich bin nicht ganz von alleine zu diesem Schluss gekommen. Ich habe tatsächlich einige Zeit damit verbracht, verschiedene RPG-Handbücher (Hero, DnD) zu lesen. Besonders DnD war hilfreich, da es nach ähnlichen Prinzipien arbeitet, aber anstelle von Attributen, die Ebenen für seine Formeln verwenden, können sie manchmal komplexer sein. Als was ich hier vorgestellt habe.

In jedem Fall ist der beste Rat: Versuchen Sie, sie so einfach wie möglich zu halten. Verwenden Sie keine fortgeschrittenen mathematischen oder langen Gleichungen, da diese fehleranfällig sind und schwer zu erkennen sind, wenn Sie gleichzeitig mit 87234 anderen Dingen zu tun haben.


3

Wie bereits erwähnt, ist die Final Fantasy X-Formel ziemlich komplex. Im Allgemeinen ist die Formel für diese Serie umso komplizierter, je später das Spiel beginnt. Es ist wahrscheinlich einfacher, Ihre Schadensformel vollständig auf ein anderes Spiel abzustützen. Aber im Allgemeinen denke ich, dass es sich lohnt, von einer sehr allgemeinen Ebene aus zu diskutieren, welche Art von Schadensformeln Sie auf der Welt finden und wie Sie ein Spiel daraus machen können. Als Erstes müssen Sie entscheiden, wie viel Schaden Sie am Ende des Spiels anrichten möchten und welche Statistiken der Spieler haben soll. Sobald Sie das haben, können Sie ein Formelsystem auswählen und dann die Formel- und Waffenwerte optimieren, um diese Bereiche über die Zeit wiederzugeben.

Rein statistisch

Dies ist eine gute Idee, wenn Sie möchten, dass Ihre Charaktere in Bezug auf die Anzahl der Feinde, die sie herausfordern können, flexibel sind. Eine solche Formel hängt nur von den Statistiken des Spielers, seiner Ausrüstung und den Statistiken der Feinde ab. Diese Formeln sind normalerweise ziemlich einfach. Final Fantasy Legend II (siehe http://www.shenafu.com/ffl2/weapon.php) enthält Waffen, die Schaden verursachen, basierend auf der einfachen Formel:

(Stat+StatBonus)*WeaponStrength - Defense*4

Eine Formel wie diese ist gut, wenn Sie eine sehr einfache Methode zur Schadensschätzung oder einen schnellen Absprungpunkt zum Modifizieren des Schadens basierend auf anderen Faktoren wie Fertigkeiten und Elementarschwächen wünschen.

Betrachten Sie die Schadensformel für Inflation RPG, ein Android- und iOS-Spiel (siehe http://inflation-rpg.wikia.com/wiki/Calculations ), um zu zeigen, wie breit diese Formel wirklich sein kann . Die Formel ist stark stat- und geräteabhängig. Jedes Ausrüstungsstück hat zwei Statistiken - einen Bonus auf die ATK-Statistik und einen Multiplikatorwert. Einige Ausrüstungsgegenstände haben niedrige Multiplikatoren, aber hohe Prämien, andere haben niedrige Prämien, aber hohe Multiplikatoren. Für einen Charakter mit nur 10 ATK ist die Kampfaxt mit 5000 ATK Bonus, aber niedrigen 145% Multiplikator eine gute Wahl. Der Gesamtschaden ist (10+5000)*1.45 = 7264, aber der Estoc mit 0 Bonus und einem Multiplikator von 300% ist eine schlechte Wahl - der Schaden ist (10+0)*3 = 30. Später im Spiel würde es ein Charakter mit 5000 Angriffen vorziehen, die Waffen zu wechseln.

Stat- und Level-basiert:

Ein gutes Beispiel hierfür sind Final Fantasy V, VI und Final Fantasy XII (siehe beispielsweise http://www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900 ). Die Formel für Schwerter in FFXII lautet:

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

und die Schadensformel für Notensysteme lautet:

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

Sie sind sich sehr ähnlich, beachten Sie jedoch, dass die Schwertformel nur von Stärke und Stufe abhängt, während die Stabformel von Stärke, Magie und Stufe abhängt . Der Vorteil dieser Art von Formel besteht darin, dass der Spieler zwei Möglichkeiten des Wachstums hat - das Bauen seiner Statistiken oder das Bauen seines Levels. Der Nachteil ist, dass dadurch auch Charaktere in beide Richtungen bestraft werden. Das bedeutet, dass der Spieler seine Schadensleistung steigern kann (für FFXII bedeutet dies, dass die Schadensleistung um ~ 4% pro Stufe um etwa 50 erhöht wird, wenn Sie die statistischen Gewinne berücksichtigen), um den Schwierigkeitsgrad an seine anzupassen Komfortniveau.

Behobener Schaden:

Feste Schadensformeln hängen nicht von den Statistiken oder dem Level des Charakters ab, sondern nur von der internen Schadensformel der Waffe. Sie können sich über eine Reihe hinweg unterscheiden, verursachen jedoch unabhängig vom Benutzer den gleichen Schaden (abgesehen von anderen Spezialeffekten oder Charaktereigenschaften). Sie werden am besten verwendet, wenn die Waffe festen Schaden anrichtet und die Fähigkeit, die Waffe auszurüsten, von den Statistiken und / oder dem Level abhängt. Diablo 2 macht das zum Beispiel genauso wie viele Roguelikes, die Waffen haben, die von Würfeln abhängen. Allerdings bedeutet " fester Schaden" nicht "nicht zufällig" - und tatsächlich ist der verursachte Schaden in der Regel zufällig.

Dies ist eine gute Methode, wenn Sie Waffen haben möchten, die sich leicht zwischen Charakteren übertragen lassen, oder um den Schaden, den Charaktere an bestimmten Punkten im Spiel verursachen können, sorgfältig zu kontrollieren, wenn Sie wissen, auf welche Ausrüstung sie Zugriff haben (über Ablagetische, Truhen) und Tische stehlen).

Ein weiterer Ort, an dem Sie darauf stoßen, sind bestimmte Arten von Ausrüstung oder Gegenständen in Final Fantasy. 1000 Nadeln verursachen zum Beispiel immer 1000 Schaden. In Final Fantasy Legend II verursachen Kampfkünste Schaden, basierend auf der Formel:

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

Final Fantasy XII hat auch für Waffen einen etwas festgesetzten Schaden, der Schaden gemäß der folgenden Formel verursacht:

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

Obwohl der Schaden eher zufällig ist, variiert er über die gesamte Reichweite nur um 26,5 Prozent, so dass Sie mit der Zeit garantiert einen bestimmten Schaden verursachen. Diese Art von Angriffen ist nützlich für Charaktere, die sowohl niedrige Statistiken als auch niedrige Levels in Spielen haben, die normalerweise die Faktoren berücksichtigen, die den Schaden verursachen. Außerdem ignorieren sie die Verteidigung des Ziels (obwohl die Formel leicht überarbeitet werden kann, um in die Verteidigung zu passen, wenn Sie dies wünschen).


2

Alle Spiele in der Final Fantasy-Serie haben aufgrund des Problems, auf das Sie stoßen, eine Statistikobergrenze von 255. bei Level 100 wären das 255.

Sie sagen, dass Sie die Statistiken mit den Fähigkeiten und der Ausrüstung erhöhen, und ich erinnere mich, dass ich das in den Spielen gesehen habe, aber die Art und Weise, wie das gemacht wird, ist in der Formel. In einem zusätzlichen Schritt werden die Fähigkeits- und Ausrüstungsmodifikatoren überprüft und nach Verwendung der Statistiken angewendet.

In Ihrem Fall wäre es Schritt 21: Anwenden von Fähigkeitsmodifikatoren. Schritt 22: Anwenden von Ausrüstungsmodifikatoren. Schritt 23: Endschaden.

Wenn Sie sich für Google für Final Fantasy Formeln interessieren, sind sie da draußen. Ich habe Kopien der eigentlichen Kampfmechaniken, einschließlich der KI für Final Fantasy 4, 6, 7 und 9. Die Leute haben sie aus den Originalspielen geknackt, als sie Roms für Emulatoren erstellt haben. Es ist nicht so schwer zu finden, wenn Sie hart genug aussehen.

Das größte Problem beim Erstellen von Formeln ist das Testen. Richten Sie ein Skript ein, um Ihren Kampf mit beiden Seiten zu führen und mehrere hundert Schlachten zu führen. Variiere die Monster und die Werte und schau, ob es funktioniert oder ob Lv 40 alles tötet. Es ist durchaus möglich, dass ein Boss tatsächlich unmöglich ist, Lol zu töten. Ein Tipp wäre, alle Animationen auszuschalten, da es beeindruckend ist, wie schnell KIs kämpfen können, wenn niemand zuschaut.


2

Ich habe mich gefragt, wie Menschen tatsächlich die richtigen Schadensformeln entwickeln, die richtig skaliert werden?

Die ersten beiden Dinge sind:

  • Entscheide, was du mit "richtig" meinst - was ist deine Vorstellung von "richtigem Schaden"?
  • Entscheiden Sie, was Sie unter "Skalieren" verstehen - welche Werte werden sich ändern und welche Auswirkungen sollen diese Änderungen haben?

Sobald Sie das wissen, haben Sie genug Informationen, um die mathematischen Formeln zu verwenden, die BlueRaja in seiner Antwort erwähnt hat . Denken Sie daran, dass es keine „richtige“ Schadensformel gibt - nur eine, die Ihrem Design für die Art von Erfahrung entspricht, die Sie Ihren Spielern bieten möchten.


Dies ist ein äußerst wenig hilfreicher Kommentar. Es summiert sich auf "Ich weiß es nicht" und aus diesem Grund ist es eine Verschwendung von jedermanns Zeit. Zum Löschen vormerken.
Krythic

1

Wenn Sie nach einer sehr einfachen Formel suchen, gehen Sie alternativ wie folgt vor:

(Beachten Sie, dass dies meine Idee für eine Formel ist.)

Erstens benötigen Sie für eine einfache Angriffsformel nur ein paar Statistiken. Der Angriffswert des Spielers (dies kann Stärke oder Magie sein, abhängig von der Art des Zuges.)

Erstellen Sie dann eine Variable mit dem Namen MovePower. Dies hängt vom Zug ab und bessere Züge hätten eine bessere MovePower. Für meine Formeln haben allgemeine "Attack" -Befehle eine MovePower von 5.

Dann mache die Verteidigung zu einem prozentualen Wert (und mache es natürlich unmöglich, eine 100% ige Verteidigung gegen Schaden zu erreichen).

Dann multipliziere während der Angriffsphase einfach den Angriffswert mit der Bewegungskraft und entferne den Schaden, der auf der Verteidigung der Gegner basiert! einfach!

Sie können sich auch für andere Modifikatoren entscheiden, z. B. für den Fall, dass der Zug einen Treffer erzielt (Genauigkeit), für den Fall, dass der Zug einen anderen zusätzlichen Effekt hat (Bio, Gift zufügt), und für den Fall, dass der Treffer (Genauigkeit erneut) Schaden verursacht bewegt sich, die Statistiken ändern, ect. Viel Spass damit!


Eine andere Option, die die Rüstung als Perzentilproblem vermeidet (wodurch die Werte gleich aussehen), ist die Berechnung des Schadens gegen die Rüstung als Vergleich, der zum Multiplikator wird. So etwas wie Ln (atk / def) als Basis. Auf diese Weise können Verteidigungspanzerungsstatistiken skaliert werden, wenn die Zeit auf die gleiche Weise vergeht. Finden Sie heraus, wie Sie Ihren gewünschten Grundschadensbereich ermitteln können, wenn die Schadens- und Rüstungsstatistiken gleich sind, und extrapolieren Sie sie von dort aus. Dies macht es erforderlich, dass "Panzerungsvermeidung" -Angriffe einen Trick erfordern, aber das ist ein Teil dessen, wofür Kreativität gedacht ist.
Aviose

1

Im Wesentlichen müssen Sie zwei Dinge herausfinden.

  1. So führen Sie eine ordnungsgemäße Berechnung mit großen Zahlen durch.
  2. Wie Sie wollen und erwarten, dass sich Angriffsschaden gegen schwächere und starke Gegner verhält.

1

Sie können entweder Benutzer doubleoder eine große Anzahl Bibliothek. Für Berechnungen mit großen Zahlen (wie bei Click / Idle-Spielen werden häufig Bibliotheken mit großen Zahlen verwendet). In Ihrem Fall sind die Zahlen relativ klein, sodass die Verwendung von 64-Bit-Gleitkommazahlen die erforderliche Flexibilität ermöglicht.

2

Wie soll sich das Spiel verhalten? einige Beispiele:

  • Ein Ansatz besteht darin, ATKzu entscheiden, ob Sie eine Würfel mit einer bekannten Schadensbewertung treffen oder nicht, abhängig von der Waffe: zum Beispiel Langschwert 1d8, Zweihandschwert 1d10, Dolch 1d4. Dies wird nicht erstaunlich gut skalieren, wenn die HP weiter und weiter wachsen kann. Wenn Sie ATKbestimmen, ob die Charaktere getroffen oder verfehlt haben, können Sie nach einem erfolgreichen Treffer mit ATK* 80% einen weiteren Wurf ausführen, um die kritischen Treffer zu bestimmen.
  • Wenn Sie eine Schadensformel verwenden möchten, kann die Schadensformel so einfach sein wie (ATK - DEF) +/- 20%im Worlds End (einem RPG-Strategiespiel). Dies bedeutet, dass Angriffe gegen einen starken Gegner DEFüberhaupt keinen Schaden anrichten können. Für instace ATK = 10, ENEMY DEF = 12, (ATK - DEF) = -2und es bedeutet auch , dass hohe Angriff gegen etwas niedriger def, wenig Schaden anrichten könnte, möglicherweise Kämpfe länger mit zunehmender HP macht. Zum Beispiel mit ATK = 1010, ENEMY DEF = 1005wäre der Schaden 5. Der Schaden wird jetzt ebenfalls dramatisch zunehmen, wenn der ATKum einen kleinen Prozentsatz erhöht wird. Verursacht zum Beispiel ATK = 1055900% mehr Schaden bei nur 5% mehr ATKWert.
  • Um dies zu vermeiden, kannst du so etwas tun. ATK / DEF * WEAPON_DAMAGEDies wird schrittweise skaliert, wenn ATKoder DEFerhöht werden und einem schwachen Angreifer erlauben, eine Kreatur mit starken zu beschädigen DEF.

Sie müssen verantwortungsbewusst mit Ihren Zahlen umgehen und herausfinden, wie sich das Spiel in verschiedenen Situationen verhalten soll. Einige Fragen, die Sie sich stellen sollten:

  1. Wie viele Angriffe (Runden) sollte es dauern, um diesen Boss / Diener zu besiegen?
  2. Wie sollten sich unterschiedliche Fähigkeiten, Buffs und Debuffs auf den xKampf auswirken ? Sollte es hoffnungslos sein, sollte das Gewinnen y%weniger / wahrscheinlicher sein?
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.