EventsProfessional  Die Zugreihenfolge im Kampf
Vorüberlegungen Ia - Wer ist dran? I - Die erste Ereignis-Seite

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.
Darstellung der Stichpunkte in MML
 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]
  [Bedingung][Variable][Chara-Counter][anders als][7]
  [Ja-Fall]
  [Variable [Variable [Char-Var No.] übergibt Nummer][<-- [Wert setzen][Zufall zwischen [1] und [8]]]
[Bedingung][Variable][Char-Var No.][anders als][115*]
  [Ja-Fall]
  [Variable [Chara-Counter]][<-- [+][1]]
[Ereignis aufrufen][Kartenereignis [Zeichenfolge-Ereignis]][Ereignis-Seite [2]]
transparent transparent
  [Nein-Fall]
  [Variable [Char-Var No.]][<-- [+][1]]
transparent transparent
  [Nein-Fall]
  [Schleife ausbruch]
[Schleife Ende]
[Ereignisseite 2][Push Key]
Der erstellte Maker-Code auf Seite 1 des Ereignisses
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
<>
Vorüberlegungen Ib - Wer ist dran? II - Die zweite Ereignis-Seite

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.
Darstellung der Stichpunkte in MML

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]
  [Bedingung][Variable][Chara-Counter][anders als][7]
  [Ja-Fall]
  [Variable [Variable [Char-Var No.] übergibt Nummer][<-- [Wert setzen][Zufall zwischen [1] und [8]]]
[Bedingung][Variable][Char-Var No.][anders als][115*]
  [Ja-Fall]
  [Variable [Chara-Counter]][<-- [+][1]]
[Ereignis aufrufen][Kartenereignis [Zeichenfolge-Ereignis]][Ereignis-Seite [2]]
transparent transparent
  [Nein-Fall]
  [Variable [Char-Var No.]][<-- [+][1]]
transparent transparent
  [Nein-Fall]
  [Schleife ausbruch]

[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]
  [Variable [Temp-Counter]][<-- [+][1]]
[Variable [Chara-Counter]][<-- [-][1]]
[Variable [Char-Var No.]][<-- [-][Variable [Temp-Counter]]
[Variable [Temp-Number - Old]][<-- [Wert setzen][Variable [Variable [Char-Var No.] übergibt Nummer]]
[Bedingung][Variable][Temp-Number - Old][gleich][Variable][Temp-Number New]
  [Ja-Fall]
  [Variable [Chara-Counter]][<-- [+][Variable [Temp-Counter]]
[Variable [Chara-Counter]][<-- [-][1]]
[Variable [Char-Var No.]][<-- [-][Variable [Temp-Counter]]]
[Schleife Ausbruch]
transparent transparent
  [Nein-Fall]
  [Variable [Char-Var No.]][<-- [+][Variable [Temp-Counter]]]
[Bedingung][Variable][Chara-Counter][gleich][0]
  [Ja-Fall]
  [Variable [Chara-Counter]][<-- [Wert setzen][Variable [Temp-Counter]]
[Variable [Char-Var No.]][<-- [+][1]]
[Schleife Ausbruch]
[Schleife Ende]
Der erstellte Maker-Code auf Seite 2 des Ereignisses
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
<>
Schlusswort für dieses Kapitel

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.

[Beispielhaftes Aussehen der Karte im Maker]

[Beispielhaftes Aussehen während des Testspiels]