Since #139 the magic phase re-runs the checks a cast declaration and a scroll-read use_item declaration passed, immediately before each resolves, and a declaration that now fails fizzles with magic.cast.fizzled instead of raising or going through. A device use_item (a wand, staff, or rod) and a turn_undead declaration are not judged again.
The reachable case: a member declares a staff of striking against a group, the movement phase leaves that group beyond melee range, and _resolve_striking resolves the declaration without the combat.attack.out_of_reach check that _validate_magic_item_declaration applied at the top of the round.
Whether a device use should be judged again, and what a refused one reports (the charge kept or spent, which event), is a rules decision. The _party_magic docstring states the current scope.
https://claude.ai/code/session_01NmCezTw8hKKujkaEZ3YGAs
Since #139 the magic phase re-runs the checks a
castdeclaration and a scroll-readuse_itemdeclaration passed, immediately before each resolves, and a declaration that now fails fizzles withmagic.cast.fizzledinstead of raising or going through. A deviceuse_item(a wand, staff, or rod) and aturn_undeaddeclaration are not judged again.The reachable case: a member declares a staff of striking against a group, the movement phase leaves that group beyond melee range, and
_resolve_strikingresolves the declaration without thecombat.attack.out_of_reachcheck that_validate_magic_item_declarationapplied at the top of the round.Whether a device use should be judged again, and what a refused one reports (the charge kept or spent, which event), is a rules decision. The
_party_magicdocstring states the current scope.https://claude.ai/code/session_01NmCezTw8hKKujkaEZ3YGAs