under !GOLDOBJ, remove temp gold from inventory during restore
Staff of Aesculapius did not always cure sliming
correct singularization of fungi, liches, vortices
+prevent "remove_object: obj not on floor" panic for iron ball placement if
+ riding while punished leads to a fall off steed when changing levels
Platform- and/or Interface-Specific Fixes
-/* SCCS Id: @(#)do.c 3.4 2001/11/29 */
+/* SCCS Id: @(#)do.c 3.4 2002/05/31 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
freeinv(uball);
}
}
- losehp(rnd(3), "falling downstairs", KILLED_BY);
#ifdef STEED
- if (u.usteed) {
+ /* falling off steed has its own losehp() call */
+ if (u.usteed)
dismount_steed(DISMOUNT_FELL);
- if (Punished) unplacebc();
- }
+ else
#endif
+ losehp(rnd(3), "falling downstairs", KILLED_BY);
selftouch("Falling, you");
} else if (u.dz && at_ladder)
You("climb down the ladder.");
-/* SCCS Id: @(#)teleport.c 3.4 2002/03/09 */
+/* SCCS Id: @(#)teleport.c 3.4 2002/05/31 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
register int nux,nuy;
boolean allow_drag;
{
- boolean ball_still_in_range = FALSE;
+ boolean ball_active = (Punished && uball->where != OBJ_FREE),
+ ball_still_in_range = FALSE;
/* If they have to move the ball, then drag if allow_drag is true;
* otherwise they are teleporting, so unplacebc().
* dragging the ball is completely impossible (ball in range but there's
* rock in the way), in which case it teleports the ball on its own.
*/
- if (Punished) {
+ if (ball_active) {
if (!carried(uball) && distmin(nux, nuy, uball->ox, uball->oy) <= 2)
ball_still_in_range = TRUE; /* don't have to move the ball */
else {
u.uswldtim = u.uswallow = 0;
docrt();
}
- if (Punished) {
+ if (ball_active) {
if (ball_still_in_range || allow_drag) {
int bc_control;
xchar ballx, bally, chainx, chainy;
u.ux = nux;
u.uy = nuy;
fill_pit(u.ux0, u.uy0);
- if (Punished) {
+ if (ball_active) {
if (!ball_still_in_range && !allow_drag)
placebc();
}