- 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
rangeflag surface and runtime behavior.- Packed range overrides are now authored on
flags.automated-conditions-5e.range.overrides. - Legacy
flags.automated-conditions-5e.attack.rangeis still accepted as a compatibility alias for now. - Granular keys such as
range.short,range.long,range.reach,range.noLongDisadvantage,range.nearbyFoeDisadvantage, andrange.outOfRangeFailremain available. - Numeric range leaf keys now follow the normal AC5E
set=/bonus=value style. itemLimitednow works normally on range entries too, so range effects can be tied to the rolled item more reliably.
- Packed range overrides are now authored on
- Clarified how range overrides apply during play.
- Range profile changes such as short/long/reach and out-of-range fail can affect both
attackanduseflows. - 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.
- Range profile changes such as short/long/reach and out-of-range fail can affect both
- 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, includinggrantsandauravariants.- 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=maxandmodifier=minshorthand aliases for the existingmodifier=maximizeandmodifier=minimizebehavior. - Added
originItemandoriginActivityevaluation data for Active Effects.- This makes it easier to reference the originating item/activity in conditions and formulas.
originItemTypeandoriginItemPropertiesare also available for simpler origin-item checks.
- 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.
- Added tooltip attribution when a
range.noLongDisadvantagerule suppresses long-range disadvantage. - Improved range helper context resolution by letting
autoRangedand related checks fall back fromactivitydata tooptions.actionTypeandoptions.item, including UUID-based item resolution. - Backfilled missing
sandbox.activity.id/uuid/identifiervalues when an activity exists, while guarding non-activity roll paths such as initiative, checks, and saves from null activity access.
- 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.checkRangedcall overrides any MidiQOL range checks by default.
- Fix for missing v14 attack-roll config criticalFailure
- Updated pt_BR translation by Kharmans 🤗
- Updated Italian translation by GregoryWarn 🤗
- Added
hasEffectsfilter 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.
- 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.
- For users still on Foundry v13 and D&D5e 5.2.5, the last compatible AC5E release is
- 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.
- 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.
- Added
isAoEhelper for Area of Effect activities.
- 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.classIdentifierfor 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/diswithmin/max; any remaining issues in that exact combination are waiting on the upstream D&D5e fix.
- Made sure that the sandbox receives item properties.
- Final D&D5e
5.2.5compatibility 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:
rangenow has one shared public surface instead of separateattack.rangevariants.- Canonical range toggles are now
longDisadvantage,noLongDisadvantage,nearbyFoeDisadvantage,noNearbyFoeDisadvantage,outOfRangeFail, andnoOutOfRangeFail. - Legacy aliases such as
fail,noFail, andnearbyFoesare still accepted for compatibility. - Current stable exceptions: generic
no<Status>suppressors such asnoProneremain boolean-style only for this release (no conditional oroptinhandling), and granular range subkeys such asflags.automated-conditions-5e.range.shortexpect a direct value/expression rather than packedshort=...; ...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 matchingac5e.getItems(...). - Wiki updates.
- Fixed damage roll modifier opt-ins so they show up correctly in the damage dialog.
- Fixed
ac5e.usageRulesobject registrations soenforceModeis kept and works correctly. - WIKI updates
- Fixed
infoentries withenforceMode=normal/advantage/disadvantageso they are preserved through AC5E roll processing and correctly force the final d20 roll mode. - When
enforceModewins, overridden pure d20-state entries no longer consumeonce, cadence, orusesCount. - 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
modifyDCapplies, 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.
- 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.bonusso 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
onceattack 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 🤗
- Fixed duplicate
damage.bonusentries with identical formulas so both contributions apply instead of being collapsed by the rebuild dedupe logic.
- Added the
Visibility checksworld 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 checksis 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.
- 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.
- Access via
canSeenow 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
canSeelogic of handling tokens with vision disabled.
damage.extraDicenow handles leading+values correctly.- Damage modifiers now support
maximizeandminimize, 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 asac5e.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 containsfireball.
- Combat cadence turn syncing now updates within the original combat advance instead of triggering a second AC5E combat update.
- Added
info | enforceMode=normal/advantage/disadvantagefor forcing the final d20 roll mode, with tooltip attribution for the active enforcing entry.
- Quick fix for multiple combat updates triggering overtime hazards.
- 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.
criticalStaticnow works ondamage.bonusentries, includingaddTotargeting and created typed damage parts.- Damage-dialog opt-ins now include
damage.infoentries. ac5e.getItems(...)andac5e.hasItem(...)now supportpropertiesfilters, including combinations like{ type: 'weapon', properties: ['hvy', 'mgc'] }.- Reinstate missing
itemdata from the sandbox. - Some codebase cleanup.
- Fix for broad
ragechecks
- Fix for
addTonot being added in single type damage parts. - Updated pt_BR translation by Kharmans 🤗
- Preserves system-provided
roll.options.critical.bonusDamagethrough damage-dialog rerenders so forced crits retain their extra dice instead of losing them during AC5E rebuilds. - Unified
damage.bonusadd-to routing and tooltip filtering so base and opt-in entries now share the same damage-part targeting, and tooltips hide entries whenaddTo/damage-type filters stop matching.
- Fix for
.aura.damage.bonusnot correctly updating cadence when toggled as an opt-in.
- Adds
optinsupport for...damage.modifiermodes
- 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 🤗
- 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
infosupport 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, andflags.automated-conditions-5e.check.infocan now be used to show AC5E reasons and process side effects without changing the rolled formula. infoentries now surface correctly in AC5E/Midi tooltip attribution and survive use flows that resolve after the activity succeeds.
- Full flag forms such as
- Added
update=...for allowlisted actor value changes, designed to pair naturally withinfo.updatesupports 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(...)andac5e.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 containsfire.
- Reworked
criticalStatichandling fordamage.extraDice.criticalStaticextra 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 Diceand other selected opt-in reasons more reliably in combined attack/damage workflows.
- Damage tooltips now preserve AC5E
- Added transient advantage/disadvantage conversion support.
convertAdvantageandconvertDisadvantagelet a rule turn native d20 advantage/disadvantage into AC5E-driven bonus formulas instead of rolling2d20kh/kl.hasAdvantage/hasDisadvantageremain usable for downstream conditions even when the actual d20 roll is converted back to a straight roll.
- Added attack-only
abilityOverride.abilityOverridecan now be used as an evaluated AC5E attack flag, includinggrantsandauravariants, 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/convertDisadvantagecan 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.
- 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
modifyACand forced hit/miss sentinel AC changes aligned between attack adjudication, damage dialogs, and created chat messages. - Damage rolls triggered from
attack,save, orcheckactivities now hydrate from the latest associated roll message for that originating workflow.
- This keeps
- 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/Ctrlcontinue to act as additive advantage/disadvantage sources when not used as override combinations.Shift+Alt/Shift+Ctrlnow 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, andd20ResultOverTargetstyle 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.
- Added generic
- Stabilized damage dialog rerender behavior.
- Hardened damage
addTorouting across formula-altering damage entries.- Damage-type conditions such as
firenow correctly control whether an entry is available, whileaddTo=...only controls which damage roll is modified. - Fixed
addTo=base, typedaddTo=<damageType>, and combinations such asfire;addTo=thunderso opt-in and non-opt-in entries apply to the intended damage part more reliably.
- Damage-type conditions such as
- 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
modifyACopt-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.
-
Expanded attack
criticalThreshold/fumbleThresholdformula handling to accept numeric expressions with dice and math helpers such asmin(...)andmax(...).- 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.
- This allows threshold flags like
-
Expanded
damage.extraDicecriticalStatichandling to support multiplier literals such asbonus=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
1d8and2d6. - Example:
flags.automated-conditions-5e.damage.extraDice | criticalStatic; 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
-
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
partialConsumesupport forusesCount.- 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 aspartialConsumeandcriticalStaticare serialized back into runtime evaluation correctly.- This keeps structured registrations aligned with equivalent raw
value: "..."rule strings.
- This keeps structured registrations aligned with equivalent raw
-
Added
ac5e.usageRules.showKeys()to expose the supported object-form registration keys and their intended usage. -
Consolidated MidiQOL
modifyDCattribution display for ability/save rolls into a single tooltip line.setand additivebonuslogic is unchanged (setbaseline, then additive bonuses).- Multiple AC5E
modifyDCsources now render as one combined reason list instead of repeatedModified DC X (Y)lines.
- Reworked MidiQOL attribution sync for save/check flows so AC5E advantage and
modifyDCreasons 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).
- Fixed status condition handling to use roll-data statuses directly, without rewriting
actorData.statuses.
- Improved save/check dialog re-evaluation when ability selection changes (including MidiQOL ability dropdown flows).
- AC5E now re-runs flag evaluation when
abilitychanges in the d20 roll config dialog forsaveandcheckhooks. - Fixes cases where
save.modifyDCand other ability-scoped flags stayed on the initially preselected ability (for example DEX) after switching to another ability (for example WIS).
- AC5E now re-runs flag evaluation when
- 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
modifyDCreasons 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
criticalStaticsupport fordamage.extraDiceentries.criticalStaticentries 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
addTotargeting. - Example:
flags.automated-conditions-5e.damage.extraDice | bonus=3;criticalStatic
- Added
ac5e.debug.usesCountfor targetedusesCountdiagnostics (parse, resolution path, blocked reason, queued update summary) without enabling full global debug noise.
- 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/extraDicereasons 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 (
*//) withaddTotargeting (all, base, or selected damage types). - Damage formula data references now resolve through Foundry
Roll.replaceFormulaData(...)before transform.
- Unified transform pass now applies to both base and selected opt-in damage terms (
- 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.
forceOptinentries are treated as active selections consistently in damage adjustment paths.
- Fixed damage modifier ordering so
min/maxsuffixes attach to dice terms before/or*modifiers, avoiding merged tokens like/2min10that break roll parsing. - Expanded
rangeflag support to override ranged automation gates per effect (includinggrantsandaurasources).- Added support for:
nearbyFoeDisadvantage/noNearbyFoeDisadvantagelongDisadvantage/noLongDisadvantagefail/outOfRangeFail/noFail/noOutOfRangeFail
- These can be provided as standalone toggles or evaluated expressions in
rangevalues.
- Added support for:
- 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 yieldbonus=1d6[fire]on one roll andbonus=1d6[cold]on another.
- Example:
- Fix for
usesCountwith non-actor targets, which caused errors instead of no-op behavior when trying to consume from undefined sources. - Expanded Final Stand trigger coverage for
usesCountHP/resource-style consumption:- Added handling for exhaustion reaching configured max level.
- Added handling for
abilities.<abilityId>.valuereaching0. - Added handling for
hp.max-style consumption paths reaching<= 0.
- Fixed item quantity update path to write resolved
newQuantitydirectly tosystem.quantity. - Refactored
_hasItemhelper 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
_setAC5ePropertieswithout requiring full global debug logging. - Message/use resolution hardening:
getMessageDataand use-config resolution now prefer prehookmessage.data.flagswhen present, with fallback tomessage.flags.- Message flag reads for DND5E/AC5E scopes are now centralized for consistent originating/usage resolution.
- 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:AC5Efor normal self-sourced opt-ins.AC5E Ask for permissionfor 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
modifyACopt-ins now use context-aware routing:flags.ac5e.modifyACentries route to ask-permission.flags.ac5e.grants.modifyACentries remain in the mainAC5Efieldset.flags.ac5e.aura.modifyACentries stay inAC5Eonly 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
oncePerTurnentries so opt-in and non-opt-in cadence flags unlock correctly on turn changes. - Cadence persistence now replaces the full
flags.automated-conditions-5e.cadenceobject 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.
- Fixed cadence reset behavior for
- 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
0or below. - Effects that do not risk dropping HP are no longer forced into disabled opt-in checkboxes.
- Non-opt-in entries are only converted to Final Stand when they would drop HP to
- 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.
- Short aliases like
- Added
no<Status>support acrosssource,grants, andaurapaths, including keys likeflags.automated-conditions-5e.grants.noProne.- Status override tooltips can now include override names for clearer context.
- Example:
Prone (Ignore Prone in Rage).
- Example:
- Status override tooltips can now include override names for clearer context.
- Added a context keyword registry API for reusable evaluation aliases.
- Runtime registration:
ac5e.contextKeywords.register({ key, expression })orac5e.contextOverrideKeywords.myKeyword = (context) => ... - Persistent world registration:
ac5e.contextKeywords.registerPersistent({ key, expression }) - Hook and helpers:
ac5e.contextKeywordsReady,isPlayerPersistEnabled,setPlayerPersistEnabled
- Runtime registration:
- Added
ac5e.usageRulesAPI for runtime rule registration and opt-in/cadence-compatible injections.- Supports
register/remove/clear/list, pluscanPersistandreloadPersistent. - Added
persistent: trueregistration path for world-level usage rules stored in module settings. - Runtime registrations remain client-local.
evaluatefunction rules are runtime-only; persistent rules must use serializable expression fields (for examplecondition).- Usage-rule opt-in labels now avoid duplicate naming when a provided
namematches the primary rule/effect label. - Added
scopesupport:scope: "effect"(default) keeps the rule as an effect-driven keyword helper.scope: "universal"additionally emits direct pseudo-rule entries for global application.
- Supports
- 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/usesCountreferences to avoid queued-job crashes. - Threshold-style tooltip labels now render cleanly instead of showing
[object Object].
- Better handling of malformed
- 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.
- Added
optinkeyword, 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=...anddescription=..., with localized auto-description fallback and clearer target AC phrasing. - Added opt-in usage timing keywords:
oncePerTurn,oncePerRound, andoncePerCombat.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.
- Unnamed duplicates are now disambiguated automatically (for example
- Added Final Stand handling for HP-consuming
usesCountflags: when usage would drop HP to0or below, the flag is exposed as an opt-in with a localizedFinal 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.
- Added
addTotargeting support for damage flags acrossbonus,extraDice,diceUpgrade, anddiceDowngrade.- Example:
bonus=2d6[acid];addTo=fireapplies only to fire damage parts. - Example:
bonus=^2;addTo=allapplies to every damage part.
- Example:
- Added
extraDicemultiplier syntax for damage terms (x2,X2,^2). - Added
@spellLeveltoken support for damage bonus formulas, resolved from originating item-use data.
- 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
usesCountconsumption when a roll is canceled before completion (empty post-rollrollspayload).
- 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, optionaldescription=reason text, andchance=<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.statusEffectsReadyfor override registration, and support on-demand status suppression flags (for examplenoProne) 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()(orawait ac5e.cadence.reset({ combatUuid })).
- Override example:
- Added
ac5e.troubleshootersnapshot 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.mdguide for anyone wanting to help with module documentation.
- Fix for diagonal distance calculation when height difference is involved.
- Closes #716
- Closes #714 - Fix for
activitybeing undefined
- Patched
CONFIG.Actor.documentClass.prototype.applyDamageto include themessageIdwhen it's triggered by a Chat messagednd5e.preApplyDamageanddnd5e.applyDamageHooks should now includeoptions.messageIdmaking it easier to retrieve relevant data.
- Added more options in the
checkNearby(tokenRef, dispositionRef, radius, parameters)parameters Object.countcan now be:true: returns the Number of valid tokensNumber: the function returns the Boolean result of the checkvalidTokens.length >= count
hasStatuses: an Array of statuses that the valid tokens need to have to be included.- change for
radiuslogic. If the user inputs0, 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 🤗
- 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.
- Verified for D&D5e v5.2.5
- Refactored actionType assignment in sandbox
- Fixed some typos.
- Ensure enchantment effects origins are not overwritten
- Sanitize
midiOptionsbefore cloning to avoid circular refs when MidiQOL is active.
- 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 namesactorType.equippedItems.identifiers: Array of equipped item identifiers
- Updated pt_BR translation by Kharmans 🤗
- Verified for D&D5e v5.2.4
- Added filters in
checkNearby()for:partyMemberBoolean (default false) to return onlygame.actors.partymembersincludeIncapacitated,false,trueor'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).
- 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.
- Fix for destructuring errors when triggering ability rolls via macros
- Enhance current MidiQOL attacks attribution, creating a different category in the AC5e tooltips
- Expand
usesCountto consume from other actors toousesCount=opponentActor.exhaustion, -1will add one exhaustion level on the opponent of the relevant roll.
- Fix for attackMode changes during the Attack Roll configuration dialog not properly resetting the target's AC
- Allow
bonus=infoto pass through so AE names appear in tooltips without requiring additional changes. - An AE named
Secret bonuswith a change value offlags.automated-conditions-5e.save.bonus | bonus=info; oncewill now showBonus: Secret bonusin the tooltip without applying any actual bonus once before deleted.
- Fix for not trimmed
once, not working :) - Updated Italian translation by GregoryWarn 🤗
- System 5.2.2 compatibility bump
- Fix condition evaluation where logical expressions (||, &&) fail due to missing keyword variables
- System 5.2.0 compatibility bump
- Better handle unary minus and coin flips.
- If an
auraflag doesn't include aradiuskeyword, it will apply to the whole scene no matter the distance from the source. - Updated pt_BR translation by Kharmans 🤗
- Another fix for adjacency
- Quick fix for effect deletions
- Properly break when
testAdjacencyreturns true
- Replaced
canvas.grid.testAdjacencycalls with a custom testAdjacency function which doesn't consider diagonal rules.
- Quick fix for
criticalThresholdfumbled checks...
- Added
nonEffectActorwhich will be returning the data of the actor that isn't theeffectActor. Should make the decision about which type of actor to use each time (rollingActororopponentActor) easier 🤞. The actor that has the ac5e flag applied via the active effect, versus the one that doesn't!
- Added
fumbleThresholdflags for attacksflags.automated-conditions-5e.attack.fumbleThresholdflags.automated-conditions-5e.grants.attack.fumbleThresholdflags.automated-conditions-5e.aura.attack.fumbleThreshold
- Added
effectActorwhich will always point to the actor which has the effect applied. - For
usesCount=consumptionTarget, consumptionValue, if provided, theconsumptionValuecan 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.
- Example,
- Added actor flags as consumption targets for
usesCount, getting them from the effect's actor.usesCount=flags.world.myName
- Updated Italian translation by GregoryWarn 🤗
- Migration errors quick fix
- Fix for
flags.automated-conditions-5e.grants.attack.criticalThresholdtypo in DAE hints
- Updated pt_BR translation by Kharmans 🤗
- Compatibility bump Foundry v13.351
- Allow
isCriticalandisFumblefor all d20 rolls - Fix for
modeCountsbeing undefined for some rolls - Move
autoRangeChecksinto 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 🤗
- Fix item effects' origins when added on actors from sidebar or compendiums.
- Cleanup
actorData.creatureTypeArray from empty or double elements. itemLimitedshould be now available for non transfer active effects too.- Better error handling, parser returning
0for failing to evaluate formulas,ac5e.debug.evaluationsper 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 🤗
- HP related:
hp,hptempandhpmax(will target temporary max hp)- Added
noconckeyword for those hp updates to not trigger concentration checks (use by adding in the effect valuenoconcornoconcentrationornoconcentrationcheckwhich are not case sensitive).
- Added
- 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 exampleusesCount=str, 2will reduce the actor's Strength value by 2 forever! Use with extra care! - Other Attributes:
exhaustion,inspiration,deathfailure,deathsuccess- movement:
walk,flyetc (be wary of those) - senses:
blindsight,darkvision,tremorsense,truesight(be wary of those)
- Currency:
gp,spetc - Resources:
primary,secondary,tertiary,legact,legres - Spell slots:
spell1,spell5, etc orpact - Examples:
usesCount=deathfailure,3will add 3 death save fails until removed!usesCount=hdlargest, 2will give back 2 used HD (largest available for each of the two)usesCount=hpmax, -5will 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.distancenearbyFoeschecks against 1 distanceUnit.paralyzed,proneandunconsciouscheck against 1 distanceUnit.Spell Sniper 2024adds 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.
- Fix for unlinked tokens
usesCount = originconsuming from the sidebar actor - Fix for
usesCountnot properly identifying if a flag was supposed to alter a roll or not - If
usesCountpoints to an Item that has aquantityand nouses, the quantity will be consumed - Updated pt_BR translation by Kharmans 🤗
- Fix for
noCriticalflags not working
- Fix for
Array.from(undefined)throw - Introducing queries for updating
usesCountof non-owned documents. - Added logic for using
usesCount=Item.id.Activity.idfor items owned by the actor affected by the effect.- The
idcan be id, identifier or name, for example:usesCount=Item.Longsword.Activity.attack, 2to consume 2 uses of the activity with the identifierattackon an Item named Longsword.
- The
- Updated Italian translation by GregoryWarn 🤗
- Correct extraDice multiplication for critical damage
- Makes sure that normal defaultButton isn't forced
- Added directly in sandbox
activity.attack.type.valueandactivity.attack.type.classification.- You can now use directly
melee,rangedandspell,unarmed,weapon
- You can now use directly
- Updated pt_BR translation by Kharmans 🤗
- Fix for throw when Encounter actors are on scene
- Fix for damage type tags getting consumed after evaluation of parenthetical terms.
- Make sure that
itemData.schoolcan be called directly on conditions - Fix for
actorData.details.levelthrowing when Encounter actors are on the scene - English translation fixes
- Guard against advantage on attack rolls, giving advantage on damage rolls by default (MidiQOL relevant).
- Updated pt_BR translation by Kharmans 🤗
- Rename
actorType.levelCrtoactorType.levelfoe ease of use.
- Compatibility bump for d&d5e v5.1.10 (killing my versioning schema 🤣)
noAdvantage,noCritical,noDisadvantageflags, used to suppress the relevant modes.
- 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.itemshelper, returning an Array of the relevant actor's items rollData. - Added
actorType.levelCrhelper, returning the level or CR of the relevant actor. - Updated pt_BR translation by Kharmans 🤗
- Make operator removal safer
- Proper formula mode evaluations for aura's radius
- Updated pt_BR translation by Kharmans 🤗
- Adds dis/advantage flags for damage rolls. From now on it is suggested that you are using:
flags.automated-confitions-5e.damage.advantageetc
- Properly parse formulas starting with
- - Remove quotes from bonuses in en.json lang file
- Make
itemData.type.valueavailable as shorthand - Updated Italian translation by GregoryWarn 🤗
- Backwards compatibility, fixing issues with remnant quoted parts in formulas.
- 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
sandboxlazy load- Moved repetitive code to Functions in
ac5e-setpieces - Reworked
bonusandset - Updated Italian translation by GregoryWarn 🤗
- Hotfix
- Added
ac5e.info.version
- 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
modifierand any of the Foundry dice modifiers- Added logic for damage advantage and disadvantage, using
modifier='adv'andmodifier='dis'
- Added logic for damage advantage and disadvantage, using
- Added flags a new flag for Damage Rolls.
extraDicemode, increasing or decreasing the number of dice per denomination.flags.automated-conditions-5e.damage.extraDicewith abonus=5will 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
auraandgrantskeys
- Added
setkeyword, similar tobonus, but that will set a value to the provided.- eg. for the
modifyACif one usesset=15, it will set the AC to 15. - to be used in flags for
criticalThrehsold,modifyAC,modifyDC
- eg. for the
- Added
actorType.uuidas the actor's uuid - Changed the equippedItems logic:
actorType.equippedItems.namesandactorType.equippedItems.identifiersare Arrays of the relevant data.
- Fix for aura mode of
modifyACandallies/enemies - Fix for removal of
!from conditions in some cases. - Fix for missing
itemPropertiesfrom sandbox data.
- Added
hasArmor: Boolean,hasArmorType: Boolean,hasShield: BooleanhasArmorLight,hasArmorMedium,hasArmorHeavy
- Removed
maximum: 13from the manifest for users to test on v14 Prototype 1.
- Fix for initiative bonuses added twice
- Verified for d&d5e v5.1.9
- Migrated to non-V2 system hooks
- Hotfix for error when calculating
spentuses andisNaN(consumeMoreUses)
- 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
itemIDcan be:nameidentifierid(not that useful)uuid(not that useful, use instead fromUuidSync(uuid))
activityIDcan be:activity.nameactivity.typeactivity.identifier(available only if MidiQOL is active)activity.id(not that useful)activity.uuid(not that useful, use insteadfromUuidSync(activityID)in this case)
- Can also be used in macros if you provide an Actor, which can be
Actordocumentname(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
- Added
equippedItemIdentifiersfor condition evaluations - Properly populate item.getRollData().item.type
- Verified for d&d5e v5.1.4
- Expanded
<actorType>.movementTurn,<actorType>.movementLastSegment,<actorType>.isTurnand<actorType>.combatTurn- Replace
<actorType>with one ofauraActor,effectOriginActor,opponentActororrollingActor
- Replace
- Verified for D&D5e v5.1.3
- Properly add getters for activities
hasAttack,hasCheck,hasDamage,hasHealing,hasSavereturning true if relevant
- Added
rollingActor.combatTurnandopponentActor.combatTurnfor condition evaluations - Updated pt_BR translation by Kharmans 🤗
- Updated Italian translation by GregoryWarn 🤗
- Foundry v13.348 compatibility
- Reworked
autoArmorandautoEncumbrance- Removed
autoArmorsettings, 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.
- Removed
- Added a workaround for
riderStatusesnot 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.preConfigureInitiativehooks)
- Reinstate
ac5edialog class
- Updated pt_BR translation by Kharmans 🤗
- D&D5e v5.1.2 system compatibility bump
- This release in NOT compatible with v5.0.4 or earlier (install 13.504.10.5: https://github.com/thatlonelybugbear/automated-conditions-5e/releases/download/v13.504.10.5/module.json)
- 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
- Adds ammoProperties to itemProperties, so if an arrow for example is
magicalbut the weapon shooting it is not, the attack will be treated as magical
- Quick fix for activities not functioning properly
- 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 betrueis 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 🤗
- Fix for Modified AC and Modified DC translation strings missing
- Reinstate riderStatuses in the evaluation data
- Example of usage:
flags.automated-conditions-5e.save.advantage | Override | riderStatuses.poisonedto automate Dwarven Resilience against getting the poisoned condition.
- Example of usage:
- 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: (usebonusandradiusetc as usual) will modify the AC of the actors in the aura.
- Usage with
- Added flags for modifying DC, mainly to be used with
actionTypeofsave,death,conc(ifskill/tool/checkhave 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: (useradiusas usual) will modify the DC of actions taken by actors in the aura.
- Usage with
- Some small fixes and code refactor.
- Fix for incorrect doubling up of criticals.
- For v13 and MidiQOL users, you'd better update your Midi to v13.0.16
- Small fixes for distance calculations
- Compatibility bump Foundry v13.347
- Distance Calculation Rework for Hex, Gridless, and Square-gridded scenes:
- Gridless distances greater than
canvas.grid.distancebut less thancanvas.grid.distance * 1.25are considered equal tocanvas.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
wallsBlockingauras (new keyword)
- Gridless distances greater than
- Keyword Matching is Now Case-Insensitive
- Reworked
handleUses()to support this change - You can now use
usesCountorusescountorUsEsCoUnTetc
- Reworked
- Fixes for
includeSelfandallies/enemiesissues - Added logic to consume uses from
Owned Items. Use with: usesCount: origin, 2consumes 2 uses from the origin item/activity.usesCount = itemOrActivityUUID, usesconsumes 1 or specified number of uses.- Comma-separated number = required number of available uses and how many to consume.
- Added
effectOriginActorin available evaluation data as needed. - Now supports dashes in keys (useful for scale value, eg
@scale.paladin['aura-range'].value) - Added global
ac5e._targetwhich returnsgame.user.targets.first(). - Updated pt_BR translation by Kharmans 🤗
- Updated Italian translation by GregoryWarn 🤗
- Updated Czech translation by Lethrendis 🤗
- 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.DND5Eis available - Reworked
getMessageData - Properly added
hasAdvantage,hasDisadvantage,hasAttack,hasDamage,isCritical,isFumble,attackRollTotal,attackRollD20to evaluation conditions - Fixed
spellcastingAbilitytypo scalingwill be either0or the system available flag- Added
spellLevelto match the system's variable, which is the same likecastingLevel(baseSpellLevelis also available as the spell's base level)
- Added
isCantripboolean for condition evaluation. - Reworked
castingLevelto properly reflect the used spell slot/ - Improved
bonusmode behavior:- If the evaluated bonus returns
0,false, ornull, 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]'
- eg when
- 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.
- Pure formula:
- If the evaluated bonus returns
- Want to support this module? Check out the Automated Condition UI ko-fi goal
- Fix for assignment to constant variable.
- Updated Italian translation by GregoryWarn 🤗
- Updated pt_BR translation by Kharmans 🤗
- Change to
usersettings instead of perclientfor 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 🤗
- Added new flags for
max,minmodifiers 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, amax12if the rolling actor is below half health, ormin8otherwise. - available also:
flags.automated-conditions-5e.aura.<ACTIONTYPE>.modifierflags.automated-conditions-5e.grants.<ACTIONTYPE>.modifier
- for use one of
attack/check/concentration/death/initiative/save/skill/tool
- usage
- Updated disposition checks. Now the following can be used:
-2,-1,0,1for exact match based on Foundry's dispositions for SECRET, HOSTILE, NEUTRAL, FRIEDNLYsecret,hostile,neutral,friendlyfor exact match of tokens' dispositionally or samefor relative disposition checks, when both of the tokens need to be of the same dispositionenemy or oppositefor relative disposition checks, which will test between friendly and hostile dispositions onlydifferentfor relative disposition checks, returning all tokens with different dispositionsalljust 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 🤗
- Fix for buttons color pickers misbehaving
- Changed default
whiteto#f8f8ffto remove a warning for not conforming to the required format, until the user click outside of the string field - added
defaultas a keyword to return the default module colors, same like erasing any entry.defaultor delete the entry to get the default module colorsfalse,null,0,noneto disable the specific attributes color changesgame.user.colororuserto match the user's Foundry color
- Fix for error when no damage entry exists on a damage roll...
- Updated Czech translation by Lethrendis 🤗
- Fix for
thresholdevaluations - Fix type
options.damagetypes=>options.damageTypes - Updated pt_BR translation by Kharmans 🤗
- Added the
...criticalThresholdflags to be picked up by DAE autocompletion - Fix for change in
DND5E.ITEM.Property.Heavyinstead of...Item...
- Added
criticalThresholdmode for AC5e attack flags, triggered by using keywordthreshold=18orthreshold=-2in the effect value, setting to a new if lower static threshold or adding the provided bonus (negative to lower), respectively. - Added
itemLimitedkeyword 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)
- Reworked
- Cleanup of sandbox data to make those work better. Additions:
activity.abilityin the available evaluation data.attackRollD20andattackRollTotalfor 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.coldfor mutliple ones being true, or['cold', 'fire'].some(d=>damageTypes[d]) - the old way of damage types being readily available is still supported
fire; coldbut usingdamageTypesis recommended and can be more robust
- use as
consumptionItemNameandconsumptionItemIdentifierto be used when an activity consumes uses of another, eg- For Dragonhide Belt items consuming Focus uses,
consumptionItemName.Focuswill evaluate to true
- For Dragonhide Belt items consuming Focus uses,
- 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
Heavyrules 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.scalewill need to be lower than1in order for the attacking Token to be considered small.
- To disable them use in console
- Allow
bonusandradiusto be fully evaluated too, so you could useradius=auraActor.details.level > 17 ? 30 : 10for example. - Verified for Foundry v13.346
- 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
- Fix for not properly pushing parts for bonuses
- Added in sandbox:
item.isEnchantment: Boolean, true if it is an enchantment, or enchanted item.item.transferredEffects: Array of transferred effects
- Guard against actor being undefined at
getActorToolRollModes
- Fix for double initiative bonus and not proper highlighting
- You can now use any of the following in addition to
tokenIdandopponentId:tokenUuid,actorId,actorUuidfor rolling actor/token identificationopponentUuid,opponentActorId,opponentActorUuid
- Adds
effectOriginActordata for bonus flags- Usage example:
bonus=effectOriginActor.abilities.wis.mod;
- Usage example:
- Italian translation update by GregoryWarn 🤗
- v13.345 compatibility
- Updated pt_BR translation by Kharmans 🤗
- Updated Czech translation by Lethrendis 🤗
- 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
- Updated French translation by CaosFR 🤗
- Compatibility with GPS attacks of opportunity
paralyzedandunconsciousforces damage to be critical only whenactivity.hasDamagereturnstrue
- Updated Czech translation by Lethrendis 🤗
- Updated Polish translation by Lioheart 🤗
- Added
flags.automated-conditions-5e.spellSniperin the DAE autocomplete options - Updated pt_BR translation by Kharmans 🤗
- Added
Spell Sniperfeat (2014 vs 2024) rules2014: Spells that have an attack roll, double their range2024: 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 Sniperor a relevant flag forflags.automated-conditions-5e.spellSniper | Override | 1will cancel the disadvantage.
- Either an item on the actor named
- Foundry v13.344 compatibility
- Guard against tokens without an actor
- Respect Targeting settings for attacks
- Fix for incorrent localization string when targeting is set to cancel and warn
- 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: trueone, it will be disabled and if usingusesCountthey 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.dcandspell.modis pre-v5.0.0 setups - Removed some
dialog.configurehandling, until the system fully implements #5454
- Italian translation update by GregoryWarn 🤗
- Added global Boolean parameter for
ac5e.logEvaluationDatawhich 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,scalingand 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 🤗
- Properly offer backwards compatibility for
targetActor- Fix for a
currentCombatantundefined relevant error
- Fix for a
- 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
notifyPreUsefunction
- More
canSee()fixes - Fix for missing
targetActorfrom evaluations - Updated pt_BR translation by Kharmans 🤗
- Exposes a checkNearby function to help with Pack Tactics:
flags.automated-conditions-5e.attack.advantage | Override | checkNearby(opponentId, 'different', 5, {count: 2})oppenentIdis 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 unitsin this case - the 4th parameter is an Object which can include:
countfor the number of tokens to check againstincludeToken(false by default), which adds the target token if needed by passingincludeToken: trueincludeIncapacitated(false by default), which adds any incapacitated tokens if true
- More visibility testing fixes
- Compatibility with combat carousel which calls
actor.rollinitiative() - Fix attacks failing due to _canSee()
- Some settings hints clarifications
- Proper 5e versioning bump
- Italian translation update by GregoryWarn 🤗
- Fix for using
initiative,concentration,deathas flag <ACTIONTYPES> rollingActor.canMove(same ascanMove),opponentActor.canMovewill 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
- Clarification on Actor References in Evaluations
- Use
opponentActorto access the opponent’s rollData during evaluations, instead oftargetActor.targetActorremains 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.
- Use
- Fix for wrong localization string in some settings
- Refactor setpieces code
- Rework
_canSee() - Raging/silenced/incapacitated etc checks fixes
raging,silenced,no armor proficiencychecks for spell items useincapacitatedwill be checked for activities that have any relevant action as activation cost
- Fix for
subjectTokenIdundefined 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
- the targeting options for attack changes slightly. Now the module will:
- Adds more data in the sandbox for easier evaluations, like
isSpelletc to be added in the WIKI soon!
- 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 🤗
- 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 rollingNone: players won't see any tooltips in chat messagesOwned: a player will be able to see tooltips in chat messages for rolls from owned actorsPlayers: 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.
- Hotfix for
uiinequippedItemstriggering an error collection... - Hotfix for the changelog showing an incorrect example of
equippedItemsusage- corrected example:
rollingActor.equippedItems.filter(i => i.includes('Platinum')).length > 2will be true when the rolling actor has more than 2 equipped items with their names includingPlatinum
- corrected example:
- Guards against
auraorgrantsflags being evaluated against non relevant actors - Guards against numerous deprecation warnings being generated for
attributes.spelldcandattributes.spellmodwhich AC5e doesn't use, but inadvertently triggers when cloning actor.getRollData() objects - Guards against cases of
undefined: truebeing present in the sandbox data - Adds for flag evaluations:
equippedItemswhich is an Array of item names, currently equipped on the actor- ie
rollingActor.equippedItems.filter(i => i.includes('Platinum')).length > 2which will be true when the rolling actor has more than 2 equipped items with their names includingPlatinum
- ie
distancefor distance evaluationsdistance > 15 && distance <= 20would 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/enemiesas evaluation conditions for non auras tooallieswill be true for rolls that the rolling token has the same disposition compared to its opponent (if an opponent is available for that roll)enemieswill 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 🤗
- Damage hook hotfix
- Some more bugfixes for attack hooks
- Fix for
effectOriginTokenIdevaluations - Updated pt_BR translation by Kharmans 🤗
- Normalize roll data evaluations for ac5e flags
- In bonus mode flags, use:
@orrollingActorto access roll data from the actor rolling, ie@abilities.dex.modorrollingActor.dex.mod##ortargetActorto access roll data from a targeted actor (single targeted actor), ie##attributes.ac.bonusortargetActor.attributes.ac.bonus- for auras only,
auraActorto access roll data from the aura's source actor, ieauraActor.abilities.cha.mod flags.automated-conditions-5e.aura.save.bonus | Override | radius=10;bonus=auraActor.abilities.cha.mod;includeSelf;singleAura;alliesis essentially the level 6 Paladin's Aura of Protection.- Cleanup parameters pass to private functions
- Concentration flag fixes
- Updated pt_BR translation by Kharmans 🤗
- 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 actorisSeen: evaluates to true if the targeted actor can see the rolling actorrollingActorholds merged data from therollingActor.getRollData()plus the rolling tokentargetActorholds merged data from thetargetActor.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!
- 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
- as a side effect, leaving the effect value of any AC5e flags empty, it will also evaluate to
- 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 🤗
- 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 🤗
- Slightly more up to date DAE field descriptions for AC5e flags
- Properly evaluate
alliesandenemieskeywords in flags. Omit for affecting all actors.
-
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.
- ACTIONTYPE: can be one of
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
bonusmode, you should include a bonus entry in the change value, likebonus=1d4 + abilities.dex.modorbonus=-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 > 40would evaluate to true
- If the rolling actor has for example 50 hp,
opponentActor.getRollData()when relevant and undertarget- If the target actor has for example 50 hp,
target.attributes.hp.value > 40would evaluate to true
- If the target actor has for example 50 hp,
activity.getRollData()when relevantitem.getRollData()when relevanttokenSizeas the rollingtoken.document.width * token.document.heighttokenElevationrace: an Array of the rolling actor's[value, subtype, swarm, custom, race]datatargetTokenSizeas the rollingtargetToken.document.width * targetToken.document.heighttargetTokenElevationtargetRacean Array of the target's actor's[value, subtype, swarm, custom, race]dataactivityDamageTypeswhich should be returning all the damage types of the relevant activityactivityAttackModeactivityEffectsStatusRiderswhich is a Set of all the statuses that the activity might apply on the target if any- So if an attack would apply
poisonedon a hit, an entry ofactivityEffectsStatusRiders.poisonedwould evaluate to true
- So if an attack would apply
- If a combat is active:
isCombatTurnis true when it's the rolling actor's turntarget.isCombatTurnsame for the targetcombat.round/combat.turn/combat.current/combat.turnswill evaluate against the relevant paths ingame.combat
worldTimethe game.time.worldTimeabilitythe ability used on the rollskillthe skill used on the roll if relevanttoolthe tool used on the roll if relevantspellLevelthe 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.
- Localization issues fix by thatlonelybugbear in 237
- Adding attackMode if available in ac5eConfig by thatlonelybugbear in 238
- Fix for rolling from damage enrichers; config.subject is undefined by thatlonelybugbear in 240
- Quick compatibility update for MidiQOL, making sure the
config.midiOptionsare taken into account!
- Update it.json by GregoryWarn in 233
- Compatibility update for Carolingian UI in 234
- Foundry v13 compatibility bump (should be working).
- 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.
- For example, adding in a feature for Dwarven Resilience a
- Update pt-BR.json by @Kharmans
- Defer to MidiQOL.computeDistance() when the module is active.
- Fix for armor stealth disadvantage.
- Expect ac5eConfig being an empty object.
- 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
- 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
- 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.
- Fix for skill flags not working
- Better support for MidiQOL
- Some small fixes
- 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.
- Fix for auto range checks
- Fix for flags checks
pt-BRtranslation update by @Kharmans !- Change of how fail flags are affecting rolls by passing a target value of 1000
- Fix for criticals not being properly highlighted
- Fix for initiative rolls
- 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
- Fix for rolling always critical when MidiQOL is active!
- 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.
- 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
pt-BRtranslation update by @Kharmans !
- Added incapacitated status check for spells use.
- Incapacitated shouldn't be considered when testing for nearby foes. Closes #166
it.jsonby @GregoryWarn in #163
- Fix for raging and silenced checks not working properly.
- The proper flag for Subtle Spell is
flags.automated-conditions-5e.subtleSpell | Override | 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.widthortoken.document.height(in a future update, a proper z-axis height could be implemented).
- Should be calculating distances in 3D and hardcodes as Token's "height" the minimum of
- 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
- Small fix for fr.json in #158, thanks @CaosFR
- Handle items without short and long range set more gracefully. Closes #156
- Added French translation, with #154 thanks to @CaosFR
- System compatibility bump for 5e v3.3.1, closing #142
- Added Russian translation, closing #144 thanks to @VirusNik21
- Merged #139 - Italian translation. Thanks to @GregoryWarn.
- Closes #137 - Exhaustion for Death Saves is always Enabled.
- Just a compatibility bump for 5e 3.2.1 and Foundry v12
pt_BRtranslation updates by @Kharmans (thanks as always)
- Closes #125 - implement checks for non-proficient equipped shields, allowing for these to alter relevant rolls (like Armor already does).
- Closes #122 - reinstates compatibility with MidiQOL flags altering rolls (and shows a generic MidiQOL (flags)) in the tooltip.
- 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
- 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.
- Update pt-BR.json by @Kharmans in #101
- Closes once more #77, fixing the armor issues, once and for all 🤞
- Hotfix for
hasArmornot being defined.
- Closes #97, allowing all equipment type Items to impose Stealth disadvantage.
- Closes #98, adding dnd5e v3.1.2 compatibility.
- Closes #89, reinstating MidiQOL compatibility.
- Closes #85. Fixes the fix of the wrong tooltip format...
- Closes #82. Fixes wrong tooltip format.
- Added a setting to not show module name in tooltips. Closes #80.
- 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.
pt-BRtranslation added by @Kharmans 71- small
entranslation edits.
D&D5e 3.1 compatibility update.
- Added
dnd5e.preRollConcentrationHook to deal with conditions affecting concentration saving throws.- Exhaustion 3-5 applies disadvantage.
- Heavy Encumbrance applies disadvantage.
- War Caster named Item applies advantage.
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 target1 Target(Use with caution).
- Fix bug when rolling an attack and automated encumbrance is true.
- 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).
- 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).
- Closes 53
- 51- fix saves advantage mode when not proficient with the armor
- Finally fix attackrolls issue in #48
- Closes #44
- 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).
- Some typos
- Sharpshooter: limit to only
rwak
- 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 | 1or - An Item named
Crossbow Expert.
- A flag on the Actor
- Sharpshooter: No disadvantage when shooting at long range with
- A flag on the Actor
flags.automated-conditions-5e.sharpShooter | Override | 1or - An Item named
Sharpshooter.
- A flag on the Actor
- Show/hide roll dialog tooltips (default on)
- Armor automation (default off)
- Move to dnd5e v3.x.
- For dnd5e v3.x, use manifest: https://raw.githubusercontent.com/thatlonelybugbear/automated-conditions-5e/main/module.json
- For dnd5e v2.x, use manifest: https://raw.githubusercontent.com/thatlonelybugbear/automated-conditions-5e/dndv2/module.json
- Added tooltips on roll dialogs to indicate the reasons why AC5E suggests the specific roll.
- Moved to using the
Actor5e#statuses
- Make sure that
config.parts:<string> - Use falsy checks for
!Array.length
- Bump for v11 only branch and some small additions. More things to come :)
- Hotfix for v10.
- Version bump that will be the last v10 compatible one.
- Compatibility bump for Foundry v11.300 and make system dnd5e required with minimum version 2.0.1.
- Compatibility bump for Foundry v11.
- Quick fix for unlinked tokens.
- 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.
- Closing #1: Using
CONFIG.DND5E.conditionTypesto fetch effect labels. _getMinimumDistanceBetweenTokensshould respect diagonal movement types (will make sense in the future)
- Initial commit