# Bauen — eigene Häuser aus Modulteilen Stand 25.10.2026 (Umbau). Vorlage: **Modular Builder 0.2.0** von Michel Savadim, Godot-Erweiterung, Lizenz **CC0 1.0** (Code, Icons, Doku — siehe `addons/modular_builder/LICENSE`). Die Demo-Szene/Demo-Texturen der Vorlage sind nicht CC0 und liegen bewusst nicht im Repo (`ADDON_LIZENZ.txt`). ## Prinzip Ein Bauteil ist ein **ganz normales Bibliotheks-Objekt** (`bau_*`, Kategorie „bauteile“). Gesetzte Teile stehen in `objects`, ein Gebäude ist eine **Gruppe** (`group` + `group_names`). Dadurch gelten ohne Sonderfälle: * Undo/Redo, Auswahl, Verschieben, Drehen, Duplizieren, Löschen, Symmetrie * Speichern in der `.svmap` (kein eigener Block mehr, Server-Validierung V1–V17) * **Kollision serverkonsistent**: jedes Teil hat eine Trimesh-Datei (`library/kollisions/bau_*.json`) — Türen, Fenster, Schießscharten sind echte Löcher, die Treppe ist eine Stufenfläche (Stufen 20 cm). Editor-Playtest, Client und Server lesen dieselbe Datei. * Poly-Budget zählt wie bei jedem Objekt (`poly` = Dreiecke des Teils). ## Teile (Katalog: `src/editor/bau_katalog.gd`) | Gruppe | Teile | | --- | --- | | Fundament & Boden | Fundament, Boden/Decke (2 × 2 m, 20 cm) | | Wände (2 m breit, 3 m hoch) | Wand, Wand mit Tür (1,2 × 2,2 m), Wand mit Fenster, Wand mit Schießscharte, Brüstung (1,1 m), Eckpfeiler | | Dach & Giebel | Giebelwand, Satteldach, Pyramidendach | | Treppe | Treppe 4 × 2 m, 3 m hoch (15 Stufen) | Dazu im Tab „Pack-Module“: Container, Hangar-Tore, Betonsperren aus dem Military-Desert-Pack (normale Objekte). ## Snap (`src/editor/build_snap.gd`) * **XZ:** Wände auf die nächste Zellkante (Drehung ergibt sich aus der Kante, `R` dreht die Wand um), Böden/Dächer/Fundamente in die Zellmitte, Pfeiler auf die Zellecke, Treppen auf eine 4 × 2-m-Fläche. Zellen sind 2 × 2 m, global ab (0, 0). * **Y:** nie die Klickhöhe, sondern eine **Ebene** — Gelände (höchster Punkt unter der Grundfläche) oder Oberkante eines tragenden Teils darunter. Klick auf die Wandoberkante stapelt das nächste Geschoss. * **Ersetzen:** gleiche Art auf demselben Platz wird ersetzt (Tür in vorhandene Wand). Dasselbe Teil nochmal wird mit Erklärung abgelehnt. ## Dateien erzeugen Meshes, GLBs, Kollision und Registry-Fragment kommen aus dem Katalog: ```bash godot --headless --path . --script res://tools/gen_bauteile.gd -- \ --client ../scopedvr-client --server ../scopedvr-match-server (cd ../scopedvr-match-server && python3 tools/merge_object_library.py) ``` Danach `library/objects.json` in Client und Editor angleichen (`tools/sync_objects.sh`). `tests/test_bauen.gd` prüft, dass die Registry zum Katalog passt. ## Alte Maps Die frühere Sektion `gebaeude` (Bauen-Modus vom 20.10.) wird beim Öffnen in `bau_*`-Objekte einer Gruppe übernommen (`BauOps.migriere_gebaeude`). Wandhöhe ist jetzt 3 m statt 2 m — alte Häuser bitte kurz prüfen und neu speichern.