Re-issue an AutomatedAnimations.playAnimation call on the delegate's own
client. Tokens cross the socket boundary by id (not by reference) and are
re-resolved locally via canvas.tokens.get, which only succeeds when the
delegate is currently viewing the combat's scene — that's the intended
failure signal: if the source token can't be resolved, this throws
BmsPromptAbort so promptFor's existing disconnect/cancel →
GM-reprompt → "Handle on GM" fallback kicks in (which re-runs the call
GM-side, a no-worse-than-current-behavior outcome).
The animation call itself is fire-and-forget, matching the direct-call
path in OUTCOME_REGISTRY.playAnimation — resolution doesn't block on
animation playback.
Spec fields:
sceneId : string — combat scene id; delegate must be viewing it
sourceTokenId : string — acting token's id within that scene
targetTokenIds : string[] | undefined — target token ids, when computed
animationName : string — AA preset/animation name
playOnMiss : boolean — whether to pass opts.playOnMiss/hitTargets
hitTargetIds : string[] | undefined — subset of targets that actually hit
Re-issue an
AutomatedAnimations.playAnimationcall on the delegate's own client. Tokens cross the socket boundary by id (not by reference) and are re-resolved locally viacanvas.tokens.get, which only succeeds when the delegate is currently viewing the combat's scene — that's the intended failure signal: if the source token can't be resolved, this throws BmsPromptAbort sopromptFor's existing disconnect/cancel → GM-reprompt → "Handle on GM" fallback kicks in (which re-runs the call GM-side, a no-worse-than-current-behavior outcome).The animation call itself is fire-and-forget, matching the direct-call path in
OUTCOME_REGISTRY.playAnimation— resolution doesn't block on animation playback.Spec fields: sceneId : string — combat scene id; delegate must be viewing it sourceTokenId : string — acting token's id within that scene targetTokenIds : string[] | undefined — target token ids, when computed animationName : string — AA preset/animation name playOnMiss : boolean — whether to pass opts.playOnMiss/hitTargets hitTargetIds : string[] | undefined — subset of targets that actually hit