Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.08.2014, 21:13

Aufstellung verschiedener Spielformeln (Schaden, EP-pro-Stufe, ...)

Bis jetzt konnte ich zu jedem programmiertechnischen Problem eine Lösung über Suchmaschinen finden. Was mir verwehrt blieb, war ein Denkanstoß für einen eleganten Weg um verschiedene Formeln, wie zum Beispiel der Schadensberechnung, Skalierung verschiedener Attribute oder den benötigten Erfahrungspunkte für eine Stufe, usw., zu bilden. Da das immens wichtig für das Game Design und die "Innigkeit" der Spielwelt ist, müssen bestimmt allgemeine grobe Vorgaben existieren. Leider finde ich nur Seiten, auf denen man die Formel andere Spiele einsehen kann. Diese sind von Spiel zu Spiel sehr unterschiedlich, sodass man keine allgemeine Regel erkennen kann.

Am besten ein Beispiel: Momentan sitze ich an einem Text-RPG. Einem winzigen. Über die Konsole kann man aus verschiedenen Klassen eine Spielfigur zusammenschreiben (Name, Punkte auf Attribute verteilen, ...) und sich über ein pokemon-ähnliches Kampfsystem durch fünf Räume kämpfen, die einen Dungeon darstellen sollen.

Ich möchte das Kampfsystem natürlich nicht ewig so simpel halten, sondern erweitern. Es gibt sehr viele Attribute, beschränken wir uns vorerst auf Vitalität.

Beispiel I: Lebenspunkte -= Schadenswert
Da ich Pokemon schon erwähnt habe, neheme ich mal das Grundsystem. Wir haben verschiedene Attacken. Diese haben einen Schadenswert und dieser wird dem Gegner direkt abgezogen.

Schadenswert der Attacke: 20
Gegnerische Lebenspunkte: 100

Spieler greift an.
Gegner verliert 20 Lebenspunkte.

Natürlich kann man da noch mit Boni und Mali spielen; Wenn ein Wasser-Angriff stattfindet, dann verdoppelt sich der Schaden auf ein Ziel des Feuer-Typs, usw. Der Vorteil ist, dass ich, zumindest im ersten Eindruck, eine bessere Kontrolle über die Spielwelt habe. Damit meine ich die Werte der Figuren allgemein. Ich bestimme, dass ein Endboss 1000 Vitalität hat, der Spieler weit weniger. Der stärkste Schadenswert des Endbosses beträgt 200. Der stärkste Angriff eines Spielers hat den Schadenswert 20. So kann ich sicher gehen, dass der Spieler vorher Erfahrung sammeln muss, um durch Stufenaufstiege gewonnene Punkte in Vitalität zu stecken. Aber das ist mir zu simpel. Zu steif.

Hier kommen die anderen Attribute ins Spiel. Ich versuche den Schadenswert über die Attribute des Spielers zu beeinflussen.

Beispiel II: Lebenspunkte -= (Schadenswert * ( 1 + (Attribut/100) ) )
Dieses Grundsystem zur Schadensberechnung gehört dem französischen MMORPG DOFUS. Mir gefällt die Einfachheit und doch bietet es die Möglichkeit, mit seinem Attribut zu skalieren, mit Spielraum für Boni und Mali.

Schadenswert der Attacke: 20
Attribut (bei Stufe 1): 0
Attribut (bei Stufe X): 60
Attribut (bei Stufe Y): 150
Attribut (bei Stufe Z): 400
Gegnerische Lebenspunkte: 100

Spieler greift an.
(Schaden = 20 * ( 1 + (0/100) ) = 20)
Gegner verliert 20 Lebenspunkte.

Spieler greift an.
(Schaden = 20 * ( 1 + (60/100) ) = 32)
Gegner verliert 32 Lebenspunkte.

Spieler greift an.
(Schaden = 20 * ( 1 + (150/100) ) = 50)
Gegner verliert 50 Lebenspunkte.

Spieler greift an.
(Schaden = 20 * ( 1 + (400/100) ) = 100)
Gegner verliert 100 Lebenspunkte.

Man kann also mit dieser oder einer ähnlichen Formel Zahlen abdecken, die sowohl im Kleinen als auch im Großen funktionieren. Wenn ich jetzt aber anfange zu beschränken, komme ich ins Stolpern. Ich möchte nicht, dass ein Spieler 150, geschweige denn den Wert 400 in einem Attribut haben kann, sondern vielleicht maximal nur 99.

Worauf muss ich da dann achten? Wie lege ich angemessene Werte für die Vitalität aller anderen Figuren im Spiel fest? Außerdem möchte ich, dass nicht nur ein Attribut, sondern mehrere Attribute auf einen Angriff, eine Technik oder einen Zauber, Einfluss haben. Bis jetzt habe ich jedes Mal angefangen zurück zu rechnen. Also minimale und maximale Lebenspunkte, Schadenswerte und Attribute festgelegt. Leider ist das sehr aufwendig, da irgendetwas aufeinmal nicht mehr passt und ich die Werte dorthingehend anpassen muss. Stück für Stück.

