Inhaltsverzeichnis
- Grundlagen & Konzepte
- Installation & erster Start
- Der AGS-Editor: Bereiche & Workflow
- Projekt-Setup: Auflösung, Spieloptionen, Templates
- Assets: Sprites, Views, Audio, Fonts
- Räume (Rooms): Hintergründe, Walkable Areas, Hotspots, Regions
- Charaktere: Eigenschaften, Animation, Laufverhalten
- Objekte: Platzierung, Interaktionen, Kollision
- Inventar: Items, Aufheben, Verwenden, Kombinieren
- Dialogsystem: Dialog-Editor, Start, Logik
- GUI/Interface: Buttons, Labels, Inventarfenster, Mauszeiger
- Skripting: Grundlagen, Events, globale Logik
- Cutscenes, Kamera, Übergänge, Effekte
- Audio: Musik, Soundeffekte, Sprachausgabe
- Speichern/Laden & Spielzustände
- Lokalisierung/Übersetzung
- Debugging, Logs & typische Fehler
- Build & Release: Kompilieren, Paketieren, Testen
- Best Practices & Struktur
- FAQ & Troubleshooting
1) Grundlagen & Konzepte
1.1 Was ist AGS?
Adventure Game Studio (AGS) ist eine Entwicklungsumgebung für klassische 2D-Point-and-Click-Adventures. Du baust dein Spiel aus Räumen, Charakteren, Objekten, Hotspots, Inventar-Items und GUIs zusammen und steuerst Logik über Scripts.
1.2 Kernbausteine eines AGS-Spiels
| Baustein | Wofür? | Typische Beispiele |
|---|---|---|
| Room | Szene/Hintergrund + Interaktionszonen | Waldlichtung, Küche, Labor |
| Character | Spielerfigur & NPCs | player, Wächter, Händler |
| Object | Interaktive Objekte im Raum | Tür, Kiste, Hebel |
| Hotspot | Unsichtbare Klickflächen | „Baum“, „Boden“, „Fenster“ |
| Inventory Item | Gegenstände, die der Spieler trägt | Schlüssel, Karte, Seil |
| GUI | Interface-Elemente | Inventarleiste, Buttons, Textbox |
| Script | Logik & Ablaufsteuerung | Rätsel, Dialogregeln, Cutscenes |
Merksatz: In AGS ist fast alles ein „Asset“, aber die Spiel-Logik entsteht aus dem Zusammenspiel von Editor-Einstellungen (Properties/Events) und Skripten.
2) Installation & erster Start
2.1 Installation
- AGS von der offiziellen Create-Seite herunterladen.
- Installer ausführen, Standardpfad ist ok.
- Nach der Installation den AGS-Editor starten.
2.2 Erstes Projekt
- „Start a new game“ wählen.
- Template auswählen (z. B. klassisches Point&Click-Interface).
- Spielname und Speicherort setzen.
- Projekt öffnet sich automatisch.
3) Der AGS-Editor: Bereiche & Workflow
3.1 Projektbaum
Links findest du die Kategorien wie Rooms, Characters, Inventory Items, GUIs, Scripts, Audio. Du öffnest und erstellst Inhalte per Doppelklick bzw. Rechtsklick.
3.2 Properties & Events
Viele Dinge lassen sich rein über Eigenschaften einstellen (z. B. Sichtbarkeit, Basissprite, Skalierung). Interaktionen werden oft über Events gelöst (z. B. Interact, Look at, Use inventory on).
3.3 Typischer Arbeitsablauf
- Assets importieren (Sprites, Audio)
- Room erstellen + Hintergrund setzen
- Walkable Areas/Hotspots/Objekte definieren
- Character einrichten + Animation (Views)
- GUI/Interface anpassen
- Events skripten (Room Script, Global Script)
- Testen (F5), Debugging, Iteration
4) Projekt-Setup: Auflösung, Spieloptionen, Templates
4.1 Auflösung & Skalierung
Lege früh fest, ob du Pixel-Art (niedrige Auflösung, scharfe Kanten) oder hochauflösende Hintergründe (HD) nutzt. Häufige Setups:
- 320×200 / 320×240 (retro)
- 640×360 / 640×480 (modern-retro)
- 1280×720 (HD)
Tipp: Eine klare Zielauflösung vermeidet spätere Umbauschmerzen bei GUI, Sprites und Walkable Areas.
4.2 Spieloptionen (Game Settings)
- Spielname, Savegame-Name
- Textgeschwindigkeit, Untertitel, Speech
- Maussteuerung (Verb-Cursor vs. Icon-Cursor)
- Inventory-Layout
4.3 Template-Auswahl
Templates liefern vordefinierte GUIs und Interaktionsstile. Für Anfänger sinnvoll, weil Menü, Inventar und Cursor bereits funktionieren.
5) Assets: Sprites, Views, Audio, Fonts
5.1 Sprites importieren
- Sprite Manager öffnen
- Sprites hinzufügen (PNG empfohlen für Transparenz)
- Saubere Benennung/Ordnung: z. B. Ordner nach Kategorie
5.2 Views (Animationen)
Eine View enthält Loops (z. B. Richtungen) und Frames (Einzelbilder). Typisch:
- Loop 0: nach unten laufen
- Loop 1: nach links laufen
- Loop 2: nach rechts laufen
- Loop 3: nach oben laufen
5.3 Fonts
Für Dialogtexte und GUI-Beschriftungen brauchst du Fonts. Achte darauf, dass Umlaute unterstützt werden. Teste Texte wie „ÄÖÜ äöü ß“ im Spiel.
5.4 Audio importieren
Lege Kategorien an (Music, SFX, Speech) und importiere passende Formate. Für Musik sind komprimierte Formate üblich; SFX können kurz und in hoher Qualität sein.
6) Räume (Rooms): Hintergründe, Walkable Areas, Hotspots, Regions
6.1 Room erstellen & Hintergrund setzen
- Rooms → Rechtsklick → New Room
- Room öffnen → Room Editor
- Hintergrundbild importieren
6.2 Walkable Areas (Laufzonen)
Walkable Areas definieren, wo der Spieler laufen darf. Pro Raum kannst du mehrere Areas nutzen (z. B. „Weg“ und „Wiese“).
- Im Room Editor „Walkable areas“ wählen
- Fläche zeichnen
- Optional: Scaling (Figur wird nach hinten kleiner)
6.3 Walk-behind Areas (Hinter-Objekte laufen)
Damit der Spieler z. B. hinter einem Baum verschwindet:
- „Walk-behinds“ wählen
- Maske über den Baumstamm/Zaun/etc. malen
- Baseline prüfen (wo die Figur „dahinter“ sein soll)
6.4 Hotspots (Klickzonen)
Hotspots sind unsichtbare Bereiche mit Namen („Baum“, „Tür“, „Boden“), die du per Maus anklicken kannst.
6.5 Regions (Script-Trigger)
Regions lösen Skriptereignisse aus, z. B. beim Betreten oder für Umgebungslogik (Nebel, Licht, Soundzone).
6.6 Room Script: Die Logik des Raumes
Jeder Raum hat ein eigenes Script, z. B. für Türlogik, Betreten/Verlassen, lokale Variablen.
Beispiel: Beim Betreten eines Raumes Text anzeigen
function room_AfterFadeIn()
{
Display("Du betrittst den Raum. Es riecht nach feuchtem Moos.");
}
7) Charaktere: Eigenschaften, Animation, Laufverhalten
7.1 Character erstellen
- Characters → New Character
- Script-Name vergeben (z. B.
cBob) - View zuweisen (Animation)
7.2 Wichtige Eigenschaften
| Property | Beschreibung | Tipp |
|---|---|---|
| View | Animation (Walk/Idle) | Sauber strukturierte Loops sparen Zeit |
| Speed | Laufgeschwindigkeit | Je nach Raumgröße anpassen |
| Solid | Blockiert andere | Für NPCs oft sinnvoll |
| Clickable | Anklickbar | NPCs: ja, Deko: nein |
7.3 Charakter sprechen lassen
cBob.Say("Hallo! Hast du dich im Wald verirrt?");
player.Say("Vielleicht...");
7.4 Walk & Positionierung
player.Walk(120, 150, eBlock, eWalkableAreas);
Hinweis: Die Parameter variieren je nach AGS-Version/Setup. Im Zweifel nutzt du Autovervollständigung im Script-Editor und die integrierte Hilfe.
8) Objekte: Platzierung, Interaktionen, Kollision
8.1 Objekt im Raum platzieren
- Room Editor → „Objects“
- „Place new object“
- Sprite auswählen, Position setzen
8.2 Typische Objekt-Events
- Interact: Standard-Aktion (z. B. „Benutzen“)
- Look at: Untersuchen
- Use inventory on: Item anwenden
Beispiel: Objekt untersuchen
function oKiste_Look()
{
Display("Eine alte Holzkiste. Sie sieht stabil aus.");
}
Beispiel: Objekt öffnen, wenn Schlüssel im Inventar
function oKiste_Interact()
{
if (player.HasInventory(iSchluessel))
{
Display("Du schließt die Kiste auf.");
// Beispiel: Item geben
player.AddInventory(iNotiz);
}
else
{
Display("Die Kiste ist verschlossen.");
}
}
9) Inventar: Items, Aufheben, Verwenden, Kombinieren
9.1 Inventory Item erstellen
- Inventory Items → New Item
- Sprite setzen, Beschreibung definieren
9.2 Aufheben (Pickup)
function oSchluessel_Interact()
{
player.AddInventory(iSchluessel);
oSchluessel.Visible = false;
Display("Schlüssel erhalten.");
}
9.3 Item verwenden: ActiveInventory
function oTuer_UseInventory()
{
if (player.ActiveInventory == iSchluessel)
{
Display("Der Schlüssel passt!");
player.ChangeRoom(2, 120, 150);
}
else
{
Display("Das bringt hier nichts.");
}
}
9.4 Items kombinieren (Beispielkonzept)
Items kombinierst du oft über „Use item A on item B“ oder über GUI/Custom-Logik. Beispiel: Seil + Haken → Kletterseil.
function iSeil_UseInventory()
{
if (player.ActiveInventory == iHaken)
{
player.LoseInventory(iSeil);
player.LoseInventory(iHaken);
player.AddInventory(iKletterseil);
Display("Du kombinierst Seil und Haken.");
}
}
10) Dialogsystem: Dialog-Editor, Start, Logik
10.1 Dialog erstellen
- Dialogs → New Dialog
- Optionen für den Spieler anlegen
- NPC-Antworten und Aktionen definieren
10.2 Dialog starten
function cBob_Talk()
{
dBobDialog.Start();
}
10.3 Dialogoptionen „sperren“/freischalten
Häufig nutzt man Variablen/Flags: Nach einem Ereignis werden neue Dialogoptionen sichtbar.
bool bobVertraut = false;
function cBob_Talk()
{
if (bobVertraut) dBobFortgeschritten.Start();
else dBobStart.Start();
}
11) GUI/Interface: Buttons, Labels, Inventarfenster, Mauszeiger
11.1 GUIs verstehen
Eine GUI ist ein Container aus Controls (Button, Label, InventoryWindow …). Typisch sind:
- Hauptinterface (Unterleiste)
- Inventarfenster
- Pause/Options-Menü
11.2 Buttons & Click-Events
function btnInventar_Click(GUIControl *control, MouseButton button)
{
gInventar.Visible = !gInventar.Visible;
}
11.3 Labels (Textanzeige)
Labels eignen sich für UI-Texte: „Punkte“, „Kapitel“, „Name des aktiven Items“.
11.4 Maus-Modi (Look/Use/Talk)
Je nach Template gibt es Cursor-Modi. In Scripts kannst du den Modus setzen, z. B. beim Klick auf UI-Buttons.
Mouse.Mode = eModeLookat; // untersuchen
// Mouse.Mode = eModeInteract; // benutzen (je nach Template)
12) Skripting: Grundlagen, Events, globale Logik
12.1 Wo schreibe ich Code?
- Global Script: globale Regeln, Utility-Funktionen, zentrale Events
- Room Script: raumspezifische Logik (Tür in Raum 1 etc.)
- Dialog Scripts: Aktionen innerhalb von Dialogoptionen
12.2 Grundsyntax (AGS Script)
- Funktionen mit
function Name() - If/Else, Variablen, Rückgabewerte
- Objekteigenschaften per Punkt:
oKiste.Visible
12.3 Wichtige Events (häufig genutzt)
| Event | Wo? | Wann? |
|---|---|---|
| game_start | Global Script | Beim Start eines neuen Spiels |
| room_Load / room_AfterFadeIn | Room Script | Beim Betreten des Raums / nach Fade |
| on_mouse_click | Global Script | Bei Maus-Klick |
| on_key_press | Global Script | Bei Tastendruck |
12.4 Beispiel: Spielstart initialisieren
function game_start()
{
// Spielerstartposition ggf. setzen
player.ChangeRoom(1, 160, 180);
Display("Willkommen!");
}
12.5 Beispiel: Ein „Quest-Flag“
bool questBaumUntersucht = false;
function hBaum_Look()
{
questBaumUntersucht = true;
Display("Der Baum ist hohl. Du hörst ein leises Kratzen von innen.");
}
12.6 Utility-Funktionen (Ordnung schaffen)
function ShowHintIf(bool condition, String message)
{
if (condition) Display(message);
}
13) Cutscenes, Kamera, Übergänge, Effekte
13.1 Cutscenes (Grundprinzip)
Eine Cutscene sperrt oft Eingaben, spielt Ablauf ab, gibt am Ende Kontrolle zurück. Viele Templates liefern Helferfunktionen, sonst machst du es manuell:
// Pseudokonzept – genaue Funktionen können je nach Setup variieren
player.LockView(...); // optional
player.Lock(); // Eingaben sperren (je nach AGS-Version/Template)
Display("...");
// Aktionen, Walks, Dialoge
player.Unlock();
13.2 Kamera / Scrolling Rooms
Bei breiteren Räumen kann die Kamera dem Spieler folgen. Achte darauf, dass UI nicht den Spielbereich verdeckt und dass Walkable Areas über die gesamte Breite korrekt sind.
13.3 Fade/Transitions
Übergänge erhöhen die Qualität: Fade-in/out beim Raumwechsel, Sound-Fades, kurze Pausen.
14) Audio: Musik, Soundeffekte, Sprachausgabe
14.1 Musik abspielen
aMusicForest.Play();
14.2 Soundeffekte
aSfxPickup.Play();
14.3 Sprachausgabe & Untertitel
Optionen:
- Nur Text (klassisch)
- Text + Speech (modern)
- Speech-only (selten, aber möglich)
Praxis-Tipp: Selbst bei Speech ist Untertitel-Option wichtig (Barrierefreiheit, Komfort).
15) Speichern/Laden & Spielzustände
15.1 Savegames
Viele Templates enthalten Save/Load-Menüs. Speichern/Laden ist in Adventures zentral, daher: Teste Savegames regelmäßig (besonders nach Änderungen an Inventar/Variablen/Room-Wechseln).
15.2 Zustände stabil halten
- Für Rätsel-Status: bool oder int Flags
- Für Inventar:
player.HasInventory(iItem) - Für Raumobjekte: Sichtbarkeit, Interaktionsfähigkeit
16) Lokalisierung/Übersetzung
16.1 Mehrsprachigkeit
Wenn du mehrere Sprachen planst:
- Texte zentralisieren (weniger „hart“ im Code)
- Einheitliche Terminologie (Look/Use/Talk etc.)
- Umlaute testen, Fonts prüfen
16.2 Textpflege
Schreibe Texte so, dass sie leicht übersetzbar sind: kurze Sätze, wenig Wortspiele in UI-Buttons, klare Variablenbezeichner.
17) Debugging, Logs & typische Fehler
17.1 Testen (F5)
Starte häufig, teste nach jeder Logikänderung. Kleine Schritte sparen Zeit.
17.2 Logging
System.Log("Debug: Spieler hat die Kiste angeklickt.");
17.3 Häufige Fehlerquellen
- Unsichtbare Objekte:
Visible=falsevergessen zurückzusetzen - Walkable Areas: Lücken → Spieler „bleibt hängen“
- Hotspot/Objekt verwechselt: Event im falschen Element gescriptet
- ActiveInventory: Logik greift nicht, weil Item nicht aktiv ist
- Room-Wechsel: falsche Koordinaten → Spieler spawnt außerhalb der Laufzone
18) Build & Release: Kompilieren, Paketieren, Testen
18.1 Kompilieren
- Build/Compile im Editor ausführen
- Ausgabeordner prüfen
- Test auf anderem Rechner (wichtig!)
18.2 Release-Checkliste
- Intro/Outro, Credits
- Optionen: Lautstärke, Untertitel, Fullscreen/Window
- Save/Load geprüft
- Keine Debug-Texte/Logs sichtbar
- Alle Räume erreichbar? Softlocks?
- Audio-Lautstärken balanciert
19) Best Practices & Struktur
19.1 Namenskonventionen
cNamefür Characters (z. B.cBob)oNamefür Objects (z. B.oKiste)hNamefür Hotspots (z. B.hBaum)iNamefür Inventory (z. B.iSchluessel)gNamefür GUI (z. B.gInventar)
19.2 Code-Organisation
- Wiederverwendbare Funktionen in Global Script
- Raum-spezifische Logik im Room Script
- „Quest Flags“ zentral sammeln und kommentieren
19.3 Design-Praxis
- Hotspots großzügig anklickbar machen
- Feedback geben: „Das geht nicht“ ist ok, aber besser ist „Warum“
- Rätsel fair: Hinweise, Rückfragen, alternative Wege
20) FAQ & Troubleshooting
Warum läuft der Spieler nicht dorthin?
- Liegt das Ziel außerhalb der Walkable Area?
- Gibt es „Löcher“ in der Walkable Area?
- Blockiert ein Solid-Objekt oder Character den Weg?
Warum reagiert ein Objekt/Hotspot nicht?
- Ist es sichtbar/anklickbar?
- Ist das Event im richtigen Element (Objekt vs. Hotspot)?
- Ist der Mausmodus passend (z. B. Look statt Use)?
Warum wird ein Inventar-Item nicht erkannt?
- Hat der Spieler es wirklich (
player.HasInventory(iX))? - Ist es das aktive Item (
player.ActiveInventory)? - Wird es im richtigen Event geprüft (UseInventory vs. Interact)?
Warum sieht die Skalierung komisch aus?
- Walkable Area Scaling korrekt gesetzt?
- Sprites haben passende Baseline (Fußpunkt)?
- Unterschiedliche Sprite-Größen in Animationen vermeiden

