🎮 Adventure Builder Pro – Alle Spielmechaniken

Vollständige Referenz aller Mechaniken die mit dem Editor erstellt und vom Player v4.3 gespielt werden können · April 2026

📋 Übersicht

Navigation & Bewegung
🗺️ Navigation & Bewegung
🚪 Einfacher Ausgang Klick / Parser
Verbindet zwei Orte. Der Spieler wechselt durch Klick auf den Exit-Button oder per Parser-Befehl (GEHE NORDEN).
Feld: location.exits.<Name> = "ziel_id"
🔒 Bedingter Ausgang Bedingung
Ausgang ist nur sichtbar/nutzbar wenn ein Flag gesetzt oder ein Item im Inventar ist.
Felder: requiredFlag · requiredItem · forbidFlag · customName
✨ Konditionaler Ausgang Bedingung Einzigartig
Ausgang erscheint erst wenn ein Flag erfüllt ist – wird im normalen Exits-Bereich nicht sichtbar. Ideal für versteckte Geheimgänge die sich erst nach einem Ereignis öffnen.
Array: location.conditionalExits[].label / to / requireFlag / forbidFlag
📍 Teleportation durch Item Effekt
Ein Item im Inventar teleportiert den Spieler direkt zu einem anderen Ort wenn er es benutzt. Einmal-Nutzung – das Item wird verbraucht.
Feld: item.teleportTo = "location_id"
🚀 Teleportation als Aktionseffekt Effekt
Objekt-Aktion, NPC-Tausch oder NPC-Niederlage teleportiert den Spieler zu einem anderen Ort.
Feld: usableWith[].teleportTo · onDefeat.teleportTo · receivesItems[].teleportTo
🎬 Cutscene beim Betreten Trigger
Beim Betreten eines Ortes spielt automatisch eine Cutscene ab. Optional: nur einmal abspielen.
Felder: location.cutsceneOnEnter = "cutscene_id" · cutsceneOnEnterOnce: true
🎨 Theme-Wechsel beim Betreten Effekt
Jeder Ort kann ein eigenes visuelles Theme haben das beim Betreten aktiviert wird. 12 Themes verfügbar.
Feld: location.theme = "cyberpunk" · Themes: modern · cyberpunk · classic · fantasy · jungle · space · underground · minecraft · dark · lcars · light · retro
Objekte & Aktionen
📦 Objekte & Aktionen
👆 Objekt nehmen (canTake) Effekt
Objekt kann vom Spieler ins Inventar genommen werden. Nach dem Nehmen verschwindet es aus dem Raum.
Feld: object.canTake = true
🔍 Direkt-Aktion (kein Item nötig) Aktion
Klick auf Objekt löst eine Aktion aus ohne dass ein Item benötigt wird. Typisch für: Durchsuchen, Untersuchen, Drücken, Öffnen.
Feld: usableWith[].itemId = "" + actionLabel + success
📋 Direkt-Aktion mit Modal-Fenster
Statt einer kurzen Toast-Meldung öffnet sich ein bleibendes Modal-Fenster – ideal für lange Texte wie Rezepte, Briefe, Tagebücher oder Hinweisschilder. Im Editor: „Item-Verwendung bearbeiten" → Checkbox „Als Modal anzeigen".
Felder: usableWith[].modal = true · usableWith[].title · usableWith[].message
🔧 Item auf Objekt anwenden Aktion
Spieler wählt ein Item aus dem Inventar und wendet es auf ein Raumobjekt an. Nur möglich wenn beide übereinstimmen.
Feld: usableWith[].itemId oder usableWith[].itemName
🏷️ Objekt umbenennen (changeObject) Effekt
Nach einer Aktion ändert sich der Name/Zustand des Objekts. Beispiel: „Staubiges Kissen" → „Durchsuchtes Kissen".
Felder: changeObject = "Neuer Name" · changeObjectId = "item_id"
💥 Objekt entfernen (removeObject) Effekt
Objekt verschwindet nach der Aktion permanent aus dem Raum.
Feld: removeObject = true
✨ Neues Objekt erschaffen (spawnObject) Effekt
Eine Aktion lässt ein neues Objekt im Raum erscheinen. Beispiel: Kissen durchsuchen → 5 Euro spawnen.
Felder: spawnObject = "Name" · spawnCanTake = true · spawnObjectId = "item_id"
🎁 Item sofort ins Inventar geben (givesItemId bei Objekt-Aktion) Effekt
Eine Direct Action auf einem Objekt gibt dem Spieler sofort ein Item ins Inventar – ohne weiteren Klick. Beispiel: Werkzeugkiste durchsuchen → Schraubendreher landet direkt im Inventar. Kombination aus actionLabel (Button-Text), givesItemId (Item-ID) und optional removeObject: true (Objekt verschwindet danach).
Felder: usableWith[].actionLabel · givesItemId · removeObject · message
📦 Item Inline-Editor (Objekte-Tab) Editor
Items werden direkt im Hauptbereich des Editors bearbeitet – kein Popup-Modal. Name, ID, Beschreibung, Bild, Tags, Self-Use, konditionale Bilder und konditionale Beschreibungen sind inline editierbar. Änderungen werden beim Verlassen eines Feldes automatisch gespeichert (AutoSave). Ein Klick auf ein anderes Item in der linken Liste wechselt sofort.
Zugang: Tab 📦 Objekte → Item in Liste wählen
📋 Erfolgs-Nachricht als Modal-Fenster Einzigartig
Nach einer Objekt-Aktion kann die Nachricht als bleibendes Fenster anstatt als flüchtiger Toast erscheinen. Ideal für Rezepte, Briefe, Hinweisschilder – alles was der Spieler längere Zeit lesen soll. Optional mit Fenstertitel.
Felder: usableWith[].modal = true · title (optionaler Fenstertitel) · message
Beispiel JSON:
"usableWith": [{ "actionLabel": "🔧 Durchsuchen", "givesItemId": "schraubendreher", "message": "Du findest einen Schraubendreher!", "removeObject": true }]
🔢 Mehrfachverwendung mit Limit (quantity) Einzigartig
Ein Objekt kann maximal N Mal verwendet werden. Beim Erreichen des Limits erscheint eine andere Meldung und/oder andere Effekte treten ein.
Felder: quantity = 3 · quantityMessage = "Erschöpft!"
❤️ Objekt mit HP (Objekt-Kampf) Kampf
Objekte können Lebenspunkte haben. Jede Aktion verringert die HP. Bei 0 HP wird ein Sieg-Effekt ausgelöst (Flag setzen, Item geben, Teleport).
Felder: object.maxHP = 100 · usableWith[].onDefeat.message · onDefeat.setFlag · onDefeat.teleportTo
🚩 Flag setzen durch Aktion Effekt
Jede Objekt-Aktion kann ein Flag setzen um den Spielfortschritt zu markieren.
Feld: usableWith[].setFlag = "flag_name"
🗑️ Flag löschen durch Aktion Effekt
Eine Aktion kann ein gesetztes Flag zurücksetzen.
Felder: clearFlag · setFlagFalse
Inventar & Items
🎒 Inventar & Items
📋 Standardinventar System
Spieler sammelt Items und kann sie jederzeit einsehen. Items können auf Raumobjekte angewendet oder an NPCs übergeben werden.
🔒 Inventar versteckt / gesperrt Einzigartig
Das Inventar ist zu Spielbeginn unsichtbar. Es wird erst sichtbar wenn der Spieler ein bestimmtes Item aufnimmt (z.B. einen Rucksack).
Felder: displaySettings.inventoryHiddenAtStart = true · unlockInventoryItemId = "rucksack"
🔄 Item kombinieren (Crafting/Inventar) Aktion
Spieler wählt zwei Items im Inventar aus und kombiniert sie. Ergebnis erscheint im Inventar, Zutaten werden entfernt.
Über Rezepte: recipes[].item1Id + item2Id → resultId
🎁 Item-Synonyme für Parser Parser
Items können alternative Namen haben. Der Parser erkennt alle Synonyme gleichwertig.
Feld: item.synonyms = ["schluessel", "key", "rost"]
🚀 Teleport-Item Effekt
Bestimmte Items teleportieren den Spieler beim Benutzen direkt an einen anderen Ort. Das Item wird dabei verbraucht.
Feld: item.teleportTo = "location_id"
NPCs & Dialoge
🗨️ NPCs & Dialoge
🔀 Konditionaler NPC-Dialog Bedingung
Der einfache Dialog-Text eines NPCs wechselt je nach Flag-Zustand – ohne Dialog-Baum. Erste passende Bedingung gewinnt, Fallback auf Standard-Text. Im Editor: NPC bearbeiten → Reiter „🔀 Konditional" beim Dialog-Feld.
Array: npc.conditionalDialogs[].dialog / flag
Beispiel: Papa sagt „Hast du den Schraubendreher?" → nach Flag gegeben_schraubendreher: „Danke, ich repariere das gleich!"
💬 Einfacher Dialog Interaktion
Spieler spricht NPC an – NPC zeigt Dialogtext. Einmalig oder bei jedem Gespräch.
Feld: npc.dialog = "Text..."
🌿 Dialog-Baum (verzweigt) Interaktion
Verzweigter Dialog mit Antwortoptionen. Spieler wählt Antwort → nächste Node. Optionen können an Flags gebunden sein.
Feld: npc.dialogTree.start · Nodes: text, options[].label, options[].next
🔀 Flag-Weiche im Dialog (flagBranch) Bedingung
Eine Dialog-Node leitet automatisch zu einer anderen Node weiter wenn ein bestimmtes Flag gesetzt ist – ohne Spielereingriff.
Feld: node.flagBranch = [{requireFlag: "x", next: "node_id"}]
🎁 NPC gibt Items beim Ansprechen Effekt
Beim ersten Gespräch gibt der NPC automatisch Items an den Spieler. Jedes Item wird einmalig übergeben.
Feld: npc.givesItems = ["item_id", ...]
🚩 Flag setzen durch Dialog-Wahl Effekt
Eine Dialog-Option oder das Erreichen einer Node setzt ein Flag.
Felder: node.setFlag · option.setFlag
👁️ Bedingter NPC (conditional) Bedingung
NPC erscheint im Raum erst wenn ein bestimmtes Flag gesetzt ist – und verschwindet wenn ein anderes Flag gesetzt ist.
Array: location.conditionalNpcs[].npcId / requireFlag / forbidFlag
💀 NPC dauerhaft besiegt Effekt
Nach einer Niederlage verschwindet ein NPC permanent aus dem Raum (via automatisch gesetztem npc_defeated_<id>-Flag).
Automatisch: gameState.flags.npc_defeated_<npcId> = true
🎬 Cutscene durch Dialog/Tausch Effekt
Nach einem NPC-Gespräch oder Tausch spielt eine Cutscene ab. Optional: nur einmal.
Felder: receivesItems[].playCutscene · playCutsceneOnce
Tauschsystem
🔄 Tauschsystem
💱 Item gegen Item tauschen Interaktion
Spieler gibt NPC ein Item – NPC gibt dafür ein anderes Item zurück. Klassische Tausch-Mechanik.
Felder: receivesItems[].itemId · givesItemId · message
🎁 Item schenken (ohne Gegenleistung) Interaktion
Spieler gibt NPC ein Item ohne Gegenleistung – z.B. als Quest-Abgabe oder Geschenk.
Felder: receivesItems[].itemId ohne givesItemId
🔒 Tausch mit Vorbedingung Bedingung
Tausch ist nur möglich wenn ein bestimmtes Flag gesetzt oder bestimmte Objekte aus dem Raum verschwunden sind.
Felder: requireFlag · requireObjectsGone = ["Objekt"] · conditionLogic = "AND"|"OR" · failMessage · failTitle
🚩 Flag setzen durch Tausch Effekt
Nach erfolgreichem Tausch wird automatisch ein Flag gesetzt.
Feld: receivesItems[].setFlag = "pizza_bekommen"
🖼️ Ortsbild wechselt nach Tausch Einzigartig
Nach einem Tausch wird renderLocation() aufgerufen – konditionelle Bilder werden sofort aktualisiert ohne Ortswechsel.
Kombination: receivesItems[].setFlag + location.conditionalImages[].requireFlag
Kampfsystem
⚔️ Kampfsystem

