PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : variablen



dominitschen
03.06.2006, 16:34
ich wollte fragen ob mir jemand erklären kann wie das mit den variablen geht weil ich das einfach nicht raffe

WoOdY49
03.06.2006, 16:41
einer variable kannst du eine gewisse zahl zuordnern
ähnlich wie in der mathematik, wo eine variable für eine oder mehrere zahlen stehen kann.

variablen verwendet man zB, wenn man eine gewisse anzahl an gegenständen finden muss
nehmen wir mal an es geht darum, äpfel zu sammeln ^^
jedes mal, wenn du einen apfel aunimmst,
machst du

(ganz am anfang musste die variable auf 0 setzen)

item "apfel" +1
variable ch: [0001] +1
und dahinter evt noch die message

Ich habe schon \v[0001] äpfel gefunden
,wobei anstatt \v[0001] durch die zahl ersetzt wird, die der variablen gerade zugeordnet ist.

ich hoffs ich habs einigermassen verständlich erklärt ^^

dominitschen
03.06.2006, 17:13
halte mich ruhig für ein dummerle
das will einfach nit in meinen schädel reingehen

WoOdY49
03.06.2006, 17:50
halte mich ruhig für ein dummerle
das will einfach nit in meinen schädel reingehen
könntest du das problem etwas genauer definieren?
wo genau haperts?
verstehst du schon die grundidee nicht, also was eine variable überhaupt ist.
oder kannst du nicht damit umgehn?

~Hauptmann Krey~
03.06.2006, 17:57
Kursproject von rpg2000.de:
Variablen

A - was'n das?
Zu aller erst: Dieses Kapitel wird vom Aufbau sicherlich etwas an Seijuros geniales Tutorial zum gleichen Thema erinnern. Allerdings ist der komplette Text hier von mir selbst geschrieben, also trotzdem lesen! ^^

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..

B - und wozu das alles??
Für einfach ALLES: Kampfsystem, (Zusatz)Menüs, Minigames, Rätsel, Anzeigen von Pictures, ...
So gut wie jedes Script oder Tutorial verwendet Variablen, unter anderem auch das "professionelle" Tag/Nacht-System, das am Ende dieses Kursteils erklärt werden wird.

C - geht’s hier mal los?
Ja.

C - Die einzelnen Funktionen
Da wir gerade die stinklangweiligen "Was bewirkt Feld XYZ"-Textmassen der Database hinter uns haben...
..machen wir genau das gleiche bei den Variablen! Juhuuuuu! Nun gut, vielleicht kann ich’s ja etwas informativer gestalten..

One: Läuft genau wie bei den Switches. Hier wählt man die eine Variable aus, deren Wert verändert werden soll. Aus der altbekannten Auswahlliste lässt sich hier die gewünschte Variable auswählen, die maximale Anzahl an Variablen lässt sich durch "Max. Field Nr." verändern.

Range: Auch das kennt ihr vielleicht noch von den Switches. Hiermit lässt sich gleich ein ganzer Bereich von Variablen (dieser geht von der Variable aus dem ersten bis zu der aus dem zweiten Feld) verändern. So lassen sich nach einem Minigame zum Beispiel alle zugehörigen Variablen wieder auf 0 zurücksetzen.

Variab: Diese Funktion ist für Anfänger vielleicht nicht so interessant, aber für anspruchsvollere Funktionen (gibt bestimmt auch einfache Anwendungsmöglichkeiten) sehr nützlich. Hier wird nicht die Variable verändert, die man auswählt, sondern die Variable mit der Nummer, die dem Wert der Variable entspricht. Zu kompliziert?
Beispiel: Ihr wählt in diesem Feld Variable Nr. 10 aus. Der Wert dieser Variable wurde vorher auf 15 gesetzt. Nun wird Dank dieser Funktion Variable Nr. 15 verändert.

Das sind die drei Möglichkeiten zur Bestimmung der zu verändernden Variable(n). Als nächstes kann man die Rechenart auswählen.

