fix(cdm): Hide Active State greys a banked charge inside instances - #1318
Merged
EllesmereGaming merged 1 commit intoAug 11, 2026
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cause: The charge guard decides "a charge is usable, stay saturated" from
frame.isOnActualCooldown. Blizzard derives that from the cooldownstartTime + 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 > 0as a plain literal inside its own untainted branch, so it stays readable.RefreshDataclears it andCacheCooldownValuesre-sets it immediately before theSetDesaturatedthis 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 throughCdmChargeInfoForto 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.