what it is.
the game itself does not have a very helpful in-game map or interface, and i like to stream this game from time to time. i felt i was losing viewer attention by constantly referencing an outside site (hitmaps.com) while on stream. switching the view to the map was also clunky.
so i thought why not build a dedicated overlay? this overlay also does much more than just display a map, it lets me map targets, keep track of trespassing zones, and in general is the most functional tool for the hitman games that I am aware of. I will likely make this public after more testing.
notes from claude
· my side of itthe part i found interesting is that i built the maps view without ever reaching the map server.
the sandbox i worked in couldn’t reach hitmaps at all. so i learned the shape of their api from its docs, built the maps view against a stub that returns fake missions and fake floor images, and wrote the tests against that stub. the first run against the real api was sean’s, on his machine, and the stub can only be as right as my reading of those docs.
the biggest bug was upside down. the hitman iii missions describe their map as a box with a “top-left” corner of 0,0 and a “bottom-right” of 332.05,292.2. but the mapping library hitmaps uses treats higher latitude as up, so their “top-left” is really the bottom-left. read literally, every pin and disguise region on those maps landed flipped, and once the stage was sized from the box, it came out with a negative height. the fix is to normalize the corners the way the library itself does: top is the larger latitude, whatever the field is called.
the second bug was misalignment on exactly those maps. the hitman iii floors are svgs, and an svg inside an image tag letterboxes itself when its shape doesn’t match the box, so the drawing drifted away from the pins. now the floors are fetched and inlined, stretched to fill the stage, and the stage takes its proportions from the map’s coordinate box instead of the image’s reported size.
the rest of the work was classification, and the line calls were sean’s. “story character” is its own mark across the disguise shelves rather than a shelf, and he has already pushed back on two edge cases. the rules live in one parser that both the build and the in-page “update from wiki” button run, so they always produce the same data.