(08-08-2010, 12:05 AM)Bolty Wrote: I dug this up out of the grave of the old website after a request for it. Are there any more to add after all these years?
Yes. These are bugs I have not previously seen reported:
- When processing melee knockback, the game reuses the function meant to check if a monster can walk into a tile. As a consequence, a monster cannot be knocked into a tile it would not walk into on its own. Among other things, this means you cannot knockback a monster if that would take it "too far" from its boss.
- When decreasing wake time of a monster not in player light, The Dark Lord is meant to be exempt from the decrease. However, the code checks to see if the monster's attack type is equal to the slot of The Dark Lord, so the check always fails and thus The Dark Lord is subject to the same 12.75 seconds check that other monsters use. This is clearly a bug, since there are fewer than 40 attack types, but the slot of The Dark Lord is 0x6e, so this is not just a check for some unused monster AI.
- As a sub-bug, which mostly only appears if the damage-for-resistance bug is fixed, the game is excessively eager about reporting monster damage over the network. If multiple spell effects damage a monster in a given turn, the owner of those spell effects will send one damage message per spell effect. For high density spells like Chain Lightning, this can flood the outbound queue, causing more important messages to be delayed or lost. Among the messages that can be lost is the message that makes a monster dead, so one player might insist that a monster was dead even as it is alive, well, and dangerous on other player's systems. This is different from the typical ghost monster bug, since monsters alive due to this bug are fully alive on the remote systems, and can be (re)killed by the remote players. The typical ghost monster bug results in a monster that is mobile, but invincible and (iirc) not selectable.
- When the cursor is switched to an hourglass because another player is lagging, the text in the heads down display area is changed to read
"-- Network timeout --
-- Waiting for players --", but the UI is never redrawn, so the user cannot see this. - When a monster is struck by a spell, it is set to fully awake and its target is set to the caster -- but only if the monster was fully asleep. A monster which is awake but outside light radius will not have its target changed.
- When a monster is killed by another monster (Golem vs. monster or monster vs. Golem), the wrong death sound is played. You hear a Golem death sound each time the golem kills an enemy, and hear the death sound of the killer when the golem is finally destroyed.
- In an effort to make Town Portal easier to select in a hurry, the game considers you to highlight the portal if you get your cursor on the portal's tile or on one of several surrounding tiles. Unfortunately, the stacking order of the highlight checks is such that a town portal placed in front of a stairwell can supersede the stairwell, making it impossible to highlight the stairwell.
- Quirk: pressing an unbound spell hotkey does nothing. This can be disastrous if you have Teleport selected, press a key that you expected to be an offensive spell, and right click on a monster. It would be safer if pressing an unbound hotkey switched you to having no spell selected.
- Quirk: there is a single Black Knight in the room with The Dark Lord. This may have been a hook to place The Arch-Litch Malignus, which was changed late in the cycle when Malignus was deemed not ready to ship. If so, the developers may have meant to change the Malignus reservation to be a Blood Knight so that it would not be noticed, but selected the basic Black Knight instead.
These are bugs I believe others have reported before me, but which are not listed here:
- When a monster is injured by a spell which it resists, the damage is not conveyed over the network, because the routine that sends damage is also responsible for putting the monster into hit recovery. Resistant monsters skip hit recovery (presumably, by design), but they also skip reporting damage. To demonstrate: have a sorcerer Fireball a Blood Knight to be almost dead, then immediately have a warrior/rogue try to kill it physically. It will take as long as if the sorcerer had done nothing. I believe Sabra posted about this some years ago.
- When a monster is injured by a spell which it resists, the mask of players who should receive credit for it is not updated. This is another aspect of the damage-for-resistance bug. The handling of the kill credit mask was placed in the routine which checks for, and if necessary applies, hit recovery.
With regard to the documented bug about Fireball and spikes, this appears to have been an attempt to avoid having Fireball penetrate solid objects. If the check is removed so that a Fireball which crosses a spike retains its splash damage, then a Fireball can be aimed at a wall and deal splash damage to monsters on the far side of the wall - outside the player's sight! Also, I seem to recall that the problem also applied if the sorcerer lost sight of the impact site before impact. For example, line up three Snow Witches, shoot a Fireball at the middle witch, then immediately teleport to a spot where you cannot see any of the witches. When the Fireball detonates, only the original target will die.
With regard to the traps and restored monsters bug in the thread linked by weakwarrior, this is probably because the game does not update the compressed level state that records monster location/hitpoint information when a monster is killed by a trap. Thus, when the level is reconstituted from the compressed state, the monster is returned to the hitpoint value it had immediately before it was killed by the trap.