champions-of-luneraria/docs/port/PORT-STATUS.md
Martin Stickelbroeck 542a9646c8 H2 Brunhild: Figur, Skin Eiswalküre, Oberfläche, Nachweise
Meshy-Figur Brunhild (28.706 Dreiecke mit Lane-Fassung und Speer) mit
Ultimate-Clip Jump Attack, 113 Credits. Skin Eiswalküre über skin_variant.py
(Farbband über Rot, Mindestsättigung schützt Hauttöne). Heldenwahl bei fünf
Helden kompakter; Tests auf fünf Helden angehoben.
Kern 619/619 (h2 22), EditMode 34/34, PlayMode 19/19, Verify 718/0,
Selbsttest 30/30, Golden 0, Fingerabdruck unverändert; A/B mit Sylvara:
Karte gleich, Mid nah -4 %.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 17:21:50 +02:00

10 KiB
Raw Permalink Blame History

Port-Status · Champions of Luneraria in Unity

Stand: 11. Oktober 2026 (H2, Brunhild).

Referenz ist der Godot-Stand luneraria/g3 (1b540f2) in ../saumwacht-godot; er wird nicht mehr verändert. Engine: Unity 6.3 LTS (6000.3.20f1), Renderer URP. HDRP ist ausgeschlossen, bis ein Vergleich mit einer echten Szene etwas anderes nahelegt.

Zielplattformen sind Fedora 44 und Windows 11; macOS ist die Entwicklungsplattform.

Meilenstein Zustand Nachweis
U1 · C#-Simulation fertig (Referenzmeilenstein, luneraria/u1 = 4d6ed17): 402/402 Prüfungen, Golden-Parität mit Godot U1-RULES.md
U1.5 · Unity-Integrationsprüfung fertig: Kern im Unity-Editor 402/402 (Release und Debug), Golden bitgleich nach expliziter float32-Rundung in Vec2, Editor-Benchmark U1.5-UNITY.md
U2 · Unity-Spielwelt fertig: U2A Blender→FBX-Pipeline (9 Assets geprüft), U2B G1-Karte mit Materialsystem, U2C fester Takt und Ansichten (bildratenunabhängig nachgewiesen), U2D vollständige Bot-Partien sichtbar und gleich dem Kern; danach Batch-Import aller 86 Modelle, Einheiten mit eigenen Modellen U2-WORLD.md
U3 · G3-HUD portieren fertig (luneraria/u3): UI Toolkit, Sichtmodell mit Privatsphäre, menschlicher Sitz, alle HUD-Bereiche, Eingabe und Befehle, Prüfung 718/0, 14 G3-Motive, Spieltest, Leistung mit HUD U3-UI.md
U4 · Netzwerk fertig (luneraria/u4 = 769e622): LuneSession (Protokoll 4), TCP-Transport, Startbildschirm Host/Join, 43+12 Prüfungen, Mindestumfang M4. Nachtrag (luneraria/u4-nachtrag, in U5.3 zusammengeführt): Startbildschirm in der Szene, „Menü“ führt dorthin zurück U4-NETWORK.md
U5 · Visuelle Neuausrichtung (Vertical Slice Mid-Lane) fertig (luneraria/u5 = 2c1686b, Stufen luneraria/u5.2): 6 PBR-Sätze, Surface-Shader mit Albedo/Normal/ORM, Stufen Lane/Rand, Hit- und Turm-VFX, 133/180 fps. U5.3 (luneraria/u5.3 = 07fa457): Gebäude, Boss und Ringborkes Rinde auf PBR (11 Sätze); Bildfehler aus U5 behoben (doppelte Einfärbung, Datenkarten als sRGB, Streifen, bleichender Treffer-Flash, Nebel), Helligkeit und Grün wieder auf U3-Niveau U5.4 (luneraria/u5.4 = 4883d95): Surface-Materialien für alle 146 Figurenmaterialien (Metalle metallisch, Randlicht, Struktur in den Porträts), SSAO (abschaltbar), Leistung −13 % Karte / −16 % Mid U5.5 (luneraria/u5.5 = dd78c8d): Pilot (c386206): Meshy-Figur für den Kohlenbeißer g01 (Pipeline tools/meshy/, UV-Material mit Lava-Glut, Schatten ohne Normalen-Versatz), GPU-Batched-Skinning, Figuren-Stress −21 % Mid / −13 % Karte gegenüber Phase-4; Lane-Fassung (f0d1e93): 5.000-Dreiecke-LOD, Abstand −10 % Mid / −2 % Karte; Schlackenklaue g02 (714d0c6) als zweite Meshy-Figur, −11 % Mid / −1 % Karte; Schlackenwacht g03 (4e2b6bc), −8 % Mid / 0 % Karte; Funkenlanze g05 mit Lanze als eigenem Modell (eddf49d), +15 % gegenüber der Phase-18-Figur; Glasballiste g06 als Maschine mit übernommenem Skelett (aa77d0e); Aschenwerfer g07 (91ea297), −11 % Mid / +2 % Karte; Kraterrufer g08 (eb8a537), −9 % Mid / +10 % Karte; Herdhüter g09 (024937c), −4 % Mid / +6 % Karte; Sonnenesse g10 (02c8839), +11 % Mid / +15 % Karte; Basaltbastion g04 (9e253f4): alle zehn Glutpakt-Truppen sind Meshy-Figuren U5-VISUAL.md
H1 · Sylvara fertig (luneraria/h1-sylvara): erste spielbare Heldin nach dem Port mit Ultimate-Auslöser in der Planung und Skin-System (Blutmond); Referenzpartien unverändert ../luneraria/H1-SYLVARA.md
S1 · Strategie-Regeln fertig (luneraria/s1-strategie): Söldner-Einkommen (Legion TD 2), Kasernen und Rückkauf (Dota 2), Mondsegen (League of Legends) hinter dem Regelschalter „Erweitert“ (Standard im Spiel); Referenzregeln für Tests unverändert ../luneraria/S1-STRATEGIE.md
S2 · Glyphe, Rezepte, Ancient fertig (luneraria/s2-strategie): Glyphe (Dota 2), Item-Rezepte (Dota 2/LoL), Ancient-Stufen (Legion TD 2), Grottenjagd der Bots; hinter dem Regelschalter „Erweitert“ ../luneraria/S2-STRATEGIE.md
S3 · Bots, Neutrallager, Fog of War fertig (luneraria/s3-strategie): frühe Bot-Helden und Rotationsfehler behoben, Neutrallager mit LoL-Buffs, Fog of War mit Spähern (Dota 2) und Aufklärung in der Planung; hinter dem Regelschalter „Erweitert“ ../luneraria/S3-STRATEGIE.md
H2 · Brunhild fertig (luneraria/h2-brunhild): zweite Heldin des Champions-Konzepts mit Markierung und Betäubung, Skin Eiswalküre; Referenzpartien unverändert ../luneraria/H2-BRUNHILD.md

