fix(kampf): Gegner bekommen endlich ihre Werte
Gemeldet als "Ratten vergiften zu 100 %". Dahinter lagen drei Fehler: 1. Creature::from_def parste Attributnamen mit toml::from_str, das eine ganze TOML-Datei erwartet. Der Aufruf schlug fuer jeden Namen fehl, der Zweig hiess Err(_) => continue — jeder Gegner hatte seit M3 still die Standardwerte. Die Riesenratte: 100 Leben statt 14, der Knochenfuerst war eine grosse Ratte. Kampf gegen den ersten Gegner: 22 Zuege statt 4. 2. attack_hit feuerte bei allen Traegern statt nur beim Angreifer, also vergiftete die Ratte auch bei eigenen Treffern. EventKind:: bound_to_source benennt die zwei seitengebundenen Ereignisse. 3. Action::Damage wuerfelte die Trefferformel auch bei Selbstschaden — ein flinker Held wich seinem eigenen Gift aus. Dazu ein Datenfehler: Das Gift stand in der Aktionsliste von rat_bite, und Aktionen haben kein chance. Es haengt jetzt am Trigger mit 25 %. Drei Regressionstests, darunter der, den es seit M3 haette geben muessen: ein Gegner bekommt die Werte aus seiner Definition.
This commit is contained in:
@@ -235,6 +235,22 @@ direkt aus der Stapelregel aus Ticket 01 und wird wieder zuschnappen, wenn sie n
|
||||
|
||||
Startkampf danach: Krieger 2,5 Züge je Ratte, Dieb 3,9 bei 20 % Krit und 108 Leben.
|
||||
|
||||
**Zweite Balancing-Runde** (76 Tests) — gemeldet als „Ratten vergiften zu 100 %". Dahinter lagen
|
||||
**drei unabhängige Fehler**, und der größte hatte mit Gift nichts zu tun:
|
||||
|
||||
| Fehler | Wirkung |
|
||||
|---|---|
|
||||
| `Creature::from_def` parste Attributnamen mit `toml::from_str`, das eine ganze Datei erwartet | **Jeder Gegner hatte seit M3 die Standardwerte.** Die Riesenratte: 100 Leben statt 14. Der Knochenfürst war eine große Ratte. Ein stilles `Err(_) => continue` |
|
||||
| `attack_hit` feuerte bei *allen* Trägern statt nur beim Angreifer | Der Gift-Trigger der Ratte feuerte auch, wenn der **Held** zuschlug. Dieselbe Lücke hätte den Dornenpanzer des Angreifers reflektieren lassen |
|
||||
| `Action::Damage` würfelte die Trefferformel auch bei Selbstschaden | „M verfehlt M" — ein flinker Held wich seinem eigenen Gift aus |
|
||||
|
||||
Dazu ein reiner Datenfehler: Das Gift stand in der *Aktionsliste* von `rat_bite`, und Aktionen haben
|
||||
kein `chance`. Es hängt jetzt am Trigger — genau der Fall, für den Ticket 08 das Feld erfunden hat.
|
||||
|
||||
Der erste ist der teuerste Befund des Projekts und der einzige, den **kein** Werkzeug gemeldet hat:
|
||||
kein Compiler, kein clippy, kein Test. Die Kampftests setzen ihre Zahlen selbst und schlugen nie eine
|
||||
Gegnerdefinition nach. Gefunden hat es das Spielen, und zwar erst, als alles andere schon stimmte.
|
||||
|
||||
**Drei Befunde aus M1, die nur der Compiler liefern konnte** — alle in die Tickets zurückgetragen:
|
||||
|
||||
- **11**: Der Grenztest in seiner wörtlichen Fassung schlägt beim eigenen Doc-Kommentar an. Muss Kommentarzeilen ausnehmen.
|
||||
|
||||
Reference in New Issue
Block a user