Releases: jdtoppin/Cell
midnight-rearchitecture-v1
Midnight Rearchitecture v1
A complete rearchitecture of Cell's WoW 12.0.0 (Midnight) secret value handling, replacing the previous sanitize-then-recover approach with a pass-through design. Secret values flow directly to C-level APIs that accept them natively. Built on top of enderneko/Cell r275.
Addresses all architectural feedback from Krealle and ljosberinn on PRs 462/463.
Core Architecture
SanitizeAurareplaced byAnnotateAura— read-only_hasSecretstag, no aura field mutation- Secret values pass through to C-level APIs (
SetTexture,SetText,SetCooldownFromDurationObject,SetVertexColor, etc.) - Single utility layer in
Utils.lua—F.IsValueNonSecret(),F.HasAnySecretValues() - Zero
pcallfor secret value handling - No
rawequal, no bareissecretvalueoutside Utils.lua
Indicator Display (Midnight)
- BorderIcon for debuffs, defensives, externals (CooldownFrame clock swipe) since
EvaluateElapsedPercenterrors in tainted contexts - Blizzard countdown text via
SetHideCountdownNumbers(false)+SetCountdownAbbrevThreshold(60)— shows duration on indicators with user-configurable font - Simplified settings — Always/Never duration visibility (no thresholds), font-noOffset for duration font (no anchor/offset)
- Dispel type colors as border base with black swipe fill; red for Physical; yellow for buff cooldowns
- Green border for player's own casts, yellow for others (via
|PLAYERserver filter suffix) - Private aura
borderScalefix for properly sized borders - Big debuff sizing preserved on Midnight path
- Preview pane matches in-game appearance
Buff Cooldown Detection (Secret Auras)
- Tiered server-side filter fallback:
HELPFUL|EXTERNAL_DEFENSIVE— externals like Ironbark, Pain SuppressionHELPFUL|BIG_DEFENSIVE— big defensives like Divine ShieldHELPFUL|RAID— spec-relevant buffs like Power Infusion
Raid Debuff Detection
- Tiered fallback: Lua lookup →
HARMFUL|RAIDserver filter → encounter fallback - Midnight expansion dungeon and raid debuff data included
New Built-in Spells
- Power Infusion (Priest externals), Blessing of Freedom (Paladin externals)
- Rewind + Verdant Embrace (Evoker externals), Strength of the Black Ox (Monk defensives)
Fixes
- Overshield glow: uses
healPredictionCalculator:GetDamageAbsorbs()isClamped+SetAlphaFromBoolean - Raid target markers:
SecureActionButtonTemplatewithtype="raidtarget"(SetRaidTarget protected in 12.0) - DeathReport shared handlers no longer short-circuit on Midnight
- BuffTracker
InCombatLockdownguard beforeSendChatMessage UnitIsUnitsecret boolean guard inHandleUnitButton(spotlight frames)- Secret GUID comparison guard in
UnitButton_OnTick - Secret string guard in
F.UpdateTextWidth(utf8len crash on secret NPC names) - Private aura
AddPrivateAuraAnchordeferred in combat (12.0.1 hotfix) - Non-secret auras get real start/duration even on Midnight
- Dead code removed: QueueComm, durationVisibilitySimple (restored for Midnight), skeleton file
Known Limitations
- Per-spell raid debuff glow config doesn't work in combat (spellId secret, enemy cast spellIds also secret)
- Tank active mitigation not tracked in combat (spellId not whitelisted)
- Fade (Priest) not detected as defensive in combat (no server filter classification)
- Duration visibility toggle takes effect on next aura update, not immediately
Install
Extract Cell-midnight-rearchitecture-v1.zip into your Interface/AddOns/ folder (includes all required libraries). Remove any existing Cell folder first.
pr462-review-fixes
r275.5 Added Midnight Raid Debuffs
Raid Debuffs
- Added initial Midnight expansion raid debuffs for all 12 instances (6 raids, 6 dungeons) and 41 bosses.
- Boss ability spell IDs sourced from the Encounter Journal via wago.tools DB2 tables.
- General (trash mob) debuffs still need to be collected in-game and added in a future update.
- Spells may need further in-game curation to filter out non-debuff abilities.
r275-release — WoW 12.0.0 (Midnight) Compatibility
Comprehensive compatibility update for WoW Patch 12.0.0 (Midnight), addressing the removal of COMBAT_LOG_EVENT_UNFILTERED, the introduction of Secret Values, blocked addon communications during restricted contexts, and spell/API removals. Interface bumped to 120001.
Secret Values (12.0.0+)
- Add
Cell.isMidnightdetection flag andF.IsSecretValue(),F.IsAuraRestricted(),F.IsCooldownRestricted()utility functions - Add per-aura
F.IsAuraNonSecret(),F.IsSpellAuraNonSecret(),F.IsValueNonSecret()helpers — non-secret (whitelisted) auras now get real countdown timers, source detection, and duration display; secret auras gracefully degrade - UnitButton: major dual-path refactor — Midnight uses
UnitHealPredictionCalculator,C_CurveUtil.CreateCurve(), and StatusBar overlays for health/prediction/shields; pre-Midnight retains arithmetic-based paths - Appearance: IncomingHeal widget uses
SetStatusBarTextureon Midnight (StatusBar) vsSetTexturepre-Midnight (Texture) - Indicator_Defaults: local
DebuffTypeColorfallback for when the WoW global is removed - Per-field
F.IsValueNonSecret()guards before every arithmetic operation on temporal aura fields (expirationTime,duration,applications, and cachedold*variants)
CLEU Removal
- AoEHealing: disabled on Midnight (CLEU unavailable); frame still exists for potential future non-CLEU API
- StatusIcon: soulstone/resurrection tracking switches to
UNIT_AURA+UNIT_HEALTHon Midnight - NPCFrame: boss6-8 health/aura tracking switches to unit events on Midnight
- DeathReport: full refactor — Midnight uses
UNIT_HEALTH+UnitIsDeadOrGhost()for death detection - UnitButton: removed
CombatLogGetCurrentEventInfodependency andCheckCLEURequired - General: removed
useCleuHealthUpdatercheckbox (CLEU health updater obsolete) - Revise: r275 migration removes
useCleuHealthUpdaterfrom saved variables
Comm Restrictions
- Comm:
IsCommRestricted()detects encounters/M+/PvP; allSendCommMessagecalls guarded; pending queue with flush onENCOUNTER_END - Nicknames: all nickname sync sends guarded with
F.IsCommRestricted()
Heal Prediction & Health Bar Fixes
- Created a dedicated
healPredictionCalculatorseparate from the sharedhealthCalculator— the heal prediction function'sSetIncomingHealClampMode(0)andSetIncomingHealOverflowPercent(1.0)were persisting on the shared calculator and corrupting health/absorb reads - Incoming heal bar is now a StatusBar (instead of Texture) anchored to the health fill texture edge
- Fixed health bar loss color stuck on white/full-health —
self.states.healthPercentwas never set on the Midnight path; now populated fromcalculator:GetCurrentHealthPercent()with a secret-safe fallback - Dispels now show correctly because
HandleDebuffcompletes to the dispel detection code (string/boolean fields, not temporal arithmetic)
Spell & Default Updates
- Removed: Engulf, Renew, Power Word: Life, Void Shift, Shadow Covenant, Divine Star, Cloudburst Totem, Minor Cenarion Ward, Premonition of Solace
- Added: Plea (200829, Disc Priest)
- Added missing healing spells to default indicator list (Evoker, Monk, Paladin, Priest)
- Moved: Prayer of Mending from class-wide to Holy spec only
- Fixed: Shaman Poison dispel node IDs (103609 → 103599)
Defensive Nil Guards & Fixes
- MainFrame: nil guards for
currentLayoutTableandtooltipPoint - HideBlizzard: guards for
PartyMemberFramePool,CompactPartyFrame,PartyMemberBackground - RaidDebuffs: nil guard for encounter journal expansion data
- TargetedSpells: skip enemy spell tracking during restricted periods
- BuffTracker: guard
GetAuraDataBySpellNamewhen auras are restricted; per-aurasourceUnitcheck - QuickCast: skip only secret auras in
ForEachAura - Custom indicators: per-aura secret check for duration/start
- Appearance: ticker nil guard in preview
OnHide
Infrastructure
- All 22 XML files updated from
FrameXML/UI_shared.xsd→Blizzard_SharedXML/UI.xsd - Core: version constants bumped to 275,
GetBattlegroundInfoguard added
r274-release
- Update Molten Core debuffs
- Fix boss unit button mapping
midnight-compat-v49
r275.5 Added Midnight Raid Debuffs
Raid Debuffs
- Added initial Midnight expansion raid debuffs for all 12 instances (6 raids, 6 dungeons) and 41 bosses.
- Boss ability spell IDs sourced from the Encounter Journal via wago.tools DB2 tables.
- General (trash mob) debuffs still need to be collected in-game and added in a future update.
- Spells may need further in-game curation to filter out non-debuff abilities.
r275-release — WoW 12.0.0 (Midnight) Compatibility
Comprehensive compatibility update for WoW Patch 12.0.0 (Midnight), addressing the removal of COMBAT_LOG_EVENT_UNFILTERED, the introduction of Secret Values, blocked addon communications during restricted contexts, and spell/API removals. Interface bumped to 120001.
Secret Values (12.0.0+)
- Add
Cell.isMidnightdetection flag andF.IsSecretValue(),F.IsAuraRestricted(),F.IsCooldownRestricted()utility functions - Add per-aura
F.IsAuraNonSecret(),F.IsSpellAuraNonSecret(),F.IsValueNonSecret()helpers — non-secret (whitelisted) auras now get real countdown timers, source detection, and duration display; secret auras gracefully degrade - UnitButton: major dual-path refactor — Midnight uses
UnitHealPredictionCalculator,C_CurveUtil.CreateCurve(), and StatusBar overlays for health/prediction/shields; pre-Midnight retains arithmetic-based paths - Appearance: IncomingHeal widget uses
SetStatusBarTextureon Midnight (StatusBar) vsSetTexturepre-Midnight (Texture) - Indicator_Defaults: local
DebuffTypeColorfallback for when the WoW global is removed - Per-field
F.IsValueNonSecret()guards before every arithmetic operation on temporal aura fields (expirationTime,duration,applications, and cachedold*variants)
CLEU Removal
- AoEHealing: disabled on Midnight (CLEU unavailable); frame still exists for potential future non-CLEU API
- StatusIcon: soulstone/resurrection tracking switches to
UNIT_AURA+UNIT_HEALTHon Midnight - NPCFrame: boss6-8 health/aura tracking switches to unit events on Midnight
- DeathReport: full refactor — Midnight uses
UNIT_HEALTH+UnitIsDeadOrGhost()for death detection - UnitButton: removed
CombatLogGetCurrentEventInfodependency andCheckCLEURequired - General: removed
useCleuHealthUpdatercheckbox (CLEU health updater obsolete) - Revise: r275 migration removes
useCleuHealthUpdaterfrom saved variables
Comm Restrictions
- Comm:
IsCommRestricted()detects encounters/M+/PvP; allSendCommMessagecalls guarded; pending queue with flush onENCOUNTER_END - Nicknames: all nickname sync sends guarded with
F.IsCommRestricted()
Heal Prediction & Health Bar Fixes
- Created a dedicated
healPredictionCalculatorseparate from the sharedhealthCalculator— the heal prediction function'sSetIncomingHealClampMode(0)andSetIncomingHealOverflowPercent(1.0)were persisting on the shared calculator and corrupting health/absorb reads - Incoming heal bar is now a StatusBar (instead of Texture) anchored to the health fill texture edge
- Fixed health bar loss color stuck on white/full-health —
self.states.healthPercentwas never set on the Midnight path; now populated fromcalculator:GetCurrentHealthPercent()with a secret-safe fallback - Dispels now show correctly because
HandleDebuffcompletes to the dispel detection code (string/boolean fields, not temporal arithmetic)
Spell & Default Updates
- Removed: Engulf, Renew, Power Word: Life, Void Shift, Shadow Covenant, Divine Star, Cloudburst Totem, Minor Cenarion Ward, Premonition of Solace
- Added: Plea (200829, Disc Priest)
- Added missing healing spells to default indicator list (Evoker, Monk, Paladin, Priest)
- Moved: Prayer of Mending from class-wide to Holy spec only
- Fixed: Shaman Poison dispel node IDs (103609 → 103599)
Defensive Nil Guards & Fixes
- MainFrame: nil guards for
currentLayoutTableandtooltipPoint - HideBlizzard: guards for
PartyMemberFramePool,CompactPartyFrame,PartyMemberBackground - RaidDebuffs: nil guard for encounter journal expansion data
- TargetedSpells: skip enemy spell tracking during restricted periods
- BuffTracker: guard
GetAuraDataBySpellNamewhen auras are restricted; per-aurasourceUnitcheck - QuickCast: skip only secret auras in
ForEachAura - Custom indicators: per-aura secret check for duration/start
- Appearance: ticker nil guard in preview
OnHide
Infrastructure
- All 22 XML files updated from
FrameXML/UI_shared.xsd→Blizzard_SharedXML/UI.xsd - Core: version constants bumped to 275,
GetBattlegroundInfoguard added
r274-release
- Update Molten Core debuffs
- Fix boss unit button mapping