PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu einem CTB-KS



Ultima
19.02.2007, 22:22
Hallo @all,

mein Problem ist zurzeit ein CTB-KS.:)
Wer es nicht kennen sollte, es ist das KS aus Spielen wie FFX/FF10.
Es läuft alles prima. Was mir aber nicht gefällt ist folgendes:

Die Reihenfolge soll sich ja je nachdem welche Aktion man nimmt
verändern. Also wenn man z.b. in die Abwehr geht dann kommt der
Kämpfer auf der Liste mehrmals vor. Ich habe es zwar schon hinbekommen,
jedoch gefällt es mir nicht. Es ist ziemlich ausbaufähig.

Wie bekommt man so etwas am besten hin?
Hat vielleicht jemand Ideen?
Die Möglichkeiten sind unbegrenzt, Ideen leider schon.:D

Hoffe auf Hilfe

mfg Ultima

Xered
19.02.2007, 22:31
du solltest vielleciht mal das ks aus deinem Spiel kopieren in ein extra spiel, natürlich so das alles läuft und es als spiel hier in den thread stellen.
Dann können wir uns es ansehen, und dir auf jeden fall besser helfen.

Denn so kann ich mir j aschlecht vorstellen wie du das umgesetzt hast und was es zu verbessern gibt.

Und ich glaube das gehört ins Technik Forum.

Ultima
19.02.2007, 23:49
Nun, ich weiß nicht wie es Lachsen z.b. in seinem KS gemacht hat,
aber ich setze die Reihenfolge der Kämpfer so fest :

Chara 1 hat eine ATB-Leiste (genau so ist es, das berühmte CTB-KS ist im Grunde
nichts anderes als ein stinknormales ATB-KS Oo ).
Je nach Geschick des Charas steigt sie schneller oder halt langsamer.
Sobald die ATB-Leiste des Charas auf einen Wert, sagen wir mal zum beispiel 30
angelangt folgt die Abfrage welche "Plätze" noch frei sind.
Je nachdem welcher "Platz" nun frei ist wird der Chara auf die Position gesetzt.
Wenn bereits das Maximum an Positionen verwendet wird, bei mir also 10
so werden die Berechnungen gestoppt. Nachdem der auf Position 1 sich befindete
Kämpfer seinen Zug gemacht hat werden die Positionen alle nach oben geschoben.
Pos. 3 wird zu 2, Pos. 2 zu 1 und so eben.

Beim verändern der Positionen wird zu Zugbeginn eine Variable bei mir per Zufall
auf den Wert 2-10 gesetzt. Je nachdem welchen Wert die Variable nun hat
wird auch diese Position bei mir verändert. Ist der Wert der Variable auf 5
so wird der Chara wenn er beispielsweise Abwehr wählt auf Pos.5 geschoben
und die ganzen anderen unter ihm werden nunmal "zurückgeschoben".
Pos.2 zu 3, Pos.3 zu 4 u.s.w

Wie man bestimmt merkt ist diese Mehode jedoch ziemlich Noobig.
Daher frage ich ob jemand eine bessere kennt.

mfg Ultima

P.S.@Mods.: Stimmt, dies gehört ins Technikforum. Hab´ ich leider verpeilt.
Tut mir leid. Kann das dorthin verschoben werden ?

Ultima
17.03.2007, 21:13
*Push*

Marian
17.03.2007, 21:36
ich empfehle dir, bei velsarbor zu gucken, dass ist meiner ansicht nach die einfachste variante, aber da muss man auch erstmal durchblicken.

ansonsten such mal nach übelster held sein ks. kann auch sein, dass er es uebelster geschrieben hat, aber das ist auch so. nur hab ich mich damit noch nicht großartig auseinandergesetzt..

Lachsen
18.03.2007, 15:03
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

Ultima
19.03.2007, 19:01
Vielen dank, Lachsen.:)
Ich werde versuchen es so in der Art umzusetzen.
(Vielleicht müsste ich es mir noch ein paar mal durchlesen... )

Helfen tut´s.
Danke sehr.

mfg Ultima