<Someone>'s were_summon rules

>Hemmed in by one invisible wererat?
><Someone>: Should I feel hemmed in if I can see that a wererat summons
>zero rats? Can the invisible wererat hem me in all by itself? And
>even if it had summoned anything, wouldn't a different message had
>been clearer (for isntance, "Rats appear around you!"); after all,
>I could see *what* was hemming me in.
>I agree that the current messages (and even the ones aspired to by the
>comment) are non-ideal.

<Someone>'s suggested set-up:
Seen summoner, seen help    : "The wererat summons help!"
Seen summoner, unseen help: "The wererat summons help! You feel hemmed in."
Seen summoner, no help: "The wererat summons help! But none comes."
Unseen summoner, seen help: "(A rat appears|Rats appear) from
nowhere!"
Unseen summoner, unseen help: "You feel hemmed in."
Unseen summoner, no help: No message.
This commit is contained in:
nethack.allison
2003-10-23 12:13:21 +00:00
parent 95d01c00d0
commit e4495a6389
4 changed files with 43 additions and 15 deletions

View File

@@ -73,6 +73,7 @@ reading a cursed scroll of light in a corridor wouldn't display correctly
barbarians can become export in short sword skill barbarians can become export in short sword skill
samurai are now limited to master in martial arts skill; barbarians and samurai are now limited to master in martial arts skill; barbarians and
cavemen are now limited to master in bare-handed combat skill cavemen are now limited to master in bare-handed combat skill
tweak messages when werefoo summons help
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes

View File

@@ -477,15 +477,36 @@ mattacku(mtmp)
mdat = mtmp->data; mdat = mtmp->data;
if(!rn2(10) && !mtmp->mcan) { if(!rn2(10) && !mtmp->mcan) {
if(youseeit) { int numseen, numhelp;
char buf[BUFSZ];
numhelp = were_summon(mdat, FALSE, &numseen);
if (youseeit) {
pline("%s summons help!", Monnam(mtmp)); pline("%s summons help!", Monnam(mtmp));
} else if (numhelp > 0) {
You_feel("hemmed in."); if (numseen == 0)
/* Technically wrong; we really should check if you can see the You_feel("hemmed in.");
* help, but close enough... } else pline("But none comes.");
*/ } else {
if (!were_summon(mdat,FALSE) && youseeit) char *from_nowhere;
pline("But none comes."); if (!Deaf) {
pline("%s %s!", Something,
makeplural(growl_sound(mtmp)));
from_nowhere = "";
} else from_nowhere = " from nowhere";
if (numhelp > 0) {
if (numseen < 1) You_feel("hemmed in.");
else {
if (numseen == 1)
Sprintf(buf, "%s appears",
an(mdat->mname));
else
Sprintf(buf, "%s appear",
s_suffix(mdat->mname));
pline("%s%s!", upstart(buf), from_nowhere);
}
} /* else no help came; but you didn't know it tried */
}
} }
} }

View File

@@ -913,6 +913,7 @@ dospinweb()
int int
dosummon() dosummon()
{ {
int placeholder;
if (u.uen < 10) { if (u.uen < 10) {
You("lack the energy to send forth a call for help!"); You("lack the energy to send forth a call for help!");
return(0); return(0);
@@ -922,7 +923,7 @@ dosummon()
You("call upon your brethren for help!"); You("call upon your brethren for help!");
exercise(A_WIS, TRUE); exercise(A_WIS, TRUE);
if (!were_summon(youmonst.data,TRUE)) if (!were_summon(youmonst.data, TRUE, &placeholder))
pline("But none arrive."); pline("But none arrive.");
return(1); return(1);
} }

View File

@@ -81,17 +81,19 @@ register struct monst *mon;
possibly_unwield(mon, FALSE); possibly_unwield(mon, FALSE);
} }
boolean int
were_summon(ptr,yours) /* were-creature (even you) summons a horde */ were_summon(ptr,yours,visible) /* were-creature (even you) summons a horde */
register struct permonst *ptr; register struct permonst *ptr;
register boolean yours; register boolean yours;
int *visible; /* number of visible helpers created */
{ {
register int i, typ, pm = monsndx(ptr); register int i, typ, pm = monsndx(ptr);
register struct monst *mtmp; register struct monst *mtmp;
boolean success = FALSE; int total = 0;
*visible = 0;
if(Protection_from_shape_changers && !yours) if(Protection_from_shape_changers && !yours)
return FALSE; return 0;
for(i = rnd(5); i > 0; i--) { for(i = rnd(5); i > 0; i--) {
switch(pm) { switch(pm) {
@@ -111,11 +113,14 @@ register boolean yours;
continue; continue;
} }
mtmp = makemon(&mons[typ], u.ux, u.uy, NO_MM_FLAGS); mtmp = makemon(&mons[typ], u.ux, u.uy, NO_MM_FLAGS);
if (mtmp) success = TRUE; if (mtmp) {
total++;
if (canseemon(mtmp)) *visible += 1;
}
if (yours && mtmp) if (yours && mtmp)
(void) tamedog(mtmp, (struct obj *) 0); (void) tamedog(mtmp, (struct obj *) 0);
} }
return success; return total;
} }
void void