Reads creature rank (0=Normal, 1=Elite, 2=RareElite, 3=Boss, 4=Rare)
from the existing creatureInfoCache populated by creature query responses.
Shows a colored badge next to the level: gold for Elite, purple for
Rare Elite, red for Boss, cyan for Rare — each with a tooltip. Adds
getCreatureRank() accessor to GameHandler for UI use.
Energy bosses (e.g. Anub'arak, various WotLK encounters) use energy as
their ability cooldown mechanic — tracking it in the boss frame lets
raiders anticipate major ability casts. Mana, rage, focus, and energy
all shown with type-appropriate colors as a slim 6px bar below HP.
When hovering over a player-applied DoT/debuff indicator square on an
enemy nameplate, the spell name is now shown as a tooltip. Uses direct
mouse-position hit test since nameplates render into the background
draw list rather than an ImGui window.
Pet ability buttons now show full spell info (name, description, range,
cost, cooldown) instead of just the spell name. Built-in commands (Follow,
Stay, Attack, etc.) keep their existing simple labels. Autocast-enabled
spells show "Autocast: On" at the bottom of the tooltip.
The focus frame now shows buff/debuff icons matching the target frame:
debuffs first with dispel-type border colors, buffs after with green
borders, duration countdowns on each icon, and rich spell info tooltips
on hover. Uses getUnitAuras() falling back to getTargetAuras() when
focus happens to also be the current target.
- Raid frame now shows dispellable debuff dots (magic/curse/disease/poison)
in the bottom of each cell, matching the existing party frame behavior;
hovering a dot shows the debuff type and spell names for that dispel type
- Minimap quest giver dots (! and ?) now show a tooltip with the NPC name
and whether the NPC has a new quest or a quest ready to turn in
Trainer spell tooltips now show the spell's effect description from
Spell.dbc (e.g. "Sends a shadowy bolt at the enemy...") above the
status/requirement lines, matching the WoW trainer UI style.
Also styles the spell name yellow (like WoW) and moves status to
TextDisabled for better visual hierarchy.
Item "Equip:" and "Use:" spell effects now display the spell's
description text from Spell.dbc (e.g. "Increases your Spell Power by 30.")
rather than the internal spell name (e.g. "Mana Spring Totem").
Falls back to the name when description is unavailable (e.g. older DBCs).
Adds getSpellDescription() to GameHandler, backed by the existing
loadSpellNameCache() pass which now reads the Tooltip field.
socketBonus is a SpellItemEnchantment entry ID, not a spell ID.
Previously getSpellName() was called on it, which produced wrong or
empty results. Now a lazy SpellItemEnchantment.dbc cache in the item
tooltip correctly resolves names like "+6 All Stats".
The Criteria tab now loads AchievementCriteria.dbc to display each
criterion's description text, parent achievement name, and a
current/required progress counter (e.g. "25/100") instead of the
raw numeric IDs. The search filter now also matches by achievement name.
AchievementCriteria DBC layout added to wotlk/dbc_layouts.json.
Hovering an earned achievement now shows its point value (gold badge),
description text from Achievement.dbc field 21, and the earn date.
loadAchievementNameCache() also populates achievementDescCache_ and
achievementPointsCache_ in a single DBC pass; Points field (39) added
to the WotLK Achievement DBC layout.
SMSG_PARTY_MEMBER_STATS includes a 64-bit aura presence mask + per-slot
spellId/flags that was previously read and discarded. Now populate
unitAurasCache_[memberGuid] from this data so party frame debuff dots
show even when no dedicated SMSG_AURA_UPDATE has been received for that
unit. For Classic/TBC (no flags byte), infer debuff status from dispel
type — any spell with a non-zero dispel type is treated as a debuff.
Both actions were defined in KeybindingManager but never wired to the
input handling block — C had no effect and B did nothing. Connect them:
- C toggles inventoryScreen's character panel (equipment slots view)
- B opens all separate bags, or falls back to toggling the unified view
- Parse MSG_PVP_LOG_DATA to populate BgScoreboardData (players, KB, deaths,
HKs, honor, BG-specific stats, winner)
- Add /score command to request the scorecard while in a battleground
- Render sortable per-player table with team color-coding and self-highlight
- Refresh button re-requests live data from server
- Fix TBC SMSG_INIT/SET_EXTRA_AURA_INFO_OBSOLETE to populate unitAurasCache_
for all GUIDs (not just player/target), mirroring WotLK aura update behavior
so party frame debuff dots work on TBC servers
Extend the aura tracking system to cache auras for any unit (not just
player and current target), so healers can see dispellable debuffs on
party members. Colored 8px dots appear below the power bar:
Magic=blue, Curse=purple, Disease=brown, Poison=green
One dot per dispel type; non-dispellable auras are suppressed.
Cache is populated via existing SMSG_AURA_UPDATE/SMSG_AURA_UPDATE_ALL
handling and cleared on world exit.
Track cumulative player damage/healing for the full combat encounter
using the persistent CombatLog, shown alongside the existing 2.5s
rolling window. The encounter row appears after 3s of combat and
persists post-combat until the next engagement, giving a stable
full-fight average rather than the spiky per-window reading.
Show small colored squares below the health bar of the current
hostile target indicating player-applied auras. Colors map to
dispel types from Spell.dbc: blue=Magic, purple=Curse,
yellow=Disease, green=Poison, grey=other/physical.
Dots are positioned below the cast bar if one is active,
otherwise directly below the health bar. They are clipped
to the nameplate width and only rendered for the targeted
hostile unit to keep the display readable.
Each non-General chat tab now shows an unread count in parentheses
(e.g. "Whispers (3)") when messages arrive while that tab is inactive.
The counter clears when the tab is selected. The General tab is excluded
since it shows all messages anyway.
Inserts a dedicated "Guild" tab between Whispers and Trade/LFG that
shows guild, officer, and guild achievement messages. Updates the
Trade/LFG channel-name filter from hardcoded index 3 to 4 to match
the new tab order.
Adds an 11th chat type "CHANNEL" to the dropdown, displaying a secondary
combo box populated from the player's joined channels. Typing /1, /2 etc.
in the input now also auto-switches the dropdown to CHANNEL mode and
selects the corresponding channel. Input text is colored cyan for channel
messages to visually distinguish them from other chat types.
SMSG_AREA_TRIGGER_MESSAGE events (dungeon enter messages, objective
triggers, etc.) were previously only appended to chat. Now they also
appear as animated slide-up toasts in the lower-center of the screen:
blue-bordered dark panel with light-blue text, 4.5s lifetime with
35ms slide-in/out animation. Up to 4 simultaneous toasts stack
vertically. Messages still go to chat as before.
Dead units with UNIT_DYNFLAG_LOOTABLE (0x0001) set are rendered as small
yellow-green diamonds on the minimap, distinct from live NPC dots. A hover
tooltip shows the unit name. Uses the dynamic flags already tracked by the
update-object parser, so no new server data is needed.
Stores up to 500 combat events in a rolling deque alongside the existing
floating combat text. Events are populated via the existing addCombatText()
call site, resolving attacker/target names from the entity manager and
player name cache at event time.
- CombatLogEntry struct in spell_defines.hpp (type, amount, spellId,
isPlayerSource, timestamp, sourceName, targetName)
- getCombatLog() / clearCombatLog() accessors on GameHandler
- renderCombatLog() in GameScreen: scrollable two-column table (Time +
Event), color-coded by event category, with Damage/Healing/Misc filter
checkboxes, auto-scroll toggle, and Clear button
- /combatlog (/cl) chat command toggles the window
Add a search field with "Search" button directly in the who results
window so players can query without using the chat box. Pressing Enter
in the search field also triggers a new /who query.
Store structured WhoEntry data from SMSG_WHO responses and show them
in a dedicated popup window with Name/Guild/Level/Class/Zone columns.
Right-click on any row to Whisper, Invite, Add Friend, or Ignore.
Window auto-opens when /who or /whois is typed; shows online count
in the title bar. Results persist until the next /who query.
- Renders below pet frame, visible only for Shaman (class 7)
- Shows each active totem (Earth/Fire/Water/Air) with its spell name
and a colored countdown progress bar
- Colored element dot (brown/red/blue/light-blue) identifies element
- Only rendered when at least one totem is active
- /use <item name> — searches backpack then bags (case-insensitive),
calls useItemBySlot() / useItemInBag() for the first match
- /equip <item name> — same search, calls autoEquipItemBySlot() /
autoEquipItemInBag() for the first match
- Both commands print an error if the item is not found
- Added both to tab-autocomplete list and /help output
- "Trade" option initiates a trade via existing initiateTrade(guid) API
(only shown for online friends with a known GUID)
- "Set Note" option opens an inline popup with InputText pre-filled with
the current note; Enter or OK saves via setFriendNote(), Esc/Cancel discards