QA je Meilenstein: PORT-QA.md.

Bekannte Verhaltensunterschiede, auch die bewusst übernommenen Referenzfehler: KNOWN-BEHAVIOR-DIFFERENCES.md.

Offene Voraussetzungen

  • Build-Module für die Zielplattformen fehlen: Windows Build Support (Mono) und Linux Build Support (Mono), optional Linux IL2CPP und Linux Dedicated Server. Installation nur nach Freigabe (Details in U1.5-UNITY.md).
  • Kerntests und Player auf Windows 11 und Fedora 44 stehen deshalb aus; gemessen ist bisher der macOS-Player.

Entscheidungen

  • Regelkern ohne Unity (Luneraria.Core, noEngineReferences). Unity wird Adapter und Präsentation.
  • Verhaltensgleichheit statt Bitgleichheit. Verglichen wird mit dokumentierten Toleranzen; gemessen wurde auf dem Mac trotzdem Abweichung 0, in .NET 8 und im Unity-Editor.
  • Explizite float32-Rundung in Vec2 (U1.5). Unitys Mono rechnet float32-Zwischenwerte doppelt genau. Das änderte in einem Szenario eine Zielentscheidung, deshalb ist eine Toleranz hier nicht begründbar. Die Casts erzwingen Godots float32-Semantik auf jeder Laufzeit; Regeln und .NET-Ergebnisse bleiben unverändert.
  • Tabellen einmal aus Godot erzeugt (tools/port/gen_content.py); danach ist ContentData.cs die gepflegte Quelle.
  • Referenzfehler R1 im Bot-Gedächtnis ist bewusst übernommen (Parität) und für eine spätere Bot-Phase vorgemerkt.
  • Geplante Helden (Lucy, Ghaliga, Siegfried, Feena) stehen im Datenmodell, sind aber inaktiv, bis eine Heldenphase ihre Regeln umsetzt.
  • Neue Helden ergänzen, statt zu ersetzen (H1): Die drei Referenzhelden bleiben, neue Helden folgen ihnen in ContentData.Heroes (ReferenceHeroes hält die Godot-Liste für den Inhaltsvergleich). Ultimates lösen über eine in der Planung gewählte Regel aus, Skins sind kosmetische Planungswahl. Bot-Profile neuer Helden stehen außerhalb der Seed-Rotation.
  • Assets: Blender-Quellen und Generatoren sind die Quelle. Ein zentraler, reproduzierbarer Blender-Export erzeugt FBX für Unity; GLB nur, wo keine bessere Quelle existiert (U2A).
  • Prozedurale Welt gebacken (U2B): Gelände und Vegetation der G1-Karte hängen an Godots Rauschen und Zufallsgenerator; ein Godot-Werkzeug backt die Welt aus dem Referenzgenerator, Unity baut daraus die Szene. U5 bekommt eine neue Weltquelle.
  • Koordinaten: Unity = (−x, Höhe, y) der Kartenpunkte; FBX-Pipeline, Welt und Kamera nutzen dieselbe Umrechnung, das Bild entspricht Godots.
  • Host-Schleife (U2C): fester Takt mit Akkumulator; die Bildrate bestimmt nur die Zahl der Schritte je Bild. Nachweis über Fingerabdrücke der Partie.
  • Schriftgewichte wie in G3 (U3D): Die Referenz deklariert Gewichte, wendet sie aber nie an (String-Schlüssel „wght“ wird von Godot ignoriert). Der Port zeigt wie G3 Regular 400. Die Stilrollen bleiben getrennt, damit U5 echte Gewichte vergeben kann.
  • Netzwerk über TCP (U4): Die Referenz nutzt ENet; der Port nutzt TCP mit LuneWire (Nachrichten) und binären Kampfrahmen. Späte Rahmen werden über die Serial verworfen wie bei unreliable_ordered. Offline ist ein lokaler Host mit Bot-Plätzen (LuneSession.HostOffline).
  • PBR-Texturen aus Blender (U5): tools/blender/bake_pbr.py backt nahtlose Albedo-/Normal-/ORM-Sätze (Torus-Mapping). Der Surface-Shader legt sie triplanar über die Godot-Weltfarben.
  • PBR-Karten als Struktur um die Godot-Farben (U5.3): Albedo und Rauigkeit der gebackenen Sätze werden durch ihren Mittelwert geteilt. Die Godot-Farben und -Rauigkeiten bleiben der Durchschnitt, die Karten liefern Struktur; Normal- und ORM-Karten importieren als Daten (nicht sRGB).
  • SSAO standardmäßig an (U5.4, Entscheidung 9. Oktober 2026): Umgebungsverdeckung nach den opaken Objekten in halber Auflösung; in den Optionen abschaltbar. Kostet auf dem M5 9–13 % Bildrate.
  • Stufen statt flächiger Zielqualität (U5.2, Entscheidung 2. Oktober 2026): Der Lankorridor (22 m um Mittellinien, Gebäude und Grotte) trägt die vollen PBR-Sätze; Berge, Kluft und ferner Hintergrund behalten Farbe + Steinschicht (LuneZones, Surface _Quality, TerrainEdge). Gebäude, Einheiten, Wege und Wasser bleiben Lane-Stufe.
  • Modelle direkt in Git (1. Oktober 2026): Auch die Modelle des Batch-Imports liegen wie die U2A-Modelle im Repository, ohne Git LFS. Keine Datei ist größer als 40 MB; das Repository wächst auf etwa 240 MB.
  • Projektort außerhalb von iCloud Drive (1. Oktober 2026): Der Arbeitsordner TowerDefense zieht von ~/Documents/Projekte nach ~/Developer. iCloud Drive synchronisierte ~/Documents und legte Konfliktkopien an, die einen Player unbrauchbar machten (U2-WORLD.md, Batch-Import). Der Schutz in LunePlayerBuild bleibt.