Das Kampfsystem ist HP-basiert und gilt sowohl für NPCs als auch für Objekte. Schaden wird durch Item-Anwendung verursacht.

❤️ NPC mit Lebenspunkten Kampf
NPC hat einen HP-Balken. Jede Item-Aktion verringert seine LP. Bei 0 wird onDefeat ausgelöst.
Felder: npc.maxHP = 100 · npc.hp (Startwert)
❤️ Objekt mit Lebenspunkten Kampf
Raumobjekte können HP haben. Wiederholte Aktionen (z.B. Angriff) reduzieren die HP bis zur Niederlage.
Feld: object.maxHP = 50
🗡️ Angriff durch Item-Anwendung Aktion
Ein Inventar-Item auf einen Gegner anwenden verursacht Schaden. Der Angriffswert ergibt sich aus dem Skill-System des Spielers.
Feld: usableWith[].success (Kampfmeldung)
💀 Niederlage-Effekte (onDefeat) Effekt
Bei HP = 0 eines Gegners: Item geben, Flag setzen, Flag löschen, Teleportieren, Meldung anzeigen, Skill-Punkte vergeben.
Felder: onDefeat.givesItem · setFlag · clearFlag · teleportTo · message · skillGain
❤️ Spieler-HP-System System
Optional: Spieler hat eigene Lebenspunkte die in der Sidebar angezeigt werden. Start-HP und Max-HP konfigurierbar.
Felder: displaySettings.playerHPEnabled · playerStartHP · playerMaxHP · hpSectionTitle · hpUnit
⭐ Skill / Erfahrungssystem System
Optionaler Skill-Balken in der Sidebar. Steigt durch NPC-Niederlagen und Objekt-Aktionen. Beeinflusst Angriffsstärke im Kampf.
Felder: displaySettings.skillSystemEnabled · skillStartValue · skillMaxValue · skillSectionTitle · skillLabel · onDefeat.skillGain
Flags & Bedingungen
🚩 Flags & Bedingungen

