# 🧰 Features

<span>Hier findest du </span>**alle Bausteine des Storyboards**<span> – von Orten &amp; Triggern (Wegpunkte, QR/NFC) über Interaktionen und Medien (Dialog, Eingabe, Foto, Audio/Video) bis zu Layout &amp; Logik (Hintergründe, Hotspots, Inventar, Variablen, Hinweise, Countdown, Team-Sync). Zu jedem Feature: Felder, App-Verhalten und Praxis-Tipps.</span>

# Wegpunkt (Map Waypoint)

<span style="white-space: pre-wrap;">Mit dem </span>**Wegpunkt**-Feature platzierst du einen Punkt auf der Karte, der – je nach Einstellung – eine Szene öffnet oder leise im Hintergrund als „Proximity-Trigger“ arbeitet.

---

### ![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/ya8grafik.png)Felder &amp; Optionen

**Karte &amp; Marker**

- **Marker ziehen/klicken**: Setze die Position direkt in der Karte.
- **Aktuelle Position verwenden**: Übernimmt deine Gerätestandort-Koordinaten.

**Breitengrad / Längengrad**

- Exakte GPS-Koordinaten des Wegpunkts. Du kannst sie manuell eintragen oder aus der Karte übernehmen.

**Zielszene**

- Szene, die beim Auslösen geöffnet wird.

**Popup-Text**

- Kurzer Text, der im Spiel im Karten-Popup erscheint (z. B. „Gehe hierhin und tippe!“ oder Zusatzinfos).

**Radius (Meter)**

- Entfernung, in der der Wegpunkt „erreicht“ gilt.
- <span style="white-space: pre-wrap;">Typische Werte: </span>**7-15 m**<span style="white-space: pre-wrap;"> in Städten, </span>**20–30 m**<span style="white-space: pre-wrap;"> in freiem Gelände.</span>

**Unsichtbar?**

- <span style="white-space: pre-wrap;">Ist aktiv, </span>**wird der Marker nicht auf der Karte angezeigt**.
- Der Wegpunkt wird bei erreichen automatisch ausgelöst. Autoselect nicht erforderlich.

**Automatisch ausgewählt?**

- **An**<span style="white-space: pre-wrap;">: Die Zielszene wird </span>**automatisch**<span style="white-space: pre-wrap;"> geöffnet, sobald die Spielenden </span>**in den Radius**<span style="white-space: pre-wrap;"> kommen (kein Tippen nötig).</span>
- **Aus**<span style="white-space: pre-wrap;">: Die Spielenden müssen den </span>**Marker manuell auf der Karte auswählen**.> <span style="white-space: pre-wrap;">Hinweis: Bei </span>**unsichtbaren**<span style="white-space: pre-wrap;"> Wegpunkten ist dieser Punkt nicht notwendig. </span>

---

### ![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/pcjgrafik.png)Verhalten in der App

1. **Sichtbarer Marker, Auto-Select AN**
    - <span style="white-space: pre-wrap;">Betritt das Team den Radius, </span>**öffnet**<span style="white-space: pre-wrap;"> sich die </span>**Zielszene sofort**.
    - Das Popup ist optional – oft wird gar nicht mehr getippt.
2. **Sichtbarer Marker, Auto-Select AUS**
    - Der Marker ist auf der Karte sichtbar.
3. **Unsichtbarer Marker, Auto-Select AN**
    - Kein Marker auf der Karte.
    - **Silent Trigger**: Beim Betreten des Radius öffnet sich die Zielszene automatisch. Ideal für Überraschungen oder „geheime“ Punkte.

---

## Erstellen aus der Toolbox (scenario.app)

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/2iAgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/2iAgrafik.png)<span style="white-space: pre-wrap;">Wegpunkte lassen sich </span>**direkt aus den Aufzeichnungen**<span style="white-space: pre-wrap;"> der </span>**Toolbox**<span style="white-space: pre-wrap;"> in </span>**scenario.app**<span style="white-space: pre-wrap;"> erzeugen:</span>

- Szenenkachel -&gt; Funktion hinzufügen -&gt; Spot aus Toolbox
- <span style="white-space: pre-wrap;">Wähle einen Punkt aus und </span>**„Als Wegpunkt übernehmen“**.  
    <span style="white-space: pre-wrap;">Die </span>**Koordinaten**<span style="white-space: pre-wrap;"> werden automatisch </span>**vorbefüllt**<span style="white-space: pre-wrap;"> – du ergänzt nur noch Radius, Zielszene, Sichtbarkeit etc.</span>

---

## Praxis-Tipps

- **Radius passend wählen**:
    - Innenstadt: 7–15 m, damit es nicht zufällig auslöst.
    - Park/Wald: 20–30 m, um GPS-Schwankungen abzufangen.
- **Unsichtbar + Auto-Select**<span style="white-space: pre-wrap;"> für unerwartete Ereignisse („Story-Beat“).</span>
- **Sichtbar + Auto-Select AUS**<span style="white-space: pre-wrap;"> für klare Navigation: Spielende sehen das Ziel und müssen es bewusst antippen.</span>
- **Popup-Text**<span style="white-space: pre-wrap;"> kurz und call-to-action-artig halten („Tippe hier, um die Aufgabe zu starten“).</span>
- **Kein GPS?**<span style="white-space: pre-wrap;"> Plane Alternativen (QR/NFC) oder großzügigere Radien bei schwieriger Empfangslage.</span>

---

## Häufige Fragen

**Was passiert, wenn ich Auto-Select aktiviere und die Zielszene fehlt?**  
<span style="white-space: pre-wrap;">Es wird keine Szene geöffnet. Nutze in diesem Fall besser Auto-Select </span>**aus**<span style="white-space: pre-wrap;"> (Info-Marker) oder füge eine Zielszene hinzu.</span>

**Kann ich Wegpunkte nur mit der Karte setzen?**  
<span style="white-space: pre-wrap;">Nein. Du kannst Koordinaten </span>**manuell**<span style="white-space: pre-wrap;"> eintragen oder </span>**aus Toolbox-Aufzeichnungen**<span style="white-space: pre-wrap;"> übernehmen.</span>

**Löst ein Wegpunkt auch aus, wenn er unsichtbar ist?**  
<span style="white-space: pre-wrap;">Ja – immer. Egal ob </span>**Auto-Select**<span style="white-space: pre-wrap;"> aktiv ist oder nicht </span>**und**<span style="white-space: pre-wrap;"> das Team im </span>**Radius**<span style="white-space: pre-wrap;"> steht.</span>

---

## Kurz-Anleitung

1. **Wegpunkt hinzufügen**<span style="white-space: pre-wrap;"> → Marker auf Karte setzen oder </span>**Aktuelle Position**<span style="white-space: pre-wrap;"> nutzen.</span>
2. **Zielszene**<span style="white-space: pre-wrap;"> wählen (optional leer lassen für Info-Punkt).</span>
3. **Popup-Text**<span style="white-space: pre-wrap;"> (optional) eintragen.</span>
4. **Radius**<span style="white-space: pre-wrap;"> festlegen.</span>
5. <span style="white-space: pre-wrap;">Sichtbarkeit &amp; </span>**Auto-Select**<span style="white-space: pre-wrap;"> gemäß gewünschtem Verhalten setzen.</span>
6. Speichern – fertig.

<span style="white-space: pre-wrap;">So steuerst du präzise, </span>**wann**<span style="white-space: pre-wrap;"> und </span>**wie**<span style="white-space: pre-wrap;"> Spielende Inhalte entdecken: sichtbar &amp; interaktiv oder unsichtbar &amp; automatisch.</span>

# Wegpunkt (dynamisch)

<article class="text-token-text-primary w-full focus:outline-none scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-4" data-turn="assistant" data-turn-id="request-WEB:0fc5eac8-6adb-4c3b-a661-ad0ea6e6ec89-1" dir="auto" id="bkmrk-dynamischer-osm-wegp" tabindex="-1">### Dynamischer OSM-Wegpunkt

Der **dynamische Wegpunkt** sucht zur **Laufzeit im Spiel** nach echten Objekten in der Nähe (aus **OpenStreetMap**, kurz *OSM*). So kannst du Aufgaben wie „Finde eine **Bushaltestelle** in 400 m“ bauen – ohne die exakten Koordinaten vorher zu kennen. Falls im Suchradius **nichts gefunden** wird, greift ein **Fallback-Ziel** (projektiert aus der aktuellen Spielerposition).

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div><table border="1" style="border-collapse: collapse; width: 100%; border-width: 0px;"><colgroup><col style="width: 34.2857%;"></col><col style="width: 65.7143%;"></col></colgroup><tbody><tr><td style="border-width: 0px;">### [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/Pnqgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/Pnqgrafik.png)

  
</td><td style="border-width: 0px;">### Felder &amp; Optionen

**OSM-Kategorie / `key=value` (optional)**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Wähle eine Preset-Kategorie (z. B. **Bushaltestelle**, **Bäckerei**, **Trinkwasser**, **Bankautomat** …).
- Alternativ kannst du rechts ein eigenes **OSM-Tag** eintragen, z. B. `amenity=drinking_water` oder `shop=bakery`.
- Es wird das **nächstgelegene** passende OSM-Objekt im Suchbereich verwendet.

</div></div></div></div></div></div>**Suchradius OSM (m)**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Umkreis, in dem gesucht wird (vom **aktuellen Spielerstandort** aus).
- Je größer, desto höher die Trefferchance – aber ggf. längerer Weg.

</div></div></div></div></div></div>**Titel (Popup)**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Text für das Karten-Popup des **gefundenen** Ziels (z. B. „Ziel in deiner Nähe“).

</div></div></div></div></div></div>**Ankunfts-Radius (m)**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Abstand, in dem das Ziel als **erreicht** gilt.

</div></div></div></div></div></div>**Typ**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **Sichtbar**: Marker ist auf der Karte sichtbar.
- **Unsichtbar**: Kein Marker – ideal für „Silent-Trigger“ in Kombination mit Autoselect.

</div></div></div></div></div></div>**Autoselect**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **Ja**: Zielszene öffnet **automatisch**, sobald Spielende im **Ankunfts-Radius** sind.
- **Nein**: Spielende müssen den Marker **manuell** antippen (nur sinnvoll bei **sichtbar**).

---

</div></div></div></div></div></div>
</td></tr></tbody></table>

### Fallback (wenn im Suchradius nichts gefunden wird)

**Distanz (m) &amp; Himmelsrichtung**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Erzeugt ein **projektiertes Ziel** in der gewählten Richtung (**N, NE, E, …**) und Entfernung.
- Bezugspunkt ist die **momentane Spielerposition** beim Erstellen des Ziels.
- Wenn verfügbar, werden projzierte Ziele immer auf Straßen oder Wege gelegt.

</div></div></div></div></div></div>**Fallback-Titel**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Popup-Text des **projektierten** Ziels (z. B. „Projiziertes Ziel“).

</div></div></div></div></div></div>**Zielszene**

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Szene, die beim Erreichen (OSM-Treffer **oder** Fallback) geöffnet wird.
- Lässt du die Zielszene leer, fungiert der Punkt nur als Info-/Navigationsziel.

---

</div></div></div></div></div></div>## Verhalten in der App

<p class="callout info">Für die Projektion von Wegpunkten aus der OSM Datenbank ist eine Internetverbindung erforderlich!</p>

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">1. **Ermitteln des Ziels**
    
    
    - Beim Betreten der Szene wird über OSM das **nächstgelegene Objekt** zur gewählten Kategorie im **Suchradius** gesucht.
    - Wird **etwas gefunden**, wird dieses Objekt als Ziel gesetzt (Marker an dessen Koordinate, Popup-Titel wie oben).
    - Wird **nichts gefunden**, erstellt das Spiel **sofort** das **Fallback-Ziel** in der gewählten Richtung und Distanz.
2. **Navigation &amp; Auslösen**
    
    
    - **Sichtbar + Autoselect = Ja**: Betritt das Team den **Ankunfts-Radius**, öffnet sich die **Zielszene automatisch**.
    - **Sichtbar + Autoselect = Nein**: Marker muss **angetippt** werden (nur innerhalb des Ankunfts-Radius „aktiv“).
    - **Unsichtbar + Autoselect = Ja**: **Silent-Trigger** ohne Markeranzeige.
    - **Unsichtbar + Autoselect = Nein**: Nicht empfohlen (kein klickbares Ziel).
3. **Bewegung &amp; Aktualisierung**
    
    
    - Das Ziel wird **beim Erzeugen** festgelegt und anschließend **beibehalten**, damit alle im Team zum **gleichen** Ziel laufen.
4. **Offline-/Datenlage**
    
    
    - Für die OSM-Suche ist **Netzverbindung** nötig. Ohne Treffer oder ohne Internet greift **sofort** der **Fallback**.

---

</div></div></div></div></div></div>## Praxis-Tipps

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **Trefferqualität**: Wähle präzise `key=value`-Tags (z. B. `amenity=drinking_water`) statt zu allgemeiner Kategorien.
- **Suchradius**: Stadt: 200–400 m, ländlich: 400–800 m.
- **Ankunfts-Radius** großzügig wählen (10–30 m Stadt, 20–50 m Gelände), um GPS-Drift abzufangen.
- **Unsichtbar + Autoselect** für Überraschungen; **sichtbar + manuell** für bewusstes Interagieren.
- **Fallback** so setzen, dass er **spielbar** bleibt (keine Privatgrundstücke, Gewässer etc.).
- **Team-Konsistenz**: Ziele werden nach der ersten Bestimmung **fixiert**, damit alle dasselbe Ziel sehen.

---

</div></div></div></div></div></div>### OSM-Kategorien für dynamische Wegpunkte

