Vollständige Bot-Partien sichtbar in Unity, gleich der Partie des Kerns (Vertical Function Test vor dem vollständigen Asset-Import). - VerticalFunctionTests (PlayMode): Seed 2 von Runde 1 bis zum Fall des Blau-Ancient (9 Runden; Türme fallen ab Runde 7, Grottenboss in Runde 8 gewonnen und in Runde 9 auf der Bot-Lane eingesetzt, bis zu 4 Helden) und Seed 9 ab Runde 21 mit der Fixture des Golden-Szenarios high_wave_21 (bis zu 125 Einheiten, 6 Helden, Fall des Rot-Ancient). Beide Fingerabdrücke gleich dem Kernlauf; 14 Bilder der Schlüsselmomente. - macOS-Player-Build (LunePlayerBuild) und LuneBenchmark: 1080p, VSync aus, 116 Einheiten: 161-199 fps, Hauptthread 1,3 ms, Simulation unter 0,1 ms; Ausreißer beim Present (p95 18-26 ms) analysiert und für U5 vorgemerkt. - Dokumentation: U2-WORLD (U2D, Abnahme), PORT-STATUS, PORT-QA, KNOWN-BEHAVIOR-DIFFERENCES (U2 ändert kein Verhalten), README. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.1 KiB
Bekannte Verhaltensunterschiede
Diese Datei führt jedes bekannte Verhalten des Unity-Ports, das von der Godot-Referenz (luneraria/g3, 1b540f2) abweicht oder bewusst gleich falsch bleibt. Jeder Eintrag nennt Ursache, Wirkung, Nachweis und Status. Neue Befunde kommen hier hinein, bevor sie behoben werden.
Legacy defects retained for parity
Diese Fehler der Referenz sind im Port absichtlich nachgebildet. Die Golden-Parität bleibt so erhalten, und Bots und Partien verhalten sich fachlich wie in Godot. Jeder Fehler wird später in einem eigenen Schritt behoben, mit neuer Golden-Referenz und eigenem Commit.
R1 · Bot vergisst die Bossjagd nach einer Champion-Buchung
| Ort in der Referenz | saumwacht-godot/scripts/luneraria/core/lune_bot.gd, _plan_boss (Zeile 150) |
| Ort im Port | Assets/Luneraria/Core/Simulation/LuneBot.cs, PlanBoss (Kommentar R1) |
| Ursache | Das Bot-Gedächtnis wird von zwei Stellen befüllt. Die Champion-Planung legt einen Eintrag nur mit champion_round an. _plan_boss liest danach memory.bar und memory.sent, die fehlen. GDScript meldet Invalid access to property or key 'bar' und bricht die Funktion ab. |
| Wirkung | Ein Bot, der vor seiner ersten Bossplanung einen Champion gebucht hat, schickt in dieser Partie nie eine Expedition in die Grotte. Das betrifft vor allem das Profil bossjagd. Die Bossjagd der Bots ist dadurch seltener, als die Profile vorsehen. |
| Nachweis | Beim Erzeugen der Golden-Referenzen trat der Fehler in vier Szenarien auf. Der Port liefert in allen 19 Szenarien dieselben Bossentscheidungen (Golden-Bereich „Boss“: 1.559 Werte, 0 Abweichungen). |
| Status | bewusst übernommen (U1, U1.5). Nicht korrigieren, solange U1 als Paritätsreferenz dient. |
| Korrektur später | In einer eigenen Bot- oder Balance-Phase: fehlende Felder mit Standardwerten anlegen (bar = 1,35, sent = 0), neue Golden-Referenz erzeugen und den Unterschied zu dieser Referenz dokumentieren. |
Laufzeitunterschiede
F1 · Mono rechnet float32-Zwischenwerte doppelt genau (behoben in U1.5)
| Ursache | Unitys Mono 6.13 hält float32-Zwischenwerte doppelt genau (erlaubt nach ECMA-335 I.12.1.3). .NET 8 und Godot runden nach jeder Operation. |
| Wirkung ohne Korrektur | Positionen weichen nach 10–60 s um bis zu 0,22 mm ab, die Blickrichtung um bis zu 1,6·10⁻³ rad. In mirror_match verliert eine Einheit in Schritt 599 ihr Ziel, und der Kampf dauert 4,8 s länger. Die Abweichung beeinflusst also Entscheidungen. |
| Maßnahme | Vec2 rundet jeden Zwischenwert explizit auf float32. Keine Regeländerung; .NET-Ergebnisse sind byteidentisch zu vorher. |
| Status | behoben. Im Unity-Editor (Release und Debug) sind alle Golden-Werte bitgleich. CoreIntegrationTests.CoreFloatArithmeticMatchesGodot sichert das ab. |
| Offen | IL2CPP sowie Player unter Windows 11 und Fedora 44 sind noch nicht gemessen (Build-Module fehlen). |
Details: U1.5-UNITY.md.
Unity-Szene (U2)
Die Szene ändert kein Verhalten. Der Host treibt den Kern im festen Takt; die Ansichten lesen nur. Die vollständige Bot-Partie (Seed 2) und die Partie ab Runde 21 (Seed 9) liefern in der Szene denselben Fingerabdruck wie der reine Kernlauf. Das gilt auch bei 30, 60 und 120 fps, unbegrenzter Bildrate, Rucklern und erhöhtem Spieltempo (U2-WORLD.md).
Darstellungswerte
| Wert | Warum kein Regelunterschied |
|---|---|
Blickrichtung (LuneUnit.Facing) |
Der Kern schreibt sie nur (Bewegungsrichtung ab 1 mm Schritt); keine Regel liest sie. Die Darstellung darf sie glätten. |
Technische Repräsentation
Klassen statt Dictionaries, stabile Einfügesortierung, 32-Bit-int, der ungenutzte Zufallsgenerator entfällt. Keiner dieser Unterschiede ändert Ergebnisse. Die Liste steht in U1-RULES.md.
Noch nicht gemessen
- IL2CPP-Player (alle Plattformen).
- Mono-Player unter Windows 11 (x64) und Fedora 44 (x86_64).
- Läufe auf x86-64-Prozessoren. Bisher lief alles auf Apple M5 (ARM64).