Flags sind boolesche Spielzustandsvariablen (true/false). Sie sind das zentrale Werkzeug für alle bedingten Mechaniken.

Wo Flags gesetzt werden

QuelleFeld
Objekt-AktionusableWith[].setFlag
Objekt-Aktion (löschen)usableWith[].clearFlag / setFlagFalse
NPC-TauschreceivesItems[].setFlag
Dialog-NodedialogTree.node.setFlag
Dialog-OptiondialogTree.node.options[].setFlag
NPC-NiederlageonDefeat.setFlag + auto: npc_defeated_<id>
Spielende-BedingunggameEnds.win[].setFlag

Wo Flags geprüft werden

ElementFelder
Ausgänge (sichtbar/nutzbar)exits.requiredFlag · forbidFlag
Konditionale AusgängeconditionalExits[].requireFlag · forbidFlag
Konditionale NPCsconditionalNpcs[].requireFlag · forbidFlag
Konditionelle BilderconditionalImages[].requireFlag · forbidFlag
Tausch-BedingungreceivesItems[].requireFlag
Dialog-Optionen sichtbaroptions[].requireFlag · requireFlagNot
Dialog-WeicheflagBranch[].requireFlag
Spielende-BedingunggameEnds.win[].requireFlag · requireFlagFalse
Usable-Bedingung (Objekt)usableWith[].requireFlag · requireFlagNot
🔗 Bedingungsverknüpfung Logik
Beim Tausch können Flag-Bedingung und Objekt-Bedingung mit AND oder OR verknüpft werden.
Feld: conditionLogic = "AND" | "OR"
🎒 Zusätzliches Item benötigt (requireItemId) Bedingung
Eine Objekt-Aktion ist nur ausführbar wenn der Spieler ein bestimmtes zweites Item im Inventar hat – zusätzlich zum eigentlichen Aktions-Item. Beispiel: Schlüssel UND Taschenlampe nötig.
Feld: usableWith[].requireItemId = "item_id"
Crafting & Rezepte
⚗️ Crafting & Rezepte
🧪 Zwei Items kombinieren Interaktion
Spieler wählt zwei Items im Inventar aus und kombiniert sie. Wenn ein Rezept passt, verschwinden beide Items und das Ergebnis erscheint im Inventar.
Felder: recipes[].item1Id + item2Id → resultId · message
🎬 Cutscene nach Kombination Effekt
Nach erfolgreichem Crafting kann eine Cutscene abgespielt werden. Optional nur einmal.
Felder: recipe.playCutscene = "cutscene_id" · playCutsceneOnce = true
💡
Rezepte sind reihenfolgeunabhängig: Item A + Item B = Item B + Item A. Crafting ist auch per Parser möglich: KOMBINIERE 5 EURO MIT 3 EURO
Cutscenes
🎬 Cutscenes
🎞️ Dia-Show (Slides) Präsentation
Cutscenes bestehen aus beliebig vielen Slides mit Bild (JPG/PNG/GIF/WebM/MP4/AVIF), Text und Hintergrundmusik pro Slide. Spieler blättert mit Klick oder Enter weiter.
Felder pro Slide: image · imageLoop · text · bgm · bgmLoop · theme
⏩ Cutscene überspringen Spieler
Spieler kann jede Cutscene mit Escape oder einem Skip-Button überspringen.

