Skip to content

Releases: tekHudson/RuneReminderReforged

v1.0.11

Choose a tag to compare

@github-actions github-actions released this 07 Aug 14:52

Rune Reminder Reforged

v1.0.11 (2026-08-07)

Full Changelog Previous Releases

  • Show all runes in picker (grey out unlearned/uncastable), fix reapply popup and rune tooltip; bump to v1.0.11
    • Picker now lists every rune for a slot (not just learned ones), greying
      out and disabling ones you haven't learned or that can't be engraved
      right now, with a tooltip line explaining why.
    • Reapply popup no longer lingers after re-equipping the original item,
      and is now a compact two-button box instead of a full dialog.
    • Warm the client's tooltip data cache for every rune on entering world
      so rune tooltips in the picker render fully on first hover instead of
      stepping in over several re-hovers.
      Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

v1.0.10

Choose a tag to compare

@github-actions github-actions released this 07 Aug 04:49

Rune Reminder Reforged

v1.0.10 (2026-08-07)

Full Changelog Previous Releases

  • Shrink reapply prompt to a two-button box; bump to v1.0.10
    Replaces the icon+title dialog with a compact auto-sized box: a
    "Re-apply " button and a "Cancel" button side by side,
    centered on screen. Escape still dismisses it.
    Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

v1.0.9

Choose a tag to compare

@github-actions github-actions released this 07 Aug 04:19

Rune Reminder Reforged

v1.0.9 (2026-08-07)

Full Changelog Previous Releases

  • Store settings account-wide and grey out unusable runes in picker; bump to v1.0.9
    Settings now save via SavedVariables instead of SavedVariablesPerCharacter,
    so widget position/scale/lock/notify prefs are shared across all characters.
    The rune picker also now renders every rune button even when the slot's
    current item can't be engraved right now, greying them out and disabling
    clicks instead of letting them silently no-op.
    Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

v1.0.7

Choose a tag to compare

@github-actions github-actions released this 06 Aug 23:27

Rune Reminder Reforged

v1.0.7 (2026-08-06)

Full Changelog Previous Releases

  • Fix stale reapply prompt and post-loading-screen blank icons; bump to v1.0.7
    Reapply prompt now dismisses itself when the slot's gear changes again,
    and is styled/positioned as a traditional centered dialog instead of a
    button-anchored nudge. Widget icons also went blank after a hearth when
    engraving data hadn't finished re-syncing by PLAYER_ENTERING_WORLD; added
    a delayed follow-up refresh to catch that.
    Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • Post to Discord webhook on tagged release
    Adds a Notify Discord step to the release workflow that posts repo/tag/
    release-link to DISCORD_WEBHOOK_URL after a successful package/release.

v1.0.5

Choose a tag to compare

@github-actions github-actions released this 06 Aug 15:16

Rune Reminder Reforged

v1.0.5 (2026-08-06)

Full Changelog Previous Releases

  • Slot label: top-anchored, hover-toggle option; bump to v1.0.5
    Slot-name label now anchors to the top of the button (over the icon)
    instead of dead-center. New "Text on hover" checkbox (widget.labelOnHover,
    default true) -- unchecked keeps the label always visible instead of only
    on mouseover.

v1.0.4

Choose a tag to compare

@github-actions github-actions released this 06 Aug 14:06

Rune Reminder Reforged

v1.0.4 (2026-08-06)

