Skip to content

Releases: Mapkov2/MidnightSimpleUnitFrames

4.0rc1

02 May 00:26

Choose a tag to compare

MSUF 4.0 RC 1

Top-line stats

  • Total LOC: 90,525 → 117,521 (+26,996, +29.8%)
  • Lua files: 262 → 351 (+89)
  • issecretvalue() guards: 55 → 142 (+158%)
  • Interface compatibility: added 120007 (12.0.7)

★ HEADLINE: NEW MODULE — Group Frames

A complete party/raid frame system has been added. ~21,150 LOC across 17 new files, positioned as a built-in alternative to Grid2/Cell. All under GroupFrames/.

Architecture (new files)

  • MSUF_GF_Core.lua — factory, layout, preview, hiding (EQoL-pattern hierarchy on SecureGroupHeaderTemplate)
  • MSUF_GF_DB.lua — defaults + config resolution, 3-slot health text modes, name color, role-aware visibility
  • MSUF_GF_Render.lua — coalesced dirty-flag visual pipeline (multiple DB writes → 1 update per tick)
  • MSUF_GF_Effects.lua — per-frame RegisterUnitEvent, range fade (Grid2 pattern), aggro/dispel/target borders, AFK/DND text, UNIT_AURA coalescing
  • MSUF_GF_Auras.lua — 3-group aura display (Buffs / Debuffs / Externals), zero-alloc icon pools, externals via BIG_DEFENSIVE filter
  • MSUF_GF_AuraFilter.lua — 2-tier filter engine (Tier 1: Blizzard API tokens, Tier 2: declassified spell blacklist, user-toggleable)
  • MSUF_GF_AuraPreview.lua — drag-to-position mock frame, live colors, real spell icons via process-lifetime cache
  • MSUF_GF_PrivateAuras.lua — 12.0.5 Private Aura anchoring + Dispel Overlay (isContainer = true), no fallback paths
  • MSUF_GF_SpellIndicators.lua + MSUF_GF_SpellIndicators_Data.lua — per-spell tracker for healer HoTs (icon/square/bar/number + frame effects: tint, border, glow, pulse, name color, alpha), multi-spec
  • MSUF_GF_HealerBuffs.lua + MSUF_GF_HealerBuffs_Editor.lua — per-spec spell families, compilation, aura matching, manual slot management
  • MSUF_GF_CornerIndicators.lua — 5 fixed slots (TL/TR/BL/BR/C) for dispel/aggro/custom dots, full perf rewrite
  • MSUF_GF_GroupNumber.lua — subgroup number (1-8) overlay, hooked into public GF API
  • MSUF_GF_Masque.lua — separate Masque group from A2, registers Icon + Cooldown only (count never passed)
  • MSUF_GF_EM2.lua — Edit Mode 2 integration, GF behaves like a normal EM2 unitframe (CENTER-stored offsets)
  • MSUF_BossFrameBridge.lua — bridges MSUF boss1..boss5 frames into the GF Private Aura subsystem (additive only, no GF child-registration)

