I took a look at this for kicks, and here\'s what I came up with.
In CRoomWidget:: DirtySpriteTiles(), there\'s all this nice code that keeps track of where swords are and where raised swords are, and then marks the appropriate tiles as dirty. It all looks like it\'s working correctly.
Then there\'s this UpdateDrawSquareInfo(), which clears all the old tile information (including raisedSword). UpdateDrawSquareInfo() gets called by UpdateFromPlots() which is called every frame if there\'s a Serpent in the room, since the Serpent calls DbRoom:

lot().
I\'m not submitting this as a patch, but if you comment out the
memset(this->
pTileInfo, 0, dwSquareCount * sizeof(TILEINFO));
it seems to work. I didn\'t test very much *at all*, so I don\'t know if that breaks other stuff, but it certainly makes the bug in that particular situation disappear.
____________________________
The greatness of a nation and its moral progress can be judged by the way it treats its animals.
--
Mahatma Gandhi