10 Cutscene-Trigger

TriggerJSON-Feld
Spielstart (Intro)cutscenes.game_intro (Spezial-ID)
SpielendegameEnds.win[].playCutscene
Ort betretenlocation.cutsceneOnEnter (+ cutsceneOnEnterOnce)
NPC-Gesprächnpc.givesItems[].playCutscene
NPC-TauschreceivesItems[].playCutscene (+ playCutsceneOnce)
Objekt-AktionusableWith[].playCutscene
Objekt-NiederlageonDefeat.playCutscene
NPC-NiederlageonDefeat.playCutscene
Crafting-Erfolgrecipe.playCutscene (+ playCutsceneOnce)
Spielende (Niederlage)gameEnds.lose[].playCutscene
Spielende
🏁 Spielende
🏆 Sieg durch Item im Inventar Bedingung
Spiel endet mit Sieg sobald ein bestimmtes Item im Inventar ist.
Felder: gameEnds.win[].type = "item" · value = "item_id"
🏆 Sieg durch Flag Bedingung
Spiel endet mit Sieg sobald ein bestimmtes Flag gesetzt ist.
Felder: type = "flag" · value = "flag_name"
💀 Niederlage durch Item / Flag Bedingung
Gleiche Struktur wie Sieg, aber unter gameEnds.lose. Zeigt Game-Over-Meldung.
📜 Spielende-Nachricht (einfach & erweitert) Effekt
Einfach: String. Erweitert: Objekt mit eigenem Titel, Text, Button-Text und Bild.
Felder: message.title · message.message · message.buttonText · message.image · imageSize
🎊 Konfetti-Animation bei Sieg Effekt
Bei jedem Sieg fällt automatisch Konfetti vom Bildschirm.
🎬 Cutscene vor Spielende Effekt
Erst Cutscene abspielen, dann die Spielende-Meldung zeigen.
Feld: gameEnds.win[].playCutscene = "cutscene_id"
🔒 Spielende mit Zusatzbedingung Bedingung
Spielende tritt nur ein wenn zusätzlich ein weiteres Flag gesetzt oder nicht gesetzt ist.
Felder: requireFlag · requireFlagFalse
Medien & Atmosphäre
🖼️ Medien & Atmosphäre
🖼️ Ortsbild (Standard) Darstellung
Jeder Ort hat ein Bild das oben im Spielbereich angezeigt wird. Unterstützt JPG, PNG, GIF, WebP, AVIF, WebM (Video), MP4 (Video).
Felder: location.image · imageLoop (Video/GIF wiederholen)
🔀 Konditionelle Ortsbilder Einzigartig
Das Ortsbild wechselt automatisch je nach Flag-Zustand – ohne Ortswechsel. Erstes passendes Bild in der Liste gewinnt. Wechsel erfolgt sofort nach NPC-Tausch.
Array: location.conditionalImages[].image / requireFlag / forbidFlag / imageLoop
🔀 Konditionale Item-Bilder Einzigartig
Das Bild eines Objekts im Raum wechselt automatisch je nach Flag-Zustand – ohne Ortswechsel. Erstes passendes Bild in der Liste gewinnt. Fallback: Standard-Bild des Items.
Array: gameData.items[id].conditionalImages[].image / requireFlag / forbidFlag
📝 Konditionale Item-Beschreibungen Einzigartig
Die Beschreibung eines Items im Info-Modal und im Inventar wechselt automatisch je nach Flag-Zustand. Erste passende Bedingung gewinnt. Fallback: Standard-Beschreibung des Items.
Array: gameData.items[id].conditionalDescriptions[].description / flag / forbidFlag
Beispiel: Tablet zeigt „Kein Internet" → nach Flag internet_frei = true zeigt es „Internetzugang aktiv!".
Beispiel: Tablet zeigt „kein Internet" → nach Flag internet_frei = true zeigt es „mit Internet".
🔀 Konditionale NPC-Portraits Einzigartig
Das Portrait eines NPCs wechselt automatisch je nach Flag-Zustand. Erstes passendes Portrait gewinnt. Fallback: Standard-Portrait des NPCs.
Array: npc.conditionalPortraits[].image / flag / forbidFlag
🗂️ Standard / Konditional – Tab-System im Editor Einzigartig
Überall wo konditionale Inhalte möglich sind (Bild, Beschreibung, NPC-Dialog, NPC-Portrait) zeigt der Editor zwei Reiter: Standard für den normalen Inhalt und Konditional für Flag-abhängige Varianten. Hat ein Objekt bereits konditionale Einträge, öffnet sich der Konditional-Reiter automatisch. Ein Badge-Zähler zeigt wie viele Einträge vorhanden sind.
Betrifft: Item-Bild · Item-Beschreibung · Ort-Bild · Ort-Beschreibung · NPC-Portrait · NPC-Dialog
🖼️ Item-Bild wechselt nach Tausch Einzigartig
Nach einem erfolgreichen Tausch (setFlag) rendert der Player den Raum neu – konditionale Item-Bilder aktualisieren sich sofort ohne Ortswechsel.
Kombination: receivesItems[].setFlag + items[id].conditionalImages[].requireFlag
🎵 Ortsmusik (Hintergrundmusik) Atmosphäre
Jeder Ort kann Hintergrundmusik haben die beim Betreten startet. Loop optional.
Felder: location.sound · soundLoop
🔇 Stille (Silence-Modus) Effekt
Ein Ort kann alle laufenden Sounds sofort stoppen – ideal für dramatische Stille-Momente.
Feld: location.silence = true
🎨 12 visuelle Themes Darstellung
Modern, Cyberpunk, Classic, Fantasy, Jungle, Space, Underground, Minecraft, Dark, LCARS, Light, Retro. Pro Ort individuell einstellbar.
🖼️ Ortsbild im Nur-Text-Modus Einzigartig
Im Terminal-Modus erscheint das Ortsbild inline im Log-Fluss direkt über der Raumbeschreibung. Toggle-Button zum Ein-/Ausblenden.
Feld: displaySettings.textModeImages = true
🎵 Cutscene-BGM pro Slide Einzigartig
Jede Cutscene-Slide kann eine eigene Hintergrundmusik haben die beim Wechsel zur nächsten Slide stoppt.
Felder: slide.bgm · slide.bgmLoop
Sound-Bibliothek & SFX
🔊 Sound-Bibliothek & SFX
🔊 Sound-Bibliothek
Zentrale Bibliothek für alle Soundeffekte. Sounds werden einmalig hochgeladen (MP3/OGG/WAV) und über eine ID referenziert – kein doppeltes Speichern desselben Audio-Blobs. Verwaltung im Tab 🔊 Sounds.
Feld: sounds["id"].name · sounds["id"].data
🔔 SFX beim Item aufnehmen Effekt
Jedes Item kann einen Sound haben der abgespielt wird wenn der Spieler es aufnimmt. Sound-ID aus der Bibliothek.
Feld: items["id"].sfx
🔔 SFX bei Item-Verwendung Effekt
Jede usableWith-Aktion kann einen Soundeffekt auslösen wenn sie erfolgreich ausgeführt wird. Funktioniert sowohl im Grafik- als auch im Parser-Modus.
Feld: usableWith[i].sfx
🔔 SFX beim Crafting Effekt
Rezepte können einen Soundeffekt auslösen wenn zwei Items erfolgreich kombiniert werden.
Feld: recipes[i].sfx
💥 SFX bei HP-Schaden (global) Kampf
Globaler Treffer-Sound der abgespielt wird wenn der Spieler Schaden (counterDamage) vom NPC erhält.
Feld: displaySettings.sfx.hit
💊 SFX bei Heilung (global) Kampf
Globaler Heilungs-Sound bei selfUse mit healHP – nur wenn tatsächlich HP gewonnen wird.
Feld: displaySettings.sfx.heal
⭐ SFX bei Skill-Aufstieg (global) Kampf
Globaler Level-Up-Sound wenn der Kampf-Skill des Spielers steigt (z.B. nach Treffer oder kritischem Treffer).
Feld: displaySettings.sfx.levelup
💀 SFX bei Spieler-Tod (global) Kampf
Globaler Tod-Sound wenn Spieler-HP auf 0 sinkt.
Feld: displaySettings.sfx.death
🏆 SFX bei NPC-Sieg (global) Kampf
Globaler Sieg-Sound wenn ein NPC auf 0 HP gebracht und onDefeat ausgelöst wird.
Feld: displaySettings.sfx.npcDefeat
Parser & Texteingabe
⌨️ Parser & Texteingabe
🗣️ Vollständiger Freitext-Parser (Deutsch) Einzigartig bei GUI-Editoren
Spieler tippt natürliche Befehle. Der Parser erkennt Verben, Substantive, Präpositionen und Synonyme.

