Parse a formula string, resolving {{draw}}, {{roll}}, and $variable tokens.
Draws are resolved asynchronously via deck.system.drawCard(), then the
remaining formula is tokenized synchronously.
Config:
advantageStage number — draw advantage modifier (positive = advantage, negative = disadvantage)
actor Actor — source actor for single-brace {fth}-style var resolution
namedActors object — { self, target, attacker, owner } Actor lookups for dual-brace {target.foo} syntax
targetActor Actor — specific target for draw/roll substitution tracking
defaultDeckOverride object|null — override which deck to draw from
allowNegate boolean — if false, negate cards resolve to 0 without setting wasNegated flag
Parse a formula string, resolving {{draw}}, {{roll}}, and $variable tokens. Draws are resolved asynchronously via deck.system.drawCard(), then the remaining formula is tokenized synchronously.
Config: advantageStage number — draw advantage modifier (positive = advantage, negative = disadvantage) actor Actor — source actor for single-brace {fth}-style var resolution namedActors object — { self, target, attacker, owner } Actor lookups for dual-brace {target.foo} syntax targetActor Actor — specific target for draw/roll substitution tracking defaultDeckOverride object|null — override which deck to draw from allowNegate boolean — if false, negate cards resolve to 0 without setting wasNegated flag