Die Berechnungen für den Schaden waren lediglich Beispiele. Ich könnte mit den Erfahrungspunkten weitermachen. Also, wie viel Erfahrungspunkte man für den nächsten Stufenaufstieg benötigt. Auch dort habe ich in PHP eine Funktion geschrieben, die in einer Schleife durchläuft und mir Zahlen auswirft, die anfangs sehr gut aussehen, aber hinten heraus mir persönlich zu unschön sind.

Mir geht es um allgemeine Formelbildung, sowie Wertverteilung und -ermittlung mit strengem Blick auf Balancing. Wie geht ihr die Sache an? Ich bin für jeden Tipp, Anstoß und Hinweis dankbar! Ich habe ebenfalls verschiedene Artikel über das Thema Balancing gelesen, leider waren diese nicht nur sehr theoretisch, sondern haben meine Frage nie zufriedenstellend beantwortet.

Falls sich irgendwo ein Fehler versteckt oder ich die Sache ungeschickt - um nicht dumm zu sagen - angehe, bitte ich um Nachsicht.


Liebe Grüße, T.

Zitat von »Optimus Prime, 42 v. Chr.«

Bekämpft Sarkasmus mit Sarkasmus!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Traeumer« (17.08.2014, 10:06)


GMoney597

Frischling

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

2

16.08.2014, 21:33

Zwar kann ich dir nicht so direkt helfen aber das ist tatsächlich ein äußerst mageres Thema im großen Netz der Netze.

So oft habe ich auch schon nach Systemen und Berechnungsmöglichkeiten gesucht, die in irgendeiner Form ein Berechnungsmuster erkennen lassen.

Das ist wirklich schlimm - ich rechne derzeit auch viele verschiedene Modelle durch, so dass es auch spielbar ist - gebe dir gern wieder Bescheid, wenn ich auch etwas brauchbares gefunden oder "kreiert" habe :dash:

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

3

16.08.2014, 21:36

Ich glaube das Spiel Balancing hängt auch viel mit dem Testen zusammen. Wenn erkannt wird, dass eine Fähigkeit/Einheit zu stark ist, werden die Werte eben etwas angepasst. Perfekt im Voraus wird man das nicht berechnen können.


http://en.wikipedia.org/wiki/Balance_(game_design)

4

17.08.2014, 02:28

Was wohl generell hilft, ist ein guter mathematischer Hintergrund. Also das man verschiedene Formeln kennt und schnell eine Funktion finden kann, die ein gewisses aussehen hat. Dann würde man formulieren, wie sich das Spiel verhalten soll, daraus Bedingungen an die Werte herleiten und daraus dann die Funktionen bestimmen.

Klassisches Beispiel wären Rüstungen. Intuitiv verringert eine Rüstung den Schaden den man erleidet. In einem typischen Rollenspiel würde man im Verlauf immer bessere Rüstungen finden um gegen immer bessere Feinde bestehen zu können.
Man könnte jetzt sagen, dass eine Rüstung einen bestimmten Prozentsatz absorbiert, meinetwegen 40%. Das Problem daran ist, das sich das nicht am Spielfortschritt orientiert, eine Rüstung die am Anfang super war (90%) wird auch am Ende noch super sein. Eigentlich will man ja eine gute Rüstung finden können, aber später dann eine noch bessere finden können. Natürlich konnte der Schaden der Gegner einfach exponentiell steigen, so dass man Rüstungen mit 99%, 99,9% und 99,99% finden muss - die Frage ist, ob man so verrückte Zahlen haben will.
Man könnte auch sagen, dass ein fester Wert abgezogen wird. -5 auf alle Schäden. Nur wäre man damit vermutlich recht schnell gegen alle Gegner, die ein paar Stufen schlechter sind als der eigene Charakter unverwundbar, weil immer mehr Schaden absorbiert wird, als sie machen.
Also vielleicht einen Mittelweg. Rüstungen die gegen schwache Gegner super sind sollen gegen starke kaum helfen, aber egal wie stark deine Rüstung ist soll dich doch jeder Gegner noch verletzen können. Der Schaden passt sich also irgendwie dem Verhältnis von Schaden zu Rüstung an. Habe ich den selben Rüstungswert, erleide ich nur halben Schaden, ist mein Rüstungswert doppelt so hoch nur noch ein viertel, habe ich überhaupt keine Rüstung, bekomme ich vollen Schaden. Und dann fängt der Spaß an, eine vernünftige Formel zu finden. Man kommt schnell auf die Idee, tatsächlich Schaden/Rüstung (oder Umgekehrt) zu rechnen, stellt dann aber fest, dass beide Werte 0 sein können oder zumindest in der Nähe von 0 immer noch sinnvolle Werte herauskommen müssen. Und dann braucht man einfach die Erfahrung, wie man daraus irgendetwas halbwegs nettes hinbekommt. Man könnte die Exponentialfunktion nehmen, die Werte zwischen minus unendlich und 0 auf [0..1] abbildet, damit machen unendlich große Zahlen kein Problem mehr. Man könnte auch zu Zähler und Nenner einen Konstanten Wert addieren, damit würde der "hässliche" Teil der Kurven abgeschnitten.

