The Second Guest
Adventure-Treff
The Second Guest
(Anzeige)






Adventure-Treff
Lost Chronicles of Zerzura
utorial

MMM - Die eigene Episode

Dieses Tutorial soll in das Erstellen von Episoden von Maniac Mansion Mania mit dem Autorensystem AGS einführen. Infos zu dem Fanadventure-Projekt im Maniac-Mansion-Universum gibt es auf dessen Homepage und im offiziellen MMM-Forum. Wenn technische Fragen aufkommen, hilft meistens ein Blick in die sehr gute Hilfe von AGS, die zum Beispiel alle Scriptbefehle, die in diesem Artikel auftauchen, genau erklärt. Sollten trotzdem noch Fragen bleiben findet ihr eine hilfreiche Community in unserem AGS-Forum, wo ihr eure Fragen stellen könnt.
Als Voraussetzung für dieses Tutorial solltest du dir erst mal ein paar Sachen runterladen: Ein paar Englischkenntnisse sollte man übrigens auch mitbringen, da Oberfläche und Hilfe von AGS nicht in deutsch verfügbar sind. Alternativ kann man auch zum deutschen Autorensystem Visionaire greifen, für das in Kürze auch ein Starterpack vorliegen soll, oder zu einer anderen Engine.
Wenn du dir alles runtergeladen hast, installierst du zuerst AGS und entpackst das AGS-Starterpack in ein Verzeichnis deiner Wahl. Dann startest du AGS (mit agsedit.exe) und lädst das Starterpack mit "Load an existing game". Jetzt kannst du mit Strg+T das Spiel zum ersten Mal testen und mit Bernard ein wenig durch das Haus laufen.

Hotspots

Jetzt geht es daran, die Räume mit Leben zu füllen. Beginnen wir in Bernards Zimmer. Klicke dazu links auf "Room Editor" und dann einen Doppelklick auf den ersten Raum ("Bernards Zimmer"). Du bist jetzt im Raumeditor. Wenn du links auf "Areas" klickst, siehst du, welche "Hotspots" in dem Raum eingerichtet sind. Das sind Bereiche im Hintergrund, auf die der Spieler dann später draufklicken kann, zum Beispiel die Tür oder der Computer. Der gerade ausgewählte Hotspot ist farbig markiert.
Wähle den Computer aus (Hotspot 1), klicke auf "Interaction" und hier auf "Run Script" unter "Any Click on Hotspot". Der Scripteditor öffnet sich dann. Die ersten Zeilen sehen so aus:

