EventsProfessional  Die Gegner-KI und die Schadensermittlung
Vorüberlegungen I - Die Gegner-KI

Bevor ein Gegner überhaupt eine Fertigkeit ausüben kann, sollte sein Verhalten zum Tragen kommen, also die Art und Weise, nach der ein Gegner sein Ziel auswählt, womit er angreift und dergleichen. Gerade hierfür kommt hier die Variable "Chara-Move-ID" zum Einsatz, um die Gegner untereinander unterscheiden zu können (auch dahingehend, ob es sich um einen CharSet-Gegner oder einen Picture-Gegner handelt). Hier noch einmal die Tabelle:

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

Ihr seht also, dass die Werte 5 bis 8 für die Gegner stehen, also für unsere Zwecke die wichtigen sind. Gegner 1 bis Gegner 3 sollen hier die CharSet-Gegner sein, während Gegner 4 demnach der Picture-Gegner ist. Aber wie soll sich ein Gegner verhalten? Nach welchen Kriterien geht ein Angreifer vor, wenn er sich um sein Ziel kümmert? Hier kann man schon auf typisches menschliches Verhalten zurückgreifen:

Welcher der Gegner ist der körperlich schwächere? Hier können die Gegner das an Werten wie der Angriffskraft erkennen.

Welcher Gegner hat die geringere, maximale Lebenskraft und die größeren Wunden? Der Chara mit der geringsten, maximalen Lebenskraft gilt bei den Angreifern als Schwächling und wird eher angegriffen als ein mutiger, starker Gegner.

Alternativ kann hier auch ein zufällig ausgewähltes Ziel durch die Gegner angegriffen werden. In unserem Beispiel gehen wir zuerst davon aus, dass die Gegner eine 50:50-Chance haben, entweder ein zufälliges oder ein aufgrund "körperlicher Merkmale" bestimmtes Ziel anzugreifen.

. Erstellt ein neues, freies Ereignis, das durch Tastendruck gestartet werden soll. Nennt es "Gegnerskills".
 
. Auf der ersten Ereignis-Seite bestimmt ihr eine neue, freie Variable, der ihr den Namen "Temp-Randomized" gebt. Sie soll eine Zufallszahl zwischen 1 und 100 speichern.
 
. Dieser Variable folgt eine Bedingung, die abfragt, ob der Wert der Variable "Temp-Randomized" größer als 50 ist. Einen Nein-Fall brauchen wir hier unbedingt.
 
. Im Ja-Fall der Bedingung soll nun der "schwächste" Gegner gewählt werden. Hierfür braucht ihr zum Anfang eine neue, freie Variable, die ihr "Temp-Hero-Var-ID" nennt. Sie soll die Nummer der Variable speichern, die ihr "Held #1" genannt habt (Im Kapitel, das den Einstieg und das Verlassen des SKS erklärt). In unserem Beispiel ist dies die Zahl 31.
Auch die bereits aus dem Kapitel [
Anzeige abnormer Zustände] bekannte Variable "Zustandsvar No" soll verwendet werden und die Nummer der Variable speichern, die ihr "Zustand - Held #1" genannt habt.
 
. Direkt danach folgt eine Endlosschleife.
 
. Innerhalb dieser Endlosschleife legt ihr zuerst eine weitere Variable an, der ihr den Namen "Temp-Hero-ID" gebt. Sie soll den Wert der Variable speichern, deren Nummer von der Variable "Temp-Hero-Var-ID" vorgegeben wird.
Legt auch gleich noch eine neue Variable an, der ihr den Namen "Temp-Condition" gebt. Sie soll die abnormen Zustände aus der Variable aufnehmen, deren Nummer von der Variable "Zustandsvar No" vorgegeben wird.
 
. Hiernach folgt eine Bedingung, die prüfen soll, ob der Wert der Variable "Temp-Condition" anders als 1 ist. Hier brauchen wir einen "Nein-Fall".
 
. Im Ja-Fall dieser Bedingung soll eine weitere folgen, die nun abfragt, ob der Wert der Variable "Temp-Hero-ID" genau dem Wert "1" entspricht.
 
. Im Ja-Fall legt ihr als erstes eine neue Variable an, der ihr den Namen "Temp-Attrib-New" gebt. Sie soll zunächst die HP des Helden, dem ihr die Helden-ID 1 zugewiesen habt, speichern (in unserem Fall die von Alex).
 
. Danach sollen noch die "Max HP" und die "Angriffskraft" des Helden mit der ID 1 dazugezählt werden.
 