Damit der **dynamische Wegpunkt** ein passendes Ziel findet, muss eine **OSM-Kategorie** gewählt werden. Diese basiert auf den sogenannten **Tags** von [https://wiki.openstreetmap.org/wiki/Map\_features](https://wiki.openstreetmap.org/wiki/Map_features).

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div>### Häufig genutzte `key=value` Beispiele

#### Infrastruktur &amp; Transport

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- `highway=bus_stop` → Bushaltestelle
- `railway=station` → Bahnhof
- `amenity=parking` → Parkplatz
- `amenity=bicycle_parking` → Fahrradstellplatz
- `highway=crossing` → Fußgängerüberweg

</div></div></div></div></div></div>#### Versorgung &amp; Alltag

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- `amenity=drinking_water` → Trinkwasserstelle
- `amenity=toilets` → Öffentliche Toilette
- `amenity=bench` → Sitzbank
- `shop=supermarket` → Supermarkt
- `shop=bakery` → Bäckerei
- `amenity=pharmacy` → Apotheke
- `amenity=post_office` → Postamt

</div></div></div></div></div></div>#### Freizeit &amp; Kultur

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- `tourism=attraction` → Sehenswürdigkeit
- `tourism=museum` → Museum
- `leisure=playground` → Spielplatz
- `leisure=pitch` → Sportplatz
- `amenity=theatre` → Theater
- `amenity=cinema` → Kino

</div></div></div></div></div></div>#### Gastronomie

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- `amenity=restaurant` → Restaurant
- `amenity=cafe` → Café
- `amenity=bar` → Bar
- `amenity=fast_food` → Imbiss

</div></div></div></div></div></div>#### Sicherheit &amp; Gesundheit

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- `amenity=police` → Polizeistation
- `amenity=fire_station` → Feuerwehr
- `amenity=hospital` → Krankenhaus
- `amenity=clinic` → Klinik

---

</div></div></div></div></div></div>#### Vollständige Liste

Eine ausführliche Übersicht aller OSM-Tags findest du hier:   
[https://wiki.openstreetmap.org/wiki/Map\_features](https://wiki.openstreetmap.org/wiki/Map_features "OSM Map Wiki") <a class="decorated-link cursor-pointer" data-end="1787" data-start="1712" rel="noopener" target="_new"><span aria-hidden="true" class="ms-0.5 inline-block align-middle leading-none"><svg class="block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]" data-rtl-flip="" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M14.3349 13.3301V6.60645L5.47065 15.4707C5.21095 15.7304 4.78895 15.7304 4.52925 15.4707C4.26955 15.211 4.26955 14.789 4.52925 14.5293L13.3935 5.66504H6.66011C6.29284 5.66504 5.99507 5.36727 5.99507 5C5.99507 4.63273 6.29284 4.33496 6.66011 4.33496H14.9999L15.1337 4.34863C15.4369 4.41057 15.665 4.67857 15.665 5V13.3301C15.6649 13.6973 15.3672 13.9951 14.9999 13.9951C14.6327 13.9951 14.335 13.6973 14.3349 13.3301Z"></path></svg></span></a>

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div>### Tipp

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Du kannst **einfach eine Preset-Kategorie wählen** (z. B. Bushaltestelle).
- Oder du trägst direkt ein **Tag im Format `key=value`** ein (z. B. `amenity=drinking_water`).
- Je präziser der Wert, desto **genauer die Treffer** im Spiel.

  
</div></div></div></div></div></div><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div>## Kurz-Anleitung

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="21f8d0c3-1642-4268-8644-a74cf26bde9a" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">1. **Dynamischen Wegpunkt** hinzufügen.
2. **OSM-Kategorie** wählen oder **`key=value`** eintragen.
3. **Suchradius** und **Ankunfts-Radius** festlegen.
4. **Typ** (sichtbar/unsichtbar) und **Autoselect** setzen.
5. **Fallback** definieren (Distanz, Richtung, Titel).
6. **Zielszene** auswählen.
7. **Speichern** – fertig.

</div></div></div></div></div></div>So entstehen ortsabhängige Aufgaben, die sich **an echte Umgebung** anpassen – inklusive robuster **Fallback-Navigation**, falls vor Ort kein passendes OSM-Objekt existiert.

</article>

# 360° / Foto Hotspot-Editor

<span style="white-space: pre-wrap;">Mit dem </span>**Hotspot-Editor**<span style="white-space: pre-wrap;"> platzierst du klickbare Punkte direkt in einem </span>**360°-Panorama**<span style="white-space: pre-wrap;"> oder </span>**normalen Foto**. Hotspots können Szenen öffnen, Infos zeigen oder eigenes JS ausführen.

---

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/JLcgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/JLcgrafik.png)

## Bild &amp; View

- **Bild-URL / Bild wählen**  
    Wähle ein 360°-Bild (equirectangular) oder ein normales Foto. Upload über die Medienauswahl ist möglich.
- **HFOV**  
    <span style="white-space: pre-wrap;">„Horizontal Field of View“ – Zoomstufe der Startansicht (z. B. </span>**100**).
- **Kompass (Ja/Nein)**  
    Blendet einen Kompass/Heading-Indikator ein.

**Tipp:**<span style="white-space: pre-wrap;"> Das Kreuz </span>**„Hier Hotspot erstellen“**<span style="white-space: pre-wrap;"> setzt einen neuen Hotspot an der angeklickten Stelle.</span>

---

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/XtXgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/XtXgrafik.png)

## Hotspot bearbeiten

**Label**  
Beschriftung (z. B. „Weiter“, „Info“).

**Typ**

- **Button**<span style="white-space: pre-wrap;"> – Rechteckiger Button mit Text.</span>
- (Weitere Typen – z. B. Icon/Point – falls in deinem Projekt aktiv – verhalten sich entsprechend.)

**CSS-Klasse**  
<span style="white-space: pre-wrap;">Optionale Klasse zur Feinstilierung (z. B. </span>`<span class="editor-theme-code">hs-primary</span>`, eigenes Theme).

**Yaw / Pitch**  
Exakte Ausrichtung des Hotspots (horizontale/vertikale Winkel). Diese Werte werden beim Platzieren automatisch gesetzt und können feinjustiert werden.

**Zielszene (optional)**  
<span style="white-space: pre-wrap;">Szene, die beim Klick geöffnet wird. Leer lassen = </span>**keine Navigation**<span style="white-space: pre-wrap;"> (nur Popup/JS).</span>

**Farben &amp; Stil**

- **Text/Icon-Farbe**
- **Hintergrund**<span style="white-space: pre-wrap;"> (z. B. </span>`<span class="editor-theme-code">rgba(0,0,0,.5)</span>`<span style="white-space: pre-wrap;"> für halbtransparent)</span>
- **Border-Farbe**
- **Schriftgröße**<span style="white-space: pre-wrap;">, </span>**Radius**<span style="white-space: pre-wrap;">, </span>**Padding**

**Popup verwenden**  
<span style="white-space: pre-wrap;">Zeigt beim Klick ein kleines Popup (Titel/Label). In der Vorschau mit </span>**Shift-Klick**<span style="white-space: pre-wrap;"> testen.</span>

**onClick JS (optional)**  
Eigener JavaScript-Code, der beim Klick ausgeführt wird  
<span style="white-space: pre-wrap;">(z. B. </span>`<span class="editor-theme-code">console.log('clicked')</span>`, Tracking, komplexe Logik).

> <span style="white-space: pre-wrap;">Für Standard-Navigation </span>**nicht nötig**<span style="white-space: pre-wrap;"> – dafür reicht die Zielszene.</span>

**Editor-Shortcuts**

- **Alt-Klick**: onClick-JS sofort testen (im Editor).
- **Shift-Klick**: Popup-Vorschau öffnen.

---

## Verhalten in der App

- <span style="white-space: pre-wrap;">Hotspots liegen </span>**über**<span style="white-space: pre-wrap;"> dem 360°/Foto und folgen der Perspektive.</span>
- Klick/Tap auf den Hotspot:
    1. <span style="white-space: pre-wrap;">führt </span>**onClick JS**<span style="white-space: pre-wrap;"> aus (falls vorhanden),</span>
    2. <span style="white-space: pre-wrap;">öffnet optional das </span>**Popup**,
    3. <span style="white-space: pre-wrap;">navigiert – wenn gesetzt – in die </span>**Zielszene**.
- Kompass und Start-HFOV werden aus den Einstellungen übernommen.

---

## Praxis-Tipps

- **Assets**<span style="white-space: pre-wrap;">: 360° equirectangular </span>**2:1**<span style="white-space: pre-wrap;"> (z. B. 4096×2048). Normale Fotos gern 1920 px Breite+.</span>
- **Lesbarkeit**: Halbtransparente Hintergründe (`<span class="editor-theme-code">rgba</span>`) und ausreichender Kontrast.
- **Fokus**: Wichtige Hotspots nicht zu nah am Zenith/Nadir (starke Verzerrung).
- **Mobile UX**: Wenige, klare Hotspots; Abstand zwischen Hotspots für Touch-Ziele.
- **Navigation**<span style="white-space: pre-wrap;">: Für „Weiter“-Ketten reicht </span>**Zielszene**<span style="white-space: pre-wrap;"> – JS nur bei Sonderfällen.</span>
- **Testing**: HFOV &amp; Startblick einmal am Gerät prüfen; ggf. Yaw/Pitch leicht nachstellen.

---

## Kurz-Workflow

1. **Bild wählen**<span style="white-space: pre-wrap;"> → </span>**HFOV/Kompass**<span style="white-space: pre-wrap;"> setzen.</span>
2. <span style="white-space: pre-wrap;">Im Viewer </span>**„Hier Hotspot erstellen“**<span style="white-space: pre-wrap;"> klicken.</span>
3. **Label**<span style="white-space: pre-wrap;">, </span>**Typ**<span style="white-space: pre-wrap;">, </span>**Zielszene**<span style="white-space: pre-wrap;"> (optional) und </span>**Stil**<span style="white-space: pre-wrap;"> einstellen.</span>
4. <span style="white-space: pre-wrap;">(Optional) </span>**Popup**<span style="white-space: pre-wrap;"> aktivieren oder </span>**onClick JS**<span style="white-space: pre-wrap;"> hinterlegen.</span>
5. **Übernehmen**<span style="white-space: pre-wrap;"> → weitere Hotspots hinzufügen → </span>**Speichern**.

# Dialog V2 – Chat

**Dialog V2**<span style="white-space: pre-wrap;"> simuliert einen echten Chat-Verlauf zwischen frei definierbaren </span>**Charakteren**<span style="white-space: pre-wrap;"> – mit Tipp-Indikator, Pausen, Bildern und Audio. Ideal für Story-Beats, Hinweise „aus dem Off“ oder kurze Gespräche, die sich natürlich anfühlen.</span>

---

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/UR4grafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/UR4grafik.png)

## Editor-Aufbau

**Linke Spalte – Charaktere**

- **Neu**: Charakter anlegen.
- Pro Charakter:
    - **Name**
    - **Avatar**<span style="white-space: pre-wrap;"> (Medienbibliothek/Upload)</span>
    - **Sprechblasen-Farbe**<span style="white-space: pre-wrap;"> (Bubble)</span>
    - **Textfarbe**
    - **Seite**<span style="white-space: pre-wrap;">: </span>**links**<span style="white-space: pre-wrap;"> / </span>**rechts**

> Charaktere kannst du mehrmals in der Sequenz verwenden; Stil &amp; Seite kommen automatisch mit.

**Rechte Spalte – Nachrichten-Sequenz**

- Zeitliche Abfolge des Chats.
- <span style="white-space: pre-wrap;">Über </span>**„Neue Nachricht“**<span style="white-space: pre-wrap;"> fügst du Bausteine hinzu:</span>
    1. **text**<span style="white-space: pre-wrap;"> – Chatnachricht (Emoji &amp; einfache Formatierung erlaubt)</span>
    2. **image**<span style="white-space: pre-wrap;"> – Bild (öffnet sich antippbar in groß)</span>
    3. **audio**<span style="white-space: pre-wrap;"> – MP3 mit kleinem Player</span>
    4. **typing** ***Xms***<span style="white-space: pre-wrap;"> – Tipp-Indikator des gewählten Charakters für </span>**X**<span style="white-space: pre-wrap;"> Millisekunden</span>
    5. **pause** ***Xms***<span style="white-space: pre-wrap;"> – Leerlauf/Verzögerung ohne Tipp-Blase</span>
- Reihenfolge per Drag &amp; Drop ändern.
- <span style="white-space: pre-wrap;">Jede Zeile zeigt: </span>**Charakter**<span style="white-space: pre-wrap;"> + </span>**Aktion**<span style="white-space: pre-wrap;"> (z. B. </span>`<span class="editor-theme-code">Byte · typing 2000ms</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Byte · text: Hallo!</span>`).

**Speichern**<span style="white-space: pre-wrap;"> übernimmt die komplette Chatdefinition in die Szene.</span>

---

## Felder je Nachricht

- **Charakter**: Wer „spricht“ / tippt.
- **Typ**<span style="white-space: pre-wrap;">: </span>`<span class="editor-theme-code">text</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">image</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">audio</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">typing</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">pause</span>`.
- **Inhalt**:
    - `<span class="editor-theme-code">text</span>`: Nachrichtentext
    - `<span class="editor-theme-code">image</span>`: Medienauswahl (ein Bild)
    - `<span class="editor-theme-code">audio</span>`: MP3 aus Medienbibliothek
    - `<span class="editor-theme-code">typing</span>`: Dauer in Millisekunden
    - `<span class="editor-theme-code">pause</span>`: Dauer in Millisekunden

---

<video autoplay="" class="align-left" controls="" height="600" id="bkmrk--4" src="https://docs.scenario.app/attachments/47?open=true" width="300"></video>Verhalten in der App

1. <span style="white-space: pre-wrap;">Läuft </span>**Schritt für Schritt**<span style="white-space: pre-wrap;"> von oben nach unten.</span>
2. `<span class="editor-theme-code">typing</span>`<span style="white-space: pre-wrap;"> zeigt die bekannte </span>**…-Blase**<span style="white-space: pre-wrap;"> des Charakters für die angegebene Dauer.</span>
3. `<span class="editor-theme-code">pause</span>`<span style="white-space: pre-wrap;"> wartet stumm (kein Tipp-Indikator).</span>
4. `<span class="editor-theme-code">text</span>`<span style="white-space: pre-wrap;"> erscheint in der </span>**Bubble**<span style="white-space: pre-wrap;"> des Charakters (links/rechts gemäß Einstellung).</span>
5. `<span class="editor-theme-code">image</span>`<span style="white-space: pre-wrap;"> ist antippbar (Zoom/Lightbox).</span>
6. `<span class="editor-theme-code">audio</span>`<span style="white-space: pre-wrap;"> rendert einen kleinen </span>**Player**<span style="white-space: pre-wrap;"> (Play/Pause).</span>
7. <span style="white-space: pre-wrap;">Der Chat </span>**scrollt automatisch**<span style="white-space: pre-wrap;"> nach unten.</span>

> <span style="white-space: pre-wrap;">Ende der Sequenz = Chat ist abgeschlossen. Für die Navigation hängst du </span>**normale Buttons**<span style="white-space: pre-wrap;"> (oder andere Features) unter den Chat in derselben Szene an – z. B. „Weiter“ oder zwei Entscheidungs-Buttons.</span>

---

## Charakter-Stile

Jeder Charakter bringt sein eigenes „Theme“ mit:

- **Bubble-Farbe**<span style="white-space: pre-wrap;"> (Hintergrund)</span>
- **Textfarbe**<span style="white-space: pre-wrap;"> (Kontrast beachten!)</span>
- **Seite**<span style="white-space: pre-wrap;"> (links/rechts) – schafft visuelle Trennung</span>
- **Avatar**<span style="white-space: pre-wrap;"> (rundet die Chat-Anmutung ab)</span>

Dadurch wirkt der Dialog wie ein echter Messenger-Chat.

---

## Gute Praxis &amp; Tipps

- **Natürlichkeit**<span style="white-space: pre-wrap;">: Kurze </span>`<span class="editor-theme-code">typing</span>`-Phasen (800–2500 ms) vor wichtigen Nachrichten steigern Glaubwürdigkeit.
- **Tempo**<span style="white-space: pre-wrap;">: Nutze </span>`<span class="editor-theme-code">pause</span>`<span style="white-space: pre-wrap;"> zwischendurch als </span>**Atempausen**<span style="white-space: pre-wrap;"> oder Dramaturgie-Beat.</span>
- **Kontrast**: Achte auf gute Lesbarkeit von Text/Bubble (hell/dunkel).
- **Medien sparsam**: Einzelne Bilder/Snippets wirken stärker als ein „Flood“.
- **Audio-Hinweis**: Im Text ankündigen („Hör dir das an: 🎧“), damit Spielende wissen, dass ein Player folgt.
- **Entscheidungen**<span style="white-space: pre-wrap;">: Direkt nach dem Chat </span>**Buttons**<span style="white-space: pre-wrap;"> hinzufügen (z. B. „Zur Karte“, „Hinweis ansehen“, „Mission starten“).</span>
- **Team-Konsistenz**<span style="white-space: pre-wrap;">: Die Sequenz ist deterministisch – alle sehen </span>**denselben Ablauf**.

---

## Kurz-Workflow

1. **Charakter(e)**<span style="white-space: pre-wrap;"> anlegen (Name, Avatar, Farben, Seite).</span>
2. <span style="white-space: pre-wrap;">In der </span>**Nachrichten-Sequenz**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">typing</span>`/`<span class="editor-theme-code">pause</span>`<span style="white-space: pre-wrap;"> und </span>`<span class="editor-theme-code">text</span>`/`<span class="editor-theme-code">image</span>`/`<span class="editor-theme-code">audio</span>`<span style="white-space: pre-wrap;"> in gewünschter Reihenfolge anlegen.</span>
3. **Speichern**.
4. <span style="white-space: pre-wrap;">Unter dem Chat bei Bedarf </span>**Buttons**<span style="white-space: pre-wrap;"> (separates Feature) hinzufügen, um zur nächsten Szene zu führen.</span>