Set: Die Variable wird auf einen bestimmten Wert gesetzt. Es ist völlig egal, ob ihr voriger Wert 0, 22, 3467 oder -12 war.

+: No Comment (Falls ihr das nicht versteht: Wir empfehlen den Maker grundsätzlich nicht für Kinder unterhalb des Grundschulalters.)

-, *, /: s.o.

Mod: Jaaa, das ist spannend, das ist nicht mal Grundwissen (außer wenn ihr Mathe/Informatik habt). Mit Mod wird der Rest der Ganzzahldivision ausgegeben, soll heißen: 43 Mod 7 = 1! Nicht verstanden?
Bei der Division von 43 mit 7 kommt 6 heraus mit dem Rest 1. Dieser Rest wird durch die Mod-Funktion ausgegeben.
Diese Funktion ist besonders praktisch um an einzelne Stellen einer Zahl heranzukommen. So wird bei 1234 Mod 10 die Zahl 4 ausgegeben. Teilen wir 1234 durch 10 erhalten wir beim Maker 123. 123 Mod 10 ist 3. 12 Mod 10 ist 2. So kann man zum Beispiel eine Zahl in die einzelnen Stellen zerlegen. (Was ihr wiederum sehr praktisch finden werdet, solltet ihr euch jemals an ein eigenes Kampfsystem heranwagen.)

Die einzelnen Rechenarten haben wir nun schnell hinter uns gebracht, kommen wir zum Hauptteil. Hier wird festgelegt, auf welchen Wert die Variable gesetzt, bzw. welcher Wert hinzugefügt oder abgezogen werden soll.

Set: Hier wird die Variable auf den Wert gesetzt, den ihr auswählt (bzw. mit diesem Wert multipliziert, addiert,...). Diese Funktion ist eigentlich die Standartfunktion von Variablen, bzw. die am häufigsten verwendete.

Variable: Hier wird die Variable auf den Wert einer anderen Variablen gesetzt nämlich auf den Wert derer, die ihr auswählt.
Beispiel: Ihr habt die Variable "Held-HP", und die Variable "Held-Max-HP". Nun geht ihr zu irgendeinem Event bei dem Ihr voll geheilt werdet. Da macht ihr dann im Event die Funktion: Variable 0001: Held-HP, Set, Variable 0002: Held-Max-HP. Dadurch wird die aktuelle HP auf die maximale HP gesetzt.

Variable (No.): Diese Funktion ist ähnlich der oberen, wo man die Variable auswählte. Denn dieses Mal wird die aktuelle Variable nicht auf den Wert der hier gewählten gesetzt, sondern auf den Wert der Variable deren Nummer der hier gewählten entspricht.
Bsp: Ihr wählt hier Variable 5. Diese Variable hat den Wert 27. Und Variable Nummer 27 hat den Wert 321. Dann wird die oben gewählte Variable auf 321 gesetzt (bzw. dazu addiert, multipliziert, ...)

Rand.: Dieses Mal geht es um eine Zufallszahl, die zwischen der ersten und der zweiten Eingabe liegt.
Beispiel: Wenn ihr ins erste Feld 7 und ins zweite Feld 15 eingebt, dann kann eure Variable auf 7, 8, 9, 10, 11, 12, 13, 14 und 15 gesetzt werden.

Item: Eine sehr praktische Funktion. In der erste Spalte wählt man ein beliebiges Objekt aus, in der zweiten Spalte kann man zwischen "Owned No." und "Equipped No." unterscheiden. Hierbei wird die Variable entweder auf die Zahl gesetzt, die der Anzahl der jeweiligen Items, die der Held mit sich rumträgt, entspricht (Owned), oder auf die Anzahl der jeweiligen Items, die die Gruppenmitglieder ausgerüstet haben. So kann man dann in einer Message anzeigen lassen: "Ahh, wie ich sehe habt ihr nur (Variable) Tränke!"

Hero: In der ersten Spalte wählt man einen Helden aus, in der zweiten einen bestimmten (Status)Wert, der mit diesem Helden zusammenhängt. Auf diesen Wert wird dann jeweils die Variable gesetzt.

