Skip to content

Latest commit

 

History

History
1791 lines (1316 loc) · 103 KB

File metadata and controls

1791 lines (1316 loc) · 103 KB

14.532.2

  • Added the first experimental pass of the AC5E Effect Value Editor for Active Effects.
    • It can help build common AC5E effect values with a structured UI instead of editing the whole condition string by hand.
    • The editor is behind the Enable AC5E UI (Experimental) setting.
  • Added AC5E Attribute Key autocomplete even when DAE is not active.
    • AC5E keys can now be suggested directly in the Active Effect sheet without depending on DAE.
    • When an AC5E key is selected in the sheet, the experimental AC5E editor wand now appears immediately on that change row, including when DAE is providing the autocomplete.
  • Cleaned up the range flag surface and runtime behavior.
    • Packed range overrides are now authored on flags.automated-conditions-5e.range.overrides.
    • Legacy flags.automated-conditions-5e.attack.range is still accepted as a compatibility alias for now.
    • Granular keys such as range.short, range.long, range.reach, range.noLongDisadvantage, range.nearbyFoeDisadvantage, and range.outOfRangeFail remain available.
    • Numeric range leaf keys now follow the normal AC5E set= / bonus= value style.
    • itemLimited now works normally on range entries too, so range effects can be tied to the rolled item more reliably.
  • Clarified how range overrides apply during play.
    • Range profile changes such as short/long/reach and out-of-range fail can affect both attack and use flows.
    • Attack-only behaviors such as nearby-foe disadvantage and long-range disadvantage still only affect attack activities.
    • This means non-attack use activities can now respect AC5E range overrides without inheriting attack-only disadvantage rules.
  • Attack activities now handle out-of-range failure during attack roll setup instead of failing early during item use.
  • Added clearer tooltip attribution for range-based suppressions such as range.noLongDisadvantage.
  • Added damage.typeOverride, including grants and aura variants.
    • This lets you override the available type set of base damage rolls.
    • Example: set=fire
    • Example: set=acid,thunder
    • Example: set=fire,lightning,thunder; addTo=all
  • Added support for multi-type inline bonus damage parts such as bonus=1d4[fire, lightning, thunder].
    • When a bonus damage part offers multiple types, AC5E now keeps that as a selectable damage-type choice instead of collapsing it to a single type.
  • Improved the damage dialog handling around damage type overrides so type switching and related rerenders behave more reliably.
  • Added modifier=max and modifier=min shorthand aliases for the existing modifier=maximize and modifier=minimize behavior.
  • Added originItem and originActivity evaluation data for Active Effects.
    • This makes it easier to reference the originating item/activity in conditions and formulas.
    • originItemType and originItemProperties are also available for simpler origin-item checks.

14.532.1

  • Improved visibility handling so AC5E and MidiQOL split responsibility more cleanly for hiding, invisibility, and blinded attack checks.
  • Improved sight checks for tokens with limited or disabled token vision by better using actor senses such as darkvision and truesight.
  • Attack activities now handle out-of-range failures during attack roll setup instead of failing early during item use.
  • Cleaned up several English settings names and descriptions for clarity.
  • Verified for D&D 5e system v5.3.2.

14.531.3

  • Added tooltip attribution when a range.noLongDisadvantage rule suppresses long-range disadvantage.
  • Improved range helper context resolution by letting autoRanged and related checks fall back from activity data to options.actionType and options.item, including UUID-based item resolution.
  • Backfilled missing sandbox.activity.id / uuid / identifier values when an activity exists, while guarding non-activity roll paths such as initiative, checks, and saves from null activity access.

14.531.2.2

  • Activity range data are checked only if the override parameter is true, otherwise the item's range data are used for range checks.
  • The API ac5e.checkRanged call overrides any MidiQOL range checks by default.

14.531.2.1

  • Fix for missing v14 attack-roll config criticalFailure

14.531.2

  • Updated pt_BR translation by Kharmans 🤗
  • Updated Italian translation by GregoryWarn 🤗
  • Added hasEffects filter for nearby checks to require or exclude targets based on active effects name matching.
    • checkNearby(opponentId, 'ally', 5, { count: true, hasEffects: ['AlliedAC'] }); will return the number of allies within 5 ft of the opponent token, which have an effect named AlliedAC.

14.531.1

  • Dropped support for Foundry v13 and D&D5e 5.2.5, with a hard minimum of Foundry v14 and D&D5e 5.3.0.
    • For users still on Foundry v13 and D&D5e 5.2.5, the last compatible AC5E release is 13.5250.18.1.
    • For users still on Foundry v13 and D&D5e 5.3.x, the last compatible AC5E release is 13.5310.3.
  • Fixed attack rolls so visibility checks no longer drop unrelated AC5E modifiers.
  • Fixed damage rolls so per-roll modifier formulas and roll data resolve correctly on v14.
  • Kept attack visibility handling aligned with D&D5e 5.3.1 and preserved target-facing flags.
  • Removed legacy v13-only compatibility branches for the explicit v14 release.

13.5310.3

  • Fix for visibility checks when the target token has vision disabled, which caused errors instead of no-op behavior when trying to check vision against an undefined token sight configuration.

13.5300.2

  • Added isAoE helper for Area of Effect activities.

13.5300.1

  • First starter compatibility release for D&D5e 5.3.0.
  • Improved D&D5e 5.3 roll-mode handling so advantage/disadvantage selections stay in sync with native advantageMode, including fast-forward keypresses and override keypresses.
  • Initiative advantage/disadvantage attribution now follows the resolved D&D5e 5.3 initiative mode more reliably.
  • Fixed chat-message AC5E damage tooltips for native D&D5e 5.3 damage cards by rebinding after the system finishes its own chat render work.
  • Added sandbox.item.classIdentifier for condition/evaluation use where a stable class-style identifier is needed during newer 5.3 item roll-data paths.
  • Note: AC5E currently follows native D&D5e 5.3 handling for mixed damage die modifiers such as adv/dis with min/max; any remaining issues in that exact combination are waiting on the upstream D&D5e fix.

13.5250.18.1

  • Made sure that the sandbox receives item properties.

13.5250.18

  • Final D&D5e 5.2.5 compatibility release, barring any serious follow-up bugs.
  • Tightened visibility handling for blinded, invisible, and ethereal interactions so AC5E canSee() behaves more consistently.
  • Improved roll-data handling for damage and healing scaling, including better support for effects that rely on prior spell level or scaling state.
  • Cleaned up range flag behavior and documentation:
    • range now has one shared public surface instead of separate attack.range variants.
    • Canonical range toggles are now longDisadvantage, noLongDisadvantage, nearbyFoeDisadvantage, noNearbyFoeDisadvantage, outOfRangeFail, and noOutOfRangeFail.
    • Legacy aliases such as fail, noFail, and nearbyFoes are still accepted for compatibility.
    • Current stable exceptions: generic no<Status> suppressors such as noProne remain boolean-style only for this release (no conditional or optin handling), and granular range subkeys such as flags.automated-conditions-5e.range.short expect a direct value/expression rather than packed short=...; ... conditional syntax.
  • Fixed stale disadvantage state when switching attack modes in the roll dialog, such as changing between one-handed and thrown attacks.
  • Exposed ac5e.getItem(tokenOrActor, itemIdentifier, options = {}) as a first-match helper matching ac5e.getItems(...).
  • Wiki updates.

13.5250.17.2

  • Fixed damage roll modifier opt-ins so they show up correctly in the damage dialog.
  • Fixed ac5e.usageRules object registrations so enforceMode is kept and works correctly.
  • WIKI updates

13.5250.17.1

  • Fixed info entries with enforceMode=normal/advantage/disadvantage so they are preserved through AC5E roll processing and correctly force the final d20 roll mode.
  • When enforceMode wins, overridden pure d20-state entries no longer consume once, cadence, or usesCount.
  • Cleaned up enforced-mode attribution so the roll dialog tooltip and MidiQOL attribution tooltip show the forced roll mode and suppress overridden d20-state reasons.
  • Updated MidiQOL save/check item-card DC labels after AC5E modifyDC applies, replacing the displayed DC when it is unambiguous and marking it with (*) when the card may contain mixed per-target DCs.
  • Updated Italian translation by GregoryWarn.

13.5250.17

  • Removed MidiQOL delegation from AC5E canSee() so AC5E visibility checks no longer perturb Midi's transient attack perception state on follow-up attacks.
  • Fixed flags.automated-conditions-5e.damage.bonus so it also applies on MidiQOL fast-forwarded damage rolls instead of only through the damage dialog path.
  • AC5E now re-enables the roll configuration dialog when MidiQOL fast-forward would skip it but AC5E has relevant opt-in choices for that roll, so attack/check/save/damage opt-ins can still be selected.
  • Fixed the initial d20 roll formula discrepancy when AC5E preselects visibility opt-ins on first render.
  • Fixed once attack advantage/disadvantage consumption so automatic one-shot entries are spent on the attack roll attempt, while explicit mode overrides still preserve skipped opt-in entries in the overridden roll-mode family.
  • Updated Czech translation by Lethrendis 🤗

13.5250.16.1

  • Fixed duplicate damage.bonus entries with identical formulas so both contributions apply instead of being collapsed by the rebuild dedupe logic.

13.5250.16

  • Added the Visibility checks world setting so the “Cannot See Target”/“Target Cannot See Attacker” opt-ins and adv/dis logics are gated behind a single toggle and can be hidden when MidiQOL already applies those optional rules.
  • When Visibility checks is enabled, the blinded/invisible attack automation routes through the two opt-ins, so the user can uncheck them before the final mode settles.
  • AC5E now skips the synthetic visibility opt-ins whenever MidiQOL’s optional rules for invisibility or hidden attackers are enabled, preventing duplicate reasons in the dialog/tooltip.

13.5250.15

  • Initiative advantage and disadvantage handling is now more consistent between native dnd5e and AC5E resolution.
  • Token light level is now available to AC5E evaluation and helper lookups.
    • Access via xyzActor.lightLevel.bright/dim/darkness.
  • canSee now defers to MidiQOL only when no status override is in play, so blinded/invisible/ethereal checks consistently use AC5E’s fallback logic.
    • Added a world setting for using ac5e.canSee checks which adds preselected opt-ins for 'Cannot see target' and 'Target cannot be seen' when MidiQOL is not enabled.
    • Changes to canSee logic of handling tokens with vision disabled.
  • damage.extraDice now handles leading + values correctly.
  • Damage modifiers now support maximize and minimize, and targeted damage modifiers no longer spill onto unrelated damage parts.
  • Unsupported literal die modifiers on d20 rolls are now ignored with a clear console warning instead of failing silently.
  • Exposed ac5e.getItem(tokenOrActor, itemIdentifier, options = {}) as a first-match helper for convenient single-item retrieval based on the same options as ac5e.getItems(...).
    • Returns the first matching item or null if no match exists.
    • Example: ac5e.getItem(token.id, "fireball", { match: "any", nameMode: "partial" }) returns the first item whose name or identifier contains fireball.