Vollständiges Parser-Vokabular

BefehlBeispieleWirkung
GEHE / BETRETEGEHE NORDEN · BETRETE KÜCHEBewegt zu Exit
NIMM / NEHMENIMM SCHLÜSSELItem aufnehmen
UNTERSUCHE / XUNTERSUCHE KISSENDirekt-Aktion oder Beschreibung
DURCHSUCHEDURCHSUCHE KISTENDirekt-Aktion (Suchen)
BENUTZEBENUTZE STAUBSAUGERItem/Direkt-Aktion
BENUTZE … MITBENUTZE KEY MIT TRUHEItem auf Objekt
GIB … ANGIB 8 EURO AN MARCONPC-Tausch auslösen
SPRICH MIT / REDE MITSPRICH MIT MAMANPC ansprechen
ÖFFNE / SCHLIESSEÖFFNE TRUHEDirekt-Aktion
INVENTAR / IIInventar anzeigen
SCHAU DICH UM / LSCHAU DICH UMRaum anzeigen
KOMBINIERE … MITKOMBINIERE 5 EURO MIT 3 EUROCrafting
HILFE / ??Befehlsliste
🔤 Item-Synonyme Konfigurierbar
Jedes Item kann alternative Namen haben die der Parser gleichwertig erkennt.
Feld: item.synonyms = ["schluessel", "key"]
Spielmodi
🎛️ Spielmodi
🖼️ Grafik-Modus (Standard) Modus
Klick-basiertes Point-&-Click-Adventure. Bilder, Karten, Buttons. Tastaturkürzel: 1–9 (Exits), A–Z (NPCs), Pfeiltasten (Richtungen).
⌨️ Parser-Modus Modus
Grafik + Parser-Leiste unten. Beide Steuerungsarten gleichzeitig aktiv.
📟 Nur-Text-Modus (Terminal) Einzigartig bei GUI-Editoren
Alle Grafik-Elemente ausgeblendet. Scrollendes Terminal-Log. Ortsbilder optional inline im Fluss. Parser-Eingabe unten, alle Dialoge/Aktionen als Text.
Feld: displaySettings.textOnlyMode = true
🔀 Modus-Umschaltung durch Spieler Einzigartig
Spieler kann jederzeit per Buttons zwischen Grafik, Parser und Nur-Text wechseln. Spielstand bleibt erhalten. Designer steuert welche Buttons sichtbar sind.
Felder: showModeGrafik · showModeParser · showModeText
📐 Terminal-Breite konfigurierbar Einzigartig
Im Nur-Text-Modus kann die Breite des Terminals auf 600–1000 px eingeschränkt werden – stilvolles schmales Terminal wie klassische DOS-Adventures.
Feld: displaySettings.terminalWidth = "800px"
Spieler-Systeme
📊 Spieler-Systeme & Darstellung
📍 Inventar-Position Konfigurierbar
Inventar-Sidebar kann links, rechts, oben oder unten positioniert werden. Spieler kann Position optional selbst ändern.
Felder: inventoryPosition = "left"|"right"|"top"|"bottom" · allowInventoryChange
🔤 Schriftgröße Konfigurierbar
4 Schriftgrößen: small, medium, large, xlarge. Einstellbar vom Spieler in den Einstellungen.
Feld: displaySettings.fontSize
🔊 Sound an/aus Konfigurierbar
Spieler kann alle Sounds im Einstellungs-Modal global stumm schalten.
🔢 Thumbnail-Größen Konfigurierbar
Bildgröße für Raum-Objekte, Inventar, NPCs und Modals individuell einstellbar (in Pixel).
Felder: thumbSizeRoomObjects · thumbSizeInventory · thumbSizeNPCs · thumbSizeModal
📏 Container-Größe Konfigurierbar
Maximale Breite und Höhe des Spielbereichs individuell einstellbar.
Felder: containerMaxWidth · containerMaxHeight
🏷️ Text-Sichtbarkeit Konfigurierbar
Namen unter Objekt-, NPC- und Inventar-Thumbnails ein-/ausblendbar. Leere Sektions-Titel ausblendbar.
Felder: showObjectText · showNPCText · showInventoryText · hideEmptySectionTitles
📐 Layout-Modus Konfigurierbar
Objekte und Inventar können horizontal (Rasteransicht) oder vertikal (Listenansicht) angezeigt werden.
Felder: roomLayout · inventoryLayout · inventoryColumns · compactMode
Aufgaben-System
🎯 Aufgaben-System
📋 Ziel-Liste mit Fortschrittsbalken Sidebar
Zeigt dem Spieler eine konfigurierbare Liste von Aufgaben mit Fortschrittsbalken (z.B. „2/5"). Jedes Ziel ist an ein Flag gebunden – sobald das Flag gesetzt wird gilt das Ziel als erfüllt.
Felder: displaySettings.goalsEnabled · goalsTitle · goals[].text · goals[].flag
✅ Erfüllte Ziele abhaken Effekt
Erledigte Ziele werden grün hinterlegt und durchgestrichen dargestellt. Der Fortschrittsbalken aktualisiert sich sofort nach jeder Flag-Änderung.
🔒 Geheimziele Einzigartig
Ziele können als Geheimziel markiert werden. Sie zeigen dann „???" (oder einen konfigurierbaren Text) bis das zugehörige Flag gesetzt wird – erst dann wird der echte Zieltext sichtbar.
Felder: goals[].secret = true · goals[].secretLabel = "???"
🔔 Benachrichtigung bei Zielerfüllung Effekt
Wenn ein Ziel erfüllt wird erscheint eine grüne Notification oben im Spielbereich: „🎯 Ziel erreicht: [Zieltext]". Bei Geheimzielen erscheint die Notification mit dem echten Text.
📍 Drei Anzeigeoptionen Konfigurierbar
Der Designer wählt ob die Ziele immer in der Sidebar sichtbar sind, als aufklappbarer Akkordeon-Block erscheinen oder nur über einen 🎯-Button im Header in einem Modal geöffnet werden.
Feld: goalsPosition = "sidebar" | "accordion" | "modal"
Mechaniken-Übersicht
📊 Vollständige Mechaniken-Übersicht
KategorieAnzahl MechanikenBesonderheiten
Navigation & Bewegung7Konditionale Exits, Teleport-Items
Objekte & Aktionen12Spawn, Change, Quantity, Objekt-HP, konditionelle Beschreibung, Modal-Aktion, Tags
Inventar & Items5Verstecktes Inventar, Teleport-Item
NPCs & Dialoge8Dialog-Baum, Flag-Weiche, Konditional
Tauschsystem5Bedingter Tausch, Sofort-Bildwechsel
Kampfsystem6NPC-HP, Objekt-HP, Spieler-HP, Skill
Flags & Bedingungen8 Setter-Quellen, 10 Prüf-Stellen
Crafting & Rezepte2Reihenfolge-unabhängig, Cutscene, SFX
Cutscenes10 TriggerEinmaligkeit, BGM pro Slide
Spielende7Item/Flag-Bedingung, Zusatzbedingung
Medien & Atmosphäre7Konditionelle Bilder, alle Formate
Sound-Bibliothek & SFX10Zentrale Bibliothek, 8 SFX-Trigger, Kampf-Sounds
Parser & Texteingabe13 BefehleSynonyme, volles Vokabular
Spielmodi53-Wege-Umschalter, Terminal-Breite
Spieler-Systeme7HP, Skill, Inventar-Position, Layout
Aufgaben-System5Geheimziele, Benachrichtigung, 3 Positionen
Text-to-Speech6Hover, Auto-Stimme, Zeitansagen, Cutscene-Auto
Spielstand & Spielzeit21 Slot localStorage, Timer HUD + Spielende
Text-to-Speech (TTS)
🗣️ Text-to-Speech
🖱️ Hover-Vorlesen Hover
Fährt der Spieler über ein Element, wird es vorgelesen (kurze Verzögerung). Alle Spielelemente: Orte, Objekte, Items, NPCs, Dialoge, Inventar, Tipps, Einstellungen.
🎬 Automatisch: Cutscene-Slide Auto
Cutscene-Slides werden beim Erscheinen automatisch vorgelesen – keine Hover-Interaktion nötig.
🎯 Tipps/Ziele mit Status Hover
Zwischenziele beim Hover vorgelesen. Erledigte Ziele erhalten den Zusatz „erledigt".
„Pizza bestellt?, erledigt"
🎙️ Auto-Stimme nach Browser
Beste deutsche Stimme automatisch gewählt. Wahl + Geschwindigkeit dauerhaft gespeichert.
Chrome → Google Deutsch | Edge → Katja | Firefox → beste OS-Stimme
⏱️ Natürliche Zeitansagen
Spielzeiten als gesprochenes Deutsch, nicht als Uhrzeitformat („1 Uhr 23").
„17 Sekunden" | „1 Minute und 23 Sekunden"
🚀 TTS beim Spielstart Konfigurierbar
TTS von Beginn an aktiv – für barrierefreie Spiele und Workshops.
tts.defaultEnabled: true
Spielstand & Spielzeit
🎵 Hintergrundmusik via Sound-Bibliothek Einzigartig
Orts-Sounds werden als ID aus der Sound-Bibliothek referenziert (kein doppeltes Base64). Dropdown im Ort-Editor. Migration alter JSONs erfolgt automatisch beim Laden.
Feld: location.sound = "sound_id" → Player löst via _resolveSoundRef() auf
💾 Spielstand & ⏱️ Spielzeit
💾 1 Speicherslot Einstellungen
Im ⚙️-Menü: aktuellen Stand speichern, laden oder löschen. Zeigt Ort und Zeitstempel des letzten Speicherns. Browser-spezifisch (localStorage).
Speichert: Ort, Inventar, Flags, HP, Skill
⏱️ Spielzeit-Tracking
Läuft immer im Hintergrund. Optional als HUD-Kasten in der Sidebar. Immer in der Spielende-Meldung sichtbar. TTS liest natürlich vor.
displaySettings.showTimerInHUD: true | Format: MM:SS / H:MM:SS
Editor-Usability & neue Spielmechaniken
🚩 setFlag beim Aufnehmen (canTake) v4.3
Objekte mit canTake: true können ein setFlag-Attribut erhalten. Der Flag wird automatisch gesetzt sobald der Spieler das Objekt aufnimmt – ideal für bedingte Ortsbeschreibungen oder Story-Trigger.
JSON: { "itemName": "Tasche", "canTake": true, "setFlag": "tasche_genommen" }
📝 forbidFlag in konditionalen Beschreibungen v4.3
Konditionale Ortsbeschreibungen unterstützen forbidFlag: Der Eintrag greift nur wenn der angegebene Flag nicht gesetzt ist. Kombiniert mit flag ermöglicht das sehr präzise Zustandssteuerung. Reihenfolge der Einträge: spezifischstes zuerst – der erste passende Eintrag gewinnt.
JSON: { "flag": "tasche_genommen", "forbidFlag": "basti_gluecklich", "description": "..." }
🏁 Spielende – Verzögerung & Partikeldesigner v4.3
Konfigurierbare Spielende-Darstellung: Verzögerung 0–5s, Partikel-Effekt (Emojis/Konfetti/Keiner), Emoji-Auswahl aus Presets oder frei, Menge (10–200) und Geschwindigkeit (langsam/normal/schnell). Alle Werte in displaySettings.
JSON: displaySettings.endDelay, endEffect, endEmojis, endCount, endSpeed
↕ Akkordeon-Zyklus-Button v4.3
In den Tabs ORTE, Features und Anzeige gibt es einen ↕-Button der zwischen drei Zuständen wechselt: Alle aufAlle zuMerker (zuvor gespeicherter Zustand). Der Akkordeon-Zustand bleibt über Tab-Wechsel hinweg erhalten.
🎮 Spieltitel im Header & Export-Dateiname v4.3
Der Spieltitel erscheint nach dem Laden rechts neben dem Editor-Logo. Der JSON-Export benennt die Datei automatisch nach dem Spieltitel (Sonderzeichen werden bereinigt). Spiel-Informationen (Titel, Autor, Version) sind im Tab ⚙️ Einstellungen direkt inline editierbar.