saumwacht-godot/docs/balance-report.md
Martin Stickelbroeck c2b447610c Baseline: Saumwacht 0.15.0 (Phase 20A) vor dem Umbau zu Champions of Luneraria
Unveränderter Ausgangsstand inklusive Masterprompt und Konzeptbildern
unter assets/. .godot/ und docs/screenshots/ bleiben laut .gitignore
unversioniert; letztere sind unter ../backups gesichert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 20:00:36 +02:00

100 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Saumwacht · Balance-Bericht
**Stand:** 12. September 2026 · Godot 4.7.2, Linux, headless · Diagnose des aktuellen Phase-2-Stands
## Methode
`tools/balance_sim.gd` spielt zwei KI-Duelle mit `SimpleAI`, `EconomyManager` und
`BattleController`. Die Simulation verwendet feste Startzustände und Schritte von
1/60 s. Beide Seiten erhalten die zuletzt abgeschlossene gegnerische Formation;
ihre aktuellen Aufträge bleiben verborgen. Der Lauf dauerte 11,5 s.
Der Diagnoseablauf folgt den hier relevanten Regeln von `WaveManager`:
`natural_count` zählt ausschließlich natürliche Angreifer. Sobald ein Kern
zerstört ist, endet das Match vor einer weiteren Abrechnung. Auch wenn im selben
Schritt der letzte Angreifer verschwindet, hat das Matchende Vorrang.
Aus dem Projektverzeichnis:
```bash
XDG_DATA_HOME=/tmp/saumwacht-data XDG_CONFIG_HOME=/tmp/saumwacht-config XDG_CACHE_HOME=/tmp/saumwacht-cache godot --headless --path . res://tools/balance_sim.tscn
```
Die Tabellen zeigen Lecks einschließlich Söldnern. „Abschussprämien“ sind die im
Kampf erfassten Prämien; sie werden nur bei **Abgerechnet = Ja** ausgezahlt.
„Goldbestand“ ist der tatsächliche Vorrat am Ende der jeweiligen Tabellenzeile.
Kernschaden summiert die ausgelösten Schadensereignisse und kann beim letzten
Treffer über die verbleibenden Kern-HP hinausgehen; Kern-HP werden bei 0 begrenzt.
## Standard gegen Standard
| Welle | Dauer s | Lecks 0/1 | Kernschaden 0/1 | Abschussprämien 0/1 | Goldbestand 0/1 | Wächter 0/1 | Abgerechnet |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: | :---: |
| 1 | 13,3 | 0/0 | 0/0 | 24/24 | 139/139 | 3/3 | Ja |
| 2 | 14,3 | 0/0 | 0/0 | 30/30 | 112/112 | 4/4 | Ja |
| 3 | 27,3 | 0/0 | 0/0 | 48/48 | 157/157 | 4/4 | Ja |
| 4 | 32,7 | 0/0 | 0/0 | 47/47 | 142/142 | 5/5 | Ja |
| 5 | 20,2 | 0/0 | 0/0 | 55/55 | 156/156 | 5/5 | Ja |
| 6 | 28,1 | 0/0 | 0/0 | 66/66 | 190/190 | 5/5 | Ja |
| 7 | 49,6 | 1/1 | 11/11 | 60/60 | 189/189 | 6/6 | Ja |
| 8 | 29,3 | 12/12 | 569/569 | 30/30 | 187/187 | 8/8 | Ja |
| 9 | 36,5 | 14/14 | 1098/1098 | 20/20 | 189/189 | 8/8 | Ja |
| 10 | 33,5 | 15/15 | 993/993 | 0/0 | 180/180 | 8/8 | Ja |
| 11 | 33,1 | 8/8 | 369/369 | 52/52 | 40/40 | 8/8 | Nein |
**Ergebnis:** Unentschieden in Welle 11, beide Kerne bei 0 HP. Insgesamt 50 Lecks
je Front; mittlere Kampfdauer 28,9 s bis zum jeweiligen Wellen- oder Matchende.
In diesem Lauf hielten beide Seiten Wellen 1–6 vollständig. In Welle 7 entstand
der erste Kernschaden; diese Welle dauerte mit 49,6 s am längsten. Ab Welle 8
nahmen Lecks und Kernschaden deutlich zu. Diese Beobachtungen markieren
Situationen für spätere Formationstests und Balanceversuche. Der Lauf isoliert
weder den Einfluss der Wirtschaft noch den von Aufwertungen, Zielwahl oder Sends.
Die tabellierten Werte beider Fronten stimmen in dieser Spiegelpartie überein.
Dies ist ein Befund für diese Ausführung und die aktuellen Eingaben, keine
plattformübergreifende Zusicherung bitidentischer Ergebnisse.
## Lernmodus gegen Standard
| Welle | Dauer s | Lecks 0/1 | Kernschaden 0/1 | Abschussprämien 0/1 | Goldbestand 0/1 | Wächter 0/1 | Abgerechnet |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: | :---: |
| 1 | 13,3 | 0/0 | 0/0 | 24/24 | 139/139 | 3/3 | Ja |
| 2 | 23,3 | 0/0 | 0/0 | 30/30 | 177/112 | 3/4 | Ja |
| 3 | 29,5 | 7/0 | 314/0 | 12/48 | 185/156 | 3/4 | Ja |
| 4 | 21,8 | 11/0 | 360/0 | 6/44 | 170/137 | 3/5 | Ja |
| 5 | 35,5 | 2/0 | 314/0 | 18/61 | 193/166 | 4/7 | Ja |
| 6 | 31,8 | 10/0 | 472/0 | 17/60 | 158/192 | 6/7 | Ja |
| 7 | 41,7 | 7/5 | 298/217 | 24/44 | 148/173 | 6/8 | Ja |
| 8 | 31,5 | 14/11 | 757/507 | 17/27 | 144/170 | 6/8 | Ja |
| 9 | 29,7 | 7/0 | 498/0 | 0/13 | 9/10 | 7/9 | Nein |
**Ergebnis:** Standard gewinnt in Welle 9 mit 2.276 Kern-HP. Der Lernmodus endet
bei 0 HP. Insgesamt 58/16 Lecks; mittlere Kampfdauer 28,7 s.
Der Lernmodus erlitt in dieser Partie ab Welle 3 Lecks, Standard erstmals in
Welle 7. Die letzte Tabellenzeile zeigt den Moment des Matchendes; die andere
Front muss dann nicht vollständig geklärt sein. Insbesondere bedeutet die 0 bei
Standard-Lecks in Welle 9 nicht, dass diese Front die ganze Welle gehalten hätte.
Aus diesem einzelnen Duell lässt sich weder eine Erfolgsquote der KI-Stufen noch
eine passende Schwierigkeit für menschliche Spieler ableiten.
## Geprüfter Umfang und Grenzen
Der Lauf endete mit Exit-Code 0 und meldete keine Verletzung der überprüften
Invarianten: Gold/Funken nicht negativ, Funkenobergrenze 400, maximal 8 Arbeiter
einschließlich Bestellungen, gültige eindeutige Zellbelegung im 6 × 8 Baufeld,
maximal 8 Sends und Einhaltung von Sendbudget und vorhandenen Funken. Beide
Partien erreichten ein Matchende innerhalb von 20 Wellen; kein beobachteter Kampf
überschritt 90 s.
Diese Prüfungen decken die während der zwei Partien besuchten Zustände ab. Sie
ersetzen keine gezielten Tests für Undo, Schadensmatrix, Fähigkeiten, Timeout
oder alle Siegpfade. Wellen nach dem jeweiligen Matchende wurden nicht gespielt.
Die Mechanik wird hier diagnostiziert; es wurden keine Balancewerte verändert.
Für die Balancearbeit in Phase 5 werden mehrere Formationen, andere Kauf- und
Sendpläne sowie menschliche Spieltests benötigt. Vor allem Ausgaben, Armeewert,
Arbeiterinvestitionen und kumuliertes Einkommen müssten zusätzlich erfasst
werden, um wirtschaftliches Schneeballen zu beurteilen. Der verbleibende
Goldvorrat allein beantwortet diese Frage nicht.