Fertig – Dialog V2 liefert dir glaubwürdige, fein getimte Chats, die sich perfekt in deine Story einfügen.

# Video einbetten (Embedded Video)

<span style="white-space: pre-wrap;">Spiele ein </span>**MP4-Video**<span style="white-space: pre-wrap;"> direkt in der Szene ab – mit Posterbild, optionalem Vollbild, Seek-Sperre und </span>**Aktionen nach Videoende**<span style="white-space: pre-wrap;"> (Text + Buttons).</span>

---

## ![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/q70grafik.png)Felder

**MP4-URL**  
Direkter Link zur MP4-Datei (H.264/AVC + AAC empfohlen).

**Poster-URL**<span style="white-space: pre-wrap;"> </span>**(optional)**  
Bild, das vor dem Start angezeigt wird (Vorschaubild/Thumbnail).

**Rahmenfarbe / Hintergrundfarbe / Textfarbe**  
Stil des Players (Rahmen), der Fläche um den Player und von Player-Textelementen/Hinweisen.

**Vollbild erlauben**  
Schaltet den Vollbild-Button ein/aus.

**Springen im Video erlauben**

- **An**: Nutzer dürfen scrubben/kapitelweise springen.
- **Aus**: Seek gesperrt → lineares Ansehen (z. B. für Pflicht-Clips/Story).

**Fallback bei Fehler – Zielszene**  
<span style="white-space: pre-wrap;">Wenn das Video </span>**nicht geladen**<span style="white-space: pre-wrap;"> oder </span>**abgespielt**<span style="white-space: pre-wrap;"> werden kann (Offline, Codec, URL), wird diese Szene geöffnet (z. B. „Alternative Aufgabe“).</span>

---

## Aktionen nach Videoende

**Text über Buttons**<span style="white-space: pre-wrap;"> </span>**(optional)**  
Kurzer Hinweis über den End-Buttons (z. B. „Wie möchtest du weiter machen?“).

**+ Button hinzufügen**  
<span style="white-space: pre-wrap;">Beliebig viele End-Buttons mit </span>**Beschriftung**<span style="white-space: pre-wrap;"> und </span>**Zielszene**.

- <span style="white-space: pre-wrap;">Der </span>**„Wiederholen“**-Button ist (falls eingeblendet) der Standard-Rücksprung und startet das Video erneut.
- <span style="white-space: pre-wrap;">Die Buttons erscheinen </span>**erst, wenn das Video wirklich zu Ende ist**<span style="white-space: pre-wrap;"> (kein Timer-Trick).</span>

---

<video class="align-left" controls="" height="600" id="bkmrk--3" src="https://docs.scenario.app/attachments/49?open=true" width="300"></video>## Verhalten in der App

1. <span style="white-space: pre-wrap;">Posterbild wird angezeigt, bis der/die Spieler:in </span>**Play**<span style="white-space: pre-wrap;"> drückt.</span>
2. <span style="white-space: pre-wrap;">Abhängig von der Seek-Einstellung kann man </span>**spulen**<span style="white-space: pre-wrap;"> oder sieht das Video </span>**linear**.
3. **Am Ende**<span style="white-space: pre-wrap;"> blendet die App – falls konfiguriert – </span>**Text + End-Buttons**<span style="white-space: pre-wrap;"> ein.</span>
4. <span style="white-space: pre-wrap;">Tritt ein </span>**Fehler**<span style="white-space: pre-wrap;"> auf, wird die </span>**Fallback-Zielszene**<span style="white-space: pre-wrap;"> geöffnet.</span>

---

## Best Practices

- **Encoding:**<span style="white-space: pre-wrap;"> MP4 (H.264, AAC), </span>**720p**/1080p; Bitrate moderat (2–6 Mbit/s).
- **Größe/Ladezeit:**<span style="white-space: pre-wrap;"> Möglichst &lt; 50 MB; bei Mobilfunk eher 5–20 MB anstreben.</span>
- **Poster:**<span style="white-space: pre-wrap;"> Ruhiges, klares Motiv; Seitenverhältnis = Video.</span>
- **Barrierefreiheit:**<span style="white-space: pre-wrap;"> Untertitel separat anbieten (z. B. als „Untertitel anzeigen“-Button).</span>
- **Didaktik:**<span style="white-space: pre-wrap;"> „Springen erlauben“ AUS für Pflicht-Briefings; EIN für freie Tutorials.</span>
- **Fallback testen:**<span style="white-space: pre-wrap;"> Einmal Flugmodus aktivieren → prüfen, ob deine Fallback-Szene logisch weiterführt.</span>

---

## Kurz-Workflow

1. <span style="white-space: pre-wrap;">MP4 &amp; Poster hochladen → </span>**URLs eintragen**.
2. <span style="white-space: pre-wrap;">Player-Farben wählen, </span>**Vollbild/Seek**<span style="white-space: pre-wrap;"> konfigurieren.</span>
3. **Fallback-Zielszene**<span style="white-space: pre-wrap;"> setzen.</span>
4. **Aktionen nach Videoende**: Info-Text + Buttons (z. B. „Zur Aufgabe“, „Wiederholen“).
5. Speichern, auf Gerät testen.

# AudioPlayer mp3 (embedded Audio)

<span style="white-space: pre-wrap;">Mit </span>**Audio einbetten**<span style="white-space: pre-wrap;"> spielst du eine </span>**MP3**<span style="white-space: pre-wrap;"> direkt in der Szene ab – optional mit </span>**Posterbild**<span style="white-space: pre-wrap;">, verschiedenen </span>**Player-Styles**<span style="white-space: pre-wrap;">, </span>**Fallback-Szene**<span style="white-space: pre-wrap;"> und </span>**Buttons nach Ende**<span style="white-space: pre-wrap;">. Außerdem kannst du </span>**Untertitel/Transkripte**<span style="white-space: pre-wrap;"> pro Zeitbereich hinterlegen.</span>

---

## ![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/IYAgrafik.png)Felder

**MP3-URL**  
Direkter Link zur MP3. (Empf.: 128–192 kbps, stereo, &lt; 10–20 MB)

**MP3-Datei auswählen oder hochladen**  
Öffnet die Medienauswahl mit Upload.

**Poster-URL**<span style="white-space: pre-wrap;"> </span>**(optional)**  
Bild, das über/bei dem Player gezeigt wird (z. B. Cover, Sprecher:in).

**Posterbild auswählen oder hochladen**  
Medienauswahl für das Poster.

**Player-Style**

- **Standard (mit Poster)**<span style="white-space: pre-wrap;"> – Player unter einem Posterbild.</span>
- **Embedded**<span style="white-space: pre-wrap;"> – flacher Player ohne großes Poster (kompakt).</span>
- **Round**<span style="white-space: pre-wrap;"> </span>**(falls verfügbar)**<span style="white-space: pre-wrap;"> – runder Play-Button mit Mini-Waveform.</span>

**Fallback-Szene**  
<span style="white-space: pre-wrap;">Wird geöffnet, wenn die Audiodatei </span>**nicht geladen**<span style="white-space: pre-wrap;"> oder </span>**abgespielt**<span style="white-space: pre-wrap;"> werden kann (offline/URL/Codec).</span>

**Untertitel**<span style="white-space: pre-wrap;"> → </span>**Untertitel bearbeiten**  
Öffnet den Untertitel-Editor (siehe unten).

**Text über Buttons**<span style="white-space: pre-wrap;"> </span>**(optional)**  
<span style="white-space: pre-wrap;">Kurzer Hinweis, der </span>**nach dem Abspielen**<span style="white-space: pre-wrap;"> über den End-Buttons erscheint (z. B. „Wie möchtest du weiter machen?“).</span>

**Textfarbe**  
<span style="white-space: pre-wrap;">Farbe des obigen Hinweistexts (Hex, z. B. </span>`<span class="editor-theme-code">#FFF</span>`).

**+ Button hinzufügen**  
<span style="white-space: pre-wrap;">Fügt </span>**End-Buttons**<span style="white-space: pre-wrap;"> mit </span>**Beschriftung**<span style="white-space: pre-wrap;"> und </span>**Zielszene**<span style="white-space: pre-wrap;"> hinzu.</span>

> <span style="white-space: pre-wrap;">Die Buttons erscheinen </span>**erst, wenn das Audio wirklich zu Ende ist**<span style="white-space: pre-wrap;"> – nicht per Timer.</span>

---

## Untertitel-Editor

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/5wIgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/5wIgrafik.png)

- <span style="white-space: pre-wrap;">Oben siehst du eine </span>**Waveform**.
- **Bereich markieren**<span style="white-space: pre-wrap;"> → unten Text eintippen → Eintrag wird erzeugt.</span>
- <span style="white-space: pre-wrap;">Jeder Eintrag zeigt </span>**Start–Ende**<span style="white-space: pre-wrap;"> und </span>**Text**; mit ► spielst du den Ausschnitt ab.
- **Untertitel importieren (VTT)**<span style="white-space: pre-wrap;">: Lade eine </span>**WEBVTT**-Datei, die automatisch in Zeitbereiche + Texte übernommen wird.
- **Fertig – Untertitel speichern**: übernimmt alle Einträge in die Szene.

> Untertitel werden synchron zum Audio angezeigt (barrierearm, auch für laute Umgebungen).

---

<video class="align-left" controls="" height="600" id="bkmrk--4" src="https://docs.scenario.app/attachments/50?open=true" width="300"></video>## Verhalten in der App

1. Poster (falls gesetzt) + Player werden angezeigt.
2. <span style="white-space: pre-wrap;">Play startet die Wiedergabe; je nach Style wird eine </span>**Waveform**<span style="white-space: pre-wrap;"> mit Laufzeitregler gezeigt.</span>
3. **Untertitel**<span style="white-space: pre-wrap;"> laufen synchron mit.</span>
4. <span style="white-space: pre-wrap;">Nach </span>**Audioende**<span style="white-space: pre-wrap;"> blendet die App – falls konfiguriert – </span>**Hinweistext + End-Buttons**<span style="white-space: pre-wrap;"> ein.</span>
5. <span style="white-space: pre-wrap;">Bei Lade-/Abspielfehler öffnet die </span>**Fallback-Szene**.

---

## Best Practices

- **Audioqualität**: 44.1 kHz, 128–192 kbps MP3 reicht mobil völlig.
- **Trimmen**: Stille am Anfang/Ende entfernen → schnelleres Empfinden.
- **Lautheit**: Auf ~–16 LUFS normalisieren, Clipping vermeiden.
- **Poster**: Ruhiges, kontrastreiches Motiv; wirkt professioneller.
- **Untertitel**: Kurze, sinnvolle Segmente (2–6 s), Satzumbrüche vermeiden.
- **Didaktik**: Buttons „Wiederholen“, „Weiter zur Aufgabe“, „Zur Karte“ anbieten.

---

## Kurz-Workflow

1. **MP3**<span style="white-space: pre-wrap;"> und optional </span>**Poster**<span style="white-space: pre-wrap;"> wählen/hochladen.</span>
2. **Player-Style**<span style="white-space: pre-wrap;"> setzen, </span>**Fallback-Szene**<span style="white-space: pre-wrap;"> wählen.</span>
3. **Untertitel bearbeiten**<span style="white-space: pre-wrap;"> (oder </span>**VTT importieren**).
4. **Text über Buttons**<span style="white-space: pre-wrap;"> + </span>**End-Buttons**<span style="white-space: pre-wrap;"> definieren.</span>
5. **Speichern**<span style="white-space: pre-wrap;"> und auf dem Gerät testen.</span>

# QR-Codes

<span style="white-space: pre-wrap;">Mit der </span>**QR-Code**<span style="white-space: pre-wrap;">-Funktion verknüpfst du einen Code mit einer Szene oder nutzt ihn als universellen Einstieg ins Spiel. Codes können direkt im Editor erzeugt </span>**oder aus der Toolbox-Aufzeichnung übernommen**<span style="white-space: pre-wrap;"> werden (praktisch, wenn du QR-Spots vor Ort bereits gescannt/geloggt hast).</span>

### ![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/HxDgrafik.png)Felder &amp; Regeln

**Wert**

- <span style="white-space: pre-wrap;">Muss </span>**alphanumerisch**<span style="white-space: pre-wrap;"> sein (A–Z, a–z, 0–9).</span>
- **Keine**<span style="white-space: pre-wrap;"> Leer-, Sonder- oder Umlautzeichen.</span>
- <span style="white-space: pre-wrap;">Frei wählbar </span>**oder**<span style="white-space: pre-wrap;"> über </span>**„Zufall“**<span style="white-space: pre-wrap;"> automatisch generierbar (empfohlen).</span>
    - <span style="white-space: pre-wrap;">Tipp: Verwende 10–16 Zeichen, z. B. </span>`<span class="editor-theme-code">SCN_RIcey42kYX</span>`.

**Zielszene**

- <span style="white-space: pre-wrap;">Szene, die nach dem Scan </span>**geöffnet**<span style="white-space: pre-wrap;"> wird.</span>

---

## Verhalten in der App

**Im Spiel scannen**

- QR wird über den In-Game-Scanner gelesen.
- <span style="white-space: pre-wrap;">Bei gültigem Wert öffnet sich </span>**direkt die Zielszene**.

**Über die „QR-Code suchen“-Funktion**

- <span style="white-space: pre-wrap;">Codes können </span>**außerhalb**<span style="white-space: pre-wrap;"> eines laufenden Spiels gescannt werden.</span>
- <span style="white-space: pre-wrap;">Die App zeigt dann die </span>**Spielbeschreibung**<span style="white-space: pre-wrap;"> des Spiels an, in dem dieser Code verwendet wird</span>  
    **(Ausnahme:* **private** *oder* **unveröffentlichte** *Spiele werden nicht angezeigt).**

---

## Aus der Toolbox übernehmen

- <span style="white-space: pre-wrap;">In der </span>**Toolbox**<span style="white-space: pre-wrap;"> gescannte Codes (Aufzeichnungen/Spots) kannst du im Storyboard </span>**1-Klick**<span style="white-space: pre-wrap;"> übernehmen.</span>
- <span style="white-space: pre-wrap;">Der </span>**Wert**<span style="white-space: pre-wrap;"> wird vorgefüllt; du ergänzt nur noch die </span>**Zielszene**.

---

## Druck &amp; Platzierung – Praxis-Tipps

**Empfohlene mobile QR-Drucker (unterwegs, Akku, App-Druck):**

- folgt...

**Material &amp; Tarnung**

- **Laminierte Zettel**<span style="white-space: pre-wrap;"> (Loch + Kabelbinder) – wetterfest, schnell austauschbar.</span>
- **Magnet-Etiketten**<span style="white-space: pre-wrap;"> – für Metallflächen (Geländer, Container).</span>
- **Vinyl-Aufkleber**<span style="white-space: pre-wrap;"> (matt) – hohe Kontraste, kein Glanz.</span>
- **Acryl-Plättchen**<span style="white-space: pre-wrap;"> mit Aufkleber hinten (von vorne „glasig“).</span>
- **Epoxy-Domes**<span style="white-space: pre-wrap;"> – schlagfest, leicht erhaben.</span>
- **Holz/Metall graviert**<span style="white-space: pre-wrap;"> + kleiner </span>**aufgeklebter**<span style="white-space: pre-wrap;"> QR (Gravur allein ist oft zu kontrastarm).</span>
- **QR-Mini-Sticker**<span style="white-space: pre-wrap;"> im Prop verstecken: unter Deckel, hinter Schieber, unter UV-Klappe etc.</span>
- **NFC+QR Kombi-Tag**<span style="white-space: pre-wrap;"> – als plan B bei schlechtem Licht/Geräte-Kameras.</span>
- **Hinweise/Redundanz**: Dupliziere kritische Codes (A/B-Ort) und nummeriere sie intern.

