Possibly I can find when the graphical data is being read and then use a table lookup. it'd have to be very structured though, because drawing graphics could possibly be time sensitive.
idea --> table entries are 18(decimal) bytes each, start at some offset. Each class has an entry, no exceptions. entries in the table have sub-entries 2 bytes each corresponding to the map sprite entry to use for each weapon type (2 bytes because possibly more than 0xFF map sprites?). The 9th entry is the default -- if I load an entry and find it to be 0x0000 (or 0xFFFF if there is a map sprite that is 0x0000) then I just load the default and display that. Load the entry in the table based on the type of the equipped weapon.
edit: also, possibly, the table pointer could just be a pointer to an entry of this style anywhere? So we don't need consecutive table space (would save some time dereferencing and multiplying, and there's space in the structures for such a thing anyway)
Possible only issue - the functions used to call the methods might not pass in the memory location of the characters (in which case I suppose I can modify the callers to pass it in somehow).