Es gibt bei sowas ja leider kein richtig oder falsch. Man muss einfach die Grundlegenden Funktionen und ihr Aussehen kennen und wissen wie man sie anwenden kann. Nützlich kann es sein, nicht nur Werte auszurechnen sondern die Funktion direkt zu plotten - so erkennt man sehr schnell, ob sie das tut, was man möchte.


Man kann natürlich auch versuchen auszurechnen, wie stark ein Charakter ist, bzw. wie ein Kampf zwischen zwei Kontrahenten ausgehen wird. Im einfachsten Fall betrachtet man den Schaden pro Angriff, die Angriffsgeschwindigkeit und die Lebenspunkte des Gegners um zu ermitteln, wie schnell man ihn besiegen kann. Je dichter diese Werte (A besiegt B, B besiegt A) beieinander liegen, desto ausgeglichener ist der Kampf.
Das wird bloß sehr schnell sehr kniffelig. Dinge wie "hat eine Trefferwahrscheinlichkeit von 50%" oder "5%tige Chance auf kritischen Treffer mit doppelten Schaden" sind noch einfach, weil man mit Mittelwerten hantieren kann. Aber es könnte ja auch auf Geschick ankommen, dass der Spieler im richtigen Moment ausweichen muss. Oder auf Taktik, dass man im richtigen Moment den richtigen Angriff ausführen muss. Oder auf eine geschickte Kombination von Skills, die man am Ende noch frei lernen kann und von der nahezu jede Kombination möglich wäre.

Letztendlich wird man um umfangreiches Testen nicht hinauskommen. Sollte man dann eine Ungereimtheit feststellen, sollte man sich dann aber zuerst überlegen, woran es denn jetzt liegt, anstatt einfach irgendetwas zu korrigieren. Man sollte schauen, warum bestimmte Funktionen nicht funktionieren, was genau an den Werten jetzt schlecht ist.


Eine Anekdote noch: Ich habe mal ein Aufbaustrategiespiel entwickelt. Es gab verschiedene Rohstoffe, verschiedene Gebäudearten, Produktionsketten, Arbeitskräftemanagement und so weiter. Hatte man zu wenig Essen, sterben Leute, hat man zu wenig Arbeiter stellen Betriebe ihre Produktion ein und so weiter. Nun habe ich die ganze Sache von vorne bis hinten durchgerechnet: Wie schnell produzieren Felder Korn? Wie schnell wird daraus Mehl? Wie viel Brot bekomme ich daraus und wie viele Menschen versorgt das? Man kann dann beispielsweise sagen, dass 4 Felder, eine Mühle und zwei Bäcker eine Produktionskette ergeben. Dann kann man überlegen, wie viele Menschen für die Gebäude benötigt werden und für wie viele Menschen das Brot dann reicht.
Über diesen Faktor kann man dann festlegen, wie viel % der Gebäude für Nahrungsmittelproduktion draufgehen muss. Die Idee war letztendlich, dass man am Anfang Gemüsefelder als erste Nahrungsquelle hat, bei denen 8 von 10 Arbeitern Gemüse anbauen müssen, um das Dorf zu versorgen. Am Anfang musste man also extrem in Nahrung investieren, ein Hauptteil der Siedlung bestand in der Tat aus Gemüsefeldern. Durch Forschung bekam man dann später die Produktionskette für Brot, wo nur noch 4 von 10 Arbeitern für die Nahrungsproduktion nötig waren. Das ist sehr viel effizienter und man kann viel mehr Arbeiter in Betriebe wie Holzfäller oder Steinmetz einsetzen. Und außerdem hat man nicht nur eine neue Art Nahrung zu produzieren, sondern das Stadtbild verändert sich, weil auf einmal die Prioritäten andere sind.
Mit solchen Überlegungen habe ich also sämtliche Werte im Spiel festgelegt. Und es hat auf Anhieb funktioniert. Das Spiel war von Anfang an balanciert und spielbar und hat Spaß gemacht. Ich habe lediglich später die Produktionsrate von Rohstoffproduzenten erhöht, damit die Aufbauphase weniger zäh wurde.
Aber was man daran sieht: Wenn man es vernünftig durchrechnet und die Abhängigkeiten nicht zu kompliziert sind, kann man auf einem hohen Level bestimmen, wie der Spielablauf sein soll (wie viele von welchen Gebäuden wann gebaut werden) und bekommt die low-level Werte passend ausgerechnet. Und man muss gar nicht mehr viel testen, weil man weiß, dass das Spiel sich so verhalten wird, wie man es vorher bestimmt hat.
Und ganz nebenbei könnte man das ganze rumgerechne auch prima benutzen um eine KI zu schreiben - weil man weiß, was man wann bauen sollte und dann nur noch entscheiden muss, wo man es bauen will.
Lieber dumm fragen, als dumm bleiben!