13.5250.14

  • Combat cadence turn syncing now updates within the original combat advance instead of triggering a second AC5E combat update.
  • Added info | enforceMode=normal/advantage/disadvantage for forcing the final d20 roll mode, with tooltip attribution for the active enforcing entry.

13.5250.13.1

  • Quick fix for multiple combat updates triggering overtime hazards.

13.5250.13

  • Fixed damage-dialog bonus parts so typed bonus damage can create a new damage part and still be seen by later matching bonuses in the same rebuild.
  • Fixed damage-dialog rerenders so changing a selected damage type no longer duplicates appended typed bonus damage parts or spin into recursive rerender loops.
  • criticalStatic now works on damage.bonus entries, including addTo targeting and created typed damage parts.
  • Damage-dialog opt-ins now include damage.info entries.
  • ac5e.getItems(...) and ac5e.hasItem(...) now support properties filters, including combinations like { type: 'weapon', properties: ['hvy', 'mgc'] }.
  • Reinstate missing item data from the sandbox.
  • Some codebase cleanup.

13.5250.12.5

  • Fix for broad rage checks

13.5250.12.4

  • Fix for addTo not being added in single type damage parts.
  • Updated pt_BR translation by Kharmans 🤗

13.5250.12.3

  • Preserves system-provided roll.options.critical.bonusDamage through damage-dialog rerenders so forced crits retain their extra dice instead of losing them during AC5E rebuilds.
  • Unified damage.bonus add-to routing and tooltip filtering so base and opt-in entries now share the same damage-part targeting, and tooltips hide entries when addTo/damage-type filters stop matching.

13.5250.12.2

  • Fix for .aura.damage.bonus not correctly updating cadence when toggled as an opt-in.

13.5250.12.1

  • Adds optin support for ...damage.modifier modes

13.5250.12

  • Internal refactor of hooks/helpers/system rules to streamline dnd5e rebuilds and reduce dialog re-renders.
  • Auto-range/opt-in tooltips now share a single attribution path between AC5E and Midi for more consistent roll dialogs.
  • Debug/log plumbing trimmed and targeted debug gates added; existing user-facing behavior should remain unchanged.
  • Updated Italian translation by GregoryWarn 🤗

13.5250.11

  • Reworked AC5E default distance calculation to use cached perimeter lookups while preserving the legacy path as a fallback.
    • The default AC5E distance helper now reuses cached token perimeter points instead of rebuilding them on every check.
    • Legacy distance calculation remains available internally and is still used when deferring to MidiQOL distance handling.
  • Expanded info support across AC5E action hooks.
    • Full flag forms such as flags.automated-conditions-5e.use.info, flags.automated-conditions-5e.attack.info, flags.automated-conditions-5e.damage.info, flags.automated-conditions-5e.save.info, and flags.automated-conditions-5e.check.info can now be used to show AC5E reasons and process side effects without changing the rolled formula.
    • info entries now surface correctly in AC5E/Midi tooltip attribution and survive use flows that resolve after the activity succeeds.
  • Added update=... for allowlisted actor value changes, designed to pair naturally with info.
    • update supports direct changes to HP, temp HP, effective max HP, exhaustion, death saves, inspiration, and ability scores.
    • Positive and negative values now read naturally for state-style updates such as exhaustion and death saves.
    • Example: flags.automated-conditions-5e.use.info | update=opponentActor.exhaustion,1
    • Example: flags.automated-conditions-5e.damage.info | update=rollingActor.hp,-1d6
  • Improved item lookup helpers.
    • ac5e.hasItem(...) and ac5e.getItems(...) now default to exact name matching instead of broad partial matching.
    • match: "any" still supports convenient identifier-style lookup, including slugified queries such as "misty-step".
    • Added ac5e.getItem(...) as a first-match helper.
    • Signatures:
      • ac5e.hasItem(source, itemIdentifier, options = {})
      • ac5e.getItem(source, itemIdentifier, options = {})
      • ac5e.getItems(source, itemIdentifier, options = {})
    • Available options:
      • match: "name" | "identifier" | "id" | "uuid" | "any"
      • nameMode: "exact" | "partial"
      • type: "<item type>"
    • Example: ac5e.getItems(_token.id, "fire", { match: "any", nameMode: "partial" }) returns all matching items whose name or identifier contains fire.
  • Reworked criticalStatic handling for damage.extraDice.
    • criticalStatic extra dice now apply outside normal crit doubling, so they can be used for “add this die, but do not double it on a crit” style effects.
    • Example: flags.automated-conditions-5e.damage.extraDice | bonus=1;criticalStatic
  • Stabilized AC5E damage attribution in chat, including MidiQOL-linked attack+damage messages.
    • Damage tooltips now preserve AC5E Extra Dice and other selected opt-in reasons more reliably in combined attack/damage workflows.
  • Added transient advantage/disadvantage conversion support.
    • convertAdvantage and convertDisadvantage let a rule turn native d20 advantage/disadvantage into AC5E-driven bonus formulas instead of rolling 2d20kh/kl.
    • hasAdvantage / hasDisadvantage remain usable for downstream conditions even when the actual d20 roll is converted back to a straight roll.
  • Added attack-only abilityOverride.
    • abilityOverride can now be used as an evaluated AC5E attack flag, including grants and aura variants, to change which ability an attack uses.
    • Tooltip output now shows the winning override in a compact form such as Ability: DEX -> CHA (New Effect).
    • Example: flags.automated-conditions-5e.attack.abilityOverride | override=cha; optin
  • Added world settings for advantage/disadvantage conversion formulas.
    • You can enable a world-level override for system advantage handling and provide separate replacement formulas for advantage and disadvantage.
    • Each side is handled independently, so leaving one formula blank keeps the normal system behavior for that side.
    • Per-rule convertAdvantage / convertDisadvantage can still force conversion for a specific roll even when the world setting is off.
  • Out-of-range failures are now applied earlier in the activity flow again, keeping warnings and blocked uses aligned with the main AC5E range checks.

13.5250.10

  • Reworked d20 and damage roll target persistence so attack rolls now persist their resolved target AC snapshots more reliably and linked damage rolls reuse those same snapshots.
    • This keeps modifyAC and forced hit/miss sentinel AC changes aligned between attack adjudication, damage dialogs, and created chat messages.
    • Damage rolls triggered from attack, save, or check activities now hydrate from the latest associated roll message for that originating workflow.
  • Improved d20 roll-mode override handling for manual roll-dialog choices and fast-forward keypresses.
    • Manual dialog choices that differ from AC5E's proposed mode now behave as explicit overrides.
    • Alt / Ctrl continue to act as additive advantage/disadvantage sources when not used as override combinations.
    • Shift+Alt / Shift+Ctrl now behave consistently as explicit override keypresses in AC5E-owned flows.
    • When a user explicitly overrides AC5E's proposed d20 mode, AC5E now skips relevant roll-mode usesCount / cadence consumption that would otherwise have been spent on the bypassed mode calculation.
  • Improved tooltip parity across AC5E and MidiQOL branches.
    • Restored MidiQOL roll-dialog attribution for d20 dialog overrides when Midi owns the tooltip pipeline.
    • AC5E fallback check/save/skill tooltips now handle keypress and override attribution more consistently when MidiQOL is enabled but not driving the actual workflow.
  • Refined sandbox roll-context fields.
    • Added generic d20Total, d20Result, and d20ResultOverTarget style hydration while keeping legacy aliases for compatibility.
    • Attack/damage target values now derive from persisted target snapshots instead of stale live AC fallbacks when available.
  • Stabilized damage dialog rerender behavior.
  • Hardened damage addTo routing across formula-altering damage entries.
    • Damage-type conditions such as fire now correctly control whether an entry is available, while addTo=... only controls which damage roll is modified.
    • Fixed addTo=base, typed addTo=<damageType>, and combinations such as fire;addTo=thunder so opt-in and non-opt-in entries apply to the intended damage part more reliably.
  • Reduced redundant roll-dialog syncing work.
    • Removed unnecessary target/DC DOM syncing and a heavy ability-dialog rerender path, while keeping roll results and AC5E tooltip state aligned through the actual roll/build config flow.
  • Simplified attack dialog refresh behavior.
    • Attack mode and ammunition changes now refresh AC5E attack state in place instead of forcing a full dialog rebuild/render cycle.
  • Fixed attack roll-dialog modifyAC opt-in tooltips using the wrong base AC during later dialog rebuilds.
    • Attack roll dialogs, chat tooltips, and final target AC adjudication now stay aligned on the same modified AC snapshot.

13.5250.9

  • Expanded attack criticalThreshold / fumbleThreshold formula handling to accept numeric expressions with dice and math helpers such as min(...) and max(...).

    • This allows threshold flags like set=min(4, 1d8) to resolve to a rolled numeric threshold instead of falling back to the unchanged default threshold.
  • Expanded damage.extraDice criticalStatic handling to support multiplier literals such as bonus=x2.

    • This allows crit-only extra dice to scale from the matched base dice term, so the same flag works correctly for damage formulas like 1d8 and 2d6.
    • Example: flags.automated-conditions-5e.damage.extraDice | criticalStatic; bonus=x2
  • Fixed attack/save/check opt-in toggles in d20 roll dialogs so switching an AC5E opt-in advantage/disadvantage effect off returns the dialog to the correct normal state again.

    • The dialog now rebuilds from its frozen baseline before AC5E reapplies current opt-in state.
    • Fixes cases where the previous advantage/disadvantage mode could remain visible after the opt-in was unchecked.
  • Added partialConsume support for usesCount.

    • This allows capped counters such as death saves or item/activity uses to consume only the remaining available amount instead of failing when the full requested amount would exceed the cap.
    • Example: usesCount=death.fail,(isCritical ? 2 : 1);partialConsume
  • Fixed object-form ac5e.usageRules.register({...}) handling so standalone booleans such as partialConsume and criticalStatic are serialized back into runtime evaluation correctly.

    • This keeps structured registrations aligned with equivalent raw value: "..." rule strings.
  • Added ac5e.usageRules.showKeys() to expose the supported object-form registration keys and their intended usage.

  • Consolidated MidiQOL modifyDC attribution display for ability/save rolls into a single tooltip line.

    • set and additive bonus logic is unchanged (set baseline, then additive bonuses).
    • Multiple AC5E modifyDC sources now render as one combined reason list instead of repeated Modified DC X (Y) lines.

13.5250.8.2

  • Reworked MidiQOL attribution sync for save/check flows so AC5E advantage and modifyDC reasons are carried more reliably into Midi tooltip attribution.
  • Added a fallback to keep AC5E chat tooltips for ability rolls when Midi workflow metadata is missing, so reasons are still visible in non-standard roll paths (including initiative-adjacent branches).

13.5250.8.1

  • Fixed status condition handling to use roll-data statuses directly, without rewriting actorData.statuses.

