Skip to content

Releases: jdtoppin/Cell

midnight-rearchitecture-v1

19 Mar 18:51

Choose a tag to compare

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

  • SanitizeAura replaced by AnnotateAura — read-only _hasSecrets tag, no aura field mutation
  • Secret values pass through to C-level APIs (SetTexture, SetText, SetCooldownFromDurationObject, SetVertexColor, etc.)
  • Single utility layer in Utils.luaF.IsValueNonSecret(), F.HasAnySecretValues()
  • Zero pcall for secret value handling
  • No rawequal, no bare issecretvalue outside Utils.lua

Indicator Display (Midnight)

  • BorderIcon for debuffs, defensives, externals (CooldownFrame clock swipe) since EvaluateElapsedPercent errors 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 |PLAYER server filter suffix)
  • Private aura borderScale fix 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:
    1. HELPFUL|EXTERNAL_DEFENSIVE — externals like Ironbark, Pain Suppression
    2. HELPFUL|BIG_DEFENSIVE — big defensives like Divine Shield
    3. HELPFUL|RAID — spec-relevant buffs like Power Infusion

Raid Debuff Detection

  • Tiered fallback: Lua lookup → HARMFUL|RAID server 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: SecureActionButtonTemplate with type="raidtarget" (SetRaidTarget protected in 12.0)
  • DeathReport shared handlers no longer short-circuit on Midnight
  • BuffTracker InCombatLockdown guard before SendChatMessage
  • UnitIsUnit secret boolean guard in HandleUnitButton (spotlight frames)
  • Secret GUID comparison guard in UnitButton_OnTick
  • Secret string guard in F.UpdateTextWidth (utf8len crash on secret NPC names)
  • Private aura AddPrivateAuraAnchor deferred 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

14 Mar 01:29

Choose a tag to compare

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.isMidnight detection flag and F.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 SetStatusBarTexture on Midnight (StatusBar) vs SetTexture pre-Midnight (Texture)
  • Indicator_Defaults: local DebuffTypeColor fallback for when the WoW global is removed
  • Per-field F.IsValueNonSecret() guards before every arithmetic operation on temporal aura fields (expirationTime, duration, applications, and cached old* 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_HEALTH on 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 CombatLogGetCurrentEventInfo dependency and CheckCLEURequired
  • General: removed useCleuHealthUpdater checkbox (CLEU health updater obsolete)
  • Revise: r275 migration removes useCleuHealthUpdater from saved variables

Comm Restrictions

  • Comm: IsCommRestricted() detects encounters/M+/PvP; all SendCommMessage calls guarded; pending queue with flush on ENCOUNTER_END
  • Nicknames: all nickname sync sends guarded with F.IsCommRestricted()

Heal Prediction & Health Bar Fixes

  • Created a dedicated healPredictionCalculator separate from the shared healthCalculator — the heal prediction function's SetIncomingHealClampMode(0) and SetIncomingHealOverflowPercent(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.healthPercent was never set on the Midnight path; now populated from calculator:GetCurrentHealthPercent() with a secret-safe fallback
  • Dispels now show correctly because HandleDebuff completes 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 currentLayoutTable and tooltipPoint
  • HideBlizzard: guards for PartyMemberFramePool, CompactPartyFrame, PartyMemberBackground
  • RaidDebuffs: nil guard for encounter journal expansion data
  • TargetedSpells: skip enemy spell tracking during restricted periods
  • BuffTracker: guard GetAuraDataBySpellName when auras are restricted; per-aura sourceUnit check
  • 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.xsdBlizzard_SharedXML/UI.xsd
  • Core: version constants bumped to 275, GetBattlegroundInfo guard added

r274-release

View Full Changelog

  • Update Molten Core debuffs
  • Fix boss unit button mapping

midnight-compat-v49

13 Mar 00:16

Choose a tag to compare

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.isMidnight detection flag and F.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 SetStatusBarTexture on Midnight (StatusBar) vs SetTexture pre-Midnight (Texture)
  • Indicator_Defaults: local DebuffTypeColor fallback for when the WoW global is removed
  • Per-field F.IsValueNonSecret() guards before every arithmetic operation on temporal aura fields (expirationTime, duration, applications, and cached old* 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_HEALTH on 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 CombatLogGetCurrentEventInfo dependency and CheckCLEURequired
  • General: removed useCleuHealthUpdater checkbox (CLEU health updater obsolete)
  • Revise: r275 migration removes useCleuHealthUpdater from saved variables

Comm Restrictions

  • Comm: IsCommRestricted() detects encounters/M+/PvP; all SendCommMessage calls guarded; pending queue with flush on ENCOUNTER_END
  • Nicknames: all nickname sync sends guarded with F.IsCommRestricted()

Heal Prediction & Health Bar Fixes

  • Created a dedicated healPredictionCalculator separate from the shared healthCalculator — the heal prediction function's SetIncomingHealClampMode(0) and SetIncomingHealOverflowPercent(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.healthPercent was never set on the Midnight path; now populated from calculator:GetCurrentHealthPercent() with a secret-safe fallback
  • Dispels now show correctly because HandleDebuff completes 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 currentLayoutTable and tooltipPoint
  • HideBlizzard: guards for PartyMemberFramePool, CompactPartyFrame, PartyMemberBackground
  • RaidDebuffs: nil guard for encounter journal expansion data
  • TargetedSpells: skip enemy spell tracking during restricted periods
  • BuffTracker: guard GetAuraDataBySpellName when auras are restricted; per-aura sourceUnit check
  • 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.xsdBlizzard_SharedXML/UI.xsd
  • Core: version constants bumped to 275, GetBattlegroundInfo guard added

r274-release

View Full Changelog

  • Update Molten Core debuffs
  • Fix boss unit button mapping