5

17.08.2014, 02:38

Achja: Nützlich ist natürlich alles im Bereich Stochastik bzw. Wahrscheinlichkeitsrechnung. Wenn man Dinge wie Erwartungswert und Varianz verstanden hat, kann man sehr viel besser vernünftige Formeln aufstellen.

Gerade die Varianz ("wie stark unterschiedliche Versuche voneinander abweichen") kann nützlich sein. Einerseits sollte sie nicht zu groß sein, da es sonst unfair und willkürlich wirkt, andererseits ist es vielleicht auch mal ganz witzig, wenn man einen eigentlich zu starken Gegner dann doch besiegt. Oder wenn ein einfacher Kampf plötzlich trotzdem spannend wird.
Lieber dumm fragen, als dumm bleiben!

6

17.08.2014, 10:03

Das ist wirklich schlimm - ich rechne derzeit auch viele verschiedene Modelle durch, so dass es auch spielbar ist - gebe dir gern wieder Bescheid, wenn ich auch etwas brauchbares gefunden oder "kreiert" habe :dash:
Mich würde mehr interessieren, wie du das Ganze angepackt und was du beachtet hast, bis du mit deinem Ergebnis zufrieden warst. Aber anscheinend gehen wir den gleichen Weg. Ich gebe dir gerne Rückmeldung, falls ich etwas brauchbares gefunden habe.


Ich glaube das Spiel Balancing hängt auch viel mit dem Testen zusammen. Wenn erkannt wird, dass eine Fähigkeit/Einheit zu stark ist, werden die Werte eben etwas angepasst. Perfekt im Voraus wird man das nicht berechnen können.


http://en.wikipedia.org/wiki/Balance_(game_design)
Natürlich hast du recht. Ich habe lediglich angenommen, dass man irgendwie bestimmte Eckpunkte setzen kann, damit man von vornherein steuert, in welchem Rahmen sich die Werte bewegen. Jedenfalls einen weniger aufwendigen Weg. Aber gut.


@Jonathan_Klein: Wow, umfangreiche und interessante Antwort, danke dafür! In die gleiche Richtung habe ich auch gedacht und dementsprechend verschiedene Ansätze ausprobiert, war nie ganz zufrieden. Dafür hast du mich auf eine Idee gebracht, die hoffentlich funktioniert. :)


[...] Das Buch hier hat ganz interessante Ansätze, die ich so noch nirgends sonst gesehen habe [...]
Eben reingeblättert, für gut empfunden und bestellt. Danke für den Tipp. ;)

Zitat von »Optimus Prime, 42 v. Chr.«

Bekämpft Sarkasmus mit Sarkasmus!

8

18.08.2014, 12:39

Egal, ob du jetzt die EXP, die für einen Stufenaufstieg benötigt werden, pro stufe verdoppelst, Attribute mit zunehmendem Wissensstand des Charakters immer teuerer machst, Schadenswerte linear, exponentiell oder logarithmisch ansetzt, oder, oder, oder,... wirst du letztendlich immer eine gewisse Anzahl "magic Numbers" haben, die deine Werte entsprechend skalieren. Das müssen durchaus keine linearen Abhängigkeiten sein, auch ein exponent kann/sollte hier mal vorkommen. Diese magic numbers sollten irgendwo zentral gespeichert werden, damit man nicht zig Klassen durchsuchen muss.
Meiner Erfahrung nach funktioniert es recht gut, das Spielsystem erstmal zu entwerfen und festzuschreiben, Level zu bauen, Gegner zu verteilen (es kann ja auch sein, dass du nicht nur gegen einen starken Gegner kämpfst sondern gegen viele kleine) und somit den Spielinhalt größtenteils abschliesst und dir dann eben die magic numbers nochmal vornimmst und entsprechend am Balancing arbeitest. Die Formeln würde ich dann garnicht mehr groß anfassen.

So Far...
Laguna
Portfolio runvs.io | Gamejolt | itch.io | PEWN | Twitter

Werbeanzeige