13.0.64
- Organise the Midi activity settings into subtabs (MR !420, thanks @garrysmod367).
- Fix socketed (GM-executed) workflows (MR !427, thanks @baconnugget).
- Fix temp-max HP handling on the undo card (MR !417, thanks @baconnugget).
- Default
constrainTemplatePlacementto false (MR !408, thanks @thatlonelybugbear).
- Add the
iconCSS class to the dnd5e header-control button (MR !429, thanks @olegbol2005).
- Updated pt-BR translation (MR !426, thanks @cardosomafrasantana).
- Offer spell reactions castable with a higher-level slot when no slot of the spell's own level is available (e.g. Shield with only level 3 slots) (MR !430, thanks @thatlonelybugbear).
- Fix chat cards from a sequence of rolls displaying out of order / with stale timestamps — content updates no longer overwrite the message's creation timestamp.
- Activity choice dialog applies the
midi-qol.itemUseActivitySelectprune hook before prompting — a single surviving activity is used with no dialog, an empty list skips the use; hook fires once.
- Fix concurrent summon spells stealing each other's created tokens. The
dnd5e.postSummonhandler used a one-shotHooks.once, so when two summon workflows overlapped one could capture the other's tokens; it now listens with a per-activity filter and only reacts to its own summon.
- Fix triggered-activity loop detection producing false positives. Visited activities are now tracked by full
uuidinstead ofid, so distinct activities that happen to share anidare no longer wrongly flagged as a loop while genuine loops are still caught.
- Fix pre-attack reactions (
reactionpreattack) receiving the wrong triggering item.doActivityReactionsreferencedthis(undefined in a standalone function) for the item and source UUID; it now uses the activity's item.
- Fix "self-only trigger" / triggered-activity handling on non-Cast/Forward activity types. The base getter was named
selfOnlyTriggerActivitybut every call site and subclass override usedisSelfTriggerableOnly, so the check silently read a nonexistent property on most activity types; the getter is renamed to match.
- Fix
use()andcompleteItemUsecontinuing past the ownership check for non-owners. The "you don't own this document" branch showed the warning but fell through; it now returns.
- Fix healing rolled from a chat card carrying a stale activity reference —
HealActivitynow setsworkflow.activitybefore rolling healing.
- Fix
Workflow.getWorkflow,removeWorkflow, andDDBGameLogWorkflow.getreading the workflow map with bracket indexing (alwaysundefinedon aMap); they now use.get(id).
- Fix a throw when converting a non-damage roll to a damage roll —
convertRollToDamageRollcalled the nonexistentDamageRoll.fromRoll; it now constructs aDamageRolldirectly and stamps the damage type.
- Fix broken migration of the "roll blind" options. Legacy boolean
truevalues forrollChecksBlind/rollSavesBlind/rollSkillsBlindare now migrated to["all"]before the filter/default logic runs (previously the migration ran too late and, for skills, wrote to a typo'd key), so these settings are no longer silently lost on upgrade. TheshowReactionAttackRolldefault ("all") now applies correctly as well.
- Fix target confirmation being spuriously cancelled. Closing the Target Confirmation dialog after it had already resolved (e.g. by rolling) could invoke the callback a second time with a
false/cancel result; a guard now ensures only the first result wins.
- Fix undo not capturing chat cards from token-based speakers. Undo groups its cards by actor UUID, but token-actor cards were matched against the token UUID and dropped; the token is now resolved to its actor UUID first.
- Fix activation-condition evaluation exposing only one of the
evalTypeOrRace/evalTypeOrRaceEvalaliases depending on whether the condition ran synchronously or asynchronously. Both aliases now work in both paths.
- Fix several places where errors were silently swallowed by returning from a
finallyblock — skill/ability roll patches (patching.ts) now propagate roll errors instead of hiding them, and the damage-application element and player damage card paths are similarly corrected.ConfigPanelnow awaits settings save/import before continuing, and auto-reroll initiative and volumetric-template computation are guarded so a missing optional module or a rejected promise no longer throws.
- GM-side
completeItemUse/completeActivityUserequests now guard against a missing actor or workflow instead of crashing, and the player damage card correctly awaits its damage-list preparation before deciding whether there is anything to show.
- Internal: migrated ~30 chat-card-backed
Workflowfields (targets, hit/saved/failed target sets, damage rolls and details, abort/suspended flags, etc.) from hand-written cache/getter/setter pairs to the sharedPersistedFieldStore, and consolidated the sync/async safe-eval implementations. No intended behaviour change; roll rehydration is now more defensive (falls back and records a Troubleshooter error rather than throwing).
- Counter Mage sample item: the Antimagic Shot effect applied on a critical Gut Shot now expires together with Gut Shot via
MidiQOL.addDependentand a fixed 10-round duration, replacing the previous duration-copy +flags.dnd5e.dependentOnapproach.
- Elemental Attunement (Monk Warrior of the Elements) sample item reworked: Imbue Elements is now a bonus action that applies a self-effect (10 minute duration) rather than running everything inline; the Unarmed Strike enchantment is created/removed by a DAE on/off macro and now only grants +10 ft reach. The elemental damage type is chosen at
postDamageRoll, the push/pull prompt is distance-aware (a target can no longer be pulled through the caster's space, and grapple/grappling effects are preserved), and Elemental Push now uses a Wisdom save DC (@abilities.wis.dc), isautomationOnly, and is invoked programmatically viacompleteActivityUse.