• Level: Die Stufe des Helden
• Exp.: Die Erfahrungspunkte
• HP: Die aktuellen Lebenspunkte
• MP: Die aktuellen Magiepunkte
• Max. HP: Die maximale Lebensenergie
• Max. MP: Das maximale Mana
• Attack: Die Angriffsstärke
• Defense: die Verteidigungskraft
• Mind: Die Geistesstärke
• Agility: Die Schnelligkeit
• Arms No.: Die Nummer des ausgerüsteten Waffen-Objektes
• Shield No.: Die Nummer des ausgerüsteten Schildes
• Armor No.: Die Nummer der ausgerüsteten Rüstung
• Helmet No.: Die Nummer des ausgerüsteten Helmes
• Other No.: Die Nummer des ausgerüsteten Spezial-Objektes

All diese Werte sind später einmal sehr wichtig, wenn ihr euch an ein eigenes Menü oder Kampfsystem heranwagt.

Event: In der linken Spalte wählt man ein bestimmtes Ereignis aus, wozu aber auch Personen auf der Karte oder der Held gehören können. Rechts wählt man dann wieder einen bestimmten Wert aus, der mit dem Event zusammenhängt.

• Map ID: Die Nummer der Karte, auf der das Event ist
• X coordinate: Das xte Feld, auf dem sich das Event von links aus gesehen befindet
• Y coordinate: Das xte Feld, auf dem sich das Event von oben aus gesehen befindet
• Beyond Facing: Die Blickrichtung des Events: Unten = 2, Links = 4, Rechts = 6, Oben = 8
• Scene X: Die Pixel X - Koordinate, wo sich das Event befindet. (ca. X coord. * 16)
• Scene Y: Die Pixel Y - Koordinate, wo sich das Event befindet. (ca. Y coord. * 16)

Diese Funktionen werden in vielen Scripts verwendet, Funktionen wie die "Scene"-Befehle sind nützlich um Pictures bei/über dem Helden anzeigen zu lassen.

Other: Noch einige andere Werte, die nicht mit einem Ereignis, einem Helden oder Objekt zusammenhängen.

• Money: Das Geld, das die Gruppe dabeihat
• Timer Seconds Left: Anzahl der restlichen Sekunden bei einer Timer-Funktion
• Party Size: Anzahl der aktuellen Gruppenmitglieder
• Number of Saves: Anzahl der bisherigen Speicherungen
• Number of Battles: Anzahl der bisherigen Kämpfe
• Number of Victories: Anzahl der Siege in diesen
• Number of Defeats: Anzahl der Niederlagen
• Number of Escapes: Anzahl der Fluchten
• MIDI Play Pos.: Zeitliche Position innerhalb der aktuellen Musik (in Ticks (ca.1000/s)

Die meisten dieser Funktionen sind praktisch, wenn man ein eigenes Menü mit zusätzlicher "Statistik-Funktion" einbaut.

Damit hätten wir das geregelt. Es ist wichtig, dass ihr hier alles versteht, da Variablen immer und immer wieder gebraucht werden (und je komplizierter es wird, desto öfter). Falls ihr also noch nicht ganz durchblickt, dann lest es euch noch ein zweites Mal durch.

D - Die Anwendung

Gut, dann wollen wir nun mal einen kleinen Teil unseres neuen Wissens anwenden (noch mehr dann später im letzten Abschnitt).
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)

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."

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.

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.


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!

Fork Conditions

