2026-03-27 18:47:35 -07:00
|
|
|
|
# Changelog
|
|
|
|
|
|
|
docs: update README, CHANGELOG, and status to v1.8.9-preview
- README: update status date to 2026-03-30, version to v1.8.9-preview,
add container builds line, update current focus to code quality
- CHANGELOG: move v1.8.1 entries to their own section, add v1.8.2-v1.8.9
unreleased section covering architecture (GameHandler decomposition,
Docker cross-compilation), bug fixes (7 UB/overflow/safety fixes),
and code quality (30+ constants, 55+ comments, 8 DRY extractions)
- docs/status.md: update last-updated date to 2026-03-30
2026-03-30 17:40:47 -07:00
|
|
|
|
## [Unreleased] — changes since v1.8.9-preview
|
|
|
|
|
|
|
|
|
|
|
|
### Architecture
|
|
|
|
|
|
- Break Application::getInstance() singleton from GameHandler via GameServices struct
|
|
|
|
|
|
- EntityController refactoring (SOLID decomposition)
|
|
|
|
|
|
- Extract 8 domain handler classes from GameHandler
|
|
|
|
|
|
- Replace 3,300-line switch with dispatch table
|
|
|
|
|
|
- Multi-platform Docker build system (Linux, macOS arm64/x86_64, Windows cross-compilation)
|
|
|
|
|
|
|
|
|
|
|
|
### Bug Fixes (v1.8.2–v1.8.9)
|
|
|
|
|
|
- Fix VkTexture ownsSampler_ flag after move/destroy (prevented double-free)
|
|
|
|
|
|
- Fix unsigned underflow in Warden PE section loading (buffer overflow on malformed modules)
|
|
|
|
|
|
- Add bounds checks to Warden readLE32/readLE16 (out-of-bounds on untrusted PE data)
|
|
|
|
|
|
- Fix undefined behavior: SDL_BUTTON(0) computed 1 << -1 (negative shift)
|
|
|
|
|
|
- Fix BigNum::toHex/toDecimal null dereference on OpenSSL allocation failure
|
|
|
|
|
|
- Remove duplicate zone weather entry silently overwriting Dustwallow Marsh
|
|
|
|
|
|
- Fix LLVM apt repo codename (jammy→noble) in macOS Docker build
|
|
|
|
|
|
- Add missing mkdir in Linux Docker build script
|
|
|
|
|
|
- Clamp player percentage stats (block/dodge/parry/crit) to prevent NaN from corrupted packets
|
|
|
|
|
|
- Guard fsPath underflow in tryLoadPngOverride
|
|
|
|
|
|
|
|
|
|
|
|
### Code Quality (v1.8.2–v1.8.9)
|
|
|
|
|
|
- 30+ named constants replacing magic numbers across game, rendering, and pipeline code
|
|
|
|
|
|
- 55+ why-comments documenting WoW protocol quirks, format specifics, and design rationale
|
|
|
|
|
|
- 8 DRY extractions (findOnUseSpellId, createFallbackTextures, finalizeSampler,
|
|
|
|
|
|
renderClassRestriction/renderRaceRestriction, and more)
|
|
|
|
|
|
- Scope macOS -undefined dynamic_lookup linker flag to wowee target only
|
|
|
|
|
|
- Replace goto patterns with structured control flow (do/while(false), lambdas)
|
|
|
|
|
|
- Zero out GameServices in Application::shutdown to prevent dangling pointers
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [v1.8.1-preview] — 2026-03-23
|
2026-03-27 18:47:35 -07:00
|
|
|
|
|
|
|
|
|
|
### Performance
|
|
|
|
|
|
- Eliminate ~70 unnecessary sqrt ops per frame; constexpr reciprocals and cache optimizations
|
|
|
|
|
|
- Skip bone animation for LOD3 models; frustum-cull water surfaces
|
|
|
|
|
|
- Eliminate per-frame heap allocations in M2 renderer
|
|
|
|
|
|
- Convert entity/skill/DBC/warden maps to unordered_map; fix 3x contacts scan
|
|
|
|
|
|
- Eliminate double map lookups and dynamic_cast in render loops
|
|
|
|
|
|
- Use second GPU queue for parallel texture/buffer uploads
|
|
|
|
|
|
- Time-budget tile finalization to prevent 1+ second main-loop stalls
|
|
|
|
|
|
- Add Vulkan pipeline cache persistence for faster startup
|
|
|
|
|
|
|
|
|
|
|
|
### Bug Fixes
|
|
|
|
|
|
- Fix spline parsing with expansion context; preload DBC caches at world entry
|
|
|
|
|
|
- Fix NPC/player attack animation to use weapon-appropriate anim ID
|
|
|
|
|
|
- Fix equipment visibility and follow-target run speed
|
|
|
|
|
|
- Fix inspect (packed GUID) and client-side auto-walk for follow
|
|
|
|
|
|
- Fix mail money uint64, other-player cape textures, zone toast dedup, TCP_NODELAY
|
|
|
|
|
|
- Guard spline point loop against unsigned underflow; guard hexDecode/stoi/stof
|
|
|
|
|
|
- Fix infinite recursion in toLowerInPlace and operator precedence bugs
|
|
|
|
|
|
- Fix 3D audio coords for PLAY_OBJECT_SOUND; correct melee swing sound paths
|
|
|
|
|
|
- Prevent Vulkan sampler exhaustion crash; skip pipeline cache on NVIDIA
|
|
|
|
|
|
- Skip FSR3 frame gen on non-AMD GPUs to prevent driver crash
|
|
|
|
|
|
- Fix chest GO interaction (send GAMEOBJ_USE+LOOT together)
|
|
|
|
|
|
- Restore WMO wall collision threshold; fix off-screen bag positions
|
|
|
|
|
|
- Guard texture log dedup sets with mutex for thread safety
|
|
|
|
|
|
- Fix lua_pcall return check in ACTIONBAR_PAGE_CHANGED
|
|
|
|
|
|
|
|
|
|
|
|
### Features
|
|
|
|
|
|
- Render equipment on other players (helmets, weapons, belts, wrists, shoulders)
|
|
|
|
|
|
- Target frame right-click context menu
|
|
|
|
|
|
- Crafting sounds and Create All button
|
|
|
|
|
|
- Server-synced bag sort
|
|
|
|
|
|
- Log GPU vendor/name at init
|
|
|
|
|
|
|
|
|
|
|
|
### Security
|
|
|
|
|
|
- Add path traversal rejection and packet length validation
|
|
|
|
|
|
|
|
|
|
|
|
### Code Quality
|
|
|
|
|
|
- Packet API: add readPackedGuid, writePackedGuid, writeFloat, getRemainingSize,
|
|
|
|
|
|
hasRemaining, hasData, skipAll (replacing 1300+ verbose expressions)
|
|
|
|
|
|
- GameHandler helpers: isInWorld, isPreWotlk, guidToUnitId, lookupName,
|
|
|
|
|
|
getUnitByGuid, fireAddonEvent, withSoundManager
|
|
|
|
|
|
- Dispatch table: registerHandler, registerSkipHandler, registerWorldHandler,
|
|
|
|
|
|
registerErrorHandler (replacing 120+ lambda wrappers)
|
|
|
|
|
|
- Shared ui_colors.hpp with named constants replacing 200+ inline color literals
|
|
|
|
|
|
- Promote 50+ static const arrays to constexpr across audio/core/rendering/UI
|
|
|
|
|
|
- Deduplicate class name/color functions, enchantment cache, item-set DBC keys
|
|
|
|
|
|
- Extract settings tabs, GameHandler::update() phases, loadWeaponM2 into methods
|
|
|
|
|
|
- Remove 12 duplicate dispatch registrations and C-style casts
|
|
|
|
|
|
- Extract toHexString, toLowerInPlace, duration formatting, Lua return helpers
|