fix tamed pet issue #1379

fixes #1379
This commit is contained in:
nhmall
2025-02-12 23:26:03 -05:00
parent f8773f65db
commit a68bc3b3fb
4 changed files with 24 additions and 20 deletions

View File

@@ -743,7 +743,7 @@ extern int count_worn_armor(void);
extern void newedog(struct monst *) NONNULLARG1;
extern void free_edog(struct monst *) NONNULLARG1;
extern void initedog(struct monst *) NONNULLARG1;
extern void initedog(struct monst *, boolean) NONNULLARG1;
extern struct monst *make_familiar(struct obj *, coordxy, coordxy, boolean);
extern struct monst *makedog(void);
extern void update_mlstmv(void);

View File

@@ -42,25 +42,27 @@ free_edog(struct monst *mtmp)
}
void
initedog(struct monst *mtmp)
initedog(struct monst *mtmp, boolean everything)
{
mtmp->mtame = is_domestic(mtmp->data) ? 10 : 5;
mtmp->mpeaceful = 1;
mtmp->mavenge = 0;
set_malign(mtmp); /* recalc alignment now that it's tamed */
mtmp->mleashed = 0;
mtmp->meating = 0;
EDOG(mtmp)->droptime = 0;
EDOG(mtmp)->dropdist = 10000;
EDOG(mtmp)->apport = ACURR(A_CHA);
EDOG(mtmp)->whistletime = 0;
EDOG(mtmp)->hungrytime = 1000 + svm.moves;
EDOG(mtmp)->ogoal.x = -1; /* force error if used before set */
EDOG(mtmp)->ogoal.y = -1;
EDOG(mtmp)->abuse = 0;
EDOG(mtmp)->revivals = 0;
EDOG(mtmp)->mhpmax_penalty = 0;
EDOG(mtmp)->killed_by_u = 0;
if (everything) {
mtmp->mleashed = 0;
mtmp->meating = 0;
EDOG(mtmp)->droptime = 0;
EDOG(mtmp)->dropdist = 10000;
EDOG(mtmp)->apport = ACURR(A_CHA);
EDOG(mtmp)->whistletime = 0;
EDOG(mtmp)->hungrytime = 1000 + svm.moves;
EDOG(mtmp)->ogoal.x = -1; /* force error if used before set */
EDOG(mtmp)->ogoal.y = -1;
EDOG(mtmp)->abuse = 0;
EDOG(mtmp)->revivals = 0;
EDOG(mtmp)->mhpmax_penalty = 0;
EDOG(mtmp)->killed_by_u = 0;
}
u.uconduct.pets++;
}
@@ -155,7 +157,7 @@ make_familiar(struct obj *otmp, coordxy x, coordxy y, boolean quietly)
if (is_pool(mtmp->mx, mtmp->my) && minliquid(mtmp))
return (struct monst *) 0;
initedog(mtmp);
initedog(mtmp, TRUE);
mtmp->msleeping = 0;
if (otmp) { /* figurine; resulting monster might not become a pet */
chance = rn2(10); /* 0==tame, 1==peaceful, 2==hostile */
@@ -244,7 +246,7 @@ makedog(void)
if (!gp.petname_used++ && *petname)
mtmp = christen_monst(mtmp, petname);
initedog(mtmp);
initedog(mtmp, TRUE);
return mtmp;
}
@@ -1214,7 +1216,9 @@ tamedog(
/* add the pet extension */
if (!has_edog(mtmp)) {
newedog(mtmp);
initedog(mtmp);
initedog(mtmp, TRUE);
} else {
initedog(mtmp, FALSE);
}
if (obj) { /* thrown food */

View File

@@ -2572,7 +2572,7 @@ cloneu(void)
return NULL;
mon->mcloned = 1;
mon = christen_monst(mon, svp.plname);
initedog(mon);
initedog(mon, TRUE);
mon->m_lev = gy.youmonst.data->mlevel;
mon->mhpmax = u.mhmax;
mon->mhp = u.mh / 2;

View File

@@ -1680,7 +1680,7 @@ seffect_light(struct obj **sobjp)
mon = makemon(&mons[pm], u.ux, u.uy,
MM_EDOG | NO_MINVENT | MM_NOMSG);
if (mon) {
initedog(mon);
initedog(mon, TRUE);
mon->msleeping = 0;
mon->mcan = TRUE;
if (canspotmon(mon))