fix(rules): update initiative when a readied action fires

SRD Ready - Initiative Consequences of Readying: 'your initiative result becomes the count on which you took the readied action' and you 'act immediately ahead of the character whose action triggered your readied action'. _check_readied fired the payload off-turn but never touched the readier's initiative. It now calls _ready_shift_initiative, which rewrites the readier's _initiative_keys entry (trigger total + 0.5, keeping its mod and prior index) using the same tuple shape _execute_delay writes, so _build_round_order holds the new position for all following rounds. Deterministic: no RNG consumed, current round order untouched.

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-13 14:54:15 +02:00
parent 6702efc652
commit 7fb7ec55dd
3 changed files with 143 additions and 1 deletions
+15 -1
View File
@@ -537,7 +537,21 @@ Règles modélisées :
de swift** (au plus une action préparée par événement, sans cascade), puis
l'action préparée est **consommée** (one-shot). Une nouvelle préparation
remplace la précédente ; le reste du tour (action de mouvement) reste
exécutable. Conformance L4 (SRD « Ready — Initiative Consequences of
exécutable. **S4b — l'action préparée change l'initiative** (SRD « Ready —
Initiative Consequences of Readying ») : « Your initiative result becomes
the count on which you took the readied action, and you act immediately
ahead of the character whose action triggered your readied action » — quand
la préparation se déclenche, `_check_readied` appelle `_ready_shift_initiative`
qui réécrit la clé d'initiative du préparant dans `_initiative_keys` (même
forme de tuple que `_execute_delay` : total du déclencheur ± le pas de 0,5,
en conservant le modificateur d'initiative et l'index de liste du préparant),
si bien que `_build_round_order` conserve la nouvelle position pour **tous
les rounds suivants**. Le pas est **ajouté** (le préparant agit juste AVANT
le déclencheur), à l'inverse du retard qui le **retranche** (agir après) —
les deux intentions sont opposées. Déterministe : aucun dé consommé, l'ordre
du round courant (déjà construit) n'est pas modifié, seuls les rounds
suivants se réordonnent. Conformance L4 (SRD « Ready — Initiative
Consequences of
Readying ») : « If you come to your next action and have not yet performed
your readied action, you don't get to take the readied action (though you
can ready the same action again) » — la préparation non déclenchée