**Druck-Best Practices**

- <span style="white-space: pre-wrap;">Hoher Kontrast: </span>**Schwarz auf Weiß**, matte Oberfläche.
- <span style="white-space: pre-wrap;">Mindestgröße: ab </span>**25–30 mm**<span style="white-space: pre-wrap;"> Kantenlänge (Armreichweite ~40–60 cm).</span>
- <span style="white-space: pre-wrap;">Genug </span>**Rand (Quiet Zone)**<span style="white-space: pre-wrap;"> um den Code lassen (≥ 4 Module).</span>
- <span style="white-space: pre-wrap;">Kein „künstlerisches“ Verbiegung/Logo im Code – Priorität ist </span>**Zuverlässigkeit**.
- Draußen: UV-beständige Medien, Laminat oder Schutzlack.

---

## Sicherheit &amp; Verwaltung

- <span style="white-space: pre-wrap;">Verwende </span>**zufällige**<span style="white-space: pre-wrap;"> Werte (kein Muster wie </span>`<span class="editor-theme-code">QR1</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">QR2</span>`<span style="white-space: pre-wrap;"> …), um </span>**Raten**<span style="white-space: pre-wrap;"> zu verhindern.</span>
- <span style="white-space: pre-wrap;">Hinterlege Codes in deiner </span>**Asset-Liste**<span style="white-space: pre-wrap;"> (Wert → Standort → Szene) oder als Notiz im Storyboard.</span>
- <span style="white-space: pre-wrap;">Ändere Codes für </span>**öffentliche**<span style="white-space: pre-wrap;"> Bereiche regelmäßig oder nutze Einmal-Codes, wenn nötig.</span>

---

## Kurz-Checkliste

1. <span style="white-space: pre-wrap;">Code </span>**anlegen**<span style="white-space: pre-wrap;"> oder </span>**aus Toolbox übernehmen**.
2. **Alphanumerischen Wert**<span style="white-space: pre-wrap;"> setzen (oder </span>**Zufall**<span style="white-space: pre-wrap;"> drücken).</span>
3. **Zielszene**<span style="white-space: pre-wrap;"> wählen.</span>
4. **Testscan**<span style="white-space: pre-wrap;"> im Editor/auf dem Gerät.</span>
5. **Drucken**, wetterfest anbringen, Standort in der Doku notieren.

<span style="white-space: pre-wrap;">Fertig – deine Spielenden können den Code im Spiel scannen </span>**oder**<span style="white-space: pre-wrap;"> über die </span>**QR-Suche**<span style="white-space: pre-wrap;"> zur Spielbeschreibung finden (sofern öffentlich).</span>

# Fotovergleich (photoCompare)

<span style="white-space: pre-wrap;">Mit </span>**Fotovergleich**<span style="white-space: pre-wrap;"> lässt du Spielende ein </span>**Live-Foto**<span style="white-space: pre-wrap;"> aufnehmen und es automatisch mit einem </span>**Referenzbild**<span style="white-space: pre-wrap;"> vergleichen. Abhängig vom </span>**Ähnlichkeitswert**<span style="white-space: pre-wrap;"> (0–100) leitest du in eine </span>**Erfolgs-**<span style="white-space: pre-wrap;"> oder </span>**Fehl-Zielszene**<span style="white-space: pre-wrap;"> weiter. Ideal für „Finde exakt diesen Ort“, „Rekonstruiere den Blickwinkel“ oder „Suche dieses Objekt“.</span>

---

## ![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/7Fegrafik.png)Felder

**Referenzbild-URL / Bild auswählen/hochladen**  
<span style="white-space: pre-wrap;">Wähle oder lade das </span>**Referenzfoto**, mit dem verglichen wird. (Dieses Bild ist die „richtige“ Vorlage.)

**Schwellenwert (0–100)**  
<span style="white-space: pre-wrap;">Grenzwert, ab dem der Vergleich als </span>**bestanden**<span style="white-space: pre-wrap;"> gilt.</span>

- **Niedriger**<span style="white-space: pre-wrap;"> = toleranter (leichter zu schaffen)</span>
- **Höher**<span style="white-space: pre-wrap;"> = strenger (exaktere Übereinstimmung nötig)</span>  
    <span style="white-space: pre-wrap;">Richtwerte: Stadt/Outdoor </span>**60–75**<span style="white-space: pre-wrap;">, Innenraum/markante Motive </span>**70–85**.

**Retry erlauben**

- **An**<span style="white-space: pre-wrap;">: Nach Fehlversuch darf sofort </span>**neu fotografiert**<span style="white-space: pre-wrap;"> werden.</span>
- **Aus**<span style="white-space: pre-wrap;">: Bei Fehlversuch geht’s direkt in die </span>**Fehl-Zielszene**.

**Erfolgs-Zielszene**  
<span style="white-space: pre-wrap;">Szene, die bei </span>**erreichtem Schwellenwert**<span style="white-space: pre-wrap;"> geöffnet wird.</span>

**Fehl-Zielszene**  
<span style="white-space: pre-wrap;">Szene, die bei </span>**nicht erreichtem Schwellenwert**<span style="white-space: pre-wrap;"> geöffnet wird (Tipp/Hinweis, erneute Anweisung).</span>

**Notiz (optional)**  
Interne Notiz für die Redaktion (wird Spielern nicht angezeigt).

---

## Verhalten in der App

1. <span style="white-space: pre-wrap;">Die App öffnet die </span>**Kamera**<span style="white-space: pre-wrap;"> und zeigt das </span>**Referenzbild**<span style="white-space: pre-wrap;"> als Vorschau/Leithilfe.</span>
2. <span style="white-space: pre-wrap;">Das Team macht ein Foto → die App berechnet einen </span>**Ähnlichkeitswert (0–100)**.
3. **Wert ≥ Schwellenwert**<span style="white-space: pre-wrap;"> → </span>**Erfolgs-Zielszene**.
4. **Wert &lt; Schwellenwert**<span style="white-space: pre-wrap;"> →</span>
    - <span style="white-space: pre-wrap;">mit </span>**Retry**: neuer Versuch möglich,
    - <span style="white-space: pre-wrap;">ohne </span>**Retry**<span style="white-space: pre-wrap;">: </span>**Fehl-Zielszene**.

> Hinweis: Kamera-/Speicherrechte müssen erlaubt sein. Für diese Funktion ist zwingend eine Interverbindung erforderlich. Der Fotovergleich erfolgt per künstlicher Intelligenz.

---

## Gute Praxis &amp; Tipps

- **Referenz wählen:**<span style="white-space: pre-wrap;"> Klare, kontrastreiche Motive mit unverwechselbaren Kanten/Strukturen funktionieren am besten.</span>
- **Bildaufbau:**<span style="white-space: pre-wrap;"> Referenz möglichst </span>**frontal**<span style="white-space: pre-wrap;"> und ohne starke Perspektiv-Verzerrung anlegen.</span>
- **Toleranz:**<span style="white-space: pre-wrap;"> Starte mit </span>**70**<span style="white-space: pre-wrap;"> und teste vor Ort; bei wechselndem Licht/GPS-Drift ggf. </span>**65–75**<span style="white-space: pre-wrap;"> wählen.</span>
- **Hinweise kombinieren:**<span style="white-space: pre-wrap;"> Gib optional </span>**Hinweise**<span style="white-space: pre-wrap;"> in der Szene („Stell dich an den Poller“, „Schwenke leicht nach links“).</span>
- **Fehl-Pfad nützlich machen:**<span style="white-space: pre-wrap;"> In der </span>**Fehl-Zielszene**<span style="white-space: pre-wrap;"> kurze Tipps + Button „Erneut versuchen“ (falls Retry aus).</span>
- **Performance:**<span style="white-space: pre-wrap;"> Große Referenzbilder werden automatisch skaliert; sinnvolle Uploadgröße </span>**≤ 2000px**<span style="white-space: pre-wrap;"> Kantenlänge.</span>
- **Datenschutz:**<span style="white-space: pre-wrap;"> Auf öffentlichen Plätzen keine identifizierbaren Personen als Referenz verwenden.</span>

---

## Kurz-Workflow

1. **Referenzbild**<span style="white-space: pre-wrap;"> wählen/hochladen.</span>
2. **Schwellenwert**<span style="white-space: pre-wrap;"> setzen (z. B. 70).</span>
3. **Retry**<span style="white-space: pre-wrap;"> entscheiden.</span>
4. **Erfolgs-**<span style="white-space: pre-wrap;"> und </span>**Fehl-Zielszene**<span style="white-space: pre-wrap;"> festlegen.</span>
5. **Speichern**<span style="white-space: pre-wrap;"> und </span>**vor Ort testen**<span style="white-space: pre-wrap;"> – Schwelle ggf. feinjustieren.</span>

So machst du reale Orte/Objekte spielrelevant – präzise, motivierend und leicht verständlich.

# Gamification

# Gamification

*Platzhalter – Inhalte folgen.*

# Compiler & Runtime

# Compiler &amp; Runtime

*Platzhalter – Inhalte folgen.*

# NFC-Tags

Mit **NFC-Tags** löst du Szenen per Berührung aus – ideal in lauten, dunklen oder beengten Locations, wo QR-Codes schwer zu scannen sind. Tags können direkt im Editor angelegt **oder aus der Toolbox** (vor Ort gescannte/geloggte Tags) **übernommen** werden.

---

### [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/U1Igrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/U1Igrafik.png)Felder &amp; Regeln

**Wert**

- Alphanumerisch (A–Z, a–z, 0–9), **keine** Leer- oder Sonderzeichen.
- Frei definierbar **oder** über **„Zufall“** generieren (empfohlen).
- Beispiel: `SCN_TMP_ST1`

**Zielszene**

- Szene, die nach dem Antippen des Tags **geöffnet** wird.

---

## Verhalten in der App

1. Spielende tippen in der App auf **„NFC scannen“** (Android &amp; iOS).
2. Gerät an den Tag halten → bei **passendem Wert** wird die **Zielszene sofort** ausgelöst (oder deine Meta-Logik).
3. Der Wert wird einmalig in der Szene geladen und für das Team konsistent ausgewertet.
4. NFC-Tags können in Szenen wieder entfernt werden.

---

## Import aus der Toolbox

- In der **Toolbox** erfasste NFC-Scans/Spots kannst du im Storyboard **übernehmen**.
- Der **Wert** wird vorbefüllt; du ergänzt **Zielszene**, falls nötig.

---

## NFC-Tags beschreiben (schreiben)

Die App liest **NDEF-Text** (Plain Text) oder **NDEF-URI** nicht – sie vergleicht **den gespeicherten Wert**, den du auf den Tag schreibst. Schreibe daher **genau den Wert** (z. B. `SCN_A1B2C3`) als **NDEF-Textrecord** auf den Tag.

### Geeignete Tags

- **NTAG213/215/216** (ISO 14443-A) – Standard, günstig, weit verbreitet
- **On-Metal/Anti-Metal** Tags für metallische Oberflächen
- Formen: Sticker, Coins, Keyfobs, Karten, Epoxy-Domes (wetterfest)

### Empfohlene Apps/Tools (Android &amp; iOS)

- **NFC Tools** (Wakdev): *Write* → **Add a record** → **Text** → Wert eintragen → **Write**
- **NXP TagWriter**: *Write tags* → **New NDEF message** → **Plain Text** → Wert → **Write**
- (iOS) Achte darauf, dass die App **Schreiben** unterstützt; viele tun das (NFC Tools, NXP TagWriter).

### Schreib-Schritte (Beispiel mit NFC Tools)

1. App öffnen → **Write**
2. **Add a record** → **Text**
3. Exakt **den Wert** eintragen (z. B. `SCN_X9K7M4`)
4. **OK** → **Write** → Telefon an Tag halten
5. **(Optional, nach Tests)**: Tag **locken**/schreibschützen – **irreversibel!**

**Wichtig:** Verwende **nur den Wert**, **keine URLs** oder formatierte Inhalte. Groß-/Kleinschreibung zählt, also exakt übernehmen.

---

## Platzierung &amp; Praxis

- **Position** markieren (Stickerpunkt/kleiner Pfeil), damit klar ist, wo gehalten werden muss.
- **On-Metal** Version auf Metallflächen verwenden.
- **Wetterfest**: Epoxy-Domes, vergossene Coins, laminiert hinter Plexi.
- **Verstecken**: Unter Tischkante, hinter Türschild, im Buchrücken, unter einer Klappe, hinter Holzschieber, in 3D-gedruckter Kapsel.
- **Redundanz**: Kritische Tags doppelt (A/B-Spot) anbringen; Werte dokumentieren.
- **Reichweite**: 0–3 cm. Dünne Abdeckungen (Papier, dünnes Holz, Acryl) sind ok; Metall nur mit On-Metal-Tags.

---

## Druck &amp; Kennzeichnung (optional)

- Kleines **Icon „NFC“** neben dem Spot hilft.
- QR+NFC **Kombi**: Falls NFC nicht erkannt wird, kann ein **Backup-QR** daneben helfen.
- Keine Magnete direkt **zwischen** Telefon und Tag (stört Antenne).

---

## Checkliste

1. **Wert** (alphanumerisch) vergeben oder **Zufall** nutzen.
2. **Zielszene** wählen.
3. Tag mit App als **NDEF-Text** exakt mit diesem Wert **beschreiben**.
4. **Testen** (Android &amp; iOS), dann ggf. **locken**.
5. Wetterfest anbringen, **Standort &amp; Wert** in deiner Doku notieren.

So bindest du robuste, schnelle **Berühr-Triggers** in deine Erlebnisse ein – perfekt als Alternative oder Ergänzung zu QR-Codes.

# Spot aus Toolbox übernehmen

Mit **Spot aus Toolbox übernehmen** holst du bereits vor Ort erfasste Punkte (z. B. aus deiner Szenario-Toolbox) direkt ins **Storyboard** – ohne Koordinaten, Codes oder Medien noch einmal eintippen zu müssen.

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/bbkgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/bbkgrafik.png)

---

## Was kann übernommen werden?

- **Wegpunkt (GPS)** – Koordinaten, Name, optional Bild
- **QR-Code** – Wert (alphanumerisch), Name/Bild
- **NFC-Tag** – Wert (alphanumerisch), Name/Bild
- (optional) **Ordner/Projektzuordnung** wird als Tag/Notiz mitgegeben

> Hinweis: Werte von QR/NFC bleiben **unverändert** übernommen. Koordinaten kommen 1:1 aus der Toolbox.

---

## So funktioniert’s

1. **Modal öffnen** → *Spot aus Toolbox übernehmen*.
2. **Projekt/Ordner wählen** (oben per „Zurück zu Projekten“ navigierbar).
3. In der Liste:
    
    
    - Vorschau, Name und Typ-Icon sehen (📍 GPS, 🧾 QR, 📶 NFC).
    - **Einfügen** klicken, um den Spot zu übernehmen.
    - **Bearbeiten** öffnet den Spot in der Toolbox (falls du ihn vor der Übernahme anpassen willst).
4. Nach dem Einfügen erscheint der passende **Feature-Dialog** im Storyboard:
    
    
    - **Wegpunkt**: Breiten-/Längengrad sind **vorgefüllt**; setze **Radius**, **Sichtbarkeit** und **Autoselect** und wähle die **Zielszene**.
    - **QR-Code**: **Wert** ist gesetzt; optional Zielszene wählen.
    - **NFC-Tag**: **Wert** ist gesetzt; optional Zielszene wählen.
5. **Speichern** – fertig. Der Spot ist nun als Feature in deiner Szene.

---

## Was wird genau übernommen?

- **Name** → als interner Titel/Notiz
- **Bild** (falls vorhanden) → als Vorschau/Popup-Bild (je nach Feature)
- **Koordinaten** (bei GPS-Spots)
- **Code-Wert** (bei QR/NFC, unverändert)
- **Metadaten** (Zeitstempel, Ordner) → als Notiz

