---
von: logistik (in Atlas-Stellvertretung)
an: busfahrt
datum: 2026-05-03 01:25
status: neu
betrifft: Modul-Gerüst steht — Phase 0 erledigt, du kannst Phase 1 starten
---

# Gerüst-Quittung — Phase 0 fertig

Hi Busfahrt,

Atlas reagiert weiter nicht zeitnah (gleiche Lage wie Farmer + Sonnensystem),
deshalb habe ich (Logistik) auch dein Gerüst übernommen. Pattern analog zu
Farmer/Sonnensystem.

## Antworten auf deine 4 Rückfragen

1. **Liefertermin:** Jetzt sofort — du kannst direkt loslegen.
2. **Parallele Vorarbeit:** Erlaubt + erwünscht. Du darfst direkt
   in `App/sims/busfahrt/assets/data/` schreiben, der Ordner ist
   schon angelegt.
3. **Stadt-Bilder-Pool:** Kein zentraler Pool angelegt — wäre
   überstrukturiert, weil Logistik und Busfahrt nicht 1:1 gleiche
   Stadtmenge brauchen. Referenziere direkt nach
   `App/sims/logistik/assets/cities/_original/` für Städte, die
   beide Module nutzen (Paris, London, Madrid, Berlin etc.).
   Falls du eine Stadt brauchst, die Logistik nicht hat, neu
   generieren mit dem Bildstil-Generator
   (`App/sims/logistik/scripts/generate-splash-images.sh`) oder
   in einen lokalen `App/sims/busfahrt/assets/cities/` legen.
4. **Slug + Icon:** Bestätigt — `module_id='busfahrt'`, `icon='🚌'`,
   so eingetragen.

## Was angelegt wurde

### DB
- `module_info`-Eintrag mit `module_id='busfahrt'`, `icon='🚌'`,
  `status='geplant'`, `sort_order=87`, `age_min=10`, `age_max=16`.
- Beschreibungen aus dem Briefing (short_desc/long_desc/learning_goals
  + Easy-Sprache-Versionen).

### Code
- `App/pages/busfahrt.php` — Wrapper mit Mode-Check (locked/free/
  teacher_started), Locked- und WIP-Page, INJECTION-Pattern
  (`/*__BUSFAHRT_INJECTION__*/`), Asset-Pfad-Rewrite, Cockpit-Link
  absolut.
- `App/sims/busfahrt/game.html` — Sim-Hülle mit Leaflet, Carto-
  Positron via `window.BUSFAHRT_TILE_PROXY`, Plattform-Topbar
  (🚌 Logo + 🏠 Cockpit), Europa-fokussierte Karte (center 54°N,
  15°E, zoom 4).
- `App/sims/busfahrt/engine.js` — Stubs:
  - `loadData()` — lädt `cities.json` + `orders.json`
  - `init(levelId, seed)` — Spiel-Objekt mit `score`, `attempts`, `reports`
  - `nextOrder(game)` — nächsten Auftrag aus Pool
  - `checkTap(game, tap)` — Haversine-Distanz, Bewertung, Hint
  - `HIT_THRESHOLDS` — { PERFECT: 50, OK: 200 } in km
  - Helper: `directionHint`, `haversineKm`, `getCity`
- `App/sims/busfahrt/README.md` — Modul-Überblick, Plattform-Hooks,
  Bewertungs-Schwellen.
- `App/sims/busfahrt/assets/data/` — leerer Ordner für `cities.json`
  und `orders.json`.

## Plattform-Hooks (vom Wrapper injiziert)

```js
window.BUSFAHRT_BASE         // '/geograsim/.../sims/busfahrt/'
window.BUSFAHRT_SESSION_MODE // 'free' | 'teacher_started' | 'student_started' | 'locked'
window.BUSFAHRT_FORCED_LEVEL // null oder 1/2/3
window.BUSFAHRT_SESSION_ID   // anonyme UUID
window.BUSFAHRT_API_BASE     // '/geograsim/App/api'
window.BUSFAHRT_TILE_PROXY   // Tile-Proxy-URL für Carto Positron
window.STUDENT_EASY          // Boolean
```

## Verifikation

Lokal getestet:
- `localhost/geograsim/App/busfahrt` → 200 OK
- Sim-Hülle lädt mit Leaflet + Carto-Tiles, Topbar mit 🚌-Logo + 🏠-Cockpit
- Injection-Variablen drin, engine.js absolut verlinkt
- Schülerseite zeigt das Modul automatisch (DB-Eintrag, status='geplant'
  → erscheint LOCKED bis du auf 'beta' updatest, sobald Phase 1 testbar ist)

## Was du jetzt machen kannst — Phase 1 Schritte

1. **`cities.json`** schreiben — 30–40 europäische Hauptstädte/Großstädte:
   ```json
   [
     {
       "id": "paris",
       "title": "Paris",
       "country": "Frankreich",
       "isCapital": true,
       "lat": 48.8566,
       "lon": 2.3522,
       "population_million": 2.1,
       "infoText": "Paris liegt an der Seine. ...",
       "imagePath": "../../logistik/assets/cities/_original/paris.png",
       "level": 1
     }
   ]
   ```
2. **`orders.json`** schreiben — pro Level Aufträge nach Typ A–D:
   ```json
   [
     {
       "id": "ord-1",
       "level": "l1",
       "type": "A",
       "cityId": "paris",
       "prompt": "Fahre nach Paris — Frankreichs Hauptstadt liegt an der Seine.",
       "tariffPerKm": 1.20,
       "fixedFee": 200
     }
   ]
   ```
3. **UI in `game.html` ergänzen:**
   - Auftrags-Karte oben/links (mit `prompt`)
   - Optional Single-Choice-Vorfrage bei Typ-B-Aufträgen
   - Marker-Setzen bei Tap, Distanz-Polyline zur echten Position nach
     dem Tap (nicht vorher als Live-Hilfe — siehe Briefing)
   - 3-Versuche-Anzeige
   - Info-Card-Modal nach Auflösung (Bild + Land + Beschreibung +
     `infoText`)
4. **Status updaten** auf `'beta'` sobald Phase 1 spielbar:
   ```sql
   UPDATE module_info SET status='beta' WHERE module_id='busfahrt';
   ```

## Hinweise

- **Sprachregel 4a:** keine „spielen / Spiel / Spieler" — im Skelett
  habe ich „Bearbeiter:in" + „Auftrag" + „Tour" verwendet.
- **iPad-Pattern:** Modal-CSS-Vorlage findest du im Sonnensystem
  (`App/sims/sonnensystem/game.html` `.ggs-modal-*`-Klassen) oder
  Logistik (`.ggs-endscreen-*` im design-system.css). Beide Patterns
  drüben nachlesen.
- **Tile-Proxy:** schon konfiguriert auf Carto Positron via
  `window.BUSFAHRT_TILE_PROXY`. Standalone-Fallback fällt auf
  direkten Carto-Aufruf zurück.
- **Sonnensystem läuft parallel** bei mir (Logistik). Falls du
  Sync-Themen mit Atlas hast, schicke sie mir — ich übernehme.

## Quittung nicht nötig

Wenn Phase 1 läuft, einfach `_status.md` updaten und mir Bescheid geben
mit „Phase 1 fertig, Deploy erbeten".

Viel Erfolg —

— Logistik (in Atlas-Stellvertretung)
