# U3 · G3-HUD portieren Stand: 1. Oktober 2026. | Teil | Inhalt | Zustand | | --- | --- | --- | | U3A | Entscheidung UI Toolkit, Sichtmodell mit Privatsphäre, menschlicher Sitz, Theme-Grundlagen (Farben, Platten, Symbole, Schriften) | **fertig** | | U3B | Komponenten, Porträts, Tooltip, alle HUD-Bereiche, Optionen, Partieende | **fertig** | | U3C | Eingabe und Befehle: Tasten, Kamera-Ziele, Auswahl im Feld, Bereit-Sperre, Planungsvorschau | **fertig** | | U3D | Prüfung (Teile A–H von `verify_g3`), Spieltest über die echte Oberfläche, Bilder, Leistung | **fertig** | Funktionale Referenz ist das G3-HUD aus Godot (`../saumwacht-godot/docs/luneraria/G3-HUD.md`, Commit `1b540f2`). Es wird übertragen, nicht neu erfunden. ## Zu übertragen - Ancient-Anzeige, Welle und Phase, Gold. - Drei Lanes mit Bedrohung und Türmen, Teammitglieder. - Einheitenkarten, Armee. - Held mit Stufe, Erfahrung, drei Itemslots und Talenten. - Angriffschampions, nächste Welle, Bossstatus. - Minimap, Bereit-Zustand, Tooltips, Ereignisse. - Datenzugang über ein Sichtmodell mit denselben Privatsphäre-Regeln wie `LuneHudModel`. Die geplanten Helden (`PlannedHeroes`) mit Command-Menü für Ultimates sind im Layout vorzusehen. Der Bestand in Godot umfasst rund 5.100 Zeilen: - `lune_hud.gd` (1.058 Zeilen), - `lune_hud_model.gd` (333), - 22 Komponenten, - Theme (`lune_ui_theme.gd`, `forged_style.gd`) und Vektorsymbole (`lune_glyphs.gd`), - Minimap, Porträt-Cache, Optionen, - die Verdrahtung in `lune_game.gd` (Befehle, Tasten, Kamera, Auswahl). Das Hauptmenü (`lune_menu.gd`, mit Netzwerk-Host/Join) ist der Startbildschirm des Spiels und gehört nicht zum HUD. ## Entscheidung: UI Toolkit Vor Beginn war eine kurze technische Bewertung gefordert, dann **ein** System als Hauptlösung. Gewählt ist **UI Toolkit**; uGUI kommt im HUD nicht vor. | Kriterium | UI Toolkit | uGUI | | --- | --- | --- | | Aufbau wie in Godot (Komponenten im Code, Container) | `VisualElement` und Flexbox entsprechen Godots Box-Containern; Komponenten sind C#-Klassen | GameObjects mit RectTransform und Layout-Gruppen; jede Zeile ein Objekt, Layout-Gruppen teuer beim Neuaufbau | | Eigenes Zeichnen (Godot `_draw`: Platten, 50 Symbole, Balken, Minimap) | `generateVisualContent` mit `Painter2D` (Pfade, Bögen, konkave Flächen) und eigenen Meshes (Verlauf) | eigene `Graphic`-Klassen; konkave Flächen müsste man selbst triangulieren | | Skalierung wie Godot (`canvas_items`, `expand`, Basis 1600×960) | `PanelSettings`: Scale With Screen Size, Expand, 1600×960 ergibt bei 16:9 dieselbe logische Fläche 1706×960 | `CanvasScaler` gleichwertig | | Prüfbarkeit im Batchmodus | Panel rendert in eine RenderTexture beliebiger Größe; Elemente per Name und Pick abfragbar | Canvas über eine Kamera rendern; Abfragen über GameObjects | | Tooltips, Weltelemente | Laufzeit-Tooltip selbst bauen (Godot hatte ohnehin einen eigenen); Weltbalken sind schon Meshes | eingebaut nur im Editor; Weltraum-Canvas reif | | Empfehlung in Unity 6 | empfohlenes System für neue Laufzeit-Oberflächen | weiter unterstützt, älterer Ansatz | **Probe vor der Entscheidung** (`Tests/UI/PlayMode/UiToolkitProbeTests`, Bild `screenshots/u3/00-ui-toolkit-probe.png`): - Ein Panel rendert im Batchmodus in eine 1920×1080-Textur. - Die Position stimmt mit Godot überein: 12 logische Pixel ergeben 13,5 Pixel bei 1920×1080. - Die Platten mit Fasen, Verlauf, Innen- und Kantenlinie entstehen korrekt. - Alle 50 Symbole zeichnen sich, auch die konkaven (Mondsichel, Turm, Kreuz). - Die Schriften kommen aus Godots variablen Fonts. ## U3A · Grundlagen ### Sichtmodell und Privatsphäre Portiert nach `Assets/Luneraria/UI/Model/`, Verhalten wie in Godot: | Datei | Inhalt | | --- | --- | | `LuneHudModel.cs` | einziger Datenzugang des HUD: Phase, eigener Sitz (Gold, Entwurf, Rückgängig, Buchungen), Gebäude, Ancients, Mitspieler, Lanes, Boss, nächste Welle, öffentlicher Digest | | `LuneLaneThreat.cs` | Lane-Bedrohung RUHIG · UMKÄMPFT · UNTER DRUCK · KRITISCH, nur aus öffentlichem Zustand (Turm-HP, Positionen, Ankündigungen) | | `LuneStats.cs` | Wertzeilen und Tooltip-Inhalte aus den echten Definitionen (Schaden je Treffer, Tempo, Reichweite, Rüstungsmatrix) | Die Privatsphäre-Regeln gelten unverändert: - Gold, Entwurf, Rückgängig und neue Buchungen gibt es nur für den eigenen Sitz. - Von anderen sieht man Name, Lane, Bereitschaft, Mensch/Bot/offline und den bestätigten Helden. - Lanes, Gebäude, Boss und Wellen kommen aus öffentlichem Zustand. Eine Abweichung: Im öffentlichen Digest (Testhilfe) steht beim Boss die öffentliche Claim-Lane. Godot nahm dort auch die private Lane-Wahl des Wählenden auf, sodass der Digest für ihn vom Bild der anderen abweichen konnte. ### Menschlicher Sitz - `LuneMatchRunner` und `LuneMatchDriver` haben einen menschlichen Sitz bekommen (`HumanSlot`). - Die Bots planen nur die anderen fünf Sitze. Die Planung wartet auf „Bereit“ des Menschen, wie offline in Godot (`lune_game.gd`), und nach der Abrechnung beginnt sofort die nächste Planung. - Tempo (1×, 2×, 4×) und Pause wirken nur im Kampf. - Bot-Partien (`HumanSlot = -1`) laufen unverändert. Die Bildraten-Tests prüfen das mit denselben Fingerabdrücken. ### Theme, Symbole, Schriften - `Theme/LuneUiTheme.cs`: alle Farben aus `lune_ui_theme.gd` und dem Saumwacht-Menütheme, Zahlenformate (12.000, Dezimalkomma). - `Theme/LunePlates.cs`: die Platten aus `forged_style.gd` (Fase, Verlauf, Innenlinie, Kante, Schatten, Fokusring). - `Theme/LuneGlyphs.cs`: alle 50 Symbole aus `lune_glyphs.gd` mit `Painter2D`. - Schriften: Cantarell und Cinzel als statische SDF-Atlanten (`LuneUiAssetsBuilder`, `Settings/LuneUi.asset`, Lizenz OFL). - Unitys Textsystem hat keine Gewichtsachse. FreeType lädt die benannten Instanzen der variablen Fonts über den Face-Index (Instanz ≪ 16). - In Cantarell fehlt „★“ (Godot nahm eine Ersatzschrift). Das HUD zeichnet den Stern als Symbol. - **Gewichte (U3D korrigiert):** Das Theme der Referenz deklariert Cantarell 560/700–760 und Cinzel 700, wendet sie aber nie an. `SaumwachtTheme.font` schreibt `variation_opentype = {"wght": weight}` mit dem *String*-Schlüssel „wght“; Godot 4.7.2 ignoriert den (gemessen: gleiche Fortschritte bei 400, 560 und 700; nur der Integer-Tag ändert sie). G3 zeigt beide Fonts in ihrer Grundinstanz Regular 400, und so auch der Port. Die Rollen (`LuneFace`) bleiben getrennt, damit U5 echte Gewichte vergeben kann. - **Laufweite und Konturen (U3D):** Godots `spacing_glyph` (Pixel je Glyph) wird als UI-Toolkit-`letterSpacing` umgerechnet (Hundertstel der Schriftgröße). Titel, Welle und Gold bekommen Godots dunklen Saum (`outline_size`) als weichen Schatten statt einer TextCore-Kontur — die Kontur liegt auf beiden Seiten der Glyphenkante und frisst die dünnen Striche der Regular-Schnitte, Godots Outline wächst nur nach außen. ### Prüfung U3A | Test | Ergebnis | | --- | --- | | EditMode gesamt | 23/23, davon 12 neue: öffentliches Bild für alle sechs Sitze gleich (Planung und Kampf), fremde Entwürfe (Held, Champion-Buchung) bis zum Kampf unsichtbar, private Boss-Lane-Wahl, Lane-Bedrohung bei Turm-HP und Ankündigungen, Einheitenzahlen je Lane, Bosszustände, nächste Welle gleich der Regelwelle (Runden 1–24), Bereit-Sperre, Zahlenformate, menschlicher Sitz, Bot-Partie unverändert | | PlayMode-Probe | UI Toolkit rendert im Batchmodus (siehe oben) | ## U3B · Komponenten und Bereiche Alles liegt unter `Assets/Luneraria/UI/Hud/` und ist aus Godot übertragen: | Unity | Godot | Inhalt | | --- | --- | --- | | `LuneHud.cs` | `lune_hud.gd` | die fünf Bereiche, Synchronisierung (10 Hz Planung, 5 Hz Kampf, Minimap 10 Hz, Ereignisse 4 Hz), UI-Größe (mindestens 1560 × 880 logische Pixel), Ereignis-Erkennung aus öffentlichem Zustand, Tooltips | | `LuneUi.cs`, `LuneElements.cs` | `lune_ui_theme.gd`, `status_badge.gd`, `hp_bar.gd`, `tower_indicator.gd`, `tab_bar.gd`, `lune_glyph.gd` | Textvarianten, Platten- und Knopfvarianten, Grundelemente | | `LuneComponents.cs` | `resource_display.gd`, `team_panel.gd`, `unit_card.gd`, `army_chip.gd`, `item_slot.gd`, `event_feed.gd`, `modal_panel.gd` | Gold, Team, Kaufkarten, Armee, Items, Ereignisse, Fenster | | `LuneLanePanels.cs` | `lane_indicator.gd`, `boss_indicator.gd`, `next_wave_panel.gd` | Lanes, Bossgrotte, nächste Welle | | `LuneArmyPanels.cs` | `champion_panel.gd`, `unit_detail.gd` | Angriffschampions, ausgewählte Einheit | | `LuneHeroPanels.cs` | `hero_card.gd`, `hero_detail.gd` | Heldenkarte, Heldenfenster (Anwerben, Werte, Items, Talente) | | `LuneMinimap.cs` | `lune_minimap.gd`, `lune_minimap_overlay.gd` | Minimap mit eigener Ebene für den Kamerarahmen | | `LunePortraits.cs` | `portrait_cache.gd`, `portrait_rect.gd` | Porträts aus den echten Modellen, einmal gerendert | | `LuneTooltip.cs` | `lune_tooltip.gd` | der eine Tooltip | | `LuneSettingsPanel.cs`, `LunePreferences.cs` | `lune_settings.gd`, `preferences.gd` | Optionen (F1) und gespeicherte Einstellungen | Die offenen Punkte aus G3 sind umgesetzt: - **Champion-Etikett:** „1 WELLE“ steht als Band am unteren Porträtrand und verdeckt die Köpfe nicht mehr. - **Typ-Symbole:** Schadens- und Rüstungstyp stehen als farbige Symbole auf den Einheitenkarten. Die Farben gleichen der Wellenvorschau: Ein Schadenstyp hat die Farbe der Rüstung, gegen die er 130 % trifft (Legion-TD-Prinzip). - **Armeewert:** Die Summe des Einsatzes steht in der Armeezeile („Wert 185“). - **Helden auf der Minimap:** kleine Porträts im Goldring statt Punkten, der eigene Held mit weißem Ring (Dota-Prinzip). Die Heldenkarte hat einen reservierten Befehlsplatz für die Ultimates der geplanten Helden (`PlannedHeroes`, Auslöser `Command`). Er bleibt verborgen, solange keiner dieser Helden spielbar ist. ## U3C · Eingabe und Befehle `Assets/Luneraria/UI/Game/LuneGame.cs` ist das Gegenstück zur HUD-Seite von `lune_game.gd`. - **Befehle:** Die Befehle des Menschen laufen über dieselbe Schnittstelle wie die der Bots (`LuneMatch.Submit`). Jeder Befehl meldet sein Ergebnis im HUD zurück. - **Bereit:** Bereit geht an die Host-Schleife; der Kampf beginnt, sobald alle bereit sind. Nach einem Kampf ist Bereit eine Sekunde lang gesperrt. - **Tasten wie in G3:** - 1–5 kaufen, Leertaste meldet Bereit (im Kampf: Pause), P pausiert. - Tab wechselt die Lane, F2–F4 springen zu Top, Mid und Bottom. - B, G und H zeigen den eigenen Ancient, die Grotte und den eigenen Helden. - R setzt die Kamera auf die eigene Lane zurück. - F1 öffnet die Optionen, M schaltet den Ton, F11 das Vollbild, Esc schließt Fenster und Auswahl. - **Kamera und Maus:** - Klicks auf Lanes, Ereignisse, Banner, Bossgrotte und Minimap bewegen die Kamera. - Über HUD-Flächen zoomt das Mausrad die Welt nicht. - Ein Linksklick im Feld wählt eine eigene Figur (innerhalb von 34 px). - **Planung:** Die eigene Entwurfsarmee steht in ihrer Formation. Die eigenen Aufstellungsflächen leuchten; Lanes mit eigenen Einheiten sind hervorgehoben. - **Optionen:** Sie pausieren einen laufenden Kampf offline. - **Menü:** Ein Hauptmenü gibt es im Unity-Port noch nicht. „Menü“ fragt deshalb nach und beendet das Spiel. Bot-Partien (Tests, Benchmark) laufen unverändert; der Spielcontroller folgt dem Sitz der laufenden Partie. In der Szene ersetzt der Spielcontroller die U2-Debug-Anzeige. Die Szenen- und Bibliotheksbauer arbeiten jetzt idempotent: - Animator-Controller und Post-Processing-Profil werden an Ort und Stelle aktualisiert. - Vorher erzeugte jeder Szenenbau neue interne IDs in 15 Dateien, obwohl der Inhalt gleich blieb. - Die Szene selbst entsteht weiter bei jedem Bau neu; Unity vergibt dabei neue Objekt-IDs. - Zwei Bauten hintereinander ergeben inhaltlich dieselbe Szene. Ersetzt man die IDs durch Platzhalter, sind alle 2840 Objekteinträge gleich; nur ihre Reihenfolge in der Datei ändert sich, weil Unity nach ID sortiert. ## U3D · Prüfung und Abnahme ### Prüfung (Port von `verify_g3`, Teile A–I) `HudVerifyTests` zählt jede Prüfung und schreibt die Summen nach `tools/out/hud-verify-*.txt`. Die Referenz `verify_g3` der Godot-Seite zählt 715 Prüfungen; der Port hat denselben Umfang plus Teil I (Feld um das HUD, U3-Zugabe). | Teil | Inhalt | Prüfungen | Fehler | | --- | --- | ---: | ---: | | A | Layout 1152×720 … 2560×1440 und Ultrawide, UI-Skalen 90–130 % | 585 | 0 | | B | Partiestatus: Ancients, Türme, Lanes, Wellen mit zwei und drei Ziffern, nur eigenes Gold | 21 | 0 | | C | Held, Items, Talente, normale Einheiten (ohne Itemslots), Lane-Befehle mit Grottenwarnung | 23 | 0 | | D | Angriffschampions (zeitlich), Bossgrotte in allen Zuständen, Lane des Wählenden, Banner | 16 | 0 | | E | Bereit-Sperre, Bots, Privatsphäre, abgebrochener Menschensitz | 17 | 0 | | F | Eingabe: Minimap, Lane-Klicks, Tasten, Feldklicks, kein Klick-Durchgriff, Tooltips | 18 | 0 | | G | Ereignisse, kritische Warnungen, Bewegung reduzieren | 14 | 0 | | H | Aktualisierungsraten, Porträt-Cache | 5 | 0 | | I | Feld (U3-Zugabe): Aufstellungsflächen, Grotteneingang, ruhender Boss, Namensschilder, Eigentümer-Ring, Ancient-Balken | 19 | 0 | | **Summe** | | **718** | **0** | Dazu EditMode 23/23 (Kern 402 Prüfungen, Sichtmodell, Bildraten-Logik) und PlayMode 13/13 (Szene bei echten Bildraten, Vertical Function Test, Capture, Verify A–I, UI-Toolkit-Probe). Die Bildwerkzeuge `HudViewsTests` und der Spieltest `HudPlaytest` sind `Explicit` und laufen nur gezielt. Fingerabdrücke der Bot-Partien unverändert: Seed 2 `DCE95C96556F3A1A`, Seed 9 ab Runde 21 `7B8E43AEFC0D60C5`. ### Bilder | Ordner | Inhalt | | --- | --- | | `screenshots/u3/motive-1920x1080/` | die 14 G3-Motive (`HudViewsTests`, Port von `g3_views.gd`): Planung, Held, Items, Einheit, Champion, Boss verfügbar/angekündigt, Kampf Top/Mid/Bottom, eigener und gegnerischer Ancient kritisch, Turm zerstört, große Kampfansicht | | `screenshots/u3/pruefung/` | Schlüsselbilder der Teile B–F (Status, Held, Items, Einheit, Champions, Boss, Tooltip) | | `screenshots/u3/aufloesungen/` | Kampf bei 1152×720, 1280×720, 2560×1080, 2560×1440 (Teil A) | | `screenshots/u3/r1-*.png`, `r2-*.png` | Spieltest über die echte Oberfläche: Lane-Tooltip, Kampfbeginn, Pause, Karten-Tooltip, Kampf Bottom | Die 14 Motive liegen auch als JPEG bei 1280×720, 2560×1080 und 2560×1440 (Repository-Größe). Vergleichsbilder der Referenz: `../saumwacht-godot/docs/luneraria/screenshots/`. ### Spieltest über die echte Oberfläche `HudPlaytest` (Port von `g3_playtest.gd`) treibt die echte Partie nur über Eingaben: Klicks an Pixelkoordinaten von 1920×1080, Tasten, Zeigerbewegungen für Tooltips. Ein Tester schreibt Befehlsstapel nach `/tmp/lune_play/cmd-N.txt` und bekommt danach einen Screenshot zurück; der Protokoll aller Befehle mit Runde und Phase steht in `logs/u3/playtest-log.txt`. Geprüft in einem Lauf über drei Runden: Lane-Tooltip in der Planung, Bereit und Kampfbeginn, Pause im Kampf (P), Karten-Tooltip, Tastenkauf (4), Lane-Wechsel per F3/F4 und Kamera nach Bottom. Der Port hat noch kein Hauptmenü; der Spieltest startet deshalb in der Partie der G1-Szene. ### Leistung **Player** (macOS, Mono, Release; Apple M5, Metal; 1920 × 1080 im Fenster, VSync aus): Seed 9 in Runde 21, Spieltempo 1×, gemessen ab 10 s Kampf mit `LuneBenchmark`. Die Szene trägt seit U3 das HUD (Sitz 1 der Bot-Partie); `ui_ms_per_frame` zählt die HUD-Skripte (Tick des Panels plus Spielcontroller). | Ansicht | Einheiten | fps (Mittel) | Bildzeit Median | p95 | Sim | Views | **UI** | Hauptthread (Mittel/p95) | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | | ganze Karte (Zoom 64) | 116 | 169 | 4,60 ms | 13,05 ms | 0,094 ms | 0,309 ms | **0,090 ms** | 2,77 / 3,94 ms | | Mid-Lane nah (Zoom 22) | 63 | 218 | 3,90 ms | 9,60 ms | 0,044 ms | 0,332 ms | **0,078 ms** | 2,35 / 3,06 ms | Das HUD kostet unter 0,1 ms je Bild und liegt damit unter Simulation und Ansichten. Gegenüber den U2D-Läufen ohne HUD (158–160 bzw. 205–207 fps) ist die Bildrate im Rahmen der Laufstreuung; die Ausreißer beim Present (p95 10–13 ms) sind kürzer als in den früheren U2D-Spannen (18–26 ms), ohne dass sich daran etwas geändert hätte — das bleibt Laufstreuung und offene U5-Frage. Rohdaten: `logs/u3/player-benchmark-macos.json`. Befehle siehe [U2-WORLD.md](U2-WORLD.md#leistung) (Build `LunePlayerBuild.BuildMac`, Lauf mit `-luneBenchmark`). ### Feld um das HUD (Zugabe aus dem Motivvergleich) Der Vergleich der 14 Motive mit der Referenz brachte Darstellungen hervor, die zum G3-Bild gehören, aber noch nicht im Port standen: - **Namensschilder** (`LuneFieldTags`): Helden mit Stufe in Heldengold, Angriffschampions und der Boss in der hellen Teamfarbe. Ein eingesetzter Boss nennt, für wen er kämpft („SCHLUNDKRONE · für Blau“) — G3s Antwort auf die Farbnähe seiner Kristalle und Blaus Armeen. Feste Bildschirmgröße wie Godots `fixed_size`-Schilder, hinter allen HUD-Bereichen, ohne Maus. - **Eigentümer-Ring** am eingesetzten Boss in der Teamfarbe. - **Ancient-Balken** über den Ancients, solange sie beschädigt stehen (3,4 m breit, 11,2 m hoch, kameragerichtet). - **Ruhende Schlundkrone** auf dem Podest, solange die Grotte offen ist und kein Kämpfer dort steht (`lune_grotto_view.gd`), neutral, in ihrem Idle-Clip. Die Lichtzustände der Grotte (Runen, Kristalle, Funken) sind noch nicht übertragen. - **Grotteneingang** der eigenen Seite als Ring, solange die Grotte offen ist. - **Aufstellungsflächen** als eigene Objekte (vormals nur Renderer-Sichtbarkeit), beleuchtet, wenn die Lane eigene Einheiten hat. ### Befunde und Korrekturen | Befund | Maßnahme | | --- | --- | | Godot wendet die deklarierten Schriftgewichte nie an (String-Schlüssel „wght“ wird ignoriert) | Port zeigt wie G3 Regular 400; `Cinzel-Bold` ersetzt durch `Cinzel-Regular`; Rollen bleiben für U5 | | TextCore-Kontur frisst die dünnen Striche der Regular-Schnitte | Godots dunkler Saum als weicher Schatten; Laufweite aus `spacing_glyph` umgerechnet | | Layout der rechten Spalte und des Banners nutzte geschätzte Höhen | Folgt den echten Höhen von Top-Panel, Bottom-Leiste und Systemzeile (`GeometryChangedEvent`) | | Kamera startete in jeder Partie in derselben Ansicht | Start wie Godot `_ready`: eigene Lane in Planungsdistanz, Bot-Partie von oben | | Eigentümer-Ringe und Ancient-Balken fehlten in den Motiven | `OwnerRingRound`/`OwnerRingDiamond`, `AncientBarFill_*`, Balken und ruhender Boss in der Ansicht | ### Abnahme U3 | Vorgabe | Stand | | --- | --- | | G3-HUD übertragen (Ancients, Wellen, Gold, Lanes, Türme, Team, Einheitenkarten, Armee, Held mit Items und Talenten, Angriffschampions, nächste Welle, Bossstatus, Minimap, Bereit, Tooltips, Ereignisse, Optionen, Partieende) | erfüllt (U3A–C) | | Sichtmodell mit denselben Privatsphäre-Regeln wie `LuneHudModel` | erfüllt (U3A) | | Eingabe und Befehle wie in G3, Befehle über dieselbe Schnittstelle wie die Bots | erfüllt (U3C) | | Offene G3-Punkte: Champion-Etikett, Typ-Symbole, Armeewert, Helden auf der Minimap | erfüllt (U3B) | | Prüfung Teile A–H von `verify_g3` | erfüllt, 718 Prüfungen mit Teil I, 0 Fehler | | Spieltest über die echte Oberfläche | erfüllt (Runden 1–3, siehe oben) | | Bilder der 14 Motive und der Auflösungen | erfüllt | | Leistung gemessen, einschließlich HUD-Kosten | erfüllt (`ui_ms_per_frame` 0,08–0,09) | | Bot-Partien und Fingerabdrücke unverändert | erfüllt | | Bekannte Unterschiede dokumentiert | erfüllt (siehe unten und [KNOWN-BEHAVIOR-DIFFERENCES.md](KNOWN-BEHAVIOR-DIFFERENCES.md)) | ### Bekannte Grenzen - **Kein Hauptmenü** im Port; „Menü“ beendet das Spiel nach Rückfrage. Das Menü mit Netzwerk-Host/Join gehört zu U4. - **Grottenlicht** (Runen, Kristalle, Funken) fehlt; nur die ruhende Schlundkrone steht dort. - **Geplante Helden** behalten ihren reservierten Befehlsplatz, solange keiner dieser Helden spielbar ist. - **Windows- und Linux-Player** weiterhin an die fehlenden Build-Module gebunden ([U1.5-UNITY.md](U1.5-UNITY.md)). - **Schriftgewichte** wie in G3 absichtlich Regular 400; echte Gewichte sind eine U5-Entscheidung.