Epic Damage Meter

A lightweight, non-bloated World of Warcraft damage meter designed for accurate real-time tracking and minimal to non existent performance impact.

File Details

EpicDamageMeter v.2.3.5

  • R
  • Apr 13, 2026
  • 247.56 KB
  • 190
  • 12.0.5+8
  • Classic + 4

File Name

EpicDamageMeter.zip

Supported Versions

  • 12.0.5
  • 12.0.1
  • 5.5.3
  • 4.4.2
  • 3.80.1
  • 3.80.0
  • 3.4.5
  • 2.5.5
  • 1.15.8

EpicDamageMeter - Changelog
============================

Version 2.3
-------------
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)
- Fixed class icons and spec icons not showing on bars: Replaced fragile string-path icon
  lookup ("Interface\Icons\ClassIcon_WARRIOR") with fileDataID-based lookup table for all 13
  classes + enemy/pet/unknown types. Fixes invisible icons when class is nil or "UNKNOWN",
  and prevents nil==nil dirty-check bypass that skipped icon rendering on fresh bars.
- Fixed segments not separating between fights: Classic had no auto-segment logic at all,
  and Retail used a hardcoded 10-second threshold. Now both clients use the configurable
  "Segment Gap" setting (default 3s). Killing the same NPC type with a few seconds gap
  between each kill now correctly creates separate segments.
  (Thanks to Undercover for the report)
- Fixed "Combat Behavior" dropdown changes not applying until next combat event:
  Selecting "Hide in Combat" or other modes now takes effect immediately.
  (Thanks to Undercover for the 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