Hallo Leute!
Ich wollte mal fragen, ob jemand irgendwie eine Formel für eine CTB-Zugreihenfolge hat?
Ich bin seit mehreren Stunden am rumprobieren und komm auf kein vernünftiges Ergebnis.
Mir schwebt die ganze Zeit das System von Final Fantasy X im Kopf rum. Das System ist mMn eines der besten, die es da draußen gibt.
Das einzige, was ich gefunden habe, ist das hier
Das hilft mir aber nicht viel. Kann sein, dass mich meine Englischkenntnisse im Stich lassen, aber soweit ich das lese gehts bei "Agility" nur um diesen Counter, wie die Zugberechnung ist, steht nicht drin.
Wär echt cool, wenn jemand sowas dokumentiert hätte oder zumindest einen Ansatz hätte.
Lachsens Velsarbor fällt mir als gutes Beispiel für ein CTB ein. Vielleicht schaust du dir das ja mal an. http://www.multimediaxis.de/archive/...p/t-92460.html
Scroll etwas runter. Lachsen gibt dort einige Erläuterungen zur Funktionsweise der Zugreihenfolge ab.
Viel Erfolg beim Verstehen und Umsetzen
Einfach wird es 100% nicht!
Hier ist mein Ansatz für das Ganze wie ich es einmal vor langer Zeit ausgearbeitet hatte:
Jeder Kämpfer besitzt 2 Werte, einen Agilitäts-Wert (Agi) und einen Ready-Wert (Rdy).
Im Kampf gibt es eine konstante Ready-Schranke (RdyMax), welche überschritten werden muss um in Aktion treten zu können.
Um die Figur zu finden, welche in der nächsten Runde am Zug ist wird folgendes getan (Pseudo-Script):
Mit verschiedenen Angriffen / Fähigkeiten / etc kann ein Charakter temporär seine Agilität im Kampf verändern.
Ein normaler Angriff, zum Beispiel, könnte die Agilität für eine Runde verringern. Wenn man sich verteidigt könnte die Agilität für eine Runde gesteigert werden.
Ein paar Anmerkungen dazu:
Ein Charakter mit Agilität == 0 kommt niemals im Kampf zum Zug.
Ein Charakter mit Agilität >= RdyMax kann mehrmals hintereinander zum Zug kommen, ohne, dass ein anderer Charakter vorher zum Zug kommt.
Jeder Charakter mit Aglität > 0 kommt irgendwann zum Zug, keiner wird Außen vor gelassen.
Falls für 2 Charaktere a und b gilt, dass a.Agi / b.Agi == r so gilt, dass nach X Runden die Anzahl der Züge von a geteilt durch die Anzahl der Züge von b ~= r (für ausreichend großes X)
Da tun sich mir aber zwei Fragen auf, Cornix:
1. Wie wird RdyMax bestimmt? Werden die Agi-Werte von allen Kampfteilnehmern zusammengerechnet? Ein stur vorgegebener Wert wäre ja schwachsinnig, wenn die Agi-Werte später viel höher sind.
2. Es könnten natürlich mehrere gleichzeitig den Wert RdyMax überschreiten, dann heisst es wohl "wer zu erst abgefragt wird, der ist dran."
dann könnte es aber auch vorkommen, dass in der nächsten Runde noch mehr Kampfteilnehmer den Wert überschreiten, und in diesem Moment alles nur der Abfrage-Reihenfolge entspricht, wer nun über dem Wert sei.
Oder hat dein Letzter Satz etwas damit zu tun? Was dort bezweckt wird, konnte ich leider nicht errätseln.
Noch ein kleiner Tipp, am besten ist es, wenn man zudem für k den Kämpfer mit dem höchsten Rdy Wert nimmt, welcher gleichzeitig Rdy >= MaxRdy hat.
Ich kann einfach einmal ein paar Beispiele durchgehen:
Für die ersten 4 Runden haben wir also:
Schurke
Krieger
Schurke
Magier
MaxRdy sollte so gewählt werden, dass es ein positiver Wert ist, der zu hoch ist, als ob ein Charakter ihn mit seiner Agilität erreichen könnte.
Falls die Agilität der Charaktere zwischen 1 und 25 liegt könnte man 100 oder 500 wählen. Es ist eigentlich ganz egal. Man kann auch 1000000 nehmen aber dann werden viele unnötige Rechenoperationen ausgeführt werden.
Es sollten natürlich auch hier und dort die Ready-Werte der Charaktere beeinflusst werden, zum Beispiel durch Fähigkeiten oder Buffs. Ready-Werte eines Gegners könnten auch durch einen Zauber ins negative gesetzt werden um diesen für eine gewisse Zeit außer Gefecht zu setzen. Man kann auch zufällige Veränderungen des Ready-Wertes hinzufügen um das Ganze ein wenig auf zu lockern.
Auch wenn ich Cornix intention durchaus verstehe, würde ich das Problem genau anders herum lösen. Keinen festen RDY-Wert, sondern eine limitierte Wartezeit pro Charakter. Quasi wie ein ATB nur das die ATB-Leiste ebend nicht in echtzeit runter tickt.
Der RDY-Wert hat den Nachteil, dass dieser in Abhängigkeit der Kampfteilnehmer immer neu bestimmt werden muss. Theoretisch kommt dadurch zwar jeder Charakter zum Zug, wenn der Unterschied zwischen dem schnellsten und langsamsten Charakter jedoch sehr hoch ist, wird der Zug des langsamsten dadurch sehr weit nach hinten geshoben und im Kampf vermutlich nicht mehr eintreten. Grade in der Anfangsphase des Spiels, wo Zahlenwerte eher klein sind, fällt das massiv in's Gewicht, weil ein Charakter mit einer Agilität von 5 eben halt auch 5 mal so oft ziehen darf, wie ein Charakter mit einer Agilität von 1.
Ich würde das Problem daher folgendermaßen lösen:
Jeder Charakter besitzt eine Wartezeit und von dieser Wartezeit wird über einen Loop konstant immer 1 Punkt abgezogen, so lange, bis sie 0 erreicht. Dann darf der entsprechende Charakter einen Zug ausführen. Nach dem Zug wird die Wartezeit des Charakters anhand seiner AGI und der ausgeführten Handlung auf einen neuen Wert gesetzt und wieder runter gezählt.
Dieser neue Wert hätte allerdings ein Maximum um zu verhindern, dass langsame Charaktere + Langsame Aktionen in astronomischen Wartezeiten resultieren.
Des Weiteren würden langsame und schnelle Charaktere durch Fähigkeiten, die eine Verlangsamung oder Beschleunigung erzielen, immer gleich hart getroffen. Eine Fähigkeit, die einen Charakter verlangsamt könnte etwa +10 Punkte auf die Wartezeit addieren. Das wären IMMER zehn durchläufe des Loops ungeachtet ob der betroffene Charakter nun schnell oder langsam ist.
Cornix System hätte das Problem, dass eine Fähigkeit, die den nächsten Zug etwa um 1 Runde verzögert, einen schnellen Charakter nicht so hart treffen würde, wie einen langsamen. Für den Schnellen Charakter mit einem AGI Wert von 5 wäre das eine Verlangsamung von 20%. Für einen langsamen mit einem AGI-Wert von 3 wäre das aber eineVverlangsamung von 33%.
Umgekehrt würden langsame Charaktere allerdings stärker von Beschleunigungseffekten profitieren, was Zauber wie HAST bei schnellen Charakteren weniger Wirksam machen würde.
Die Vorteile überwiegen hier meiner Ansicht nach: Es ist theoretisch immer noch möglich, dass ein Charakter mehrmals nacheinander ziehen darf, allerdings wird die Schere zwischen schnell und langsam nie so groß werden, das ein Schneller Charakter mehr als maximal doppelt so oft ziehen darf, wie ein langsamer. Das System sollte daher einfach ein Wenig fairer sein, als Cornix Ansatz.
@casea_andy:
Dein System hat ganz andere Nachteile:
Zitat
Nach dem Zug wird die Wartezeit des Charakters anhand seiner AGI und der ausgeführten Handlung auf einen neuen Wert gesetzt und wieder runter gezählt.
...
Das bedeutet, je niedriger die Agilität des Charakters desto geringer ist die Wartezeit, korrekt? Das heist die Agilität hat ein festes Maximum über welches sie nicht hinaus wachsen kann. Andernfalls wäre die Wartezeit irgendwann 0 und der Charakter wäre permanent am Zug.
Zitat
Dieser neue Wert hätte allerdings ein Maximum um zu verhindern, dass langsame Charaktere + Langsame Aktionen in astronomischen Wartezeiten resultieren.
...
Ganz schlechte Idee. Das Problem, dass langsame Charaktere zu langsam sind ist nicht das Problem des Kampfsystems, sondern von demjenigen, der so schlechte Werte gewählt hat.
Das was du hier schreibst ist eine Holzhammer Methode um den Effekteines Problems zu beseitigen, aber nicht das Problem selbst.
Zitat
Cornix System hätte das Problem, dass eine Fähigkeit, die den nächsten Zug etwa um 1 Runde verzögert, einen schnellen Charakter nicht so hart treffen würde, wie einen langsamen.
...
Um "eine Runde" verzögern kann man hier nicht sagen, da es nicht rundenbasiert ist. Es gibt vieles was man machen kann, zum Beispiel den Rdy-Wert auf die negative Agilität des Charakters zu setzen. Damit wären alle Charaktere gleich stark betroffen.
Zitat
Umgekehrt würden langsame Charaktere allerdings stärker von Beschleunigungseffekten profitieren, was Zauber wie HAST bei schnellen Charakteren weniger Wirksam machen würde.
...
Gleiches Argument wie oben.
Falls ein Beschleunigungszauber einfach einen festen Wert auf die Agilität addiert wäre natürlich einem schnellen Charakter weniger geholfen.
Falls aber ein prozentualer Bonus gegeben wird hat es bei allen Charakteren den gleichen Effekt.
Was du über die "zu kleinen Werte am Anfang des Spiels" sagst stimmt aber. Kleine Zahlen haben große Diskrepanzen und daher auch einen starken Effekt. Es ist jedem selbst überlassen wie er / sie ihre Zahlen wählt.
Bei meinem System ist aber sicher gestellt, dass ein Charakter mit Agilität von 2 (exakt) doppelt so häufig am Zug ist wie ein Charakter mit Agilität von 1.
Edit:
Ich habe ein Beispiel einmal schnell durch ein Script laufen lassen:
Folgende Werte wurden gewählt:
Rogue Agi = 5
Fighter Agi = 4
Mage Agi = 3
Goblin Agi = 2
Ogre Agi = 1
MaxRdy ist egal, da es keinen Unterschied macht bei festen Werten.
@casea_andy:
Dein System hat ganz andere Nachteile:
Das bedeutet, je niedriger die Agilität des Charakters desto geringer ist die Wartezeit, korrekt? Das heist die Agilität hat ein festes Maximum über welches sie nicht hinaus wachsen kann. Andernfalls wäre die Wartezeit irgendwann 0 und der Charakter wäre permanent am Zug.
...
Nein
Deine Interpretation würde vorraussetzen, das der AGI Wert 1:1 in die Zugreihenfolge überschrieben wird. Das ist aber wiederum eine schlechte Idee. Besser wäre es hier, meiner Ansicht nach ein System, das auf Substitution basiert. Je höher der AGI-Wert ist, desto weniger Punkte werden auf die Wartezeit addiert. Allerdings auch hier nicht 1:1, man kann durchaus bei steigenden Attributwerten größere Ruhebereiche wählen. Also z.B. von 1-10 ändern jeder Punkt die zugreihenfolge. Von 11 - 20 nur noch jeder zweite, von 21-30 nur noch jeder dritte ... und so weiter.
Zitat
Ganz schlechte Idee. Das Problem, dass langsame Charaktere zu langsam sind ist nicht das Problem des Kampfsystems, sondern von demjenigen, der so schlechte Werte gewählt hat.
Das was du hier schreibst ist eine Holzhammer Methode um den Effekteines Problems zu beseitigen, aber nicht das Problem selbst.
...
Du hast mich falsch verstanden. Dein System lässt sich dahingehend ausnutzen, durch hohe Differenzen Züge komplett aus der Leiste zu kicken. Wenn ich z.B. einen sehr schnellen Charakter auf Stufe 80 Habe, und damit meine bisher nie gespielten Stufe 1 Charaktere "Hochziehen" möchte, kann ich das bei deinem System auch noch an relativ hochstufigen Gegnern super tun.
Der eine Stufe 80 wäre wohl selbst im Vergleich zu Stufe 30 oder 35 Gegnern so schnell, dass diese innerhalb der ersten 2, 3 Kampfzüge gar nicht mitspielen dürften.
Derartige Auflevel-Exploits wären dann absolut gefahrlos, weil der Spieler Stufe 1 Charaktere an Stufe 30 monstern hochleveln könnte, ohne Angst davor haben zu müssen, dass der Gegner die Schwachen Charaktere direkt tötet... denn er würde aufgrund der Geschwindigkeit des schnelleren Charakters ja nie zum Zuge kommen. Berechnet man dann noch ggf. Ausrüstung mit ein, die die AGI steigert, oder zauber wie Hast und Co. ließe sich das vielelciht so weit hochschaukeln, dass auch noch Stufe 60 Monster wehrlos von einem einzigen Spielercharakter nidergemäht werden können und die anderen Gruppenslots dann mit Nachzöglingen zu besetzen wären.
Zitat
Um "eine Runde" verzögern kann man hier nicht sagen, da es nicht rundenbasiert ist. Es gibt vieles was man machen kann, zum Beispiel den Rdy-Wert auf die negative Agilität des Charakters zu setzen. Damit wären alle Charaktere gleich stark betroffen.
Gleiches Argument wie oben.
Falls ein Beschleunigungszauber einfach einen festen Wert auf die Agilität addiert wäre natürlich einem schnellen Charakter weniger geholfen.
Falls aber ein prozentualer Bonus gegeben wird hat es bei allen Charakteren den gleichen Effekt.
...
Dann brauchst du aber auch für jeden Charakter einen eigenen RDY wert, womit dein System seinen Vorteil - der einfacheren Berechnung - verlieren würde.
Nein
Deine Interpretation würde vorraussetzen, das der AGI Wert 1:1 in die Zugreihenfolge überschrieben wird. Das ist aber wiederum eine schlechte Idee. Besser wäre es hier, meiner Ansicht nach ein System, das auf Substitution basiert. Je höher der AGI-Wert ist, desto weniger Punkte werden auf die Wartezeit addiert. Allerdings auch hier nicht 1:1, man kann durchaus bei steigenden Attributwerten größere Ruhebereiche wählen. Also z.B. von 1-10 ändern jeder Punkt die zugreihenfolge. Von 11 - 20 nur noch jeder zweite, von 21-30 nur noch jeder dritte ... und so weiter.
...
Das ist ein simples Mathematisches Konzept.
Du hast eine Wartezeit > 0.
Die Wartezeit ist antiproportional abhängig von dem Agilitätswert.
Daraus folgt zwangsläufig, dass der Agilitätswert einen Maximalwert hat, ab welchem er nichtmehr steigen kann.
Zitat
Du hast mich falsch verstanden. Dein System lässt sich dahingehend ausnutzen, durch hohe Differenzen Züge komplett aus der Leiste zu kicken. Wenn ich z.B. einen sehr schnellen Charakter auf Stufe 80 Habe, und damit meine bisher nie gespielten Stufe 1 Charaktere "Hochziehen" möchte, kann ich das bei deinem System auch noch an relativ hochstufigen Gegnern super tun.
Der eine Stufe 80 wäre wohl selbst im Vergleich zu Stufe 30 oder 35 Gegnern so schnell, dass diese innerhalb der ersten 2, 3 Kampfzüge gar nicht mitspielen dürften.
Derartige Auflevel-Exploits wären dann absolut gefahrlos, weil der Spieler Stufe 1 Charaktere an Stufe 30 monstern hochleveln könnte, ohne Angst davor haben zu müssen, dass der Gegner die Schwachen Charaktere direkt tötet... denn er würde aufgrund der Geschwindigkeit des schnelleren Charakters ja nie zum Zuge kommen. Berechnet man dann noch ggf. Ausrüstung mit ein, die die AGI steigert, oder zauber wie Hast und Co. ließe sich das vielelciht so weit hochschaukeln, dass auch noch Stufe 60 Monster wehrlos von einem einzigen Spielercharakter nidergemäht werden können und die anderen Gruppenslots dann mit Nachzöglingen zu besetzen wären.
...
Wenn du es als etwas schlechtes ansiehst, dass ein Charakter mit einem viel höheren Agilitätswert sehr viel öfter dran kommt als ein Charakter mit einem grauenvoll niedrigen Agilitätswert, dann kannst du wohl sagen, dass mein System schlecht ist. Ich stimm der Aussage aber nicht zu.
Natürlich kann man auch bei meinem System, genauso wie du es für deines vorgeschlagen hast, eine Holzhammer-Methode ansetzen und die Agilitätswerte des Charakters progressiv verringern mit jedem Zug, welchen er durchführt, bevor der langsamste Charakter am Zug war. Allerdings werden die Zugreihenfolgen dadurch gefälscht und Agilität verliert an taktischem Wert.
Zitat
Dann brauchst du aber auch für jeden Charakter einen eigenen RDY wert, womit dein System seinen Vorteil - der einfacheren Berechnung - verlieren würde.
...
Mein System schreibt sogar vor, dass jeder Charakter seinen eigenen Ready-Wert hat. Das habe ich im ersten Satz gesagt.
Zitat
Hier ist mein Ansatz für das Ganze wie ich es einmal vor langer Zeit ausgearbeitet hatte:
Jeder Kämpfer besitzt 2 Werte, einen Agilitäts-Wert (Agi) und einen Ready-Wert (Rdy).
[...]
Das ist ein simples Mathematisches Konzept.
Du hast eine Wartezeit > 0.
Die Wartezeit ist antiproportional abhängig von dem Agilitätswert.
Daraus folgt zwangsläufig, dass der Agilitätswert einen Maximalwert hat, ab welchem er nichtmehr steigen kann.
...
Das ist für die Entwicklung eines soclhen Systems aber vollkommen irrelevant, so lange dieser theoretischer Maximalwert großer ist, als der praktische maximalwert, den du im Spiel erreichen kannst. Wenn du das System so auslegst, dass ein Charakter ab einem AGI-Wert von 1000 durchgehend am Zug währe, du den Werteprogress im Spiel aber so deckelst, dass ein Charakter auf Stufe 99 nur irgendwas von um die 60 AGI haben kann, dann spielt das schlicht keine Rolle.
Zitat
Wenn du es als etwas schlechtes ansiehst, dass ein Charakter mit einem viel höheren Agilitätswert sehr viel öfter dran kommt als ein Charakter mit einem grauenvoll niedrigen Agilitätswert, dann kannst du wohl sagen, dass mein System schlecht ist. Ich stimm der Aussage aber nicht zu.
...
Ja, wenn das System nach oben vollkommen ofen ist, und zu lässt, dass ein Charakter so schnell werden kann, dass er doppelt so oft angreifen kann, wie ein sowieso schon schnelles monster, dann empfinde ich das durchaus als schlecht
Zitat
Natürlich kann man auch bei meinem System, genauso wie du es für deines vorgeschlagen hast, eine Holzhammer-Methode ansetzen und die Agilitätswerte des Charakters progressiv verringern mit jedem Zug, welchen er durchführt, bevor der langsamste Charakter am Zug war. Allerdings werden die Zugreihenfolgen dadurch gefälscht und Agilität verliert an taktischem Wert.
...
Das ist eine Milchmädchenrechung basierend auf dem Umstand, das dein System hierbei auch schwächen aufweist
Das Agilität bei meinem System an taktischem Wert verliert ist subjektiv nur deshalb der fall, weil sie bei deinem total Overpowered ist, was du allerdings wohl nicht bemerkst.
In einem Rechnungssystem in dem Doppelte Agilität einer doppelten Zugzahl entspricht, ist Agilität DER Überstat schlechthin. Eine Verdoppelung der Agilität etspräche dabei nämlich zu 100% einer Verdoppelung von ATK, MAT, DEF und MDF.
Wenn ich mit 5 Schaden Zwei Mal angreife, mache ich den selben schaden, als wenn ich mit 10 Schaden ein mal angreife. Nur dass der doppelte Zug ebend nicht nur den Angriffs Schaden steigert, sondern im gleichen Maße auch die Magiekraft und überhaupt die flexibilität des Charakters. Durch Einbeziehung defensiver Fähigkeiten würde hier sogar die Defensive von mehr AGI profitieren, da ein Charakter, der doppelt so oft ziehen kann, wie sein Gegner, auch noch dazu imstande wäre, innerhalb einer Runde anzugreifen UND zu blocken.
Ein Charakter, der zwar nur halb so viel Schaden macht wie ein Krieger und nur halb so viel heilt, wie ein magier, dafür aber doppelt so oft zieht, währe in der Lage, den selben Effekt wie die anderen Charaktere zu erzielen, aber ebend viel flexibler, da er seine Effektive leistung pro Runde beispielweise zu 50% auf heilung und Angriff aufteilen könnte.
Damit wäre AGI > All.
Und so sollte es nicht sein.