13.5250.8

  • Improved save/check dialog re-evaluation when ability selection changes (including MidiQOL ability dropdown flows).
    • AC5E now re-runs flag evaluation when ability changes in the d20 roll config dialog for save and check hooks.
    • Fixes cases where save.modifyDC and other ability-scoped flags stayed on the initially preselected ability (for example DEX) after switching to another ability (for example WIS).
  • Skill and tool checks now follow the same ability-change re-evaluation path, keeping modifier/advantage/DC behavior consistent after changing the selected ability.
  • Fast-forward d20 rolls now keep resolved AC5E advantage state in sync with roll options/config, improving MidiQOL mode parity when no dialog is shown.
  • MidiQOL save/check attribution now includes AC5E modifyDC reasons in the Midi tooltip attribution list.
  • Hardened target/DC updates so attack-style target AC mutation is only applied for attack hooks and not save/check flows.
  • Added criticalStatic support for damage.extraDice entries.
    • criticalStatic entries are only applied when the roll is critical.
    • Their added dice count is treated as static extra dice and is not multiplied by extra-dice multipliers.
    • Works with source/grants/aura entries and existing addTo targeting.
    • Example: flags.automated-conditions-5e.damage.extraDice | bonus=3;criticalStatic
  • Added ac5e.debug.usesCount for targeted usesCount diagnostics (parse, resolution path, blocked reason, queued update summary) without enabling full global debug noise.

