#dipping from steed

Fix the reported bug of an unskilled rider who is unable to pick
items off the floor while mounted still being able to dip into water.
There might be other actions which need similar checking; this one only
handles the dip into pool/moat case.
This commit is contained in:
nethack.rankin
2002-10-11 00:46:37 +00:00
parent 329ce86056
commit 2c3964e619
5 changed files with 20 additions and 6 deletions

View File

@@ -270,6 +270,8 @@ class genocide that killed polymorphed self while `Unchanging' reported
incomplete cause of death and possibly left rest of class in bones
class genocide of @ by human or elf character polymorphed into non-@ gave
"you feel dead inside" message twice
unskilled rider who can't reach items on floor also can't dip into moat or
pool from flying steed
Platform- and/or Interface-Specific Fixes

View File

@@ -1876,6 +1876,7 @@ E struct obj *FDECL(findgold, (struct obj *));
/* ### steed.c ### */
#ifdef STEED
E void NDECL(rider_cant_reach);
E boolean FDECL(can_saddle, (struct monst *));
E int FDECL(use_saddle, (struct obj *));
E boolean FDECL(can_ride, (struct monst *));

View File

@@ -1369,8 +1369,7 @@ int x, y;
if (!can_reach_floor()) {
#ifdef STEED
if (u.usteed && P_SKILL(P_RIDING) < P_BASIC)
You("aren't skilled enough to reach from %s.",
mon_nam(u.usteed));
rider_cant_reach(); /* not skilled enough to reach */
else
#endif
You("cannot reach the %s.", surface(x, y));

View File

@@ -593,7 +593,7 @@ peffects(otmp)
if (Free_action)
You("stiffen momentarily.");
else {
if (Levitation||Is_airlevel(&u.uz)||Is_waterlevel(&u.uz))
if (Levitation || Is_airlevel(&u.uz)||Is_waterlevel(&u.uz))
You("are motionlessly suspended.");
#ifdef STEED
else if (u.usteed)
@@ -1546,9 +1546,14 @@ dodip()
tmp = (here == POOL) ? "pool" : "moat";
Sprintf(qbuf, "Dip it into the %s?", tmp);
if (yn(qbuf) == 'y') {
if (Levitation)
if (Levitation) {
floating_above(tmp);
else {
#ifdef STEED
} else if (u.usteed && !is_swimmer(u.usteed->data) &&
P_SKILL(P_RIDING) < P_BASIC) {
rider_cant_reach(); /* not skilled enough to reach */
#endif
} else {
(void) get_wet(obj);
if (obj->otyp == POT_ACID) useup(obj);
}

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)steed.c 3.4 2002/09/08 */
/* SCCS Id: @(#)steed.c 3.4 2002/10/10 */
/* Copyright (c) Kevin Hugo, 1998-1999. */
/* NetHack may be freely redistributed. See license for details. */
@@ -14,6 +14,13 @@ static NEARDATA const char steeds[] = {
STATIC_DCL boolean FDECL(landing_spot, (coord *, int));
/* caller has decided that hero can't reach something while mounted */
void
rider_cant_reach()
{
You("aren't skilled enough to reach from %s.", y_monnam());
}
/*** Putting the saddle on ***/
/* Can this monster wear a saddle? */