HekiLight

Displays Blizzard's Rotation Assistant suggestions as a movable — the Hekili experience for Midnight 12.0+.
Back to Files

v0.7.0

File nameHekiLight-v0.7.0.zip
Uploader
meruukemeruuke
Uploaded
Oct 14, 2026
Downloads
4.0K
Size
43.0 KB
Flavors
Retail
File ID
9170235
Type
R
Release
Supported game versions
  • 12.1.5

What's new

HekiLight

v0.7.0 (2026-10-14)

Full Changelog

  • Merge pull request #25 from meruuke/develop
    Release v0.7.0 — proc glow + out-of-range rework, WoW 12.1.5
  • chore: bump version to 0.7.0 for release
    v0.6.5/v0.6.6 were already tagged on an older lineage; 0.7.0 is the next
    version. Release includes the native proc glow + all-slot out-of-range
    feature, the 12.1.5 interface bump, and removal of the non-working sounds
    and cooldown-spiral settings.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • Merge pull request #22 from meruuke/feat/glow-range-visibility
    Feat/glow range visibility
  • Merge pull request #24 from meruuke/chore/interface-12.1.5
    chore: WoW 12.1.5 compatibility (Interface 120105)
  • chore: point TOC website/GitHub links at the meruuke repo
    X-Website and X-GitHub still referenced the old mauro-pinheiro fork; update
    them to the current meruuke/HekiLight repository.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • chore: bump Interface to 120105 for WoW 12.1.5
    Patch 12.1.5 is live; update the TOC Interface so the addon is no longer
    flagged out of date, bump the addon version to 0.6.5, and refresh the
    stale interface reference in CLAUDE.md.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • fix: out-of-range tint updates live and covers the proc slot
    Two issues with the out-of-range red fade:
    • It only refreshed when the suggestion changed, so moving in/out of range
      left the tint frozen. The poll loop was gated on combat + IsAssistActive,
      so it was effectively event-driven. Drive the poll by the display's
      visibility instead: display OnShow -> StartPollLoop, OnHide ->
      StopPollLoop (OnUpdate only fires while shown, so it stays free when
      hidden). The display now starts hidden so the first show kicks off the
      poll, and the combat-end StopPollLoop is dropped (OnHide handles it).
    • The proc-alert slot never showed the tint. Extract the logic into a
      shared ApplyRangeTint(iconTexture, realSlot, extraDesat) used by both the
      suggestion slots (via ApplyIconTint) and UpdateProcAlert, so the proc
      icon fades to red even while it is glowing.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • fix: make the Spell Proc Glow toggle actually gate the glow
    showProcGlow only gated the primary-slot glow, but with the proc-alert
    slot enabled the glow lives there (StartAlertGlowPulse), which ignored the
    setting — so the checkbox did nothing. Gate the proc-alert glow on
    showProcGlow too (the proc-alert icon still shows; showProcAlert controls
    the icon, showProcGlow the glow), and have the Settings checkbox and
    /hkl procglow off call Refresh() so toggling applies live.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • chore: remove non-working sounds and cooldown-spiral settings
    Both settings never worked on retail 12.0 and are not worth maintaining:
    • Play sounds: PlaySoundFile used a legacy .wav path that no longer
      resolves (fails silently); a SoundKit swap still did not produce audio.
    • Show cooldown spiral: Rotation Assistant cooldown data is taint-
      protected, so the spiral never rendered reliably.
      Removes the OnShow sound handler, the cooldown CooldownFrame and its
      Refresh update block (and the now-unused s1 local), both DEFAULTS keys,
      the two Settings checkboxes, the /hkl sounds command + help line, and the
      locale/README/CurseForge references.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • feat: enlarge proc glow to 1.6x so it clears the keybind corner
    The native proc-glow overlay at 1.4x the icon placed its bright ring over
    the keybind label. Bump ALERT_SCALE to 1.6x so the ring sits further out
    and the keybind stays readable.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • feat: stronger proc glow and all-slot out-of-range feedback
    The proc glow (faint ButtonHilight pulse) and out-of-range cue (primary-
    only pulsing red overlay) were almost invisible in play. Rework both to
    match Blizzard's Cooldown Manager.
    Proc glow:
    • Use Blizzard's native ActionButtonSpellAlertTemplate (the modern
      flipbook proc glow: thick border with wisps travelling around it) via a
      looping ProcLoop, anchored and sized to the icon with an OnSizeChanged
      hook so it tracks db.iconSize live. Flipbook textures are SetAllPoints'd
      to the overlay so the intro scales with the icon instead of rendering as
      a fixed small square.
    • Fall back to the classic ActionBarButtonSpellActivationAlert template,
      then to a self-drawn UI-ActionButton-Border AnimationGroup glow, if the
      modern template is unavailable (hklGlowMode tracks the active path).
    • Route per design: glow on the proc-alert slot when showProcAlert is
      enabled, else on the primary slot (UpdateGlowState gates on
      not db.showProcAlert) so it never doubles up.
      Out-of-range:
    • ApplyIconTint desaturates + red-tints (1, 0.30, 0.30) each icon when
      IsActionInRange(realSlotID) == false, applied to every slot in the
      render loop (not just the primary), combined with the on-cooldown
      desaturation.
      Removed the now-dead glowTicker/alertGlowTicker/rangeTicker,
      lastRangeFailSlot, and the rangeOverlay/glowOverlay/spellOverlay fields.
      Docs: ADR-14, CLAUDE.md, and the out-of-range setting description.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • feat(EPIC-11): Settings extraction + WoW 12.1.0 interface bump (#21)
    • feat(EPIC-11): introduce HekiLightST shared-state namespace (Story 11.1)
      Adds HekiLightST = global at top of HekiLight.lua and populates its
      13 keys (db, dbChar, display, slots, procAlertFrame, cachedRotSpells,
      Refresh, Apply* functions, L) in the ADDON_LOADED handler after
      BuildSlots() assigns procAlertFrame. Unblocks Story 11.2 (Settings.lua
      extraction). Zero behavioral change; verified in-game with no Lua errors.
      Implementation note: population placed in ADDON_LOADED rather than
      InitDB() — Apply* functions and Refresh are declared after InitDB() in
      the file and are out of scope there by Lua upvalue rules; procAlertFrame
      is also nil until BuildSlots() runs.
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
    • docs(planning): EPIC-12 ClassCodex integration + Story 11.2 draft
    • PRD.md: add EPIC-11 and EPIC-12 to roadmap table
    • EPIC-12.md: ClassCodex profile-aware rotation integration (5 stories:
      data reader spike, CC resolver, settings section, slash commands,
      Tier-1 condition evaluator); includes ADRs and feasibility research
      findings from 2026-05-24
    • 11.2.story.md: extract Settings.lua from HekiLight.lua (Ready,
      depends on Story 11.1)
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
    • feat(EPIC-11): extract BuildSettingsPanel to Settings.lua (Story 11.2)
    • New Settings.lua (833 lines): BuildSettingsPanel defined as a global
      so HekiLight.lua's event handler can call it across the chunk boundary.
    • HekiLightST extended from 13 to 21 entries: DEFAULTS, MAX_SLOTS,
      isEditMode (getter), EditModeRender, setSettingsCategory (setter),
      GetSlotKeybind, SetMinimapShown, StopGlowPulse.
    • BuildSettingsPanel uses local aliases for all 21 shared names;
      only two lines changed from the verbatim copy: editMode→isEditMode()
      and the settingsCategory assignment via setSettingsCategory().
    • HekiLight.lua: 2883→2083 lines (−800 lines removed).
    • HekiLight.toc: Settings.lua added after HekiLight.lua.
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
    • docs: update CLAUDE.md for EPIC-11 modularization
    • File structure: add Settings.lua, update HekiLight.lua line count
    • New HekiLightST section: 21 keys, local-alias pattern, how to add new keys
    • Cross-chunk visibility rule: functions called across files must be globals
    • Startup flow: reflect HekiLightST population step
    • EPIC status: 1–11 Done
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
    • docs(ADR-1): amend single-file constraint superseded by EPIC-11
      ADR-1 stated "single-file addon" but EPIC-11 (Story 11.2) introduced
      Settings.lua as a second Lua file. Added amendment note pointing to
      ADR-11-2 for load-order rules to keep the architectural record accurate.
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
    • docs(EPIC-11): mark Done — all stories shipped, DoD verified
      Stories 11.1 and 11.2 complete. HekiLight.lua reduced 2883→2083 lines,
      Settings.lua extracted, HekiLightST namespace with 21 keys, in-game
      verified. DoD checkboxes updated with actuals.
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
    • chore: bump Interface to 120100 for WoW 12.1.0
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

    Co-authored-by: HekiLight addon@hekilight.local
    Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com
  • Merge pull request #20 from meruuke/feature/10.2-keybind-override-panel
    feat(EPIC-10): per-spell keybind slot override — slash commands + settings UI
  • fix(EPIC-10): clean up Keybind Override UI — hide spellIDs, show icon in selected state
    • Spell dropdown: remove [spellID] from list items and selected state;
      show spell icon in selected state via |T...|t texture escape
    • Slot dropdown: show keybind key only, drop "Slot N ->" prefix
    • Override list rows: show "Spell → key", drop [spellID] and slot number
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • docs(EPIC-10): wrap-up — story 10.1 changelog, stale EPIC-11 ref fix, story 10.3 QA, planning docs
    • 10.1 Change Log: add Done entry (QA-1/QA-2 fixes noted)
    • EPIC-10.md: replace stale 'EPIC-11' ref in Option C section with 'future story/epic'
      (EPIC-11 is Settings Extraction, not the smart-slot heuristic)
    • Story 10.3: full QA results, completion notes, file list
    • Story 10.2: status and QA notes updated
    • EPIC-6/7/8.md, PRD.md: roadmap status housekeeping
    • New: EPIC-11.md (Settings Extraction planning), Story 10.4 (Custom Label Capture)
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • feat(EPIC-10): standalone Keybind Overrides settings section (Story 10.3)
    • Remove all Story 10.2 ignoreSec additions: slotDD, pinBtn, slotHintLabel,
      overrideRowPool, RefreshOverrideList, slotShift height logic
    • Revert RefreshIgnoreList to pre-10.2 form (ignoreListBaseY=-72, fixed
      ignoreEmptyLabel, clean height formula, no ClearAllPoints)
    • Add dedicated kbSec/kbBody section after Ignored Spells via MakeSection
    • kbSpellDD: live rotation spell population, ignored spells greyed/disabled
    • kbSlotDD + kbPinBtn: show when spell has ≥2 non-RA slots; kbHintLabel
      when <2 slots
    • RefreshKbOverrideList: icon + name + Slot→Key rows with Clear buttons,
      empty label, dynamic kbBody height
    • kbSec expansion handler calls RefreshKbOverrideList on expand
    • Locale.lua: add ptBR translation for section description string
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • fix(EPIC-10): replace box-drawing chars in override separator (WoW font compat)
    U+2500 (BOX DRAWINGS LIGHT HORIZONTAL) is outside Friz Quadrata TT's
    coverage — renders as tofu glyphs in-game. Replace with ASCII hyphens.
    Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • fix(EPIC-10): refresh override list on ignore-add and spell-select (QA-1, QA-2)
    addBtn OnClick and ignoreDD info.func now both call RefreshOverrideList()
    after RefreshIgnoreList(). Fixes stale separator/override row positions
    when the ignore count changes or slotDD visibility toggles (slotShift±30).
    Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • feat(EPIC-10): Settings panel keybind override slot picker (v0.6.5 Story 10.2)
    Extends the Ignored Spells section with a slot-picker row that appears
    when a spell with ≥2 non-RA bar slots is selected. "Pin keybind" stores
    dbChar.keybindOverrides[spellID] = slotID. The Keybind Overrides sub-list
    below the ignore list shows each pinned spell with its resolved key and a
    Clear button. ignoreBody height accounts for slotShift and override rows.
    Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • docs(10.1): fix QA-1 & QA-2 — add kb commands to PrintHelp and CLAUDE.md
    QA-1: PrintHelp() now lists all four /hkl kb subcommands (slots, pin,
    clear, list) so players can discover the feature via /hkl.
    QA-2: CLAUDE.md slash commands reference table updated with kb family.
    Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • feat(EPIC-10): story 10.1 — per-spell keybind slot override via slash command
    Adds dbChar.keybindOverrides[spellID] = slotID store so players can pin
    which bar slot drives the keybind label for any spell on multiple bars.
    Changes:
    • InitDB: initialise keybindOverrides table (mirrors ignoredSpells pattern)
    • GetSpellKeybind: check override before iterating FindSpellActionButtons;
      hit → cache + DLog source=override; miss → DLog source=override_miss + fallthrough
    • SlashCmdList: new /hkl kb branch with four subcommands:
      kb slots <spellID> list all non-RA bar slots with their bindings
      kb pin <spellID> <slot> set override, print resolved key
      kb clear <spellID> remove override
      kb list print all current overrides
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • docs(EPIC-10): add EPIC-10 and stories 10.1, 10.2 — keybind override feature
    Introduces the Keybind Override epic with full story definitions:
    • EPIC-10: goal, ADRs (store slotID, dbChar, extend ignore section)
    • Story 10.1: per-spell keybind slot override via slash command (Status: Ready → InProgress)
    • Story 10.2: extend Ignored Spells panel with slot picker (Status: Ready)
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • Merge pull request #19 from meruuke/docs/close-epic-6-epic-13-backlog
    docs: close EPIC-6 and add EPIC-13 logging observability backlog
  • docs: close EPIC-6 and add EPIC-13 logging observability backlog
    • Mark EPIC-6 and story 6.1 Done — all AC confirmed in-game across all
      Druid specs and non-shapeshifting classes (v0.6.5)
    • Add EPIC-13 and story 13.1 — per-character session log to prevent
      log loss on character switch (discovered during EPIC-6 QA)
      Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
  • Merge branch 'master' of https://github.com/meruuke/HekiLight
  • chore: bump TOC interface version to 120007 (patch 12.0.7) (#18)
    Co-authored-by: HekiLight addon@hekilight.local
    Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com

This mod has no additional files