File Details
EpicDamageMeter v.2.3.9f
- R
- Apr 25, 2026
- 321.99 KB
- 814
- 12.0.5+13
- Classic TBC + 4
File Name
EpicDamageMeter.zip
Supported Versions
- 12.0.5
- 12.0.1
- 5.5.4
- 5.5.3
- 4.4.2
- 4.4.1
- 3.80.1
- 3.80.0
- 3.4.5
- 3.4.4
- 2.5.5
- 2.5.4
- 1.15.8
- 1.15.7
EpicDamageMeter - Changelog
============================
Version 2.3.9
-------------
New Features
- Mode Picker rebuilt as a 3-column Details-style grid (modeled on
Details\frames\window_main.lua mode menu): right-click the mode button to
open a Damage / Healing / Other column layout with Blizzard spell icons per
entry, violet → blue hover gradient, and a left stripe + brightened label
to mark the active mode. Two new modes are wired up:
* Avoidable Damage — heuristic detection in Parser_Classic.lua
(ENVIRONMENTAL_DAMAGE or any source outside the group counts as
avoidable) so floor damage / boss mechanics show up without curating
a per-spell list.
* Potions — SPELL_CAST_SUCCESS dispatches into ProcessPotion which keys
a curated POTION_SPELLS table covering TWW (431416/431473/431932/
431930), DF, SL, BFA, Legion/WoD, MoP, Cata, Wrath, TBC and Vanilla.
Database.lua's CreateActorData stores avoidableDamageTaken,
enemyDamageTaken, potionsUsed and a per-spell potionList so the new modes
sort correctly via GetSortedActors. Constants.lua adds DISPLAY_MODE
entries 19/20 plus order entries for both Retail and Classic, and Retail
now also lists Overhealing in the menu order. CalculateTotals dispatches
the new modes alongside the existing ones.
- Language Selector — a new "Language" tab on the right of the Settings
sidebar lets you pick the addon language independently of the WoW client
locale. Locale files no longer gate themselves on GetLocale(); each one
registers into a shared EpicDamageMeter_LocaleData[code] registry, and a
new Locales/_Apply.lua (loaded last in every TOC) builds the active
EpicDamageMeter_Locale by merging the chosen overlay onto the English
base. Choices are Auto / English / Deutsch / Español / Italiano /
Русский / 繁體中文; "Auto" follows GetLocale(). Switching live calls
EpicDamageMeter_ApplyLocale to refresh the table in place; a /reload
button is provided for full UI re-translation. Comprehensive L("…")
wrapping across MainFrame, ArenaSummary, DeathRecap, DetailWindow,
Tooltip, Graph, WindowGroup, Core slash output, and the entire Config
panel (tab labels, every section header, every row label via the row
helpers themselves, every dropdown option). German overlay covers
~270 strings each across all six locales (enUS, deDE, esES, itIT, ruRU,
zhTW) — Profiles tab fully covered (Switch/Create/Copy/Delete sections,
static popups). Any not-yet-translated key still falls back through
key-as-value to English. Setter on the Language dropdown rebuilds
sidebar labels and re-runs the active tab's BuildXTab so the change is
visible immediately without /reload.
- Sound cues — new Core/Sounds.lua module fires on combat start, combat
end, a new personal-best player DPS, and on /edm reset. Three-tier
source resolution: LibSharedMedia entry (if profile.sounds.lsm[event]
is set) → custom OGG in Sounds\<file>.ogg if present → Blizzard built-
in FileDataID (defaults: UI_Bnet_Toast 567432, PVPFlagTaken 569883,
RaidWarning 8959, MapPing 8454). PlaySoundFile returns willPlay=false
silently when a custom file is missing, so the fallback FileDataID
always plays without any user-supplied audio. Personal-record check
walks the segment's actor list at combat-end +1s, finds the player
by UnitName, computes damage/duration, and only plays the cue when
the new DPS strictly beats db.profile.records.bestDPS (skips the
very first combat). Master toggle + per-event toggles + four ▶
preview buttons added under Settings → Sounds.
- Window Groups (modeled on Details' snap system in
Details\frames\window_main.lua): drag any two windows so their edges
come within 14 px of each other and they snap into a group — from
that moment they move together. Groups form a transitive closure, so
three or more windows can be chained horizontally, vertically, or in
L-shapes. A chain-link pill button appears top-right on every window
that belongs to a multi-member group; click it to detach just that
window, Shift-Click to dissolve the entire group. Snap relationships
survive reload — the snap set is persisted in SavedVariables alongside
position/size and cleanup runs automatically when a window is destroyed.
- Death Recap overlay (modeled on Details\frames\window_deathrecap.lua):
a styled panel that replaces Blizzard's stock death recap when it opens.
Hooks DeathRecap_LoadUI so DeathRecapFrame_OpenRecap is intercepted,
hides Blizzard's Recap1-5 lines, then reads DeathRecap_GetEvents(recapID)
and renders up to five gradient-pill rows with spell icon, time delta,
spell name, damage (crit = gold, normal = red), source class color, and
HP% at time of hit. Matches the Settings redesign palette (ACCENT blue
+ ACCENT_HOT violet). /edm dr to preview.
- Arena Summary window (modeled on Details\frames\window_arenasummary.lua):
on PVP_MATCH_COMPLETE inside an arena, after a 0.5s settle, freezes a
snapshot of the current segment and renders a two-column scoreboard —
your team (blue stripe) vs enemy team (red stripe), sorted by damage,
each row showing damage + DPS, healing + HPS, and a compact misc strip
for deaths / interrupts / dispels. Footer totals team damage and team
healing. Outcome badge reads VICTORY / DEFEAT / DRAW from
C_PvP.GetActiveMatchWinner vs GetBattlefieldArenaFaction. Classification
is GUID-based: group members = friendly, arena1-5 = enemy. Lighter than
Details' 1285-line implementation (no long-term archive, no compressed
save), but covers the core use case. /edm arena to preview.
- Threat display mode (modeled on Details! Tiny Threat): right-click the mode button
and pick Threat under Utility. Resolves a reference mob (boss1-5, target, focus,
mouseover, or targettarget) and polls UnitDetailedThreatSituation for every group
member on UNIT_THREAT_LIST_UPDATE and PLAYER_TARGET_CHANGED. Percent column shows
the scaled threat% (100 = aggro threshold); bars are color-coded by threat status:
red = tanking, orange = about to pull, yellow = getting close, class color = safe.
Creates actor entries on the fly so non-damaging group members still appear.
Bug Fixes
- Hardened Threat module against Retail 12.0 SecretValue boolean taint: every WoW API
return that could be a SecretValue (UnitExists, UnitIsDeadOrGhost, UnitCanAttack,
UnitDetailedThreatSituation's isTanking) is now either pcall-guarded or coerced
through tostring before any boolean test. Queries the 5 return values of
UnitDetailedThreatSituation inside a pcall closure so isTanking is dropped at the
pcall boundary and can never reach a Lua boolean expression. Also forces
actor.threatIsTank to a strict true/false Lua boolean. Fixes the
"attempt to perform boolean test on local 'isTanking' (a secret boolean value
tainted by 'EpicDamageMeter')" error spam on new-patch raid/instance content
(e.g., Windrunner Spire, Seat of the Triumvirate). (Thanks to ursiDEE and
MrPapaBear for reporting)
- Fixed detail window showing "No damage data" when clicking an enemy arena
player or battleground opponent. Two fixes, based on how Details handles
the same case:
(1) Removed the blanket SecretValue-GUID rejection in CallSpellAPI.
Details\boot.lua:328 (Details222.B.GetSpells) and
Details\core\parser_nocleu1.lua:552 (getSpells) both pass the raw
sourceGUID from C_DamageMeter.combatSources directly to
GetCombatSessionSourceFromType / GetCombatSessionSourceFromID — no
SecretValue filtering. We now do the same (still wrapped in pcall
for safety), so arena/BG opponents whose GUIDs arrive as
SecretValues reach the API and return their spell breakdown.
(2) MainFrame's plain-GUID map now also covers arena1-5 + their pets
and walks C_NamePlate.GetNamePlates to pick up battleground
opponents via nameplate unit tokens — UnitGUID on those returns
plain strings, giving us a guaranteed-plain fallback if the
session-source GUID path ever stumbles.
(Thanks to tidgey for reporting)
- Fixed overkill damage being counted in damage done/DPS totals. Effective damage is now
tracked (amount - overkill), matching how Details and other meters handle it.
(Thanks to Undercover for reporting)
- Fixed PvP combat data being wiped when leaving arena or battleground. Zone change auto-reset
now only triggers when entering a new dungeon or raid, not when returning to the open world.
(Thanks to user_myc0mwa16b49mnts for reporting)
- Fixed meter disappearing after PvP combat ends due to aggressive zone-change reset logic.
- Fixed Threat module crashing on Retail 12.0 with "attempt to perform boolean test on
a secret boolean value". Rewrote the module to use the same patterns as Details! does
in unitframe.lua and plugins_statusbar.lua: `local _, status, ...` discards isTanking
at the call site, and tank state is read from UnitGroupRolesAssigned instead of the
SecretValue return. No pcall wrapper needed — Details has shipped this pattern for
years without taint issues. (Thanks to ursiDEE for reporting)
UI Redesign
- Settings panel got a full visual overhaul (not just a polish pass):
- New "glass indigo" palette: vivid sky-blue accent plus a violet secondary used
for gradients and highlights, deeper panel body, tighter contrast ladder between
sidebar, content, section cards, and rows.
- Panel resized to 860x640 (from 820x620); sidebar widened to 180px so longer
category labels (and future ones) breathe.
- Title bar is now a premium header (54px): deep vertical gradient base with a
horizontal violet→blue accent wash layered on top, a two-segment rainbow top
line (violet → blue → cyan), bottom separator tinted with the accent gradient,
and a soft drop shadow for clear separation from the body.
- New emblem logo: 26x26 rounded square with a violet→blue vertical gradient,
inner sheen on the top half, soft horizontal halo behind it, and a white "E"
glyph with outline + shadow. Paired with a larger 16pt wordmark (cyan-teal
"Epic" / gold "Damage" / soft-red "Meter") and a breadcrumb-style subtitle
("/ Settings" in dim text).
- Setup Wizard button is a gradient pill: violet→blue fill, top sheen, white
icon + outlined bold label, decorative sparkle dots on the right, and an
outer halo glow that fades in on hover (plus a brighter gradient + sheen
shift). The border brightens from 28% to 55% white on hover.
- Section headers became card-style: flat dark card with 1px inner border, chunky
accent→violet vertical pill on the left, soft glow around the pill, larger 13pt
outline title, right-aligned + / − collapse chevron (instead of v / >).
- Rows redesigned from the ground up: no more alternating background stripes,
no per-row left accent edge — just flat rows with a 1px hairline divider at the
bottom and an accent-tinted hover fill. Rows are taller (32px toggle/color,
34px dropdown, 48px slider) with more breathing room.
- Sliders got a custom track: thin 4px dark pill with an accent-to-violet
horizontal-gradient fill that grows from the left as you drag. Default WoW
slider track graphics are hidden, keeping only the handle.
- Dropdowns are now pill-shaped, with an accent left-stripe inside the button
that brightens on hover, plus an accent-colored chevron.
- Every interactive element now uses the same "gradient pill + halo" language
as the Setup Wizard button, giving the panel a coherent premium look:
- Sidebar nav active tab: violet→blue horizontal gradient fill, top sheen
band, outer halo glow bleeding out of the button, left accent pill in
violet→blue vertical gradient, outlined bold label with shadow.
- Reset Data / Reload UI buttons: gradient pill style with per-button
brand colors (red for Reset, green for Reload), halo that fades in on
hover, top sheen, outlined 12pt label. Slightly taller (34px).
- Toggle switches: gradient fill (violet→blue) + outer halo when ON,
flat neutral when OFF. Knob is pure white on, dim gray off.
- Dropdowns: gradient fill + top sheen + hover halo + violet→blue left
accent stripe that brightens on hover. Border switches from neutral to
accent-blue on hover. The opened menu has an accent gradient top line
and an accent-tinted border.
- Sidebar has a subtle vertical violet wash layered on top of its dark base,
and its right divider is now a vertical accent gradient line.
- Content area has its own subtle violet top-down wash for depth.
- Toggle switches are slightly larger (40x18).
- Setup Wizard now speaks the exact same premium visual language as the main
settings panel:
- Frame border picks up an accent-tinted color instead of the old grey edge.
- Title bar rebuilt to match settings (54px): vertical gradient base + violet
→blue horizontal wash, top sheen band, two-segment rainbow top line
(violet → blue → cyan), accent-gradient bottom separator. Hosts the same
26x26 emblem logo with "E" glyph + halo, 15pt wordmark, breadcrumb "/",
and subtitle reading "Setup Wizard / step name".
- Skip button is a proper pill now: dark gradient fill, top sheen, 1px
border, outlined SKIP label — hovers into a warm red border + halo glow
+ brighter fill instead of the old text-with-underline look.
- Progress bar sized up to 30px with a violet wash, accent-gradient
bottom divider, 8px step dots, and a violet→blue horizontal gradient
track that fills from the first to the last completed step. Active step
now uses a pure white 10x10 dot with white outlined label; completed
steps shift to the accent color; upcoming stays dim.
- Bottom nav bar redesigned (56px): violet wash + accent-gradient top
divider. Back / Next are full gradient pill buttons with halo, fill,
sheen, and outlined label — primary (Next) in violet→blue, secondary
(Back) in dark with an accent hover border + subtle halo.
- Section headers use the same violet→blue vertical pill (3x12) +
outlined 11pt title + accent gradient underline as the main panel.
- Selection cards (theme / layout picker) are now gradient pill cards
with a halo glow and a left violet→blue stripe when selected, a pure
white checkmark, and an accent-border hover state when unselected.
- Wizard content area is now scrollable (mouse wheel). Fixes the Behavior
step rendering its last toggles underneath the Back / Next buttons on
smaller wizard heights. Scroll position resets to top on step change.
- Wizard toggle rows match the main toggle rows: flat row with hairline
divider, accent-tinted hover wash, and the premium 40x18 gradient
switch (violet→blue fill + halo when ON, white knob; neutral dark
when OFF, dim gray knob).
Code Quality
- Removed AI-generated comment patterns (section separators, marketing language, obvious
state-the-obvious comments) across all UI and Core files.
- Headers now describe file contents without adjectives or version markers.
Version 2.3.8
-------------
Bug Fixes (Community Reports)
- Fixed ALL dropdown menus not saving selections: CreateDropdownRow passed numeric array
index to setter instead of string value. Affected every dropdown in settings (Skin,
Combat Behavior, Font Face, Bar Texture, etc.). Arrays now preserve intended order.
(Thanks to Undercover for reporting the symptom on MoP Classic)
- Fixed "Combat Behavior" changes not applying immediately: Selecting a mode now calls
UpdateVisibility right away instead of waiting for next combat event.
- Fixed visibility features (Hide in Combat, Only in Group, Combat Alpha, etc.) completely
missing on MoP, TBC, and Classic Era: Added defaults, UpdateVisibility(), and per-instance
ShowWindow/HideWindow to all clients.
- Fixed segments not separating between fights on MoP/TBC/Classic Era: Added auto-segment
logic with configurable "Segment Gap" setting (default 3s). Retail threshold reduced from
hardcoded 10s to use the same setting.
- Fixed class/spec icons not showing on bars: Replaced string-path icon lookup with
fileDataID-based table for all 13 classes + special types. Fixes nil dirty-check bypass.
Version 2.3.6
-------------
New Features
- Setup Wizard: 7-step first-run experience (Welcome, Theme, Font, Display, Layout, Behavior, Done).
Appears automatically on first login. Features: step progress bar with labeled dots, skin cards
with mini-bar previews, font list with live Cyrillic preview, bar overlay/format/info toggles,
window size/scale/opacity sliders, visibility & combat behavior toggles, summary card on finish.
All changes apply live. Skip button cleanly placed in title bar.
- Per-skin unique bar effects: Each of the 23 themes now has its own distinct visual identity beyond
just colors. Each skin defines unique overlays, accent lines, inner glow, spark color/intensity,
animation easing, and hover behavior:
• Overlay types: topShine, bottomFade, innerGlow, duoTone, scanline, holographic, glossy, shadow
• Accent lines: per-skin colored top/bottom/left edge accents
• Inner glow: gradient glow strips from top/bottom edges (neon, cyberpunk, midnight, etc.)
• Spark: per-skin spark color and intensity at bar leading edge
• Animation: smooth (exponential), snappy (instant), elastic (bouncy overshoot) per skin
• Hover styles: glow, brighten, neonPulse, borderFlash, ember, frost, arcane, subtle
• Flash color: per-skin crit flash tint
- Per-skin bar layout system: Each theme defines a complete bar design beyond just effects:
• Icon shape: square (default), round (with minimap ring border), or hidden per skin
• Value position: right (standard), overlay (on bar fill), or stacked (vertical name+value)
• Rank style: number (#1, #2), colored dot (●), or hidden per skin
• Background style: gradient, solid, dark (dimmed), or none per skin
• Background direction: VERTICAL or HORIZONTAL gradient per skin
New Features
- Enemy Damage Taken display mode: Shows damage taken per enemy NPC/boss. Hover to see
which players dealt the most damage to that target. Useful for tracking add damage and
identifying who's slacking on priority targets. Available in mode dropdown under Damage.
- Hide in Combat visibility mode: Opposite of "Auto-Hide OOC" — hides the meter when
entering combat and shows it when leaving. Perfect for overlapping with a threat meter
so both share the same screen space with opposing visibility rules.
(Thanks to Undercover for the suggestion)
- Separate combat alpha: New "Combat Alpha" toggle with independent In-Combat and
Out-of-Combat opacity sliders (0-100%). Can be used instead of hide/show for a
smooth fade-based approach to combat visibility control.
Bug Fixes (Community Reports)
- Fixed pet damage not merging with owner on MoP, Classic, and TBC clients: Parser was
reading from wrong config path (profile.general.mergePets instead of profile.combat.mergePlayerPets).
Treants, Water Elementals, and all other pets now correctly merge with owner.
(Thanks to pawnzee for the detailed report)
Visual Improvements
- All per-skin effects boosted to be clearly visible (overlays, accents, glow strips, spark 2-3× stronger)
- Accent lines widened to 2px (top/bottom) and 3px (left) for clear visibility
- Inner glow strips now cover 60% of bar height (was 40%)
- More layout variety: Glass, Midnight, Ocean, Warcraft now use stacked text; Toxic uses overlay text
Bug Fixes
- Fixed name text disappearing on skins with hidden rank/icon (ElvUI, Minimal, Shadow, Toxic):
rankText had no anchor after ClearAllPoints when rankStyle="none", causing nameText to vanish.
Now nameText anchors directly to icon when rank is hidden.
- Fixed name text appearing right-aligned on some skins (missing SetJustifyH after ClearAllPoints)
- Removed "stacked" text layout (name+value vertical) — caused text overlap on bars under 28px
- Fixed critical bug: profile settings (theme, fonts, scale, opacity, title bar visibility, etc.)
were lost on every reload/login. The custom AceDB-3.0-EDM library's copyTable() unconditionally
overwrote saved profile values with hardcoded defaults from Constants.lua each time db.profile
was first accessed. Now only missing keys are filled in, preserving user changes across sessions.
(Thanks to Pentara [Mind] for the detailed bug report identifying Constants.lua as the culprit.)
- Fixed crash spam "attempt to compare local 'str' (a secret string value tainted)" in Parser_Classic.lua:96
(safeStr() now uses issecretvalue() to bail out before comparing tainted WoW 12.0 strings)
- Fixed Settings crash "attempt to call upvalue 'setValue' (a nil value)" — Minimap Icon toggle on Retail
was missing the tooltip nil arg, causing the getter to land in the tooltip slot and setValue to be nil
- Removed "Enable Addon" toggle from Settings (the addon is always enabled when loaded)
- Fixed /edm slash command not working on Retail (AceConsole-3.0-EDM lib name didn't match the
"AceConsole-3.0" mixin string in NewAddon, so RegisterChatCommand silently no-op'd; added
direct SlashCmdList fallback to match Classic)
- Fixed misleading login hint: "/edm for options" now correctly says "/edm config for settings"
(in all 5 locales — bare /edm shows the main window, /edm config opens Settings)
- Font dropdowns now only show fonts with full Cyrillic AND special character (äöüéèàñß) support —
player names with accents or Cyrillic letters no longer appear as missing-glyph boxes. Detection
uses width-ratio tests (Cyrillic "Ж" must be ≥ 1.5× wider than "I"; accented Latin chars must
differ from uniform notdef boxes). Currently-saved fonts that don't pass remain visible with a
"(missing glyphs)" hint so users can change them.
Settings Panel Redesign (visual only — no functional changes)
- Larger, more readable section headers with bottom divider line and breathing room between groups
- Section titles now use mixed case + larger 12pt outlined font (was 9pt uppercase)
- Sidebar nav: bigger tabs (42px), larger icons + labels, animated hover state, glow + accent strip on selected
- Title bar redesigned: 42px tall, gradient accent glow line, logo dot, separate subtitle
- Reset Data / Reload UI buttons larger and more polished (32px, gradient hover)
- Slightly wider panel (820x620) for better content density
- Row heights and label fonts bumped for readability (toggles 28px, sliders 42px, dropdowns 30px, colors 28px)
- Softer alternating row backgrounds — less visual noise
- Universal row hover highlight on every row (toggle/slider/dropdown/color/dual)
- Each row has a subtle blue left-edge accent that ties section content together visually
- Larger toggle switches (34x16) and color swatches (40x18)
- Color swatches now glow with accent border on hover
- Dropdown buttons highlight with accent border on hover
- Slider value labels now outlined for better visibility
- Wider dropdowns (180px) with more legible 10pt text
Version 2.2
-------------
Profile System
- Simplified profile UI (Details-style: dropdown switch, create, copy, delete — no collapsible sections)
- Profiles now save/restore window position, size, scale and display mode per instance
- Multiple windows fully supported: each window remembers its own layout per profile
- Fixed "Profile not found" error (dropdown passed array index instead of profile name)
- Reset Profile preserves window positions
Font System
- Font Face and Font Style changes now trigger a confirmation popup + UI reload (required for WoW to apply)
- Font validation: only fonts that actually render text are shown in the dropdown
- Runtime font discovery from Blizzard font objects (WoW 12.0+ compatible — no more hardcoded broken paths)
- Fonts apply correctly to all bars including new bars created during combat (cached font system)
- Removed broken font registrations (2002, Morpheus, Skurri paths that no longer exist in TWW)
Names & Display
- Fixed names not showing on bars (dirty-check was skipping name updates when values unchanged)
- Fixed realm names showing on bars ("Player-Realm" now correctly stripped to "Player")
- Fixed special characters in names breaking color formatting (switched from string.format %s to concatenation)
- NickTag nickname support (Details-compatible — shows nicknames set in Details, configurable toggle)
Pets
- Merge Pet Damage option now only available on Classic/TBC/Wrath/MoP (toggle ON/OFF)
- Retail always merges pet damage (Blizzard's C_DamageMeter API pre-merges pets — cannot be separated)
- Classic: pet damage correctly merged into owner or shown separately depending on setting
Graph
- Graph v3: Premium visual redesign with layered glow effects, live pulse dot, gradient fills, bottom info bar
- Graph now reads data directly from the tracker (same data source as bars — fixes Retail SecretValue issue)
- Graph data buffer uses batch trim instead of repeated table.remove (performance fix)
Data Persistence
- Fixed damage data disappearing after combat ends (C_DamageMeter sync no longer zeroes out segment when API returns empty)
- Damage bars now persist between fights, only reset when new combat begins
Stability & Internals
- Removed all debug print() statements from production code (converted to Utils.Debug)
- Profile errors now show popup dialogs instead of chat messages
- Profile success messages removed (silent operation)
- Database nil guards: safe instance info lookup, timeline nil check
- Database timeline buffer uses batch trim (same as Graph)
- DetailWindow C_DamageMeter API calls wrapped in pcall (prevents errors on expired sessions)
- Font test FontString reused instead of leaking a new one each time
- Event registration wrapped in SafeRegisterEvent with debug logging on failure
- WotLK Reforged support (new TOC file, Interface: 30800)
- TOC versions updated to 2.2 across all game versions
Version 2.1
-------------
- Fixed window width/height not applying on login (ApplySettings now called after UI initialize)
- All font SetFont calls protected with pcall fallback (prevents broken text on invalid font paths)
Version 2.0
-------------
- Unified addon: Single folder supports Retail (12.0.1), Classic (1.15.8), TBC Anniversary (2.5.5), MoP Classic (5.5.3)
- Multi-TOC architecture with runtime API detection
- Retail WoW 12.0 support: C_DamageMeter API integration with Secret Values handling
- Real-time combat data display on Retail (renders directly from C_DamageMeter during combat)
- Fixed font, font size, and font flag changes not applying to bars
- Fixed Show Percent toggle not working
- Fixed Show Rank toggle not working
- Fixed graph not displaying data on Retail (now queries C_DamageMeter for totals)
- Fixed window scale not applying on reload (value saved but not rendered — reported on TBCA)
- Scale now saved per-character and re-applied in ApplySettings
- Fixed Current/Overall tabs both showing overall data
- Fixed combat timer stuck at 0:01
- Fixed left-click toggle window not working
- Fixed combat duration not accumulating across multiple combat phases
- Show Fight Duration toggle now works in status bar
- Separated DPS from Damage Done display (DPS shows per-second + percent, Damage Done shows total + DPS)
- Separated HPS from Healing Done display (same distinction)
- Fixed sorting not updating during combat (insertion sort with per-comparison pcall for secret values)
- Detail window opens on bar click with spell breakdown
- Mouseover tooltips on bars showing DPS/HPS and top abilities
- Graph anchors to main window instead of UIParent
- Graph collects data during combat even when hidden
- Isolated Ace3 libraries (-EDM suffix) for all clients
- Updated Twitch link to twitch.tv/JugoBetrugoTV
- Removed interface version from config display
- Performance: Rewrote Retail combat rendering to use GetCombatSessionFromType (1 API call for all players)
- Performance: Eliminated per-player roster building and per-GUID API queries (40→1 calls in BGs)
- Performance: Uses amountPerSecond from API for DPS/HPS (no manual division needed)
- Performance: Uses session.maxAmount + SetMinMaxValues for secret-safe bar proportions
- Performance: Spec icons from API (specIconID, NeverSecret) instead of generic class icons
- Performance: isLocalPlayer (NeverSecret) for player highlight instead of UnitName comparison
- Performance: Dirty-check rendering (skip GPU calls when bar data unchanged)
- Performance: Cached settings per update cycle (avoid per-bar profile lookups)
- Performance: Insertion sort for secret values during combat (per-comparison pcall)
- Performance: Roster cache with 3s TTL (avoid rebuilding raid roster every tick)
- Performance: Minimum 0.5s refresh rate clamp (prevents excessive update frequency)
- Performance: LayoutBars skip when bar count/scroll/height unchanged
- Performance: Color/texture updates only on class or rank change
- Performance: Name text updates only on actor name change
- Performance: Icon texture updates only on class change
- Performance: C_Timer polyfill, bit-lib compatibility, tainted value detection
Version 1.1.0
-------------
- Added multi-client support (Retail, Classic Era, MoP Remix)
- Interface versions: 110207 (Retail), 11508 (Classic), 50503 (MoP)
- Fixed Damage Taken mode to correctly show damage received
- Fixed DPS display calculations
- Improved click handler for damage bars
- Enhanced graph smoothing with Catmull-Rom spline interpolation
- Performance optimizations:
- Localized globals across all modules for faster lookups
- Added UI update throttling (100ms) to reduce CPU usage
- Implemented table reuse to reduce garbage collection
- Pre-computed bit masks for flag checks
- Added class color caching
Version 1.0.0
-------------
- Initial release
- Real-time damage and healing tracking
- Beautiful graph visualization with animations
- Skin system support
- Detail window with spell breakdown
- Minimap button integration
- Combat segment tracking