pet->meating doesn't imply helplessness
The overly simplistic fix to prevent pets from picking up objects
while they were busy eating had unwanted side-effects, making them
seem to be paralyzed in some situations such as #chat. Reverse the
recent change done in commit 754e9333f5
("fix pet picking something up while eating") and handle it in the
pet pick-up code instead.
This commit is contained in:
+1
-1
@@ -239,7 +239,7 @@ struct monst {
|
|||||||
((m)->data->mlet == S_TROLL && (o) && (o)->oartifact == ART_TROLLSBANE)
|
((m)->data->mlet == S_TROLL && (o) && (o)->oartifact == ART_TROLLSBANE)
|
||||||
|
|
||||||
#define engulfing_u(mon) (u.uswallow && (u.ustuck == (mon)))
|
#define engulfing_u(mon) (u.uswallow && (u.ustuck == (mon)))
|
||||||
#define helpless(mon) ((mon)->msleeping || !(mon)->mcanmove || (mon)->meating)
|
#define helpless(mon) ((mon)->msleeping || !(mon)->mcanmove)
|
||||||
|
|
||||||
/* Get the maximum difficulty monsters that can currently be generated,
|
/* Get the maximum difficulty monsters that can currently be generated,
|
||||||
given the current level difficulty and the hero's level. */
|
given the current level difficulty and the hero's level. */
|
||||||
|
|||||||
+7
-5
@@ -385,7 +385,7 @@ dog_invent(struct monst *mtmp, struct edog *edog, int udist)
|
|||||||
int carryamt = 0;
|
int carryamt = 0;
|
||||||
struct obj *obj, *otmp;
|
struct obj *obj, *otmp;
|
||||||
|
|
||||||
if (helpless(mtmp))
|
if (helpless(mtmp) || mtmp->meating)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
omx = mtmp->mx;
|
omx = mtmp->mx;
|
||||||
@@ -938,13 +938,14 @@ pet_ranged_attk(struct monst *mtmp)
|
|||||||
* (may have attacked something)
|
* (may have attacked something)
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
dog_move(register struct monst *mtmp,
|
dog_move(
|
||||||
int after) /* this is extra fast monster movement */
|
struct monst *mtmp, /* pet */
|
||||||
|
int after) /* this is extra fast monster movement */
|
||||||
{
|
{
|
||||||
int omx, omy; /* original mtmp position */
|
int omx, omy; /* original mtmp position */
|
||||||
int appr, whappr, udist;
|
int appr, whappr, udist;
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
register struct edog *edog = EDOG(mtmp);
|
struct edog *edog = EDOG(mtmp);
|
||||||
struct obj *obj = (struct obj *) 0;
|
struct obj *obj = (struct obj *) 0;
|
||||||
xint16 otyp;
|
xint16 otyp;
|
||||||
boolean has_edog, cursemsg[9], do_eat = FALSE;
|
boolean has_edog, cursemsg[9], do_eat = FALSE;
|
||||||
@@ -979,9 +980,10 @@ dog_move(register struct monst *mtmp,
|
|||||||
return MMOVE_MOVED;
|
return MMOVE_MOVED;
|
||||||
}
|
}
|
||||||
udist = 1;
|
udist = 1;
|
||||||
} else if (!udist)
|
} else if (!udist) {
|
||||||
/* maybe we tamed him while being swallowed --jgm */
|
/* maybe we tamed him while being swallowed --jgm */
|
||||||
return MMOVE_NOTHING;
|
return MMOVE_NOTHING;
|
||||||
|
}
|
||||||
|
|
||||||
nix = omx; /* set before newdogpos */
|
nix = omx; /* set before newdogpos */
|
||||||
niy = omy;
|
niy = omy;
|
||||||
|
|||||||
Reference in New Issue
Block a user