saumwacht-godot/docs/luneraria/ANLEITUNG.md
Martin Stickelbroeck 9f62e30377 G2: Ancients, Türme, Bossgrotte und Superboss; macOS- und Windows-ARM64-Pakete
Mondherz-Ancients (Saumkern-Kristall als Herz, Sichelklingen, Ringe, Krone,
Teamwappen, Energieadern) mit den Stufen stabil/instabil/kritisch, kurzem
Zusammenbruch und bleibender Ruine; der Sieg wartet nie auf die Grafik.
Turmfamilie aus einem Blender-Generator: Grenzwacht (Tower 1), Bastion
(Tower 2), Kernwacht (Basisturm in der Formensprache des Ancients), mit
Schadensstufen, Einsturz, Ruine und sichtbarem Angriff (Zielring, Aufladen,
Bolzen, Einschlag) - der Schaden bleibt vollständig in der Simulation.
Bossgrotte Mondschlund mit Tor, Treppe in die Tiefe, Altar, Säulen, Felsen
und fünf Zuständen; der Generator hält Abstand zur Top-Lane, die Höhle
braucht eine kleine Geländesenke (nur Darstellung). Superboss Schlundkrone
mit 24 Knochen und 11 Clips (inkl. Brüllen und Sieg), Adern in Teamfarbe,
dasselbe Modell für Grotte und Lane. Gemeinsame LN-Materialfamilie (Stein,
Metall, Kristall, Rune, Stoff, Mondwasser, Kreaturenhaut), Occlusion-Fade
ohne dithernde Schatten. Keine Regeländerung.

Geprüft: verify_g2 245/245, verify_g1 443/443, Regeln 91/91 und 73/73,
Stress 17/17, Balance 40 Partien identisch mit G1, verify_m1 38/38,
verify_m2 14/14, Netz 43/43 und Loopback 12/12, Legacy 209 und 463.
21 Ansichten vorher/nachher (1920x1080), Videos Turmkampf und Bossbegegnung,
Leistung G1/G2 auf demselben Mac (+0,5 ms in vollen Kampfansichten).
Pakete 0.17.0-g2 für macOS (Universal, ad-hoc signiert), Windows x64/ARM64
und Linux; macOS nativ und unter Rosetta, beide Windows-Pakete in Windows 11
ARM (Parallels, OpenGL-Fallback) mit --lune-smoke bestanden.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 14:12:49 +02:00

11 KiB
Raw Blame History

Installation, Start, Steuerung und Export

Spielen ohne Quellprojekt

Die Pakete liegen unter ../dist/luneraria/ (Version 0.17.0-g2):

Paket Start
ChampionsOfLuneraria-macOS-universal-0.17.0-g2.zip Entpacken, „Champions of Luneraria“ öffnen. Die App ist ad-hoc signiert, nicht notarisiert: beim ersten Start Rechtsklick → Öffnen (oder xattr -dr com.apple.quarantine "Champions of Luneraria.app"). Apple Silicon und Intel, ab macOS 11.
ChampionsOfLuneraria-Windows-x64-0.17.0-g2.zip ChampionsOfLuneraria.exe
ChampionsOfLuneraria-Windows-ARM64-0.17.0-g2.zip ChampionsOfLuneraria.exe auf Windows on ARM (z. B. Parallels auf dem Mac)
ChampionsOfLuneraria-Linux-x64-0.17.0-g2.zip ./ChampionsOfLuneraria.x86_64

Ohne Vulkan/Direct3D 12 (etwa in einer VM) wechselt das Spiel selbst auf OpenGL 3 (Kompatibilitätsmodus).

Start aus dem Quellprojekt

cd saumwacht-godot
godot --path .                 # Champions of Luneraria (Hauptszene scenes/luneraria.tscn)
godot --path . -- --legacy     # archivierter Saumwacht-Modus (scenes/main.tscn)

Voraussetzung ist Godot 4.7.2. Blender wird nur zum Neuerzeugen von Assets gebraucht, nicht zum Spielen.

macOS (seit G2):

  • Godot 4.7.2 liegt unter ~/Applications/Godot-4.7.2.app, Blender 5.2.2 LTS unter ~/Applications/Blender-5.2.2.app. Beide sind über ~/.local/bin als godot und blender aufrufbar.
  • Die Programme unter /Applications sind älter (Godot 4.6.2, Blender 5.1.2) und nicht für dieses Projekt gedacht.
  • Solange die Xcode-Lizenz nicht bestätigt ist, scheitern /usr/bin/python3 und brew install. Deshalb /opt/homebrew/bin/python3.12 für die Python-Werkzeuge nutzen (oder einmal sudo xcodebuild -license accept).
  • Das Projekt importiert Texturen zusätzlich als ETC2/ASTC; das braucht der Export für Apple Silicon.

Fedora 44 (bis G1): unverändert, godot und blender aus dem Paketmanager bzw. als 4.7.2/5.2.2.

