fix(rules): stop delay from double-processing the turn start

A freshly-delayed combatant is re-inserted into the round order and _take_turn runs a second time in the same round. That second pass re-ran _decrement_durations and _turn_gate, double-ticking bleed, double-decrementing buff/condition durations and re-firing the fear aura. The start-of-turn block is now skipped when delayed_this_round is already set at entry (cleared at round start, set only by a delay action); the delayed turn still gets its policy call, budget and execution.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-09-11 21:15:14 +02:00
parent 1b5cac234e
commit fa01ed74c5
3 changed files with 83 additions and 16 deletions
+6 -1
View File
@@ -442,7 +442,12 @@ Règles modélisées :
cible − 0,5 (ou au minimum des totaux − 0,5 sans cible) et **persiste aux
rounds suivants** ; le reste du tour est perdu, un second retard dans le même
round est rejeté (`already_delayed`), et le drapeau se réinitialise au début
de chaque round. `default_policy` ne choisit pas le retard (disponible via
de chaque round. Le tour réinséré plus tard dans le même round **ne rejoue
pas le début de tour** : la décrément des durées (buffs/conditions), les
dégâts continus (saignement), l'effet de terreur et les réinitialisations de
drapeaux par tour ne s'appliquent qu'une fois par round (le tour retardé garde
néanmoins son appel de politique, son budget et son exécution normaux).
`default_policy` ne choisit pas le retard (disponible via
une politique personnalisée).
- Préparation (`Action(kind="ready", ready_trigger=...)`, action standard) : le
combattant se prépare à agir quand un événement déclencheur survient. Le