riding a non-swimming steed into water

Patch from <Someone> to the list on 10/01/2001.  The changes cause riding a steed
into water to result in a dismount, and, if the steed can't survive in
water, the death of the steed, with the usual pet-death penalties.
This commit is contained in:
cohrs
2002-01-16 07:05:43 +00:00
parent 4361289ec3
commit e3ac04eac1
3 changed files with 29 additions and 9 deletions
+1
View File
@@ -385,6 +385,7 @@ messages consistent for all monster spells
monsters casting spells at your displaced image now set mspec_used monsters casting spells at your displaced image now set mspec_used
monsters without ranged spells don't print curse messages for ranged spells monsters without ranged spells don't print curse messages for ranged spells
going down to floor using > should set Heart of Ahriman invocation timeout 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 Platform- and/or Interface-Specific Fixes
+14 -1
View File
@@ -1348,8 +1348,21 @@ stillinwater:;
/* limit recursive calls through teleds() */ /* limit recursive calls through teleds() */
if(is_lava(u.ux,u.uy) && lava_effects()) if(is_lava(u.ux,u.uy) && lava_effects())
return; 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; return;
}
} }
check_special_room(FALSE); check_special_room(FALSE);
#ifdef SINKS #ifdef SINKS
+14 -8
View File
@@ -552,15 +552,19 @@ dismount_steed(reason)
* able to walk onto a square with a hole, and autopickup before * able to walk onto a square with a hole, and autopickup before
* falling into the hole). * falling into the hole).
*/ */
/* Keep steed here, move the player to cc; teleds() clears u.utrap */ /* [ALI] No need to move the player if the steed died. */
in_steed_dismounting = TRUE; if (!DEADMONSTER(mtmp)) {
teleds(cc.x, cc.y); /* Keep steed here, move the player to cc;
in_steed_dismounting = FALSE; * teleds() clears u.utrap
*/
/* Put your steed in your trap */ in_steed_dismounting = TRUE;
if (save_utrap) teleds(cc.x, cc.y);
(void) mintrap(mtmp); in_steed_dismounting = FALSE;
/* Put your steed in your trap */
if (save_utrap)
(void) mintrap(mtmp);
}
/* Couldn't... try placing the steed */ /* Couldn't... try placing the steed */
} else if (enexto(&cc, u.ux, u.uy, mtmp->data)) { } else if (enexto(&cc, u.ux, u.uy, mtmp->data)) {
/* Keep player here, move the steed to cc */ /* Keep player here, move the steed to cc */
@@ -574,7 +578,9 @@ dismount_steed(reason)
} }
/* Return the player to the floor */ /* Return the player to the floor */
in_steed_dismounting = TRUE;
(void) float_down(0L, W_SADDLE); (void) float_down(0L, W_SADDLE);
in_steed_dismounting = FALSE;
flags.botl = 1; flags.botl = 1;
if (reason != DISMOUNT_ENGULFED) { if (reason != DISMOUNT_ENGULFED) {
(void)encumber_msg(); (void)encumber_msg();