Gut, von einem wichtigen Aspekt der Rpg-Maker Programmierung direkt zum nächsten, nämlich den Fork Conditions. Auch hier werden diejenigen von euch, die in der Schule schon mal Mathe/Info hatten oder sich in ihrer Freizeit mit Programmierung beschaffen, einen Vorteil haben. Es handelt sich um die "Wenn.. dann.." Funktion, in den meisten Programmiersprachen "IF...THEN".
Dabei wird ein bestimmtes Ereignis erstellt, dass allerdings nur eintritt, wenn eine bestimmte Bedingung erfüllt ist. Eigentlich kommen Forks schon in der linken Leiste mit den Start-Bedingungen vor. Dort hat man zwar keine besonders große Auswahl, aber man kann einstellen, dass die bestimmte Seite nur dann aufgerufen wird, wenn eine bestimmte Bedingung erfüllt wird, zum Beispiel, dass ein bestimmter Switch eingeschaltet ist, oder dass eine Variable einen besonderen Wert hat, etc.
Eine Fork Condition ist aber eine Funktion wie jede andere, dass heißt, sie wird innerhalb der Seite verwendet, um zum Beispiel in einem längeren Gespräch einen Satz anzeigen zu lassen, der entweder den Helden für eine getane Arbeit lobt, oder ihn daran erinnert, diese noch zu erledigen. Natürlich könnte man so was auch noch mit mehreren Seiten regeln, was allerdings nachher ziemlich unübersichtlich wäre.

Am besten schauen wir uns nun einmal die verschiedenen Funktionen von "Fork Conditions" etwas genauer an. Übrigens, den Befehl findet ihr rechts auf der dritten Seite in der Event-Auswahlliste.

Wie ihr sehen könnt, ist der Auswahlbereich der verschiedenen Forks in 2 Seiten aufgeteilt. Wir beginnen natürlich auf der ersten.

Switch: Hier lässt sich natürlich als Bedingung einstellen, dass der jeweilige Switch aus oder angeschaltet ist.

Variable: Und sofort tauchen sie wieder auf, unsere lieben Variablen ^^. Hier lässt sich als Bedingung einiges einstellen. Die bestimmte Variable muss entweder gleich (same), ungleich (others), größer (bigger), kleiner (smaller), größer gleich (above) oder kleiner gleich (below) einem bestimmten Wert (Set XXX) oder einer bestimmten Variable (Variable XXX) sein. Das heißt, hier lässt sich zum Beispiel als Bedingung einstellen, dass Variable X kleiner sein muss als 12, oder dass Variable Y nicht gleich Variable Z sein darf.

Timer: Auch wenn wir die Timerfunktion bisher noch nicht besprochen haben, lasst mich soviel sagen. Man kann einen Timer auf einen bestimmten Wert setzen, und zum Beispiel als Countdown bis zur Zerstörung eines Hauses oder so laufen lassen. Hier kann man nun als Bedingung einstellen, dass der Wert des Timer größer oder kleiner gleich X Minuten und Y Sekunden sein muss. Zum Beispiel könnte man den Helden sagen lassen "Ohoh, jetzt müssen wir uns beeilen!", wenn er nur noch eine Minute oder weniger Zeit hat.

Money: Hier lässt sich überprüfen, ob das Gold der Gruppe/des Helden größer oder kleiner ist, als ein bestimmter Wert. So kann man Verkäufer darauf hinweisen lassen, dass der Held wiederkommen soll, wenn er mehr Geld dabei hat, etc.

Nun wechseln wir auf Seite 2 der Auswahlliste.

