Top windet sich über das Hochland, Mid quert die Kluft über die Mittelplattform, Bottom führt durch das Tiefland über die Deltabrücke; Top und Bottom sind exakt gleich lang, alles bleibt spiegelsymmetrisch. LuneTerrain liefert ein exakt gespiegeltes Höhenfeld, auf dem Figuren stehen. Bossgrotte als Terrasse auf der Achse zwischen Top und Mid, Aufmarschbereiche je Lane, perspektivische Kamera mit Sprungtasten (F2–F4, B, G, H, O, R, Q/E). Bestandsassets wiederverwendet, neue Formen als Blockout für G2/G4. Geprüft: verify_g1 443/443, Regeln 91/91, M2 73/73, verify_m1 38/38, verify_m2 14/14, Netz 43/43, Loopback 12/12, Balance 40 Partien (Seitentausch 20/20), Legacy 209/463. Vorher/Nachher-Aufnahmen und Messungen in G1-KARTE.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.7 KiB
6.7 KiB
Architektur- und Migrationsentscheidungen
Stand: 27. September 2026 (M0).
Bestand (geprüft)
- Werkzeuge: Godot 4.7.2 (Fedora-Build; offizielle 4.7.2-Exportvorlagen unter
assets-source/phase6/export-templates), Blender 5.2.2 LTS, Forward+ mit OpenGL-Kompatibilitätsmodus. Kein Engine-Update. - Repository: Es gab kein Git. Angelegt wurde ein lokales Repository mit dem Baseline-Commit
c2b4476aufmain(unveränderter Stand 0.15.0, Phase 20A); die Arbeit läuft aufluneraria/m1. Screenshots und die Projekt-Doku außerhalb des Projektordners sind in../backups/vor-luneraria-2026-09-27-docs-und-screenshots.tar.gzgesichert. Keine uncommitteten fremden Änderungen;../.mimocodegehört zu einem fremden Werkzeug und bleibt unberührt. Ein Stand 20B existiert nicht. Keine CLAUDE.md. - Spiel: eine Szene
scenes/main.tscn, sieben Autoloads (AssetLibrary,DataCatalog,GameState,EconomyManager,WaveManager,Preferences,Soundscape), alle Oberflächen im Code. Kampf inscripts/combat/: Verteidiger gegen Angreifer je Lane, die Feindschaft hängt anis_attacker, die Lane anteam_id. - Baseline-Tests (
logs/m0-baseline/): 209 · 33 · 463 · 206 · 1.665 bestanden.
Entscheidungen
- Neuer Modus neben dem Legacy-Modus. Die Saumwacht-Regeln (zwei Bretter, 8/20 Wellen, Kern-HP-Entscheid, Arbeiter/Funken) widersprechen den neuen Produktregeln. Sie werden nicht umgeschrieben, sondern als Legacy-Modus archiviert:
scenes/main.tscnund die zugehörigen Tests bleiben lauffähig. Die neue Hauptszenescenes/luneraria.tscnstartet Champions of Luneraria. Die bisherigen QA-Schalter (--smoke-test,--faction-test,--expedition-test) leitet sie in die Legacy-Szene um. So vermischen sich die Wirtschaftsmodelle nicht (Arbeitsannahme E), und die technischen Regressionen bleiben erhalten. - Neue autoritative Simulation in
scripts/luneraria/core/als reine Datenklassen (RefCounted) ohne Szenenbaum. Der alte Kampf ist an zwei Bretter undis_attackergebunden. Übernommen werden Einheitenwerte (DataCatalog), Schadensmatrix, Fähigkeitsregeln (auf Teamfeindschaft umgeschrieben), Modelle und die Animationsanbindung (SkeletalFigure.update_combat,AnimatedFigure.pose).LuneBalance(Resource) enthält alle Zahlen.LuneMapenthält Lane-Polylinien, 16 Türme und 2 Kerne, Aufmarschflächen, Sperrlogik und die Grotte. Die Karte entsteht per Konstruktion spiegelsymmetrisch zur Diagonale x = z: Team 1 ist das Spiegelbild von Team 0.LuneCombatrechnet einen festen Schritt in zwei Phasen, die Ergebnisse sind reihenfolgeunabhängig.LuneMatchverwaltet Teams, Spieler, Gold, Besitz mit eindeutigen IDs, Befehle, Runden, Abrechnung, Sieg und Ereignisprotokoll.LuneWaveserzeugt datengetriebene, unbegrenzte Wellen mit Mengengrenze.LuneBotnutzt dieselbe Befehlsschnittstelle wie der Mensch.
- Autoritative Matchinstanz von Anfang an. Oberfläche und Bots senden nur Befehle (
LuneMatch.submit), die beim Phasenwechsel atomar geprüft werden. Darstellung und Tests lesen denselben Zustand. Zufall kommt nur aus einerRandomNumberGenerator-Instanz mit Seed (Wellenrotation, Bots). Das ist die Grundlage für M4 (Host/Join), ohne Bit-Identität über Plattformen zu behaupten. - Darstellung in
scripts/luneraria/view/: Kartenaufbau aus Bestandsmaterialien (Kluft-Shader, Kerne, Felsen, Bäume), neu erzeugte Türme (Blender-Generator), eine Einheitenansicht pro Kampfinstanz mit Positionsinterpolation zwischen den Simulationsschritten. Sichtbarkeit und Kamera beeinflussen die Simulation nicht. - Oberfläche in
scripts/luneraria/ui/mit dem gemeinsamenSaumwachtThemeund seinen Bauteilen. Titel und Menü werden auf Champions of Luneraria umgestellt. Die Eingabeabschirmung aus 20A bleibt. - Benutzereinstellungen: Der Projektname wird zu „Champions of Luneraria“, dadurch ändert sich der
user://-Pfad.Preferencesübernimmt beim ersten Start einmalig die altepreferences.cfgaus „Saumwacht · Glutpakt“ und protokolliert das. Fehlt sie, gelten die Standardwerte. - Tests: Neue Tests liegen unter
tests/luneraria/undtools/luneraria/, die Legacy-Tests bleiben unverändert und werden als „Legacy“ geführt. Neue Referenzen werden erst nach fachlicher Prüfung festgeschrieben. - M3-Nachtrag: Bots planen Items/Champions vor der Armee und helfen deterministisch (kein geteilter
rng), damit Spiegelmatches bit-symmetrisch bleiben. Kartenprops stammen ausmap_props.glb(MultiMesh, ENV_*-Kluftshader). Volksrepräsentantenp_*sind Asset- und Datenziele ohne Matcheinbindung; siehe VOELKER.md. Balance- und Stresswerkzeuge liegen untertools/luneraria/. - M4-Nachtrag:
scripts/luneraria/net/lune_session.gd(Node) kapselt ENet Host/Join. Der Host besitztLuneMatch, rechnet jeden Kampf und sendet je Sitz den öffentlichen Zustand plus nur dessen eigenen Entwurf (rpc_state), zum Kampfbeginn die Einheitenliste (rpc_combat_begin), danach Momentaufnahmen (rpc_frame, 20/s,PackedFloat32Array). Der Client baut daraus ein reines Anzeige-Abbild vonLuneCombat, auf dem nie eine Regel läuft. Clients senden nur Befehle (rpc_hellomit Protokollversion,rpc_submit,rpc_ready). Peer-ID → Sitz, ein Peer ein Sitz. Disconnect: Bot-Übernahme, kein Kernverlust, keine Hostmigration; Wiedereinstieg über den Anzeigenamen.LuneGamespricht offline direkt mitLuneMatch, im Netzspiel ausschließlich mit der Sitzung. Protokollteststests/luneraria/test_lune_net.gd, Mehr-Runden-Loopbacktools/luneraria/net_pair.tscnmit Treibertools/luneraria/net_rounds.py. Export-PresetsLuneraria-Linux/Luneraria-Windows, Demo-Bautools/luneraria/build_luneraria_demo.py. - G1-Nachtrag (Karte):
LuneMapbaut jede Lane aus Catmull-Rom-Kontrollpunkten ihrer blauen Hälfte (Endpunkt auf der Achse, gespiegelter Phantompunkt, dadurch knickfrei). Bottom wird per Bisektion auf die Länge von Top gelöst.LanePathsucht Segmente binär.- Die Simulation bleibt zweidimensional. Die Darstellung liest Höhen aus
scripts/luneraria/view/lune_terrain.gd(LuneTerrain): Höhenfeld aus Achsenkoordinate, Achsenabstand und gespiegelten Kartenelementen, daher exakt symmetrisch. Es wird für die Blau-Hälfte berechnet und gespiegelt, je Prozess einmal erzeugt; diewalk_heightliefert Deckhöhen statt Flussbett. lune_world.gdbaut Gelände, Wasser, Lanebeläge, Plattform, Deltabrücke, Basen, Grotte, Landmarken, Vegetationscluster und Aufmarschflächen aus Bestandsassets und Blockout-Primitiven.lune_camera.gdist eine perspektivische Kamera, derenzoomdie sichtbare Bodenhöhe bleibt; die Neigung hängt vom Zoom ab.- Die Grottenpunkte behalten ihre M2-Abstände zum Grottenmittelpunkt.