BetterTargetHud

(BTH) is a high-fidelity, lightweight Target HUD designed to provide critical combat information directly on the player's target frame.

File Details

BetterTargetHud.zip

  • R
  • Apr 4, 2026
  • 6.11 MB
  • 26
  • 12.0.5+2
  • Retail

File Name

BetterTargetHud.zip

Supported Versions

  • 12.0.5
  • 12.0.1
  • 12.0.0

BetterTargetHud Change Log

v20.78 River of souls no longer stubbornly stays on.

(v20.75 – v20.91) – The Zero-Taint Debuff Tracker Update
New Features: 12.0 API Debuff Engine

Opaque Payload Router: Completely rebuilt the debuff tracking engine (Debuff.lua) to comply with the 12.0 "Midnight" API. Replaced legacy Lua-based name/ID filtering with a secure routing system that funnels raw visual data directly into native Blizzard C++ frames, entirely bypassing "Secret Value" lockdown crashes.

Sequential Slot Logic: Introduced a dynamic 8-slot tracking canvas. During combat, the engine automatically catches player-cast harmful auras and populates the user-enabled slots sequentially from left to right.

Native C-Side Timers: Stripped out custom Lua text timers (which triggered taint errors when mathematically checking remaining duration). The tracker now hands the opaque durationObject directly to Blizzard's CooldownFrameTemplate for frame-perfect, secure countdown numbers and radial swipes.

Live Configuration Previews: The options menu now intelligently bypasses the combat scanner when open out-of-combat. It projects generic placeholder icons (with dummy stacks and timers) into active slots, allowing for pixel-perfect X/Y alignment, scaling, and font adjustments without needing an active target.

Crisp 1-Pixel Borders: Added a toggleable, 1-pixel solid border to debuff icons to prevent muddy blending with the game world. Includes a custom color picker and dynamic fallback injection for the "Souls" profile.

Critical Fixes & Polish

Absolute Cleanup Protocol: Fixed a visual artifact issue where hidden widgets retained background texture and text data. The engine now triggers a complete data purge (wiping textures, text, and cooldown objects) when dropping a target or closing the options menu.

Real-Time Menu Responsiveness: Bound the master "Enable Tracking Slot" toggle directly to the live update function, allowing debuff slots to snap on and off instantly during configuration.

Options Menu Pruning: Removed deprecated Spell ID/Name input boxes, instructional text, and string validators that no longer reflect the automated 12.0 opaque routing methodology.

20.74 Added "Disabled" to zonetype automation.

20.68 Fixed Minimap Icon Tooltip and Left Click to unlock.

(Revisions 20.55 – 20.67) – Profile System & Class Power Fixes
New Features: Profile System

Profile Management Tab: Added a dedicated "Profiles" tab in the Interface Options. This allows users to create, copy, delete, and reset profiles (e.g., specific layouts for "Tanking" vs "Healing") using standard AceDB functionality.

Per-Character Defaults: The addon now defaults to character-specific profiles (true flag in AceDB:New), ensuring that layout changes on one character do not accidentally overwrite another unless explicitly copied.

Critical Fixes (Class Power Engine)

Restored Stagger Bar (Monk): Fixed a critical bug where oUF was intercepting and discarding Stagger events. Events are now registered directly on the CustomClassPower widget, completely bypassing oUF's filter.

Restored Devourer Engine (Demon Hunter): Re-implemented the specific "River & Ghost" geometry for Spec 3 (Devourer). The bar now correctly visualizes Soul Fragments and the Void Metamorphosis transformation.

Event Architecture Overhaul: All Class Power events (UNIT_AURA, UNIT_POWER_UPDATE, etc.) are now handled by a dedicated script on the widget itself. This prevents "nil" errors and ensures updates fire reliably for complex specs like Arcane Mages and Evokers.

Warrior Scrub: Removed the experimental "Whirlwind Stack" tracker after in-game testing confirmed the API reports 0 stacks during combat.

Core & Systems

Visibility "Gatekeeper" Fix: Added explicit Show() calls in Modules.lua and Core.lua. This prevents the Class Power container from getting stuck in a hidden state after a profile switch or UI reload.

Live Config Updates: Fixed the "Point Size" slider in Options. It now uses a fallback update call, so you see the points resize immediately as you drag the slider.