if (UsedAction (A_WALK_TO)) {
if (MovePlayer (90, 130)) {

Die erste Zeile bestimmt, welches Verb angeklickt sein muss, damit das Folgende passiert. Die zweite Zeile sorgt dafür, dass der Spieler erst an die Position (90, 130) auf dem Bildschirm geht, bevor das passiert, was innerhalb der geschweiften Klammern danach steht. Die Positionen werden im Room Editior auch angezeigt, wenn man den Mauszeiger über die Raumgrafik bewegt. In diesem Fall steht dort nur:

FaceLocation (GetPlayerCharacter (), 90, 129);

Der Charakter guckt also nach oben. Dass mehr nicht passiert ist klar, denn der Aufrag an die Spielfigur lautete ja nur A_WALK_TO, d.h. "Gehe zu". Möglich sind hier außerdem die folgenden Verben: A_LOOK_AT (Schau), A_USE (Benutze), A_PICK_UP (Nimm), A_PUSH (Drücke), A_PULL (Ziehe), A_TALK_TO (Rede), A_OPEN (Öffne), A_CLOSE (Schließe) und A_GIVE_TO (Gib). Bei der nächsten voreingestellten Interaktion mit dem Computer (Benutze) geht der Charakter wieder zur selben Position und es wird das folgende Script ausgeführt.

FaceLocation (GetPlayerCharacter (), 90, 129);
Wait (5);
DisplaySpeech(GetPlayerCharacter(),"Der funktioniert im Moment nicht.");
DisplaySpeech(GetPlayerCharacter(),"Ich habe Doors XP installiert.");

Bernard wendet sich als dem Computer zu, wartet einen kurzen Moment, und gibt dann sein Kommentar ab. Wichtig ist, dass diese Blöcke ab dem zweiten Block mit "else" eingeleitet werden. Am Schluss steht dann noch

else Unhandled ();

Diese Zeile sorgt dafür, dass auch etwas passiert, wenn der Spieler etwas macht, was im Script nicht festgelegt wurde (z.B. "Rede mit Computer"). Auf diese Weise können auch eigene Hotspots definiert werden. Beispiel: Du wählst über die Pfeile oben im Room Editor unter "Areas" Hotspot 12 aus (den gibt es noch nicht im Raum) und zeichnest mit den Zeichenwerkzeugen die untere Schublade nach. In das Eingabefeld "Name" schreibst du "Schublade", dieser Name wird dann im Spiel angezeigt. Schließlich richtest du bei "Interactions" und "Any click on Hotspot" die Interaktion "Run Script" ein und schreibst rein

if (UsedAction (A_WALK_TO)) {
if (MovePlayer (132, 138)) {
FaceLocation (GetPlayerCharacter (), 132, 138);
}
}

else if (UsedAction (A_LOOK_AT)) {
if (MovePlayer (132, 138)) {
FaceLocation (GetPlayerCharacter (), 132, 137);
Wait (5);
DisplaySpeech(GetPlayerCharacter(), "Auch eine schöne Schublade.");
}
}

else Unhandled ();

Dein erster Hotspot ist fertig.

Objekte

Wenn du links auf "Objects" klickst, kann du die Objekte in dem Raum bearbeiten. Anders als Hotspots sind Objekte nicht Bereiche im Hintergrund, die man anklicken kann, sondern Grafiken, die praktisch auf dem Hintergrund liegen und z.B. verschoben oder mitgenommen werden können. Als Beispiel wollen wir auf Bernards Tisch eine Lampe stellen. Dazu muss erst mal die Grafik der Lampe existieren und AGS muss sie auch kennen. Dazu klickst du links auf "Sprite Manager", dann mit der rechten Maustaste auf die weiße Fläche rechts, wählst "Import new sprite" und "Import from File". Hier wählst du die Datei lampe.bmp aus, die mit einem Klick auf "Grab entire image" auch im Sprite Manager erscheint.
Da Bernard die Lampe auch mitnehmen können soll, brauchen wir noch einen passenden Inventargegenstand. Dazu wird ein 38x22 Pixel großes Bitmap benötigt, das du ebenfalls in den Sprite Manager lädst. Danach klickst du links auf "Inventory items", wo du den Gegenstand #8 (der erste "dummy") mit "Change image" durch die Inventar-Lampe ersetzt. Diese bekommt dann noch den Namen "Lampe".
Zurück bei "Objects" kannst du jetzt mit "New Object" ein neues Objekt anlegen. Das sieht zwar erst mal aus wie eine blaue Tasse, mit "Change image" kann man im Sprite Manager jetzt aber die Lampe laden. Diese schiebst du noch an die passende Stelle. Als "Any-Click-on-Object-Script" wird genau wie oben Folgendes eingerichtet:

if (UsedAction (A_WALK_TO)) {
if (MovePlayer (130, 133)) {
FaceLocation (GetPlayerCharacter (), 130, 132);
}
}

else if (UsedAction (A_LOOK_AT)) {
if (MovePlayer (130, 133)) {
FaceLocation (GetPlayerCharacter (), 130, 132);
DisplaySpeech (GetPlayerCharacter (), "Oha, die stand sonst nicht da.");
}
}

else if (UsedAction (A_PICK_UP)) {
if (MovePlayer (130, 133)) {
FaceLocation (GetPlayerCharacter (), 130, 132);
ObjectOff(6);
AddInventory(8);
}
}

else Unhandled ();

Was das bedeutet, dürfte klar sein. Jetzt kann man die Lampe mitnehmen, aber noch nichts mit ihr machen. Deswegen gehen wir zurück zu den Inventory Items und richten dort eine Interaktion für die Lampe ein. Zum Beispiel kannst du bei "Look at inventory item" die folgende Zeile eintragen.

DisplaySpeech (GetPlayerCharacter (), "Was eine prächtige Lampe.");

Dann kann man die Lampe auch im Inventar betrachten, was du wie immer mit Strg+T gleich ausprobieren kannst.

Charaktere

Was wäre Maniac Mansion ohne Bernards Freunde? Als nächstes wollen wir ihm Sandy zur Seite stellen. Klicke dazu links auf "Characters" und wähle Sandy aus. Hier stellst du ein, dass Sandy in Raum 1 startet ("Start in Room"), und zwar an Position X = 265 und Y = 135. Jetzt richten wir auch für sie eine "Any click on character" Interaktion ein:

if (UsedAction (A_WALK_TO)) {
if (MovePlayer (230, 135)) {
FaceCharacter (GetPlayerCharacter (), SANDY);
}
}

else if (UsedAction (A_LOOK_AT)) {
if (MovePlayer (230, 135)) {
FaceCharacter (GetPlayerCharacter (), SANDY);
DisplaySpeech(GetPlayerCharacter(),"Mmmmmhh...");
}
}

else if (UsedAction (A_TALK_TO)) {
if (MovePlayer (230, 135)) {
FaceCharacter (GetPlayerCharacter (), SANDY);
FaceCharacter (SANDY, GetPlayerCharacter ());
DisplaySpeech(GetPlayerCharacter (),"Hallo Sandy.");
DisplaySpeech(SANDY,"Grüß dich.");
}
}

Hier funktioniert also auch alles völlig normal, nur die letzte Zeile mit der Unhandled-Anweisung fehlt. Jetzt kannst du noch ein "Use inventory on character" Script für Sandy definieren, zum Beispiel das hier:

if (MovePlayer (230, 135)) {
FaceCharacter (GetPlayerCharacter (), SANDY);
FaceCharacter (SANDY, GetPlayerCharacter ());
DisplaySpeech(GetPlayerCharacter (),"Hier, eine Lampe.");
LoseInventory(8);
DisplaySpeech(SANDY,"Danke, ich mag Lampen.");
}

Dann kann der Spieler die Lampe an Sandy geben.
Wenn du nicht mit Bernard spielen willst, sondern z.B. mit Michael, dann klicke bei Michael einfach "This is the Player Character" an. Wichtig ist, dass dann bei ihm hinter "Start in Room" eine 1 steht (oder die Raumnummer wo er starten soll) und bei Bernard eine -1, falls er nicht mehr im Spiel auftauchen soll. Außerdem sollten die X- und Y-Koordinaten auf einen Wert gesetzt werden, der auf einer walkable area liegt. Auch "No Interaction" sollte angeklickt werden.

Ein neuer Raum

Um einen neuen Raum in das Haus zu bauen, muss es zunächst mal eine Tür geben, die dorthin führt. Dazu öffnest du im Room Editor z.B. Raum 6 (Flur im Erdgeschoss) und richtest ein neues Objekt ein. Als Grafik bekommt das Objekt eine offene (!) Tür, die man zum Beispiel im Sprite-Ordner von Raum 2 findet. Die offene Tür wird jetzt genau über die geschlossene Tür geschoben und das Häkchen vor "Object is initially visible" wird entfernt.
Noch funktioniert die Tür natürlich nicht. Gehe dazu zunächst auf den Hotspot der mittleren Tür (#3) und ersetze das gesamte "Any click on hotspot"-Script durch die eine Zeile

if (any_click_on_door (18, 2, 95, 130, DIR_UP, 18, 43, 127, DIR_RIGHT) == 0) Unhandled ();

Die erste Zahl ist eine Art Nummer der Tür, die muss für jede Tür unterschiedlich sein. Die zweite Zahl sagt aus, dass die offene Tür von Objekt 2 dargestellt wird. Und die Angaben danach bedeuten: Wenn man die Tür öffnet, geht der Charakter zu Position (95, 130) und schaut nach oben und wenn man durch die Tür durchgeht, dann taucht man in Raum 18 an Position (43, 127) auf und schaut nach rechts.
Wichtig ist, dass die Tür auch in "Tür>v" umbenannt wird. Das ">v" sorgt dafür dass mann die Tür später auch mit der rechten Maustaste öffnen und schließen kann. Dann musst du links auf "Settings" klicken und dann auf das "i"-Symbol. Hier änderst du das "Player enters screen (before fadein)" Script, indem du noch diese Zeile anfügst:

SetObjectClickable (2, 0);

Jetzt musst du natürlich noch diesen neuen Raum 18 anlegen. Wähle dazu im Menü "File" "New Room" aus, es erscheint dann ein schwarzer Raum. Mit dem kleinen Bildsymbol ("Import Background") kannst du eine Hintergrundgrafik laden, zum Beispiel das rosa Badezimmer (das muss nicht im Sprite-Manager sein). Jetzt speicherst du den Raum mit dem Diskettensymbol ("Save Room") unter dem Dateinamen room18 ab. Als erstes solltest du jetzt als kleine Übung wie eben dafür sorgen, dass die Tür links funktioniert. Als Scriptzeile dafür nimmst du dann diese:

if (any_click_on_door (18, 0, 43, 127, DIR_LEFT, 6, 95, 130, DIR_DOWN) == 0) Unhandled ();

Das Häkchen bei "Object is initially visible" sollte allerdings hier gesetzt werden, da die Tür ja geöffnet ist, wenn man sie das erste Mal sieht. Zu guter muss noch eine Zeile im globalen Script hinzugefügt werden (im Menü "Script" "Edit global script"). Etwa bei Zeile 331 solltest du dort die Funktion "VariableExtensions" finden, in der einige Zeilen wie die Folgende stehen:

else if ((r == 2) && (h == 1)) OpenCloseExtension (4, location);

Diese Reihe ergänzt du um die folgende Zeile:

else if ((r == 6) && (h == 3)) OpenCloseExtension (18, location);
else if ((r == 18) && (h == 1)) OpenCloseExtension (18, location);

Diese Zeilen sagen aus, dass in Raum (r = 6) auf Hotspot (h = 3) die Tür Nummer 18 ist und in Raum 18 auf Hotspot 1 ebenfalls (nur von der anderen Seite). Die Nummer der Tür, in diesem Fall 18, findet man dann als erste Zahl in den any_click_on_door-Anweisungen wieder. Jetzt sollte die Tür normal funktionieren.

Viel Spaß

Wenn du alles so gemacht hast wie beschrieben, dann sieht dein erstes MMM-Spiel aus wie hier. Jetzt liegt es an dir, weiter mit AGS rumzuspielen. Wenn Probleme auftauchen, dann solltest du einen Blick in die Hilfedatei werfen (F1 drücken) und wenn auch das nicht hilft, dann kannst du deine Frage auch gerne in unserem AGS-Forum stellen.

Jan 'DasJan' Schneider


 

 
Lost Chronicles of Zerzura

(Anzeige)


DosBox-Demo
der Woche


The Big Red Adventure
(Dynabyte)

Download (5 MB)
Lösung

Es findet im Moment keine Umfrage statt.

Amazon.de Partnerschaft

(c) 2000 - 2012 by Adventure-Treff
Alle Bilder, Sounds, Dateien und weitere Inhalte dürfen nicht ohne vorherige
Genehmigung benutzt werden. Aber wenn ihr nett fragt, bekommt ihr sie bestimmt!