GF features

  • Party + raid in one addon — created via SecureGroupHeaderTemplate, A/B pool system to handle zone-change header recreation
  • 3-slot health texttextLeft / textCenter / textRight independently configurable
  • Power-bar role visibility — show/hide power per assigned role
  • Smooth fill toggle — animated bar fill, default ON
  • Hide-in-client-scene — auto-hide GF in cinematics/cutscenes
  • Target/aggro highlight — configurable size / draw layer / texture
  • Dispel tint + glow via LibCustomGlow integration
  • Dispel Overlay edge modes — Full Frame / Bottom Edge / Top Edge / Left Edge / Right Edge
  • Externals defensives panel — separate slot for external CDs (e.g. Pain Suppression, Roar of Sacrifice)
  • Boss-heal auras for Boss frames — highlightOwn (highlight your own healing) + hideOthers (suppress other players' heals)
  • Backed by Masque with separate skin group from A2
  • Mini-cc integration — frames registered in _G.MSUF_UnitFrames for party1-4 / raid1-40 (base units never registered to avoid stomping power bar)
  • Preview/edit mode — drag-to-position with radio-section UX, scaled preview (1.4×–2.8×)

Group Frames Options

  • New Options/MSUF_Options_GF.lua (~9k LOC) — Layout / Health & Text / Indicators / Effects tabs
  • New Options/MSUF_Options_GF_Auras.lua (~3k LOC) — Buffs / Debuffs / Externals scopes

★ ARCHITECTURE: Code Consolidation

Three large modules were collapsed from many small files into fewer, more cohesive ones — easier to navigate, fewer file-scope local pressures, faster TOC parse.

Auras 2.0 — 14 files → 6 files

  • Removed: A2_Cache, A2_Collect, A2_Colors, A2_CooldownText, A2_Filters, A2_Icons, A2_Masque, A2_Preview, A2_Public, A2_Units
  • Consolidated into: MSUF_A2_Core.lua (Cache + Collect + Icons), MSUF_A2_DB.lua (DB + Colors + Filters + Public + Units)
  • Kept: A2_DB, A2_Reminder, A2_Render, A2_Events, A2_EditMode

Edit Mode 2 — 16 files → 5 files

  • Removed: EM2_Anchors, EM2_Compat, EM2_Elements, EM2_Grid, EM2_Init, EM2_Nudge, EM2_PopupFactory, EM2_Popup_Aura, EM2_Popup_Cast, EM2_Popup_Unit, EM2_Registry, EM2_Snap, EM2_State, EM2_Ticker, EM2_Undo
  • Consolidated into: MSUF_EM2_Core.lua (Registry + State + Undo + Init), MSUF_EM2_Layout.lua (Grid + Snap + Anchors + Nudge + Ticker)
  • Kept: EM2_Movers, EM2_Popups, EM2_HUD

ClassPower — 15 files → 4 files

  • Removed all ClassPower/Modes/MSUF_CP_Mode_*.lua, Features/MSUF_CP_*.lua, Core/MSUF_CP_*.lua, MSUF_CP_Profiles.lua
  • Consolidated into: MSUF_CP_Core.lua (Build + Layout + Presentation + Runtime + Specials), MSUF_CP_Modes.lua (all mode builders)
  • Kept: MSUF_CP_Constants.lua, MSUF_CP_Controller.lua

Removed legacy modules

  • Core/MSUF_Indicators.lua — replaced by MSUF_EliteIcon.lua + indicator changes in core
  • Modules/MSUF_3DPortraits.lua — replaced by the rewritten MSUF_PortraitDecoration.lua

★ NEW: Foundation & Core Modules

Foundation/MSUF_BlizzKill.lua (NEW, 334 LOC) — Blizzard frame kill system + compat anchors + HideDefaultFrames. Tracks killed frames for re-assertion on PLAYER_ENTERING_WORLD (loading screens, flight, zone transitions). Combat-deferred RegisterStateDriver via lazy PLAYER_REGEN_ENABLED. Zero per-frame overhead. Extracted from the main backbone for maintainability.

Foundation/MSUF_Scheduler.lua (NEW, 96 LOC) — central next-frame / delayed scheduler. Replaces scattered C_Timer.After(0, ...) runtime deferrals with keyed, deduped scheduling. Secret-safe (no protected/secret API reads).

Core/MSUF_EliteIcon.lua (NEW, 136 LOC) — per-unit elite / rare / rare-elite icon overlay using nameplates-icon-elite-gold and nameplates-icon-elite-silver atlases. Supported on: Target, Focus, Target-of-Target, Boss. Per-unit DB keys: showEliteIcon, eliteIconSize, eliteIconAnchor, eliteIconOffsetX/Y, eliteIconLayer.


★ Performance Overhaul (Midnight 12.0)

UnitframeCore — hash-dispatch event handler

  • Replaced if/elseif chain in FrameOnEvent with _UF_DISPATCH hash table (UNIT_HEALTH, UNIT_POWER_UPDATE, UNIT_POWER_FREQUENT, UNIT_MAXHEALTH, etc.)
  • Lazy text-clear flags _msufHpTextCleared / _msufPowerTextCleared — skip redundant SetText("") calls

Bars — calculator-based unified health update

  • New _MSUF_HealthCalcUpdate — ONE CreateUnitHealPredictionCalculator per frame, ONE UnitGetDetailedHealPrediction call delivers HP, max-HP, absorbs, heal-absorbs, incoming heals (all C-side, secret-safe)
  • Eliminates per-event API call clusters; only runs on UNIT_MAXHEALTH/UNIT_ABSORB_AMOUNT_CHANGED/UNIT_HEAL_ABSORB_AMOUNT_CHANGED/UNIT_HEAL_PREDICTION/UNIT_MAXHEALTHMODIFIER (lean path on UNIT_HEALTH)
  • Pure-function unit-key normalize cache — eliminates 8× GetBossIndexFromToken lookups per target click
  • Settings-serial gate (_msufBarConfigGen) skips redundant overlay-color and absorb-enable resolution
  • MSUF_SetBarValue / MSUF_SetBarMinMax reduced to 1-line direct C calls (no smoothing/transaction wrappers)

Auras2 Render — render-path optimizations

  • Inlined DirtyAdd + ScheduleFlush (3 function calls → 0)
  • Inlined AcquireIcon fast path — pool[i] hit skips function call entirely
  • Per-configGen cached resolved config — eliminates ~40 table reads per aura event
  • Combat-skip for preview entirely (isEditActive always false in combat)
  • Aura table pool (max 64 entries) — zero Lua allocations for aura updates in steady-state raid combat
  • Sort-order 0 fast path: pure cache iteration, ZERO C API calls per render
  • _masqueButtonCount tracking — Masque ReSkin only on structural change

StatusIndicators — AFK/DND cache

  • New _MSUF_GetCachedAwayStatus with bit flags + invalidation API
  • Cached _MSUF_AwayHasBit / _MSUF_AwaySetBit — replaces per-frame UnitIsAFK/UnitIsDND polling

RangeFade — array-cached frame refs

  • New _pollFrames array (replaces map-based iteration), _pollUnits, _pollConfKey, _pollCount for tight inner loop
  • 175 added / 47 removed LOC

EventBus — simplified dispatch

  • Removed _DispatchSafe/_DispatchFast split; removed :SetSafeCalls
  • Direct dispatch via simplified Compact / MaybeUnregister helpers
  • 285 LOC removed, 74 added — net -211

Modules.luapcall removed from registration

  • SafeCall no longer wraps in pcall; runs callback directly
  • Replaces former hooksecurefunc for RoundedUF init with explicit _G.MSUF_RoundedUF_OnModulesApplied notify

Bars (Core/MSUF_Bars.lua)

  • NEW Bar Mode: gradient — HP-derived gradient mode added alongside dark / class / unified
  • Gradient direction pad — independent gradientDirLeft / gradientDirRight / gradientDirUp / gradientDirDown flags (replaces single gradientDirection string; auto-migrates on first load)
  • Gradient strength slidergradientStrength 0–1 (default 0.45)
  • Power bar gradientpowerGradientEnabled independent of HP gradient
  • Scope-aware bar border thickness — new MSUF_NormalizeBarBorderScope / MSUF_GetScopedBarBorderThicknessDB / per-scope cache (MSUF_BarBorderCache.byScope)
  • hlOverride flag — additional override key alongside hpPowerTextOverride for absorb display/anchor/opacity resolution
  • Dark-tint helper ns.Bars._DarkTint(g, r, gg, b) and `ns.Bars....
Read more

4.0b16

02 May 00:03

Choose a tag to compare

4.0b16 Pre-release
Pre-release

MidnightSimpleUnitFrames 4.0 Beta 16

Changelog

Group Frames / Group Auras

  • Fixed group frame headers not being correct.
  • Fixed cooldown text not working on group auras.
  • Added text preview for auras.
  • Improved aura preview further.
  • Added text coloring for group auras.
  • Fixed spell indicator menu dropdown and buff/debuff toggle styling for group frames.

Auras2 / Aura Options

  • Improved the Auras2 cooldown text coloring menu.
  • Minor fix.

Status Indicators / AFK

  • Improved AFK detection.
  • Improved the status indicator menu.

Options / Font Menu

  • Fixed font menu issues.
  • Fixed font scope issue with font and status indicator.

4.0b15

01 May 16:36

Choose a tag to compare

4.0b15 Pre-release
Pre-release

Midnight Simple UnitFrames 4.0 Beta 15 - Changelog

Added

  • Added layering for Unitframe status icons.
  • Added an option to only show own spell indicator effects.
  • Merged the elite icon.

Changed / Improved

  • Unitframes now use the Group Frames status indicator and matching menu style.
  • Improved indicator handling for Unitframes.
  • Grey out certain scaling options when the related scaling option is turned off.

Bugfixes

  • Fixed group frame scaling.
  • Fixed Bar Menu HP text dropdown settings.
  • Fixed a scope issue with bars and HP text.
  • Fixed name text behaving incorrectly after someone joins or leaves the party.
  • Fixed multiple group frame aura bugs: icon size, lag during live apply, and Masque issues.
  • Fixed group frame power bar handling per role.
  • Fixed group frame power text and preview behavior in Edit Mode.

4.0b14

01 May 00:11

Choose a tag to compare

4.0b14 Pre-release
Pre-release

Midnight Simple Unit Frames 4.0 Beta 14 – Changelog

Added

  • Added Smooth Health Fill for Unit Frames.

    • New toggle in Player > Basics.
    • Smooth animated health transitions.
  • Added Smooth Power Fill for Unit Frames.

    • New toggle in Player > Power Bar.
    • Works per frame while keeping fast player power updates.
  • Added Boss Heal Auras options in Auras2.

    • Highlight your own healer buffs on Boss frames.
    • Optionally hide healer buffs from other players.

Improved

  • Improved Bars and Fonts scope handling.

    • Party, Raid, and Mythic Raid scopes now apply more consistently.
    • Raid scope also applies to Mythic Raid where expected.
  • Improved Group Frame override behavior.

    • Font, border, glow, and highlight priority settings now sync more reliably.

Performance

  • Added cached smoothing helpers for health and power bars.
  • Kept UNIT_POWER_FREQUENT player-only to avoid extra overhead on other frames.

4.0b13

30 Apr 17:08

Choose a tag to compare

4.0b13 Pre-release
Pre-release

Midnight Simple Unit Frames 4.0 — Beta 13 Changelog

Beta 13 is a focused bugfix release for absorb handling and Group Frame Edit Mode.

Fixes

  • Fixed absorb and heal-absorb display settings not correctly respecting per-frame overrides.
  • Improved absorb/heal-absorb bar updates by using the shared health calculation path and safer fallback APIs.
  • Fixed absorb and heal-absorb bars not clearing properly when no absorb value is active.
  • Cleaned up absorb overlay colors and removed stale legacy color key conflicts.
  • Fixed Group Frame Edit Mode mover sync so missing movers are created and invalid movers are hidden correctly.
  • Improved Group Frame preview defaults for party, raid, and mythic raid previews.
  • Fixed absorb option live-apply so Unit Frames and Group Frames refresh through their correct pipelines.
  • Prevented Unit Frame absorb anchor logic from interfering with Group Frame absorb anchors.

4.0b12

30 Apr 11:14
f0311ee

Choose a tag to compare

4.0b12 Pre-release
Pre-release

MSUF 4.0 Beta 12 — Bugfixes

Fixed

  • PI tracking removed — Power Infusion entries cleared from spell-indicator data (SecretSpellIDs, icon table, TrackableAuras, SpecDefaults).
  • Phased playersUNIT_PHASE now triggers a full frame refresh instead of only updating the phase icon. Names and frame state stay in sync when players phase in/out.
  • Roster reshuffle leftovers — When a SecureGroupHeader slot gets reassigned to a different unit, the new occupant no longer inherits the previous player's debuff stripe, dispel border, displayed-aura cache, or aggro state.
  • Debuff stripe stuck on — Removed debuffs that weren't currently visible as icons (over icon limit, or filtered into the stripe-only path) now correctly clear the stripe via the dispatchAura remove-only fast path. Disabling the stripe feature in options now also hides the visual immediately.
  • Cooldown swipe missing on debuffs — Aura icons now call SetUseAuraDisplayTime(true) alongside SetCooldownFromDurationObject, which is required in 12.0 for the C-side swipe animation on non-self auras. Diff-gated, no extra cost on steady state.
  • Private Aura position / layer — X/Y offset sliders and Layer dropdown now apply live. Cheap reposition path avoids tearing down AddPrivateAuraAnchor registrations when only the container offset changed.
  • Fixed Target of Target anchoring

MSUF Beta 11 — Changelog

29 Apr 21:07
f0311ee

Choose a tag to compare

Pre-release

MSUF Beta 11 — Changelog

Fixes

  • Fixed Spell Indicator dropdown selection issues, including None not being applied correctly.
  • Fixed Spell Indicator settings persistence so disabled placed indicators and frame effects no longer reset to defaults.
  • Fixed number-only Spell Indicator sizing so the main size value is used correctly.
  • Added missing Power Infusion preview support for Discipline Priest Spell Indicators.
  • Fixed health text showing 0 or -0 when HP text is disabled.
  • Fixed Private Aura container setup to prevent Blizzard PrivateAurasUI layout errors.

4.0b10

28 Apr 18:27
f0311ee

Choose a tag to compare

4.0b10 Pre-release
Pre-release

MSUF Beta 10 — Changelog

New Features

Group Number Display

  • New Group Frame module: MSUF_GF_GroupNumber.lua
  • Optional raid/subgroup number display directly on Party/Raid/Mythic Raid frames
  • Configurable size, anchor, X/Y offset and copy support between Group Frame profiles
  • Coalesced updates, lazy FontString creation and defensive 12.0 secret-safe guards

Corner Indicators Refactor

  • Removed old boss and missing indicator types
  • New aggro indicator using cached Group Frame threat state
  • New custom indicator with per-slot Spell ID tracking
    • Supports present / missing mode
    • Supports helpful/harmful and player-only filters
    • Per-slot color configuration for TL/TR/BL/BR/Center
  • New Custom Spell Editor UI with tabs, mode/filter controls and color picker
  • DB migration: old boss/missing slots are cleaned up safely

Color Gradient Bar Mode

  • New global Unitframe coloring mode: gradient
  • Red → yellow → green HP-based bar coloring
  • Uses C-side ColorCurve / health percent path instead of Lua HP arithmetic
  • Designed to stay secret-safe for Midnight / 12.0

Group Frame Improvements

Better Group Frame Preview

  • Preview now represents real frames more accurately
  • Added preview support for name text, HP text and left/center/right power text
  • New layer toggles for Buffs, Debuffs, Externals, Status, Spells, Private Auras, CD/Stack and Text
  • Disabled preview layers now dim/gray out instead of disappearing completely
  • Improved preview scaling for narrow or compact layouts

Text and Power Handling

  • Added explicit showHPText support
  • Added separate power text slots: left, center and right
  • Power text can now work even when the power bar is hidden or too small
  • Better fallback anchoring: power bar → health bar → frame/bar group
  • More runtime cache flags to avoid unnecessary text and power updates

Group Frame Auras Cleanup

  • Improved aura icon recycling with stronger cleanup of old owner/unit/filter state
  • Cooldown text color is now cached and invalidated on font/color refresh
  • Less repeated style/config resolution during aura rendering
  • Cleaner frame-retire handling to avoid stale dirty queue entries

Bug Fixes / Cleanup

Private Auras — 12.0.5 Baseline

  • Removed old build probes, compatibility fallbacks and combat-defer queues
  • Direct use of current Private Aura anchor APIs
  • Simpler clear/remove behavior
  • Private Aura options text/layout cleaned up

Group Frame Options Cleanup

  • Added Group Number controls to the Indicator section
  • Expanded Text section for HP text and power text configuration
  • Removed Pet anchor support from Group Frame anchoring
  • Removed old Cutaway Health options and cleanup keys
  • Improved spacing/clipping in several Group Frame option sections

Spell Indicator Cleanup

  • Removed legacy framealpha and namecolor spell indicator effects
  • Old saved values migrate to none
  • Spell panel enlarged and layout cleaned up

Secret-Safety Improvements

  • More defensive guards for AFK/DND/dead/ghost/connected status checks
  • Safer tooltip/chat name-line handling
  • Reduced risk of secret boolean errors in status and indicator paths

Files

File Beta 9d Beta 10 Delta
MSUF_GF_GroupNumber.lua new +1 file
MSUF_Options_GF_Auras.lua 1967 2323 +356
MSUF_UnitframeCore.lua 3147 3268 +121
MSUF_GF_AuraPreview.lua 2279 2388 +109
MSUF_GF_Auras.lua 1399 1505 +106
MSUF_GF_Effects.lua 3790 3897 +107
MSUF_GF_DB.lua 2105 2171 +66
MSUF_Options_GF.lua 3712 3764 +52
MSUF_GF_PrivateAuras.lua 623 551 −72
MidnightSimpleUnitFrames.toc 167 168 +1

Removed / Packaging Notes

  • Removed the separate MidnightSimpleUnitFrames_Castbars/ folder from the Beta 10 ZIP
  • Removed old Group Frame pet anchoring/default migration paths
  • Removed old Corner Indicator boss / missing categories
  • Removed Cutaway Health from Group Frame options
  • Removed old Private Aura fallback/defer code

Needs Testing

  • Castbar loading after the removed external Castbars folder
  • Group Number display in real raid subgroups and preview mode
  • Custom Corner Indicator present/missing modes
  • Power text with hidden or very small power bars
  • Private Auras in combat on 12.0.5+
  • Migration from older profiles using boss, missing, pet anchor or Cutaway Health

Summary

Beta 10 is mainly a Group Frame quality and feature build. The biggest upgrades are Group Number display, the new Aggro/Custom Corner Indicators, a much better preview system, stronger HP/Power text handling, cleaner aura recycling and more 12.0 secret-safety cleanup.

3.70

26 Apr 13:20

Choose a tag to compare

Full Changelog: 3.66...3.70
MidnightSimpleUnitFrames 3.70

Big interrupt-indicator pass. The feature was broken on 12.0.5 — colors didn't wire up, non-interruptible casts still showed green, and several paths tainted. 3.70 fixes and refactors the whole module, adds a new border-tint style, and hardens the surrounding castbar pipeline.

Fixed

  • Interrupt Ready Indicator wasn't actually using the Colors-menu swatches — "Ready color" / "Not ready color" under "Interrupt Ready Indicator" were ignored. Now correctly read on every paint.
  • Non-interruptible casts (boss spells with permanent shields, immune buffs) showed a green/red indicator anyway. Now fully invisible — the indicator only appears on actual interruptible casts.
  • Brief green/red flash at the start of shielded boss casts — eliminated via deferred first paint.
  • GCD bar / castbar pipeline would taint and break on hasted specs (12.0.5 marks haste returns as secret values; arithmetic on them crashes the addon). Pipeline reworked end-to-end to never touch secret values from Lua — they now flow only through the C-side helpers (SetAlphaFromBoolean, EvaluateColorFromBoolean).
  • Three Focus-Kick-Icon color paths that would have tainted as soon as the indicator started returning real data — rewritten to be secret-safe.

New

  • Castbar border tint as an alternative to the colored box — tints the existing castbar outline green when your interrupt is ready, red when on cooldown, fully transparent on non-interruptible casts. Switch via the new Style dropdown in Section 7.
  • Auto-size to castbar height checkbox (on by default). Manual size slider expanded to 8–32 px.
  • Inline hint in Section 7 pointing to where the colors are configured.

3.66

22 Apr 04:34
c9ddc94

Choose a tag to compare

Full Changelog: 3.65...3.66

Fixed issue with castbars not working