Publish source: Unlicense, public README, repo hygiene
The remote was previously a distribution-only point for pre-built DLLs. This opens the source. - LICENSE: Unlicense, with a GPL-3.0 carve-out for src/dpslog/WeirdDPSMate (a DPSMate fork that keeps its own license) - README.md replaces the stale internal one with the user-facing docs from DLL_README.md, swapping the 'Why No Source Code?' section for build and layout notes. DLL_README.md is dropped; one README now serves both. - RELEASING.md: drop the trim-the-README-per-release dance and the remote/WeirdUtils/ distribution clone, both obsolete now - gitignore agent/editor scratch, build caches, the vendored WSBT addon, and the WeirdThreat/uwu-logs checkouts (separate upstream repos) - Commit outstanding module work: superweirdo, clickthrough portal visuals, transform44 decompiles, worldmarkers demo presets, tools/
This commit is contained in:
@@ -36,111 +36,3 @@ Track notable changes here between releases. Clear this file when cutting a new
|
||||
minimap. Reads the per-player quest status cached on unit objects by the client's
|
||||
SMSG_QUESTGIVER_STATUS handler. Enabled by default in the tracking dropdown, togglable
|
||||
like other NPC tracking categories.
|
||||
|
||||
## Enhancements
|
||||
|
||||
- **Clickthrough**: Lootable corpses now click-through over players. Previously only
|
||||
interactable NPCs (vendors, quest givers) and game objects would win over a blocking
|
||||
player. Now dead units with the lootable flag are also prioritized, so you can loot
|
||||
corpses through the player crowd without having to reposition.
|
||||
|
||||
- **World Markers**: Disabled in battlegrounds via Map.dbc mapType check. Markers cannot
|
||||
be placed while in a battleground instance.
|
||||
|
||||
- **Clickthrough**: Reduced log noise -- logging changed from file to console-only.
|
||||
Also ignores assets_backup directories in custom asset scanning.
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **World Markers**: Fixed marker placement over game objects -- re-raycast now uses
|
||||
terrain-only flags to find the ground position beneath a GO, instead of placing the
|
||||
marker at the GO's collision point.
|
||||
|
||||
- **DPSLog**: Fixed dynamic event slot search and environmental damage parameter ordering.
|
||||
|
||||
- **Addon System**: Fixed addon files not loading -- switched from @hasField to @hasDecl
|
||||
for compile-time module introspection.
|
||||
|
||||
## Internal / Performance
|
||||
|
||||
- **Transform44 Profiling** - render pipeline profiling module with 39 hotspot hooks,
|
||||
A/B testing framework for comparing baseline vs optimized code paths, SSE replacements
|
||||
for ClipPolygonToSinglePlane (4x), BuildTrianglePlanes (10x), rotateMatrixByAxisAngle
|
||||
(4.3x), RayTriangleIntersection (1.3x), multiplyMatrix4x4 (4.3x).
|
||||
|
||||
- **VanillaFixes Math Polyfill** - 17 UnitXP x87 FPU replacement hooks verified via
|
||||
Ghidra prologue/epilogue disassembly and benchmarked against original WoW.exe bytes.
|
||||
Hooks install in lateInit() to clobber UnitXP's hooks with correct calling conventions
|
||||
(thiscall vs fastcall verified from assembly). A/B tested via bitmask toggle.
|
||||
|
||||
Micro-benchmark results (x86 Linux harness, original x87 bytes mmap'd executable):
|
||||
```
|
||||
Winners (SSE faster): Neutral (~1.0x): Losers (x87 faster):
|
||||
rotMat3x3: 2.1x (158->72) matMulVec3: 1.0x dotProduct: 0.4x (5->11)
|
||||
rotMat4x4: 2.1x (162->76) multiply3x3: 1.0x evaluatePolynomial: 0.6x (11->16)
|
||||
planeNormal: 1.7x (58->33) crossProduct: 1.0x squaredMagnitude: 0.7x (7->9)
|
||||
transformAABox: 1.2x (89->69) applyTranslation: 0.9x vec3MulScalar: 0.8x
|
||||
vecMulMat4: 1.1x scaleByVec: 0.9x vec3MulAssign: 0.8x
|
||||
scaleByScalar: 1.1x (some runs) quatMulMat4: 0.8x
|
||||
```
|
||||
Losers are at function call overhead floor (original x87 is 5-11 cycles, close to
|
||||
bare CALL/RET cost). Future direction: patch original bytes in-place at load time
|
||||
to eliminate call overhead entirely.
|
||||
|
||||
Also includes CriticalSection SpinCount=4000 optimization (from UnitXP) and
|
||||
blit_hub memcpy fast paths for matching pixel formats.
|
||||
|
||||
- **Math SSE Benchmark Harness** (`zig build bench` / `zig build run-bench`) - standalone
|
||||
x86 Linux micro-benchmark that extracts original x87 function bytes from WoW.exe via
|
||||
Ghidra, mmaps them executable, and profiles against our SSE replacements. Fresh data
|
||||
each iteration to avoid overflow/denormal artifacts. Correctness validation included.
|
||||
|
||||
- **Glyph Shadow Cache** - direct-mapped O(1) bypass for the game's 4-bucket hash table
|
||||
in GetOrCreateCharacterGlyph. Reduces glyph lookup from ~3.65% frame time.
|
||||
|
||||
- **MPQ File Cache (filecache)** - 2-way set-associative cache for File_FindInArchive
|
||||
(0x6549a0). Skips the MPQ chain walk and per-archive hash table probe on repeat file
|
||||
opens. Cache hits cost ~1000 cycles vs ~30000 cycles for full search. 60-90% hit rate
|
||||
during gameplay, saving 6-160ms per 15s reporting period depending on scene load.
|
||||
Validated via game's own FindAndIncrementResourceReference to handle archive lifecycle.
|
||||
|
||||
- **Timer Fix (VanillaFixes port)** - TSC calibration, OS timer resolution (0.5ms via
|
||||
NtSetTimerResolution), and Windows 11 power throttling disable. Ported from
|
||||
hannesmann/vanillafixes. Primarily benefits native Windows; no measurable impact on
|
||||
Wine/Linux but applied unconditionally.
|
||||
|
||||
- **MPQ File Cache** - hooks File_FindInArchive (0x6549a0) to cache archive lookup
|
||||
results. First open does full MPQ chain walk (~60K cycles), subsequent opens hit
|
||||
direct-mapped cache with filename verification (~300 cycles). 80% hit rate in testing.
|
||||
Moved from standalone file_perf module to transform44 sub-module (file_cache.zig).
|
||||
|
||||
- **Logging Module** - centralized logging with auto-prefix, file and/or console routing.
|
||||
All modules now route output through the shared Logger.
|
||||
|
||||
- **Addon System Refactor** - module list now derived from build.zig, inactive addon
|
||||
prefixes pruned at runtime. Fully data-driven.
|
||||
|
||||
- **Shared Offsets** - consolidated shared game offsets and accessor functions into
|
||||
offsets.zig and wow.zig, eliminating per-module duplication.
|
||||
|
||||
- **Build System** - default optimize changed from Debug to ReleaseFast (works around
|
||||
Zig fastcall inreg LLVM bug). Logging available in all modes except ReleaseSmall.
|
||||
|
||||
## To Explore
|
||||
|
||||
- **Driver env vars on load** - set environment variables like `RADV_TEX_ANISO=16` from
|
||||
the DLL at load time, allowing driver-level anisotropic filtering while setting the
|
||||
in-game option to off/low. Avoids the double-filtering performance hit of game AF
|
||||
stacked on top of driver AF. Same approach could apply to other Mesa/RADV/DXVK knobs.
|
||||
|
||||
## DLL_README Gaps
|
||||
|
||||
Features documented in DLL_README but never included in a release:
|
||||
- World Markers
|
||||
- Outlines
|
||||
- Interact
|
||||
- Crash Fix (framecrash)
|
||||
|
||||
Features implemented but not yet documented in DLL_README:
|
||||
- Clickthrough lootable corpse priority
|
||||
- World Markers battleground restriction
|
||||
|
||||
Reference in New Issue
Block a user