Item: Hat der Held ein bestimmtes Item dabei (has it), oder hat er es nicht (doesn't have it)?

Hero: Zuerst lässt sich hier der Name des Helden auswählen, der die Grundlage der Bedingung sein soll. Mit einem Doppelklick auf das Feld darunter (oder mit einem einfachen Klick auf das "...") lässt sich ein weiteres Fenster öffnen, in dem man nun die Bedingung wählt.

• Is in Hero Party: Überprüft, ob der Held in der aktuellen Party ist

• Name =: Hat der Held einen bestimmten Namen?

Moment: Haben wir nicht vorhin noch ausgewählt, um welchen Helden es hier geht? Ja, aber es gibt auch eine Funktion, mit der man den Namen des Helden ändern kann! Das heißt, hier geht es um den Namen, den der Held im Moment hat.


• Level ... above: Ist die Stufe des Helden höher oder gleich XXX?

• HP ... above: Hat der Held noch mindestens XXX Lebenspunkte?

• Special Skill: Kann der Held die Fähigkeit ****** einsetzen?

• Item: Hat der Held das jeweilige Item ausgerüstet?

• Condition: Ist der Held in einem bestimmten Zustand (zum Beispiel vergiftet/tot)?

Gut, nun zurück zur zweiten Seite der Forks.

Event: Hat das bestimmte Event (meist Personen) den Kopf nach oben/unten/rechts/links gewandt?

Vehicle: Ist der Held gerade mit dem Boot, dem Schiff oder dem Luftschiff unterwegs?

Started by Decision Key: Wurde dieses Ereignis dadurch ausgelöst, dass der Spieler die Enter/Leertaste gedrückt hat? (Oder wurde es von einem anderen Event gerufen/musste der Held dagegen oder darüber laufen)

Play BGM Once: Tritt nur ein, wenn die Hintergrundmusik mindestens einmal komplett abgespielt wurde.

Und dann wäre da noch:

Add ELSE Case: Dies ist eine sehr nützliche Funktion, um ein bestimmtes Ereignis ausführen zu lassen, wenn das gewählte Ereignis NICHT eintrifft. Wenn man keinen solchen Fall haben will, einfach das Häkchen wech ^^'

So, wenn man jetzt irgendwas davon auswählt wird im Event ein derartiges Schema erscheinen:

<> FORK: Optn: XXXYYYZZZ
<>
(:ELSE Case
<>)
:END Case
<>

Der Abschnitt von FORK bis END bzw. bis ELSE, ist der Abschnitt, der eintritt, wenn die Bedingung erfüllt wird, der Abschnitt von ELSE bis END (wenn er denn da ist), wenn die Bedingung nicht erfüllt wird. Alles nach dem END Case wird dann wieder auf jeden Fall angezeigt.

Wenn man nun will, dass nicht nur eine, sondern zwei oder mehrere Bedingungen erfüllt werden, dann muss man einfach mehrere Forks ineinander verschachteln. Ich möchte mal ein kleines Beispiel für ein weiter fortgeschrittenes Fork-System darstellen:

<> FORK Optn:Switch[1] - ON
<> FORK Optn:Switch[2] - ON
<> FORK Optn:Switch[3] - ON
<> Messg: Alle sind an
<>
:ELSE Case
<> Messg: Switch 1 und 2 sind an
<>
:END Case
<>
:ELSE Case
<> FORK Optn:Switch [3] - ON
<> Messg: Switch 1 und 3 sind an
<>
:ELSE Case
<> Messg: Nur Switch 1 ist an
<>
:END Case
<>
:END Case
<>
:ELSE Case
<> FORK Optn:Switch[2] - ON
<> FORK Optn: Switch[3] - ON
<> Messg: Switch 2 und 3 sind an
<>
:ELSE Case
<> Messg: Nur Switch 2 ist an
<>
:END Case
<>
:ELSE Case
<> FORK Optn:Switch[3] - ON
<> Messg: Nur Switch 3 ist an
<>
:ELSE Case
<> Messg: Kein Switch ist an
<>
:END Case
<>
:END Case
<>
:END Case
<>


So, falls ihr das jetzt nicht versteht, dann ist das erstmal nicht schlimm. Im Rpg-Maker ist das alles auch etwas übersichtlicher. Wichtiger ist aber, dass ihr euch das anschaut. Fangen wir oben an: Zuerst werden nacheinander alle drei Switches überprüft, ob sie an sind. Wenn ja, dann wird die Nachricht angezeigt, dass alle Switches an sind. Danach kommt das erste ELSE, also der Fall, wenn der dritte Switch nicht an ist. Natürlich kommen wir zu dieser Stelle nur hin, wenn 1 und 2 an sind. Deshalb wird die Nachricht angezeigt, dass nur Switch 1 und 2 an sind. Dann, beim nächsten ELSE Case ist also Switch 2 ausgeschaltet. Da aber zu diesem Zeitpunkt Switch 3 noch ansein könnte, wird dies in einer weiteren Fork überprüft. Wenn Switch 3 an ist, wird angezeigt, dass er und Switch 1 angeschaltet sind (denkt dran, wir befinden uns immer noch in der ersten Fork, die überprüft, dass Switch 1 an ist). Wenn nicht, dann kommt die Nachricht, dass nur Switch 1 angeschaltet ist.
Beim nächsten ELSE Case, das von der ersten Fork wird wiederum überprüft ob Switch 2, und dann auch Switch 3 an sind (das weiß der Maker ja nicht, wenn direkt bei der ersten Fork abgebrochen wird). Wenn beide an sind, wird das angezeigt. Wenn der dritte ausgeschaltet ist, kommt die Nachricht, dass nur der zweite an ist. Ist der zweite aber auch schon aus, wird wiederrum überprüft, ob der dritte an ist (wenn dieser Fall kommt, wurde ja immer schon vor dem dritten Switch abgebrochen!). Ist dies der Fall, ist er der einzige angeschaltete, wenn nicht, dann sind alle Switches aus.

Ich hoffe ich konnte euch so schon mal einen kleinen Einblick darauf gewähren, womit ihr euch später herumschlagen müsst. Nun aber zurück zum (noch) einfachen Leben.

Die Grundfunktionen der Forks habt ihr nun hoffentlich verstanden, jetzt mache ich noch eine einfache Anwendung dafür. (Oder zwei?)

Stellt am besten irgendwo in die Ecke eurer Map eine zwielichtig aussehende Person, die der Held anreden kann. Die Person sollte so tun, als ob sie dem Helden unbedingt Informationen verkaufen will, die sich allerdings als Geldverschwendung erweisen. Mit Hilfe einer Fork könnt ihr dann überprüfen, ob der Held genug Geld dabei hat. Wenn ja, dann wird ihm das Geld angezogen, und die Person gibt ihre wichtige Information Preis. Wenn nein, dann fordert sie den Helden auf, mit genügend Geld zurückzukommen. Natürlich wird im ersten Falle ein Switch angeschaltet. Dann kann man zum Beispiel ans Tor noch eine zweite Wache stellen, die dann ein Gespräch mit dem Helden führt und ihn vor dem Betrüger warnen will.
Wenn der Held dann schon auf den Betrüger hereingefallen ist, sagt er etwas wie "Danke, aber es ist schon zu spät..".

Das sollte alles sein, was es erst einmal zu sagen gibt, aber einen kleinen Tipp noch: Wem das mit dem dreifach verschachtelten Fork-System zu kompliziert ist, für den gibt es eine angenehme Erleichterung (auch wenn man das nicht immer so machen kann): Wenn der erste Switch aktiviert ist, addiert zu einer beliebigen Variable 1. Für den zweiten Switch 2 und für der dritten 4 (bei 4 Switches dann noch 8, dann 16, ..). Wenn nun die Variable auf 00 steht, ist keiner aktiviert, bei 1 nur der erste, bei 2 nur der zweite, bei 3 die ersten beiden, bei 4 nur der dritte, bei 5 der erste und dritte bei 6 der zweite und der dritte, und bei 7 alle. So kann man zum Beispiel eine Variable für drei oder mehr Switches verwenden. Viel Spaß beim Experimentieren!

Show Choice

So, weiter geht’s zu noch einer wichtigen Funktion des Makers, die einzigen Unterschiede dieses Mal sind, dass sie weder besonders kompliziert ist, noch besonders umfangreich, noch, dass es viel über sie zu erzählen gibt.
Show Choice ist eine Auswahlfunktion. So kann man nach einem Gespräch fragen, ob der Spieler alles verstanden hat und wenn er mit Nein antwortet, die wichtigen Fakten noch einmal aufzählen lassen.
Man kann ebenso den Spieler vor die Wahl stellen, welchen von drei Orten er zuerst besuchen möchte, usw.
Dem Spieler die Wahl zu lassen ist oft ein entscheidender Faktor für ein Spiel. Wenn zuviel ohne Einfluss des Spielers geschieht, wird dieser dann oft nur noch zum Zuschauer eines interaktiven Spielfilmes, in dem er ab und zu Kampfkommandos geben darf.
Wenn man den Spieler stärkeren Einfluss gewähren will, wäre eine Möglichkeit, die Dialoge des Spieles im Multiple-Choice Verfahren zu gestalten, wie es oft in Adventures benutzt wird. Dass heißt, der Spieler wählt selbst aus, was der Held sagen soll.

Man kann den Spieler maximal zwischen 4 Möglichkeiten wählen lassen, will man weniger haben, dann einfach das ungewünschte Feld freilassen. (Wenn man aber das dritte freilässt und etwas ins vierte Feld schreibt, wird das dritte Feld auch als Auswahl gelten). Auf der rechten Seite kann man aus einer Liste von Möglichkeiten unter der Überschrift "Cancel Case" wählen.

Dieser Fall tritt ein, wenn man bei einer Auswahl im Spiel die Escape-Taste drückt. Die Standarteinstellung ist auf "Choose 2", was daran liegt, dass oft Fragen der Art ja oder nein gestellt werden. Wenn man dann abbricht, wird "Nein" gewählt.
Ignore bewirkt, dass beim Druck der Abbrechen-Taste nichts passiert, bei Add Case wird ein weiterer Fall hinzugefügt.

Mit den verschiedenen Fällen ist es wie bei den Fork Conditions. Das, was nach der jeweiligen Auswahl passieren soll, muss immer zwischen das XYZ - Case und das entsprechende END Case gestellt werden. Was hinter das letzte End Case gestellt wird, passiert dann wieder in jedem Fall.
Nun ist es an der Zeit, einige Choices in das Kursprojekt einzubauen, um das ganze zu testen. Zu aller erst nehmen wir uns den Betrüger aus dem letzten Kapitel vor, schließlich soll man als Spieler ja auch die Chance haben, nicht auf ihn hereinzufallen, selbst wenn man genug Geld hat. Deshalb packen wir an eine passende Stelle die Choice, ob der Held das Angebot des Betrügers annehmen will. In den "Ja"-Case packen wir dann alle folgenden Aktionen, in den Nein-Case eine Message der Art: "Kommt wieder, wenn Ihr es Euch anders überlegt habt!"

Ähnliche Fragen könnt ihr in viele Dialoge usw. einbauen!


• Kann ich vor die Auswahl noch Text etc. bringen?
Ja, das geht schon. Text könnt ihr reinbringen in dem ihr vor die Auswahl eine Message packt, die aber noch genug Platz lässt. Beispiel: Wenn der Spieler die Auswahl zwischen drei Sachen hat, dann darf im Text nur eine Zeile stehen.
Ihr könnt auch ein FaceSet reinbringen (Genauergesagt, er nimmt das letzte ausgewählte FaceSet, dass heißt, wenn ihr kein Face haben wollt, unbedingt ein SelectFace: Erase davor setzen), in dem ihr den normalen Befehl dafür verwendet.


• Wie kann ich mehr als 4 Auswahlmöglichkeiten einstellen?
Das geht, und wenn auch nur über Umwege:
Ihr könnt in der rechten Auswahl "Add Case" wählen. In diesen zusätzlichen fall macht ihr dann eine weiter Choice mit neuen Antworten. dass lässt sich natürlich beliebig oft wiederholen. Natürlich ist das mit dem Zurückkommen dann so eine Sache, für eure bisherigen Kenntnisse ist das nicht möglich (auf jeden Fall nicht besonders elegant), deshalb will ich kurz einen neuen Befehl einführen (bzw. 2). Auf Seite 3 findet ihr den Befehl "Label" und direkt darunter den Befehl "Goto Label". Dieses Label (mit irgendeiner Nummer) setzt ihr vor die erste Choice. Und den Goto Label Befehl (mit der gleichen Nummer) setzt ihr an die Stelle (also in die jeweilige Auswahl) bei der es wieder zurückgehen soll. Diese Labels sind Anhaltspunkte, zu denen man jederzeit zurück (oder vor) springen kann.

Abschließend ist noch zu sagen: Macht Gebrauch von dieser Funktion: Je mehr Auswahl der Spieler hat, desto spannender wird’s (im Normalfall)!