Arbeitsweise

  • Ein Zweig je Meilenstein: luneraria/u1, luneraria/u1.5, luneraria/u2, … Pilotzweige tragen einen Suffix (c386206). Nach jedem Meilenstein kommen Tests, Bild, Leistung, bekannte Unterschiede und ein Commit.
  • Werkzeuge:
    • tools/run_core_tests.sh (Kern mit .NET).
    • Unity Test Runner: EditMode (Kern, Integration, Bildraten-Logik) und PlayMode (Szene bei echten Bildraten, Vertical Function Test).
    • CoreBatch, LuneAssetVerifier, LuneWorldBuilder, LuneWorldCapture, LunePlayerBuild im Batchmodus.
    • tools/blender/export_fbx.sh (Assets) mit dem Manifest aus tools/blender/make_manifest.py, tools/godot-golden/world_export.gd (Weltbake).
    • LUNE_EVIDENCE=<Ordner> leitet die Nachweise der PlayMode-Tests nach docs/port/logs/<Ordner> und docs/port/screenshots/<Ordner> um; ohne die Variable schreiben sie in die Ordner ihres Meilensteins.
    • tools/godot-golden/run_godot.sh (Godot-Referenz).
    • tools/dotnet/Luneraria.Core.Bench und CoreBatch.Benchmark (Leistung).