Skip to content

fix(cdm): Hide Active State greys a banked charge inside instances - #1318

Merged
EllesmereGaming merged 1 commit into
EllesmereGaming:mainfrom
dfrisone:cdm-hideactive-charge-desat
Aug 11, 2026
Merged

fix(cdm): Hide Active State greys a banked charge inside instances#1318
EllesmereGaming merged 1 commit into
EllesmereGaming:mainfrom
dfrisone:cdm-hideactive-charge-desat

Conversation

@dfrisone

Copy link
Copy Markdown
Contributor

Cause: The charge guard decides "a charge is usable, stay saturated" from frame.isOnActualCooldown. Blizzard derives that from the cooldown startTime + duration, both secret inside instanced content, so from this tainted hook it is unreadable exactly there: the guard set nothing, the verdict stayed "on cooldown", and a 2-charge ability greyed with a charge in hand. A fresh login looked fine because nothing was secret yet, which is why it never reproduced at rest.

Fix: Prefer Blizzard's charge visual-data-source flag, set for cooldownStartTime > 0 and currentCharges > 0 as a plain literal inside its own untainted branch, so it stays readable. RefreshData clears it and CacheCooldownValues re-sets it immediately before the SetDesaturated this hooks, so it is never stale. Only its true case is consulted, so zero charges still greys through the existing path. Also resolves the charge-spell test through CdmChargeInfoFor to match the swipe guard, since a base-ID read reports the charge-less base for override spells (Blink -> Shimmer) and skipped the guard entirely.

Test: Verified in game inside a key: Survival Instincts with Hide Active State stays saturated with one charge banked and still greys at zero charges.

The charge guard decides "a charge is still usable, stay saturated" from
frame.isOnActualCooldown. Blizzard derives that flag from the cooldown
startTime + duration, both of which are secret inside instanced content, so
from this tainted hook it comes back unreadable exactly there: the guard set
nothing, the verdict stayed "on cooldown" and a 2-charge ability greyed with a
charge in hand. A fresh login looked correct because nothing was secret yet,
which is why this never reproduced at rest.

Prefer Blizzard's charge visual-data-source flag, which it sets for
"cooldownStartTime > 0 and currentCharges > 0" as a plain literal inside its
own untainted branch, so it stays readable. RefreshData clears it and
CacheCooldownValues re-sets it immediately before the SetDesaturated call this
hooks, so it is never stale. Only its true case is consulted, so an icon at
zero charges still greys through the existing path.

Also resolve the charge-spell test through CdmChargeInfoFor, matching the
swipe guard: a base-ID read reports the charge-less base for override spells
(Blink -> Shimmer), which skipped this guard entirely on a 2-charge ability.
@EllesmereGaming
EllesmereGaming merged commit 4be331d into EllesmereGaming:main Aug 11, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants