Files
rustkeep/.scratch/rustkeep-1.0/issues/14-kampfformeln-und-rundenablauf.md

2.4 KiB

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).