---

## Doppelte Spots &amp; Aktualisierung

- **Mehrfach übernehmen** ist möglich (z. B. gleicher QR an mehreren Stellen).
- Änderungen in der **Toolbox nach der Übernahme** werden **nicht automatisch** ins Storyboard gespiegelt – bei Bedarf Spot erneut übernehmen.

---

## Tipps aus der Praxis

- **Feldarbeit zuerst**: Scanne/erfasse draußen alle Punkte in der Toolbox, **sortiere sie in Ordner**, füge Fotos hinzu – danach importierst du sie flüssig ins Storyboard.
- **Benennung**: Kurze, sprechende Namen („Brücke Nord – QR“, „Werkhalle – NFC“) erleichtern die Auswahl.
- **Qualitätssicherung**: Vor dem Einfügen kurz **Bearbeiten** nutzen, um falsche Koordinaten oder Tippfehler im Code zu korrigieren.
- **Team-Konsistenz**: Übernommene Wegpunkte sind „fixe“ Ziele – ideal, damit alle Spielenden denselben Punkt ansteuern.

---

## FAQ

**Kann ich beim Einfügen die Zielszene frei wählen?**  
Ja – die Toolbox gibt nur Daten vor. Die **Zielszene legst du im Storyboard** fest.

**Was, wenn ein QR-/NFC-Wert gegen die Regeln verstößt?**  
Beim Einfügen wird geprüft: **alphanumerisch, keine Leer-/Sonderzeichen**. Passe den Wert in der Toolbox an oder editiere ihn im Feature-Dialog.

**Kann ich mehrere Spots auf einmal übernehmen?**  
Aktuell **einzeln** per **Einfügen**. (Für Massenimporte: erst in der Toolbox sammeln und dann nacheinander übernehmen – geht sehr schnell.)

# Button

Mit dem **Button**-Element führst du Spielende per Tap zur **nächsten Szene** – klassisch für „Weiter“, Auswahl­optionen, Abzweigungen oder Bonus-Aktionen. Oben im Dialog siehst du eine **Live-Vorschau** deiner aktuellen Einstellungen.

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/b4dgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/b4dgrafik.png)Felder

**Text**  
Beschriftung des Buttons (z. B. „Weiter“, „Zur Aufgabe“, „Norden wählen“).  
Tipp: Kurze Verben + Nutzen („Öffnen“, „Lösen starten“).

**Zielszene**  
Die Szene, die beim Tippen **geöffnet** wird.

- Üblich ist, hier **immer** eine Szene zu wählen.
- Wenn du bewusst **ohne Ziel** speicherst, verhält sich der Button wie ein „stummer“ UI-Button und löst keine Navigation aus (nur sinnvoll für Speziallogik).

**Hintergrundfarbe**  
Hex-Wert für die Buttonfläche, z. B. `#68bfdd` (Brand Color).

**Textfarbe**  
Hex-Wert für die Beschriftung, z. B. `#ffffff`.

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/sEGgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/sEGgrafik.png)Verhalten in der App

- **Tap** auf den Button öffnet **sofort** die gewählte **Zielszene**.
- Mehrere Buttons in einer Szene werden automatisch **untereinander** (mobilfreundlich) gerendert; die **Reihenfolge** entspricht der Reihenfolge im Editor.
- Buttons reagieren direkt; es ist **kein** GPS/Scan nötig (anders als bei Wegpunkten/QR/NFC).
- Buttons werden mit einem Sicherheitsabstand unterhalb von Content eingefügt.
- Position des Buttons kann mit DIV Klasse `customButtonPosition` gesteuert werden: ```
    <div class="customButtonPosition"></div>
    ```

---

## Einsatzmuster

- **Lineares Weiter**: „Weiter“ → nächste Szene.
- **Entscheidungen/Abzweigungen**: Mehrere Buttons mit unterschiedlichen Ziel­szene(n) („Tür A“, „Tür B“).
- **Optionale Inhalte**: „Mehr erfahren“, „Hinweis anzeigen“, „Zur Karte“.
- **Rücksprung**: „Zur Übersicht“/„Zurück zur Karte“.

---

## Gestaltungs- &amp; UX-Tipps

- **Kontrast** sicherstellen: Helle Schrift auf dunklem Hintergrund oder umgekehrt (AA-Kontrast ≥ 4.5:1 anstreben).
- **Konsistenz**: Primäre Aktion (z. B. „Weiter“) immer gleiche Farbe; sekundäre Aktionen in neutralen Tönen.
- **Größe/Touch-Ziel**: Genug Platz (mind. ~44 px Höhe) und Abstand zwischen mehreren Buttons.
- **Icon-Hilfe**: Du kannst vor dem Text **Emoji** nutzen (z. B. 🔍 „Suchen“, 🧭 „Zur Karte“).
- **Deaktivierte Logik**: Wenn ein Button erst nach Bedingung aktiv sein soll, blende ihn vorher aus oder ersetze ihn durch Hinweistext (statt „toter“ Buttons).

---

## Kombinationen

- **Mit Wegpunkten**: Button erst nach Erreichen eines Wegpunkts anzeigen (Story-Gating).
- **Mit QR/NFC**: Button bietet Wahl: „Scannen“ oder „Überspringen (Hinweis)“.
- **Mit Dialogen/Medien**: Unter Text, Bild, Audio oder Video als klare Call-to-Action platzieren.

---

## Kurz-Checkliste

1. **Text** setzen (klar &amp; kurz).
2. **Zielszene** auswählen.
3. **Farben** (Brand) wählen, Kontrast prüfen.
4. Vorschau checken → **Speichern**.

Fertig – der Button führt die Spielenden zuverlässig zur nächsten Station deiner Story.

# Abfragefeld (Eingabe prüfen)

Mit dem **Abfragefeld** fragst du einen Code, ein Wort oder eine Zahl ab. Nach dem Tippen auf **„Lösung prüfen“** wird die Eingabe validiert – bei Erfolg öffnet sich die **Zielszene** (falls gesetzt).

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/Yuxgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/Yuxgrafik.png)Felder

**Lösung**

- Erwartete richtige Eingabe.
- Tipp: Kurz und eindeutig (z. B. `MORSE`, `4711`, `BOLTZMANN`).

**Button**

- Beschriftung des Prüfen-Buttons (Standard: „Lösung prüfen“).

**Prüfung**

- **vereinfacht**: Groß/Kleinschreibung wird ignoriert; führende/folgende Leerzeichen werden entfernt; mehrere Leerzeichen werden zusammengefasst;
- **exakt** (falls gewählt): 1-zu-1-Vergleich – **alles** muss exakt übereinstimmen.

**Darstellung**

- **Eingabefeld**: Freitext (Buchstaben/Zahlen).
- **Zahlenfeld** (falls verfügbar): Zeigt ein numerisches Keyboard, limitiert auf Ziffern – ideal für Codes/Kombinationen.

**Zielszene**

- Szene, die bei **korrekter Lösung** geöffnet wird.
- Lässt du sie leer, kannst du über Szenenlogik/Badge o. Ä. selbst reagieren.

**Hintergrundfarbe / Textfarbe**

- Farben des **Prüfen-Buttons** (Hex-Werte, z. B. `#256d85` / `#ffffff`).

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/R6Qgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/R6Qgrafik.png)Verhalten in der App

1. Spielende tippen ihre Lösung ein und drücken **„Lösung prüfen“**.
2. Die Eingabe wird gemäß **Prüfmodus** verglichen.
3. **Richtig** → (optional) kurzer Erfolgseffekt, **Zielszene** wird geöffnet.
4. **Falsch** → (optional) Hinweis „Leider falsch“ / erneuter Versuch.
5. Eingabefeld wird mit Sicherheitsabstand unter dem Content eingefügt.
6. Position des Eingabefelds kann mit der DIV Klasse `customInputPosition` umgeleitet werden:  
    ```
    <div class="customInputPosition"><div>
    ```

---

## Praxis-Tipps

- **Eindeutigkeit:** Vermeide Lösungen, die leicht zu raten sind („JA“, „OK“).
- **Toleranz:** Nutze **„vereinfacht“**, wenn Tippfehler durch Groß-/Kleinschreibung nicht entscheidend sind.
- **Zahlenrätsel:** Wähle **Darstellung → Zahlenfeld** (falls verfügbar), damit direkt das Ziffern-Keyboard erscheint.
- **Barrierefreiheit:** Button-Kontrast hoch halten (helle Schrift auf dunklem Button oder umgekehrt).
- **Feedback:** In der Szene kurz erklären, **wo** die Lösung zu finden ist („Die Antwort steht auf dem Typenschild“).

---

## Kurz-Checkliste

1. **Lösung** eintragen (ggf. Varianten mit `|`).
2. **Prüfung** wählen (**vereinfacht** für tolerant, **exakt** für streng).
3. **Darstellung** festlegen (Eingabe/Zahl).
4. **Zielszene** setzen.
5. Button-**Text** und **Farben** anpassen → **Speichern**.

# Dialog

Mit **Dialog** zeigst du einen oder mehrere Textbausteine mit optionalen **Buttons** an – ideal für kurze Erklärungen, Zwischentexte, Entscheidungen oder Abzweigungen. Oben siehst du im Editor eine **Live-Vorschau** von Text &amp; Button-Stil.

---

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/T6lgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/T6lgrafik.png)[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/dTzgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/dTzgrafik.png)[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/K2Kgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/K2Kgrafik.png)

## Tabs &amp; Felder

### 1) Texte

- **Text (mehrfach)**  
    Füge beliebig viele Einträge hinzu („Text 1“, „Text 2“, …).  
    Jeder Eintrag wird in der App **nacheinander** angezeigt.
    
    
    - Zeilenumbruch wird übernommen.
    - Emojis sind erlaubt.
- **Ablauf**
    
    
    - Spieler:innen tippen auf **„…/Weiter“** (oder irgendwo in den Dialogbereich), um zum **nächsten Textelement** zu wechseln.
    - Nach dem letzten Text bleibt der Dialog stehen; Buttons (falls vorhanden) sind weiterhin sichtbar.

### 2) Buttons

- **Button (mehrfach)**
    
    
    - **Szene**: Zielszene, die beim Tippen geöffnet wird.
    - **Text**: Beschriftung (z. B. „Weiter“, „Zurück“, „Abzweigung A“).
- **Verhalten**
    
    
    - Buttons werden **unter dem Text** angezeigt.
    - Du kannst **mehrere** Buttons gleichzeitig verwenden (Entscheidungen).
    - Lässt du **alle Szenen leer**, tun die Buttons nichts (nur sinnvoll, wenn du eigene Logik verwendest).

### 3) Einstellungen

- **Textfarbe** – Farbe der Dialogtexte (Hex).
- **Hintergrundfarbe-Button** – Hintergrund der Buttons (Hex).
- **Textfarbe-Button** – Beschriftungsfarbe der Buttons (Hex).

---

## <video class=" align-left" controls="controls" height="166" src="https://docs.scenario.app/attachments/45?open=true" style="width: 300px; height: 600px;" width="300"></video>Verhalten in der App

- Die Texte erscheinen **sequenziell**; ein Tap auf den Dialog/Weiter-Button zeigt den **nächsten Text**.
- Buttons sind die **Call-to-Action** unter dem Text. Ein Tap öffnet sofort die gewählte **Zielszene**.
- Gibt es **keine Buttons**, dient der Dialog als **reiner Infoblock** (Spielfluss geht weiter, wenn du in der Szene weitere Elemente hast).

---

## Einsatzmuster

- **Storybeat/Erklärung:** Mehrere kurze Sätze als einzelne Textschritte, darunter „Weiter“.
- **Entscheidung:** Zwei oder mehr Buttons („Tür A“, „Tür B“) mit unterschiedlichen Ziel­szenen.
- **Rücksprung/Navi:** „Zur Karte“, „Zur Übersicht“.
- **Hinweis nach Rätsel:** Text + Button „Aufgabe starten“.

---

## UX-Tipps

- **Kurz &amp; konkret** – lieber 2–3 kurze Texte als eine Textwand.
- **Kontrast prüfen** – Button- und Textfarben mit ausreichendem Kontrast wählen.
- **Primäraktion konsistent** – z. B. immer dieselbe Farbe für „Weiter“.
- **Reihenfolge beachten** – die Anzeige folgt exakt der Reihenfolge im Tab **Texte**.
- **Barrierefreiheit** – Buttons groß genug (min. ~44 px Höhe) und mit klaren Labels.

---

## Kurz-Checkliste

1. Texte in sinnvoller Reihenfolge anlegen.
2. Buttons (Zielszene + Label) hinzufügen – oder weglassen für Info-Dialoge.
3. Farben in **Einstellungen** setzen.
4. Vorschau prüfen → **Speichern**.

Fertig – dein Dialog führt sauber durch Textschritte und lenkt mit Buttons zur passenden nächsten Szene.

# Hintergrundbild

<article class="text-token-text-primary w-full focus:outline-none scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-24" data-turn="assistant" data-turn-id="751e9b17-40a5-4421-8923-afb5b3f465b4" dir="auto" id="bkmrk-mit%C2%A0hintergrundbild-" tabindex="-1">Mit **Hintergrundbild** legst du ein Bild **vollflächig als Cover** hinter deine Szene.  
Beim Anklicken öffnet sich die **Medienauswahl** (mit optionalem Upload). In der Liste hat jedes Bild einen Button **„als Hintergrund einfügen“** – ein Klick setzt es sofort als Szenen-Hintergrund.

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div>## Wie es funktioniert

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Öffne **Hintergrundbild** → **Medienauswahl** erscheint.
- Wähle ein vorhandenes Bild **oder** lade ein neues hoch.
- Klicke **„als Hintergrund einfügen“** beim gewünschten Bild.
- Das Bild wird **als Cover** gesetzt:
    
    
    - füllt die gesamte Fläche,
    - **beschneidet** bei abweichendem Seitenverhältnis,
    - ist **zentriert** (Fokus Mitte).

</div></div></div></div></div></div>> Das Hintergrundbild beeinflusst keine anderen Elemente – Buttons, Dialoge, Texte etc. liegen **darüber**.

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div>## Unterstützte Formate (empfohlen)

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **JPG / JPEG** – Fotos, kleinste Dateigröße
- **PNG** – Grafiken mit Transparenz
- **WebP** – moderne Alternative (klein + scharf)

---

</div></div></div></div></div></div>## Best Practices

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **Größe &amp; Schärfe**
    
    
    - Ziel: **≤ 1 MB** pro Bild (schnelle Ladezeiten).
    - **1440×2560** (hochkant).
- **Sichere Bildmitte**
    
    
    - Wichtige Motive in die **Mitte** legen – Ränder können durch „Cover“ beschnitten werden.
- **Kontrast für Lesbarkeit**
    
    
    - Heller Text auf dunklem Bild, dunkler Text auf hellem Bild.
    - Wenn nötig: dezent **abdunkeln** (z. B. mit halbtransparentem Element/Gradient darüber).
- **Motivruhe**
    
    
    - Ruhige, unscharfe Hintergründe lenken weniger ab und lassen UI klar wirken.
- **Mehrere Sprachen/Szenen**
    
    
    - Keine eingebrannten Texte ins Bild – nutze dafür Szenen-Text/Features, damit Übersetzungen einfach bleiben.

---

</div></div></div></div></div></div>## Häufige Fragen

**Kann ich das Bild ausrichten?**  
Standard ist **zentriert**. Wenn der Fokus stark außerhalb der Mitte liegt, nimm eine Variante, die mittig wirkt – wegen Cover-Beskneidung.

**Was passiert auf kleinen Displays?**  
Das Bild bleibt **vollflächig**; Ränder können je nach Gerät abgeschnitten sein (Design daher mittig planen).

