Well, the original bug in this thread should already be fixed: see the
NPCs and Platforms thread. However, depending on how it was fixed, things like hot tiles may still be an issue.
I gave a quick try at fixing it myself, but it's a much more complicated issue than I originally thought. The obvious fix seemed to be to have a new subroutine (which I called GetMovementType) that I placed in both Monster.cpp and Character.cpp. For Monsters, it would simply return the eMovement of the object. For Characters, it would check the identity it was using and output an appropriate movement type for the character. And then for every reference that checked for a monster's eMovement, I had it use GetMovementType instead. This worked quite well... except... now NPC Seeps couldn't cross floors. (Though at least they didn't *die* when caught outside a wall)
I'm pretty sure such behaviour breaks a few scripted holds, so that wasn't optimal. So it became clear that for some things, it's okay to check eMovement, while for others, it perhaps needs a bit more help.
Perhaps another way would be some boolean subroutines like IsFlying or IsWaterDwelling, and have particular routines where it's important to know that use those. Also, there may be code in characters that duplicates things that might be better off already handled by movement type... it's difficult to be sure without a thorough check.
Anyways, that's what I could find after a quick look. I'm not submitting a patch due to the Seep issue - it'd take time to decide which subroutines should use Movement Type and which won't, and that's probably better handled by someone more familiar with the code. Sorry.