Okay. Fangen wir an. Erstellen Sie irgendwo in den Tiefen ihrer Festplatte einen neuen Ordner und geben Sie ihm einen Namen ihrer Wahl. Es wäre durchaus ratsam, einen Namen wie "Adventure" oder "Pac-Test" zu geben, aber die Entscheidung liegt bei ihnen. Nachdem Sie dies getan haben, starten Sie WED. Wählen Sie File -> New und Sie sehen ein neues Level vor sich (naja, Sie haben bestimmt schonmal mit Wed gearbeitet, ich erzähle hier also nichts neues ;) ). Da wir nur ein kleines Demolevel machen, Werden wir hier nur einen kleinen Raum machen. Sie können ihn natürlich, wenn Sie wollen, mit Details vollstopfen, doch mir reicht erstmal die simple Variante. Also: Add Hollow Cube -> Large. Nun laden wir den Spieler ins Level, damit wir Größenverhältnisse auf ihn abstimmen können. Object -> Load Entity. Ich nehme jetzt mal das mitgelieferte Modell warlock.mdl. So. Nun, wo wir schonmal unser erstes Modell haben, können wir gleich das Skript erstellen. Damit das geht, müssen wir unser Level erst speichern File -> Save. Nehmen Sie einen beliebigen Namen (Keine Leerzeichen!), ich werde mein Level eins nennen. Speichern Sie es im eben erstellten Ordner. Weiter gehts, wir brauchen ein Skript: File -> Map Properties. Erstellen Sie ein neues Skript. Laden Sie das eben erstellte Skript mit einem Editor ihrer Wahl und Sie sehen eine ganze Menge von WED erstelltes Skript. Nur brauchen wir das leider alles nicht, darum löschen Sie es! Jawohl, das ganze Skript. Wählen Sie also so etwas wie Edit -> Select All und drücken Sie auf [Entf]. Und schon ist das Skript weg. Dann fangen wir mal an zu skripten. Zuerst die Auflösungs-definitionen. Schreiben Sie die folgenden Zeilen in ihr Skript:
var video_mode = 8; // Auflösung:1024x768
var video_depth = 32; // 32 Bit
Nun haben wir die Auflösung. Nun speichern Sie alle mitgelieferten Dateien in dem Ordner, in dem sich auch die Datei befindet, die wir gerade bearbeiten. In diese schreiben Sie diese Zeile:
include "pac.wdl"; // Point And Click
HINWEIS: Es wäre besser, spitze Klammern zu verwenden. Nur leider ist das hier ein HTML-Dokument, darum kann ich keine verwenden...
So. Nun fehlt noch die Main-function. Hier könnte man jetzt die tollsten Menüs programmieren - uns reicht erstmal das Starten des ersten Levels:
string level_str = "eins.wmb";
function main {
level_load(level_str);
}
HINWEIS: Es wäre besser, spitze Klammern zu verwenden. Nur leider ist das hier ein HTML-Dokument, darum kann ich keine verwenden...
Denken Sie daran, ihren eigenen Level bei "eins.wmb" einzutragen! Gut. Erstmal genug geskriptet. Speichern Sie die Datei ab und gehen Sie zurück in WED. Wie weit waren wir gekommen? Ach ja richtig, wir hatten gerade den Spieler ins Level geladen. Nun klicken Sie mit der rechten Maustaste auf ihn und wählen Sie Properties.... Wählen Sie "behaviour" und geben Sie ihm die Action "hero".
Sie sehen keine Actions? | Möglichkeit A) Die Skripte "pac.wdl" und "wegf.wdl" sind nicht im Game-verzeichnis. Kopieren Sie diese dorthin. | Möglichkeit B) Ihr WED hat kein permanentes neuladen der Dateien gesetzt. Speichern Sie ihr Level und laden Sie es erneut. |
Gut, nun haben wir unseren Spieler! Designen Sie ihr Level zu ende. Füen Sie ihre Texturen ein, stimmen Sie das Lightning ab und so weiter uns sofort. Wichtig: Geben Sie dem Level eine Skybox. Diese darf NICHT das Flag Passable gesetzt haben! Denken Sie daran, dass die Kamera das GESAMTE Level sehen muss! Platzieren Sie die jetzt. Sie sollte so viel wie möglich vom Level sehen können. Wenn Sie beim Spieler FLAG1 setzen, werden x und z Werte der Kamera an den Spieler angepasst, setzen Sie FLAG2 richtet sich die Kamera ständig auf den Spieler. Gut. Nun müssen wir die Nodes für die Wegfindungsroutine setzen. Laden Sie ein beliebiges Modell in WED. Am besten ein kleines, aber das ist egal. Nun verpassen Sie ihm die Action node. Geben Sie "1" im Fenster Skill1 ein, und bewegen es auf einen wichtigen Knotenpunkt im Level. Speichern Sie. Nun kopieren Sie das Modell, geben "2" im Properties-Fenster bei Skill1 ein und platzieren Sie es auf einen anderen Knotenpunkt im Level. Der Wert, den Sie bei Skill1 eingeben, ist die ID des Nodes. Setzen Sie auf diese Art und Weise auf jeden Knotenpunkt im Level (also bei Ecken, zum Beispiel) einen Node. Wenn Sie damit fertig sind, öffnen Sie wieder das Eigenschaften-Fenster des ersten Nodes. Geben Sie nun bei den folgenden Skills (bis zu Skill10) die ID der Nodes an, zwischen denen keine Hindernisse sind (wenn man also vom Node mit der ID 1 ohne Probleme zum Node mit der ID 2 gehen kann, so geben Sie "2" beim ersten Node ein (bei einem Skill zwischen 2 und 10)). Das machen Sie solange, bis jeder Node alle Verknüpfungen hat.
HINWEIS: Sollten der Spieler beim Gehen später einfrieren, so liegt es zu 90% an der falschen Platzierung und Verknüpfung von Nodes, z.B. befinden sich zwei Nodes an der gleichen Stelle, zwei Nodes haben die gleiche ID oder es fehlt eine Verbindung bei einem Node.
Okay! Wenn Sie nun ihr Level builden und starten, sollte folgendes Geschehen:
- Ihr Level wird geladen in einer Auflösung von 1024x768.
- Sie sehen am unteren Bildschirmrand eine kleine scrollbare Leiste.
- Der Mauszeiger ist zu sehen, in Form eines kleinen Auges.
- Der Spieler spielt seine "stand"-Animation ab.
Mit der rechten Maustaste können Sie die Art des Mauszeigers ändern, sie beginnen beim Modus "Beobachten", darauf folgt der Modus "Nehmen", bzw. "Sprechen" (wenn Flag2 gesetzt) und zuletzt "Gehe zu". Nach einem weiteren Rechtsklick folgt wieder "Beobachten". Klicken Sie im "Nehmen", bzw. im "Gehe zu"-Modus auf einen beliebigen Punkt im Level, wird sich der Spieler hinbewegen. Beachten Sie dazu auch den eben genannten Hinweis.
Okay, das ist doch schonmal etwas! Nun beginnen wir mit dem ersten Rätsel. Die Tür ist versperrt, der Spieler gefangen - was tun? Wir werden hier ein relativ simples Rätsel machen. Faustregel: Je mehr Objekte miteinander kombiniert werden müssen, desto schwerer. Bitte beachten Sie beim Rätseldesign, dass Objekte im Inventar NOCH NICHT miteinander kombinierbar sind! Das wird in einer der nächsten Versionen folgen. Wie kommt der Spieler raus? Mit einem noch zu findenden Diamanten soll der Spieler ein Fenster zerschneiden. Das wird das Rätsel, welches ich hier erstelle, sie können aber ihr eigenes machen. Nun gut: Bauen Sie ein Fenster aus Primitives und laden Sie eine Glas-Entity in WED (Am besten eine Sprite). Normalerweise benötigen Objekte keine Action, aber da wir diese Sprite später morphen wollen, geben wir ihm eine. Schreiben Sie in ihr Skript:
ACTION fenster {
my.oriented = on;
}
Das war aber noch nicht alles. Das Fenster bekommt nun eine ID. Jedes Objekt, dass der Spieler sehen kann und einen Namen bekommen soll (oder mit dem irgendetwas machbar sein soll), bekommt eine. Da das Fenster unser erstes Objekt ist, geben Sie ihm die ID 1. Nun öffnen Sie die Datei "names.txt" mit einem Texteditor. Hier stehen alle Namen von allen Objekten, die wir im Level haben. Wenn das Skript den Namen anzeigt, liest es sooft Strings aus, wie es in der ID des Objektes steht. Beim Fenster, dass ja die ID 1 hat, demzufolge 1 mal. Also ist gleich der erste String der Name des Fensters. Wir schreiben also in die "names.txt"-Datei:
Schickes Glasfenster
(bestätigen Sie das mit Enter). Speichern Sie die Datei und öffnen Sie "watch.txt". Hier stehen ebenfalls die ganzen Strings aller Objekte, doch hier die Sätze, die die Spielfigur sagt, wenn wir im "Betrachten"-Modus darauf klicken. Schreiben Sie also in die Datei:
Ein ausgesprochen schönes Glasfenster
Speichern Sie die Datei. Öffnen Sie ein letztes Mal eine Datei, dieses Mal "invent_files". Dieses Objekt kann man nicht aufnehmen, demzufolge braucht es auch keine Inventar-Bitmap. Also schreiben Sie:
dummy_map
dummy_map ist bereits vordefiniert. Speichern Sie auch diese Datei. Wenn Sie nun das Level builden, und danach auf "Run!" klicken, sollten Sie den String "Betrachte Schickes Glasfenster", bzw. "Nimm Schickes Glasfenster" oder "Gehe zu Schickes Glasfenster" sehen, sobald sich der Mauszeiger über dem Objekt befindet. Klicken Sie darauf, während Sie im "Beobachten"-Modus sind: Der Spieler sagt tatsächlich "Ein ausgesprochen schönes Glasfenster"! Im "Nehmen"-Modus sagt er hingegen "Das hebe ich nicht auf!" und im "Gehe zu"-Modus marschiert er unermüdlich hin. Das funktioniert ja ausgezeichnet. Und es geht weiter. Wir werden nun eine weitere Person ins Level laden, mit der der Spieler spricht. Wenn er dies tut, wird sie ihm nicht nur antworten, nein - wenn der Spieler das richtige fragt, wird dieses Objekt dem Spieler sogar etwas geben. Noch nicht der Diamant, das wäre zu einfach, aber etwas, mit dem der Spieler an den Diamanten herankommt. Laden Sie also ein Modell oder von mir aus auch eine Sprite in ihr Level. Dieses Objekt braucht keine Action, aber geben Sie ihr trotzdem die Action "simple_one". Warum? Wenn nicht, wird das Objekt all ihre Animationen in einer Endlosschleife abspielen - und das wollen wir nicht. Weiter: Geben Sie "2" bei Skill1 ein (die ID, sie erinnern sich) und setzen Sie FLAG2. Wir sind aber noch nicht fertig, momentan weiß das Skript nur: Gut, man kann mit diesem Objekt reden, aber WAS geredet wird ist unbekannt. Klicken Sie auf die Registerkarte "properties". Hier haben Sie die Möglichkeit, einen Namen für ihre Entity einzugeben. Hier geben Sie den Namen einer angehängten Datei ein. Für unser Objekt nehmen wir mal die Datei "talk_one". Geben Sie also "talk_one" (ohne die ") ein. Gut: Auf zu unseren Dateien! Wir müssen erst noch Namen und so weiter definieren, gehen Sie vor wie folgt:
- Öffnen Sie "names.txt"
- Geben Sie nach dem eben definierten Namen (in der nächsten Zeile) den Namen ihrer Figur ein (zum Beispiel: "missmutiger Rumpelstilzchenverschnitt")
- Speichern und schließen Sie die Datei.
- Öffnen Sie "watch.txt"
- Geben Sie nach dem eben definierten String (in der nächsten Zeile) einen neuen ein, der von dem Spieler nach dem Beobachten gesagt werden soll (zum Beispiel: "Ganz schön missmutig...")
- Speichern Sie die Datei und schließen Sie selbige.
- Öffnen Sie "invent_files.txt"
- Wir können das Objekt nicht aufnehmen, geben Sie also WIEDER "dummy_map" ein. In dieser Datei sollte folgendes stehen:
dummy_map
dummy_map
- Speichern und schließen Sie die Datei.
Gut! Erinnern Sie sich noch an den Namen, den Sie ihrer Entity verpasst haben? "talk_one"? Egal, erstellen Sie eine TXT-Datei mit dem selben Namen! Speichern und öffnen Sie die. Hier geben wir nun das ganze Gespräch ein. Zuerst definieren wir ein Kapitel, schreiben Sie also folgendes in die Datei:
chapter1
Ja, es beginnt mit 1, nicht mit 0. Gut zu wissen, weiter gehts. Was soll die Entity sagen, nachdem der Spieler ankommt und einfach so ein Gespräch anfängt? Wie wärs denn mit: "Was willst du denn?!". Gefällts ihnen? Dann tippen Sie in die nächste Zeile:
Was willst du denn?!
So. Nun hat der Spieler mehrere Möglichkeiten zu antworten, was wieder zu einer anderen Antwort der Entity führt, der Spieler bekommt wieder Antwortmöglichkeiten... und so weiter und so weiter. Schreiben wir doch erstmal die erste Antwortmöglichkeit des Spielers, direkt unter die Zeile mit dem charmanten Satz "Was willst du denn?!":
Ich gehe! Du bist unfreundlich!
Okay, aber was soll passieren, wenn der Spieler das sagt? Der Dialog soll beendet werden. Schreiben Sie darum eine "0" unter den Satz. Alles richtig bisher? Dann siehts so aus:
chapter1
Was willst du denn?
Ich gehe! Du bist unfreundlich!
0
Tut Sie das? Gut. Nun soll der Spieler aber noch mehr sagen können. Wenn er "Ich komme um zu sagen dass ich dich verabscheue" sagt, soll der Dialog in Kapitel 3 weitergehen, Und in Kapitel 2 gehts weiter, wenn der Spieler "Ich will hier weg! Hilf mir!" sagt. Dafür tippen Sie die folgenden Zeilen unter die schon geschriebenen:
Ich komme um zu sagen dass ich dich verabscheue
3
Ich will hier weg! Hilf mir!
2
END
Was gibt es dazu zu sagen? Nicht mehr viel, hab ich ja alles schon vorhin gesagt. Geben Sie 0 als Nummer des hinzuspringenden Kapitels an, wird der Dialog beendet. Wenn Sie alle Antwortmöglichkeiten (bis zu 5 sind möglich) eingegeben haben, tippen Sie END. Dann weiss das Skript: Das wars, hier kommt nichts mehr. Gut. Nun sind wir natürlich noch nicht fertig mit dem Dialog. Schließlich haben wir einige Verknüpfungen gesetzt, da müssen auch noch die Kapitel kommen. Nach dem Wählen von "Ich will hier weg! Hilf mir!" werden wir ins zweite Kapitel gebracht. Das können wir ja mal schreiben...
chapter2
Warum sollte ich?
Liebst du mich denn gar nicht?
4
Sonst kommst du in die Hölle.
5
Ich gehe.
0
END
Nun gut. Kapitel 3. Was soll gesagt werden? Am besten eine Beleidigung, schließlich war unser Kommentar "Ich wollte nur sagen dass ich dich verabscheue" alles andere als nett:
chapter3
Was? Das sagt mir jemand wie DU?!
Ich gehe. Ich lasse mich nicht beleidigen.
0
END
Ein relativ kurzes Kapitel. Wenn Sie wollen, können Sie das ganze in eine Schlammschlacht ausarten lassen, aber ich lasse es mal lieber so. Auf ins vierte Kapitel. Der Spieler sagte "Liebst du mich denn gar nicht?". Manchmal ist die Wahrheit am besten:
chapter4
Nein. Verschwinde!
Du brichst mir das Herz... Ich gehe...
0
Ich gehe nun. Ich möchte weinen.
0
END
Gut. Nun das letzte Kapitel:
chapter5
Jetzt habe ich aber Angst!
e:Ich komme in die Hölle!
wait:2
e:Meinst du echt?
Nein. Ich gehe.
0
Ja. Ich lasse dich jetzt allein.
0
END
Okay, dass wars. In diesem Kapitel habe ich einige Parameter verwendet. Im Handbuch sind selbige genauer beschrieben, hier was in diesem Beispiel geschieht:
1)Anzeige des normalen Strings: "Jetzt habe ich aber Angst!"
2)Durch das "e:" wird die nächste Zeile noch zur Entity gezählt. Direkt darunter steht also "Ich komme in die Hölle"
3)Das Skript wartet 2 Sekunden
4)Eine weitere Zeile: "Meinst du echt?"
Gut. Speichern Sie das ganze. Wir haben alle Kapitel, jetzt können wir mit unserer ersten Entity reden. Ein großer Augenblick! Builden Sie ihr Level (wenn Sie das noch nicht getan haben) und starten Sie es. Alles funktioniert? Ja? Gut. Nein? Hier eine Tabelle mit möglichen Fehlern:
Das Skript enthält Fehler | Wenn Sie SICHER sind, dass der Fehler an dem PaC-Skript liegt, mailen Sie bitte an onepixelgames@yahoo.de |
Die Entity hat keinen Namen | Der Entity, die angesprochen werden soll braucht einen Namen. Das Skript sucht in der TXT-Datei mit gleichem Namen nach dem Dialog. |
Die Dialog-Datei existiert nicht | Haben Sie den Dialog im richtigen Verzeichnis gespeichert? Ist es eine TXT-Datei? Hat Sie den richtigen Namen? |
FLAG2 ist nicht gesetzt | Mit einem Objekt, bei dem Flag2 nicht gesetzt ist, kann man nicht reden. Also setzen Sie es! |
Ein (evtl. unsichtbares) Objekt befindet sich zwischen Kamera und Entity | Wenn dies der Fall ist, sehen Sie gar nicht erst den String "Rede mit ...". Zwischen Kamera und Objekten darf sich kein Hindernis befinden! |
Gut. Ich gehe also davon aus, das momentan alles funktioniert. Nach der Höllengeschichte (Kapitel 5) soll die Entity beim nächsten Ansprechen etwas anderes sagen. Dafür gibt es IF. Lesen Sie im PaC-Handbuch nach, was das bedeutet und wie man es nutzt. Suchen Sie diese Zeile:
Was willst du denn?!
Sie erinnern sich? Der Anfangs-Satz. Der soll nach Erwähnung der Hölle anders sein. Ersetzen Sie diese Zeile durch diese:
if:adv_var[0]==0
Was willst du denn?!
if:adv_var[0]==1
Ich hab Angst vor der Hölle! Du hast mir Angst davor gemacht!!!
adv_var ist ein vordefinierter Array, den Sie frei verwenden können. - Denken Sie auch daran, dass wir zwei "=" benötigen!
Okay. Speichern und starten Sie. Sie werden keinen Unterschied feststellen - warum bloß? Die Zeile "Was willst du denn?!" wird angezeigt, wenn adv_var[0] = 0 ist. Die zweite, wenn adv_var[0] = 1 ist. Aber adv_var wird von uns ja nie auf 1 gesetzt! Ergo bleibt er auf 0, ergo wird nur die erste Zeile angezeigt. Gut. Wann soll denn adv_var = 1 sein? Nachdem wir die Hölle erwähnt haben, also in Kapitel 5. Dafür gibt es do. Schauen Sie im PaC-Handbuch nach! Jetzt reicht uns erstmal, wenn Sie diese Zeile suchen:
e:Meinst du echt?
(Sie erinnern sich? Die weitere Zeile (e steht für extra ;)) die unser angesprochener sagt? Egal, weiter:) Hiernach setzen wir adv_var[0] auf 1. Schreiben Sie direkt darunter (zwischen diesem String und der ersten Antwortmöglichkeit):
do:adv_var[0]=1;
Ihnen ist vielleicht aufgefallen, dass dies eine normale Zeile C-Skript ist, nur mit einem do: davor. Richtig: Das do wird abgeschnitten, der Rest des Stringes (der Zeile) wird als normaler C-Skript ausgeführt. Sie haben also ein mächtiges Werkzeug in der Hand! Denken Sie aber daran (wie bei jedem mächtigen Werkzeug, haha), dass nach der Anweisung ein Semikolon folgen muss. Nun: Speichern Sie ihre Datei und starten Sie ihr Spiel. Na, das ist doch schonmal was! Nach der Diskussion über die Hölle begrüßt uns die Entity doch tatsächlich mit "Ich hab Angst vor der Hölle! Du hast mir Angst davor gemacht!!!"! Sehr gut! (HINWEIS: Nach IF wird nur die nächste Zeile zur If-Anweisung gezählt (bei Antworten die nächsten beiden), Wollen Sie von einer IF-Bedingung zwei Zeilen Text abhängig machen, benötigen Sie zwei IF-Bedingungen!). Was soll uns diese Entity geben? Wie wäre es mit Zauberpulver? (Kennen Sie eigentlich die Spiele aus der ZELDA-Reihe? Ist ja auch egal.). Mit dem können wir im nächsten Raum ein Stück Kohle in einen Diamanten verwandeln (Zauber, Zauber). Dieser wird mit dem Fenster kombiniert und fertig ist unser absolut logisches Rätsel ;)! Fangen wir an, wir brauchen Zauberpulver. Das gibt die Entity uns, wenn der Spieler sie etwas bestimmtes fragt. Das tut er aber nur, wenn uns die Entity schon mit "Ich hab Angst vor der Hölle! ..." begrüßt hat, adv_var[0] also gleich 1 ist. Dafür können wir nicht mehr "Ich will hier weg! Hilf mir!" sagen. Also, ersetzen Sie diese Zeilen:
Ich will hier weg! Hilf mir!
2
Durch diese hier:
if:adv_var[0]==0
Ich will hier weg! Hilf mir!
2
if:adv_var[0]==1
Du kommst nicht in die Hölle wenn du mir etwas schenkst!
6
Okay, verstehen Sie das alles? Hervorragend! Dann können Sie das kursiv geschriebene überspringen: Dieser Code sorgt dafür, dass Ich will hier weg!... nur angezeigt wird, wenn adv_var[0] gleich 0 ist. Das ist er, wenn wir noch nicht über die Höllensache gesprochen haben. Wenn wir das aber getan haben, ist adv_var[0] gleich 1. Die IF-Bedingung ist also falsch und die beiden Zeilen (Ich will hier weg ... + "2") werden übersprungen. Wenn adv_var[0] gleich 1 ist, ist die nächste IF-Bedingung wahr, und die beiden Zeilen (Du kommst nicht in die Hölle... + "6") werden nicht übersprungen.
So, weiter gehts! Wir haben eine Verknüpfung zu Kapitel 6 erstellt, nun müssen wir auch ein Kapitel 6 schreiben. Was sollten wir gleich bekommen? Ach ja, ein magisches Pulver. Na gut, das werden wir wohl noch skripten können:
chapter6
Eine gute Idee!
e:Ich werde dir Zauberpulver geben!
Nein danke. Ich möchte dass du in die Hölle kommst.
0
Oh! Toll! Ja!
7
END
Hui, ein SCHÖNES Kapitel. Nur habe ich SCHON WIEDER eine Verknüpfung erstellt. Also müssen wir noch ein Kapitel schreiben, in dem wir endlich das schöne Pulverchen bekommen (Spieler LIEBEN es, wenn Sie viel klicken müssen ;) ). Hey - wir tun etwas ins inventar! Dafür gibt es im PaC-Handbuch einen Baustein, den können wir gleich mal nutzen. Zauberpulver hat ab sofort die ID 3!:
chapter7
Hier. Eine simple chemische Verbindung...
do:inventar[inventar_stelle+1]=3;
Hey! Danke! Ich gehe und probiere es aus!
0
END
Gut. Speichern Sie den Dialog. Nein - starten Sie das Programm noch nicht, wir haben ein neues Objekt erstellt, wir müssen unsere drei Dateien öffnen. Also los:
- Öffnen Sie "names.txt"
- Schreiben Sie an die letzte Stelle (die dritte Zeile[denn ID des Zauberpulvers ist 3!]) den Namen des magischen Pulvers. (z.B.: "magisches Pulver")
- Speichern und schließen Sie die Datei.
- Öffnen Sie "watch.txt".
- Was soll der Spieler beim Beobachten sagen? Tippen Sie es ein (dritte Zeile, da ID des Pulvers 3)! (z.B.: "magisches Pulver. Ist bestimmt verboten..."
- Speichern und schließen Sie die Datei.
- Öffnen Sie "invent_files.txt"
- Diesmal können wir NICHT invent_files verwenden, denn: das Objekt kann man aufnehmen! Tippen Sie "magic_map" (in die dritte Zeile) (ohne die ")
- Speichern und schließen Sie die Datei.
Gut. Wir können leider NOCH IMMER nicht starten, aber: Jetzt ist der Künstler in ihnen gefragt. Öffnen Sie ihr Malprogramm, erstellen Sie eine .BMP oder .PCX Datei mit der Größe 160x160 Pixel, nehmen Sie einen NICHT-Schwarzen Hintergrund und malen Sie das, was Sie sich unter magischem Pulver vorstellen. Speichern Sie die Datei in unserem Spielordner.
Fertig? Schön. Sie haben sich den Dateinamen gemerkt? Schön. Öffnen Sie mit ihrem Lieblings-skript-Editor die Datei, die wir ganz zu Anfang mit WED erzeugt haben. Hat den gleichen Namen wie ihr Level, nur mit ".wmb" hinten dran. Wir müssen hier die Bitmap-definition hinskripten. Tun Sie dies VOR DER INCLUDE-ZEILE!!!. Schreiben Sie also:
BMAP magic_map = "IHRDATEINAMEMITENDUNG";
Setzen Sie bitte ihren Dateinamen mit Endung an die dafür gekennzeichnete Stelle. Sie können auch spitze Klammern verwenden (Ich hätts hier auch gemacht, aber HTML mag das nicht ;) ). Was fällt auf? magic_map ist das gleiche, was wir auch in invent_files geschrieben haben - das ist wichtig. Gut. Nun speichern Sie die Datei und Laden Sie das Level in WED. Funktionierts? Gut. Nun - der Spieler muss in den nächsten Raum. Dort findet er ein Kohlstück. Benutzt er das magische Pulver mit dem Kohlestück, kommt ein Diamant raus. Also: Speichern Sie ihr Level und legen Sie sich richtig ins Zeug, was das nächste Level betrifft. Auch in diesem Level muss ein Spieler vorhanden sein. Auch in diesem Level müssen Sie Nodes setzen. Auch in diesem Level muss die Kamera geschickt platziert sein (FLAG2 beim Spieler (denken Sie an die Action) hilft fast immer). -. Denken Sie noch dran "unser" Skript anzufügen (kein neues machen, das alte nehmen)
Fertig? Sehr gut! Nun laden Sie eine Tür in den WED. Das kann auch eine schwarze Sprite sein, das ist völlig egal. Wichtig ist nur: Wie immer eine Entity. So. Auch diese braucht keine Action (bei einer Sprite ist es vielleicht ganz sinnvoll, eine zu erstellen in der oriented auf on gesetzt wird). Geben Sie der Tür eine ID (4, wenn Sie sonst keine Objekte haben) und setzen Sie FLAG3. Öffnen Sie "names.txt" und geben Sie den Namen der Tür ein (wie wäre es mit "Durchgang"?). Speichern und schließen Sie die Datei, öffnen Sie "watch.txt", geben Sie den zu sagenden String ein (etwa "ein schmaler Durchgang"), speichern und schließen Sie die Datei und fügen schließlich noch "dummy_map" an die "invent_files.txt"-Datei an. Speichern und schließen Sie selbige. Zurück in WED. Wie heisst das Level, in das die Tür führt? Geben Sie den Namen des zu ladenden Levels als Name der Entity ein (ohne Endung!). Aber wir sind noch immer nicht fertig! Sie kennen das - man geht durch eine Tür und kommt auch im nächsten Raum vor der Tür heraus. Nun - das ist auch in einem Adventure so. Laden Sie also das andere Level und schreiben Sie sich die x-y-z Werte auf, an denen der Spieler erstellt werden soll. Haben Sie das gemacht? Gut. Zurück in das Level mit unserer Tür. Geben Sie bei SKILL2 den eben aufgeschriebenen x-Wert ein. Bei Skill3 den y-Wert, Skill4 erhält den z-Wert. Speichern Sie das ganze und builden Sie es. Nun machen Sie das ganze auch bei dem anderen Level (geben natürlich einen anderen Namen, andere Werte für Skill2,3,4..., Geben Sie der Tür für dieses Beispiel aber DIE GLEICHE ID!). Gut. Builden, speichern und Starten Sie das Level! Wenn Sie im "Gehe zu"-Modus auf die Tür klicken, landen Sie tatsächlich im anderen Raum und - wow - sogar an der richtigen Stelle! Und, sollten Sie alles richtig gemacht haben, können Sie nun zwischen den levels hin und her wechseln! Super!
Okay, das war ein schweres Thema und ich hab es ein bisschen kurz gemacht, aber ich hoffe Sie haben es verstanden. Dann können wir uns ja gleich dem Kohle-stück widmen. Laden Sie also das zweite Level. In ebendieses fügen Sie nun ihr Kohle-stück ein (ein Modell... eine Sprite... was Sie wollen!). Denken Sie an die ID (wahrscheinlich 5) und schreiben Sie Name ("ein dreckiges Kohlestück. Ich fasse es bestimmt nicht an!" und Beobachten-String in die Datei. Denken Sie noch an "dummy_map" in "invent_files.txt"!
Okay. Nun haben wir ein Kohlestück. Wir können es noch nicht aufnehmen, das geht erst, wenn es ein Diamant ist. Da wir mit dem Objekt eine ganze Menge anstellen wollen, verpassen wir ihm die Action "simple_one". Wir können zwar weder mit Kohle, noch mit einem Diamanten reden, aber da wir es manipulieren möchten (mit unserem magischen Pulver, was für ein rhetorischer Genuß XD ), braucht es eine angehängte Datei. Nehmen Sie am besten einen Namen wie "use_kohle" oder was auch immer. Erstellen Sie eine gleichnamige TXT-Datei und öffnen Sie selbige. Wie war die ID von dem magischen Pulver? Wollen Sie selber nachschauen oder soll ich sie Ihnen sagen? Okay, es ist 3. Schreiben Sie nun in die use_kohle:
use_003
Die nachfolgende Zeile wird ausgeführt, wenn das Objekt (hier die Kohle) mit dem Objekt mit der ID 3 (also das Zauberpulver) in Berührung kommt. Und was soll gleich geschehen? Kohle wird zu einem Diamanten. Wir ändern also die ID. Die nächste zu verteilende ist, wenn ich richtig gerechnet habe, 6. Schreiben Sie also unter die Zeile:
my.skill1 = 6;
Gut. Machen Sie die ganze TXT-Dateien-Prozedur (schreiben Sie "Diamant" oder ähnliches in "names.txt", schreiben Sie "ein schicker Diamant" oder ähnliches in "watch.txt", schreiben sie "dia_map" oder ähnliches in "invent_files.txt", definieren Sie die Bitmap in unserem WDL-File! und malen Sie die selbige (160x160 Pixel)). Nach einem Start sollten Sie genau das sehen, was wir uns vorgestellt haben: Zuerst ein Kohlestück, später ist der String ein Diamant. NUR: Das Modell ändert sich nicht! Um das zu bewerkstelligen, könnten Sie eine eigene Action schreiben, die das Modell morpht, sobald der Skill1 6 ist. Zusätzlich ist es wieder ein Kohlestück, sobald wir den Raum wechseln! Um das zu lösen, müssten Sie wieder eine eigene Action schreiben, und statt my.skill1 = 6; eine der adv_var nehmen und schließlich, wenn der bestimmte adv_var 1 ist, den Skill1 auf 6 setzen. Ist nicht halb so kompliziert wie es klingt, versuchen Sie es einfach mal! So in etwa könnte die Action aussehen (schreiben Sie diese UNTER die Include-Zeile!):
ACTION kohle_diamant {
WHILE(adv_var[1]==0) {wait(1);}
my.skill1 = 6;
ent_morph(my,DEINDIAMANTMODELLHIER);
}
Haben Sie das gemacht? Natürlich brauchen Sie jetzt ein Diamantenmodell, aber Sie wollten es ja so! Wenn Sie diese Action verwenden, denken Sie daran dass my.skill1=6; in der use_kohle-Datei in adv_var[1]=1; zu ändern. Nun: Aufnehmen können wir das Objekt nicht! Warum? Wir haben Flag1 nicht gesetzt! Nachholen! Schreiben Sie entweder in die Action (nach ent_moprh) oder direkt hinter my.skill1=6; (in der selben Zeile) wenn Sie keine Action verwenden:
my.flag1=1;
Sie werden sehen: Jetzt kann man das Objekt aufnehmen!
Gut. Das wars. Was könnte man noch machen? Man könnte zum Beispiel bei unserer sprechenden Entity adv_var[0] auf 3 setzen, um zu verhindern, dass man unendlich viel Zauberpulver bekommt. Nun, was solls, Ich hoffe ich hab es etwas verständlicher gemacht (und nicht noch komplizierter ;) ) und wünsche noch viel Spass mit dem Skript. Anregungen, Wünsche, Kritik und Bugs hinterlassen Sie im Forum oder schreiben Sie mir per Email an onepixelgames@yahoo.de!
Ich verkaufe diese feinen Lederjacken...