**Kann ich später wechseln?**  
Ja – **Hintergrundbild** erneut öffnen und ein anderes Bild **„als Hintergrund einfügen“**.

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div></div></div>## Kurz-Checkliste

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="3132f5a4-9697-4400-9ab5-7202068551ba" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">1. **Hintergrundbild** öffnen → Bild wählen/hochladen.
2. **„als Hintergrund einfügen“** klicken.
3. Kontrast und Lesbarkeit der Szene prüfen.
4. Speichern.

</div></div></div></div><div class="z-0 flex min-h-[46px] justify-start">  
</div></div></div></article>

# Hintergrundfarbe

Mit **Hintergrundfarbe** gibst du deiner Szene einen einfarbigen oder **zweifarbigen Verlauf**.  
Hinweis: **Wenn ein Hintergrundbild gesetzt ist, überschreibt es die Hintergrundfarbe** (Bild hat Vorrang).

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/u91grafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/u91grafik.png)Felder

**Farbe 1 / Farbe 2**

- Hex-Werte (`#RRGGBB`, z. B. `#84bee2`, `#1a767a`).
- Für **einfarbig**: in beide Felder **denselben** Wert eintragen.

**Verlaufsrichtung**

- Steuert, wie der Verlauf verläuft:
    
    
    - **Horizontal** (links → rechts)
    - **Vertikal** (oben → unten)
    - **Diagonal nach unten rechts** (oben-links → unten-rechts)
    - **Diagonal nach unten links** (oben-rechts → unten-links)

Live-Vorschau oben zeigt das Ergebnis der aktuellen Auswahl.

---

## Verhalten in der App

- Ohne Hintergrundbild füllt die Farbe/der Verlauf die Szene **vollflächig**.
- **Mit Hintergrundbild** bleibt die Farbe unsichtbar (als Fallback im Hintergrund vorhanden).
- Alle anderen Elemente (Texte, Buttons, Dialoge etc.) liegen **darüber**.

---

## Design-Tipps

- **Kontrast**: Wähle Farben so, dass Texte/Buttons gut lesbar sind (ggf. helle/dunkle Varianten testen).
- **Ruhige Flächen**: Sanfte Verläufe lenken weniger ab als harte Kontraste.
- **Branding**: Nutze eure Primär- (z. B. `#68bfdd`) und Sekundärfarben konsistent über alle Szenen.
- **Fallback**: Setze immer eine sinnvolle Hintergrundfarbe – falls ein Bild später entfernt wird, bleibt die Szene stimmig.

---

## Kurz-Checkliste

1. Farben wählen (einfarbig = Farbe1 = Farbe2).
2. Verlaufsrichtung festlegen.
3. Vorschau prüfen → **Speichern**.
4. Falls **Hintergrundbild** aktiv ist: beachten, dass dieses die Farbe überlagert.

# Szenen-Übergang (pageTransition)

Mit **Szenen-Übergang** legst du fest, **wie eine Szene erscheint** (In-Transition) und **wie sie verschwindet** (Out-Transition). Die Animation läuft jeweils beim Betreten bzw. Verlassen der Szene auf dem gesamten Szenen-Container. (Hintergrundbild/-farbe, Texte, Buttons usw. animieren damit gemeinsam.)

---

## <video class=" align-left" controls="controls" height="600" src="https://docs.scenario.app/attachments/48?open=true" width="300"></video>

[![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/uHugrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/uHugrafik.png)

---

## Felder

- **Einblendung (In-Transition)** – Animation beim **Öffnen** der Szene.
- **Ausblendung (Out-Transition)** – Animation beim **Wechsel** zu einer anderen Szene.
- **none** = keine Animation (schnellste Option, Standard).

---

## Verfügbare Optionen

### In-Transitions

- `fadeInScene` – sanft einblenden
- `zoomInScene` – leicht hineinzoomen
- `slideInLeftScene` / `slideInRightScene` – von links/rechts einschieben
- `bounceInScene` – federnde Einblendung
- `rotateInScene` – leicht hereinrotieren
- `magicScaleInScene` – Skalierungs-/Weichzeichner-Effekt
- `iphoneBounceInScene` – iOS-artiger Bounce
- `macSlideInScene` – macOS-artiger Slide
- `materialExpandInScene` – Material-Expand (Card wird groß)
- `androidSlideUpInScene` – Android-Slide von unten
- `rippleInScene` – Wellen-/Ripple-Eintritt
- `cardStackInScene` – Kartenstapel kommt nach vorn
- `materialFlipInScene` – Material-Flip nach vorn

### Out-Transitions

- `fadeOutScene` – sanft ausblenden
- `zoomOutScene` – leicht herauszoomen
- `slideOutLeftScene` / `slideOutRightScene` – nach links/rechts heraus schieben
- `bounceOutScene` – federnde Ausblendung
- `rotateOutScene` – herausrotieren
- `magicScaleOutScene` – Magic-Scale zurück
- `iphoneBounceOutScene` – iOS-artiger Bounce out
- `macSlideOutScene` – macOS-artiger Slide out
- `materialExpandOutScene` – Material-Shrink/Collapse
- `androidSlideDownOutScene` – Android-Slide nach unten
- `rippleOutScene` – Ripple-Ausgang
- `cardStackOutScene` – zurück in Kartenstapel
- `materialFlipOutScene` – Material-Flip nach hinten

---

## Empfohlene Paare (stimmige Kombis)

- **Fade:** `fadeInScene` ⇄ `fadeOutScene` (ruhig, universell)
- **Slide links/rechts:** `slideInLeftScene` ⇄ `slideOutRightScene` *(oder umgekehrt für Gegenrichtung)*
- **Zoom:** `zoomInScene` ⇄ `zoomOutScene`
- **Material/Card:** `materialExpandInScene` ⇄ `materialExpandOutScene` / `cardStackInScene` ⇄ `cardStackOutScene`
- **Platform-Look:**
    
    
    - iOS: `iphoneBounceInScene` ⇄ `iphoneBounceOutScene`
    - Android: `androidSlideUpInScene` ⇄ `androidSlideDownOutScene`
    - macOS: `macSlideInScene` ⇄ `macSlideOutScene`

---

## Hinweise &amp; Best Practices

- **Konsistenz:** Wähle für ein Projekt 1–2 Animationsstile und bleibe dabei.
- **Tempo &amp; Performance:** Dezente Effekte wirken professioneller und laden schneller. Auf älteren Geräten ist `none`/`fade` am flüssigsten.
- **Richtung beachten:** Wenn der Spielfluss „vorwärts“ geht, nutze z. B. **In von rechts → Out nach links** (oder umgekehrt), um eine klare Bewegungslogik zu erzeugen.
- **Barrierefreiheit:** Übertreibe Rotationen/Bounce nicht – sie können empfindliche Nutzer stören.
- **Konflikte vermeiden:** Kombiniere keine starken In/Out-Stile, die gegeneinander arbeiten (z. B. `rotateIn` mit `slideOutRight` kann unruhig wirken).

---

## Kurz-Checkliste

1. **In**- und **Out**-Transition wählen (oder `none`).
2. In der Vorschau prüfen, ob es zum **Ton der Szene** passt.
3. Einheitlich im gesamten Spiel anwenden.
4. Bei Performance-Problemen: auf **fade/none** wechseln.

# Inventar

Mit **Inventar** gibst du Spieler:innen Gegenstände an die Hand – z. B. Schlüssel, Hinweise, Karten oder Fotos (zoombar). Items können **gesammelt**, **verbraucht** oder **für Bedingungen** in Szenen verwendet werden.

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/KgBgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/KgBgrafik.png)Felder

**Bild**  
Optionales Vorschaubild. Bilder können im Inventar **vollbild/zoombar** geöffnet werden – ideal für Karten, Notizen, Codes.

**Name**  
Eindeutige Bezeichnung des Gegenstands (z. B. „Rostiger Schlüssel“, „Karte Nordwald“).

**Beschreibung**  
Kurzer Begleittext (Hinweis, Notiz, Nutzungshinweis).

**Anzahl**  
Startmenge (Standard **1**). Kann im Spiel erhöht/gesenkt werden.

---

<table border="1" id="bkmrk-verhalten-in-der-app" style="border-collapse: collapse; width: 100%; border-width: 0px;"><colgroup><col style="width: 40.4762%;"></col><col style="width: 59.5238%;"></col></colgroup><tbody><tr><td style="border-width: 0px;"><video controls="controls" height="600" src="https://docs.scenario.app/attachments/51?open=true" width="300"></video></td><td style="border-width: 0px;">## Verhalten in der App

- Items erscheinen im **Inventar-Menü** der App.
- Tippen auf ein Item öffnet **Detailansicht** mit **Zoom** für das Bild (falls vorhanden) und Beschreibung.
- Mengenänderungen werden live angezeigt (z. B. „Seil ×2“).

  
</td></tr></tbody></table>

## Verhalten in der App

- Items erscheinen im **Inventar-Menü** der App.
- Tippen auf ein Item öffnet **Detailansicht** mit **Zoom** für das Bild (falls vorhanden) und Beschreibung.
- Mengenänderungen werden live angezeigt (z. B. „Seil ×2“).

---

## Logik im Spiel

Du kannst Inventar **abfragen** und **verändern**:

**Bedingungen (typische Checks)**

- *hat Item*: „Wenn **Karte Nordwald** vorhanden → Button anzeigen / Szene freigeben“
- *Menge*: „Wenn **Batterie** ≥ 2 → Taschenlampe aktivieren“
- *nicht vorhanden*: „Wenn **Schlüssel** fehlt → Hinweis anzeigen“

**Aktionen (typische Manipulationen)**

- **Hinzufügen**: Item neu ins Inventar legen (mit Startmenge)
- **Erhöhen/Verringern**: Menge +1/–1 oder um einen festen Wert
- **Setzen**: Menge exakt auf n stellen
- **Entfernen**: Item komplett aus dem Inventar löschen

> Praxis: Nach dem Benutzen eines „Einweg“-Items (z. B. Sicherung) die Menge **–1** setzen. Bei wiederverwendbaren Items (z. B. Schlüsselbund) die Menge belassen.

---

## Einsatzbeispiele

- **Schlüssel &amp; Schlösser**
    
    
    - Szene fragt: *„Schlüssel vorhanden?“* → Ja: Tür öffnet, Nein: Hinweis „Suche den Schlüssel“.
- **Fotos/Belege als Hinweis**
    
    
    - Item „Foto Schaltschrank“ (zoombar) enthält eine abfotografierte Zahlenfolge → späteres Rätsel.
- **Karte/Plan**
    
    
    - Zoombare Karte im Inventar, die jederzeit aufgerufen werden kann.
- **Ressourcen**
    
    
    - „Batterie ×3“ – wird beim Einschalten der UV-Lampe schrittweise verbraucht.

---

## Design- &amp; UX-Tipps

- **Eindeutige Namen &amp; Icons**: schneller Wiedererkennungswert.
- **Kurze Beschreibung** mit klarer Funktion („Öffnet Tür im Keller“).
- **Wichtige Bilder** hochauflösend genug für Zoom, aber &lt; 1 MB wenn möglich.
- **Tutorial-Hinweis**: Einmal erklären, dass Inventar über das Rucksack-Symbol erreichbar ist.

---

## Kurz-Workflow

1. **Bild** wählen (optional, zoombar), **Name**, **Beschreibung**, **Anzahl** setzen.
2. In späteren Szenen **Bedingungen** auf dieses Item legen (vorhanden / Menge ≥ n).
3. Bei Bedarf per Aktion **Menge ändern** oder Item **entfernen**.

So steuerst du Spielfortschritt, Rätsel und Hinweise elegant über ein flexibles, sichtbares **Inventar-System**.

# Inventar – Menge anpassen

Mit **Menge anpassen** veränderst du die Anzahl eines vorhandenen Inventar-Items – entweder **relativ** (±) oder als **fester Wert**. So kannst du Verbrauchsmaterialien abziehen, Belohnungen geben oder Zählerstände steuern.

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/4Uvgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/4Uvgrafik.png)Felder

**Inventar**  
Wähle das Item, dessen Menge geändert werden soll.

**Modus**

- **+/− (relativ):** addiert oder subtrahiert den eingegebenen Wert.
    
    
    - Beispiele: `+1` = einen Schlüssel erhalten, `-1` = Batterie verbrauchen.
- **fester Wert:** setzt die Menge exakt auf den eingegebenen Wert.
    
    
    - Beispiel: `0` = Item leeren/aufgebraucht, `3` = exakt drei Stück besitzen.

**Menge**  
Ganzzahl (negativ erlaubt im ±-Modus).

---

## Verhalten in der App

- Die Anpassung passiert **sofort**, wenn die Szene/Interaktion mit dieser Aktion ausgeführt wird (also sofort wenn eine Szene aufgerufen wird.).
- Mengen werden auch als **negativ** behandelt: fällt das Ergebnis unter 0, wird also auch -1 angezeigt.
- Optionales Projektverhalten: Wenn eine Menge 0 erreicht, kann das Item im Inventar **ausgeblendet** oder **entfernt** werden (je nach Projekteinstellung).

---

## Typische Use-Cases

- **Verbrauch:** „UV-Lampe einschalten“ → Batterie **−1**.
- **Belohnung:** Rätsel gelöst → Münzen **+3**.
- **Reset/Zwangswert:** Beim Levelstart „Seile = 2“ (fester Wert).
- **Schlüsselabgabe:** Tür geöffnet → Schlüssel 0 (fester Wert) oder **−1**.

---

## Praxis-Tipps

- **Vor dem Abziehen prüfen:** Kombiniere mit einer **Bedingung** („Menge ≥ 1?“), um Fehlzustände zu vermeiden.
- **Klar kommunizieren:** Zeige nach Anpassungen eine kurze Rückmeldung („Batterie −1“).
- **Balancing:** Nutze feste Werte für Checkpoints, relative Werte für dynamisches Gameplay.
- **Testfälle:** Prüfe Grenzwerte (von 1 → 0, mehrfaches Klicken, Offline-Wiederaufnahme).

---

## Kurz-Workflow

1. Aktion **Menge anpassen** zur gewünschten Szene/Interaktion hinzufügen.
2. **Inventar-Item**, **Modus** (± oder fester Wert) und **Menge** setzen.
3. Optional: Vorher **Bedingung** (Menge ≥ n) und/oder danach **Hinweis** anzeigen.
4. Speichern – fertig.

# Variablen

**Variablen** sind interne Spielwerte – für Spielende **unsichtbar** – mit denen du Logik, Zustände und Verzweigungen steuerst (Flags, Zähler, Punkte, Fortschritt).

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/D73grafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/D73grafik.png)Anlegen

**Name** – frei wählbar (nur Buchstaben/Zahlen/\_), z. B. `Szene_gesehen`, `punkte`, `tresor_fehlversuche`.  
**Anzahl** – Startwert (Ganzzahl, Standard 0/1).

> Verwende `0/1` als **Boolean-Flag**: `Szene_gesehen = 1` bedeutet „Intro schon gezeigt“.

---

## Verhalten &amp; Reichweite

- Gilt **projektweit** für den aktuellen Durchlauf/Spielstand.
- Für Spielende **nicht sichtbar** (nur für Bedingungen &amp; Aktionen nutzbar).
- Bleibt erhalten, bis du sie änderst oder den Spielstand zurücksetzt.

---

## Nutzung in Bedingungen

Du kannst Variablen an jeder Stelle abfragen, um Elemente/Wege zu steuern.  
Unterstützte Vergleiche (typisch):

- `==` gleich `!=` ungleich
- `>` größer `<` kleiner
- `>=` mindestens `<=` höchstens

**Beispiele**

- Intro überspringen: nur anzeigen, **wenn** `Szene_gesehen == 0`.
- Bonus freischalten: Button zeigen, **wenn** `punkte >= 50`.
- Sicherheitslogik: Hinweis zeigen, **wenn** `tresor_fehlversuche >= 3`.

