![]() ![]() |
Die Zugreihenfolge im Kampf |
In fast jedem rundenbasierendem Kampf ist es so, dass zufällig bestimmt wird, wer den ersten Angriff starten darf. Wir werden hier noch einen Schritt weiter gehen und sagen, wer denn genau wann eine Aktion ausführen darf. Hierfür bestimmen wir für den Anfang eine Standard-Rangfolge für die Kämpfe. Maximal 8 Charaktere sind am einem Kampf beteiligt:
Nummer: | Charakter: |
1 | Held 1 |
2 | Held 2 |
3 | Held 3 |
4 | Held 4 |
5 | Gegner 1 |
6 | Gegner 2 |
7 | Gegner 3 |
8 | Gegner 4 |
Nach dieser Tabelle bestimmen wir genau, wer wann dran ist. Vom Prinzip her brauchen wir also acht Variablen, die mit Namen wie beispielsweise "Chara #1" bis "Chara #8" versehen werden. In diesen Variablen wiederum werden zufällig bestimmte Zahlen zwischen 1 und 8 gespeichert, wobei hier das doppelte Vorkommen der Zahlen abzufangen ist. Insgesamt kommen hier 13 Variablen zum Einsatz, mit denen "gespielt" werden wird.
![]() |
Für den Anfang legt ihr ein neues Ereignis mit zwei Ereignis-Seiten an,
die alle beide als "Push Key" starten sollen. In unserem Beispiel nennen wir
das Ereignis "Zugreihenfolge". |
![]() |
Als erstes Legt ihr eine Variable an, der ihr den Namen "Char-Var No."
gebt. Sie soll zuerst die Nummer der direkt nachfolgenden Variable speichern
(in unserem Beispiel 115). Diese Variable wird durch die nachfolgenden
Variablen zählen und deren Nummern vorgeben. |
![]() |
Direkt danach legt ihr eine weitere Variable an, der ihr den Namen "Chara-Counter"
gebt. Sie soll den Wert "0" haben und wird später die Anzahl bereits
belegter Variablen - 1 speichern (also maximal 7). |
![]() |
Darunter brauchen wir eine Endlos-Schleife (Zyklus, Cycle). |
![]() |
In diesem Cycle beginnt alles mit einer Bedingung, die abfragt, ob der
Wert der Variable "Chara-Counter" anders als 7 ist. Einen Nein-Fall brauchen
wir hier. |
![]() |
Im Nein-Fall der Bedingung soll mit einem "Break"-Kommando
aus der Endlosschleife ausgebrochen werden. |
![]() |
Im Ja-Fall der Bedingung hingegen soll in die
Variable, deren Nummer von der Variable vorgegeben wird, die ihr "Char-Var
No." genannt habt, eine Zufallszahl zwischen 1 und 8 geschrieben werden. |
![]() |
Hiernach soll eine Bedingung abfragen, ob der Wert
der Variable "Char-Var No." anders als der Wert ist, den ihr ganz zu Anfang
hineingeschrieben habt (in unserem Beispiel also anders als 115). Auch hier
brauchen wir wieder einen Nein-Fall |
![]() |
Im Nein-Fall dieser Bedingung soll der Wert der
Variable "Char-Var No." um 1 erhöht werden. |
![]() |
Im Ja-Fall der Bedingung hingegen soll der Wert
der Variable "Chara-Counter" um 1 erhöht werden. |
![]() |
Direkt danach folgt der Aufruf der zweiten Ereignis-Seite dieses Ereignisses, das ihr gerade bearbeitet. |
Zugreihenfolge-Ereignis | ||||||||||||||||||||||
[Ereignisseite 1][Push Key] [Variable [Char-Var No.]][<-- [Wert setzen][115*]] /* * Wie in den Stichpunkten bereits erwähnt ist die * 115 nur ein Beispielwert. Setzt hier den Wert * ein, welcher der Variablennummer der direkt * auf die Variable "Char-Var No." folgenden Var- * iable entspricht */ [Variable [Chara-Counter]][<-- [Wert setzen][0]] [Schleife Beginn]
|
||||||||||||||||||||||
[Ereignisseite 2][Push Key] |
Im englischem Maker |
<>Change Var: Var[oooa: Char-Var No.] (Set)-
115 <>Change Var: Var[ooob: Chara-Counter] (Set)- 0 <>Loop <>If Var(ooob: Chara-Counter) 7(<>) <>Change Var: [Var[oooa]] (Set)-Random(1 to 8) <>If Var(oooa: Char-Var No) 115(<>) <>Change Var: Var[ooob: Chara-Counter] (+)- 1 <>Call Event: ZugreihenfolgePG [2] <> :Else Case <>Change Var: Var[oooa: Char-Var No.] (+)- 1 <> :End Case <> :Else Case <>Break <> :End Case <> :End Loop <> |
Im deutschem Maker (V1.10c) |
<>Var. ändern:[oooa:Char-Var No.]Wert,
115 <>Var. ändern:[ooob:Chara-Counter]Wert, 0 <>Schleife <>Bedingung:Varbl[ooob: Chara-Counter]-7andr <>Var. ändern:[V[oooa]]Wert, Zufl[1*8] <>Bedingung:Varbl[oooa:Char-Var No.]-115andr <>Var. ändern:[ooob:Chara-Counter]+, 1 <>Ereignis aufrufen: Zugreihenfolge[2] <> :Ansonsten <>Var. ändern:[oooa:Char-Var No.]+, 1 <> :End-Fall <> :Ansonsten <>Schleife stoppen <> :End-Fall <> :Schleifenende <> |
Was ihr nun angelegt habt ist im Endeffekt nichts weiter, als dass in die erste der acht Variablen, die durch "Char-Var No." angesteuert werden, eine Zufallszahl geschrieben wird. Ab der zweiten Variable bis zur achten wird die Ereignis-Seite 2 des Ereignisses "Zugreihenfolge" aufgerufen, wo der Abgleich geschehen soll, ob in einer der acht Variablen eine Zahl zwischen 1 und 8 doppelt vor kommt.
Hierfür muss ein zweiter Counter ins Spiel kommen, der von der Variable mit
dem neustem Zufallswert immer weiter zur ältesten Variable zurückzählt und dann
den Wertvergleich ermöglicht. Nach einem Vergleich und keiner
Übereinstimmung muss dann alles wieder auf den Ursprungszustand versetzt und ein
Abgleich mit einer noch älteren Variable vorgenommen werden.
Ein Problem, das uns im Weg steht ist, dass immer erst aus den verwendeten
Variablen (diejenigen, die die Zufallszahlen speichern), die Werte erst in neue
Variablen ausgelesen werden müssen, ehe ein Vergleich der Werte möglich ist.
Aus dieser Ereignis-Seite kann es nur zwei Ausbrüche geben: Der erste ist, wenn
der neuste Variablenwert mit keinem der älteren übereinstimmt und der zweite
ist, wenn es eine Übereinstimmung gibt. Bei letzterem muss der alte Stand des
Chara-Counters wiederhergestellt und um 1 vermindert werden. Auch die Variable "Char-Var
No." muss um 1 vermindert werden, damit dieser "doppelte Wert" bei einem neuem
Durchlauf auch überschrieben wird.
Nun geht es darum, dies im Maker umzusetzen:
![]() |
Begebt euch auf die zweite Ereignis-Seite des Ereignisses und legt
zuerst zwei Variablen an, die ihr "Temp-Counter" und "Temp-Number-Old"
nennt. Beide sollen als Startwert eine 0 erhalten. Legt noch eine dritte Variable an, die ihr "Temp-Number-New" nennt. Sie soll als Startwert den Wert der Variable erhalten, deren Nummer von der Variable "Char-Var No." übergeben wird. |
![]() |
Danach folgt eine Endlosschleife. |
![]() |
In dieser Endlosschleife wird dem Wert der Variable "Temp-Counter" die
Zahl "1" dazugezählt und vom Wert der Variable "Chara-Counter" abgezogen. |
![]() |
Direkt danach wird von der Variable "Char-Var No." der Wert der Variable
"Temp-Counter" abgezogen. |
![]() |
Nun wird in der Variable, die ihr "Temp-Number-Old" genannt habt, der
Wert der Variable gespeichert, deren Nummer von der Variable "Char-Var No."
übergeben wird. |
![]() |
Hiernach folgt eine Bedingung, die abfragt, ob der Wert in der Variable
"Temp-Number-Old" mit dem Wert in der Variable "Temp-Number-New"
übereinstimmt. Hier brauchen wir einen Nein-Fall. |
![]() |
Im Nein-Fall der Bedingung soll zum Wert der
Variable "Char-Var No." der Wert der Variable "Temp-Counter" hinzugezählt
werden. |
![]() |
Im Ja-Fall der Bedingung hingegen soll zum Wert
der Variable "Chara-Counter" der Wert der Variable "Temp-Counter"
hinzugezählt werden. Danach wird der Wert der Variable "Chara-Counter" um 1 verringert. |
![]() |
Danach soll dem Wert der Variable "Char-Var No."
der Wert der Variable "Temp-Counter" hinzugezählt werden. |
![]() |
Dem folgt der Schleifenausbruch. |
![]() |
Nach dem End-Fall der Bedingung folgt eine weitere Bedingung, die
abfragt, ob der Wert der Variable "Chara-Counter" dem Wert "0" entspricht
(also alle Chara-Variablen durchgeprüft wurden). Einen Nein-Fall brauchen
wir hier nicht. |
![]() |
Im Ja-Fall der Bedingung soll der Wert der Variable "Temp-Counter" in
der Variable "Chara-Counter" gespeichert werden. Direkt danach soll noch zum Wert in der Variable "Char-Var No." der Wert "1" hinzugezählt werden, ehe der Schleifenausbruch erfolgt. |
Was neu hinzugekommen ist, ist fett und kursiv hervorgehoben
Zugreihenfolge-Ereignis | ||||||||||||||||||||||
[Ereignisseite 1][Push Key] [Variable [Char-Var No.]][<-- [Wert setzen][115*]] /* * Wie in den Stichpunkten bereits erwähnt ist die * 115 nur ein Beispielwert. Setzt hier den Wert * ein, welcher der Variablennummer der direkt * auf die Variable "Char-Var No." folgenden Var- * iable entspricht */ [Variable [Chara-Counter]][<-- [Wert setzen][0]] [Schleife Beginn]
[Schleife Ende] |
||||||||||||||||||||||
[Ereignisseite 2][Push Key] [Variable [Temp-Counter]][<-- [Wert setzen][0]] [Variable [Temp-Number - Old]][<-- [Wert setzen][0]] [Variable [Temp-Number - New]][<-- [Wert setzen][Variable [Variable [Char-Var No.] übergibt Nummer]] [Schleife Beginn]
|
Im englischem Maker |
<>Change Var: Var[ccc1: Temp-Counter]
(Set)-0 <>Change Var: Var[ccc2: Temp-Number - Old] (Set)-0 <>Change Var: Var[ccc3: Temp-Number - New] (Set)-Var[Var[oooa]] <>Loop <>Change Var: Var[ccc1: Temp-Counter] (+)-1 <>Change Var: Var[ooob: Chara-Counter] (-)-1 <>Change Var: Var[oooa: Char-Var No.] (-)-Var[ccc1] <>Change Var: Var[ccc2: Temp-Number - Old] (Set)- Var[Var[oooa]] <>If (ccc2: Temp-Number - Old) V[ccc3] (=) <>Change Var: Var[ooob: Chara-Counter] (+)-Var[ccc1) <>Change Var: Var[ooob: Chara-Counter] (-)-1 <>Change Var: Var[oooa: Char-Var No.] (+)- Var[ccc1] <>Break :Else Case <>Change Var: Var[oooa: Char-Var No.] (+)- Var[ccc1] <> :End Case <>If Var(ooob: Chara-Counter) + <>Change Var: Var[ooob: Chara-Counter] (Set)-Var[ccc1] <>Change Var: Var[oooa: Char-Var No.] (+)-1 <>Break <> :End Case <> :End Loop <> |
Im deutschem Maker (V1.10c) |
<>Var. ändern:[ccc1: Temp-Counter]Wert, 0 <>Var. ändern:[ccc2: Temp-Number - Old]Wert, 0 <>Var. ändern:[ccc3] Temp-Number - New]Wert, Var.[V[oooa]] Inh. <>Schleife <>Var. ändern:[ccc1: Temp-Counter]+, 1 <>Var. ändern:[ooob: Chara-Counter]-, 1 <>Var. ändern:[oooa: Char-Var No.]-, Var.[ccc1]Wert <>Var. ändern:[ccc2: Temp-Number - Old]Wert, Var[V[oooa]] Inh. <>Bedingung:Varbl[ccc2: Temp-Number - Old]-V[ccc3]Gleich <>Var. ändern:[ooob: Chara-Counter]+, Var.[ccc1]Wert <>Var. ändern:[ooob: Chara-Counter]-, 1 <>Var. ändern:[oooa: Char-Var No.]+, Var.[ccc1]Wert <>Schleife stoppen <> :Ansonsten <>Var. ändern:[oooa: Char-Var No.]+, Var.[ccc1]Wert <> :End-Fall <>Bedingung:Varbl[ooob: Chara-Counter]-0 <>Var. ändern:[ooob: Chara-Counter]Wert, Var.[ccc1]Wert <>Var. ändern:[oooa: Char-Var No.]+, 1 <>Schleife stoppen <> :End-Fall <> :Schleifenende <> |
Zum Abschluss muss noch im Steuerungs-Ereignis über dem Ereigniskommando, das den Schalter "SKS-Start - done" auf "AN" stellt, ein weiteres eingefügt werden. Dies soll vom eben erstelltem Ereignis die erste Ereignis-Seite aufrufen, was eine Zufallsbestimmung der Reihenfolge in die Gänge leitet, nach der alle an einem Kampf beteiligten Charaktere zum Zug kommen. Wichtig ist, dass auch wenn die Heldentruppe aus weniger als 4 Personen besteht und es weniger als vier Gegner hat, immer die acht Zufallszahlen verwendet werden (!). Wie ihr an der Beispieldarstellung des momentanen SKS-Standes während eines Testspiels sehen werdet, hat sich nichts geändert. Das, was das in diesem Kapitel erstellte Ereignis bewirkt, werdet ihr erst während des Spiels merken, wenn das SKS soweit fertig ist und ihr ein eigenes Menü für die KS-Steuerung angelegt habt.