Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
9bc27ae
PR 1: Core aura pipeline — AnnotateAura, utility layer, SetCooldownFr…
jdtoppin Mar 16, 2026
6aea840
PR 2: Health/power text + color gradients
jdtoppin Mar 16, 2026
577bac7
PR 3: Raid debuff detection — tiered fallback, Midnight dungeon data
jdtoppin Mar 16, 2026
35aaa05
PR 4: Targeted spells — secret value compatibility rewrite
jdtoppin Mar 16, 2026
8b332ac
PR 5: Misc fixes — DeathReport, range checks, CLEU removal, comm guards
jdtoppin Mar 16, 2026
df23475
PR 6: Settings, appearance, cleanup — dead code removal, UI fixes
jdtoppin Mar 16, 2026
731cbcc
feat: enable Blizzard countdown text on Midnight BorderIcon indicators
jdtoppin Mar 22, 2026
5b07554
feat: enable countdown text on Midnight BorderIcon previews
jdtoppin Mar 22, 2026
3760ebb
feat: countdown text settings, preview fixes, raid debuff colors
jdtoppin Mar 23, 2026
35e0aee
feat: simplified duration font settings + centered countdown text
jdtoppin Mar 23, 2026
e79c24d
feat: player cast coloring, new built-in spells, BuffTracker guard
jdtoppin Mar 23, 2026
9d1c7a6
fix: toggle Blizzard countdown text on duration visibility change
jdtoppin Mar 23, 2026
02d1a13
feat: simplified duration visibility for Midnight indicators
jdtoppin Mar 23, 2026
6354f2f
fix: review items — performance, dead code, UI polish
jdtoppin Mar 23, 2026
b82b988
fix: tooltip RefreshData crash + utf8len crash on secret strings
jdtoppin Mar 25, 2026
93de641
Add Midnight fixes and prepare public fork
skyking-dev Apr 1, 2026
1766f1e
Midnight dispel filtering and private aura options
skyking-dev Apr 2, 2026
aefcaec
Prepare r275.7-skyking-dev release
skyking-dev Apr 2, 2026
705b183
Prepare r275.8-skyking-dev release
skyking-dev Apr 8, 2026
d4c7f8a
Prepare r275.9-beta release
skyking-dev Apr 22, 2026
b725c4a
update private auras
skyking-dev Apr 22, 2026
2d39f97
Improve private aura stability
skyking-dev Apr 23, 2026
4491275
Revise README for krysiolol fork of Cell
krysiolol May 24, 2026
f74958f
Latest r277.7.3 version
krysiolol May 24, 2026
b438802
Revise README for krysiolol fork of Cell
krysiolol May 24, 2026
23b97b2
Update README.md
NeeRgY Aug 7, 2026
ab4cd77
Update to r277.9
NeeRgY Aug 7, 2026
03caceb
Update README.md
NeeRgY Aug 7, 2026
5370fbd
Update README.md
NeeRgY Aug 7, 2026
39ba8cc
Update README.md
NeeRgY Aug 7, 2026
15b365b
Update README.md
NeeRgY Aug 8, 2026
a94184c
Update to r277.9.1
NeeRgY Aug 12, 2026
7eef0c4
Update README.md
NeeRgY Aug 12, 2026
1bf2c38
Update README.md
NeeRgY Aug 12, 2026
708024e
Update to r277.9.2
NeeRgY Aug 12, 2026
adfdece
Update to r277.9.3
NeeRgY Aug 12, 2026
20e5bc5
Update README.md
NeeRgY Aug 12, 2026
5fdd2e9
Update to r277.9.4
NeeRgY Aug 13, 2026
6430072
Update FUNDING.yml
NeeRgY Aug 13, 2026
cc53278
Update FUNDING.yml
NeeRgY Aug 13, 2026
607da7c
Update FUNDING.yml
NeeRgY Aug 13, 2026
e306067
Update README.md
NeeRgY Aug 14, 2026
91dddf2
Update to r277.9.5
NeeRgY Aug 14, 2026
20d8379
Update README.md
NeeRgY Aug 14, 2026
3e835d7
Update to r277.9.6
NeeRgY Aug 15, 2026
c17f69d
Update README.md
NeeRgY Aug 15, 2026
6b0e053
Update to r277.9.7
NeeRgY Aug 16, 2026
bc8cdbc
Update to r277.9.7.1
NeeRgY Aug 17, 2026
aab278a
Update README.md
NeeRgY Aug 17, 2026
7cd7c5c
Update FUNDING.yml
NeeRgY Aug 17, 2026
d9a72cf
Update to r277.9.7.2
NeeRgY Aug 17, 2026
97bb4b9
Update README.md
NeeRgY Aug 17, 2026
5dda231
Update to r277.9.7.3
NeeRgY Aug 17, 2026
190c650
Update README.md
NeeRgY Aug 17, 2026
b9b3ace
Update to r277.9.7.4
NeeRgY Aug 18, 2026
7a74daa
Update README.md
NeeRgY Aug 18, 2026
67f8cfa
Update to r277.9.7.5
NeeRgY Aug 18, 2026
fe8171f
Update to r277.9.7.6
NeeRgY Aug 19, 2026
e71b321
Update to r277.9.7.6
NeeRgY Aug 19, 2026
03265c6
Update to r277.9.7.7
NeeRgY Aug 19, 2026
33b0ff4
Update to r277.9.7.8
NeeRgY Aug 20, 2026
7d84240
Update README.md
NeeRgY Aug 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
ko_fi: enderneko
custom: "https://afdian.com/@enderneko"
custom: "https://afdian.com/@enderneko"
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
.utils/*.csv
Libs/*


# excluded
!.release/*.sh
!Libs/CallbackHandler.lua
Expand All @@ -16,4 +17,12 @@ Libs/*
!Libs/LibBadWords.lua
!Libs/LoadLibs.xml
!Libs/LoadLibs_Classic.xml
!Libs/LibTranslit-1.0
!Libs/LibTranslit-1.0


.DS_Store
.codex
Cell-r*-release-*.zip

# local tooling / references
skills/
111 changes: 111 additions & 0 deletions .release/validate_package.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#!/usr/bin/env bash

set -euo pipefail

usage() {
cat <<'EOF'
Usage: .release/validate_package.sh <path-to-extracted-addon>

Validates whether an extracted Cell package looks like a real installable addon
package or a source archive from GitHub.
EOF
}

if [[ $# -ne 1 ]]; then
usage >&2
exit 2
fi

input_path="$1"

if [[ ! -d "$input_path" ]]; then
echo "ERROR: path does not exist or is not a directory: $input_path" >&2
exit 2
fi

addon_root="$input_path"

# GitHub source archives often unpack into a parent folder that contains the
# actual addon root as a nested "Cell" directory.
if [[ -d "$input_path/Cell" && -f "$input_path/Cell/Cell.toc" ]]; then
addon_root="$input_path/Cell"
fi

if [[ ! -f "$addon_root/Cell.toc" ]]; then
echo "ERROR: could not find Cell.toc under: $addon_root" >&2
exit 2
fi

required_lib_paths=(
"Libs/LibStub/LibStub.lua"
"Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml"
"Libs/AceComm-3.0/AceComm-3.0.xml"
"Libs/LibSerialize/lib.xml"
"Libs/LibCustomGlow-1.0/LibCustomGlow-1.0.xml"
"Libs/LibSharedMedia-3.0/lib.xml"
"Libs/LibDeflate/lib.xml"
)

source_markers=(
".gitignore"
".gitattributes"
".pkgmeta"
".github"
".release"
)

missing=()
markers_found=()

for path in "${required_lib_paths[@]}"; do
if [[ ! -e "$addon_root/$path" ]]; then
missing+=("$path")
fi
done

for path in "${source_markers[@]}"; do
if [[ -e "$addon_root/$path" ]]; then
markers_found+=("$path")
fi
done

echo "Inspecting package root: $addon_root"
echo

if [[ ${#missing[@]} -eq 0 ]]; then
echo "Required embedded libraries: OK"
else
echo "Required embedded libraries: MISSING"
for path in "${missing[@]}"; do
echo " - $path"
done
fi

echo

if [[ ${#markers_found[@]} -eq 0 ]]; then
echo "Source archive markers: none detected"
else
echo "Source archive markers detected:"
for path in "${markers_found[@]}"; do
echo " - $path"
done
fi

echo

if [[ ${#missing[@]} -gt 0 ]]; then
echo "RESULT: INVALID INSTALL PACKAGE"
echo "This looks like a source archive or an incomplete release."
echo "Install the packaged release asset instead of GitHub 'Source code'."
exit 1
fi

if [[ ${#markers_found[@]} -gt 0 ]]; then
echo "RESULT: SUSPICIOUS PACKAGE"
echo "Libraries are present, but repository-only files were included."
echo "Double-check which asset was uploaded or downloaded."
exit 1
fi

echo "RESULT: PACKAGE LOOKS INSTALLABLE"
70 changes: 3 additions & 67 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,68 +1,4 @@
# r275.5 Added Midnight Raid Debuffs
[View Full Changelog](https://github.com/enderneko/Cell/compare/r276-beta...f35daad0c620b95f475dee61945fbab7cbee2fcb)

## 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.xsd` → `Blizzard_SharedXML/UI.xsd`
- Core: version constants bumped to 275, `GetBattlegroundInfo` guard added

---

# r274-release

[View Full Changelog](https://github.com/enderneko/Cell/compare/r273-release...c376c32494926a90b93cc63bfc564234fb6e5cd6)

- Update Molten Core debuffs
- Fix boss unit button mapping
- feat: 添加决战奥格瑞玛团本减益 (#488, thanks @Follen)
- feat: 添加 Classic ZG 团本减益数据 (#487, thanks @Follen)
46 changes: 41 additions & 5 deletions Cell.toc
Original file line number Diff line number Diff line change
@@ -1,24 +1,55 @@
## Interface: 120001
## Interface: 120100
## Title: Cell
## Version: r275-beta
## Author: enderneko
## Version: r277.9.7.8
## Author: enderneko, Krysio, NeRgY
## X-Flavor: Mainline
## SavedVariables: CellDB, CellDBBackup
## LoadSavedVariablesFirst: 1
## AddonCompartmentFunc: Cell_OnAddonCompartmentClick
## IconTexture: Interface\AddOns\Cell\Media\icon.tga
## Notes: Beautiful and customizable raid/party frames
## Notes-deDE: Schone und anpassbare Raid-/Gruppenfenster
## Category-enUS: Unit Frames
## Category-deDE: Einheitenfenster
## Category-esES: Marcos de unidades
## Category-esMX: Marcos de unidades
## Category-frFR: Portraits d'unités
## Category-itIT: Riquadri unità
## Category-koKR: 유닛 프레임
## Category-ptBR: Quadros de unidade
## Category-ruRU: Рамки юнитов
## Category-zhCN: 单位框体
## Category-zhTW: 單位框架

## X-Curse-Project-ID: 409666
## X-Wago-ID: qv63LLKb
## X-WoWI-ID: 26244

Locales\LoadLocales.xml

Libs\LoadLibs.xml
Libs\utf8.lua
Libs\CallbackHandler.lua
Libs\PixelPerfect.lua
Libs\FAIAP.lua
Libs\LibStub\LibStub.lua
Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua
Libs\LibSharedMedia-3.0\LibSharedMedia-3.0.lua
Libs\LibCustomGlow-1.0\LibCustomGlow-1.0.lua
Libs\AceComm-3.0\ChatThrottleLib.lua
Libs\AceComm-3.0\AceComm-3.0.lua
Libs\LibSerialize\LibSerialize.lua
Libs\LibDeflate\LibDeflate.lua
Libs\LibSpecData.lua
Libs\LibGroupInfo.lua
Libs\LibBadWords.lua
Libs\LibTranslit-1.0\LibTranslit-1.0.lua

Core.lua
Utils.lua
Utils_Auras.lua
Revise.lua
Comm\LoadComm.xml
Widgets\Fonts.xml
Widgets\LoadWidgets.xml
Defaults\LoadDefaults.xml

Expand All @@ -34,13 +65,18 @@ Indicators\Actions.lua
Indicators\Custom.lua
Indicators\Supporter.lua

RaidFrames\HealersAuraDisplay.lua
RaidFrames\CustomAuraDisplay.lua
RaidFrames\CombatAuraDisplay.lua
RaidFrames\MainFrame.lua

Modules\LoadModules.xml
Utilities\LoadUtilities.xml
RaidDebuffs\LoadRaidDebuffs.xml

RaidFrames\SecretAuraFingerprint.lua
RaidFrames\UnitButton.lua
RaidFrames\HandleBuff.lua
RaidFrames\UnitButton.xml
RaidFrames\Groups\SoloFrame.lua
RaidFrames\Groups\PartyFrame.lua
Expand All @@ -49,4 +85,4 @@ RaidFrames\Groups\PetFrame.lua
RaidFrames\Groups\NPCFrame.lua
RaidFrames\Groups\SpotlightFrame.lua

Supporters.lua
Supporters.lua
40 changes: 36 additions & 4 deletions Cell_Cata.toc
Original file line number Diff line number Diff line change
@@ -1,27 +1,58 @@
## Interface: 40402
## Title: Cell
## Version: r275-beta
## Author: enderneko
## Version: r277.9.7.8
## Author: enderneko, Krysio, NeRgY
## X-Flavor: Cata
## SavedVariables: CellDB, CellDBBackup
## LoadSavedVariablesFirst: 1
## SavedVariablesPerCharacter: CellCharacterDB
## AddonCompartmentFunc: Cell_OnAddonCompartmentClick
## IconTexture: Interface\AddOns\Cell\Media\icon.tga
## Notes: Beautiful and customizable raid/party frames
## Notes-deDE: Schone und anpassbare Raid-/Gruppenfenster
## Category-enUS: Unit Frames
## Category-deDE: Einheitenfenster
## Category-esES: Marcos de unidades
## Category-esMX: Marcos de unidades
## Category-frFR: Portraits d'unités
## Category-itIT: Riquadri unità
## Category-koKR: 유닛 프레임
## Category-ptBR: Quadros de unidade
## Category-ruRU: Рамки юнитов
## Category-zhCN: 单位框体
## Category-zhTW: 單位框架

## X-Curse-Project-ID: 409666
## X-Wago-ID: qv63LLKb
## X-WoWI-ID: 26244

Locales\LoadLocales.xml

Libs\LoadLibs_Classic.xml
Libs\utf8.lua
Libs\CallbackHandler.lua
Libs\PixelPerfect.lua
Libs\FAIAP.lua
Libs\LibStub\LibStub.lua
Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua
Libs\LibSharedMedia-3.0\LibSharedMedia-3.0.lua
Libs\LibCustomGlow-1.0\LibCustomGlow-1.0.lua
Libs\AceComm-3.0\ChatThrottleLib.lua
Libs\AceComm-3.0\AceComm-3.0.lua
Libs\LibSerialize\LibSerialize.lua
Libs\LibDeflate\LibDeflate.lua
Libs\LibBadWords.lua
Libs\LibTranslit-1.0\LibTranslit-1.0.lua

Core_Cata.lua
Utils.lua
Utils_Auras.lua
Revise.lua
Comm\LoadComm.xml
Widgets\Fonts.xml
Widgets\LoadWidgets_Classic.xml
Defaults\LoadDefaults_Cata.xml

HideBlizzard.lua
HideBlizzard_Classic.lua

Indicators\Base.lua
Indicators\Built-in.lua
Expand All @@ -41,6 +72,7 @@ Utilities\LoadUtilities_Classic.xml
RaidDebuffs\LoadRaidDebuffs_Cata.xml

RaidFrames\UnitButton_Cata_Wrath.lua
RaidFrames\HandleBuff.lua
RaidFrames\UnitButton.xml
RaidFrames\Groups\SoloFrame.lua
RaidFrames\Groups\PartyFrame.lua
Expand Down
Loading