diff --git a/src/artifact.c b/src/artifact.c index ff00eebf2..3d06f29e5 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -4123,7 +4123,19 @@ struct obj *obj; obj->age += HPasses_walls; /* Time begins after phasing ends */ break; case SUMMONING: { - create_critters(rnd(10), (struct permonst *) 0, TRUE); + /* Roughly copied from make_sphere */ + for (int i = 0; i < rn1(7, 4); i++) { + mtmp = make_helper(NON_PM, u.ux, u.uy); + if (!mtmp) { + pline("But it quickly fades away."); + break; + } else { + mtmp->mtame = 10; + /* Same lifetime as reading a spell-card */ + mtmp->msummoned = 15 + u.ulevel * 4; + mtmp->uexp = 1; + } + } break; } case SMOKE_CLOUD: { diff --git a/src/dog.c b/src/dog.c index 5e5d69e3c..4e606edec 100644 --- a/src/dog.c +++ b/src/dog.c @@ -220,14 +220,16 @@ xchar x, y; int trycnt = 100; do { - pm = &mons[mnum]; - mtmp = makemon(pm, x, y, - MM_EDOG | MM_IGNOREWATER | NO_MINVENT); + if (mnum != NON_PM) + pm = &mons[mnum]; + else + pm = rndmonst(); + mtmp = makemon(pm, x, y, MM_EDOG | MM_IGNOREWATER | NO_MINVENT); } while (!mtmp && --trycnt > 0); if (!mtmp) return (struct monst *) 0; /* genocided */ - + initedog(mtmp); u.uconduct.pets++; mtmp->msleeping = 0; @@ -239,6 +241,7 @@ xchar x, y; mtmp->weapon_check = NEED_HTH_WEAPON; (void) mon_wield_item(mtmp); } + return mtmp; }