---

## Variablen ändern (Aktionen)

- **Erhöhen/Verringern**: `punkte += 10`, `tresor_fehlversuche += 1`.
- **Setzen**: `Szene_gesehen = 1` (Flag aktivieren), `timer = 0` (reset).
- **Beispiel-Workflow**: Beim Szenenstart `Szene_gesehen = 1`; beim richtigen Code `punkte += 20`; beim falschen Code `tresor_fehlversuche += 1`.

---

## Muster &amp; Best Practices

- **Benennung**: klein\_schreiben\_mit\_unterstrich (eindeutig &amp; sprechend).
- **Flags statt Text**: nutze Zahlen (0/1) statt Strings – schneller &amp; fehlerarm.
- **Initialisierung**: setze Startwerte bewusst zu Beginn des Spiels/Levels.
- **Sicherheit**: prüfe vor dem Abziehen auf Grenzwerte (z. B. nicht unter 0).
- **Dokumentation**: kurze Tabelle deiner Variablen (Name, Bedeutung, Startwert).

---

## Mini-Beispiele

- **Intro-Once**
    
    
    - Bedingung: „Intro-Dialog nur, wenn `intro_seen == 0`“
    - Aktion beim Anzeigen: `intro_seen = 1`
- **Punktesystem**
    
    
    - Rätsel gelöst: `punkte += 10`
    - Bonuspfad: sichtbar, wenn `punkte >= 30`
- **Fehlversuche**
    
    
    - Bei falscher Eingabe: `fails += 1`
    - Zeige Hilfe, wenn `fails >= 2`

Mit Variablen baust du vom simplen „Schon gesehen?“ bis zur komplexen Quest-Logik alles sauber und wiederverwendbar.

# Elemente entfernen

Mit **Elemente entfernen** kannst du während des Spiels bereits platzierte, dynamische Elemente **ausblenden bzw. deaktivieren**. So steuerst du, was nach einer Aktion noch sichtbar/benutzbar ist.

**Unterstützte Typen**

- **Wegpunkt** (Map-Marker)
- **QR-Code**
- **NFC-Tag**
- **Countdown**
- **Inventar-Gegenstand**

> Der Effekt gilt für den **aktuellen Spielstand/Teamlauf**. Andere Teams/Spielstände bleiben unberührt.

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/W8Hgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/W8Hgrafik.png)Bedienung

1. **+ Element** → Typ wählen (z. B. *Inventar*).
2. Je nach Typ das **konkrete Ziel** auswählen (z. B. Inventar-Item „Byte“ oder Wegpunkt „Brücke“).
3. Mehrere Elemente können in **einem Schritt** hinzugefügt und entfernt werden.
4. **Speichern** – die Entfernung passiert, **wenn diese Szene/Aktion ausgeführt** wird.

---

## Verhalten pro Typ

- **Wegpunkt**: Marker verschwindet; Auto-Select/Proximity löst nicht mehr aus.
- **QR/NFC**: Code/Tag ist für diesen Lauf **inaktiv** (Scan hat keine Wirkung).
- **Countdown**: Läuft nicht weiter und wird aus der UI entfernt.
- **Inventar**: Item wird **aus dem Inventar gelöscht** (entspricht Menge → 0 und ausblenden).

Wenn ein anvisiertes Element **nicht (mehr) existiert**, passiert still **nichts** (idempotent).

---

## Typische Einsatzfälle

- Nach Betreten eines Wegpunkts den **Marker entfernen**, damit die Karte clean bleibt.
- Ein **einmaliger QR/NFC** soll nur für den ersten Fund zählen.
- **Rätsel verbraucht** ein Item → Item aus dem Inventar entfernen.
- **Countdown** bei Pfadwechsel stoppen und ausblenden.

---

## Best Practices

- **Klarer Zeitpunkt**: Entfernen meist **nach** Abschluss eines Tasks (z. B. am Ende der Erfolgs-Szene).
- **Feedback** geben: „Wegpunkt erreicht – Marker entfernt“, „Schlüssel abgegeben“.
- **Sicherheit**: Entfernen von QR/NFC nur, wenn der Folgeschritt garantiert erreichbar ist (kein Soft-Lock).
- **Testen**: Lauf zweimal spielen – prüfen, dass entfernte Elemente nicht unerwartet wieder auftauchen.

---

## Kurz-Checkliste

1. In der Szene **Elemente entfernen** hinzufügen.
2. **Typ** und **Ziel** wählen (ggf. mehrere).
3. Platzierung prüfen (wann soll es passieren?).
4. Speichern → auf dem Gerät testen.

# Countdown

Mit dem **Countdown** gibst du einer Szene (oder einer ganzen Aufgaben-Sequenz) ein **Zeitlimit**. Der Timer läuft sichtbar in der App herunter. Er startet, sobald die Szene mit dem Countdown **betreten** wird und läuft weiter, bis er **abgelaufen** ist oder du ihn **entfernst**.

<div class="flex max-w-full flex-col grow" id="bkmrk-"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div>## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/dfOgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/dfOgrafik.png)Felder

**Zeit (in Min.)**  
Gib die Dauer in **Minuten** an (z. B. `1`, `5`, `15`).  
Tipp: Kurze Tests immer mit `1`–`2` Minuten anlegen.

**Zielszene** *(optional)*  
Szene, die **automatisch geöffnet** wird, wenn der Countdown 0 erreicht.

<div class="flex max-w-full flex-col grow" id="bkmrk-setzt-du-keine-ziels"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Setzt du keine Zielszene, endet der Countdown ohne Szenenwechsel (du kannst z. B. selbst Hinweise/Buttons in der Szene platzieren, was passieren soll).

---

</div></div></div></div><table border="1" id="bkmrk-verhalten-in-der-app" style="border-collapse: collapse; width: 100%; border-width: 0px;"><colgroup><col style="width: 40.1667%;"></col><col style="width: 59.9286%;"></col></colgroup><tbody><tr><td style="border-width: 0px;"><video controls="controls" height="600" src="https://docs.scenario.app/attachments/52?open=true" width="300"></video></td><td style="border-width: 0px;">## Verhalten in der App

<div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling"><div class="flex max-w-full flex-col grow" id="bkmrk-startet-beim-szenena"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- Startet beim **Szenenaufruf** und zählt **sichtbar** herunter.
- Läuft **szenenübergreifend weiter**, wenn du es so planst (z. B. durch direktes Weiterleiten ohne Entfernen).
- Bei **Ablauf**:
    
    
    - **mit** Zielszene → sofortiger Wechsel in diese Szene (z. B. „Zeit abgelaufen“).
    - **ohne** Zielszene → Timer stoppt bei 0; du kannst den nächsten Schritt selbst steuern.

</div></div></div></div></div></div></div></div>> Hinweis: Du kannst einen aktiven Countdown später mit **„Elemente entfernen“** gezielt beenden/ausblenden.

</td></tr></tbody></table>

<div class="flex max-w-full flex-col grow" id="bkmrk--1"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">---

</div></div></div></div>## Typische Einsätze

<div class="flex max-w-full flex-col grow" id="bkmrk-zeitdruck-f%C3%BCr-r%C3%A4tsel"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **Zeitdruck für Rätsel** (z. B. 3 Minuten zum Entschlüsseln).
- **Bonusfenster**: Nur innerhalb von 2 Minuten gibt’s Extra-Punkte / alternative Szene.
- **Pacing**: Nach 10 Minuten automatisch zur nächsten Story-Phase springen.

---

</div></div></div></div>## Best Practices

<div class="flex max-w-full flex-col grow" id="bkmrk-klar-kommunizieren%3A-"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">- **Klar kommunizieren**: In der Szene kurz erwähnen, was beim Ablauf passiert.
- **Fallback planen**: Eine **Zielszene** für „Zeit abgelaufen“ wirkt sauberer als ein „stiller“ Ablauf.
- **Nicht stapeln**: Parallel laufende Timer verwirren – nutze **einen** aktiven Countdown gleichzeitig.
- **Entfernen nach Erfolg**: Wenn das Team die Aufgabe vorzeitig schafft, den Countdown mit **Elemente entfernen → Countdown** stoppen, damit er nicht weiterläuft.
- **Playtests**: Zeiten real testen (Wegstrecken, Eingaben, GPS-Latenz berücksichtigen).

---

</div></div></div></div>## Kurz-Workflow

<div class="flex max-w-full flex-col grow" id="bkmrk-countdown-hinzuf%C3%BCgen"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="9365cf69-c5ea-45ed-bf86-1ad204df00f3" data-message-model-slug="gpt-5-thinking" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">1. **Countdown** hinzufügen → **Zeit** setzen.
2. (Empfohlen) **Zielszene** für Ablauf wählen.
3. In Erfolgs-/Abbruchpfaden ggf. **Countdown entfernen**.
4. Speichern → auf Gerät testen.

</div></div></div></div><div class="mt-3 w-full empty:hidden" id="bkmrk--3"><div class="text-center"><div class="mx-auto"><div><div class="inline-flex rounded-xl border border-gray-100 dark:border-gray-700"><div class="me-12 flex items-center px-4 py-3 text-start"><svg class="icon-lg text-token-main-surface-primary-inverse" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M7.91667 3.33331C8.60702 3.33331 9.16667 3.89296 9.16667 4.58331V15.4166C9.16667 16.107 8.60702 16.6666 7.91667 16.6666C7.22631 16.6666 6.66667 16.107 6.66667 15.4166V4.58331C6.66667 3.89296 7.22631 3.33331 7.91667 3.33331ZM12.0833 5.83331C12.7737 5.83331 13.3333 6.39296 13.3333 7.08331V12.9166C13.3333 13.607 12.7737 14.1666 12.0833 14.1666C11.393 14.1666 10.8333 13.607 10.8333 12.9166V7.08331C10.8333 6.39296 11.393 5.83331 12.0833 5.83331ZM3.75 7.49998C4.44036 7.49998 5 8.05962 5 8.74998V11.25C5 11.9403 4.44036 12.5 3.75 12.5C3.05964 12.5 2.5 11.9403 2.5 11.25V8.74998C2.5 8.05962 3.05964 7.49998 3.75 7.49998ZM16.25 7.49998C16.9404 7.49998 17.5 8.05962 17.5 8.74998V11.25C17.5 11.9403 16.9404 12.5 16.25 12.5C15.5596 12.5 15 11.9403 15 11.25V8.74998C15 8.05962 15.5596 7.49998 16.25 7.49998Z" fill-rule="evenodd"></path></svg><div class="ms-4"><div class="text-token-main-surface-primary-inverse text-sm font-semibold"></div></div></div></div></div></div></div></div>

# Hinweise (Hints)

Mit **Hinweisen** gibst du zeitgesteuerte Hilfe zu einer Szene – bis hin zur **Lösung**. Du kannst bis zu **3 Hinweise** und **1 Lösung** definieren. Die Freigabe erfolgt **automatisch nach Zeit** (ab Betreten der Szene).

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/MqXgrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/MqXgrafik.png)Felder

**Hinweis 1–3**

- **Zeit (in Minuten):** Nach wie vielen Minuten der Hinweis **verfügbar** wird.
    
    
    - `0` = sofort verfügbar.
    - Feld leer lassen = Hinweis wird **nicht** verwendet.
- **Text:** Inhalt des Hinweises.

**Lösung**

- **Zeit (in Minuten):** Freigabezeit für die **komplette Lösung** (meist deutlich später als die Hinweise).
- **Text:** Lösungstext.

---

<table border="1" id="bkmrk-verhalten-in-der-app" style="border-collapse: collapse; width: 100%; border-width: 0px;"><colgroup><col style="width: 42.5343%;"></col><col style="width: 57.4398%;"></col></colgroup><tbody><tr><td style="border-width: 0px;"><video controls="controls" height="600" src="https://docs.scenario.app/attachments/53?open=true" width="300"></video></td><td style="border-width: 0px;">## Verhalten in der App

- Die Uhr startet **beim Eintritt in die Szene**.
- Sobald ein Hinweis freigegeben ist, erscheint in der UI das **Hinweis-Badge** (mit Zähler) – Spielende können ihn dann **öffnen**.
- Hinweise bleiben nach Freigabe **dauerhaft verfügbar** (auch wenn die Szene kurz verlassen wird).
- **Gelesen/ungelesen** wird getrackt; das Badge-Icon zeigt den Status (z. B. noch ausstehende/neu verfügbare Hinweise).
- Erreicht die Szene das Lösungs-Zeitfenster, wird zusätzlich **„Lösung“** angeboten.
- Wenn du einzelne Felder leer lässt, werden sie **übersprungen**.

> Tipp: Die Hinweiszeiten sind **relativ** und **unabhängig** voneinander. Beispiel: H1 nach 2 min, H2 nach 5 min, Lösung nach 10 min.

---

</td></tr></tbody></table>

---

## Gute Praxis

- **Staffelung:**
    
    
    - H1: kleiner Schubs (z. B. Richtung/Ort).
    - H2: konkreterer Tipp.
    - H3: fast direkt vor die Nase.
    - Lösung: vollständig.
- **Zeiten real testen:** GPS-/Wegzeiten und Gruppen-Tempo berücksichtigen.
- **Klar &amp; kurz schreiben:** Ein Hinweis = ein Gedanke.
- **Keine Spoiler in H1:** Spannung erhalten.
- **Mit Countdown kombinieren:** Bei engem Zeitlimit Lösung ggf. früher anbieten.
- **Barrierefrei:** Wichtige Zahlen/Begriffe eindeutig (keine reinen Farbhilfen).

---

## Beispiele

- Stadt-Rätsel: `H1 2′` „Schau auf Augenhöhe an der Tür.“, `H2 4′` „Links neben der Klingel.“, `Lösung 7′` „Code: 4711“.
- Suchaufgabe im Wald: `H1 3′` „Folge dem schmalen Pfad.“, `H2 6′` „Moosiger Stein rechts.“

---

## Kurz-Checkliste

1. Für jede Szene sinnvolle **H1–H3 + Lösung** planen.
2. **Zeiten** eintragen (nicht benötigte Felder leer lassen).
3. **Texte** klar formulieren.
4. Szene testen → Zeiten ggf. anpassen.

# Foto-Challenge

Mit der **Foto-Challenge** sollen Spielende ein **neues Foto** aufnehmen, das zu deiner **Aufgabenbeschreibung** passt (z. B. „Brücke **und** Kirchturm gemeinsam im Bild“). Das Foto wird automatisch bewertet; je nach **Score** (0–100) leitest du in eine **Erfolgs-** oder **Fehl-Zielszene** weiter.

---

## [![grafik.png](https://docs.scenario.app/uploads/images/gallery/2025-09/scaled-1680-/55Ggrafik.png)](https://docs.scenario.app/uploads/images/gallery/2025-09/55Ggrafik.png)Felder

**Aufgabenbeschreibung**  
Kurze, klare Anweisung, was auf dem Foto zu sehen sein soll.  
Beispiele:

- „Rotes Fahrrad **vor** dem Brunnen“
- „Zwei Straßenschilder **im selben Bild**“
- „Teammitglied hält Ticket **lesbar** in die Kamera“

**Schwellenwert (0–100)**  
Grenze, ab der die Challenge als **bestanden** gilt.

- **Niedriger** = toleranter, **höher** = strenger.
- Praxiswerte: Outdoor 60–75, nahe/klare Motive 70–85.

**Retry erlauben**

- **An**: Nach Fehlversuch direkt **neues Foto** möglich.
- **Aus**: Bei Fehlversuch geht es sofort in die **Fehl-Zielszene**.

**Erfolgs-Zielszene / Fehl-Zielszene**  
Szenen für **bestehen** bzw. **nicht bestehen** (z. B. „Gut gemacht!“ / „Versuch’s noch mal – Tipp“).

**Notiz (optional)**  
Interne Redaktionsnotiz (für dich, nicht sichtbar im Spiel).

