# 14 — Kampfformeln und Rundenablauf Type: grilling Status: open Blocked by: 01 ## Question Wie läuft ein Kampf ab, und mit welchen Formeln? Der Attributkatalog aus 01 liefert die Zutaten (`damage`, `hit_chance`, `critical_chance`, `critical_factor`, `resistance`, `dexterity`, `luck`). Wie sie zusammenwirken, ist offen: - **Reihenfolge**: Was bestimmt, wer zuerst handelt — `dexterity`, ein Initiativwurf, oder immer der Spieler zuerst? Ändert sich das während des Kampfes? - **Trefferformel**: Wie berechnet sich, ob ein Angriff trifft? Ist `hit_chance` gegen Ausweichen gerechnet, oder trifft immer und `dexterity` mindert nur den Schaden? - **Schadensformel**: In welcher Reihenfolge greifen Waffe, `damage`-Modifikatoren, Krit und `resistance`? Ist Resistenz prozentual oder flach, und gibt es eine Ober- oder Untergrenze? - **Kritische Treffer**: Wie speist `luck` in `critical_chance`? Multipliziert `critical_factor` den Rohschaden oder den geminderten? - **Aktionen pro Zug**: Genau eine, oder gibt es Ausdauer als Budget? Wozu dient `max_stamina` sonst? - **Fähigkeiten** (nachgetragen aus Ticket 02): Was kostet eine Fähigkeit — Ausdauer, ein eigener Ressourcenpool, Ladungen? Gibt es Abklingzeiten, und werden sie in Zügen gezählt? Wann ist eine Fähigkeit gesperrt, und woran sieht der Spieler das? Ticket 02 hat Fähigkeiten als Registry festgelegt, ihre Kampfsemantik aber ausdrücklich hierher delegiert. - **Flucht**: Möglich, mit welcher Chance, mit welchen Kosten? - **Zufall**: Schadensstreuung ja oder nein, und woher kommt der Zufallsgenerator — braucht es einen Seed im Speicherstand? Ergebnis: die Formeln als Pseudocode plus der Ablauf eines Zuges von Eingabe bis Ergebnis. ## Vorgabe aus Ticket 07 Der Aktionskatalog und die Ziel-Auflösung (`self` / `target` / `all_enemies` aus 01) gehören hierher. Alles läuft durch `Game::apply(action, source: CreatureRef, target: CreatureRef, reg)`, gelesen wird über `Game::attribute(who, attr, reg)`. Eine Frage fällt zusätzlich an, die 07 nur benennen konnte: **Wann werden tote Gegner aufgeräumt?** `CreatureRef::Enemy(i)` ist ein Index in `Game.enemies` und überlebt das Entfernen aus der `Vec` nicht — eine Aktion, die mitten im Zug einen Gegner tötet, verschiebt die Adressen aller nachfolgenden. Der Rundenablauf muss festlegen, ob am Zugende, am Rundenende oder gar nicht kompaktiert wird (Alternative: Tote bleiben mit einem Flag stehen).