github suprepupre/wow-optimize v3.16.2
wow_optimize v3.16.2

6 hours ago

wow_optimize v3.16.2 Release Notes

This release focuses on Wine/Proton compatibility, startup stability, and critical Lua VM/compiler bug fixes.

If you experienced immediate crashes at startup under Wine, a black screen in the launcher, or addon syntax errors (like in LibDogTag-3.0), this update solves those issues permanently.


1. Native Windows Threads (CreateThread)

  • The Problem: C++ std::thread initialization inside MSVCP140.dll frequently caused Access Violations (0xC0000005) during startup under Wine/Proton.
  • The Solution: Switched to native Windows CreateThread for all background operations, bypassing the C++ runtime and resolving 100% of startup thread crashes.

2. SRWLOCK Mutex Implementation

  • The Problem: Dynamic std::mutex constructors could race with the DLL's early startup, leading to NULL dereference crashes.
  • The Solution: Replaced all C++ mutexes with statically initialized native SRWLOCK and CONDITION_VARIABLE APIs, ensuring thread-safe access from the first instruction.

3. WinForms Configurator & Live Search

  • The Problem: The old WPF launcher relied on Direct3D, which caused blank windows and broken tooltips under Wine/Proton.
  • The Solution: Rewrote the launcher in WinForms (GDI). Added a powerful global Live Search box that instantly filters features by name across all tabs.

4. Table Concatenation (table.concat) Fix

  • The Problem: The fast path for table.concat was reading string lengths from the wrong internal struct offset, causing severe string truncation (e.g., "Percent" became "Pe"). This corrupted addon AST generation and caused Lua syntax errors (unexpected symbol near ';', '<eof>' expected).
  • The Solution: Corrected the memory offsets to match WoW's custom Lua 5.1 layout exactly, resolving all string corruption and parser crashes.

5. Table Hash Size (lsizenode) Fix

  • The Problem: WoW's custom 32-bit Lua compiler uses non-standard struct alignment. An incorrect offset caused the VM to read Garbage Collection flags instead of table hash sizes. This broke the # length operator for tables, triggering Assertion failed: 0 == 1 crashes.
  • The Solution: Restored the correct lsizenode offset (+11), fixing table boundary calculations across the VM.

6. Lock-Free DBC Lookup Cache Concurrency Fix

  • The Problem: Concurrent spell/item database lookups across multiple threads could interleave data writes, corrupting cache slots and causing ACCESS_VIOLATION crashes inside GetSpellInfo.
  • The Solution: Implemented a thread-safe compare-and-swap (CAS) lock on the writer path to prevent race conditions without adding lock contention.

7. UI Frame Batch / Loading Screen Artifacts

  • The Problem: Queued visual updates (scales, display IDs, mount states) were deferred during loading screens or teleports. This caused assets to load with stale data, resulting in stretched or pixelated models.
  • The Solution: The module now detects loading screens and instantly forces all queued visual updates through, fixing the artifacting.

8. LuaOpcache Loading Speed Optimizer

  • The Problem: The Lua JIT profiler added heavy CPU overhead during asset initialization, increasing load times from 50s to 1m30s. Stack leaks in fast paths also caused memory corruption for addons like LibGroupTalents.
  • The Solution: Bypassed the profiler during loading screens to restore original 50s load times. Fixed stack balancing in lua_pushstring and lua_concat.

9. Visual Field Update Instant-Bypass

  • The Problem: Even with the loading screen fix, very short zone transitions could still leave critical model data stuck in the update queue.
  • The Solution: Whitelisted vital model-defining fields (display IDs, bounding radius, combat reach, mount ID) to always process immediately, skipping the queue entirely.

10. DBC Cache Lifetime Invalidation

  • The Problem: WoW unloads and relocates DBC database records during UI reloads or zone changes. The cache was holding onto stale pointers, leading to crashes when it tried to read them later.
  • The Solution: The DBC cache is now automatically invalidated and safely flushed whenever a loading screen or UI reload occurs.

Installation & Setup

  1. Copy wow_optimize.dll, version.dll, and wow_optimize_launcher.exe into your main World of Warcraft directory.
  2. Run wow_optimize_launcher.exe to select presets or toggle individual modules, then click LAUNCH WOW.

Don't miss a new wow-optimize release

NewReleases is sending notifications on new releases.