Variablen-Tutorial

Aus Scientia
Wechseln zu: Navigation, Suche

Vorwort

Mit Variablen hatte höchstwahrscheinlich jeder von euch schon einmal (z.B. in der Schule) zu tun. Meistens werden Variablen in Zusammenhang mit der Mathematik gebraucht (Löse nach x auf, x², etc.). Daher sollten die meisten das schon wissen: Jede Variable steht für einen Wert. So kann man zum Beispiel sagen, dass X für die Zahl 5 steht. So könnte man zum Beispiel jemanden im Maker sagen lassen: "Du hast X Äpfel gesammelt!". Das praktische daran ist, dass man nicht für jede Apfelzahl eine einzelne Message schreiben muss, sondern direkt einen allgemeingültigen Text für jeden X Wert hat. Variablen sind auch für andere Dinge im Zusammenhang mit einem Kampfsystem etc. wichtig. So lassen sich die HP des Helden in einer Variable speichern und so weiter.

Dies lässt sich für alles gebrauchen, was über den Bereich der einfachsten Makerfunktionen hinausgeht: Kampfsystem, (Zusatz)Menüs, Minigames, Rätsel, Anzeigen von Pictures, ... So gut wie jedes Script oder Tutorial verwendet Variablen, unter anderem auch ein Tag/Nacht-System, das am Ende dieses Kursteils erklärt werden wird.

Bevor ihr anfangt, lest euch zuerst die Dokumentation des Befehls Change Variable durch.

Ansatz

Als Ansatz nehmen wir eine schlechte Idee, die mir gerade gekommen ist. Am Rande des Sees (oder irgendwo sonst) steht ein Künstler, dem leider die Blätter zu zeichnen ausgegangen sind. Deshalb bittet er den Helden, die Blätter für ihn zu suchen.

Seite 1 des KünstlerEvents

<> SelectFace xyz
<> Messg:"Holla, kannst du mir vielleicht helfen? Ich brauche neue Blätter für meine Zeichnungen!"
<> ChangeSwitch [21] Blättersuche - ON

So, damit wäre der Auftrag erteilt. Nun brauchen wir einen Ort, an dem der Held die Blätter bekommt. Dazu ist am besten das Haus des Helden geeignet. Falls ihr so etwas noch nicht habt, dann stellt irgendwo in das Haus des Helden einen Tisch mit einem Buch, oder nehmt ein Regal. Dieses Buch markiert ihr dann als Event. (Wichtig: Same Level as Hero, man soll ja nicht drüberweglaufen können)

Tagebuch des Helden

Seite 1 des TagebuchEvents

Startbedingungen: Switch: Blättersuche -ON UND: Variable 1: Blätter 0 above

<> SelectFace zyx
<> Messg:"(Held): Hmm.. mein (leeres) Tagebuch. Ich reiße mal eine Seite raus." <> VariableChange: 1: Blätter +1
<> VariableChange: 2: Blätterdabei +1
<> Messg:"(Held): Jetzt habe ich schon ein Blatt, und keines abgegeben."

Okay, was bewirkt diese Seite: Zuerst kommt die normale Message, in dem der Held seine Aktion beschreibt. Danach werden die Variabeln Blätter und Blätterdabei je um 1 erhöht. Warum zwei Variablen: Ganz einfach. Ich möchte es so machen, dass nachher Messages wie: "Ich habe jetzt 3, und schon 5 abgegeben" angezeigt werden können. Deshalb mehrere Variablen. Der letzte Text ist übrigens so wie er ist und wird nur beim allerersten Aufruf dieses Events angezeigt, da ja als Startbedingung eingestellt ist, dass die Variable Blätter noch auf 0 stehen muss. Bleiben wir noch bei diesem Event, fangen aber eine neue Seite an.

Seite 2 des TagebuchEvents

Startbedingungen: Switch: Blättersuche - ON und Variable 1: Blätter 1 above

<> Select Face xyz
<> Messg:"(Held): Hmm, ..[...]"
<> VariableChange: 1: Blätter +1
<> VariableChange: 2: Blätter dabei +1
<> VariableChange: 3: Blätter abgegeben Set Variable 1
<> VariableChange: 3: Blätter abgegeben - Variable 2
<> Messg:"(Held): So jetzt habe ich \V[2] dabei und schon \V[3] dem Künstler gegeben.

