Add file cache and timer fix to release notes and DLL_README

This commit is contained in:
MarcelineVQ
2026-03-14 15:03:31 -07:00
parent 692a02ed2c
commit 236cf95bdd
2 changed files with 43 additions and 0 deletions
+26
View File
@@ -188,6 +188,32 @@ Lua API for addon developers:
---
### MPQ File Cache
Caches the results of MPQ archive file lookups so repeat file opens skip the expensive archive chain walk and hash table probe. The game re-opens the same model and texture files hundreds of times per second during gameplay -- each lookup normally searches through every loaded MPQ archive. The cache remembers which archive contains each file and returns the answer directly.
Cache hits cost roughly 1/30th of a full search. During heavy gameplay (cities, raids, zone transitions), this saves 50-160ms every 15 seconds. In quiet scenes with few new models loading, there is little to save because the game does fewer lookups.
The cache validates that archives are still alive before returning cached results, so if the game closes or reloads an archive, the cache falls through to the original search.
No configuration needed. Enabled by default when using `weirdutils.dll`.
**DLL:** `filecache.dll`
---
### Timer Calibration
Improves the game's internal timer precision by recalibrating the TSC (Time Stamp Counter) frequency using the OS performance counter as a reference. The vanilla client's built-in calibration is inaccurate, which can cause animation stutter and timing jitter on some systems.
Also requests higher OS timer resolution (0.5ms instead of the default 15.6ms) and disables Windows 11 power throttling for the game process.
Ported from [VanillaFixes](https://github.com/hannesmann/vanillafixes). Primarily benefits native Windows. On Wine/Linux the game typically uses GetTickCount instead of TSC, so this module enables TSC mode with a proper calibration.
No configuration needed. Included in `weirdutils.dll`.
---
## Why No Source Code?
This project is distributed as pre-built DLLs only. The source code is not and will not be made publicly available.
+17
View File
@@ -58,9 +58,26 @@ Track notable changes here between releases. Clear this file when cutting a new
for ClipPolygonToSinglePlane (4x), BuildTrianglePlanes (10x), rotateMatrixByAxisAngle
(4.3x), RayTriangleIntersection (1.3x), multiplyMatrix4x4 (4.3x).
- **VanillaFixes Math Polyfill** (WIP) - incorporating x87 FPU replacements from UnitXP
and libSiliconPatch into our SSE pipeline. Replaces ~20 game math functions (matrix
multiply, vector ops, collision geometry, animation interpolation) with SSE or modern
scalar equivalents. Compiled ReleaseFast as a separate compilation unit (math_sse.zig).
Not yet wired into hooks -- will be its own module with independent mutex.
- **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.