promotional bannermobile promotional banner

Vigil Cooldown HUD

Customizable WeakAuras-style HUD that provides information Blizzard's CDM doesn't. Simple drag and drop interface. Works in all content.

File Details

v2.4.0

  • R
  • Mar 23, 2026
  • 409.14 KB
  • 15
  • 12.0.1
  • Retail

File Name

Vigil-v2.4.0.zip

Supported Versions

  • 12.0.1

Vigil

v2.4.0 (2026-03-23)

Full Changelog Previous Releases

  • Trinket tracking and zero-cooldown ability icons (#12)
    • fix: dim icons on cooldown even when duration is secret
      Secret-value cooldown durations and charge counts bypassed the dim
      state because we can't branch on their values. Default to inactive
      (dimmed) in both paths since a secret return implies a real cooldown.
    • fix: secret-value-safe icon dimming and cooldown detection
      GetSpellCooldown/GetSpellCharges return tables with secret fields
      in Midnight. Guard all field access with issecretvalue(), fall back
      to GetSpellCooldownDuration for sweeps and cd.startTime for dim
      state. Hide charge text when maxCharges == 1.
    • fix: handle secret usability in IsSpellUsable
      Use frame.currentSpellID for consistency, check noMana independently
      when the primary return is secret to detect insufficient resources.
    • spec: dynamic on-use trinket tracking
      Detect equipped on-use trinkets via GetItemSpell, track cooldowns
      through existing C_Spell.* system. New trinkets group, SetSpell()
      method on icon elements, auto-hide empty groups.
    • plan: dynamic on-use trinket tracking implementation
      7-task plan covering SetSpell() method, Trinkets.lua module,
      Helpers/Engine/Groups integration, TOC update, and verification.
    • feat: add SetSpell() method to icon elements
      Allows runtime spell ID swap for dynamic elements like trinkets.
      Also handles testIcon fallback for placeholder elements in demo mode.
    • feat: add Specs/Trinkets.lua discovery module
      Detects on-use trinkets by equipment slot, provides TrinketElements()
      for spec injection, and UpdateTrinketElement() for runtime swaps.
    • feat: inject trinket elements into all specs
      Trinket placeholders auto-injected by RegisterSpec, new trinkets
      group added to StandardGroups default layout.
    • feat: wire trinket discovery into Engine
      Register PLAYER_EQUIPMENT_CHANGED, discover trinkets on spec
      activation, handle async item data via GET_ITEM_INFO_RECEIVED.
      Re-discover trinkets after test mode deactivation.
    • fix: auto-hide groups with no visible elements
      Previously empty groups left a floating label on screen. Now groups
      with zero visible elements hide outside edit mode.
    • feat: add Trinkets.lua to addon load order
    • fix: dim icons on cooldown using vertex color instead of alpha
      The range check at the end of Update() was resetting icon vertex color
      to (1,1,1) every frame, overriding any dimming SetDimState had applied.
      Switch to Blizzard's CooldownViewer pattern: store dim color in upvalues
      (dimR/dimG/dimB) and apply through the range check so both states resolve
      together. Uses SetDesaturated + SetVertexColor(0.4, 0.4, 0.4) for
      cooldown dimming, matching Blizzard's own values.
    • fix: trinket name display and library categorization
    • Set trinket label from item name so sidebar shows the real name
      instead of "trinket_slot13"
    • Add TRINKETS section to sidebar library so trinkets aren't mixed
      in with abilities
    • fix: use spell name for trinket label instead of async item name
    • fix: use item name from GetItemInfo for trinket labels
    • fix: set default trinket label at definition time
    • fix: skip talent gate for trinket placeholders in InitElement
      InitElement was calling SetEnabled(true) on trinket placeholders,
      showing them with spellID 0 before DiscoverTrinkets could run.
      Trinket elements now start hidden and let DiscoverTrinkets manage
      their visibility.
    • debug: trinket label diagnostic
    • fix: clear trinket removedElements during reconciliation
      Trinket elements are dynamic and should never persist in
      removedElements. Clears them during ReconcileSavedGroups so
      they're always re-added to the trinkets group.
      Also removes debug prints.
    • fix: force trinkets group elementIDs during reconciliation
    • fix: clear deletedDefaults for trinkets group during reconciliation
      The trinkets group was being blocked from creation because earlier
      testing left it in deletedDefaults. Clear all trinket-related
      persistence (removedElements, deletedDefaults) during reconciliation
      since trinket elements are equipment-driven and managed at runtime.
    • fix: create trinket frames dynamically with real spell IDs
      Instead of creating placeholder frames with spellID 0 that fight with
      InitElement/SetEnabled, the trinkets group starts empty and
      DiscoverTrinkets creates frames directly when on-use trinkets are found.
      This bypasses all the spellID 0 edge cases.
    • fix: hide passive trinket placeholders from sidebar library
    • fix: track trinket cooldowns by equipment slot
      Trinket spells from GetItemSpell are buff spells, not the use action.
      Use GetInventoryItemCooldown(slot) for trinket icons instead of
      C_Spell.GetSpellCooldown to get the actual item cooldown.
    • fix: generate icons for zero-cooldown rotation abilities
      Abilities like Void Ray (DDH), Chaos Strike (HDH), Templar's Verdict
      (Ret), and other resource-gated spells were missing icon elements
      because the pipeline skipped anything with cooldown=0. Removed the
      cooldown gate in emit.mjs so all classified abilities get icons.