Releases: Mapkov2/MidnightSimpleUnitFrames
4.0rc1
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 onSecureGroupHeaderTemplate)MSUF_GF_DB.lua— defaults + config resolution, 3-slot health text modes, name color, role-aware visibilityMSUF_GF_Render.lua— coalesced dirty-flag visual pipeline (multiple DB writes → 1 update per tick)MSUF_GF_Effects.lua— per-frameRegisterUnitEvent, range fade (Grid2 pattern), aggro/dispel/target borders, AFK/DND text, UNIT_AURA coalescingMSUF_GF_Auras.lua— 3-group aura display (Buffs / Debuffs / Externals), zero-alloc icon pools, externals via BIG_DEFENSIVE filterMSUF_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 cacheMSUF_GF_PrivateAuras.lua— 12.0.5 Private Aura anchoring + Dispel Overlay (isContainer = true), no fallback pathsMSUF_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-specMSUF_GF_HealerBuffs.lua+MSUF_GF_HealerBuffs_Editor.lua— per-spec spell families, compilation, aura matching, manual slot managementMSUF_GF_CornerIndicators.lua— 5 fixed slots (TL/TR/BL/BR/C) for dispel/aggro/custom dots, full perf rewriteMSUF_GF_GroupNumber.lua— subgroup number (1-8) overlay, hooked into public GF APIMSUF_GF_Masque.lua— separate Masque group from A2, registersIcon+Cooldownonly (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 text —
textLeft / textCenter / textRightindependently 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_UnitFramesforparty1-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 byMSUF_EliteIcon.lua+ indicator changes in coreModules/MSUF_3DPortraits.lua— replaced by the rewrittenMSUF_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
FrameOnEventwith_UF_DISPATCHhash table (UNIT_HEALTH,UNIT_POWER_UPDATE,UNIT_POWER_FREQUENT,UNIT_MAXHEALTH, etc.) - Lazy text-clear flags
_msufHpTextCleared/_msufPowerTextCleared— skip redundantSetText("")calls
Bars — calculator-based unified health update
- New
_MSUF_HealthCalcUpdate— ONECreateUnitHealPredictionCalculatorper frame, ONEUnitGetDetailedHealPredictioncall 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 onUNIT_HEALTH) - Pure-function unit-key normalize cache — eliminates 8×
GetBossIndexFromTokenlookups per target click - Settings-serial gate (
_msufBarConfigGen) skips redundant overlay-color and absorb-enable resolution MSUF_SetBarValue/MSUF_SetBarMinMaxreduced to 1-line direct C calls (no smoothing/transaction wrappers)
Auras2 Render — render-path optimizations
- Inlined
DirtyAdd+ScheduleFlush(3 function calls → 0) - Inlined
AcquireIconfast path —pool[i]hit skips function call entirely - Per-
configGencached resolved config — eliminates ~40 table reads per aura event - Combat-skip for preview entirely (
isEditActivealways 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
_masqueButtonCounttracking — Masque ReSkin only on structural change
StatusIndicators — AFK/DND cache
- New
_MSUF_GetCachedAwayStatuswith bit flags + invalidation API - Cached
_MSUF_AwayHasBit/_MSUF_AwaySetBit— replaces per-frameUnitIsAFK/UnitIsDNDpolling
RangeFade — array-cached frame refs
- New
_pollFramesarray (replaces map-based iteration),_pollUnits,_pollConfKey,_pollCountfor tight inner loop - 175 added / 47 removed LOC
EventBus — simplified dispatch
- Removed
_DispatchSafe/_DispatchFastsplit; removed:SetSafeCalls - Direct dispatch via simplified
Compact/MaybeUnregisterhelpers - 285 LOC removed, 74 added — net -211
Modules.lua — pcall removed from registration
SafeCallno longer wraps in pcall; runs callback directly- Replaces former
hooksecurefuncfor RoundedUF init with explicit_G.MSUF_RoundedUF_OnModulesAppliednotify
Bars (Core/MSUF_Bars.lua)
- NEW Bar Mode:
gradient— HP-derived gradient mode added alongsidedark/class/unified - Gradient direction pad — independent
gradientDirLeft/gradientDirRight/gradientDirUp/gradientDirDownflags (replaces singlegradientDirectionstring; auto-migrates on first load) - Gradient strength slider —
gradientStrength0–1 (default 0.45) - Power bar gradient —
powerGradientEnabledindependent of HP gradient - Scope-aware bar border thickness — new
MSUF_NormalizeBarBorderScope/MSUF_GetScopedBarBorderThicknessDB/ per-scope cache (MSUF_BarBorderCache.byScope) hlOverrideflag — additional override key alongsidehpPowerTextOverridefor absorb display/anchor/opacity resolution- Dark-tint helper
ns.Bars._DarkTint(g, r, gg, b)and `ns.Bars....
4.0b16
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
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
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_FREQUENTplayer-only to avoid extra overhead on other frames.
4.0b13
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
MSUF 4.0 Beta 12 — Bugfixes
Fixed
- PI tracking removed — Power Infusion entries cleared from spell-indicator data (SecretSpellIDs, icon table, TrackableAuras, SpecDefaults).
- Phased players —
UNIT_PHASEnow 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
SecureGroupHeaderslot 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)alongsideSetCooldownFromDurationObject, 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
AddPrivateAuraAnchorregistrations when only the container offset changed. - Fixed Target of Target anchoring
MSUF Beta 11 — Changelog
MSUF Beta 11 — Changelog
Fixes
- Fixed Spell Indicator dropdown selection issues, including
Nonenot 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
0or-0when HP text is disabled. - Fixed Private Aura container setup to prevent Blizzard PrivateAurasUI layout errors.
4.0b10
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
bossandmissingindicator types - New
aggroindicator using cached Group Frame threat state - New
customindicator 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/missingslots 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
showHPTextsupport - 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
framealphaandnamecolorspell 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/missingcategories - 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
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
Full Changelog: 3.65...3.66
Fixed issue with castbars not working