Ort-Eigenschaften
{
"ort_id": {
"name": "Dunkler Keller",
"description": "Es riecht modrig hier unten.",
"image": "https://...",
"imageLoop": true,
"sound": "data:audio/...",
"soundLoop": true,
"silence": false,
"theme": "dark",
"exitTransition": "fade",
"exits": {},
"objects": [],
"npcs": [],
"conditionalNpcs": [],
"playCutscene": "keller_intro",
"playCutsceneOnce": true
}
}
| Eigenschaft | Pflicht? | Beschreibung |
name | ✅ Ja | Anzeigename des Ortes |
description | ✅ Ja | Beschreibungstext |
image | ○ Opt. | URL, Base64 oder Data-URL (Bild oder Video) |
sound | ○ Opt. | Hintergrundmusik (MP3/OGG als Data-URL) |
theme | ○ Opt. | Überschreibt das globale Theme für diesen Ort |
exitTransition | ○ Opt. | fade, slide-left, slide-right, zoom, dissolve |
silence | ○ Opt. | true = kein Sound in diesem Ort |
soundRequireFlag | ○ Opt. | 🎚️ Musik spielt nur, wenn dieses Flag gesetzt ist (z.B. strom_an). Reagiert sofort beim Flag-Wechsel – auch wenn der Spieler im Raum steht. |
soundRequireFlagNot | ○ Opt. | 🎚️ Musik spielt nur, wenn dieses Flag NICHT gesetzt ist. Umkehrung – z.B. für eine „Ausfall“-Stimmung bis zum Stromfix. |
HTML in Beschreibungen verwenden
Orts- und Objekt-Beschreibungen werden im Grafik- und Parser-Modus als HTML dargestellt. Du kannst sie also mit einfachen HTML-Tags formatieren – fett, kursiv, farbig, mit Zeilenumbrüchen und mehr. Es gibt keine feste Liste erlaubter Tags; sinnvoll fürs Formatieren sind vor allem diese:
| Tag | Wirkung | Beispiel |
<b> / <strong> | fett | Es ist <b>stockdunkel</b>. |
<i> / <em> | kursiv | <i>Irgendwo</i> tropft Wasser. |
<u> | unterstrichen | <u>Achtung</u> |
<br> | Zeilenumbruch | Zeile 1<br>Zeile 2 |
<p> | Absatz | <p>Erster Absatz.</p> |
<span style="color:#c00"> | Textfarbe | <span style="color:#c00">Gefahr!</span> |
<ul> / <li> | Aufzählung | <ul><li>Tür</li></ul> |
<small> | kleiner | <small>(kaum lesbar)</small> |
<mark> | hervorgehoben | <mark>Schlüssel</mark> |
⚠️
Achtung Textmodus: Im reinen Text-/Terminal-Modus werden Beschreibungen als reiner Text ausgegeben – HTML-Tags erscheinen dort wörtlich (z.B. <b>dunkel</b>). Wenn dein Spiel auch im Textmodus spielbar sein soll, setze HTML in Beschreibungen sparsam ein oder verzichte darauf.
💡
Schließe Tags immer sauber (<b>…</b>) – offenes HTML kann das Layout stören. Für einen Zeilenumbruch brauchst du <br>; ein einfacher Umbruch im Editor-Textfeld wird in der Grafikansicht nicht übernommen. Das gilt verlässlich für Orts- und Objekt-Beschreibungen.
Ausgänge (Exits)
Neu: Überarbeiteter Tab Anzeige v4.4
Der Tab Anzeige ist in 5 thematische Sektionen gegliedert:
- 🎨 Darstellung & Theme – Standard-Theme, Kompakt-Modus, Container-Größe
- 🖼️ Bilder & Thumbnail-Größen – Objekte, NPC Portraits, Modals
- 📦 Objekte & Ausgänge – Ausgänge (Bild/Farbe/Layout), Raum-Layout
- 🎒 Inventar – Thumbnail, Position, Mechanik, Spalten, Button-Modus
- 👁️ Sichtbarkeit & Spielmodi – Text-Anzeige, Parser, Nur-Text, Unterstützung, Ziele
A) Einfache Ausgänge
Richtwörter als Keys oder beliebige Texte – was du schreibst, erscheint als Button.
"exits": {
"N": "wald_nord",
"Durch die Tür": "raum_2",
"Ins Wasser": "see"
}
B) Ausgang mit Flag-Bedingung
Der Ausgang ist nur nutzbar wenn eine bestimmte Flag gesetzt ist.
"exits": {
"N": {
"to": "geheimraum",
"requiredFlag": "tuer_offen",
"deniedMessage": "Die Tür ist noch verschlossen."
}
}
C) Ausgang mit Item-Bedingung
Der Spieler muss ein bestimmtes Item im Inventar haben.
"exits": {
"O": {
"to": "schatzkammer",
"requiredItem": "goldener_schluessel",
"deniedMessage": "Du brauchst den goldenen Schlüssel!"
}
}
D) Ausgang mit kombinierten Bedingungen
"exits": {
"Portal": {
"to": "andere_dimension",
"requiredFlag": "portal_aktiviert",
"requiredItem": "magischer_kristall",
"deniedMessage": "Das Portal reagiert nicht..."
}
}
Praxisbeispiel: Klassische Schlüssel-Tür-Mechanik
Spieler findet Schlüssel → benutzt ihn an einer Eisentür → Flag tuer_offen wird gesetzt → Ausgang im Norden ist jetzt nutzbar.
{
"itemName": "Eisentür",
"canTake": false,
"usableWith": [{
"itemId": "rost_schluessel",
"success": "Die Tür quietscht auf!",
"setFlag": "tuer_offen",
"removeItem": true
}]
}
"N": {
"to": "naechster_raum",
"requiredFlag": "tuer_offen",
"deniedMessage": "Die Tür ist verschlossen!"
}
E) ODER-Verknüpfung zweier Bedingungen 🆕 v4.5
Sind requiredFlag und requiredItem gesetzt, gilt normalerweise UND (beides nötig). Mit conditionLogic: "OR" genügt eine erfüllte Bedingung – z. B. „Taschenlampe im Inventar oder Strom ist an“.
"Teeküche": {
"to": "kueche",
"requiredItem": "Taschenlampe",
"requiredFlag": "strom_an",
"conditionLogic": "OR"
}
🖱️
Im Editor: ➕ Ausgang bzw. ✏️ Ausgang bearbeiten → beide Häkchen im Block 🔐 Conditional Exit setzen → das Feld „🔗 Verknüpfung der beiden Bedingungen“ erscheint (UND/ODER). Das Flag wählst du seit v4.5 bequem aus einer Liste vorhandener Flags.
✍️
Schreibweise: Bei Standard-Ausgängen heißen die Felder requiredFlag/requiredItem (mit „d“) – so speichert sie der Editor. Die Kurzform ohne „d“ wird vom Player ab v4.5 toleriert, überall sonst (Aktionen, Tausch, Geschenke, Enden) gilt weiterhin requireFlag ohne „d“. Verhalten: Unerfüllte Bedingungen blenden den Ausgangs-Button aus; die deniedMessage erscheint nur im Parser-Modus (GEHE …). Mit discoveryMessage begrüßt der Ausgang den Spieler, sobald er sichtbar wird.
Objekte im Ort
Objekte sind Dinge, die der Spieler sieht und mit denen er interagieren kann – anfassen, untersuchen, ein Item darauf anwenden.
A) Einfaches nehmbares Objekt
{
"itemId": "rost_schluessel",
"canTake": true
}
B) Objekt mit Item-Anwendung (usableWith)
Was passiert, wenn ein Spieler ein bestimmtes Item aus dem Inventar auf dieses Objekt anwendet?
{
"itemId": "truhe",
"canTake": false,
"failMessage": "Das bringt hier nichts.",
"usableWith": [{
"itemId": "schluessel",
"actionLabel": "🔓 Aufschließen",
"success": "Die Truhe öffnet sich!",
"changeObject": "offene_truhe",
"spawnObject": "gold",
"spawnCanTake": true,
"removeItem": true,
"setFlag": "truhe_geoeffnet",
"playCutscene": "truhe_oeffnen"
}]
}
| Eigenschaft in usableWith | Bedeutung |
itemId / itemName | Welches Item muss der Spieler anwenden? |
actionLabel | Button-Text (leer = "Anwenden") |
success | Nachricht bei Erfolg |
givesItemId | Item erscheint im Inventar (Transformation) |
requireItemId | Zusätzliches Item muss im Inventar sein |
requireFlagNot | Aktion gesperrt wenn diese Flag gesetzt ist |
changeObject | Objekt wird ersetzt durch… (Item-Name) |
spawnObject | Neues Objekt erscheint im Raum |
spawnCanTake | Kann das gespawnte Objekt aufgenommen werden? |
removeObject | Objekt verschwindet komplett |
removeItem | Verwendetes Item wird verbraucht |
setFlag / clearFlag | Flag setzen oder löschen |
teleportTo | Spieler wird teleportiert |
playCutscene | Cutscene abspielen danach |
requireVar | Variable-Bedingung: {"name":"geld","op":">=","val":5} |
addVar | Variable ändern: {"name":"energie","val":-1} |
varActions | Mehrere Variablen auf einmal: [{"name":"geld","val":-5},{"name":"punkte","val":10}] |
🔗 spawnObjectId – usableWith aus Item-Definition erben v4.4
Wenn ein gespawntes Objekt sofort interaktiv sein soll, reicht spawnObject allein nicht – das erzeugte Objekt hätte ein leeres usableWith. Mit spawnObjectId verweist die Aktion auf den Item-Eintrag im items{}-Dict, und der Player übernimmt dessen usableWith automatisch.
"usableWith": [{
"actionLabel": "🔍 Mauer absuchen",
"requireFlag": "fackel_entzuendet",
"removeObject": true,
"spawnObject": "Hebel",
"spawnObjectId": "hebel",
"spawnCanTake": false,
"message": "Du entdeckst einen verborgenen Hebel!"
}]
💡 Der Editor setzt spawnObjectId automatisch wenn du im Spawn-Dropdown ein Item auswählst.
⚠️ spawnObject ohne spawnObjectId – altes Verhalten, weiterhin gültig.
E) Variablen in Objekt-Aktionen
Aktionen können Variablen prüfen (Bedingung) und ändern (Effekt). Der Editor zeigt den blauen 🔢 Variable-Block im Aktions-Modal.
🗺️ Orte → Objekt → ✏️ Bearbeiten → Aktion → 🔢 Variable (Bedingung & Aktion)
{
"actionLabel": "Apfel holen",
"success": "Du nimmst einen Apfel. (-1 Energie)",
"givesItem": "Apfel",
"addVar": { "name": "energie", "val": -1 }
}
{
"actionLabel": "Wunsch machen (1 €)",
"requireVar": { "name": "geld", "op": ">=", "val": 1 },
"success": "Du wirfst eine Münze ins Wasser. +5 Punkte!",
"varActions": [
{ "name": "geld", "val": -1 },
{ "name": "punkte", "val": 5 }
]
}
{
"actionLabel": "🎂 Kuchen backen!",
"requireFlag": "zutaten_gekauft",
"requireVar": { "name": "energie", "op": ">=", "val": 2 },
"success": "Du backst einen Geburtstagskuchen! +50 Punkte!",
"givesItem": "Geburtstagskuchen",
"setFlag": "kuchen_gebacken",
"varActions": [
{ "name": "energie", "val": -2 },
{ "name": "punkte", "val": 50 }
]
}
C) Direkte Aktion (ohne Item) Direct Action
Ein Button der immer sichtbar ist – zum Untersuchen, Zählen, Aktivieren.
"usableWith": [{
"itemName": "",
"actionLabel": "🔍 Untersuchen",
"success": "Du findest einen versteckten Hinweis!",
"spawnObject": "hinweis",
"spawnCanTake": true
}]
D) Mehrfach-Verwendung (Quantity)
Der Button ist nur eine begrenzte Anzahl von Malen nutzbar.
"usableWith": [{
"itemName": "",
"actionLabel": "🍪 Keks nehmen",
"success": "Lecker! Du nimmst einen Keks.",
"quantity": 5,
"quantityMessage": "Die Dose ist leer!",
"spawnObject": "keks",
"spawnCanTake": true
}]
E) Bedingte NPCs im Ort
Manche Charaktere erscheinen nur unter bestimmten Bedingungen.
"conditionalNpcs": [
{ "npcId": "geist_id", "requireFlag": "mitternacht" },
{ "npcId": "drache_id", "forbidFlag": "drache_besiegt" }
]
F) Ausgänge erweitern: Bild, Farbe & Layout v4.4
Seit v4.4 können Ausgangs-Buttons optisch aufgewertet werden. Alle Einstellungen im Editor unter Tab Anzeige → 🚪 Ausgänge.
🖼️ Bild für einen Ausgang
Im Ausgang-Modal (Ort bearbeiten → Ausgang ✏️) kannst du ein Bild hochladen. Das Bild bestimmt dann die Größe des Buttons – der Text erscheint darunter oder daneben.
"exits": {
"N": {
"to": "dunkler_gang",
"image": "data:image/png;base64,..."
}
}
🎨 Ausgangs-Farbe (global)
Im Tab Anzeige → 🚪 Ausgänge → Button-Farbe kannst du eine CSS-Farbe eingeben, die alle Ausgangs-Buttons überschreibt. Leer = Theme-Farbe.
"displaySettings": {
"exitButtonColor": "#1e1f1e",
"exitButtonStyle": "compact",
"exitLayout": "horizontal",
"thumbSizeExits": 80
}
| Feld | Werte | Bedeutung |
exitButtonColor | "#ff6600", "red", leer | Farbe aller Exit-Buttons (überschreibt Theme) |
exitButtonStyle | "normal", "compact" | Normal = volle Grid-Breite, Kompakt = Inhalt bestimmt |
exitLayout | "vertical", "horizontal", "image-only" | Layout wenn Ausgang ein Bild hat |
thumbSizeExits | 40–200 | Bildgröße in Pixeln |
🔐 Bedingter Ausgang: Item im Inventar
Das requiredItem-Feld prüft den Anzeigenamen des Items. Im Editor gibt es ein Dropdown mit allen vorhandenen Item-Namen.
"N": {
"to": "dunkler_gang",
"requiredItem": "Fackel",
"deniedMessage": "Es ist zu dunkel ohne Licht."
}
💡 requiredItem enthält den Anzeigenamen, nicht die interne ID.