- Skill bar: no art selection; slot 0 is the right-click art, keys 0-6 cast slots directly; cooldown labels in exact seconds; slot 0 set apart. - Arts regenerate on their own (casting no longer refills the group). - Auto-attack after targeting or casting at a hostile creature, at the speed of a held button. - Auras can be recast while active (renew, no second visual). - Blicke wie Klingen hits every enemy in range, physical, with life leech. - Blitzschlag steers the game's own chain: 3 + level/5 hits, 1 + level/10 chains, re-hits a lone enemy. - Weapon sets: click selects, drag only from the selected set; the leftmost set is clickable (signed hit tests). - Esc closes open windows before opening the game menu. - HUD: standalone buttons and texts are centred. - Record cache sized for widened views (town lag while walking). - Shared game code: orders, fx events, text drawing, cooldowns, effects. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
21 lines
1.0 KiB
Markdown
21 lines
1.0 KiB
Markdown
# Performance
|
|
|
|
## Record cache in widened views (`src/mods/recordcache.cpp`)
|
|
|
|
Measured 2026-10-15 (Battlemage save in a town, frame time at Flip, sampling
|
|
profiler over all threads): walking took 90-130 ms per frame in the widened
|
|
view, 17 ms with widescreen off; idle 17 ms in both.
|
|
|
|
The render thread spent most samples in a std::map walk (0x832b80 /
|
|
0x832ba0, called from 0x636222) inside FUN_006360e0: a record-by-id cache
|
|
(map at +0xde5c, size at +0xde60, 16-byte value at node +0x14, last-used
|
|
stamp at node +0x24 from 0xcd59d0; misses read the record from the file at
|
|
+0x23c). With 4096 entries or more, every insert walks the whole map to
|
|
erase the single least recently used entry. The widened view needs more
|
|
records than that, so walking evicted and reloaded constantly.
|
|
|
|
Fix: the limit (`cmp ecx, 1000h` at 0x636201) is raised to 0x8000 so the
|
|
per-insert walk never runs; before a lookup with 0x6000 entries the mod
|
|
erases the less recently used half in one pass (map::erase 0x63da10). Walking
|
|
in town: 17 ms per frame again (confirmed by the user).
|