monsters casting spells at your displaced image now set mspec_used
monsters without ranged spells don't print curse messages for ranged spells
going down to floor using > should set Heart of Ahriman invocation timeout
+riding a steed into water kills the steed if it cannot swim, with penalties
Platform- and/or Interface-Specific Fixes
/* limit recursive calls through teleds() */
if(is_lava(u.ux,u.uy) && lava_effects())
return;
- if(is_pool(u.ux,u.uy) && !Wwalking && drown())
+ if (is_pool(u.ux, u.uy)) {
+#ifdef STEED
+ if (u.usteed && !is_flyer(u.usteed->data) &&
+ !is_floater(u.usteed->data) &&
+ !is_clinger(u.usteed->data)) {
+ dismount_steed(Underwater ?
+ DISMOUNT_FELL : DISMOUNT_GENERIC);
+ /* dismount_steed() -> float_down() -> pickup() */
+ if (!Is_airlevel(&u.uz) && !Is_waterlevel(&u.uz))
+ pick = FALSE;
+ } else
+#endif
+ if (!Wwalking && drown())
return;
+ }
}
check_special_room(FALSE);
#ifdef SINKS
* able to walk onto a square with a hole, and autopickup before
* falling into the hole).
*/
- /* Keep steed here, move the player to cc; teleds() clears u.utrap */
- in_steed_dismounting = TRUE;
- teleds(cc.x, cc.y);
- in_steed_dismounting = FALSE;
-
- /* Put your steed in your trap */
- if (save_utrap)
- (void) mintrap(mtmp);
-
+ /* [ALI] No need to move the player if the steed died. */
+ if (!DEADMONSTER(mtmp)) {
+ /* Keep steed here, move the player to cc;
+ * teleds() clears u.utrap
+ */
+ in_steed_dismounting = TRUE;
+ teleds(cc.x, cc.y);
+ in_steed_dismounting = FALSE;
+
+ /* Put your steed in your trap */
+ if (save_utrap)
+ (void) mintrap(mtmp);
+ }
/* Couldn't... try placing the steed */
} else if (enexto(&cc, u.ux, u.uy, mtmp->data)) {
/* Keep player here, move the steed to cc */
}
/* Return the player to the floor */
+ in_steed_dismounting = TRUE;
(void) float_down(0L, W_SADDLE);
+ in_steed_dismounting = FALSE;
flags.botl = 1;
if (reason != DISMOUNT_ENGULFED) {
(void)encumber_msg();