Big Crits Don't Lie - v2.0.1
Major Release: Healing & Boss Tracking (Damage Only)
A WoW TBC Anniversary Classic addon that tracks and shares your biggest critical hits and heals with your guild, featuring raid boss leaderboards for progression tracking.
Features
Dual View System
- Global View: Personal/Guild leaderboards with class filters for damage and healing
- Raids View: Boss-specific damage leaderboards for Karazhan, Gruul's Lair, and Magtheridon's Lair (damage crits only)
Personal Leaderboard
- Tracks your top 10 critical hits AND heals per character (GUID-based)
- Separate tracking for damage and healing
- Stores damage/heal amount, spell name/icon, target, target level, location, and date
- Persistent across sessions via SavedVariables
- Victory sound plays on new personal best (toggleable)
- Shows top 3 crits on login
Guild Leaderboard
- Syncs best crits/heals across guild members automatically
- One entry per player per category (highest crit/heal only)
- Displays top 10 guild-wide crits and heals
- Class-specific tabs for each class leaderboard (damage and healing)
- Real-time updates when guildmates land new records
Raid Boss Tracking (Damage Only)
- Dedicated leaderboards for each raid boss encounter
- Tracks top 10 damage crits per boss (per player) - healing crits not tracked for bosses
- Three raids supported:
- Karazhan (11 bosses): Attumen, Moroes, Maiden, Opera Event, Curator, Terestian Illhoof, Shade of Aran, Netherspite, Chess Event, Prince Malchezaar, Nightbane
- Gruul's Lair (2 bosses): High King Maulgar, Gruul the Dragonkiller
- Magtheridon's Lair (1 boss): Magtheridon
- Automatic NPC detection via combat log GUID parsing
- Boss order follows standard raid progression
Automatic Sync System
- Broadcasts your #1 personal best to guild on login (5s delay)
- Requests sync from guildmates on login (8s delay via REQ_SYNC)
- Auto-responds to sync requests from others (60s throttle per sender)
- Only broadcasts NEW personal bests (not every crit)
- Smart throttling prevents message spam
- Separate sync for damage and healing
User Interface
- Three-level tab system:
- View Mode: Global / Raids
- Main Tabs: Damage/Healing (Global) or Raid Selection (Raids)
- Sub Tabs: Personal/Guild/Classes (Global) or Boss Selection (Raids)
- Boss buttons: Two-row layout (max 8 per row) with auto-selection
- Raid buttons: Auto-sizing based on text length
- Minimap button: Draggable icon to open/close leaderboard
- ESC/Game Menu: Press your game menu keybind to close the window
- 7 columns: Rank (#), Player, Class Icon, Amount, Spell (icon + name), Target, Date
- Item quality color-coding for ranks 1-10 (Legendary → Gray)
- Class icons for visual identification
- Realm names hidden in display (shown as "Name" not "Name-Realm")
Slash Commands
/crit - Toggle leaderboard window
/crit top - Print top 10 to chat (personal + global)
/crit reset - Clear this character + global
/crit reset all - Clear ALL characters + global
/crit sync - Manually broadcast your best (throttled)
/crit sound on|off - Toggle victory sound
/crit debug - Show sync status and settings
/crit debug on|off - Toggle debug messages
Technical Details
Compatibility
- Interface Version: 20505 (TBC Anniversary Classic)
- Dual API Support: Works with both modern (C_ChatInfo) and classic (SendAddonMessage) APIs
- Backdrop System: Auto-detects BackdropTemplate availability
- SavedVariables: BCDLDB (per-character + global data + raid boss data)
Combat Log Detection
Tracks critical hits from:
- SWING_DAMAGE - Melee auto-attacks
- RANGE_DAMAGE - Ranged attacks (Hunter shots, wands, thrown)
- SPELL_DAMAGE - Direct spell damage
- SPELL_HEAL - Direct heals
Boss Detection
- Extracts NPC ID from combat log GUID (Creature/Vehicle unitType)
- Reverse lookup table maps NPC IDs to raid/boss names
- Supports multiple NPC IDs per boss (for adds/phases)
- Stores boss crits separately from global crits
Sync Protocol
Message Format: ver|type|player|playerClass|amount|spell|spellIcon|target|targetLevel|zone|date
Message Types:
REQ_SYNC- Request sync from guild (sent on login)REC- New record broadcast (sent when new #1 personal best)REC_HEAL- New heal record broadcastSYNC- Response to REQ_SYNC (sends best damage crit)SYNC_HEAL- Response to REQ_SYNC (sends best heal crit)
Channel Priority:
- GUILD (preferred)
- INSTANCE_CHAT (battlegrounds/dungeons)
- RAID
- PARTY
Data Structure
BCDLDB = {
perChar = {
["Player-GUID"] = {
entries = {
{ amount, spell, spellIcon, target, targetLevel, time, zone, player, playerClass }
},
healEntries = {
{ amount, spell, spellIcon, target, targetLevel, time, zone, player, playerClass }
}
}
},
globalEntries = {
{ amount, spell, spellIcon, target, targetLevel, time, zone, player, playerClass }
},
globalHealEntries = {
{ amount, spell, spellIcon, target, targetLevel, time, zone, player, playerClass }
},
raidBosses = {
["Karazhan"] = {
["Attumen the Huntsman"] = {
{ amount, spell, spellIcon, target, targetLevel, time, zone, player, playerClass }
}
}
},
settings = {
sound = true
}
}
Major Changes from v1.0
v2.0 - Raid Boss Tracking & UI Overhaul
- NEW: Raid boss leaderboards for Karazhan (11), Gruul's Lair (2), Magtheridon's Lair (1)
- NEW: Healing crit tracking with separate personal/guild leaderboards
- NEW: Minimap button
- NEW: Two-row boss button layout (max 8 per row)
- NEW: Auto-sizing raid name buttons
- NEW: Custom boss order following raid progression
- CHANGED: Removed shift-click report/share functionality
v1.2.1 - Sync System Overhaul
- v1.0: Broadcasted every top-10 crit → Spam issues
- Current: Only broadcasts new #1 personal bests → 90% less spam
Guild Leaderboard Logic
- v1.0: Could show multiple entries per player
- Current: ONE entry per player (highest crit wins)
Channel Management
- v1.0: Could send to INSTANCE_CHAT in battlegrounds
- Current: Always prioritizes GUILD channel first
Player Name Normalization
- v1.0: Inconsistent name formats caused duplicate entries
- Current: All names normalized to "Name-Realm" format for matching
Login Sync Request System
- v1.0: Only broadcasted your data passively
- Current: Actively requests data from guildmates via REQ_SYNC protocol
UI Improvements
- v1.0: Showed "All" tab with realm names, Location column, 340px height
- v1.2.1:
- Renamed "All" → "Guild"
- Realm names hidden (display only character name)
- Removed Location column (redistributed space to Target +80px, Date +26px)
- Reduced height to 295px (removed excess whitespace)
- v2.0:
- Three-level tab hierarchy (View Mode → Main → Sub)
- Global/Raids view mode tabs
- Two-row boss button layout
- Minimap button integration
- Interactive title button with sound
- Fixed 1080x410 window size
- Precise pixel spacing (title: -8, view tabs: -44, main: -72, sub: -100, headers: -162, data: -182)
Data Isolation
- v1.0: Account-wide BCDLDB.entries (all characters shared data)
- Current: GUID-based per-character storage (BCDLDB.perChar)
Debug Tools
- v1.0: No debug capabilities
- Current:
/crit debug- Shows API availability, guild status, sync channel, counts/crit debug on/off- Toggle sync message visibility- Warnings about shared folder SavedVariables issues
Throttling System
- v1.0: Basic 10s cooldown on sync
- Current:
- 10s global sync cooldown
- 5 minute REQ_SYNC cooldown (per session)
- 60s per-sender response throttle
- Random 0-2s delay on responses to avoid collision
Target Level Detection
- v1.0: No level detection
- Current: Scans 40+ unit tokens (target, focus, mouseover, nameplates) to find target level
Class Icons
- v1.0: Text-only class display
- Current: CLASS_ICON_TCOORDS-based circular class icons in dedicated column
Boss Detection & NPC Tracking
- v2.0: NPC ID extraction from combat log GUIDs
- v2.0: Reverse lookup table for boss identification
- v2.0: Separate storage per raid/boss encounter
- v2.0: Automatic dual-tracking (global + boss-specific)
Healing Tracking
- v2.0: Separate healing crit leaderboards
- v2.0: SPELL_HEAL and SPELL_PERIODIC_HEAL detection
- v2.0: Dedicated sync messages (REC_HEAL, SYNC_HEAL)
- v2.0: Healing tab in Global view with Personal/Guild/Class filters
Minimap Integration
- v2.0: Draggable minimap button with bcdl_small.png icon
- v2.0: Click to toggle leaderboard (replaces /crit command primary usage)
- v2.0: Tooltip with instructions
- v2.0: Removed shift-click report functionality
Known Limitations
Shared WoW Folders
When two accounts share the same WoW installation:
- Issue: Last logout overwrites SavedVariables
- Impact: Personal bests may be lost when alternating accounts
- Workaround:
- Use separate WoW installations for each account, OR
- Rely on guild sync (REQ_SYNC) to recover data on login
API Compatibility
- RegisterAddonMessagePrefix() not required in TBC Classic (gracefully skipped)
- SetBackdrop() may not exist (uses texture fallback)
Installation
- Extract to
Interface/AddOns/BigCritsDontLie/ - Ensure folder structure:
BigCritsDontLie/
├── BigCritsDontLie.lua
├── BigCritsDontLie.toc
├── README.md
└── Media/
├── bcdl_small.png (minimap icon)
└── Sound/
├── Victory.ogg
└── biem.ogg
- Restart WoW or
/reload - Join a guild for leaderboard syncing
- Look for minimap button to open leaderboard
Credits
Built for the WoW TBC Anniversary Classic community. Inspired by classic damage meter addons but focused purely on recording epic moments.
Version History
- v1.0 - Initial release with basic tracking
- v1.1 - Added guild sync and multi-character support
- v1.2 - Sync optimization, UI improvements, REQ_SYNC protocol
- v1.2.1 - Fixed SavedVariables mismatch (TOC declared BigCritsDontLieDB but code used BCDLDB) - data now persists correctly across /reload
- v2.0 - Raid boss tracking, healing crits, minimap button, three-level tab system, UI overhaul
- v2.0.1 - Added ESC/game menu keybind support to close window (current)
Changelog (v2.0.1)
Added
- ESC Key Support: Window now closes when pressing game menu keybind (UISpecialFrames integration)
Changelog (v2.0)
Added
- Raid Boss Tracking: Dedicated damage leaderboards for 14 bosses across 3 raids (Karazhan, Gruul's Lair, Magtheridon's Lair) - damage crits only
- Healing Crits: Full tracking and guild sync for critical heals (SPELL_HEAL, SPELL_PERIODIC_HEAL)
- Minimap Button: Draggable icon to open/close leaderboard (bcdl_small.png)
- Three-Level Tab System: View Mode (Global/Raids) → Main Tabs → Sub Tabs
- Interactive Title Button: Plays biem.ogg sound when clicked
- Boss Button Layout: Two rows, max 8 buttons per row with automatic positioning
- Auto-Sizing Raid Buttons: Text length-based width calculation
- Custom Boss Order: Follows raid progression (Attumen → Nightbane, etc.)
- NPC Detection: GUID parsing to identify boss encounters automatically
- Dual-Tracking: Damage crits stored in both global AND boss-specific leaderboards
Changed
- Window Size: 1080x295 → 1080x410 (optimized for multiple button rows)
- Layout System: Dynamic → Fixed positioning with precise pixel spacing
- Tab Anchoring: All tabs now anchored to BCDLBoard (not title)
- Boss Data: NPC_TO_BOSS reverse lookup for fast identification
- Sync Messages: Added REC_HEAL, SYNC_HEAL message types
Removed
- Shift-Click Report: Removed share functionality (replaced by minimap button focus)
- Dynamic Window Sizing: Fixed height prevents UI overlap issues
Fixed
- Boss Button Overflow: Two-row layout prevents 11-boss raids from UI overflow
- Tab Positioning: Headers/data no longer overlap with boss buttons
- Spacing Issues: Proper gaps between all UI elements (title, tabs, headers, data)
Technical
- New Data Tables: BCDLDB.raidBosses, BCDLDB.globalHealEntries, BCDLDB.perChar[x].healEntries
- New Functions: maybeStoreHeal(), maybeStoreBossCrit(), getNPCIdFromGUID(), getBossListForRaid()
- BOSS_DATA: 14 bosses with NPC IDs (supports multi-NPC bosses for adds/phases)
- BOSS_ORDER: Custom order arrays per raid for proper progression display