. Zuletzt legt ihr noch eine neue Variable an, die ihr "Temp-Weakling?" nennt. In ihr soll der Wert der Variable "Temp-Hero-Var-ID" gespeichert werden (also die Nummer des "potentiell schwächsten Helden".
 
. Im Nein-Fall wiederholt ihr den vorangegangenen "Ober-Punkt" für all die anderen Helden, die jemals an einem SKS-Kampf beteiligt sein können.
 
. Innerhalb der Endlos-Schleife und des Ja-Falls der Bedingung, die den Wert der Variable "Temp-Condition abfragt, legt ihr eine weitere Bedingung an, die abfragt, ob der Wert der Variable "Temp-Hero-Var-ID" anders als der Wert ist, den ihr zu Anfang in diese Variable geschrieben habt. In unserem Beispiel also anders als 31. Einen Nein-Fall brauchen wir hier.
 
. Im Nein-Fall dieser Bedingung soll zuerst ein Label mit der Nummer "1" gesetzt werden. Danach braucht ihr eine neue Variable mit dem Namen "Temp-Attrib-Old". In dieser Variable lasst ihr den Wert der Variable schreiben, die ihr "Temp-Attrib-New" genannt habt.
Direkt danach soll der Wert der Variable "Temp-Hero-Var-ID" um 1 erhöht werden, ebenso die Variable "Zustandsvar No".
 
. Im Ja-Fall der Bedingung soll eine neue Bedingung prüfen, ob der Wert der Variable "Temp-Attrib-Old" anders als der Wert "0" ist. Hier brauchen wir einen Nein-Fall.
 
. Im Ja-Fall soll eine weitere Bedingung abfragen, ob der Wert in der Variable "Temp-Attrib-Old" größer oder identisch mit dem Wert in der Variable "Temp-Attrib-New" ist. Hier brauchen wir nur den Ja-Fall, in dem dann in die Variable "Temp-Attrib-Old" der Wert der Variable "Temp-Attrib-New" geschrieben wird.
Ebenso soll in eine neue Variable, die ihr "Enemy's Target" nennt, der Wert der Variable "Temp-Weakling?" geschrieben werden.
 
. Direkt danach, jedoch außerhalb der Bedingung mit dem Variablenvergleich soll der Wert der Variable "Temp-Hero-Var-ID" um 1 erhöht werden, ebenso die Variable "Zustandsvar No".
 
. Danach soll eine Bedingung abfragen, ob der Wert in der Variable "Temp-Hero-Var-ID" größer als die Nummer der Variable ist, die ihr im Kapitel "Einstieg und Verlassen des SKS" "Held #4" genannt habt. Hier brauchen wir nur den Ja-Fall, in dem zuerst ein Label mit der Nummer 2 angelegt wird, dann von der Variable "Enemy's Target" der anfängliche Startwert der Variable "Temp-Hero-Var-ID" verringert um 1 (in unserem Beispiel also 31 minus 1 == 30) abgezogen und zuletzt ein Schleifenausbruch eingeleitet wird.
 
. Im Nein-Fall der Bedingung, die prüft, ob der Wert der Variable "Temp-Attrib-Old" anders als 0 ist, soll zum Label mit der Nummer "1" gesprungen werden (Goto Label)
 
. Im Nein-Fall der Bedingung, die den Wert der Variable "Temp-Condition" abfragt (der entsprechende Held, dessen Werte ausgelesen und aufaddiert werden sollen, ist bewusstlos/tot), sollen lediglich die Werte der Variablen "Temp-Hero-Var-ID" und "Zustandsvar No" um 1 erhöht und danach zum Label mit der Nummer 2 gesprungen werden. Der gesamte Wertevergleich und die Aufaddierungen werden somit übersprungen, weil ein bewusstloser/toter Charakter keine Kraft besitzt, die eingeschätzt werden könnte und für einen Kampf von Bedeutung wäre.
 
. Direkt danach soll zum Label mit der Nummer 2 gesprungen werden.
 
. Im Nein-Fall der ganz am Anfang angelegten Bedingung soll nun zufällig ein Ziel für den Gegner gewählt werden.
Die bereits verwendete Variable "Temp-Hero-Var-ID" soll die Nummer der Variable speichern, die ihr "Held #1" genannt habt (Im Kapitel, das den Einstieg und das Verlassen des SKS erklärt). In unserem Beispiel ist dies die Zahl 31.
Auch die bereits aus dem Kapitel [
Anzeige abnormer Zustände] bekannte Variable "Zustandsvar No" soll verwendet werden und die Nummer der Variable speichern, die ihr "Zustand - Held #1" genannt habt.
 
. Darauf folgt - noch immer innerhalb des Nein-Falles - eine Endlosschleife.
 
. In dieser Endlosschleife soll in die Variable "Enemy's Target" eine Zufallszahl zwischen 1 und 4 geschrieben werden.
 
. Nun müssen die Werte der Variablen "Temp-Hero-Var-ID" und "Zustandsvar No" um den Wert der Variable "Enemy's Target" erhöht, dann jeweils um 1 verringert werden.
 
. Die Variable "Temp-Hero-ID" soll nun den Wert der Variable speichern, deren Nummer von der Variable "Temp-Hero-Var-ID" vorgegeben wird.
Auch die Variable "Temp-Condition" soll den Wert der Variable aufnehmen, deren Nummer in der Variable "Zustandsvar No" gespeichert ist.
 
. Direkt danach folgt eine Bedingung, die abfragt, ob der Wert der Variable "Temp-Hero-ID" anders als der Wert "0" ist. Hier ist ein Nein-Fall unbedingt erforderlich.
 
. Im Nein-Fall der Bedingung legt ihr zuerst ein Label mit der Nummer "3" an.
 
. Nach diesem Label sollen die Variablen "Temp-Hero-Var-ID" und "Zustandsvar No" um 1 erhöht werden. Danach soll der Wert der Variable "Enemy's Target" abgezogen werden.
 
. Im Ja-Fall der Bedingung soll eine weitere Bedingung prüfen, ob der wert der Variable "Temp-Condition" anders als der Wert "1" ist. Auch hier ist ein Nein-Fall nötig.
 
. Im Nein-Fall der Bedingung soll zum Label "3" gesprungen werden.
 
. Im Ja-Fall der Bedingung hingegen soll ein Schleifenausbruch erfolgen.
Darstellung der Stichpunkte in MML
 Gegnerskills-Ereignis
[Ereignisseite 1][Push Key]
[Variable [Temp-Randomized]][<-- [Wert setzen][zwischen [1] und [100]]]
[Bedingung][Variable][Temp-Randomized][größer][50]
  [Ja-Fall]
  [Variable [Temp-Hero-Var-ID]][<-- [Wert setzen][31]]
[Variable [Zustandsvar No.]][<-- [Wert setzen][85]]
[Schleife Beginn]
  [Variable [Temp-Hero-ID]][<-- [Wert setzen][Variable [Temp-Hero-Var-ID] übergibt Nummer]]
[Variable [Temp-Condition]][<-- [Wert setzen][Variable [Zustandsvar No.] übergibt Nummer]]
[Bedingung][Variable][Temp-Condition][anders als][1]
  [Ja-Fall]
  [Bedingung][Variable][Temp-Hero-ID][gleich][1]
  [Ja-Fall]
  [Variable [Temp-Attrib-New]][<-- [Wert setzen][Alex's HP]]
[Variable [Temp-Attrib-New]][<-- [+][Alex's max. HP]]
[Variable [Temp-Attrib-New]][<-- [+][Alex's Angriffskraft]]
[Variable [Temp-Weakling?]][<-- [Wert setzen][Temp-Hero-Var-ID]]
transparent transparent
  [Nein-Fall]
  [Bedingung][Variable][Temp-Hero-ID][gleich][2]
  [Ja-Fall]
  [Variable [Temp-Attrib-New]][<-- [Wert setzen][Annie's HP]]
[Variable [Temp-Attrib-New]][<-- [+][Annie's max. HP]]
[Variable [Temp-Attrib-New]][<-- [+][Annie's Angriffskraft]]
[Variable [Temp-Weakling?]][<-- [Wert setzen][Temp-Hero-Var-ID]]
[Bedingung][Variable][Temp-Hero-Var-ID][anders als][31]
  [Ja-Fall]
  [Bedingung][Variable][Temp-Attrib-Old][anders als][0]
  [Ja-Fall]
  [Bedingung][Variable][Temp-Attrib-Old][größer oder gleich][Temp-Attrib-New]
  [Ja-Fall]
  [Variable [Temp-Attrib-Old]][<-- [Wert setzen][Variable [Temp-Attrib-New]]]
[Variable [Enemy's Target]][<-- [Wert setzen][Variable [Temp-Weakling?]]]
[Variable [Temp-Hero-Var-ID]][<-- [+][1]]
[Variable [Zustandsvar No.]][<-- [+][1]]
[Haltepunkt][2]
[Bedingung][Variable][Temp-Hero-Var-ID][größer][34]
  [Ja-Fall]
  [Variable [Enemy's Target]][<-- [-][30]]
[Schleifenausbruch]
transparent transparent
  [Nein-Fall]
  [Goto Haltepunkt][1]
transparent transparent
  [Nein-Fall]
  [Haltepunkt][1]
[Variable [Temp-Attrib-Old]][<-- [+][Variable [Temp-Attrib-New]]]
[Variable [Enemy's Target]][<-- [Wert setzen][Variable [Temp-Weakling?]]]
[Variable [Temp-Hero-Var-ID]][<-- [+][1]]
[Variable [Zustandsvar No.]][<-- [+][1]]
[Goto Haltepunkt][2]
transparent transparent
  [Nein-Fall]
  [Variable [Temp-Hero-Var-ID]][<-- [+][1]]
[Variable [Zustandsvar No.]][<-- [+][1]]
[Goto Haltepunkt][2]
[Schleife Ende]
transparent transparent
  [Nein-Fall]
  [Variable [Temp-Hero-Var-ID]][<-- [Wert setzen][31]]
[Variable [Zustandsvar No.]][<-- [Wert setzen][85]]
[Schleife Beginn]
  [Variable [Enemy's Target]][<-- [Wert setzen][zwischen [1] und [4]]
[Variable [Temp-Hero-Var-ID]][<-- [+][Variable [Enemy's Target]]]
[Variable [Zustandsvar No.]][<-- [+][Variable [Enemy's Target]]]
[Variable [Temp-Hero-Var-ID]][<-- [-][1]]
[Variable [Zustandsvar No.]][<-- [-][1]]
[Variable [Temp-Hero-ID]][<-- [Wert setzen][Variable [Temp-Hero-Var-ID] übergibt Nummer]]
[Variable [Temp-Condition]][<-- [Wert setzen][Variable [Zustandsvar No.] übergibt Nummer]]
[Bedingung][Variable][Temp-Hero-ID][anders als][0]
  [Ja-Fall]
  [Bedingung][Variable][Temp-Condititon][anders als][1]
  [Ja-Fall]
  [Schleifenausbruch]
transparent transparent
  [Nein-Fall]
  [Goto Haltepunkt][3]
transparent transparent
  [Nein-Fall]
  [Haltepunkt][3]
[Variable [Temp-Hero-Var-ID]][<-- [+][1]]
[Variable [Zustandsvar No.]][<-- [+][1]
[Variable [Temp-Hero-Var-ID]][<-- [-][Variable [Enemy's Target]]]
[Variable [Zustandsvar No.]][<-- [-][Variable [Enemy's Target]]]
[Schleife Ende]
Der erstellte Maker-Code auf Seite 1 des Ereignisses
Im englischem Maker
<>Change Var: Var[qqq1: Temp-Randomized] (Set)-Random(1 to 100)
<>If Var(qqq1: Temp-Randomized) 50 (>)
 <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (Set)-31
 <>Change Var: Var[xxx1: Zustände No.] (Set)-85
 <>Loop
  <>Change Var: Var[qqq3: Temp-Hero-ID] (Set)-Var[Var[qqq2]]
  <>Change Var: Var[qqq4: Temp-Condition] (Set)-Var[Var[xxx1]]
  <>If Var (qqq4: Temp-Condition) 1 (<>)
   <>If Var (qqq3: Temp-Hero-ID) 1
    <>Change Var: Var[qqq5: Temp-Attrib-New] (Set)-Alex's HP
    <>Change Var: Var[qqq5: Temp-Attrib-New] (+)-Alex's Max HP
    <>Change Var: Var[qqq5: Temp-Attrib-New] (+)-Alex's Attack
    <>Change Var: Var[qqq6: Temp-Weakling?] (Set)-Var[qqq2]
    <>
   :Else Case
    <>If Var (qqq3: Temp-Hero-ID) 1
     <>Change Var: Var[qqq5: Temp-Attrib-New] (Set)-Annie's HP
     <>Change Var: Var[qqq5: Temp-Attrib-New] (+)-Annie's Max HP
     <>Change Var: Var[qqq5: Temp-Attrib-New] (+)-Annie's Attack
     <>Change Var: Var[qqq6: Temp-Weakling?] (Set)-Var[qqq2]
     <>
    :End Case
    <>
   :End Case
   <>If Var(qqq2: Temp-Hero-Var-ID) 31(<>)
    <>If Var(qqq7: Temp-Attrib-Old) 0(<>)
     <>If Var(qqq7: Temp-Attrib-Old) V[qqq5](>=)
      <>Change Var: Var[qqq7: Temp-Attrib-Old] (Set)-Var[qqq5]
      <>Change Var: Var[qqq8: Enemy's Target] (Set)-Var[qqq6]
      <>
     :End Case
     <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (+)-1
     <>Change Var: Var[xxx1: Zustände No.] (+)-1
     <>Label 2#
     <>If Var(qqq2: Temp-Hero-Var-ID) 34(>)
      <>Change Var: Var[qqq8: Enemy's Target] (-)-30
      <>Break
      <>
     :End Case
     <>
    :Else Case
     <>Goto Label 1#
     <>
    :End Case
    <>
   :Else Case
    <>Label 1#
    <>Change Var: Var[qqq7: Temp-Attrib-Old] (+)-Var[qqq5]
    <>Change Var: Var[qqq8: Enemy's Target] (Set)-Var[qqq6]
    <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (+)-1
    <>Change Var: Var[xxx1: Zustände No.] (+)-1
    <>Goto Label 2#
    <>
   :End Case
   <>
  :Else Case
   <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (+)-1
   <>Change Var: Var[xxx1: Zustände No.] (+)-1
   <>Goto Label 2#
   <>
  :End Case
  <>
 :End Loop
 <>
:Else Case
 <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (Set)-31
 <>Change Var: Var[xxx1: Zustände No.] (Set)-85
 <>Loop
  <>Change Var: Var[qqq8: Enemy's Target] (Set)-Random(1 to 4)
  <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (+)-Var[qqq8]
  <>Change Var: Var[xxx1: Zustände No.] (+)-Var[qqq8]
  <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (-)-1
  <>Change Var: Var[xxx1: Zustände No.] (-)-1
  <>Change Var: Var[qqq3: Temp-Hero-ID] (Set)-Var[Var[qqq2]]
  <>Change Var: Var[qqq4: Temp-Condition] (Set)-Var[Var[xxx1]]
  <>If Var(qqq3: Temp-Hero-ID) 0(<>)
   <>If Var(qqq4: Temp-Condition) 1(<>)
    <>Break
    <>
   :Else Case
    <>Goto Label 3#
    <>
   :End Case
   <>
  :Else Case
   <>Label 3#
   <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (+)-1
   <>Change Var: Var[xxx1: Zustände No.] (+)-1
   <>Change Var: Var[qqq2: Temp-Hero-Var-ID] (-)-Var[qqq8]
   <>Change Var: Var[xxx1: Zustände No.] (-)-Var[qqq8]
   <>
  :End Case
  <>
 :End Loop
 <>
:End Case
<>
Im deutschem Maker (V1.10c)
<>Var. ändern:[qqq1: Temp-Randomized] Wert, Zufll(1 * 100)
<>Bedingung:[qqq1: Temp-Randomized]-50 >
 <>Var. ändern:[qqq2: Temp-Hero-Var-ID] Wert, 31
 <>Var. ändern:[xxx1: Zustände No.] Wert, 85
 <>Schleife
  <>Var. ändern:[qqq3: Temp-Hero-ID] Wert, Var.[V[qqq2]]Inh.
  <>Var. ändern:[qqq4: Temp-Condition] Wert, Var.[V[xxx1]]Inh.
  <>Bedingung:[qqq4: Temp-Condition]-1andr
   <>Bedingung:[qqq3: Temp-Hero-ID]-1
    <>Var. ändern:[qqq5: Temp-Attrib-New] Wert, Alex LP
    <>Var. ändern:[qqq5: Temp-Attrib-New] Wert, Alex Max LP
    <>Var. ändern:[qqq5: Temp-Attrib-New] (+)-Alex's Angriff
    <>Var. ändern:[qqq6: Temp-Weakling?] Wert, Var.[qqq2]Wert
    <>
   :Ansonsten
    <>Bedingung:[qqq3: Temp-Hero-ID]-1
     <>Var. ändern:[qqq5: Temp-Attrib-New] Wert, Annie LP
     <>Var. ändern:[qqq5: Temp-Attrib-New] +, Annie Max LP
     <>Var. ändern:[qqq5: Temp-Attrib-New] +, Annie Angriff
     <>Var. ändern:[qqq6: Temp-Weakling?] Wert, Var.[qqq2]Wert
     <>
    :End-Fall
    <>
   :End-Fall
   <>Bedingung:[qqq2: Temp-Hero-Var-ID]-31andr
    <>Bedingung:[qqq7: Temp-Attrib-Old]-0andr
     <>Bedingung:[qqq7: Temp-Attrib-Old]-V[qqq5]>=
      <>Var. ändern:[qqq7: Temp-Attrib-Old] Wert, Var[qqq5]Wert
      <>Var. ändern:[qqq8: Enemy's Target] Wert, Var[qqq6]Wert
      <>
     :End-Fall
     <>Var. ändern:[qqq2: Temp-Hero-Var-ID] +, 1
     <>Var. ändern:[xxx1: Zustände No.] +, 1
     <> -> Label:2Nr
     <>Bedingung:[qqq2: Temp-Hero-Var-ID]-34 >
      <>Var. ändern:[qqq8: Enemy's Target] -, 30
      <>Schleife stoppen
      <>
     :End-Fall
     <>
    :Ansonsten
     <>Gehe zu Label: 1Nr
     <>
    :End-Fall
    <>
   :Ansonsten
    <> -> Label: 1Nr
    <>Var. ändern:[qqq7: Temp-Attrib-Old] +, Var.[qqq5]Wert
    <>Var. ändern:[qqq8: Enemy's Target] Wert, Var[qqq6]Wert
    <>Var. ändern:[qqq2: Temp-Hero-Var-ID] +, 1
    <>Var. ändern:[xxx1: Zustände No.] +, 1
    <>Gehe zu Label: 2Nr
    <>
   :End-Fall
   <>
  :Ansonsten
   <>Var. ändern:[qqq2: Temp-Hero-Var-ID] +, 1
   <>Var. ändern:[xxx1: Zustände No.] +, 1
   <>Gehe zu Label: 2Nr
   <>
  :End-Fall
  <>
 :Schleifenende
 <>
:Ansonsten
 <>Var. ändern:[qqq2: Temp-Hero-Var-ID] Wert, 31
 <>Var. ändern:[xxx1: Zustände No.] Wert, 85
 <>Schleife
  <>Var. ändern:[qqq8: Enemy's Target] Wert, Zufl.(1 * 4)
  <>Var. ändern:[qqq2: Temp-Hero-Var-ID] +, Var.[qqq8]Wert
  <>Var. ändern:[xxx1: Zustände No.] +, Var[qqq8]Wert
  <>Var. ändern:[qqq2: Temp-Hero-Var-ID] -, 1
  <>Var. ändern:[xxx1: Zustände No.] -, 1
  <>Var. ändern:[qqq3: Temp-Hero-ID] Wert, Var[Var[qqq2]]Inh.
  <>Var. ändern:[qqq4: Temp-Condition] Wert, Var[Var[xxx1]]Inh.
  <>Bedingung:[qqq3: Temp-Hero-ID]-0andr
   <>Bedingung[qqq4: Temp-Condition]-1andr
    <>Schleife stoppen
    <>
   :Ansonsten
    <>Gehe zu Label: 3Nr.
    <>
   :End-Fall
   <>
  :Ansonsten
   <> -> Label:3Nr
   <>Var. ändern:[qqq2: Temp-Hero-Var-ID] +, 1
   <>Var. ändern:[xxx1: Zustände No.] +, 1
   <>Var. ändern:[qqq2: Temp-Hero-Var-ID] -, Var[qqq8]Wert
   <>Var. ändern:[xxx1: Zustände No.] -, Var[qqq8]Wert
   <>
  :End-Fall
  <>
 :Schleifenende
 <>
:End-Fall
<>
Vorüberlegungen II - Eine globale Schadensermittlung

Im Selbem Ereignis, nur auf einer neuen Ereignis-Seite, soll eine globale Schadensberechnung stattfinden, der es egal sein soll, ob ein physischer oder magischer Angriff stattfindet. Damit wir die globale Schadensermittlung auch für die Helden verwenden können, müssen Werte wie die Angriffskraft der Fertigkeit oder Waffe sowie der Verteidigungswert des Zieles übergeben werden, indem sie vor dem Aufruf der Ereignis-Seite in die Variablen geschrieben werden.
Als Ergebnis soll ein einziger Wert zurückgegeben werden, anhand der dann das entsprechende Fertigkeiten- bzw. Waffenereignis prüft, ob ein Treffer gelandet werden konnte oder nicht.

. Für den Anfang brauchen wir hier drei Variablen, die ihr "Calc - Ergebnis", "Calc - Temp-Attack" und "Calc - Temp-Defense" nennt. Alle drei sollen auf den Wert "0" gesetzt werden.
 
. Danach brauchen wir noch zwei weitere Variablen, die ihr "Calc - Attack" und "Calc - Defense" nennt. Alle beiden sollen durch 10 geteilt werden.
 
. Hiernach soll eine weitere Variable angelegt werden, die ihr "Calc - Trefferchance" nennt. Sie soll als Ausgangswert eine Zufallszahl zwischen 1 und 100 aufnehmen.
 
. Direkt danach folgt eine Bedingung, die prüfen soll, ob der Wert der Variable "Calc - Trefferchance" kleiner als 50 ist. Ein Nein-Fall ist hier nicht nötig.
 
. Im Ja-Fall der Bedingung soll zuerst der Basis-Schaden ermittelt werden, der durch die Fertigkeit mit einem festem Wert vorgegeben wird. Den Anfang macht eine Endlosschleife.
 
. Innerhalb dieser Endlosschleife soll zuerst zum Wert in der Variable "Calc - Ergebnis" eine Zufallszahl zwischen 0 und 1 addiert werden.
 
. Danach soll vom Wert einer neuen, freien Variable "Calc - Damage" (dem von der Fertigkeit oder Waffe vorgegebenen Fix-Wert) die Zahl "1" abgezogen werden.
 
. Eine danach folgende Bedingung soll prüfen, ob der Wert der Variable "Calc - Damage" dem Wert "0" entspricht. Im Ja-Fall soll ein Schleifenausbruch erfolgen, ein Nein-Fall ist nicht nötig.
 
. Nach dieser Endlosschleife soll eine weitere folgen, in der der ermittelte "Schadenswert" durch die Angriffskraft des Angreifers (!) modifiziert werden soll.
 
. In dieser Endlosschleife soll zum Wert der Variable "Calc - Temp-Attack" eine Zufallszahl zwischen 0 und 1 dazugezählt werden.
 
. Danach soll vom Wert der Variable "Calc - Attack" die zahl "1" abgezogen werden.
 
. Zum Abschluss soll eine Bedingung prüfen, ob der Wert der Variable "Calc - Attack" genau dem Wert "0" entspricht. Im Ja-Fall soll auch hier ein Schleifenausbruch erfolgen, während ein Nein-Fall nicht erforderlich ist.
 
. Danach soll zum Wert der Variable "Calc - Temp-Attack" eine Zufallszahl zwischen 10 und 100 dazugezählt werden.
 
. Dann soll der Wert der Variable "Calc - Ergebnis" zuerst mit dem Wert der Variable "Calc - Temp-Attack" malgenommen und durch den Wert "100" geteilt werden.
 
. Zum Abschluss kommt noch die Abwehr des Ziels zum Einsatz, was auch wieder mit einer Endlosschleife beginn, in der zu Anfang dem Wert der Variable "Calc - Temp-Defense" eine Zufallszahl zwischen 0 und 1 dazugezählt wird.
 
. Als nächstes soll dem Wert der Variable "Calc - Defense" die Zahl "1" abgezogen werden.
 
. Nun soll eine Bedingung prüfen, ob der Wert der Variable "Calc- Defense" genau dem Wert "0" entspricht. Wenn dem so ist, soll ein Schleifenausbruch erfolgen, ein Nein-Fall ist hier unnötig.
 
. Nach dieser Endlosschleife, aber noch innerhalb der zuerst angelegten Bedingung soll nun vom Wert "Calc - Temp-Defense" die Zahl "100" abgezogen und dann mit "-1" malgenommen werden.
 
. Danach soll der Wert der Variable "Calc - Ergebnis" zuerst mit dem Wert der Variable "Calc - Temp-Defense" malgenommen und durch 100 geteilt werden.
Darstellung der Stichpunkte in MML
 Gegnerskills-Ereignis
[Ereignisseite 1][Push Key]
/*
 * Anstelle dieses Kommentares befindet sich die MML-Darstellung
 * aus "Schritt II - Die Gegner-KI"
 */
[Ereignisseite 2][Push Key]
[Variable [Calc - Ergebnis]][<-- [Wert setzen][0]]
[Variable [Calc - Temp-Attack]][<-- [Wert setzen][0]]
[Variable [Calc - Temp-Defense]][<-- [Wert setzen][0]]
[Variable [Calc - Angriff]][<-- [/][10]]
[Variable [Calc - Abwehr]][<-- [/][10]]
[Variable [Calc - Trefferchance]][<-- [Wert setzen][Zufall zwischen [1] und [100]]]
[Bedingung][Variable][Calc - Trefferchance][kleiner als][50]
  [Ja-Fall]
  [Schleife Beginn]
  [Variable [Calc - Ergebnis]][<-- [+][Zufall zwischen [0] und [1]]]
[Variable [Calc - Damage]][<-- [-][1]]
[Bedingung][Variable][Calc - Damage][gleich][0]
  [Ja-Fall]
  [Schleifenausbruch]
[Schleife Ende]
[Schleife Beginn]
  [Variable [Calc - Temp-Attack]][<-- [+][Zufall zwischen [0] und [1]]]
[Variable [Calc - Attack]][<-- [-][1]]
[Bedingung][Variable][Calc - Attack][gleich][0]
  [Ja-Fall]
  [Schleifenausbruch]
[Schleife Ende]
[Variable [Calc - Temp-Attack]][<-- [+][Zufall zwischen [10] und [100]]]
[Variable [Calc - Ergebnis]][<-- [*][Variable [Calc - Temp-Attack]]]
[Variable [Calc - Ergebnis]][<-- [/][100]
[Schleife Beginn]
  [Variable [Calc - Temp-Defense]][<-- [+][Zufall zwischen [0] und [1]]]
[Variable [Calc - Defense]][<-- [-][1]]
[Bedingung][Variable][Calc - Defense][gleich][0]
  [Ja-Fall]
  [Schleifenausbruch]
[Schleife Ende]
[Variable [Calc - Temp-Defense]][<-- [-][100]]
[Variable [Calc - Temp-Defense]][<-- [*][-1]]
[Variable [Calc - Ergebnis]][<-- [*][Variable [Temp-Defense]]]
[Variable [Calc - Ergebnis]][<-- [*][100]]
Der erstellte Maker-Code auf Seite 2 des Ereignisses
Im englischem Maker
<>Change Var: Var[hhh1: Calc - Ergebnis] (Set)- 0
<>Change Var: Var[hhh2: Calc - Temp-Attack] (Set)- 0
<>Change Var: Var[hhh3: Calc - Temp-Defense] (Set)- 0
<>Change Var: Var[hhh4: Calc - Attack] (/)- 10
<>Change Var: Var[hhh5: Calc - Defense] (/)- 10
<>Change Var: Var[hhh6: Calc - Trefferchance] (Set)- Random(1 to 100)
<>If Var(hhh6: Calc - Trefferchance) 50(<)
 <>Loop
  <>Change Var: Var[hhh1: Calc - Ergebnis] (+)-Random(0 to 1)
  <>Change Var: Var[hhh7: Calc - Damage] (-)- 1
  <>If Var(hhh7: Calc - Damage) 0
   <>Break
   <>
  :End Case
  <>
 :End Loop
 <>Loop
  <>Change Var: Var[hhh2: Calc - Temp-Attack] (+)-Random(0 to 1)
  <>Change Var: Var[hhh4: Calc - Attack] (-)- 1
  <>If Var(hhh4: Calc - Attack) 0
   <>Break
   <>
  :End Case
  <>
 :End Loop
 <>Change Var: Var[hhh2: Calc - Temp-Attack] (+)-Random(10 to 100)
 <>Change Var: Var[hhh1: Calc - Ergebnis] (*)- Var[hhh2]
 <>Change Var: Var[hhh1: Calc - Ergebnis] (/)- 100
 <>Loop
  <>Change Var: Var[hhh3: Calc - Temp-Defense] (+)-Random(0 to 1)
  <>Change Var: Var[hhh5: Calc - Defense] (-)- 1
  <>If Var(hhh7: Calc - Defense) 0
   <>Break
   <>
  :End Case
  <>
 :End Loop
 <>Change Var: Var[hhh3: Calc - Temp-Defense] (-)- 100
 <>Change Var: Var[hhh3: Calc - Temp-Defense] (*)- -1
 <>Change Var: Var[hhh1: Calc - Ergebnis] (*)- Var[hhh3]
 <>Change Var: Var[hhh1: Calc - Ergebnis] (/)- 100
 <>
:End Case
<>
Im deutschem Maker (V1.10c)
<>Var. ändern:[hhh1: Calc - Ergebnis]Wert, 0
<>Var. ändern:[hhh2: Calc - Temp-Attack]Wert, 0
<>Var. ändern:[hhh3: Calc - Temp-Defense]Wert, 0
<>Var. ändern:[hhh4: Calc - Attack] /, 10
<>Var. ändern:[hhh5: Calc - Defense] /, 10
<>Var. ändern:[hhh6: Calc - Trefferchance]Wert, Zufll[1*100]
<>Bedingung:Varbl[hhh6: Calc - Trefferchance]-50 <
 <>Schleife
  <>Var. ändern:[hhh1: Calc - Ergebnis]+, Zufll[0*1]
  <>Var. ändern:[hhh7: Calc - Damage]-, 1
  <>Bedingung:Varbl[hhh7: Calc - Damage]-0
   <>Schleife stoppen
   <>
  :End Fall
  <>
 :Schleifenende
 <>Schleife
  <>Var. ändern:[hhh2: Calc - Temp-Attack]+, Zufll[0*1]
  <>Var. ändern:[hhh4: Calc - Attack]-, 1
  <>Bedingung:Varbl[hhh4: Calc - Attack]-0
   <>Schleife stoppen
   <>
  :End Fall
  <>
 :Schleifenende
 <>Var. ändern:[hhh2: Calc - Temp-Attack]+, Zufll[10*100]
 <>Var. ändern:[hhh1: Calc - Ergebnis]*, Var[hhh2]Wert
 <>Var. ändern:[hhh1: Calc - Ergebnis]/, 100
 <>Schleife
  <>Var. ändern:[hhh3: Calc - Temp-Defense]+, Zufll[0*1]
  <>Var. ändern:[hhh5: Calc - Attack]-, 1
  <>Bedingung:Varbl[hhh5: Calc - Attack]-0
   <>Schleife stoppen
   <>
  :End Fall
  <>
 :Schleifenende
 <>Var. ändern:[hhh3: Calc - Temp-Defense]-, 100
 <>Var. ändern:[hhh3: Calc - Temp-Defense]*, -1
 <>Var. ändern:[hhh1: Calc - Ergebnis]*, Var[hhh3]Wert
 <>Var. ändern:[hhh1: Calc - Ergebnis]/, 100
 <>
:End-Fall
<>