From: arromdee Date: Wed, 27 Feb 2002 02:17:01 +0000 (+0000) Subject: cloning minions X-Git-Tag: MOVE2GIT~3110 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7827e1784870666a80f2afe5804648c0f870e7d1;p=nethack cloning minions Janet pointed this one out to me... --- diff --git a/src/makemon.c b/src/makemon.c index b579b1151..1f43fee03 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -725,14 +725,24 @@ struct monst *mon; if (mon->mtame) { struct monst *m3; - /* because m2 is a copy of mon it is tame but not init'ed. - * however, tamedog will not re-tame a tame dog, so m2 - * must be made non-tame to get initialized properly. - */ - m2->mtame = 0; - if ((m3 = tamedog(m2, (struct obj *)0)) != 0) { + if (mon->isminion) { + m3 = newmonst(sizeof(struct epri) + mon->mnamelth); + *m3 = *m2; + m3->mxlth = sizeof(struct epri); + if (m2->mnamelth) Strcpy(NAME(m3), NAME(m2)); + *(EPRI(m3)) = *(EPRI(mon)); + replmon(m2, m3); m2 = m3; - *(EDOG(m2)) = *(EDOG(mon)); + } else { + /* because m2 is a copy of mon it is tame but not init'ed. + * however, tamedog will not re-tame a tame dog, so m2 + * must be made non-tame to get initialized properly. + */ + m2->mtame = 0; + if ((m3 = tamedog(m2, (struct obj *)0)) != 0) { + m2 = m3; + *(EDOG(m2)) = *(EDOG(mon)); + } } } return m2; diff --git a/src/pline.c b/src/pline.c index fc953d0aa..08a6d1958 100644 --- a/src/pline.c +++ b/src/pline.c @@ -286,8 +286,11 @@ register struct monst *mtmp; if (mtmp->mtame) { Strcat(info, ", tame"); #ifdef WIZARD if (wizard) { - Sprintf(eos(info), " (%d; hungry %ld; apport %d)", - mtmp->mtame, EDOG(mtmp)->hungrytime, EDOG(mtmp)->apport); + Sprintf(eos(info), " (%d", mtmp->mtame); + if (!mtmp->isminion) + Sprintf(eos(info), "; hungry %ld; apport %d", + EDOG(mtmp)->hungrytime, EDOG(mtmp)->apport); + Strcat(info, ")"); } #endif }