edit Rocco: Da die Bilder hier nicht mehr angezeigt werden, gibts hier noch die Version mit Bilder ->
http://web.archive.org/web/20130630150917/http://www.maniac-mansion-mania.de/forum/index.php?topic=15.msg36729#msg36729Überarbeitete Version für AGS 3.x!Dieses Tutorial soll in das Erstellen von Episoden für Maniac Mansion Mania mit dem Autorensystem AGS (Adventure Game Studio) einführen. Wenn technische Fragen aufkommen, hilft meistens ein Blick in die sehr gute Hilfe von AGS, die unter anderem alle Scriptbefehle, die nicht nur in diesem Artikel auftauchen, genau erklärt. Sollten trotzdem noch Fragen bleiben, findest du eine hilfreiche Community entweder hier im Forum oder im Adventure-Treff
AGS-Forum, wo du deine Fragen stellen kannst.
Als Voraussetzung für dieses Tutorial solltest du dir erst mal ein paar Sachen herunterladen:
- Eine aktuelle Version AGS. (Ich nehme hier im Tutorial 3.1.2 SP1, jede neuere sollte jedoch im Prinzip die gleichen Schritte benötigen)
- Ein AGS-Starterpack für MMM (In diesem Tutorial Dave's Starterpack, wichtig ist, dass es möglichst neu ist – also 3.0.2)
Ein paar Englischkenntnisse solltest du übrigens auch mitbringen, da Oberfläche und Hilfe von AGS nicht auf Deutsch verfügbar sind.
Wenn du dir beides heruntergeladen hast, installierst du zuerst AGS und entpackst das AGS-Starterpack in das Templateverzeichnis von AGS. (Bei mir "C:\Programme\Adventure Game Studio 3.1.2 SP1\Templates") Dann startest du AGS (zum Beispiel über das Startmenü) und wählst "Start a new game".
Nach einem klick auf "Next" sollte das Starterpack, welches du dir heruntergeladen hast, erscheinen.
Nun solltest du den Namen des Spiels festlegen. Der erste Name kann im Nachhinein noch geändert werden, dort kannst du zum Beispiel auch die Episodennummer mit eingeben. Der zweite "Ordnername" lässt sich nicht mehr einfach ändern, daher sollte man dort sehr vorsichtig mit sein. Schau dir einfach mal mein Beispiel an.
Such dir einfach einen schönen Namen aus. Als zweiten Namen kannst du auch erstmal sowas wie "meine_erste_episode" nehmen. Danach solltest du aber schon eine Meldung erhalten. Diese erscheint, wenn du 3.0.2 Starterpacks in einer höheren Version von AGS öffnest. Drücke auf Okay und befolge die Nachricht.
Jetzt kannst du mit F5 das Spiel zum ersten Mal testen und mit Dave ein wenig durch sein Haus laufen.
HotspotsJetzt geht es daran, die Räume mit Leben zu füllen. Beginnen wir in Dave's Zimmer. Öffne dazu rechts oben den Baum bei "Room" und bei "Daves Zimmer". Dann auf "Edit Room" auf einen Doppelklick. Du bist jetzt im Raumeditor. Wenn du nun in der zweiten Auswahlbox statt "Nothing" "Hotspots" auswählst, 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 das Bett. Der gerade ausgewählte Hotspot ist farbig markiert.
Wähle die Pinnwand aus (hPinnwand, ID; 7), klicke auf das Blitzsymbol, (siehe Screen) hier auf "Any Click on hotspot" und dort auf "...".
Der Scripteditor öffnet sich dann. Die ersten Zeilen sehen so aus:
[ags] if (any_click_move(190, 123, eDirUp))
{
if (UsedAction(eActWalkTo))
{[/ags]
Die erste Zeile bestimmt, dass der Spieler erst an die Position (190, 123) auf dem Bildschirm geht, damit das passiert, was in den geschweiften Klammern (Tipp: Am besten den Inhalt von geschweiften Klammern immer einrücken, damit man sieht, wie weit dieser noch geht) auf dieser Ebene passiert. Die zweite Zeile sorgt dafür, welches Verb angeklickt sein muss, 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 in der dritten "Funktionsebene" nur:
[ags] // Wait(5);[/ags]
Dies ist ein auskommentierter Funktionsaufruf. Das heißt, dass AGS die Zeile nicht beachtet, als ob sie da nicht stehen würde. Das heißt, der Charakter geht nur bis zur Position und guckt nach oben, sonst nix – Er wartet nicht, weil es auskommentiert ist. Mehr tut er nur bei anderen Aktionen. Dass mehr nicht passiert, ist klar, denn der Aufrag an die Spielfigur lautete ja nur eActWalkTo, d.h. "Gehe zu". Möglich sind hier außerdem die folgenden Verben: eActLookAt (Schau), eActUse (Benutze), eActPickUp (Nimm), eActPush (Drücke), eActPull (Ziehe), eActOpen (Öffne) und eActClose (Schließe). Bei Charakteren gibt es auch noch die Aktion eActTalkTo (Rede) und bei Inventargegenständen eActGiveTo (Gebe), dazu später. Im Anhang findest du noch eine praktische Tabelle für den Überblick hierbei.
Da hier nicht mehr passiert, schauen wir uns also die nächste if-Fallunterscheidung an.
[ags] else if (UsedAction(eActLookAt))
{
Wait(5);
player.Say("Ja, auch ich hab so meine Pläne.");
player.FaceDirection(eDirDown);
player.Say("He, he, he.");
}[/ags]
Dieser Code wird ausgeführt, wenn die Pinnwand angeschaut wird. Natürlich geht Dave auch wieder zur Pinnwand und schaut sie an, denn das war ja die erste Abfrage. Wichtig ist auf dieser zweiten Ebene, dass ab dem zweiten if-Block mit "else" eingeleitet wird, also "wenn das passiert
oder sonst wenn das passiert". Dave wartet einen kurzen Moment und gibt dann zwei Kommentare ab, wozwischen er sich dem Charakter zuwendet. Es gibt die vier Richtungen eDirUp (nach hinten, also oben), eDirRight (nach rechts), eDirDown (nach vorne, also unten), eDir Left (nach links).
So geht das dann die Aktionen durch, die definiert sind. Beim letzten else steht dann noch:
[ags] else Unhandled();[/ags]
Diese Zeile sorgt dafür, dass auch etwas passiert, wenn der Spieler etwas macht, was im Script nicht festgelegt wäre (z.B., wenn kein LookAt definiert wäre, würde Unhandled bei "Schau an Pinnwand" greifen). Unhandled lässt den Spieler nur einen passenden Standardkommentar sagen, wie "Nett".
Auf diese Weise können auch eigene Hotspots definiert werden. Beispiel: Du wählst nun im "Room 5"-Tab über die Auswahlliste rechts in der mitte unter "hPinnwand (Hotspot; ID 7)" hHotspot12 aus (den gibt es noch nicht im Raum) und zeichnest mit den Zeichenwerkzeugen eine der unteren Schubladen nach. Nun wählst du wieder das andere Symbol links neben dem Blitz aus und gibst in das Feld "Name" "hSchubladeUnten" ein, dieser Name wird im Script verwendet. Bei "Description" schreibst du "Schublade>l" rein. Diese Beschreibung wird im Spiel angezeigt. Das ">l" wird natürlich nicht gezeigt, sondern bedeutet, dass die Standardaktion für die rechte Maustaste "Anschauen" ist. Es gibt hierbei >o (Öffnen), >c (Schließen), >l (Schau), >p (Nimm), >u (Benutze), >s (Drücke), >y (Ziehe) und in besonderen Fällen >t (Rede), >g (Gib), >v (Variabel, wie Türen Öffnen und Schließen) und >n (Normal). Wie gesagt, im Anhang eine Übersicht für die Aktionen. Schließlich drückst du bei dem Blitz und "Any click on hotspot" wieder auf "..." und schreibst rein:
[ags] if (any_click_move(160, 123, eDirUp))
{
if (UsedAction(eActLookAt))
{
Wait(5);
player.Say("Das alte Mistding klemmt die meiste Zeit.");
}
else Unhandled();
}[/ags]
Dein erster Hotspot ist fertig. Erinnerst du dich daran, dass du alles mit F5 ausprobieren kannst, wenn du was geändert hast?
ObjekteWenn du wieder in dem "Room 5"-Tab, dort wo wir "Hotspots" ausgewählt haben 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 Daves Tisch einen Laptop stellen. Erst erstellen wir durch Rechtsklick auf der ungefähren Position des Laptops ein neues Objekt.
Nun weisen wir der erscheinenden Tasse (das ist das Zeichen dafür, dass diesem Objekt noch keine Grafik zugewiesen wurde) eben eine Grafik zu. Also gehst du nun wieder in die Eigenschaftsliste unten rechts, dort bei Image auf die bekannten drei Punkte. Du befindest dich in Dave's Raum, also navigierst du nach Räume und dann nach Daves Zimmer. Hier siehst du die Sprites, die in Dave's Raum schon vorhanden sind. Erst einmal kopierst du diese Grafik aus deinem Browserfenster in die Zwischenablage:
Dann klickst du rechts auf einen freien Bereich im rechten Abschnitt und wählst "Paste new sprite from clipboard...". Öffnet sich folgendes Fenster, musst du nur noch auf "Import Whole Image" klicken. Ansonsten solltest du dir die Bilddatei herunterladen und stattdessen im Kontextmenü "Import new sprite from file..." wählen. Die Farbtiefe der Bilder wird bei diesem Vorgang gleich an das Spiel angepasst, da AGS-Adventures den gewissen "Old-School"-Stil haben.
Jetzt klickst du nur noch doppelt auf den importierten Laptop, und schon sollte er am Schreibtisch stehen. Du kannst nun noch die Position durch ziehen des Objekts anpassen, außerdem solltest du ihm eine Beschreibung (z.B. Laptop) und einen Namen (z.B. oLaptop) geben, dies funktioniert wie bei den Hotspots.
Damit Dave damit auch was machen kann, müssen wir wieder das Skript erweitern. Dazu gehst du auf den Blitz und dann bei "Any click on object" auf die drei Punkte und fügst folgendes Skript ein:
[ags] if (any_click_move(187, 122, eDirUp))
{
if (UsedAction(eActLookAt))
{
Wait(5);
player.Say("Mein neuer Laptop.");
}
else if (UsedAction(eActPickUp))
{
Wait(5);
//ins Inventar
}
else if (UsedAction(eActUse))
{
Wait(5);
player.Say("Dafür habe ich jetzt keine Zeit.");
}
else if (UsedAction(eActOpen))
{
Wait(5);
player.Say("Er ist bereits aufgeklappt.");
}
else if (UsedAction(eActClose))
{
Wait(5);
player.Say("Der kann anbleiben.");
}
else if (UsedAction(eActPull) || UsedAction(eActPush))
{
Wait(5);
player.Say("Ich verrücke ihn jetzt nicht.");
}
else Unhandled();
}[/ags]
Wenn Dave für verschiedene Aktionen an verschiedene Orte gehen soll, was in einigen Sonderfällen passieren kann, kann man das if mit der Position auch stattdessen in alle UsedAction-ifs einbauen, natürlich entsprechend mit angepassten Positionen. Hier ein gekürztes Beispiel. Beim benutzen geht er statt zum Laptop zur Tür:
[ags] if (UsedAction(eActLookAt))
{
if (any_click_move(187, 122, eDirUp))
{
Wait(5);
player.Say("Mein neuer Laptop.");
}
}
else if (UsedAction(eActUse))
{
if (any_click_move(273, 125, eDirRight))
{
Wait(5);
player.Say("Dafür habe ich jetzt keine Zeit.");
}
}
else if (any_click_move(187, 122, eDirUp)) Unhandled();[/ags]
InventargegenständeWie du vielleicht schon im Skript gesehen hast, war da noch keine Funktion zum nehmen des Laptops darin, lediglich ein Kommentar "ins Inventar" - aber so einfach ist das schließlich nicht.
Du kopierst dir also als erstes wieder diese Grafik (wenn du mal selbst eine Zeichnest - sie sollte 31x19 Pixel groß sein, theoretisch möglich wären aber auch 38x22 Pixel) in die Zwischenablage und öffnest dann oben rechts in AGS den Baum "Inventory Items", worin du siehst, dass bereits eine Fernbedienung definiert wurde. Also klickst du rechts auf "Inventory Items" und dann auf "New inventory item".
Auch hier musst du also wieder auf Image gehen und im Spritefenster in den Ordner "Inventar" gehen, dort das Sprite einfügen und auswählen. Die Beschreibung ("Laptop>u", zu diesem ">u" später mehr) und der Name ("iLaptop") sollte natürlich auch gesetzt werden.
Die Aktionen müssen wieder über den Blitz eingefügt werden. Der Unterschied hierbei ist, dass wir mehrere Funktionen aktivieren müssen, da es bei Inventargegenständen kein "Any click" gibt. Also erstellst du als erstes die "Look at inventory" Funktion:
[ags] Wait(5);
player.Say("Es läuft eine Kommandozeile.");[/ags]
Dann die "Other click on inventory" Funktion. Hierbei ist wichtig, dass statt "Unhandled" zum schluss "Unhandled_Inventory" verwendet wird, da wir hier ja einen Inventargegenstand vorliegen haben:
[ags] if (UsedAction(eActOpen))
{
Wait(5);
player.Say("Er ist bereits aufgeklappt.");
}
else if (UsedAction(eActClose))
{
Wait(5);
player.Say("Der kann anbleiben.");
}
else Unhandled_Inventory();[/ags]
Und zu guter letzt kommen wir nochmal zum ">u" zurück. Inventargegenstände sind ja immer mit dem Benutze-Befehl vorausgewählt. Warum habe ich also trotzdem nochmal dieses Kürzel drangehängt? Ganz einfach: Wir wollen den Laptop vielleicht später nochmal alleine benutzen, ohne zweiten Inventargegenstand. Und deshalb bedeutet das ">u" bei Inventargegenständen, dass das "Benutze mit" wieder zu "Benutze" wird. Dies machst du bei diesem Fall im "Use inventory on this item" Skript (Wenn rulaman es geändert hat, bitte hier Interact on this item verwenden!):
[ags] if(UsedAction(eActUse)) {
Wait(5);
player.Say("Vielleicht woanders.");
}
else Unhandled_Inventory();[/ags]
Man kann noch weitere else ifs für andere Inventagegenstände definieren, also wenn zum Beispiel ein USB-Stick mit dem Laptop benutzt werden soll sähe das etwa so aus:
[ags] if(UsedAction(eActUse)) {
Wait(5);
player.Say("Vielleicht woanders.");
}
else if(player.ActiveInventory==iUSBStick) {
Wait(5);
player.Say("Ich stecke den Stick mal rein...");
}
else Unhandled_Inventory();[/ags]
Natürlich haben wir jetzt aber noch das wichtigste vergessen. Denn immernoch ist in der "Any Click" Routine vom Objekt unser langweiliger Kommentar zu sehen, den du jetzt noch mit folgendem ersetzt, damit das Objekt verschwindet und in unser Inventar wandert, damit wir die ganzen definierten Funktionen auch verwenden können:
[ags] oLaptop.Visible = false;
PlaySound(4);
player.AddInventory(iLaptop);[/ags]
CharaktereWas wäre Maniac Mansion ohne Dave's Freunde? Als nächstes wollen wir ihm Sandy zur Seite stellen. Klicke dazu rechts oben in der Baumstruktur auf "Characters" doppelt und wähle cSandy aus. Hier stellst du ein, dass Sandy in Raum 5 startet ("StartingRoom"), und zwar an Position X = 260 und Y = 130. Wichtig ist auch, dass das Clickable-Attribut auf "True" gesetzt ist.
Jetzt richten wir auch für sie eine "Any click on character" Interaktion ein:
[ags] if(any_click_move(230, 130, eDirRight)) {
if(UsedAction(eActLookAt)) {
player.Say("Meine Freundin.");
}
else if(UsedAction(eActTalkTo)) {
cSandy.FaceDirection(eDirLeft);
Wait(20);
player.Say("Ich liebe Dich, Sandy!");
Wait(30);
cSandy.Say("Ich Dich auch, Dave.");
Wait(20);
cSandy.FaceDirection(eDirDown);
}
else if(!UsedAction(eActUseInventory)) Unhandled_Character();
}[/ags]
Das einzige, was merklich anders ist, als sonst, ist das letzte else if. Wenn es eine "Use inventory on character" Funktion gibt, darf eine Standardnachricht nicht beim geben kommen. Ansonsten könntest du auch für das letzte else if folgendes schreiben:
[ags]else Unhandled_Character();[/ags]
Und das bringt uns schon zum nächsten Punkt. Denn möglicherweise möchten wir ja auch, dass Sandy von uns den Laptop gegeben haben kann. Darum fügst du jetzt noch in die Andere Charakteraktion "Use inventory on charakter" ein:
[ags] if(player.ActiveInventory==iLaptop) {
if(any_click_move(230, 130, eDirRight)) {
cSandy.FaceDirection(eDirLeft);
player.Say("Willst du meinen Laptop mitnehmen?");
player.InventoryQuantity[iLaptop.ID] = 0;
UpdateInventory();
PlaySound(4);
cSandy.Say("Ja, du kriegst ihn auch irgendwann wieder.");
}
}
else Unhandled_Character();[/ags]
Da die Aktion "Gib an" im Starterpack nicht richtig implementiert wurde, könnte es nötig sein die ganze Zeile 1753 ("else if ((GSagsusedmode == 4)" usw.) durch folgende zu ersetzen: [ags]else if ((GSagsusedmode == 4) && (GetLocationType (mouse.x, mouse.y) == 2) && isAction (eActGiveTo) && 0)[/ags] Sonst könnte der Gegenstand ohne Abfrage in der Charakteraktion abgegeben werden. (Wenn rulaman das Problem gelöst hat und die Zeile nicht mehr dem in etwa entspricht oder leer ist, diese Anweisung einfach ignorieren!)
Danach kann der Spieler den Laptop an Sandy geben.
Wenn du nicht mit Dave spielen willst, sondern z.B. mit Syd, dann klicke bei Syd einfach den Knopf "Make this the player character" an. Wichtig ist, dass dann bei ihm hinter "Start in Room" eine 1 steht (die Raumnummer des Startraums) und bei Dave eine -1, falls er nicht mehr im Spiel auftauchen soll. Auch "Clickable" sollte deaktiviert werden, damit wir nicht plötzlich mit uns selbst interagieren können. Bitte stelle nur sicher, dass zum Beispiel der Dialog mit Sandy ein bisschen anders ablaufen würde.
Ein neuer RaumUm einen neuen Raum zu bauen, muss es zunächst mal eine Tür geben, die dorthin führt. Natürlich könnte man auch Räume ohne Türen erstellen - zum Beispiel draußen. Jetzt will ich dir aber zeigen, wie man Türen erstellt. Dafür brauchen wir aber erstmal eine Tür im Raumhintergrund. Eine freie Stelle (wenn auch nicht ganz architekturell korrekt) habe ich im Schlafzimmer gefunden. Lade dir also folgendes Bild herunter und klicke im Raumeditor von dem Schlafzimmer auf "Change...". Dort kannst du es dann auswählen und tauschen.
Wenn die Tür nun im Raumeditor sichtbar ist, solltest du ein Objekt erstellen, was angezeigt wird, wenn die Tür offen (!) ist. Dabei muss man ein bisschen umdenken, im Prinzip ist es aber ganz einfach. Nimm folgendes Bild für ein neues Objekt, welchem du dann Namen "oTuerKammer" und Beschreibung "Tür" gibst und "BaselineOverriden" aktivierst.
Eingebaut sollte das dann etwa so aussehen:
Dann erstellst du nur noch einen Hotspot, der die gesamte Tür umfasst. Wichtig ist hier die Beschreibung "Tür>v".
Jetzt gibt es wieder ein "Any click on hotspot"-Script bei, welches diese eine Zeile enthalten soll:
[ags] if(!Door[eDoorNumKammer].Click()) Unhandled();[/ags]
Das "eDoorNumKammer" ist ein beliebiger Name, der allerdings diesem Schema entsprechen sollte. Wir dürfen nachher nur nicht vergessen, ihn noch zu definieren.
Nun musst du die Raumladefunktion des Schlafzimmers um eine Zeile erweitern. Wo die Funktionslisten sind, solltest du ja mittlerweile wissen.
[ags]function room_Load()
{
Door[eDoorNumKammer].Init(oTuerKammer, hTuerKammer); // Das ist die Zeile, die du einfügen musst
oTuerFlur.init_object(3); // Dies ist ein älteres Türenskript, welches komplizierter war
oTuerKueche.init_object(4);
PlayMusic(23);
}[/ags]
Jetzt müssen wir aber noch das eDoorNumKammer definieren, denn wo soll das sonst herkommen?
Wir öffnen also in der Baumstruktur Scripts und dann Doors.ash. Dort sollte man ein "enum eDoorNum ..." stehen sehen. Wenn nicht, ist der enum noch nicht im Starterpack enthalten. Dann solltest du bitte überall, wo du "eDoorNumKammer" verwendet hast, stattdessen eine Zahl (z.B. 6) verwenden. Jedenfalls ist es wahrscheinlich dass in dem Starterpack dieser "enum" schon enthalten ist, und so fügst du vor dem schließenden } eine Zeile mit Inhalt "eDoorNumKammer," ein.
Nun musst du die Tür auch noch im globalen Türenskript einbauen, damit Sachen wie Position und Ziel der Türen geklärt werden. Dazu öffnest du das Script Doors.asc. Die Eigenschaften sind recht einleuchtend. Die normalen Eigenschaften legen das für den aktuellen Raum fest und die New-Eigenschaften für den zweiten Raum. Bei Türen ist das ein wenig problematisch, zu sagen, wo alt und wo neu ist, aber irgendwo fängt man ja schließlich an mit den Türen. Den folgenden Code fügst du am Ende der Funktion DoorSetup ein (zwischen dem letzten "Door[...]" und "}").
[ags] Door[eDoorNumKammer].i_GlobalInt = 0;
Door[eDoorNumKammer].l_Room = 8;
Door[eDoorNumKammer].i_XPosition = 90;
Door[eDoorNumKammer].i_YPosition = 116;
Door[eDoorNumKammer].l_Direction = eDirUp;
Door[eDoorNumKammer].l_NewRoom = 19;
Door[eDoorNumKammer].i_NewXPosition = 106;
Door[eDoorNumKammer].i_NewYPosition = 135;
Door[eDoorNumKammer].l_NewDirection = eDirRight;
Door[eDoorNumKammer].s_LookAt = "Die Tür zur Kammer.";
Door[eDoorNumKammer].s_NewLookAt = "Zum Schlafzimmer.";[/ags]
Jetzt musst du natürlich noch diesen neuen Raum 19 anlegen. Klicke dazu in der Baumstruktur auf "Rooms" rechts und wähle "New Room" aus. Dort siehst du auch schon die vorgesehene Raumnummer. Drücke nun auf OK und öffne den neuen Raum auch gleich (speichern nicht vergessen!). Du kannst ihn auch gleich schonmal benennen, nur zur Übersichtlichkeit. Vielleicht hast du es ja schon gemerkt, wir wollen eine Kammer machen.
Mit "Change..." kannst du wieder eine Hintergrundgrafik laden, denn schwarz ist uns ja ein bisschen dunkel. Als Beispiel habe ich wie immer ein Bild beigelegt. Also lade es wieder herunter und wähle die Datei nach Klick auf "Change..." aus.
Fast hätte ich es vergessen. Damit sich der Spieler auch im Raum bewegen kann, musst du noch eine Walkable-Area erstellen. Diese Funktion ist im Raumeditor unter der Auswahlliste, wo auch "Hotspots" und "Objects" zu finden sind. Du weißt schon... Die, wo am Anfang "Nothing" drin steht. Also wählst du "Walkable Areas" aus. Nun zeichnest du mit den Zeichenwerkzeugen ein wenig verkleinert den Boden nach, so in etwa wie in dem Screenshot:
Als nächstes solltest du jetzt als kleine Übung wie eben (also bei der anderen Tür) dafür sorgen, dass die Tür links funktioniert. Als Objektsprite habe ich auch schon was für dich. Den Rest solltest du aber mithilfe des Tutorials schaffen.
Viel SpaßWenn du alles so gemacht hast wie beschrieben, dann ist dein erstes MMM-Spiel immerhin schon mal nicht verbuggt oder du hast wenigstens Lust bekommen, dich an das neue 3.x System zu gewöhnen.
Jetzt liegt es an dir, weiter mit AGS rumzuspielen. Wenn Probleme auftauchen, dann solltest du einen Blick in die Hilfedatei werfen (F1 in AGS drücken) und wenn auch das nicht hilft, dann kannst du deine Frage auch gerne im Adventure-Treff
AGS-Forum oder hier im Forum stellen.
Original von
Jan 'DasJan' Schneider.
Überarbeitet für 3.x und "entbernardisiert" von
Endres.
Anhang AHier die Tabelle für Aktionen und verschiedene Bezeichnungen dafür in AGS. Mit Endung ist das Anhängsel bei Beschreibungen von Objekten, Hotspots und Inventargegenständen gemeint.
im Spiel | Endung | Script-Wert | Besonderheit |
Schau an | >l | eActLookAt |
Benutze | >u | eActUse |
Nimm | >p | eActPickUp |
Öffne | >o | eActOpen |
Schließe | >c | eActClose |
Gib an | >g | eActGiveTo | Nur in besonderen Fällen |
Ziehe | >y | eActPull |
Drücke | >s | eActPush |
Rede mit | >t | eActTalkTo | Nur in besonderen Fällen |
Benutze mit | - | eActUseInventory | Kann bei Inventargegenständen wichtig sein |
Variable Aktion | >v | - | Zum Beispiel bei Türen |
Normal | >n | - |