Chat Spam Removed: Silenced the debug message that printed the profile name to Chat Frame 1 every time a setting was changed.

Options & Defaults

Visual Tweaks: Changed the default Point Size to 15 (was 14) and Spacing to 1 (was 2) to better match the new high-fidelity rendering.

12.0 API Compliance: All new code strictly adheres to the Midnight API standards (e.g., C_UnitAuras, GetSafeStacks), ensuring "Zero Taint" performance.

(v20.0 - v20.21) – The 12.0 API & Private Aura Stability
Critical Fix (Secret Values): Resolved a hard crash in the 12.0 environment caused by scanning player auras.

Issue: The WoW 12.0 client flags certain auras as "Private/Secret". Attempting to compare their spellId or name in a Lua loop triggers a security violation (attempt to compare field 'spellId' (a secret value)).

Solution: Implemented GetSafeStacks() which uses direct ID lookup exclusively, bypassing unsafe iteration loops entirely.

Combat Stability Protocol: Addressed the issue where Soul Fragments (1245577) are classified as a Private Aura during combat.

Behavior: The API returns nil or [SECRET] for these fragments in combat to prevent automation.

Fallback: The addon now detects this restricted state and gracefully defaults the "Ghost Bar" to 0 stacks in combat (hiding it), rather than crashing the UI. The feature remains fully active out-of-combat for preparation.

Rendering Engine Hardening:

Zero Taint: Removed all :Show() and :Hide() calls from the UpdateClassPower runtime loop. Visibility is now controlled strictly via SetAlpha(0/1) to prevent "Action Blocked" errors on Protected Frames.

Unconditional Geometry: The "Ghost Bar" no longer uses conditional logic to draw. It always calculates geometry; if the width is 0, it is invisible. This removes logic branching that could stall the renderer.

(v17.0 - v19.5) – The "River & Ghost" Engine (Demon Hunter)

Feature (Void Metamorphosis): Implemented a "River" style reveal animation for Demon Hunters (Spec 3).

Logic: Unlike standard combo points, this bar acts as a continuous resource meter that fills smoothly from 0 to 50 based on Void Metamorphosis stacks.

Feature (The "Ghost Bar"): Created a predictive overlay for Soul Fragments.

Visual: A semi-transparent blue bar that extends beyond the current resource (River) to show potential resources if nearby fragments are consumed.

Layering: Utilized a 3-layer Z-Index system: Background (Empty) → Ghost (Prediction) → River (Actual).

Refinement: Added "Glow" state support. When the resource caps (50/50), the bar pulses with a high-intensity texture overlay.

(v14.0 - v16.5) – Advanced Class Mechanics

Death Knight (Rune Sorting):

Logic: Implemented RuneComparison logic to sort Runes based on their "Ready" state and cooldown duration. Runes now visually fill from Left to Right regardless of their internal ID.

Visuals: Added "Swipe" texture support (Circular Cooldowns) for replenishing runes.

Monk (Stagger Bar):

Complex Rendering: Created a split-texture reveal system. The Stagger bar is composed of two distinct textures that rotate and reveal independently to support the non-linear progression of the Stagger mechanic.

Coloring: Added dynamic vertex coloring (Green → Yellow → Red) based on Stagger % vs Max Health.

Evoker (Essence):

Logic: Adapted the "Reveal" engine to support Essence regeneration, allowing for partial fills (charging) alongside full point generation.

(v12.0 - v13.5) – The "Reveal" Mode Update

New Architecture: Split the Class Power rendering into two distinct modes:

Discrete Mode: Standard icons (Combo Points, Holy Power, Soul Shards) that toggle on/off.

Reveal Mode: A continuous texture mask that expands/contracts to reveal the underlying art (Arcane Charges, Essence).

Math: Implemented GetRotatedUVs to calculate texture coordinates in real-time, allowing textures to "fill" without distorting or stretching the image.

(v10.0 - v11.5) – Class Power Initialization

Core Module: Detached the class resource logic from the standard oUF element to create ClassPower.lua.

Configuration: Built the ClassConfigs database, allowing every class to have unique:

Textures/Atlases (e.g., ComboPoints-ComboPoint, Warlock-ReadyShard).

Colors (RGBA values).

Scales & Spacing (Pixel-perfect alignment).

