cloning minions

Janet pointed this one out to me...
This commit is contained in:
arromdee
2002-02-27 02:17:01 +00:00
parent f33ab026b8
commit 7827e17848
2 changed files with 22 additions and 9 deletions

View File

@@ -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;

View File

@@ -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
}