Setzen Sie das Spielermodell ins Level. Geben Sie ihm die Action "hero". Wenn sie FLAG1setzen, wird der x-Wert der Kamera sowie der z-Wert der Kamera mit den Werten des Spielers gleichgesetzt. Dies ist bei langen Leveln nützlich. Setzen Sie FLAG2, so wird sich die Kamera immer auf den Spieler richten - wo auch immer dieser hingeht.
Jeder Dialog ist in Kapitel aufgeteilt. Jedes Kapitel enthält eine Dialogzeile des Angesprochenen, sowie mehrere Zeilen zur Auswahl für den Spieler. Zu Anfang eines Kapitels müssen sie ein solches definieren, das machen Sie mit "chapter" und der Nummer des Kapitels. Zu Anfang ist dies 1 (das erste Kapitel MUSS 1 sein, es darf kein Kapitel 0 geben!). Schreiben Sie also:
chapter1
Gut, das Kapitel ist definiert. Nun die Dialogzeile des Angesprochenen (des Smileys, beispielsweise):
Hallo ich bin ein Smiley und lache den ganzen Tag!
WICHTIG: ES DARF KEIN KOMMA VORKOMMEN!
Dies ist also der Satz, den die Entity als erstes sagt. Nun tippen Sie die erste Antwortmöglichkeiten ein, bis zu Fünf (5) sind möglich:
Hallo Mr. Smiley
2
Sie fragen Sich, was die 2 zu bedeuten hat? Nachdem der Spieler diese Antwortmöglichkeit ausgewählt hat, springt der Dialog zu Kapitel 2. Wenn Sie möchten, dass nach Auswahl einer Zeile zu Kapitel 23 gesprungen wird, so schreiben Sie 23 unter die Zeile. Soll der Dialog danach beendet werden, schreiben Sie 0.
Mit der Zeilendefinition machen Sie nun weiter, bis Sie bei der letzten Zeile (entweder Sie möchten keine mehr, oder die fünfte ist erreicht) angekommen sind. Darunter schreiben Sie END. Sobald wir an dieser Zeile angekommen sind, weiss das Skript: Das Kapitel ist zu ende. Da das ganze evtl. nicht ganz leicht zu verstehen ist, habe ich die Datei demo_talk angehängt. Sie enthält einen funktionierenden, verzweigten Dialog mit erstaunlich wenig Humor.
e:
Wenn Sie ein "e:" vor die Zeile schreiben, so spricht der Angesprochene mehrere Zeilen Text. (Funktioniert wie ein \n in WDL). BEISPIEL:
chapter4
Hallo?
e:Geht es dir gut?
...
"Geht es dir gut" wird in diesem Beispiel unter "Hallo?" angezeigt. HINWEIS: Diese Option steht nur beim Sprechenden zur Verfügung, nicht bei den Antworten.
do:
Führt die nachfolgende Zeile C-Skript aus. HINWEIS: Es sind KEINE While-Schleifen möglich! Zugriffe auf alle Pointer außer selected_entity ist möglich. Parameter von Modellen, die keine Action zugewiesen haben, lassen sich NICHT verändern! Alle Befehle, die ein warten veranlassen (sleep, beispielsweise) sind NICHT möglich. Beachten Sie, dass dies nur beim Angesprochenen zur Verfügung steht und die erste Zeile nach chapter ein normaler Text-String sein muss. BEISPIEL:
chapter4
Dafür werde ich dich verschwinden lassen!
do:player.invisible = on;
...
Hier wird der Player unsichtbar gemacht. Da der Spieler eine Action zugewiesen bekommen hat (hero), können wir auf ihn zugreifen.
wait:
Dieser Befehl funktioniert wie sleep in WDL. Nach der Eingabe von wait: können Sie eine beliebige Zahl eingeben. Das Skript wird diese Anzahl Sekunden warten, bis es fortfährt. So ist es möglich, dass der Sprecher eine kleine Pause macht. BEISPIEL:
chapter37
Okay. Mir fällt noch ein Witz ein!
wait:5
e:Äähm... Na gut. Doch nicht.
...
In diesem Beispiel wird die erste Zeile angezeigt. Anschließend wartet das Skript 5 Sekunden, dann wird die zweite Zeile angezeigt.
if:
Fügen Sie hiernach eine Bedingung ein (wie sie es zwischen den Klammern einer if-Bedingung in C-Skript tun). Die nachfolgende Zeile wird nur ausgeführt, wenn die Bedingung WAHR ist. BEISPIEL:
chapter7
Hallo!
if:adv_var[56]==1
e:Haben wir schon über dieses... Ding geredet?
In diesem Beispiel wird die Zeile "Haben wir schon über dieses... Ding geredet?" nur angezeit, wenn adv_var[56] (das ist ein Array) = 1 ist. Es ist zwar möglich, entity-Skills für die IF-Bedingung zu verwenden, es ist jedoch nicht empfehlenswert, da dieser nach einem Raum-wechsel (hier also ein Level-Wechsel) wieder 0 beträgt. HINWEIS: Für die IF-Bedingungen ist ein Array namens adv_var vordefiniert. Dieser speichert bis zu 500 Einträge. Um ihn nutzen zu können einfach adv_var[x] eingeben, wobei x eine Zahl zwischen 0 und 499 sein kann. adv_var[x] funktioniert ansonsten wie eine Variable (es ist also quasi so, als seien 500 Variablen vordefiniert). Denken Sie auch daran bei IF-Bedingungen zwei "=" zu verwenden!
use_xxx
was geschehen soll
Anstatt des xxx setzen Sie den Skill1-Wert des Objektes ein, mit dem das Objekt benutzt wird.
BEISPIEL:
Sie haben also ein Objekt mit dem Wert 1 für Skill1 und Flag2 gesetzt. Nun kann man es aufnehmen (denken Sie an die Inventar-bitmap-definition!). Nun soll ein anderes Objekt ETWAS tun, wenn man es mit dem eben erwähnten Objekt benutzt. Schreiben Sie also in die definierte Datei use_001. Die nachfolgende Zeile wird ausgeführt, wenn der Spieler das zuerst definierte Objekt (mit 1 als Skill1) mit dem anderen Objekt (mit der angehängten Datei, die wir gerade ändern) benutzt. Hier wollen wir einen Dialog starten:
use_001
needb = 8; start_dialog=1;
Durch das Setzen der Variable start_dialog wird - wer kanns erraten - ein Dialog gestartet. Der Dialog beginnt in dem Kapitel, das durch needb angegeben wird (hier also 8). Denken Sie an die ";"!
So, das war glaube ich alles. Anschließend die komplette Liste an gültigen Befehlen, sowie was Skills und Flags bewirken
ANTWORTMÖGLICHKEIT
Schreiben Sie nach allen Zeilen des Angesprochenen bis zu fünf Antwortmöglichkeiten. BEISPIEL:
chapter2
Hallo! Hier sprecht der Angesprochene!
Dies ist Antwortmöglichkeit Nummer 1!
5
Dies ist Antwortmöglichkeit Nummer 2!
6
Hier ist die dritte Antwortmöglichkeit!
7
Nach dieser Antwortmöglichkeit beenden!
0
END
Die Zahl unter der Antwortmöglichkeit gibt an, zu welchem Kapitel gesprungen wird, wenn diese Antwortmöglichkeit ausgewählt wurde. Bei 0 wird der Dialog beendet. Nach der letzten Antwortmöglichkeit muss END folgen, wenn keine fünf Antworten verwendet wurden.VERFÜGBAR: Zwischen Text und eventuellen nachfolgenden Befehlen des Angesprochenen und END.
e:
Fügt eine zusätzliche Zeile ein, die der Angesprochene spricht. BEISPIEL:
chapter6
Dies ist Zeile 1!
e:Dies ist die zweite Zeile! das e: am Anfang wird nicht angezeigt!
Hier Antwortmöglichkeit Nummer 1
14
VERFÜGBARKEIT: Nach der ersten Zeile Text des Angesprochenen, auch nach anderen Anweisungen.
do:
Führt sämtlichen in der selben Zeile nachfolgenden C-Skript-Code aus. Der my-Pointer zeigt auf die sprechende Entity. If-Anweisungen sind möglich, While-Schleifen nicht. Sämtliche Skills lassen sich zwar umdefinieren sind aber nach einem Level-wechsel (also raumwechsel) nicht mehr gültig - nehmen sie stattdessen besser Variablen. Zu diesem Zweck vordefiniert ist der Array adv_var[500]. BEISPIEL:
chapter22
Dies ist der Text des sprechenden!
do:adv_var[50]=6; my.pan -= 180; camera.roll = 90;
Dies ist die erste Antwortmöglichkeit!
6
In diesem Beispiel wird adv_var[50] auf 6 gesetzt, der sprechende dreht sich um und die Kamera dreht sich. Die Kamera-roll-definition sowie die my-pan definition sind nach einem Levelwechsel (=Raumwechsel) nicht mehr aktiv.VERFÜGBARKEIT: Nur solange der Angesprochene spricht. Die erste Zeile nach chapterx MUSS ein Text-String sein.
wait:
Wartet die angegebene Zahl von Sekunden. BEISPIEL:
chapter7
Ich warte 5 Sekunden...
e:dann sage ich noch was!
wait:5
e:Und zwar Hallo!
ANTWORTMÖGLICHKEIT 1
1
END
Hier wartet das Skript 5 Sekunden lang. VERFÜGBARKEIT: wait ist nur zwischen Textzeilen und Befehlen des Angesprochenen verfübar.
if:
Führt die nachfolgende Zeile C-Skript-Code aus, wenn die in der selben Zeile nachfolgende Bedingung WAHR ist. HINWEIS:If-Anweisungen sind auch im Do-Code möglich, dann jedoch im normalen C-Skript-Syntax (IF(bedingung==1) { ...).
Nach dem IF schreiben Sie die Bedingung so, wie sie auch zwischen den Klammern einer IF-Bedingung in C-Skript steht.BEISPIEL:
chapter1
if:adv_var[3]==0
BRING MIR WASSER!
if:adv_var[3]==1
Danke dass du mir Wasser gebracht hast!
Ups - mit dir wollt ich gar nicht reden...
0
if:adv_var[3]==0
Ich soll dir Wasser bringen?
3
if:adv_var[3]==1
Ich habe dir gerne Wasser gebracht
13
END
IF können Sie vor jede Zeile schreiben, die nachfolgende wird nur ausgeführt, wenn die Bedingung wahr ist. Schreiben Sie IF in einem Antwortstring, so werden die nächsten ZWEI Zeilen übersprungen, wenn die Bedingung falsch ist (also Antwortmöglichkeit + Kapitelzahl, in das gesprungen wird).VERFÜGBARKEIT: IF können Sie jederzeit verwenden, außer: vor einer Kapitelzahl, in das gesprungen werden soll (schreiben Sie iF stattdessen vor den Antwortstring und definieren Sie zwei verschiedene Antwortstrings), sowie vor dem ersten Antwortstring. Dieser muss ohne IF erfolgen (bestenfalls also hier eine Antwort die zum Abbruch des Gespräches führt).
use_xxx
Verwenden Sie die ID des zu benutzenden Gegenstandes statt xxx!
Die nachfolgende Zeile C-Skript-Code wird ausgeführt, wenn der Spieler das Objekt mit dieser ID mit dem Objekt mit dieser angehängten Datei benutzt (angehängt bedeutet: Das Objekt hat denselben Namen wie die Datei). BEISPIEL:
use_012
my.pan -= 180; start_dialog = 1; needb = 57;
Hier gilt das selbe, wie bei do. Wenn start_dialog auf 1 gesetzt wird, wird ein Dialog gestartet. Dieser beginnt in dem Kapitel, welches durch needb angegeben wird (hier 57). VERFÜGBARKEIT: use ist NUR AM ANFANG der Datei verfügbar.
DEM SPIELER EIN NEUES OBJEKT MIT DER ID xx GEBEN (Setzen Sie ihre eigenen Zahlenwert für xx ein!):
inventar[inventar_stelle+1]=xx;
DER SPIELER SOLL EINEN BESTIMMTEN TEXT SAGEN
Dafür gibt es die Funktion player_says(string). Soll der Spieler also etwa sagen "Was für ein seltsamer Ort", tippen Sie: player_says("Was für ein seltsamer Ort!");
Das Skript wartet danach eine gewisse Zeit, die von der Länge des Strings abhängt. Möchten Sie die Zeit selber festlegem, können Sie die Function player_says_time(string,a) aufrufen, wobei string der zu sagende String ist und a die Zeit, die gewartet werden soll (in Ticks). Dies steht aufgrund des benötigten Kommas NUR in den Skript-Dateieien zur Verfügung, NICHT in den TXT-Dateien!
DAS SKRIPT ANHALTEN
Setzen Sie die Variable adv_freeze auf 1, so werden innerhalb des nächsten Frames alle Funktionen gestoppt sein. Sobald die Variable wieder auf 0 steht, laufen die Skripte weiter.
NAME DES SKILLS/FLAGS | FUNKTION | BEMERKUNGEN |
SKILL1 | ID des Objektes | Ist gleich die Position des Namens in "names.txt" und gleich der Position des Beschreibungstextes in "watch.txt". |
SKILL2, SKILL3, SKILL4 | Erstellungsvektor des Spielers bei Türen | Ist nur wichtig, wenn FLAG3 gesetzt. Der Spieler wird nach dem Levelladen an diesem Vektor erstellt. |
FLAG1 | Das Objekt lässt sich aufnehmen | Denken Sie daran die Bitmap für das Inventar zu definieren! |
FLAG2 | Man kann mit dem Objekt reden | Sie müssen eine Datei an das Objekt hängen, indem sie den Namen derselben als Name für das Objekt nutzen. |
FLAG3 | Das Objekt ist eine "Tür" und führt in einen anderen Raum | Geben Sie als Namen den Dateinamen des zu ladenden Levels ein (ohne Endung). Denken Sie an Skill2, Skill3 und Skill4! |
FLAG4 | Der Spieler muss dieses Objekt nicht erreichen, um mit ihm spreche zu können | Wenn nicht gesetzt, bewegt sich der Spieler auf 90 Quants an die Entity heran |