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

@@ -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 */