# Map overlay /mapmobs (staged 2026-10-03, TEST only, not published)

Files: dinput8.dll (md5 52b5fa13, client_dll d48de17 = build of c5ead48 (feature 4de5a95)). No UI/XML files: the overlay draws into the
stock map window. verify_sites.py: 31 hooks + 40 bytes-only checks (7 patches, 33 map signatures) + 1 call site,
0 problems against patch_files/eqgame.exe, clients/everquest_rof2_tanks and clients/thj_latest eqgame.exe.
The DLL also carries the not-yet-published backstab byte patch (95cc35d) and Advanced Loot Rules window (330a69c).
No server change for the overlay.

## Test on the desktop (TEST world)
1. scp -r openclawvm:heroes_journey_workspace/patcher/staged_mapmobs /tmp/ && bash /tmp/staged_mapmobs/install_desktop.sh
2. Launch "EverQuest RoF2 Tanks (Direct)" (NOT the Patcher launcher: it puts the live DLL back). Log in to the test world.
3. hjclient.log (client folder) must have, near the top:
     ...+lootrules+mapmobs) loaded ...
     hook MapPostDraw @006cfb00 ok
     mapmobs: map overlay ready: hook MapViewMap::PostDraw @006cfb00 (eqgame 006cfb00), 33 signatures ok, /mapmobs
   and, after the map is first drawn, "mapmobs: settings from ...hjclient.ini: on=1 ...".
   ("mapmobs: signature ... differs" or "SKIP MapPostDraw" instead = the overlay is off; send the log.)
4. Open the map window and make sure its Labels button is on (with labels off, names show only on mouse-over).
   Type /mapmobs: a status line + help in chat. Look for: a small cross + name for each NPC of the zone at its
   position, con-coloured (grey/green/light blue/blue/white/yellow/red), other players pink, moving about once a second.
5. Filters: /mapmobs named on (only named mobs) / named off; /mapmobs level 10 20 / level off; /mapmobs pc off;
   /mapmobs corpse on (kill something); /mapmobs lvl on (adds "(55)"); /mapmobs con off; /mapmobs max 50;
   /mapmobs untargetable on (adds untargetable NPCs); /mapmobs reset. /hjmap is the same command.
6. Is it up: /mapmobs find <part of a name>  -> chat "Found N matching ..." with distance and loc (Y, X like /loc);
   on the map the matches are magenta and larger, with a magenta line from you to the nearest. /mapmobs find off.
   /mapmobs filter <text> shows only matching spawns; /mapmobs filter off.
7. Stress the map (crash checks): zoom in/out, pan, toggle the layer buttons and the Z filter, hover and LEFT-click a
   mob label, right-click in the map, drag a selection box while a find line shows, browse another zone's map in the
   map window (none of our labels may show there), zone with the map open and closed, /mapmobs off and on,
   close/reopen the map, camp to character select and back. In a busy zone (PoK) with the map open: FPS ok?
8. Settings persist in hjclient.ini [MapMobs] next to eqgame.exe (find/filter text is per session).

Send back if something is off: every hjclient.log line containing "mapmobs", "MapPostDraw" or "SKIP", the first two
lines of the log, what you did just before (for a crash: the whole hjclient.log), and the [MapMobs] part of
hjclient.ini. Undo: bash /tmp/staged_mapmobs/install_desktop.sh --revert (or run the Patcher launcher once).

## Publish (after Trevor confirms on test) - NOT run
0. This DLL includes the staged backstab patch (95cc35d; server rule Custom:BackstabAnyWeapon decides) and the
   Advanced Loot Rules window (330a69c). Do the staged_lootrules publish first or together (its quests cherry-pick
   e2cabce9d + api reload 22, and its three XML files), and confirm the backstab rule is set on prod as intended.
1. cd ~/heroes_journey_workspace/patcher && D=~/.local/share/eq-backups/$(date +%F) && mkdir -p "$D" &&
   cp -p patch_files/dinput8.dll "$D/dinput8.dll.pre-mapmobs"
2. cp staged_mapmobs/dinput8.dll patch_files/dinput8.dll && md5sum patch_files/dinput8.dll   (expect 52b5fa13...)
3. news.txt: add this line right under the welcome line:
   Oct 3: Map mobs - open your map and type /mapmobs to see this zone's mobs on it, coloured by difficulty. /mapmobs find <name> tells you if a mob is up and where (and draws a line to it); /mapmobs named on shows named mobs only.
4. python3 generate_manifest.py, then check the dinput8.dll entry in patch_manifest.json against
   sha256sum patch_files/dinput8.dll.