So, was bewirkt nun diese Seite? Zuallererst schauen wir uns die Startbedingungen an. Diese Seite wird aufgerufen, wenn der Switch: Blättersuche angeschaltet ist, und die Anzahl der bisherigen Blätter (also die Variable: Blätter) größer oder gleich 1 ist. (Das bedeutet das above hinter dem Wert der Variable). Das heißt, diese Seite wird aufgerufen, wenn man das Tagebuch ein zweites, drittes, viertes, ... Mal betrachtet. Danach wird wie immer das FaceSet des Helden ausgewählt, der Held gibt den Standartspruch von sich, die Gesamt und die aktuelle Blätterzahl wird um je eine Einheit größer, doch DANN: Die Variable 3: Blätter abgegeben wird auf den Wert der Variable 1: Blätter gesetzt. Jetzt könnte man sich denken, dass das ziemlich unsinnig ist. Schließlich bedeutet diese Zeile ja, dass dem Maker erzählt wird, die Anzahl der Blätter, die man abgegeben hat, wäre gleich der Anzahl der Blätter, die man insgesamt aufgenommen hat. Das ist natürlich falsch. Doch deshalb folgt auch die nächste Zeile, wo von diesem neuen Wert der Variable 3, der Wert der Variable 2: Blätter dabei abgezogen wird. Das heißt: Hat man insgesamt 5 Blätter aufgenommen, und schon 2 abgegeben folgt folgende Operation:

  • Blätter = 5
  • Blätter dabei = 2
  • Blätter abgegeben = Blätter (also 5)
  • Blätter abgegeben = Blätterabgegeben - Blätter dabei (also 5 -2)
  • Blätter abgegeben = 3

Ihr seht, so wird aus den beiden anderen Variablen die dritte berechnet. Danach folgt die Message, in der erstmal Platzhalter wie "\V[2]" verwendet werden. Mehr zu diesen und anderen Messageffekten voraussichtlich im nächsten Kurs. Hier soll nur gesagt werden: Gibt man in einer Message \V[xyz], dann wird im Spiel an dieser Stelle der Wert der Variable mit der Nummer xyz zu sehen sein. In unserem Beispiel würde die Message also derart aussehen: "So, jetzt habe ich 2 dabei, und schon 3 abgegeben."

Weitere Einstellungen beim Künstlerevent

