"Vibration of Nature" - It's a long story
1. Die Anzeige muss so gestalltet werden, dass an jeder Position jeder Kampfteilnehmer angezeigt werden kann (theoretisch kann ein Kampfteilnehmer nämlich so schnell sein, dass er jedesmal am Zug ist).
2. Du berechnest für jeden Kampfteilnehmer einen "MaxWarteWert"
Der berechnetsich wie folgt:
MaxWarteWert(Kampfteilnehmer)=Konstante / Geschwindigkeit(Kampfteilnehmer)
Dabei ist die Konstante eine Hohe Zahl (etwa 10000), die bei jedem Kampfteilnehmer gleich ist.
3. Neben dem MaxWarteWert hat jeder Kampfteilnehmer noch einen (normalen) WarteWert. Das ist irgend ein Wert, der noch angibt, wie lange der Held der Held warten muss.
Der WarteWert ist maximal so groß wie der MaxWarteWert.
Am anfang des Kampfes sollte der WarteWert für jeden Kampfteilnehmer zufälligsein, das berechnest du am besten so:
WarteWert(Kampfteilnehmer)=Zufallszahl von 0 bis Konstante / Geschwindigkeit(Kampfteilnehmer)
4. Die Reihenfolge berechnest du nun wie folgt:
Für einen Zug hast du alle WarteWerte und MaxWarteWerte gegeben.
Erstens:
Bestimme den Kampfteilnehmer mit dem Kleinsten WarteWert.
Dieser Kampfteilnehmer ist als nächstes am Zug.
Zweitens:
Ziehe von den WarteWerte aller anderen Kampfteilnehmern den kleinsten WarteWert (der vom ersten Punk) ab.
Drittens:
Setze den WarteWert von dem Kampfteilnehmer, der am Zug ist, auf den MaxWarteWert.
Viertens:
Wiederhole das ganze, um den nächsten Zug zu bestimmen, so oft, bis du genug Züge vorberechnet hast für die Anzeige.
So kannst du nach und nach bestimmen, welcher Kampfteilnehmer als 1., dann als 2., dann als 3. usw. dran ist.
Das sind die Grundlagen, um so eine Anzeige zu berechnen. Nun gibt es natürlich noch einige Tücken, die Berücksichtigt werden müssen.
1) Wartezeit verkürzung:
Sollte die Aktion, die ausgeführt werden, einen mit Faktor F multiplizierte WarteZeit nach sich ziehen, kann man folgendes machen, um das in der Reihenfolge Berechnung zu berücksichtigen:
Anstatt bei dem Kampfteilnehmer, der gerade am Zug ist, den WarteWert auf den MaxWarteWert zu setzen, setzt man ihn auf MaxWarteWert*F
Ist F etwa 0,5 (im Maker also *50/100 oder was auch immer), hat der Kampfteilnehmer nur die halbe Wartezeit bis zum nächsten Zug.
2) Geschwindigkeits Änderung während des Kampfes.
Hier muss man beim betroffenen Kampfteilnehmer sowohl den MaxWarteWert, als auch den WarteWert umändern.
Die Umrechnung funktioniert dabei so:
NeuerWert= AlterWert*AlteGeschwindigkeit/ NeueGEschwindigkeit
Sowohl bei WarteWert als auch MaxWarteWert.
Bei zu vielen GEschwindigkeitswechseln, kann dies zu rundungsfehlern führen.
Deswegen empfiehlt es sich zumindest den MaxWarteWert doch besser wieder
mithilfe der Konstante komplett neu zuberechnen, also:
MaxWarteWert= Konstante/ Neue GEschwindigkeit.
Beim normalen WarteWert geht dies nicht, dort ist es aber auch nicht so entscheident, da der Wert weitgehend temporär ist.
--------------------------------------
So in etwa würde ich es umsetzen.
In etwa so ist es auch in Velsarbor umgesetzt, vielleicht nur etwas umständlicher.
Ich hoffe ich konnte helfen.
C ya
Lachsen