Eine Partie

  1. Neue Partie → Bund (Glutpakt oder Wurzelbund) und deine Lane (Top, Mid, Bottom) wählen → Partie beginnen. Du spielst in Team Blau (Südwest) mit zwei Bot-Verbündeten gegen drei Bots in Team Rot. Top führt über das Hochland, Mid über die Mittelplattform, Bottom durch das Tiefland über die Deltabrücke; die Bossgrotte liegt zwischen Top und Mid.
  2. Planung: Truppen kaufen (Knöpfe oder 1–5), mit T/M/B einer Lane zuweisen (die blau umrandeten Aufmarschflächen vor den Basistoren zeigen, wo die Armee antritt), mit ↑ aufwerten, mit × zurückgeben. Käufe aus derselben Planung werden voll erstattet, ältere mit 75 %. Startaufstellung kauft Front, Nahkampf und Fernkampf. Bereit (Leertaste) übernimmt alle Befehle verbindlich.
  3. Kampf: Er läuft automatisch. Deine Truppen rücken mit der eigenen Monsterwelle über ihre Lane vor. Leertaste oder P pausiert, Tempo 1×/2×/4×.
  4. Abrechnung: Getötete Monster und Gebäude bringen Gold, dazu kommt das Rundeneinkommen. Deine Truppen kehren geheilt zurück. Türme und Kerne behalten ihren Schaden.
  5. Die Partie endet erst, wenn ein Ancient fällt. Es gibt kein Rundenlimit.

Steuerung

Eingabe Wirkung
1–5 Truppe kaufen (Planung)
Leertaste Bereit / im Kampf Pause
P Pause
WASD, Pfeiltasten, mittlere Maustaste ziehen Kamera verschieben
Mausrad Zoom (nah flacher, weit steiler)
F2 / F3 / F4 Kamera auf Top / Mid / Bottom
Tab / Lane-Knöpfe links Kamera auf die nächste Lane
B eigene Basis (Ancient)
G Bossgrotte
H eigener Held
O ganze Karte
R Kamera zurücksetzen (Drehung, Zoom, eigene Lane)
Q / E Kamera um 45° drehen
Minimap klicken/ziehen Kamera springt dorthin
F1 Optionen und Steuerung
M / F11 Ton / Vollbild

Prüfungen

godot --headless --path . res://tests/luneraria/test_lune_core.tscn        # Regeln M1 (91, inkl. Spiegeltest)
godot --headless --path . res://tests/luneraria/test_lune_m2.tscn          # Regeln M2 (73)
godot --headless --path . res://tests/luneraria/test_lune_net.tscn          # Netzwerkprotokoll (43)
python3 tools/luneraria/net_rounds.py                                       # Host + 2 Gäste, 5 Runden, Wiedereinstieg
godot --path . --resolution 1280x720  res://tools/luneraria/verify_m1.tscn # echte Bedienung, volle Partie (38)
godot --path . --resolution 1920x1080 res://tools/luneraria/verify_m2.tscn # Helden, Items, Grotte, Boss (15)
godot --headless --path . res://tools/luneraria/sim_match.tscn -- --seeds=1,2,3 --limit=80
godot --headless --path . res://tools/luneraria/balance_run.tscn -- --compositions=20 --limit=60 --out=res://docs/luneraria/logs/m3/balance.json
godot --headless --path . res://tools/luneraria/balance_run.tscn -- --matchups --limit=60 --out=res://docs/luneraria/logs/m3/matchups.json
python3 tools/luneraria/analyze_balance.py docs/luneraria/logs/m3/balance.json
godot --headless --path . res://tools/luneraria/stress_run.tscn            # Wellen bis 10^6, Langlauf
godot --path . res://tools/luneraria/people_lineup.tscn -- --out=res://docs/luneraria/screenshots
godot --path . --resolution 1920x1080 res://tools/luneraria/lune_benchmark.tscn -- --out=res://docs/luneraria/logs/g1/perf-nachher-1920x1080.json
godot --path . --resolution 1920x1080 res://tools/luneraria/lune_review.tscn # Aufnahmen
godot --path . --resolution 1920x1080 res://tools/luneraria/verify_g1.tscn   # G1: Layout, Gelände, Kamera (443)
godot --path . --resolution 1920x1080 res://tools/luneraria/g_views.tscn -- --out=res://docs/luneraria/screenshots/g1/nachher  # Vergleichsansichten
# G2: alles auf einmal (Regeln, Netz-Regression, G1, G2, echte Anwendung, Stress, Balance, Legacy):
sh tools/luneraria/run_g2_tests.sh            # macOS: PYTHON=/opt/homebrew/bin/python3.12 sh tools/luneraria/run_g2_tests.sh
godot --path . --resolution 1920x1080 res://tools/luneraria/verify_g2.tscn   # G2: Bauwerke, Grotte, Boss, Occlusion (245)
godot --path . --resolution 1920x1080 res://tools/luneraria/g2_views.tscn -- --out=res://docs/luneraria/screenshots/g2/nachher  # Abnahmebilder
godot --path . --resolution 1920x1080 res://tools/luneraria/g2_cost_split.tscn   # Kostenaufteilung eines Bildes
godot --path . --resolution 1920x1080 res://tools/luneraria/g2_boss_sheet.tscn -- --out=/tmp/boss/  # Boss-Clips neben Held und Truppe
godot --path . --resolution 1920x1080 res://tools/luneraria/g2_probe.tscn -- --out=/tmp/probe/ --shots="grotte@-13.5,-13.5,20"  # freie Kamera-Probe
# Videos (1920 × 1080 erzwingt eine vorübergehende override.cfg mit window_width/height_override):
godot --path . --resolution 1920x1080 --fixed-fps 30 --write-movie /tmp/g2video/turm/frame.png res://tools/luneraria/g2_video.tscn -- --scene=turm
blender -b --python tools/luneraria/encode_video.py -- /tmp/g2video/turm docs/luneraria/videos/g2-turmkampf.mp4 30 1.0
# Legacy (Saumwacht) unverändert:
godot --headless --path . res://tests/test_runner.tscn
godot --headless --path . -- --smoke-test
godot --headless --path . -- --faction-test
godot --headless --path . -- --expedition-test