Vielleicht ist jetzt einigen von euch ein Problem aufgefallen: Wie sollen sich denn die Werte von "Blätter" und "Blätter dabei" unterscheiden, wenn diese immer parallel erhöht werden? Um dieses Problem zu lösen, müssen wir uns wieder auf die Stadtmap begeben, wo ja bekanntlich unser Künstlerevent steht. Da machen wir auf Seite 3 weiter. Genau, mit Seite 3, Seite 2 lassen wir erst einmal frei (bis auf die Startbedingung, dass die Variable Blätter größer/gleich 10 sein muss.

Seite 3 des Künstlerevents

Startbedingung: Switch Blättersuche - ON, Variable Blätter 0 above.

<> SelectFace xyz
<> Messg: "Künstler: Bitte, du MUSST mir welche bringen."

Diese Seite wird also angezeigt, wenn die Blättersuche begonnen hat, der Spieler aber noch keins dabei hat. Aber Moment: Haben wir nicht vorhin gelernt, dass bei Variablen immer größer/gleich gilt, wenn man sie als Startbedingung einsetzt? Das stimmt auch weiterhin, dass heißt, wer jetzt testet und fünf Blätter einsammelt, wird trotzdem diese Message zu sehen bekommen. Deshalb müssen wir auch direkt mit Seite 4 weitermachen.

Seite 4 des KünstlerEvents

Starbedingung: Switch Blättersuche - ON, Variable Blätter 1 above.

<> SelectFace xyz
<> Messg: "Künstler: Hmm..ein Blatt ist kein Blatt. bring mir bitte mehr!"
<> VariableChange: 2: Blätter dabei Set 0

Zuerst: Warum wird im Spiel jetzt diese Seite aufgerufen, wenn ich ein oder mehr Blätter habe, und nicht Seite 3? Schließlich erfüllen beide die Bedingungen. Das liegt am System des Makers und ist eine der wichtigsten Regeln die es zu beachten gilt, wenn man sich im Maker vertieft (und Fehler beheben muss, die man einfach nicht findet): Der Maker führt die Seite des Events aus, die alle Bedingungen erfüllt, und die höchste Nummer hat. Macht man zwei Seiten ohne Startbedingungen, wird der Maker die zweite Seite ausführen, macht man 3, die dritte. Dies ist sehr wichtig, da durch vertauschen oder falsches Anordnen von Seiten oft Fehler entstehen.

Nun zurück zur Seite: Da diese Seite wieder nur für einen Einzelfall zur Verfügung stehen wird (wenn der Held ein Blatt dabei hat), gibt es auch hier eine vorgefertigte Message. Danach kommt der Teil, nachdem wir uns vorher gefragt haben: Die Variable Numero 2 wird auf 0 gesetzt, und ab diesem Zeitpunkt unterscheiden sich so Variable 1 und 2! Da wir noch immer keine (teilweise) allgemeingültige Message verwendet haben, ist es nun an der Reihe für Seite 5:

Seite 5 des KünstlerEvents

Starbedingung: Switch Blättersuche - ON, Variable Blätter 2 above

<> SelectFace xyz
<> Messg: "Künstler: Danke sehr, immerhin schon \V[1] Blätter. Sucht mehr.
<> VariableChange: 2: Blätter dabei Set 0

Diese Seite wird aufgerufen, wenn man nun 2 oder mehr Blätter gesammelt hat. Wie euch bestimmt aufgefallen ist, wird nun auch eine allgemeingültige Message verwendet, dass heißt, wir müssen auf der nächsten Seite nicht beim Falle von drei Blättern weitermachen. Die nächste Seite ist jetzt sowieso nur optional, sie trägt halt mehr zur Logik bei, schließlich soll der Mann ja nicht die ganze Zeit sagen "Immerhin schon XXX Blätter,.." und dann plötzlich: "Super, danke, das reicht!". Deshalb bauen wir noch eine kleine Zwischenstufe ein:

Seite 6 des des KünstlerEvents

Startbedingung: Switch [...], Variable Blätter 5 above

<> SelectFace xyz
<> Messg "Jo, vielen herzlichen Dank. Mit \V[1] Blättern kann ich schon viel anfangen.
<> VariableChange: 2: Blätter dabei Set 0

Hiermit wird eine neue (trotzdem allgemeingültige) Message eingeführt/angezeigt, sobald der Spieler mehr als 5 Blätter abgegeben hat. Der nächste Schritt ist dann die Maximalanzahl festzulegen, zum Beispiel 10 Blätter, mit denen der Künstler dann erstmal genug haben sollte. Und natürlich darf dann auch eine kleine Belohnung nicht fehlen ^^

Seite 7 des KünstlerEvents

<> SelectFace xyz
<> Messg: "Künstler: Wow! Ihr habt euch ja richtig ins Zeug gelegt, jetzt habe ich genug. Hier, nehmt das!"
<> Chance Money: Money 100 Incr.
<> SelctFace: Erase
<> Messg: "-100 Creds erhalten-"
<> VariableChange Blätterdabei = 0
<> Change Switch: Blättersuche - OFF

Dies ist die abschließende Seite des Künstler - Ereignisses, auf der man 100 Creds (oder wie auch immer ihr eure Währung nennt) vom Künstler für da fleißige Seitenbringen bekommt. Die Funktion, der Gruppe Geld zu geben oder abzuziehen befindet sich auch auf Seite 1 im Event Dialog, sie heißt "Change Gold Held...", dass man dort mit Increase steigern, oder mit Decrease verringern kann. Das Select Face: Erase bewirkt, dass vor der zweiten Message nicht das Gesicht des Künstlers angezeigt wird. Nun tut sich aber mal wieder ein Problem auf. Was passiert wenn man den Künstler jetzt anredet? Seite 3, 4, 5, 6 und 7 können nicht aktiviert werden, weil sie ja als Starbedingung haben, dass der Switch "Blättersuche" an ist. Lassen wir die vorher erstellte Seite 2 außer acht, würde nun die erste Seite aufgerufen, und der Spaß beginne von vorne, was natürlich nicht so sein soll. Hätten wir Seite 2 weggelassen, und ans ende gesetzt, dann wäre niemals Seite 7 aufgerufen (Switch UND Blätter auf 10) worden, da ja schon die Bedingungen der Seite 2 (die man sich jetzt als Seite 8 vorstellen muss) erfüllt werden. (Rechts vor links) Deshalb muss Seite 2 auch genau an dieser Position bleiben, damit sie nur aufgerufen wird, wenn der Held alle Blätter gesammelt hat, und sie auch schon dem Künstler übergab.

Abschluss des Quests

Seite 2 des KünstlerEvents

Startbedingung: Blätter 10 above

<> SelectFace xyz
<> Messg: "Künstler: Danke, ihr habt mich gerettet!!"

Diese Message wird nun jedes Mal angezeigt, wenn man mit dem Künstler redet. Und auch am Tagebuch müssen wir noch eine Seite hinzufügen, damit der Spieler nicht tausende von Blättern ausreißen kann.

Seite 3 des TagebuchEvents

Startbedingung: Switch Blättersuche - ON, Blätter 10 above

<> SelectFace zyx
<> Messg: "(Held): So, das sollte aber mal reichen..."

Diese Message wird nun angezeigt, wenn man dem Künstler noch nicht alle Blätter übergeben hat, aber versucht, ein elftes hinauszureißen.

Nachwort

Abschließend ist zu sagen, dass dies meiner Meinung nach ein recht gutes Beispiel für die Funktionen und den sinnvollen Einsatz von Variablen war. Ich hoffe, ich habe alles verständlich genug erklärt, aber wem dies alles zu kompliziert zum Selbermachen ist, der läd sich dann einfach mein Kursprojekt herunter, und schaut sich dort noch einmal alles genau an!