A practical argument for removing (monster) invisibility
At the bare minimum, monster invisibility is bad because it is horrible to work around it in coding and design, especially UI design:
- Crawl allows you to take a lot of actions that are useless or should be useless, purely because of the possibility that an invisible monster is around. This includes: shooting beams and projectiles along empty paths, casting airstrike at empty space, attacking empty space (breadswinging needs to be fixed anyway), casting conjure flame at occupied spaces, closing a door on an occupied space, etc. Without monster invisibility, such action attempts could be dismissed as typos and not performed, saving people turns/MP/wand charges. With monster invisibility, you have z -> Z as the most popular macro in the game.
- The interaction with automated actions is awful. Autoexplore/travel/rest/eat shouldn't start if there's a monster in view. Ever. But they do because of "invisible" monsters, even though the player nearly always knows there's a monster there! This pales in comparison to what happens with autopickup, though: whenever a monster turns invisible or an invisible monster attacks in melee, autopickup turns off, and then it theoretically turns back on when the monster becomes visible or dies. This results in the player having to turn autopickup back on themselves half the time, since the monster became visible or died on a turn that it wasn't in LOS, or the player simply used stairs or something, and the interaction with multiple invisible monsters only gets worse. Even if you somehow magically fixed all the problems with the implementation disabling/enabling autopickup, you'd still be left with the fact that the behaviour is weird in the first place. The first time a monster went invisible and I saw "Deactivating autopickup", I thought I had accidentally pressed a key that deactivates autopickup, because why would an unspoiled player expect a monster to change their interface settings? I figured it out quickly, sure, but still, it's a jarring thing to encounter.
- Targeters like the fireball targeter will outright give the player wrong information about which squares will be hit, in the presence of invisible monsters, even though the player probably knows the monster is there. But you can't assume the player knows the monster is there, because then they'll use the targeter every turn to detect any invisible monsters.
- Monster AI's interaction with invisible monsters is unavoidably bad. You can make monsters always see invisible monsters, but then invisibility on your allies is useless, which is weird. You can make monsters not see invisible monsters, but then you get cases where it can be useful to turn a monster invisible on purpose to make other monsters hit it with ranged attacks.
A more reasonable implementation would be to only hide the monster's current health, not its position. I don't think this is interesting, though - it certainly wasn't for undead.