Full Changelog Previous Releases

  • Fix empty-rune-list picker flyout appearing invisible; bump to v1.0.4
    GetRunesForSlot's ownedOnly=true can legitimately return zero runes for a
    slot (e.g. Head runes learned later than others'), and the flyout had no
    background of its own -- an empty icon row was indistinguishable from the
    flyout not opening at all. Now shows a background plus a "No runes known
    for this slot" message in that case.

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 06 Aug 13:53

Rune Reminder Reforged

v1.0.3 (2026-08-06)

Full Changelog Previous Releases

  • Add reapply prompt, flyout scale match, and slimmer hover UI; bump to v1.0.3
    • New "Reapply?" nudge on the widget when a gear swap clears a tracked
      slot's rune, staying up until dismissed via its close button, Escape,
      or clicking it to reapply -- no auto-hide timer.
    • Picker flyout now matches the main widget's scale setting.
    • A bit more spacing above the Size slider in options.
    • Widget slot buttons: swap the oversized multi-line GameTooltip for a
      bare slot-name label above the button (below it when the picker
      flyout expands upward, so they don't collide).
    • Picker flyout rune icons: full name + description via
      GameTooltip:SetEngravingRune, matching Blizzard's own rune tooltip.

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 05 Aug 22:29

Rune Reminder Reforged

v1.0.2 (2026-08-05)

Full Changelog Previous Releases

  • Auto-confirm rune overwrite; bump to v1.0.2
    The remaining "click Yes to overwrite" step is a native
    StaticPopupDialogs["REPLACE_ENCHANT"] confirmation, whose Yes button
    just calls C_Item.ReplaceEnchant() (confirmed in
    Blizzard_StaticPopup_Game/GameDialogDefs.lua). The original RuneReminder
    addon called this too, via the deprecated bare global ReplaceEnchant
    (itself just an alias for C_Item.ReplaceEnchant, gated behind the
    loadDeprecationFallbacks CVar) -- ported the same CastRune ->
    UseInventoryItem -> ReplaceEnchant -> StaticPopup_Hide sequence using
    the namespaced form directly, so engraving a slot that already has a
    different rune now completes in one click with no popup at all.
    Since this fully bypasses the native "are you sure" with zero visual
    confirmation, CastRuneOnSlot now also prints a chat line ("Replaced X
    with Y on your ") so a misclick in the picker is still visible
    after the fact -- per user's choice when this tradeoff was discussed.
    Traced and documented the full flow matrix for both the equip-swap
    mismatch detector (PLAYER_EQUIPMENT_CHANGED, passive, chat-only, never
    shows a popup) and the engrave-via-picker flow (active, applies
    immediately for an empty slot, single auto-confirmed replace for an
    occupied one) to make sure nothing else needed similar treatment.
  • Auto-complete rune targeting; bump to v1.0.1
    CastRune only selects the rune and enters "targeting mode" -- Blizzard's
    own EngravingFrameSpell_OnClick does nothing more than that either. The
    actual application to a slot happens via UseInventoryItem(paperdollSlot)
    (confirmed against a community macro: "/click /use ", e.g.
    slot 5 for Chest, matching our paperdoll numbering), which is the
    "click on gear" step the user had to do manually after picking a rune
    from our flyout. Since the picker already knows exactly which slot was
    clicked, CastRuneOnSlot now calls both in sequence -- one click in the
    flyout now fully applies the rune. The native overwrite-confirmation
    popup still appears when relevant (untouched, still a safety check).
    Also made the "no rune / had X before" chat notification actionable:
    mentions clicking that slot on the widget to re-engrave the old rune,
    rather than adding a new prompt/auto-reapply UI (per user's choice --
    simplest option, no new UI surface).

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 17:32

Rune Reminder Reforged

v1.0.0 (2026-08-05)

Full Changelog Previous Releases

  • Add X-Curse-Project-ID for the new CurseForge listing
    Project 1640798 -- a distinct, newly-created CurseForge project for
    this addon, not the old fork's 1639190.
  • Fix Back slot showing "Ranged" (and picker/tooltip wrong-category bugs)
    Paperdoll slot positions (INVSLOT_*, used by GetRuneForEquipmentSlot /
    GetInventoryItemCooldown) and item equip-location types
    (Enum.InventoryType, used by GetRunesForCategory and
    C_Item.GetItemInventorySlotInfo) are two different numbering schemes.
    They share values 1-11 (Head..Finger) but diverge after that:
    INVSLOT_BACK=15 while Enum.InventoryType.IndexCloakType=16, and
    Enum.InventoryType.IndexRangedType happens to equal 15 -- so passing
    the paperdoll Back slot into a function expecting InventoryType
    returned "Ranged" for its category/name instead of "Back". Confirmed
    against Blizzard_APIDocumentationGenerated/ItemConstantsDocumentation.lua.
    Added an explicit PAPERDOLL_TO_INVTYPE mapping (Finger1 and Finger2
    both collapse to the single IndexFingerType category -- rings aren't
    distinguished by which of the two slots they're in for this purpose)
    and a shared RRR:GetSlotDisplayName(slot) helper, used by:
    • GetRunesForSlot (was passing the raw paperdoll slot into
      GetRunesForCategory -- the picker's rune list itself)
    • Core/Notify.lua's RuneMismatch chat message
    • UI/Widget.lua's slot-button tooltip (this is what showed "Ranged"
      for the Back button)
      Also simplified RUNE_UPDATED to always do a full RefreshAllRunes():
      rune.equipmentSlot is likewise an InventoryType, not a paperdoll slot,
      and since Finger1/Finger2 share one category there's no reliable way
      to map it back to which specific tracked slot changed.
  • Fix all-empty widget: call C_Engraving.RefreshRunesList before querying
    GetRuneForEquipmentSlot returned nil for every tracked slot, even ones
    with a real engraved rune equipped. Blizzard's own EngravingFrame_OnShow
    (Blizzard_EngravingUI.lua) always calls C_Engraving.RefreshRunesList()
    before querying any rune data or calling EngravingFrame_UpdateRuneList --
    added the same call in InitEngraving (login) and RefreshAllRunes
    (PLAYER_ENTERING_WORLD/RUNE_UPDATED with nil rune), matching Blizzard's
    usage pattern rather than calling it on every event (their own
    PLAYER_EQUIPMENT_CHANGED handler doesn't re-call it either).
  • Show a fixed set of slots instead of gating on IsEquipmentSlotEngravable
    C_Engraving.IsEquipmentSlotEngravable reflects whether the CURRENTLY
    EQUIPPED ITEM in a slot is engravable, not whether the slot category
    is part of the system in general (Blizzard's own paperdoll code uses
    it exactly that way). Gating which widget buttons exist on that call
    meant the whole widget could show nothing at all whenever none of the
    player's current gear happened to test as engravable at that instant
    -- which is exactly what happened after a full client restart.
    Since the 9 valid SoD engraving categories are already researched and
    fixed (see the comment in Core/Engraving.lua), just always show those
    10 slot IDs and use the API only for the rune data itself (which is
    correctly nilable for "no rune"/nothing equipped), not for deciding
    which buttons exist. A reminder widget should have a stable set of
    slots rather than buttons appearing and disappearing with gear swaps.
    Removed the now-dead slot-set-change-detection machinery this enabled
    cutting: RefreshSlotList's "changed" bool, RebuildWidgetSlots, and the
    rebuild-vs-refresh branching in PLAYER_EQUIPMENT_CHANGED. Replaced with
    a simpler RefreshAllRunes() used by PLAYER_ENTERING_WORLD/RUNE_UPDATED
    (nil rune) to force a full cache/UI refresh after a loading screen.
  • Fix slot discovery list against confirmed SoD engraving categories
    C_Engraving.IsEquipmentSlotEngravable isn't reliable enough on its own
    to decide which slot categories to probe -- it returned true for
    INVSLOT_RANGED despite ranged weapons not being part of SoD's
    engraving system. Researched the actual slot list (Icy Veins' SoD rune
    overview, cross-checked against a Wowhead datamining article): exactly
    9 categories -- chest, gloves, legs, waist, feet, head, wrist, back,
    and ring -- explicitly excluding shoulder, neck, trinkets, and weapons.
    Narrowed ALL_SLOTS to Head/Back/Chest/Wrist/Hand/Waist/Legs/Feet/
    Finger1/Finger2 (10 slot IDs covering the 9 categories, since Ring
    spans both physical finger slots). Previously included Neck and
    Shoulder, which are explicitly NOT part of the system per this source
    -- corrects an earlier over-inclusive guess from this same session.
  • Combine Alignment + Flyout direction into one Layout dropdown
    Replaces the two separate dropdowns with a single "Layout" control
    offering exactly the 4 sensible combinations: Vertical widget with
    flyout left/right, or Horizontal widget with flyout up/down --
    eliminating the nonsensical pairings (e.g. horizontal widget with a
    left/right flyout) the two independent dropdowns allowed.
    Underlying storage unchanged (widget.alignment / widget.flyoutDirection
    are still two separate fields, encoded as one "ALIGNMENT_DIRECTION"
    string for the dropdown's get/set); Widget.lua and Picker.lua need no
    changes since they already read those two fields independently.
  • Add explicit Flyout direction option (Up/Down/Left/Right)
    Replaces the automatic perpendicular-to-widget-alignment flyout
    orientation with a single user-facing dropdown offering all 4
    directions directly, independent of widget alignment. Added
    widget.flyoutDirection to defaults (default "UP", matching prior
    behavior for the default horizontal widget) and a matching Options
    dropdown next to Alignment.
  • Flyout orientation now perpendicular to widget alignment
    Horizontal widget -> vertical flyout (stacked above the clicked slot,
    growing upward). Vertical widget -> horizontal flyout. Avoids the
    flyout running parallel to and blending into the slot-button row/column
    it's anchored next to.
  • Replace dropdown-menu picker with a bare icon-row flyout
    The Blizzard UIDropDownMenuTemplate picker rendered as a large boxed
    text list, visually inconsistent with the widget's own bare-icon row
    style. Replaced with a small flyout of plain icon buttons (same visual
    construction as the widget's slot buttons: per-icon dark background
    square, no outer panel/box), anchored above the clicked slot button.
    Each icon shows the rune's name on hover via GameTooltip. Clicking the
    same slot again toggles the flyout closed; clicking a different slot
    repopulates and repositions it. No more UIDropDownMenu dependency in
    the picker (Options.lua's small Alignment dropdown is unrelated and
    unchanged).
  • Fix invisible widget on login: re-scan slots on PLAYER_ENTERING_WORLD
    PLAYER_LOGIN can fire before equipment/engraving data is fully synced
    from the server, so InitEngraving's initial scan could find zero
    engravable slots -- an empty, invisible widget (no visible chrome on
    the container itself, only child slot buttons render anything).
    Force a full slot re-scan and rune re-fetch on PLAYER_ENTERING_WORLD
    and rebuild the widget unconditionally, so it's guaranteed to reflect
    reality once the world is actually entered, regardless of what the
    early PLAYER_LOGIN scan found.
  • Fix crash on login: guard picker init against no slot selected yet
    UIDropDownMenu_Initialize calls initFunction(frame, level, menuList)
    immediately during setup, not just lazily when the menu is opened
    (confirmed at Blizzard_SharedXML/Classic/UIDropDownMenu.lua:84). At
    that point no slot has ever been clicked, so currentSlot was nil,
    and C_Engraving.GetRunesForCategory(nil, true) errored with "bad
    argument #1" on every login.
  • Initial commit: Rune Reminder Reforged v1.0.0
    A from-scratch, original addon for WoW Classic Season of Discovery that
    tracks engraved runes per equipment slot, provides a one-click picker to
    engrave a different rune, and prints a chat reminder when a gear swap
    changes or clears a tracked slot's rune.
    This is a clean-room rewrite, not a fork: written directly against
    Blizzard's C_Engraving API (researched fresh from a local wow-ui-source
    client-source checkout, cross-checked against Blizzard_EngravingUI.lua
    and PaperDollFrame.lua) rather than any existing addon. It replaces an
    earlier fork of a third-party "All Rights Reserved" addon that CurseForge
    declined to host on licensing grounds (that fork is now private and
    undistributed).
    Deliberately smaller in scope than what it replaces: no saved rune-set
    loadouts, no profiles, no Masque support, no popups (chat notification
    only), no custom font/color/texture/glow customization -- just live
    per-slot tracking, a simple native-dropdown picker, cooldown display,
    and a draggable minimal widget. English only for v1.
    Structure mirrors this workspace's other from-scratch addons
    (EasyMount's Core/+UI/ split, HoneyLock's zero-dependency native
    Sett...
Read more