Support Added: Rogue (Combo Points), Druid (Combo Points/Mana), Paladin (Holy Power), Warlock (Soul Shards), Mage (Arcane Charges).

(v7.7 - v9.5) – Visual Overhaul & Automation

1. Visual Overhaul ("Souls Mode")

Custom Asset Support: Replaced fallback Blizzard textures with specific support for custom .png assets located in the Media folder.

Filigree Integration: Implemented a wide-aspect ratio rendering container (512x128) to support the "Bat Wing" style bar cap without distortion.

Transparency Fixes: Resolved issues where assets rendered as black or white boxes by eliminating "fake" transparency layers.

2. The "Strata Sandwich" Rendering Engine

3D Portrait Layering: Solved the issue of 3D models appearing on top of the UI.

New Rendering Hierarchy: Established a strict Z-Index stack to ensure the "Blood on Glass" effect works properly:

Top (DIALOG): RingFrame (Blood/Gore overlay).

Upper Middle (HIGH): PortraitFrame (The 3D Model).

Lower Middle (MEDIUM +20): ArtFrame (Filigree/Wings - Sits on top of the health bar).

Bottom (MEDIUM +1): HealthBar (Standard Status Bar).

3. Progressive Visuals

Dynamic Gore System: Implemented logic to swap the Ring texture based on target health percentage. (100-50%: Clean Iron Ring. 49-20%: Cracked/Bloodied Ring. <20%: Gore-Drenched Ring.)

Safe-Check Logic: Uses the visual status bar value rather than protected API calls to ensure stability during combat.

4. Zone Automation Module

Auto-Switching: Added logic to detect the current instance type (raid, pvp, party, world) and automatically load a specific User Profile.

Smart Combat Queue: If the player zones in while in combat, the addon now "queues" the profile switch and executes it immediately after combat ends (PLAYER_REGEN_ENABLED), preventing UI errors.

Migration Safety: Added ValidateProfile() to auto-inject default automation settings into existing user profiles, preventing nil index crashes.

5. Options & UX Enhancements

Global Positioning: Added X Offset and Y Offset sliders to the General tab, allowing the entire HUD cluster to be moved pixel-by-pixel without breaking internal anchors.

Automation GUI: Added a dedicated "Automation" tab to the settings menu with toggles and dropdowns for every zone type.

Menu Restoration: Fixed a regression where complex Text Tag validators and Injectors were briefly removed; full functionality has been restored.

(v4.7 - v4.9) – Sexy Mode & Polish

Feature: Renamed "Thin Mode" to "Thin Mode (Sexy)". Introduced a preset that overrides the bar height to a sleek 8px (mimicking Details!).

Logic: Implemented a Non-Destructive Save/Restore System. Enabling Thin Mode snapshots the user's layout; disabling it restores the original height and text positions.

Safety: Added logic to automatically force text elements anchored "Inside" to "Above" when Thin Mode is active to prevent visual clipping.

(v4.4 - v4.6) – Advanced Coloring Logic

Feature: Added Health Gradient support (smooth Green → Yellow → Red transition based on health %).

UX: Replaced confusing override checkboxes with Explicit Color Mode Dropdowns (Class Color, Health Gradient, Custom).

Fix: Resolved conflicts where enabling Class Colors would accidentally disable custom settings for NPCs.

(v4.0 - v4.3) – Visual Fidelity & Real-Time Engine

Major Fix: Solved the "Reload UI" requirement. Implemented UpdateAllElements("RefreshUnit") to force the oUF engine to redraw health, power, and tags instantly when settings are changed.

Fix: Removed the RenderFrame.lua dependency which was causing a "White Bar" glitch by conflicting with oUF’s internal rendering.

Polish: Added Smart Anchor Padding. Text elements anchored to the "Outside" (Left/Right) now automatically apply a 2-5px offset so they don't touch the bar border by default.

(v3.0 - v3.6) – Customization & Tags

Feature: Integration of Ace3 Configuration Libraries.

Feature: Added the Tag Injector system, allowing users to build complex text strings (e.g., [name] [level] [curhp]) via dropdown menus without needing to know the code.

Feature: Added Execute Markers, allowing overlays at 20% and 35% health for specific classes.

(v1.0 - v2.0) – Inception

Core: Established the addon using the oUF Framework for lightweight unit handling.

Visuals: Basic health bar, name text, and a draggable/lockable anchor frame.