commit 46b98bab5b951c16f3c6766f23acb22c3046608c
Author: PatR <rankin@nethack.org> Date: Mon Apr 7 13:58:28 2025 -0700 fix issue #1404 - re-tamed feral pet starves Issue reported by k21971: changes in 'struct edog' initialization resulted in re-taming of a feral former pet producing a tame monst that immediately dies of starvation. I didn't look at the earlier behavior, just forced hunger to be initialized separately from other edog fields. Fixes #1404
This commit is contained in:
28
src/dog.c
28
src/dog.c
@@ -44,6 +44,8 @@ free_edog(struct monst *mtmp)
|
|||||||
void
|
void
|
||||||
initedog(struct monst *mtmp, boolean everything)
|
initedog(struct monst *mtmp, boolean everything)
|
||||||
{
|
{
|
||||||
|
struct edog *edogp = EDOG(mtmp);
|
||||||
|
long minhungry = svm.moves + 1000L;
|
||||||
schar minimumtame = is_domestic(mtmp->data) ? 10 : 5;
|
schar minimumtame = is_domestic(mtmp->data) ? 10 : 5;
|
||||||
|
|
||||||
mtmp->mtame = max(minimumtame, mtmp->mtame);
|
mtmp->mtame = max(minimumtame, mtmp->mtame);
|
||||||
@@ -53,18 +55,22 @@ initedog(struct monst *mtmp, boolean everything)
|
|||||||
if (everything) {
|
if (everything) {
|
||||||
mtmp->mleashed = 0;
|
mtmp->mleashed = 0;
|
||||||
mtmp->meating = 0;
|
mtmp->meating = 0;
|
||||||
EDOG(mtmp)->droptime = 0;
|
edogp->droptime = 0;
|
||||||
EDOG(mtmp)->dropdist = 10000;
|
edogp->dropdist = 10000;
|
||||||
EDOG(mtmp)->apport = ACURR(A_CHA);
|
edogp->apport = ACURR(A_CHA);
|
||||||
EDOG(mtmp)->whistletime = 0;
|
edogp->whistletime = 0;
|
||||||
EDOG(mtmp)->hungrytime = 1000 + svm.moves;
|
/* edogp->hungrytime = 0L; // set below */
|
||||||
EDOG(mtmp)->ogoal.x = -1; /* force error if used before set */
|
edogp->ogoal.x = -1; /* force error if used before set */
|
||||||
EDOG(mtmp)->ogoal.y = -1;
|
edogp->ogoal.y = -1;
|
||||||
EDOG(mtmp)->abuse = 0;
|
edogp->abuse = 0;
|
||||||
EDOG(mtmp)->revivals = 0;
|
edogp->revivals = 0;
|
||||||
EDOG(mtmp)->mhpmax_penalty = 0;
|
edogp->mhpmax_penalty = 0;
|
||||||
EDOG(mtmp)->killed_by_u = 0;
|
edogp->killed_by_u = 0;
|
||||||
}
|
}
|
||||||
|
/* always set for newly tamed pet or feral former pet; hungrytime might
|
||||||
|
already be higher when taming magic affects already tame monst */
|
||||||
|
if (edogp->hungrytime < minhungry)
|
||||||
|
edogp->hungrytime = minhungry;
|
||||||
/* livelog first pet, but only if you didn't start with one (the starting
|
/* livelog first pet, but only if you didn't start with one (the starting
|
||||||
* pet will be initialized before in_moveloop is true) */
|
* pet will be initialized before in_moveloop is true) */
|
||||||
if (!u.uconduct.pets && program_state.in_moveloop) {
|
if (!u.uconduct.pets && program_state.in_moveloop) {
|
||||||
|
|||||||
Reference in New Issue
Block a user