verify_m1 und verify_m2 brauchen ein Fenster (echte Maus-/Tastaturereignisse), nicht --headless.

Assets neu erzeugen

ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/build_tower.py
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/build_grotto.py
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/build_map_props.py
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/build_peoples.py
# G2: strategische Bauwerke, Grotte, Boss (schreiben .blend, GLB und assets/luneraria/g2/g2_manifest.json)
godot --headless --path . -s res://tools/luneraria/dump_grotto_site.gd   # Lane-Linien und Gelände um die Grotte für den Generator
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/g2/build_towers.py
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/g2/build_ancient.py
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/g2/build_bossgrotte.py
ALSOFT_DRIVERS=null blender -b --python-exit-code 1 --python assets-source/luneraria/g2/build_schlundkrone.py
python3 tools/luneraria/build_asset_matrix.py
godot --headless --editor --import --path .

Export

python3 tools/luneraria/build_luneraria_demo.py --check-only
python3 tools/luneraria/build_luneraria_demo.py

Erzeugt unter ../dist/luneraria/:

  • ChampionsOfLuneraria-Linux-x64-<ver>.zip
  • …-Windows-x64-<ver>.zip
  • …-Windows-ARM64-<ver>.zip
  • …-macOS-universal-<ver>.zip
  • build-manifest.json mit Größen und SHA-256.

Die Version steht einmal in project.godot unter [luneraria] config/version und erscheint auch im Menü. Mit --only macos,windows,... baut das Skript einzelne Pakete; Godot kommt aus PATH oder der Umgebungsvariable GODOT.

Das macOS-Paket schreibt Godot direkt als ZIP: Universal, ad-hoc signiert mit Hardened Runtime, nicht notarisiert. Windows ARM64 nutzt die installierten 4.7.2-Templates; Linux und Windows x64 nutzen die Templates im Repo.

Alte Saumwacht-Releases liegen unter ../_archiv/saumwacht-dist/. tools/build_demo.py (Saumwacht 0.15.0) passt seit M4 nicht mehr zu den umbenannten Presets.

Plattform-Kurztest eines Pakets: spielt eine kurze Partie, fotografiert Planung, Kampf, Grotte und Ancient und schreibt report.json.

"Champions of Luneraria.app/Contents/MacOS/Champions of Luneraria" -- --lune-smoke=/tmp/smoke/
ChampionsOfLuneraria.exe -- --lune-smoke=C:/Temp/smoke/

Netzwerk (experimentell, pausiert): Im Setup Hosten oder Beitreten mit Anzeigename, Adresse und Port (Standard 24571). Der Host ist autoritativ und rechnet den Kampf; Gäste sehen ihn über Momentaufnahmen. Freie Plätze sind Bots, bis jemand beitritt. Tempo, Pause und Revanche bestimmt der Host. „Bereit“ ist verbindlich. Ein Disconnect wird von einem Bot übernommen und ist kein Kernverlust; wer sich mit demselben Anzeigenamen wieder verbindet, bekommt seinen Platz zurück. Getestet sind Protokollchecks und ein lokaler Loopback über fünf Runden mit Wiedereinstieg – keine verifizierte Internetpartie auf sechs Rechnern, kein OpenGL- und kein Windows-11-Test. Kein Matchmaking, keine Hostmigration.

godot --headless --path . res://tools/luneraria/net_pair.tscn -- --role=host --rounds=4 &
godot --headless --path . res://tools/luneraria/net_pair.tscn -- --role=client --name=Gast --rounds=4
# mit Fenster und Gast-Aufnahmen: ohne --headless, Host mit --steps=0, Gast mit --shots=<Ordner>

Benutzereinstellungen

Der neue Projektname legt einen neuen Benutzerordner an (Linux ~/.local/share/godot/app_userdata/Champions of Luneraria, macOS ~/Library/Application Support/Godot/app_userdata/Champions of Luneraria, Windows %APPDATA%\Godot\app_userdata\Champions of Luneraria). Beim ersten Start übernimmt Preferences einmalig die preferences.cfg aus „Saumwacht · Glutpakt“. Die alte Datei bleibt unverändert; fehlt sie, gelten die Standardwerte.