13.5250.7

  • Expanded MidiQOL compatibility and attribution handling for attack/check/save rolls:
    • AC5E now ingests Midi tracker attributions for advantage/disadvantage/fail/success and dedupes overlapping reasons.
    • Known limitation: when MidiQOL is active, AC5E-specific bonus/extraDice reasons are not yet fully rendered through Midi's native tooltip attribution pipeline in every flow; AC5E fallback tooltip content is still used for those cases.
  • Reworked damage formula mutation flow so selected opt-in bonus parts are transformed together with base formulas.
    • Unified transform pass now applies to both base and selected opt-in damage terms (extraDice, dice upgrade/downgrade, adv/dis dice handling, and formula operators).
    • Added support for formula operators (*//) with addTo targeting (all, base, or selected damage types).
    • Damage formula data references now resolve through Foundry Roll.replaceFormulaData(...) before transform.
  • Fixed damage opt-in duplication where a selected opt-in could be applied once as transformed data and again as a raw appended part at submit time.
  • Opt-in dialog hardening:
    • Non-opt-in entries are no longer rendered as forced/disabled opt-in checkboxes.
    • forceOptin entries are treated as active selections consistently in damage adjustment paths.
  • Fixed damage modifier ordering so min/max suffixes attach to dice terms before / or * modifiers, avoiding merged tokens like /2min10 that break roll parsing.
  • Expanded range flag support to override ranged automation gates per effect (including grants and aura sources).
    • Added support for:
      • nearbyFoeDisadvantage / noNearbyFoeDisadvantage
      • longDisadvantage / noLongDisadvantage
      • fail / outOfRangeFail / noFail / noOutOfRangeFail
    • These can be provided as standalone toggles or evaluated expressions in range values.
  • Auto-range resolution now consumes those overrides for nearby-foe disadvantage, long-range disadvantage, and out-of-range fail checks.
  • Added range override keys to AC5E autocomplete/lint keyword handling.
  • Updated README/wiki docs for new range override keys and usage behavior.
  • Added support for [random] token in damage bonus formulas, which will be replaced by a random damage type on each evaluation.
    • Example: flags.automated-conditions-5e.damage.bonus | bonus=1d6[random] could yield bonus=1d6[fire] on one roll and bonus=1d6[cold] on another.
  • Fix for usesCount with non-actor targets, which caused errors instead of no-op behavior when trying to consume from undefined sources.
  • Expanded Final Stand trigger coverage for usesCount HP/resource-style consumption:
    • Added handling for exhaustion reaching configured max level.
    • Added handling for abilities.<abilityId>.value reaching 0.
    • Added handling for hp.max-style consumption paths reaching <= 0.
  • Fixed item quantity update path to write resolved newQuantity directly to system.quantity.
  • Refactored _hasItem helper to support identifier, name, id, or uuid matching for more flexible item references in conditions and usage rules.
  • Added targeted debug gates for AC5E hook tracing and _setAC5eProperties without requiring full global debug logging.
  • Message/use resolution hardening:
    • getMessageData and use-config resolution now prefer prehook message.data.flags when present, with fallback to message.flags.
    • Message flag reads for DND5E/AC5E scopes are now centralized for consistent originating/usage resolution.

13.5250.6

  • Compatibility note: AC5E opt-ins require roll configuration dialogs; if another module enforces dialog.configure = false, opt-in controls cannot be presented.
  • Opt-in dialog entries are now split into two <fieldset> groups:
    • AC5E for normal self-sourced opt-ins.
    • AC5E Ask for permission for opt-ins sourced from actors other than the rolling actor.
      • For ask-permission entries, labels include the source actor name to make ownership context explicit.
      • Attack modifyAC opt-ins now use context-aware routing:
        • flags.ac5e.modifyAC entries route to ask-permission.
        • flags.ac5e.grants.modifyAC entries remain in the main AC5E fieldset.
        • flags.ac5e.aura.modifyAC entries stay in AC5E only when the aura source is the rolling actor; otherwise they route to ask-permission.
    • Non-opt-in entries remain treated as GM-authorized automation.
  • Cadence related changes:
    • Fixed cadence reset behavior for oncePerTurn entries so opt-in and non-opt-in cadence flags unlock correctly on turn changes.
    • Cadence persistence now replaces the full flags.automated-conditions-5e.cadence object to prevent stale nested usage entries from surviving updates.
    • Hardened AC5E effect-deletion handling against double-delete races with other combat/effect automation modules:
      • Duplicate UUID deletions are deduped before dispatch.
      • Missing-document delete errors are treated as no-op instead of noisy failures.
  • Roll dialogs now keep AC5E's chosen default button focused more reliably, even when other modules try to move focus.
  • Final Stand presentation was tightened for HP-consuming effects:
    • Non-opt-in entries are only converted to Final Stand when they would drop HP to 0 or below.
    • Effects that do not risk dropping HP are no longer forced into disabled opt-in checkboxes.
  • DAE autocomplete now shows only canonical AC5E keys under flags.automated-conditions-5e.* for cleaner authoring.
    • Short aliases like flags.ac5e.* remain supported at runtime, but their usage is discouraged.
  • Added no<Status> support across source, grants, and aura paths, including keys like flags.automated-conditions-5e.grants.noProne.
    • Status override tooltips can now include override names for clearer context.
      • Example: Prone (Ignore Prone in Rage).
  • Added a context keyword registry API for reusable evaluation aliases.
    • Runtime registration: ac5e.contextKeywords.register({ key, expression }) or ac5e.contextOverrideKeywords.myKeyword = (context) => ...
    • Persistent world registration: ac5e.contextKeywords.registerPersistent({ key, expression })
    • Hook and helpers: ac5e.contextKeywordsReady, isPlayerPersistEnabled, setPlayerPersistEnabled
  • Added ac5e.usageRules API for runtime rule registration and opt-in/cadence-compatible injections.
    • Supports register/remove/clear/list, plus canPersist and reloadPersistent.
    • Added persistent: true registration path for world-level usage rules stored in module settings.
    • Runtime registrations remain client-local.
    • evaluate function rules are runtime-only; persistent rules must use serializable expression fields (for example condition).
    • Usage-rule opt-in labels now avoid duplicate naming when a provided name matches the primary rule/effect label.
    • Added scope support:
      • scope: "effect" (default) keeps the rule as an effect-driven keyword helper.
      • scope: "universal" additionally emits direct pseudo-rule entries for global application.
  • Troubleshooter snapshots now include an AC5E flag lint report to help quickly spot malformed keys, typo-like keywords, and other risky flag entries.
  • Flag parsing and warnings are now more reliable, reducing false positives and correctly treating standard condition expressions (for example targetUuid === "0").
  • Improved runtime resilience and tooltip clarity for advanced flags:
    • Better handling of malformed once/usesCount references to avoid queued-job crashes.
    • Threshold-style tooltip labels now render cleanly instead of showing [object Object].
  • Fixed a dialog-cancel edge case for attack rolls where canceling with targets selected could log roll.evaluate is not a function.
    • AC5E now avoids creating placeholder roll entries during live dialog updates and only mutates existing roll objects.

13.5250.5

New Opt-in Features

  • Added optin keyword, which transforms any AC5E flag into an optional add-on in the relevant roll dialog instead of a forced effect.
  • Added opt-in metadata and labeling keywords for dialog UX, including name=... and description=..., with localized auto-description fallback and clearer target AC phrasing.
  • Added opt-in usage timing keywords: oncePerTurn, oncePerRound, and oncePerCombat.
    • oncePerTurn: usable once per turn (and not blocked out of combat).
    • oncePerRound: refreshes on the owning combatant's next turn (and not blocked out of combat).
    • oncePerCombat: usable once per active combat.
  • Added support for multiple same-action-type flags (opt-in or non-opt-in) in a single Active Effect.
    • Unnamed duplicates are now disambiguated automatically (for example #1, #2) in the roll dialog.
  • Added Final Stand handling for HP-consuming usesCount flags: when usage would drop HP to 0 or below, the flag is exposed as an opt-in with a localized Final stand (drops to X) label suffix and fallback description support.
  • Added support for localized damage critical opt-ins with addTo=<damageType> to apply critical handling only to matching damage parts.
  • Added visibility gating for non-bonus damage opt-ins (such as critical, noCritical, advantage) based on currently selected damage types.

New Damage Flag Capabilities

  • Added addTo targeting support for damage flags across bonus, extraDice, diceUpgrade, and diceDowngrade.
    • Example: bonus=2d6[acid];addTo=fire applies only to fire damage parts.
    • Example: bonus=^2;addTo=all applies to every damage part.
  • Added extraDice multiplier syntax for damage terms (x2, X2, ^2).
  • Added @spellLevel token support for damage bonus formulas, resolved from originating item-use data.

Improved Dialog Stability and Compatibility

  • Improved damage roll dialog stability so bonuses and extra dice no longer duplicate during re-renders or damage type changes.
  • Improved third-party damage dialog compatibility (including C'est Sit Bon) by keeping damage parts stable during live dialog updates.
  • Allowed self-targeted activities to be used when no explicit token target is selected.
  • Prevented usesCount consumption when a roll is canceled before completion (empty post-roll rolls payload).

Tooling and UX Updates

  • Expanded DAE autocomplete support for AC5E flags, including use.fail, explicit action-type keys, and damage-only dice size keys for source/grants/aura paths.
  • Improved pre-use fail warnings with AC5E: attribution, optional description= reason text, and chance=<number> roll context in feedback.
  • Added granular range flag support for source/grants/aura contexts, including opt-in usage.
  • Updated status automation to initialize tables once on ready, expose ac5e.statusEffectsReady for override registration, and support on-demand status suppression flags (for example noProne) with tooltip visibility.
    • Override example: Hooks.on("ac5e.statusEffectsReady", ({ overrides }) => overrides.register({ status: "prone", hook: "attack", type: "subject", apply: ({ result }) => result === "disadvantage" ? "" : result }));
    • Override helpers: overrides.remove(id), overrides.clear(), overrides.list().
    • Cadence reset helper: await ac5e.cadence.reset() (or await ac5e.cadence.reset({ combatUuid })).
  • Added ac5e.troubleshooter snapshot helpers to export/import a diagnostics JSON package with AC5E settings, Foundry/system/module versions, and scene/grid configuration (ac5e.troubleshooter.snapshot(), ac5e.troubleshooter.exportSnapshot(), ac5e.troubleshooter.importSnapshot(file)).
  • Synced locale key coverage so missing non-English keys are populated with English fallback values.
  • Added a contributor documentation path, including a Contributing.md guide for anyone wanting to help with module documentation.

13.5250.3.2

  • Fix for diagonal distance calculation when height difference is involved.

13.5250.3.1

  • Closes #714 - Fix for activity being undefined

13.5250.3

  • Patched CONFIG.Actor.documentClass.prototype.applyDamage to include the messageId when it's triggered by a Chat message
    • dnd5e.preApplyDamage and dnd5e.applyDamage Hooks should now include options.messageId making it easier to retrieve relevant data.
  • Added more options in the checkNearby(tokenRef, dispositionRef, radius, parameters) parameters Object.
    • count can now be:
      • true: returns the Number of valid tokens
      • Number: the function returns the Boolean result of the check validTokens.length >= count
    • hasStatuses: an Array of statuses that the valid tokens need to have to be included.
    • change for radius logic. If the user inputs 0, the whole map will be checked.
    • for example: checkNearby(tokenId, 'all', 0, {count: true, hasStatuses: ['silenced', 'deafened']}) will return the Number of tokens that are silenced and/or deafened
  • Updated Italian translation by GregoryWarn 🤗

13.5250.2

  • Fix for damage enrichers throwing
  • Fix for Heavy automation and actionTypes
  • Fix for attack activities not applying their effects if MidiQOL is active and Save workflow data to chat messages setting is enabled.

13.5250.1

  • Verified for D&D5e v5.2.5
  • Refactored actionType assignment in sandbox
  • Fixed some typos.

13.5240.2

  • Ensure enchantment effects origins are not overwritten
  • Sanitize midiOptions before cloning to avoid circular refs when MidiQOL is active.

13.5240.1.1

  • Full items' roll data are no longer collected during _ac5eActorRollData() calls. A limited subset is now available instead.
    • actorType.items: [{ name, id, identifier, uuid, uses, equipped }]
    • actorType.equippedItems.names: Array of equipped item names
    • actorType.equippedItems.identifiers: Array of equipped item identifiers
  • Updated pt_BR translation by Kharmans 🤗

13.5240.1

  • Verified for D&D5e v5.2.4
  • Added filters in checkNearby() for:
    • partyMember Boolean (default false) to return only game.actors.party members
    • includeIncapacitated, false, true or 'only' (default false)
      • 'only' will return only incapacitated tokens
  • Added a Boolean world setting to show a warning when rolling from a token-less actor (rolling from sidebar actors is not yet fully supported).

13.5230.1

  • System 5.2.3 compatibility bump
  • Grappled condition for 2024 rules will only be testing for disadvantage if the grappled active effect has a proper origin. If it is toggled from the actor's effects tab or token assign status HUD, the disadvantage is up to the user to adjudicate.

13.5220.5

  • Fix for destructuring errors when triggering ability rolls via macros
  • Enhance current MidiQOL attacks attribution, creating a different category in the AC5e tooltips

13.5220.4

  • Expand usesCount to consume from other actors too
    • usesCount=opponentActor.exhaustion, -1 will add one exhaustion level on the opponent of the relevant roll.

13.5220.2.2

  • Fix for attackMode changes during the Attack Roll configuration dialog not properly resetting the target's AC

13.5220.2.1

  • Allow bonus=info to pass through so AE names appear in tooltips without requiring additional changes.
  • An AE named Secret bonus with a change value of flags.automated-conditions-5e.save.bonus | bonus=info; once will now show Bonus: Secret bonus in the tooltip without applying any actual bonus once before deleted.

13.5220.2

  • Fix for not trimmed once, not working :)
  • Updated Italian translation by GregoryWarn 🤗

13.5220.1

  • System 5.2.2 compatibility bump
  • Fix condition evaluation where logical expressions (||, &&) fail due to missing keyword variables

13.5200.1

  • System 5.2.0 compatibility bump

13.5110.8.8

  • Better handle unary minus and coin flips.

13.5110.8.7

  • If an aura flag doesn't include a radius keyword, it will apply to the whole scene no matter the distance from the source.
  • Updated pt_BR translation by Kharmans 🤗

13.5110.8.6

  • Another fix for adjacency

13.5110.8.5

  • Quick fix for effect deletions

13.5110.8.4

  • Properly break when testAdjacency returns true

13.5110.8.3

  • Replaced canvas.grid.testAdjacency calls with a custom testAdjacency function which doesn't consider diagonal rules.

13.5110.8.2

  • Quick fix for criticalThreshold fumbled checks...

13.5110.8.1

  • Added nonEffectActor which will be returning the data of the actor that isn't the effectActor. Should make the decision about which type of actor to use each time (rollingActor or opponentActor) easier 🤞. The actor that has the ac5e flag applied via the active effect, versus the one that doesn't!

13.5110.8

  • Added fumbleThreshold flags for attacks
    • flags.automated-conditions-5e.attack.fumbleThreshold
    • flags.automated-conditions-5e.grants.attack.fumbleThreshold
    • flags.automated-conditions-5e.aura.attack.fumbleThreshold
  • Added effectActor which will always point to the actor which has the effect applied.
  • For usesCount=consumptionTarget, consumptionValue, if provided, the consumptionValue can be fully evaluated.
    • Example, usesCount=Item.amulet-of-soulcatching, -max(1, opponentActor.details.cr, opponentActor.details.level); opponentActor.statuses.dead; will increase the uses of the Amulet by the maximum of the opponent's CR, level or 1, if the opponent has the Dead condition.
  • Added actor flags as consumption targets for usesCount, getting them from the effect's actor.
    • usesCount=flags.world.myName

13.5110.7.5

13.5110.7.4

  • Migration errors quick fix

13.5110.7.2

  • Fix for flags.automated-conditions-5e.grants.attack.criticalThreshold typo in DAE hints

13.5110.7.1

  • Updated pt_BR translation by Kharmans 🤗

13.5110.7

  • Compatibility bump Foundry v13.351
  • Allow isCritical and isFumble for all d20 rolls
  • Fix for modeCounts being undefined for some rolls
  • Move autoRangeChecks into a multi select type setting. Split checks to discreet settings:
    • Melee diagonal reach: All adjacent squares count as within reach no matter the diagonal rules.
    • Melee out of range: Melee attacks further than weapon reach fail.
    • Ranged long disadvantage: Ranged attacks beyond short range but within long range have disadvantage.
    • Ranged out of range: Ranged attacks beyond long range fail.
    • Ranged nearby foes: Hostiles adjacent to attacker impose disadvantage on ranged attacks.
  • Migration for new autoRangeChecks
  • AC5e checks will now always override MidiQOL (if enabled) distance calculations
  • Fix for tiny targets distance calculations
  • Updated Czech translation by Lethrendis 🤗

13.5110.6.3

  • Fix item effects' origins when added on actors from sidebar or compendiums.

13.5110.6.2

  • Cleanup actorData.creatureType Array from empty or double elements.
  • itemLimited should be now available for non transfer active effects too.
  • Better error handling, parser returning 0 for failing to evaluate formulas, ac5e.debug.evaluations per client Boolean setting for quick checks. When a formula evaluation fails due to malformed user entries, the effect uuid and change key logged as a client error notification and in console.
  • Updated pt_BR translation by Kharmans 🤗

13.5110.6.1

  • HP related: hp, hptemp and hpmax (will target temporary max hp)
    • Added noconc keyword for those hp updates to not trigger concentration checks (use by adding in the effect value noconc or noconcentration or noconcentrationcheck which are not case sensitive).
  • HD related: hdLargest, hdSmallest, hd (for hd when consuming, will move from largest to smallest and vice versa for recovering)
  • Abilities: str, dex, con, int, wis, cha. For example usesCount=str, 2 will reduce the actor's Strength value by 2 forever! Use with extra care!
  • Other Attributes:
    • exhaustion, inspiration, deathfailure, deathsuccess
    • movement: walk, fly etc (be wary of those)
    • senses: blindsight, darkvision, tremorsense, truesight (be wary of those)
  • Currency: gp, sp etc
  • Resources: primary, secondary, tertiary, legact, legres
  • Spell slots: spell1, spell5, etc or pact
  • Examples:
    • usesCount=deathfailure,3 will add 3 death save fails until removed!
    • usesCount=hdlargest, 2 will give back 2 used HD (largest available for each of the two)
    • usesCount=hpmax, -5 will increase the actor's max hp by 5, adding 5 temp max hp until removed.
    • usesCount=hp, 5;noconc; will decrease the current hp by 5 and won't trigger a conc save!
  • Fix distance checks to respect unit choices. Based on distanceUnit = canvas.grid.distance
    • nearbyFoes checks against 1 distanceUnit.
    • paralyzed, prone and unconscious check against 1 distanceUnit.
    • Spell Sniper 2024 adds a bonus of 12 distanceUnits if the cantrip range >= 2 * distanceUnits.
  • Post a warning if you roll from a sidebar actor without a relevant token on the scene.

13.5110.5.2

  • Fix for unlinked tokens usesCount = origin consuming from the sidebar actor
  • Fix for usesCount not properly identifying if a flag was supposed to alter a roll or not
  • If usesCount points to an Item that has a quantity and no uses, the quantity will be consumed
  • Updated pt_BR translation by Kharmans 🤗

13.5110.5.1

  • Fix for noCritical flags not working

13.5110.5

  • Fix for Array.from(undefined) throw
  • Introducing queries for updating usesCount of non-owned documents.
  • Added logic for using usesCount=Item.id.Activity.id for items owned by the actor affected by the effect.
    • The id can be id, identifier or name, for example: usesCount=Item.Longsword.Activity.attack, 2 to consume 2 uses of the activity with the identifier attack on an Item named Longsword.
  • Updated Italian translation by GregoryWarn 🤗

13.5110.4.3

  • Correct extraDice multiplication for critical damage
  • Makes sure that normal defaultButton isn't forced

13.5110.4.2

  • Added directly in sandbox activity.attack.type.value and activity.attack.type.classification.
    • You can now use directly melee, ranged and spell, unarmed, weapon
  • Updated pt_BR translation by Kharmans 🤗

13.5110.4.1

  • Fix for throw when Encounter actors are on scene

13.5110.4

  • Fix for damage type tags getting consumed after evaluation of parenthetical terms.

13.5110.3

  • Make sure that itemData.school can be called directly on conditions
  • Fix for actorData.details.level throwing when Encounter actors are on the scene
  • English translation fixes

13.5110.2.1

  • Guard against advantage on attack rolls, giving advantage on damage rolls by default (MidiQOL relevant).
  • Updated pt_BR translation by Kharmans 🤗

13.5110.2

  • Rename actorType.levelCr to actorType.level foe ease of use.

13.5110.1

  • Compatibility bump for d&d5e v5.1.10 (killing my versioning schema 🤣)
  • noAdvantage, noCritical, noDisadvantage flags, used to suppress the relevant modes.

13.519.6

  • Compatibility updates for keypress overrides.
  • Compatibility updates for System flags countmodes, suppressing and overriding roll modes.
  • Fixes for MidiQOL integration.
  • Fix for concentration handling.
  • Added actorType.items helper, returning an Array of the relevant actor's items rollData.
  • Added actorType.levelCr helper, returning the level or CR of the relevant actor.
  • Updated pt_BR translation by Kharmans 🤗

13.519.5.1

  • Make operator removal safer
  • Proper formula mode evaluations for aura's radius
  • Updated pt_BR translation by Kharmans 🤗

13.519.5

  • Adds dis/advantage flags for damage rolls. From now on it is suggested that you are using:
    • flags.automated-confitions-5e.damage.advantage etc
  • Properly parse formulas starting with -
  • Remove quotes from bonuses in en.json lang file
  • Make itemData.type.value available as shorthand
  • Updated Italian translation by GregoryWarn 🤗

13.519.4.1

  • Backwards compatibility, fixing issues with remnant quoted parts in formulas.

13.519.4

  • Reworked _ac5eSafeEval
  • Introduced new parser
  • full ternary operators support while evaluating formulas
  • any bonuses are folded in a final value before added to the Rolls
  • sandbox lazy load
  • Moved repetitive code to Functions in ac5e-setpieces
  • Reworked bonus and set
  • Updated Italian translation by GregoryWarn 🤗

13.519.3.1

  • Hotfix
  • Added ac5e.info.version

13.519.3

  • Added a console only setting, to remove all non 5e statuses from the Token HUD.
    • game.settings.set('automated-conditions-5e', 'displayOnly5eStatuses', true);
  • Reworked sandbox evaluations to make conditionals syntax more user friendly.
  • Added damage roll modifiers, with the keyword modifier and any of the Foundry dice modifiers
    • Added logic for damage advantage and disadvantage, using modifier='adv' and modifier='dis'
  • Added flags a new flag for Damage Rolls. extraDice mode, increasing or decreasing the number of dice per denomination.
    • flags.automated-conditions-5e.damage.extraDice with a bonus=5 will add 5 to each dice part of the formula.
      • eg. 1d4 + 4 + 2d8 => 5d4 + 4 + 7d8 (respects doubling up for critical; not compatible with other critical rules yet)
    • Same for aura and grants keys
  • Added set keyword, similar to bonus, but that will set a value to the provided.
    • eg. for the modifyAC if one uses set=15, it will set the AC to 15.
    • to be used in flags for criticalThrehsold, modifyAC, modifyDC
  • Added actorType.uuid as the actor's uuid
  • Changed the equippedItems logic:
    • actorType.equippedItems.names and actorType.equippedItems.identifiers are Arrays of the relevant data.
  • Fix for aura mode of modifyAC and allies/enemies
  • Fix for removal of ! from conditions in some cases.
  • Fix for missing itemProperties from sandbox data.

13.519.2

  • Added hasArmor: Boolean, hasArmorType: Boolean, hasShield: Boolean
    • hasArmorLight, hasArmorMedium, hasArmorHeavy
  • Removed maximum: 13 from the manifest for users to test on v14 Prototype 1.

13.519.1

  • Fix for initiative bonuses added twice
  • Verified for d&d5e v5.1.9

13.518.2

  • Migrated to non-V2 system hooks

13.518.1.1

  • Hotfix for error when calculating spent uses and isNaN(consumeMoreUses)

13.518.1

  • Added getItemOrActivity(itemID, activityID) helper for evaluation conditions or macros
    • Will return the Item (if no activityID is provided) or the Activity of the rolling actor
    • itemID can be:
      • name
      • identifier
      • id (not that useful)
      • uuid (not that useful, use instead fromUuidSync(uuid))
    • activityID can be:
      • activity.name
      • activity.type
      • activity.identifier (available only if MidiQOL is active)
      • activity.id (not that useful)
      • activity.uuid (not that useful, use instead fromUuidSync(activityID) in this case)
    • Can also be used in macros if you provide an Actor, which can be
      • Actor document
      • name (useful for linked actors)
      • id (useful for linked actors)
      • uuid (more useful for unlinked actors)
      • example const shield = ac5e.getItemOrActivity("Shield", null, "Bob the Fighter"); returning the Item named Shield on the linked actor named Bob the Fighter.
  • Updated pt_BR translation by Kharmans 🤗
  • Verified for D&D 5e system v5.1.8

13.514.1.1

  • Added equippedItemIdentifiers for condition evaluations
  • Properly populate item.getRollData().item.type

13.514.1

  • Verified for d&d5e v5.1.4
  • Expanded <actorType>.movementTurn, <actorType>.movementLastSegment, <actorType>.isTurn and <actorType>.combatTurn
    • Replace <actorType> with one of auraActor, effectOriginActor, opponentActor or rollingActor

13.513.1

  • Verified for D&D5e v5.1.3
  • Properly add getters for activities hasAttack, hasCheck, hasDamage, hasHealing, hasSave returning true if relevant

13.512.3

13.512.2.1

  • Foundry v13.348 compatibility

13.512.2

  • Reworked autoArmor and autoEncumbrance
    • Removed autoArmor settings, as the system supports Stealth Disadvantage and Disadvantage on rolls when not proficient in donned armor.
    • Attack rolls disadvantage still handled by AC5e as the system doesn't automate those yet.
  • Added a workaround for riderStatuses not being properly populated when using a Destroy on empty item.
    • Some more work is needed for adjacent use cases.
  • Compatibility with Combat Carousel when rolling for initiative (and generally for dnd5e.preConfigureInitiative hooks)

13.512.1.2

  • Reinstate ac5e dialog class

13.512.1.1

  • Updated pt_BR translation by Kharmans 🤗

13.512.1

  • D&D5e v5.1.2 system compatibility bump
  • Adds the following as available data for conditions evaluation:
    • movementLastSegment: when in combat, returns the distance of the attacking token's last movement segment (distance between the two last waypoints)
    • movementTurn: when in combat returns the distance the attacking token has travelled during that turn

13.504.10.5

  • Adds ammoProperties to itemProperties, so if an arrow for example is magical but the weapon shooting it is not, the attack will be treated as magical

13.504.10.4

  • Quick fix for activities not functioning properly

13.504.10.3

  • Reinstates using the actual token's name to Checks and Saves roll configuration dialogs.
  • Adds the following as available data for conditions evaluation:
    • options.targets, Array of the activity's targets.
    • opponentAC, the opponent actor's AC value.
    • singleTarget, will be true is there is only one target selected.
    • attackRollOverAC, the attack roll total minus the opponent's AC or undefined.
  • Fix for infinite loop possibility when MidiQOL is active.
  • Fix for preActivityUse hook failing when looking for a message.
  • Fix for some deprecations.
  • Updated Italian translation by GregoryWarn 🤗

13.504.10.2

  • Fix for Modified AC and Modified DC translation strings missing

13.504.10.1

  • Reinstate riderStatuses in the evaluation data
    • Example of usage: flags.automated-conditions-5e.save.advantage | Override | riderStatuses.poisoned to automate Dwarven Resilience against getting the poisoned condition.

13.504.10

  • This is the last release before 5.1.0 becomes the minimum required version of the module.
    • Bugfixes will continue, but no new features will be added for versions < 5.1.0.
  • Added flags for modifying AC (you can use full evaluation conditions as normal).
    • Usage with bonus='+2' to add 2, bonus='1d20' to set it to the result. Negative values to reduce.
    • flags.automated-conditions-5e.modifyAC: will modify the AC of the actor it is applied on.
    • flags.automated-conditions-5e.grants.modifyAC: will modify the AC of the attack's target.
    • flags.automated-conditions-5e.aura.modifyAC: (use bonus and radius etc as usual) will modify the AC of the actors in the aura.
  • Added flags for modifying DC, mainly to be used with actionType of save, death, conc (if skill/tool/check have a set DC then it will work there too)
    • Usage with bonus='+2' to add 2, bonus='1d20' to set it to the result. Negative values to reduce.
    • flags.automated-conditions-5e.<ACTIONTYPE>.modifyDC: will modify the DC of the action the actor takes.
    • flags.automated-conditions-5e.grants.<ACTIONTYPE>.modifyDC: will modify the DC of the action another actor takes against the one with the effect.
    • flags.automated-conditions-5e.aura.<ACTIONTYPE>.modifyDC: (use radius as usual) will modify the DC of actions taken by actors in the aura.
  • Some small fixes and code refactor.

13.504.9

  • Fix for incorrect doubling up of criticals.
    • For v13 and MidiQOL users, you'd better update your Midi to v13.0.16

13.504.8.2

  • Small fixes for distance calculations

13.504.8

  • Compatibility bump Foundry v13.347
  • Distance Calculation Rework for Hex, Gridless, and Square-gridded scenes:
    • Gridless distances greater than canvas.grid.distance but less than canvas.grid.distance * 1.25 are considered equal to canvas.grid.distance.
      • Example: If grid distance is 5 ft, and a token is 5–6.25 ft away, it's treated as 5 ft — helpful for targeting when not enforcing strict distance.
    • Updated _getDistance method signature.
    • Reworked logic for wallsBlocking auras (new keyword)
  • Keyword Matching is Now Case-Insensitive
    • Reworked handleUses() to support this change
    • You can now use usesCount or usescount or UsEsCoUnT etc
  • Fixes for includeSelf and allies/enemies issues
  • Added logic to consume uses from Owned Items. Use with:
  • usesCount: origin, 2 consumes 2 uses from the origin item/activity.
  • usesCount = itemOrActivityUUID, uses consumes 1 or specified number of uses.
    • Comma-separated number = required number of available uses and how many to consume.
  • Added effectOriginActor in available evaluation data as needed.
  • Now supports dashes in keys (useful for scale value, eg @scale.paladin['aura-range'].value)
  • Added global ac5e._target which returns game.user.targets.first().
  • Updated pt_BR translation by Kharmans 🤗
  • Updated Italian translation by GregoryWarn 🤗
  • Updated Czech translation by Lethrendis 🤗

13.504.7

  • Added setting: Automate D&D5e statuses. If disabled (default enabled), AC5e will allow the system or other modules to automate statuses like Blinded, Frightened etc
  • Made sure game.i18n.translations.DND5E is available
  • Reworked getMessageData
  • Properly added hasAdvantage, hasDisadvantage, hasAttack, hasDamage, isCritical, isFumble, attackRollTotal, attackRollD20 to evaluation conditions
  • Fixed spellcastingAbility typo
  • scaling will be either 0 or the system available flag
  • Added spellLevel to match the system's variable, which is the same like castingLevel (baseSpellLevel is also available as the spell's base level)

13.504.6

  • Added isCantrip boolean for condition evaluation.
  • Reworked castingLevel to properly reflect the used spell slot/
  • Improved bonus mode behavior:
    • If the evaluated bonus returns 0, false, or null, the Active Effect will be ignored in tooltips (since it wouldn’t affect the roll).
      • eg when bonus = opponentActor.attributes.hp.pct > 50 ? 0 : '1d4[acid]'
    • Acceptable forms:
      • Pure formula: bonus=1d4[acid] + 5 - 1d2[fire]. Use when only dice and numeric values are needed.
      • Conditional (evaluated): bonus=opponentActor.attributes.hp.pct < 50 ? '1d4[acid]' : 22;. Use string-wrapped dice formulas ('1d4[acid]') or plain numbers when logic is required.
  • Want to support this module? Check out the Automated Condition UI ko-fi goal

13.504.5.2

  • Fix for assignment to constant variable.
  • Updated Italian translation by GregoryWarn 🤗
  • Updated pt_BR translation by Kharmans 🤗

13.504.5.1

  • Change to user settings instead of per client for non-world settings (available for Foundry v13 only)
    • This means that when a specific user is connected, their editable settings will be used, no matter the client they are connecting from.
  • Updated Polish translation by Lioheart 🤗

13.504.5

  • Added new flags for max, min modifiers on d20 rolls.
    • usage flags.automated-conditions-5e.<ACTIONTYPE>.modifier | Override | modifier=rollingActor.attributes.hp.pct < 50 ? 'max12' : 'min8' which will append to a relevant d20 roll, a max12 if the rolling actor is below half health, or min8 otherwise.
    • available also:
      • flags.automated-conditions-5e.aura.<ACTIONTYPE>.modifier
      • flags.automated-conditions-5e.grants.<ACTIONTYPE>.modifier
    • for use one of attack/check/concentration/death/initiative/save/skill/tool
  • Updated disposition checks. Now the following can be used:
    • -2, -1, 0, 1 for exact match based on Foundry's dispositions for SECRET, HOSTILE, NEUTRAL, FRIEDNLY
    • secret, hostile, neutral, friendly for exact match of tokens' disposition
    • ally or same for relative disposition checks, when both of the tokens need to be of the same disposition
    • enemy or opposite for relative disposition checks, which will test between friendly and hostile dispositions only
    • different for relative disposition checks, returning all tokens with different dispositions
    • all just returns all tokens in range, no matter the disposition
  • Fix for healing activities triggering an error when gathering damage types
  • Properly evaluate critical threshold additions
  • More colorpicker fixes
  • Updated Italian translation by GregoryWarn 🤗
  • Updated Polish translation by Lioheart 🤗

13.504.4.1

  • Fix for buttons color pickers misbehaving
  • Changed default white to #f8f8ff to remove a warning for not conforming to the required format, until the user click outside of the string field
  • added default as a keyword to return the default module colors, same like erasing any entry.
    • default or delete the entry to get the default module colors
    • false, null, 0, none to disable the specific attributes color changes
    • game.user.color or user to match the user's Foundry color

13.504.4

  • Fix for error when no damage entry exists on a damage roll...
  • Updated Czech translation by Lethrendis 🤗

13.504.3

  • Fix for threshold evaluations
  • Fix type options.damagetypes => options.damageTypes
  • Updated pt_BR translation by Kharmans 🤗

13.504.2.1

  • Added the ...criticalThreshold flags to be picked up by DAE autocompletion
  • Fix for change in DND5E.ITEM.Property.Heavy instead of ...Item...

13.504.2

  • Added criticalThreshold mode for AC5e attack flags, triggered by using keyword threshold=18 or threshold=-2 in the effect value, setting to a new if lower static threshold or adding the provided bonus (negative to lower), respectively.
  • Added itemLimited keyword for ac5e flags, limiting the conditional flag application when the rolling item is the same that applied the effect to the actor.
    • For example, a passive transfer effect from a weapon, adding a damage bonus when that weapon is being used only.
  • Changes in Roll Configuration dialogs should trigger proper AC5e re-evaluation of flags
    • Reworked doDialogSkillOrTollRender (changes tracked: ability used)
    • Added doDialogDamageRender (changes tracked: selected damage type from multiple types)
    • Added doDialogAttackRender (changes tracked: Ammunition, Attack Mode, Mastery dropdowns)
  • Cleanup of sandbox data to make those work better. Additions:
    • activity.ability in the available evaluation data.
    • attackRollD20 and attackRollTotal for grabbing those in damage evaluations after having rolled a d20 to attack.
    • reworked damage types for evaluations based on selected damages from multiple available ones
      • use as damageTypes.fire || damageTypes.cold for mutliple ones being true, or ['cold', 'fire'].some(d=>damageTypes[d])
      • the old way of damage types being readily available is still supported fire; cold but using damageTypes is recommended and can be more robust
    • consumptionItemName and consumptionItemIdentifier to be used when an activity consumes uses of another, eg
      • For Dragonhide Belt items consuming Focus uses, consumptionItemName.Focus will evaluate to true
  • Limit Grappled attacks disadvantage to only modern rules
  • Added interim support for min/max system flags for saves and checks until system updates.
  • Added proper Heavy rules for modern and legacy rules:
    • To disable them use in console game.settings.set('automated-conditions-5e', 'automateHeavy', false)
    • For the legacy rules, the token.document.width * token.document.height * token.document.scale will need to be lower than 1 in order for the attacking Token to be considered small.
  • Allow bonus and radius to be fully evaluated too, so you could use radius=auraActor.details.level > 17 ? 30 : 10 for example.
  • Verified for Foundry v13.346

13.504.1

  • System compatibility bump for 5.0.4
  • Fix for a forgotten Token instance deprecation
  • Added for bonus ac5e flags, support for effectStacks, when using DAE or Status Icon Counters stacking of effects.
  • Example bonus=(effectStacks + 2)d4

13.503.13.3

  • Fix for not properly pushing parts for bonuses

13.503.13.2

  • Added in sandbox:
    • item.isEnchantment: Boolean, true if it is an enchantment, or enchanted item.
    • item.transferredEffects: Array of transferred effects

13.503.13.1

  • Guard against actor being undefined at getActorToolRollModes

13.503.13

  • Fix for double initiative bonus and not proper highlighting
  • You can now use any of the following in addition to tokenId and opponentId:
    • tokenUuid, actorId, actorUuid for rolling actor/token identification
    • opponentUuid, opponentActorId, opponentActorUuid

13.503.12

  • Adds effectOriginActor data for bonus flags
    • Usage example: bonus=effectOriginActor.abilities.wis.mod;

13.503.11.1

13.503.11

  • v13.345 compatibility

13.503.10.4

13.503.10.3

  • Added 2014 Alert automation (checking for Alert - or its translated string for supported languages - item on the actor for Legacy Rules)
  • Fix for Transform activities triggering an error

13.503.10.2

  • Updated French translation by CaosFR 🤗

13.503.10.1

  • Compatibility with GPS attacks of opportunity

13.503.10

  • paralyzed and unconscious forces damage to be critical only when activity.hasDamage returns true

13.503.9.3

  • Updated Czech translation by Lethrendis 🤗
  • Updated Polish translation by Lioheart 🤗

13.503.9.2

  • Added flags.automated-conditions-5e.spellSniper in the DAE autocomplete options
  • Updated pt_BR translation by Kharmans 🤗

13.503.9.1

  • Added Spell Sniper feat (2014 vs 2024) rules
    • 2014: Spells that have an attack roll, double their range
    • 2024: Casting a ranged spells within 5 ft of an enemy doesn't impose disadvantage on any attack roll and if the spell has at least 10ft range, gets another 60ft
      • Either an item on the actor named Spell Sniper or a relevant flag for flags.automated-conditions-5e.spellSniper | Override | 1 will cancel the disadvantage.
  • Foundry v13.344 compatibility

13.503.8.3

  • Guard against tokens without an actor

13.503.8.2

  • Respect Targeting settings for attacks
  • Fix for incorrent localization string when targeting is set to cancel and warn

13.503.8.1

  • Limit uses of AC5e flags on owned actors by a specific Number
    • once: adding this keyword in the effect's value, will limit the use of the flag to the next relevant roll only
      • especially useful for any features that trigger a specific behaviour on the next roll by the actor with the effect
      • For example, the actor has advantage in the next Attack, Check, or Save roll (3 entries in one active effect):
        • flags.automated-conditions-5e.attack.advantage | Override | once,
        • flags.automated-conditions-5e.check.advantage | Override | once,
        • flags.automated-conditions-5e.save.advantage | Override | once
    • usesCount=Number: will limit the use of the flag to the next <Number> of times
    • BEWARE:
      • The count will be reduced if the rest of the conditions evaluate to true, no matter what the user selects in any relevant Roll dialog if not fast-forwarding.
      • If the effect is a transfer: true one, it will be disabled and if using usesCount they will be reset to the initial value
      • Otherwise the effect will be deleted from the Actor when the uses run out!
    • There are future plans for:
      • allowing any Item/Activity uses to be consumed, even from not owned actors.
      • User opt-in flags
  • Reworked how the module gets the actors rollData when creating its sandbox for evaluations, so that all the relevant data are included while trying to limit the system's compatibility warnings for spell.dc and spell.mod is pre-v5.0.0 setups
  • Removed some dialog.configure handling, until the system fully implements #5454

13.503.7.1

13.503.7

  • Added global Boolean parameter for ac5e.logEvaluationData which if set to true on the client, the available evaluation data will be logged in console after creation. A quick way to familiarize yourselves with what is available to use!
  • Tweaked some hooks
  • Reworked evaluation data, like castingLevel, baseSpellLevel, scaling and now they are avalable
  • Refactor: Limit code duplication by using unified regex-based replacement function.
  • Added Czech translation by Lethrendis 🤗
  • Updated Polish translation by Lioheart 🤗

13.503.6

  • Properly offer backwards compatibility for targetActor
    • Fix for a currentCombatant undefined relevant error
  • Fix for autoRanged checks always returning ranged attacks in short range
  • Small tweaks for canSee() which probably now is at a good state 🤞
  • Fix for missing notifyPreUse function

13.503.4.2

  • More canSee() fixes
  • Fix for missing targetActor from evaluations
  • Updated pt_BR translation by Kharmans 🤗

13.503.4

  • Exposes a checkNearby function to help with Pack Tactics:
    • flags.automated-conditions-5e.attack.advantage | Override | checkNearby(opponentId, 'different', 5, {count: 2})
      • oppenentId is the targeted token's id
      • 'different' designates different disposition compared to the target's; can also use 'same', 'opposite' or 'all'
      • the 3rd passed parameter is the distance to check, 5 units in this case
      • the 4th parameter is an Object which can include:
        • count for the number of tokens to check against
        • includeToken (false by default), which adds the target token if needed by passing includeToken: true
        • includeIncapacitated (false by default), which adds any incapacitated tokens if true
  • More visibility testing fixes

13.503.3

  • Compatibility with combat carousel which calls actor.rollinitiative()
  • Fix attacks failing due to _canSee()

v13.503.2

  • Some settings hints clarifications
  • Proper 5e versioning bump
  • Italian translation update by GregoryWarn 🤗

v13.502.2.1

  • Fix for using initiative, concentration, death as flag <ACTIONTYPES>
  • rollingActor.canMove (same as canMove), opponentActor.canMove will be true if the actor has at least one non zero movement type
  • Updates in Brazilian Portugese, Italian and Polish translation files
  • D&D 5.0.3 compatibility bump

v13.502.2

  • Clarification on Actor References in Evaluations
    • Use opponentActor to access the opponent’s rollData during evaluations, instead of targetActor.
      • targetActor remains available for backwards compatibility, but its usage is now discouraged.
    • This change hopefully improves clarity, especially in cases like saving throws, where the actor rolling the save can also be the target of an item roll. For example:
      • during an attack, you have a clear distinction between the attacking actor and the targeted actor.
      • But during saves, the actor rolling the save can also be an actual target, and the other party (e.g., the spellcaster or trap) is better referred to as the opponent.
  • Fix for wrong localization string in some settings
  • Refactor setpieces code
  • Rework _canSee()
  • Raging/silenced/incapacitated etc checks fixes
    • raging, silenced, no armor proficiency checks for spell items use
    • incapacitated will be checked for activities that have any relevant action as activation cost
  • Fix for subjectTokenId undefined when no message is created (like initiative rolls)
  • Update pt-BR.json by @Kharmans
  • Pre use activity issues cleanup
    • the targeting options for attack changes slightly. Now the module will:
      • Use source actor data only if zero or multiple targets are selected when attacking
      • Cancel roll silently
      • Cancel roll with a warning notification shown to the user's client
        • In all cases a console warning will be shown in the user's client
  • Adds more data in the sandbox for easier evaluations, like isSpell etc to be added in the WIKI soon!

v13.502.1

  • Compatibility bump for v5.0.2
  • Small fix for not posting more than one warnings, for incapacitated/raging/silenced checks
  • Make sure that group or vehicle actors do not break processing
  • Updated Italian translation by GregoryWarn 🤗

v13.501.1.1

  • Updated Polish translation by Lioheart 🤗
  • Updated pt_BR translation by Kharmans 🤗

v13.501.1

  • Deal with Foundry v13 and dnd5e v5.0.0 deprecations
  • Update compatibility and verify module for Foundry v13.342 and 5e v5.0.1
  • Exhaustion automation setting will be only available for 5e legacy rules
  • New GM setting for visibility of the tooltips in chat messages
    • All: players will see tooltips in all chat messages, no matter the actor rolling
    • None: players won't see any tooltips in chat messages
    • Owned: a player will be able to see tooltips in chat messages for rolls from owned actors
    • Players: players will be able to see tooltips in chat messages for rolls from all player owned actors
  • Settings tweaks, so Show tooltip module name and Show chat messages tooltips options are available, only when relevant.

v13.500.4.1

  • Hotfix for ui in equippedItems triggering an error collection...
  • Hotfix for the changelog showing an incorrect example of equippedItems usage
    • corrected example: rollingActor.equippedItems.filter(i => i.includes('Platinum')).length > 2 will be true when the rolling actor has more than 2 equipped items with their names including Platinum

v13.500.4

  • Guards against aura or grants flags being evaluated against non relevant actors
  • Guards against numerous deprecation warnings being generated for attributes.spelldc and attributes.spellmod which AC5e doesn't use, but inadvertently triggers when cloning actor.getRollData() objects
  • Guards against cases of undefined: true being present in the sandbox data
  • Adds for flag evaluations:
    • equippedItems which is an Array of item names, currently equipped on the actor
      • ie rollingActor.equippedItems.filter(i => i.includes('Platinum')).length > 2 which will be true when the rolling actor has more than 2 equipped items with their names including Platinum
    • distance for distance evaluations
      • distance > 15 && distance <= 20 would be true if the distance between the rolling token and opponent token is between 15 (excluded) and 20 (included), but only when distance is available
    • allies/enemies as evaluation conditions for non auras too
      • allies will be true for rolls that the rolling token has the same disposition compared to its opponent (if an opponent is available for that roll)
      • enemies will be true for rolls that the rolling token has a different disposition compared to its opponent (if an opponent is available for that roll)
  • Updated Italian translation by GregoryWarn 🤗
  • Updated Polish translation by Lioheart 🤗

v13.500.3.3

  • Damage hook hotfix

v13.500.3.2

  • Some more bugfixes for attack hooks
  • Fix for effectOriginTokenId evaluations
  • Updated pt_BR translation by Kharmans 🤗

v13.500.3.1

  • Normalize roll data evaluations for ac5e flags
  • In bonus mode flags, use:
  • @ or rollingActor to access roll data from the actor rolling, ie @abilities.dex.mod or rollingActor.dex.mod
  • ## or targetActor to access roll data from a targeted actor (single targeted actor), ie ##attributes.ac.bonus or targetActor.attributes.ac.bonus
  • for auras only, auraActor to access roll data from the aura's source actor, ie auraActor.abilities.cha.mod
  • flags.automated-conditions-5e.aura.save.bonus | Override | radius=10;bonus=auraActor.abilities.cha.mod;includeSelf;singleAura;allies is essentially the level 6 Paladin's Aura of Protection.
  • Cleanup parameters pass to private functions
  • Concentration flag fixes
  • Updated pt_BR translation by Kharmans 🤗

v13.500.2

  • Updated Polish translation by Lioheart 🤗
  • Cleanup in available sandbox data for AC5e flags conditional evaluations
    • canSee: evaluates to true if the rolling actor can see the targeted actor
    • isSeen: evaluates to true if the targeted actor can see the rolling actor
    • rollingActor holds merged data from the rollingActor.getRollData() plus the rolling token
    • targetActor holds merged data from the targetActor.getRollData() plus the targeted token
  • The evaluation data is a work in progress and to help users become acquainted, AC5e will be creating a log with its sandbox data everytime a condition evaluation is happening.
    • It will be disabled in the future when the WIKI is ready and the basic available data are set to stone!

v13.500.1

  • Make sure that when removing blacklisted keywords, an empty string left for evaluation, always evaluates to true
    • as a side effect, leaving the effect value of any AC5e flags empty, it will also evaluate to true
  • Only try to register DAE fields when DAE is actually active
  • Foundry v13 and dnd5e 5.0.0 compatibility update
  • Updated Italian translation by GregoryWarn 🤗

v13.439.2

  • Proper descriptions fix in DAE fields for auras radius=
  • Fix for checks being based some times on targeted token's data
  • AEs can be named the same and should all be counted
  • Updated pt_BR translation by Kharmans 🤗

v13.439.1.1

  • Slightly more up to date DAE field descriptions for AC5e flags
  • Properly evaluate allies and enemies keywords in flags. Omit for affecting all actors.

v13.439.1

  • That is a huge update, so there might be issues, so please let me know by creating issues in the github repository: issues

  • 🐾 If you like what I do, consider supporting this lonely bugbear! Every shiny gold coin helps keep the ideas flowing and the goblins at bay.

  • 🏰 You can also join the Bugbear’s Den to hang out, get help, or check what I might be working on!

  • Initial implementation for the system's actor abilities/checks roll modes for dis/advantage (not fully supported yet by the system).

    • AC5e will use notice and use any of these flags when present on the rolling actor.
  • AC5E flags:

    • Added flags with descriptions in DAE for autocompletion.
    • flags.automated-conditions-5e.ACTIONTYPE.MODE
      • ACTIONTYPE: can be one of all/attack/check/concentration/damage/death/initiative/save/skill/tool
      • MODE: can be one of advantage/disadvantage/bonus/critical/fumble/success/fail
      • These will be evaluated when the actor that has that active effect on, rolls any of the relevant ACTIONTYPE.
    • flags.automated-conditions-5e.grants.ACTIONTYPE.MODE
      • Same ACTIONTYPEs and MODEs as above
      • These will be evaluated when you target the actor that has that active effect on, granting any rolls of the relevant ACTIONTYPE the corresponding MODE.
    • flags.automated-conditions-5e.aura.ACTIONTYPE.MODE
      • Same ACTIONTYPEs and MODEs as above
      • These will be evaluated when you are rolling one of the relevant ACTIONTYPEs and the token of an actor that has that active effect on, is in range!
      • The auras need in the change value of the active effect an entry of radius=15; for example, to designate the aura's range.
      • You can also include:
        • singleAura (mainly for bonus MODE): add that in to make sure that only 1 auras of the same name (the Active Effect's name) can affect the actor rolling, based on higher bonus or closer to the rolling token if of the same bonus.
        • includeSelf: add that in if the aura should affect also the actor that has that active effect on.
    • When using bonus mode, you should include a bonus entry in the change value, like bonus=1d4 + abilities.dex.mod or bonus=-5[fire] for typed damage MODE.
    • All the flags can should allow for sync conditional evaluations, based on data from:
      • rollingActor.getRollData()
        • If the rolling actor has for example 50 hp, attributes.hp.value > 40 would evaluate to true
      • opponentActor.getRollData() when relevant and under target
        • If the target actor has for example 50 hp, target.attributes.hp.value > 40 would evaluate to true
      • activity.getRollData() when relevant
      • item.getRollData() when relevant
      • tokenSize as the rolling token.document.width * token.document.height
      • tokenElevation
      • race: an Array of the rolling actor's [value, subtype, swarm, custom, race] data
      • targetTokenSize as the rolling targetToken.document.width * targetToken.document.height
      • targetTokenElevation
      • targetRace an Array of the target's actor's [value, subtype, swarm, custom, race] data
      • activityDamageTypes which should be returning all the damage types of the relevant activity
      • activityAttackMode
      • activityEffectsStatusRiders which is a Set of all the statuses that the activity might apply on the target if any
        • So if an attack would apply poisoned on a hit, an entry of activityEffectsStatusRiders.poisoned would evaluate to true
      • If a combat is active:
        • isCombatTurn is true when it's the rolling actor's turn
        • target.isCombatTurn same for the target
        • combat.round/combat.turn/combat.current/combat.turns will evaluate against the relevant paths in game.combat
      • worldTime the game.time.worldTime
      • ability the ability used on the roll
      • skill the skill used on the roll if relevant
      • tool the tool used on the roll if relevant
      • spellLevel the spell level of casting a spell or the base level of innate ones
    • You can use ac5e.conditionData({subject: rollingActor, subjectToken: rollingToken, opponent: targetActpr, opponentToken: targetToken, item: rolledItem, activity: rolledActivity, options = {ability, skill, tool,}) to create an image of what data the sandbox for the conditional evaluations would hold.
  • Added a generic enable checkbox in the setting for the colorful AC5e buttons

  • Numerous smaller fixes.

  • Addition of Polish translation and updates in Italian.

v13.436.1.3

v13.436.1.2

  • Quick compatibility update for MidiQOL, making sure the config.midiOptions are taken into account!

v13.436.1.1

v13.436.1

  • Foundry v13 compatibility bump (should be working).

v12.436.5

  • Another fix for MidiQOL compatibility, when both modules check nearby foes and range. If MidiQOL checks for those, AC5e will defer to it.
  • Fix for critical rolls always being highlighted.
  • Better indication of keypresses and module flags being present during a roll.
  • First pass for evaluation of statuses/riders on activities active effects.
    • For example, adding in a feature for Dwarven Resilience a flags.automated-conditions-5e.save.target.advantage | Add | poisoned, means that the actor will be rolling with advantage on any saves against an activity that would apply the Poisoned status.
  • Update pt-BR.json by @Kharmans

v12.436.4

  • Defer to MidiQOL.computeDistance() when the module is active.

v12.436.3

  • Fix for armor stealth disadvantage.

v12.436.2

  • Expect ac5eConfig being an empty object.

v12.436.1

  • Compatibility bump for dnd5e 4.3.6
  • Added AC5E button colorpicker
  • Added initial pass for automating Enviromental Hazards from the 2024 dnd5e ruleset (setting added, default false)
    • Burning
    • Suffocating

v12.422.11

  • Closes #194
  • Adds parameters in some helpers:
    • _getActionType(activity, returnClassification = false)
    • _getDistance(tokenA, tokenB, includeUnits = false)
  • For saves/checks show chat tooltip if targets.size <= 1 with commit 16622b9
  • Removes one type of expression evaluation as incomplete commit 5cec32a

v12.422.10

  • Much more usable conditions for flag evaluations
  • Fix for some expanded conditions.
  • Exposed some helpful functions, under globalThis.ac5e
  • Reinstate from source only advMode calculations.

v12.422.9

  • Fix for skill flags not working

v12.422.8

  • Better support for MidiQOL
  • Some small fixes

v12.422.7

  • Added token name on save and check configure dialogs
  • Expanded raceOrType functionality to get the correct returns
  • Fixed _canSee() functionality
  • Expanded ac5eFlags functionality and logic to gather flags from source and target.

v12.422.6

  • Fix for auto range checks
  • Fix for flags checks
  • pt-BR translation update by @Kharmans !
  • Change of how fail flags are affecting rolls by passing a target value of 1000

v12.422.5

  • Fix for criticals not being properly highlighted
  • Fix for initiative rolls

v12.422.4

  • Fix for Frightened when no effect origin is present
  • Fix for Grappled when no effect origin is present
  • Added target: 'disadvantage' for attacks when Hiding

v12.422.3

  • Fix for rolling always critical when MidiQOL is active!

v12.422.2

  • First public 4.2.2 release
  • Added modern rules for conditions with any slight changes gated behind the dnd5e system's rules choice.
  • Should be compatible with Vanilla 5e, MidiQOL, Ready Set Roll.

v12.422.1

  • Compatibility update to support 5e 4.2.2 and higher.
  • First pass into module flags which will alter advantage mode of relevant rolls (documentation to follow).
  • Next version will implement modern/legacy rules as needed

v12.331.3.2

  • pt-BR translation update by @Kharmans !

v12.331.3

  • Added incapacitated status check for spells use.
  • Incapacitated shouldn't be considered when testing for nearby foes. Closes #166
  • it.json by @GregoryWarn in #163

v12.331.2

  • Fix for raging and silenced checks not working properly.
  • The proper flag for Subtle Spell is flags.automated-conditions-5e.subtleSpell | Override | 1

v12.331.1

  • Foundry v12 only compatibility
  • Changes to getDistance calculations based on the work of Illandril in Illandril's Token Tooltips (big thanks!)
    • Should be calculating distances in 3D and hardcodes as Token's "height" the minimum of token.document.width or token.document.height (in a future update, a proper z-axis height could be implemented).
  • Added casting spells checks automation (with options to do nothing/enforce/warn) for:
    • Rage/Raging,
    • Silenced and not having a Subtle Spell (localized string) named Active Effect, or a flags.automated-conditions-5e.subtleSpell | Override | 1

v11.315331.3.1

  • Small fix for fr.json in #158, thanks @CaosFR

v11.315331.3

  • Handle items without short and long range set more gracefully. Closes #156

v11.315331.2

  • Added French translation, with #154 thanks to @CaosFR

v11.315331.1

  • System compatibility bump for 5e v3.3.1, closing #142
  • Added Russian translation, closing #144 thanks to @VirusNik21

v11.315321.3

  • Merged #139 - Italian translation. Thanks to @GregoryWarn.

v11.315321.2

  • Closes #137 - Exhaustion for Death Saves is always Enabled.

v11.315321.1

  • Just a compatibility bump for 5e 3.2.1 and Foundry v12
  • pt_BR translation updates by @Kharmans (thanks as always)

v11.315312.7

  • Closes #125 - implement checks for non-proficient equipped shields, allowing for these to alter relevant rolls (like Armor already does).

v11.315312.6

  • Closes #122 - reinstates compatibility with MidiQOL flags altering rolls (and shows a generic MidiQOL (flags)) in the tooltip.

v11.315312.5

  • Update pt-BR.json by @Kharmans in #111 and #116
  • Closes #110 - nearbyFoe calcs no matter options for target enforcement by @thatlonelybugbear in #113
  • Closes #112 - Added some more targetElements querySelectors for RSR by @thatlonelybugbear in #114
  • Closes #108 - Lack of armor proficiency restricts spell casting by @thatlonelybugbear in #115
  • Closes #109 - Respect preexisting objects by @thatlonelybugbear in #117
  • Closes #118 - Add correct targetElements for Core rolling chat messages tooltips by @thatlonelybugbear in #119

v11.315312.4

  • Closes #94, adding Dodging and Hiding automation.
  • Closes #104, adding a setting for switching off Nearby Foe automation (also adjusted disposition requirements to be of the opposite type, friendly vs hostile).
  • Closes #106, removing some eval() calls.

v11.315312.3

  • Update pt-BR.json by @Kharmans in #101
  • Closes once more #77, fixing the armor issues, once and for all 🤞

v11.315312.2.1

  • Hotfix for hasArmor not being defined.

v11.315312.2

  • Closes #97, allowing all equipment type Items to impose Stealth disadvantage.

v11.315312.1

  • Closes #98, adding dnd5e v3.1.2 compatibility.

v11.315311.6

  • Closes #89, reinstating MidiQOL compatibility.

v11.315311.5

  • Closes #87, #88, #92
  • Still investigating #89, will rewrite the MidiQOL integration code.

v11.315311.4

  • Closes #85. Fixes the fix of the wrong tooltip format...

v11.315311.3

  • Closes #82. Fixes wrong tooltip format.

v11.315311.2

  • Added a setting to not show module name in tooltips. Closes #80.

v11.315311.1

  • Initial work for compatibility with all main rollers, like MidiQOL #49, Ready Set Roll #50 and Group Rolls.
  • Closing #72 bug regarding AC calculations error when not set to equipped armor.
  • Closing #75 with settings for AC5e tooltips on Dialogs and generated Chat Messages when available (needs some more tweaks for RSR Item roll chat messages).
  • Bumping dnd5e max version to 3.1.1 as tested.

v11.315.310.2

  • pt-BR translation added by @Kharmans 71
  • small en translation edits.

v11.315.310.1

D&D5e 3.1 compatibility update.

  • Added dnd5e.preRollConcentration Hook to deal with conditions affecting concentration saving throws.
    • Exhaustion 3-5 applies disadvantage.
    • Heavy Encumbrance applies disadvantage.
    • War Caster named Item applies advantage.

v11.315.304.7

Closes 63 with a new setting for AC5e targeting options.

When 0 or more than 1 targets are selected, AC5e will not be able by default to calculate correctly advantageMode/damageMode as this is done based on the first of the game.user.targets only. There is now a setting for the GM to decide how AC5e will deal with targeting and rolling an Attack or Damage, or try to Use an Item that has an attack and Target any of the Individual target options in its details tab. The options are as follows:

  • From Source Only: The advantageMode/damageMode will be calculated based on effects/conditions etc on the Source actor only (default option),
  • Do nothing: No calculations whatsoever will take place,
  • Enforce targeting: Will cancel the incoming Roll or Item use, and display a warning for the user to target 1 Target (Use with caution).

v11.315.304.6.8

  • Fix bug when rolling an attack and automated encumbrance is true.

v11.315.304.6.7

  • Default settings fix.
    • Tooltips on
    • Armor automation off
    • Range automation off
    • Exhaustion automation on
    • Encumbrance automation off (will need also dnd5e system setting to be set to Variant option too).

v11.315.304.6.6

  • Fixes typos
  • Closing 43 (encumbrance automation).
  • Closing 57 (more translations about attack/damage rolls and targets selected).
  • Closing 58 (bail out of attack/damage rolls suggestions, if no targets selected).

v11.315.304.6.3

  • Closes 53

v11.315.304.6.2

  • 51- fix saves advantage mode when not proficient with the armor

v11.315.304.6.1

  • Finally fix attackrolls issue in #48
  • Closes #44

v11.315.304.6

  • Closes #44
  • Add lang file by in #47
  • Fixed Armor automation issues and tooltips.

v11.315.304.5.4

  • Added a setting for automating Exhaustion 5e rules or not. Closing: #37
    • Should allow for compatibility with modules offering alternative rules for exhaustion (will add the dndOne rules as an option soon).

v11.315.304.5.1 and v11.315.304.5.2

  • Some typos
  • Sharpshooter: limit to only rwak

v11.315.304.5

  • Use game.i18n.translations as a first step in #27
  • Add helpers for disposition and checking nearby tokens #29
  • Prone fix and nearby foes for ranged attacks check #31
  • Dialog tooltip show/hide settings #32
  • Settings and logic for armor and range automation #33
    • Armor automation (default off)
      • Ability Checks, Saves and Attack Rolls for (STR || DEX) based rolls, if the Actor is not proficient in the equipped suit of Armor.
      • Imposes disadvantage on Stealth checks when the relevant property of the Armor is selected.
    • Range automation (default off)
      • Attacking with a ranged weapon at long range imposes disadvantage on the roll (Long Range).
      • Attacking with a ranged weapon, when an enemy is adjacent, imposes disadvantage on the roll (Nearby Foe).
      • Attacking with a ranged weapon at a distance longer than the long range, imposes a fail on the roll (Out of Range).
      • Crossbow Expert: Ignores Nearby Foes with
        • A flag on the Actor flags.automated-conditions-5e.crossbowExpert | Override | 1 or
        • An Item named Crossbow Expert.
      • Sharpshooter: No disadvantage when shooting at long range with
        • A flag on the Actor flags.automated-conditions-5e.sharpShooter | Override | 1 or
        • An Item named Sharpshooter.
    • Show/hide roll dialog tooltips (default on)

v11.315.304.1

v11.11.2

  • Make sure that config.parts:<string>
  • Use falsy checks for !Array.length

v11.11.1

  • Bump for v11 only branch and some small additions. More things to come :)

v11.0.11

  • Hotfix for v10.

v11.0.10

  • Version bump that will be the last v10 compatible one.

v11.0.1

  • Compatibility bump for Foundry v11.300 and make system dnd5e required with minimum version 2.0.1.

v11.0.0

  • Compatibility bump for Foundry v11.

v10.0.3

  • Quick fix for unlinked tokens.

v10.0.2

  • Closing #3: Melee attacks on Prone targets will have advantage when distance <=5, and disadvantage otherwise.
  • Closing #4: Added RollDeathSaves. Exhaustion levels 3-5 will grant disadvantage of death Saves.

v10.0.1

  • Closing #1: Using CONFIG.DND5E.conditionTypes to fetch effect labels.
  • _getMinimumDistanceBetweenTokens should respect diagonal movement types (will make sense in the future)

v10.0.0

  • Initial commit