v0.7.0
What's new
HekiLight
v0.7.0 (2026-10-14)
- 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
- It only refreshed when the suggestion changed, so moving in/out of range
- 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
- Play sounds: PlaySoundFile used a legacy .wav path that no longer
- 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
- Use Blizzard's native ActionButtonSpellAlertTemplate (the modern
- 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 - feat(EPIC-11): introduce HekiLightST shared-state namespace (Story 11.1)
- 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
- Spell dropdown: remove [spellID] from list items and selected state;
- 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
- Remove all Story 10.2 ignoreSec additions: slotDD, pinBtn, slotHintLabel,
- 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
- Mark EPIC-6 and story 6.1 Done — all AC confirmed in-game across all
- 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