---

## Verhalten in der App

1. Die App öffnet die **Kamera** und zeigt die Aufgabenbeschreibung.
2. Nach dem Auslösen wird das Bild **automatisch bewertet** (Score 0–100).
3. **Score ≥ Schwellenwert** → **Erfolgs-Zielszene**.
4. **Score &lt; Schwellenwert** → mit **Retry** neuer Versuch, sonst **Fehl-Zielszene**.
5. (Optionales Projektverhalten) Aufgenommene Fotos können im **Verlauf/Upload** erscheinen.

> Kamera-/Speicherrechte müssen erlaubt sein. Diese Funktion erfordert zwingend eine Internetverbindung. Die Aufgabenprüfung erfolgt mit künstlicher Intelligenz.

---

## Gute Aufgaben schreiben (wirkt direkt auf den Score)

- **Konkret statt vage:** „Brücke **und** Kirche im selben Bild“ statt „Macht ein schönes Foto“.
- **Objekte &amp; Beziehungen nennen:** „Person hält **Zeitung** **vor** Café-Schild“.
- **Zählwörter verwenden:** „**Zwei** Straßenschilder“, „**eine** rote Blume“.
- **Meide Negationen:** „ohne Menschen“ ist schwer zuverlässig prüfbar – besser positiv formulieren.
- **Lesbarkeit/Qualität:** Wenn Text erkennbar sein soll, schreibe „**Text lesbar**“.
- **Kontext nutzen:** Ortsmerkmale (Brunnen, Turm, Logo) sind leichter prüfbar als Stimmungen.

---

## Praxis-Tipps

- **Schwelle testen:** Starte mit **70** und prüfe vor Ort unterschiedliche Licht-/Winkel-Situationen.
- **Hinweise kombinieren:** Nutze das **Hinweise**-Feature, falls Teams häufiger scheitern.
- **Cheat-Sicherheit:** Galerie-Import deaktivieren (falls Projektoption vorhanden) → nur **Live-Foto**.
- **Klare Kommunikation:** Kurz sagen, was bei Misserfolg passiert („Du kannst es gleich nochmal versuchen“).
- **Datenschutz:** Keine identifizierbaren Personen als Pflichtobjekt in sensiblen Bereichen.

---

## Kurz-Workflow

1. **Aufgabenbeschreibung** formulieren.
2. **Schwellenwert** setzen (z. B. 70), **Retry** wählen.
3. **Erfolgs-** und **Fehl-Zielszene** festlegen.
4. Speichern und **vor Ort testen** → Schwelle ggf. feinjustieren.

So baust du flexible Foto-Missionen, die ohne Referenzbild auskommen und trotzdem automatisch bewertet werden.

# Javascript

Mit **Javascript** kannst du Szenen mit eigener Logik erweitern – z. B. UI anpassen, kleine Effekte einbauen, Zeiten messen oder externe Schnittstellen triggern.

> **Wichtig:** JS ist **inkonstant** – beim Betreten **jeder** Szene wird es **neu** ausgeführt. Teile, die überall gelten sollen, gehören in die **Masterszene** `[[ ]]`.  
> Starte dein Script immer **leicht verzögert**, damit die Szene fertig gerendert ist:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">  
</div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```
setTimeout(function () { // dein Code hier }, 300); 
```

---

## Gute Praxis (sehr wichtig)

- **Idempotent denken:** Code darf mehrfach laufen, ohne doppelten Effekt zu erzeugen.  
    Nutze einen „Once“-Guard:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> () {  <span class="hljs-keyword">if</span> (<span class="hljs-variable language_">window</span>.<span class="hljs-property">__sceneOnce</span>) <span class="hljs-keyword">return</span>;  <span class="hljs-variable language_">window</span>.<span class="hljs-property">__sceneOnce</span> = <span class="hljs-literal">true</span>;  <span class="hljs-comment">// init …</span>}, <span class="hljs-number">200</span>);`</div></div>
- **Aufräumen:** Wenn du `setInterval`/Event-Listener setzt, räume sie auf (oder nutze `{ once:true }` bei `addEventListener`).
- **Robust warten:** Wenn du ein Element brauchst, das evtl. später kommt, warte kurz darauf:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
    </div></div>```
    function waitSel(sel, cb, tries=20){ const el = document.querySelector(sel); if (el) return cb(el); if (tries--) return setTimeout(()=>waitSel(sel, cb, tries), 100); } setTimeout(()=>waitSel('.btn-primary', btn=>{ btn.classList.add('pulse'); }), 200); 
    ```
- **Keine Blocker:** Lange Schleifen vermeiden; lieber Timings/Promises verwenden.
- **Fallbacks:** Netzaufrufe können an CORS/Offline scheitern → Fehler behandeln.

---

## Häufige Mini-Rezepte

### 1) Button-Label/Style anpassen

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-settimeout%28function--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> () {  <span class="hljs-keyword">const</span> btn = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'button'</span>);  <span class="hljs-keyword">if</span> (!btn) <span class="hljs-keyword">return</span>;  btn.<span class="hljs-property">textContent</span> = <span class="hljs-string">'Los geht’s'</span>;  btn.<span class="hljs-property">style</span>.<span class="hljs-property">filter</span> = <span class="hljs-string">'drop-shadow(0 6px 12px rgba(0,0,0,.25))'</span>;}, <span class="hljs-number">200</span>);`</div></div>### 2) Szene nach X Sekunden automatisch fortsetzen

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-settimeout%28function--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> () {  <span class="hljs-comment">// z.B. per Klick auf einen Weiter-Button simulieren</span>  <span class="hljs-keyword">const</span> next = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'[data-action="next"], .btn-continue'</span>);  <span class="hljs-keyword">if</span> (next) next.<span class="hljs-title function_">click</span>();}, <span class="hljs-number">10000</span>); <span class="hljs-comment">// 10 s</span>`</div></div>### 3) Einfache „Einmal“-Animation

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-settimeout%28function--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> () {  <span class="hljs-keyword">const</span> el = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'.dialog, .content'</span>);  <span class="hljs-keyword">if</span> (!el) <span class="hljs-keyword">return</span>;  el.<span class="hljs-title function_">animate</span>([{<span class="hljs-attr">opacity</span>:<span class="hljs-number">0</span>, <span class="hljs-attr">transform</span>:<span class="hljs-string">'translateY(8px)'</span>},{<span class="hljs-attr">opacity</span>:<span class="hljs-number">1</span>, <span class="hljs-attr">transform</span>:<span class="hljs-string">'none'</span>}],             {<span class="hljs-attr">duration</span>:<span class="hljs-number">400</span>, <span class="hljs-attr">easing</span>:<span class="hljs-string">'ease-out'</span>});}, <span class="hljs-number">150</span>);`</div></div>### 4) Soft-Gate per Tageszeit (Beispiel)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-settimeout%28function--4"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> () {  <span class="hljs-keyword">const</span> h = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>().<span class="hljs-title function_">getHours</span>();  <span class="hljs-keyword">if</span> (h < <span class="hljs-number">8</span> || h > <span class="hljs-number">20</span>) {    <span class="hljs-title function_">alert</span>(<span class="hljs-string">'Tipp: Diese Aufgabe klappt am besten bei Tageslicht.'</span>);  }}, <span class="hljs-number">250</span>);`</div></div>### 5) Ereignis mitzählen (lokal)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-settimeout%28function--5"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> () {  <span class="hljs-keyword">const</span> k = <span class="hljs-string">'tries_safe_open'</span>;  <span class="hljs-keyword">const</span> n = <span class="hljs-number">1</span> + +(<span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">getItem</span>(k) || <span class="hljs-number">0</span>);  <span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">setItem</span>(k, n);  <span class="hljs-keyword">if</span> (n >= <span class="hljs-number">3</span>) {    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'3 Fehlversuche – zeige Hilfe.'</span>);    <span class="hljs-comment">// hier könntest du z.B. einen Hilfe-Button einblenden</span>  }}, <span class="hljs-number">200</span>);`</div></div><div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--3"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## Typische Stolperfallen

- **Doppelte Listener**: Bei jeder Rückkehr in die Szene wird JS neu ausgeführt → `once`-Option nutzen:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-variable language_">window</span>.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'click'</span>, handler, { <span class="hljs-attr">once</span>:<span class="hljs-literal">true</span> });`</div></div>
- **Zu früher Zugriff**: Ohne Delay (`setTimeout`) existieren DOM-Elemente evtl. noch nicht.
- **Starke Manipulation am Layout**: Bedenke, dass die App auf vielen Displaygrößen läuft – nur sanft stylen.
- **Blockierende Prompts/Alerts**: Sparsam einsetzen; sie unterbrechen den Flow.

---

## Checkliste

1. **Delay** einbauen (`setTimeout` 150–300 ms).
2. **Idempotent** &amp; ggf. **Once-Guard** verwenden.
3. Wo nötig: **waitSel**/Observer nutzen.
4. Netz-/Fehlerfälle abfangen.
5. Auf mehreren Geräten testen.

Damit bekommst du stabile, kleine Scripts, die zuverlässig mit der Szenenlogik zusammenspielen.

Gute Beispiele "ready to use" findest du auch unter [Hacks](https://docs.scenario.app/books/storyboard/chapter/hacks-tipps "05 Hacks & Tipps").

# Stylesheets (Benutzerdefinierte Stile)

Mit **Stylesheets** kannst du eigenes **CSS** einbinden.  
Wichtig: **Stylesheets sind konstant** – einmal geladen, wirken sie **im ganzen Spiel** (alle Szenen). Plane also **global** und arbeite bevorzugt mit **Klassen**, nicht mit generischen Element-Selektoren.

---

## Grundprinzipien

- **Global &amp; dauerhaft**: Regeln gelten szenenübergreifend, bis du sie änderst oder entfernst.
- **Mit Klassen arbeiten**: Viele Features (z. B. 360°-Hotspot) haben ein Feld **„CSS-Klasse“** – dort trägst du Klassen wie `hs-primary` ein und definierst sie hier im Stylesheet.
- **Schonend stylen**: Keine globalen Resets wie `*{ margin:0 }` oder `button{… }`, das kann UI-Elemente der App unerwartet verändern.
- **Spezifität niedrig halten**: Lieber `.hs-primary` als `div .container .hs-primary`. So bleibt es wartbar.

---

## Beispiele

### 1) Eigene Hotspot-/Button-Stile

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```
/* im Feature als CSS-Klasse: hs-primary */ .hs-primary{ background: #3faace; color:#fff; border:1px solid rgba(0,0,0,.25); border-radius:10px; padding:.5rem .75rem; box-shadow:0 6px 16px rgba(0,0,0,.15); } .hs-primary:hover{ transform:translateY(-1px); }
```

### 2) Utility-Klassen für Inhalte

Nutze sie in Textblöcken, Dialogen, etc. (wo Klassen gesetzt werden können).

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```
.u-shadow { box-shadow:0 8px 24px rgba(0,0,0,.18); } .u-round { border-radius:16px; } .u-muted { opacity:.75 } .u-center { text-align:center } .u-spacious { padding:1rem } 
```

### 3) Farb-Theme per CSS-Variablen

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--4"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```
:root{ --brand:#68bfdd; --brand-ink:#fff; } .btn-primary{ background:var(--brand); color:var(--brand-ink); }
```

### 4) Sanfte Szene-Einstiegsanimation (klasse auf Container setzen)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--5"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```
.scene-fadein{ animation:scnFade .45s ease-out both; } 
@keyframes scnFade{ from{ opacity:0; transform:translateY(8px); } to { opacity:1; transform:none; } } 
```

---

## Best Practices

- **Scoping**: Wenn möglich, gib Szenen/Features eigene Klassen und style **nur** diese (`.quiz-intro .u-muted`).
- **Kontrast &amp; Lesbarkeit**: Farben so wählen, dass AA-Kontrast (≥ 4.5:1) erreicht wird – besonders bei Buttons/Links.
- **Animationen sparsam**: Kurze, dezente Effekte (≤ 500 ms, `ease-out`).
- **Testen auf Geräten**: Unterschiedliche Displays, Dark-Mode und Zoomstufen durchprobieren.
- **Rollback**: Wenn etwas „zu global“ wirkt, überschreibe gezielt oder entferne die Regel (Stylesheets wirken sofort in allen Szenen).

---

## Mini-Checkliste

1. Klassen in Features vergeben (z. B. **CSS-Klasse** im Hotspot-Editor).
2. Passende Regeln hier definieren (keine globalen Tag-Selektoren).
3. Responsiv &amp; kontrastreich gestalten.
4. Auf mehreren Geräten testen.

So bleibt dein Look konsistent – und trotzdem präzise steuerbar pro Feature/Szene.

# Team-Sync deaktivieren

Mit **Team-Sync** werden Szenenwechsel können normalerweise **für das ganze Team gespiegelt** werden.  
Das Feature **„Team-Sync deaktivieren“** unterbricht diese Synchronisierung **für die aktuelle Szene**.

---

## Was passiert genau?

- **In dieser Szene gilt:**  
    Jeder spielt **lokal** auf seinem Gerät. **Szenenwechsel**, Button-Klicks, Medien-Starts usw. werden **nicht** an die anderen Teamgeräte gespiegelt.
- **Danach:**  
    Verlässt man die Szene (oder in der nächsten Szene ohne dieses Feature), greift der normale **Team-Sync wieder**.
- **Spielstand:**  
    Globale Zustände (z. B. Punkte/Variablen/Inventar, die du per Logik setzt) bleiben **teamweit** konsistent – du unterdrückst nur die **Navigation/Sync der Szene**, nicht deine eigenen Spielregeln.

> Kurz: **Navigation &amp; UI-Interaktionen lokal**, **deine Variablen/Inventar-Logik weiterhin global** (so wie du sie definierst).

---

## Typische Einsätze

- **Geheime Auswahl / Voting**  
    Jede Person wählt erst **alleine**; danach führst du per Logik wieder zusammen (z. B. Auswertungsszene).
- **Parallele Aufgaben**  
    Zwei Hinweise/Wege werden separat gelöst, ohne dass ein Gerät die anderen „mitzieht“.
- **Medien in Ruhe ansehen**  
    Video/Audio individuell abspielen, ohne dass ein „Weiter“ alle anderen rauswirft.

---

## So nutzt du es

1. **Feature „Team-Sync deaktivieren“** in **die betreffende Szene** einfügen.
2. Buttons/Navigation normal anlegen – sie wirken **nur lokal**.
3. In der Folgeszene (ohne dieses Feature) kann das Team wieder synchronisieren.

---

## Best Practices

- **Kommuniziere es im Text**: „Ihr entscheidet jetzt **jeweils für euch**.“
- **Wieder zusammenführen**: Plane eine **gemeinsame Folgeszene** (z. B. Auswertung), in der Team-Sync wieder aktiv ist.
- **Soft-Locks vermeiden**: Achte darauf, dass jede lokale Entscheidung **einen Weg zurück** oder **einen klaren Abschluss** hat.
- **Status trotzdem speichern**: Nutze Variablen/Inventar, um individuelle Eingaben zu sichern und später auszuwerten.
- **Karten/Orts-Trigger**: Wenn in dieser Szene noch Wegpunkte/QR/NFC genutzt werden, lösen sie **nur auf dem jeweiligen Gerät** aus – plane die Folgeaktionen entsprechend.

---

## Muster

- **Geheime Wahl**: Team-Sync aus → alle wählen A/B → Variable pro Gerät setzen → Sammelszene liest Variablen aus und zeigt Ergebnis.
- **Parallel-Lesen**: Jeder öffnet ein anderes Dokument/Foto im Inventar → danach gemeinsamer Button „Fertig – weiter“.

Mit „**Team-Sync deaktivieren**“ verhinderst du gezielt das Mitziehen der Gruppe – perfekt für individuelle Schritte innerhalb eines gemeinsamen Spiels.