44 lines
2.4 KiB
Markdown
44 lines
2.4 KiB
Markdown
# 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).
|