Vertical-Slice-Spec schreiben #10
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #1
Blocked by: #6, #7, #8, #12
Das Ziel der Reise. Alles davor läuft hier zusammen.
Inhalt
Fertig, wenn ein Kontext, der nur diese Spec und die ADRs liest, mit dem Bauen anfangen kann.
In-Run-HUD: Layout steht
Mockup liegt im Repo unter
docs/design/hud-in-run.png.Aufbau: links das Gameplay-Fenster mit der Arena, rechts ein vertikales Panel über die volle Höhe. Das Panel trägt oben den Namen des aktiven Tabs, darunter etwa acht Zeilen im Schema
<Stat Name>/<Stat Value>links undBuy x1/<Cost>rechts. Ganz unten vier Tabs:Attack Shop · Defence Shop · Utility Shop · Ultimates
Was das festlegt
Buy x1) und zeigt Kosten pro Kauf. Das Schema lässt Platz fürBuy x10oderBuy Maxspäter, ohne das Layout zu ändern — im Slice nicht nötig.Zwei Konsequenzen, die woanders wirken
Für #4 / das Perf-Budget, in die günstige Richtung: Der Perf-Spike hat mit einem 1920×1080-Fenster gemessen, in dem die Arena vollständig sichtbar war und nichts frustum-gecullt wurde. Im echten HUD belegt das Gameplay-Fenster nur etwa zwei Drittel der Breite. Weniger Pixel pro Sprite heißt weniger Fill-Rate, und Rendering war mit 96–98 % der dominierende Posten. Die gemessene Obergrenze ist damit eher konservativ als knapp. Das ersetzt keine neue Messung, aber es entlastet die Zahl.
Für #8 / die Economy-Kurve: Acht sichtbare Zeilen mal drei Shop-Tabs ergeben eine Größenordnung von etwa 24 In-Run-Upgrades, wenn nicht gescrollt wird. Das ist eine Design-Zahl, keine Messung — aber sie grenzt ein, wie fein die Kostenstaffelung sein muss und wie viele Kaufmomente pro Run überhaupt sinnvoll sind. Zur Erinnerung aus #3: eine 20-Minuten-Session hat ~34 Wellen, bei einer Kaufentscheidung alle zwei bis drei Wellen also 12–17 Kaufmomente. Bei 24 verfügbaren Upgrades heißt das: der Spieler kann in einem Run nicht alles kaufen — das ist eine Entscheidung, kein Zufall, und sie macht die Kaufreihenfolge zum eigentlichen In-Run-Spiel.
Offen
Der Aufbau des Meta-Screens (Workshop, Cards, Slot-Fortschritt), was beim Tod passiert, und ob der HUD-Tab-Zustand über Runs hinweg erhalten bleibt.
Die Spec steht.
docs/spec-vertical-slice.md— 15 Features mit Akzeptanzkriterien, dazudocs/adr/0004-spatial-grid-fuer-gegner-nachbarschaft.mdund ein Nachtrag zu ADR-0002 §3.Abnahmekriterium für den Slice
Es prüft alle vier Takte des Loops in einer Beobachtung und bindet die Randbedingung aus #11 ein, dass der Slice das Card-System nicht nur enthalten, sondern zeigen muss. Der Neustart am Ende prüft Save/Load dort, wo es zählt.
Was die Spec zutage gefördert hat
Sechzehn Widersprüche und herrenlose Lücken — gefunden, weil hier zum ersten Mal jemand alle Quellen gleichzeitig gelesen hat. Der Widersprüche-Abschnitt bleibt in der Spec stehen; er ist kein Mangel, sondern ihr ehrlichstes Kapitel.
Ein echter Defekt, behoben: ADR-0002 rechnete
CritChanceundDefensePercentauf null. Beide habenbase = 0und beziehen ihre Wirkung nur auspoints—(0 + 0) × (1 + 0,37) × 1 = 0. Zwanzig Workshop-Level, eine Card und ein gekauftes Upgrade zusammen wirkungslos. Dieselbe Basis-null-Falle, wegen der es denflat-Akkumulator gibt; sie wurde dort fürmultgezogen und fürpointsübersehen.Korrigiert durch eine dritte Modus-Variante statt eines zweiten Bits:
Fractionfür Stats, die selbst ein Anteil sind —clamp((base + flat + points) × mult). Dort tragen alle drei Akkumulatoren dieselbe Einheit und werden addiert statt gegeneinander skaliert. Drei billigere Wege wurden geprüft und verworfen. Die vollständige Stat-Tabelle ist einzeln nachgerechnet, das Rechenbeispiel um einen Prozent-Stat erweitert, damit der Fall nicht nochmal durchrutscht.Intervalwar nicht betroffen.Drei Lücken geschlossen (Entscheidungen von Marvin):
card_slots, obwohl das Feld persistiert wird und Slot 2 im Abnahmekriterium steht.CoinGain,CoinsPerWave,CritCoinGain,FreeUpgradeChance.MetaGainbleibt ausdrücklich außerhalb des In-Run-Tabs, weil er sonst ein Coins-zu-Meta-Konvertierungspfad wäre.Ein Fund, der Fortschritt zerstört hätte: Das Debug-Panel springt zu Welle N, und das Run-Ende schreibt
highest_waveplus Meta-Währung in den Spielstand. Ein Sprung auf Welle 500 hätte den Slice mit einem Griff trivialisiert. Akzeptanzkriterium jetzt: ein Run mit benutztem Debug-Panel schreibt nichts nachprogress.toml. Wer das Panel baut, baut die Schreibsperre zuerst.Card-Drops überqueren die Run-Grenze, ADR-0003 §6 kannte sie nicht — dort standen nur
highest_waveund die Meta-Währung. Aufgelöst nach ADR-0003 statt gegen sie: Drops im Run puffern, am Run-Ende gemeinsam überführen. Wer es anders bauen will, erweitert zuerst §6, statt still ein zweites schreibendes System einzuführen.ADR-0004: das Grid ist geteilte Infrastruktur
Drei Systeme brauchen dieselbe Nachbarschaftsabfrage und wollten bisher jedes für sich scannen — die weiche Separation,
tower_fires Zielauswahl und der geteilte Reichweiten-Scan des Auslöse-Systems. Genau der Scan, dessen Siebenfach-Ausführung pro Frame in #12 als Bruchstelle benannt wurde.move_enemies, also ≤ 0,10 ms bei 10 000 Gegnern. Die Logik gesamt steigt von 0,114 auf ≤ 0,22 ms von 16,67 ms.nmit der Soll-Population,mweilAttackIntervalsinkt. Das Produkt wächst quadratisch gegen ein festes Budget.Was offen bleibt, und das ist Absicht
Die vier freien Zahlen der Kurve · der Name der Meta-Währung · der Meta-Screen ·
MaxHealthmitten im Run (fällig vor dem ersten Defence-Shop-Upgrade, nicht als Fernfrage) ·SlowAura· die Zusammensetzung der Card-Liste · und zwei stehengelassene Widersprüche: die Nicht-Konvertierbarkeit ist nur in eine Richtung ausgesprochen, und Slots aus der Meta-Währung erzeugen für Slot 3–5 genau die Konkurrenz, die #11 für Cards verworfen hat.Damit ist die Destination der Karte erreicht: Spec plus die tragenden Architektur-Entscheidungen für einen spielbaren Vertical Slice. Vier ADRs, eine Spec, ein HUD-Entwurf.