formatting: src/t*.c - z*.c continuation lines
End of first pass, but '[&|?:][ \t]*$' doesn't catch trailing operater followed by end-of-line comment so more needs to be done. As with the past couple of batches, I've removed redundant parentheses from 'return' statements but only for files that had continuation fix-ups. I've also removed tabs from comments in some of the files, but didn't start until part way through this subset of the sources.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 teleport.c $NHDT-Date: 1433014241 2015/05/30 19:30:41 $ $NHDT-Branch: master $:$NHDT-Revision: 1.59 $ */
|
||||
/* NetHack 3.6 teleport.c $NHDT-Date: 1446078762 2015/10/29 00:32:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.61 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -387,7 +387,7 @@ boolean force_it;
|
||||
register struct obj *otmp;
|
||||
|
||||
if (mtmp == u.usteed)
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
|
||||
if (mtmp->mleashed) {
|
||||
otmp = get_mleash(mtmp);
|
||||
@@ -528,7 +528,7 @@ dotele()
|
||||
You("don't know that spell.");
|
||||
else
|
||||
You("are not able to teleport at will.");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -559,9 +559,9 @@ dotele()
|
||||
if (castit) {
|
||||
exercise(A_WIS, TRUE);
|
||||
if (spelleffects(sp_no, TRUE))
|
||||
return (1);
|
||||
return 1;
|
||||
else if (!wizard)
|
||||
return (0);
|
||||
return 0;
|
||||
} else {
|
||||
u.uen -= energy;
|
||||
context.botl = 1;
|
||||
@@ -576,11 +576,11 @@ dotele()
|
||||
(void) next_to_u();
|
||||
} else {
|
||||
You1(shudder_for_moment);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
if (!trap)
|
||||
morehungry(100);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -912,19 +912,19 @@ struct monst *mtmp;
|
||||
if (!xx) {
|
||||
/* no current location (migrating monster arrival) */
|
||||
if (dndest.nlx && On_W_tower_level(&u.uz))
|
||||
return ((yy & 2) != 0)
|
||||
^ /* inside xor not within */
|
||||
!within_bounded_area(x, y, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy);
|
||||
return (((yy & 2) != 0)
|
||||
/* inside xor not within */
|
||||
^ !within_bounded_area(x, y, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy));
|
||||
if (updest.lx && (yy & 1) != 0) /* moving up */
|
||||
return (within_bounded_area(x, y, updest.lx, updest.ly, updest.hx,
|
||||
updest.hy)
|
||||
return (within_bounded_area(x, y, updest.lx, updest.ly,
|
||||
updest.hx, updest.hy)
|
||||
&& (!updest.nlx
|
||||
|| !within_bounded_area(x, y, updest.nlx, updest.nly,
|
||||
updest.nhx, updest.nhy)));
|
||||
if (dndest.lx && (yy & 1) == 0) /* moving down */
|
||||
return (within_bounded_area(x, y, dndest.lx, dndest.ly, dndest.hx,
|
||||
dndest.hy)
|
||||
return (within_bounded_area(x, y, dndest.lx, dndest.ly,
|
||||
dndest.hx, dndest.hy)
|
||||
&& (!dndest.nlx
|
||||
|| !within_bounded_area(x, y, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy)));
|
||||
@@ -1212,16 +1212,17 @@ register struct obj *obj;
|
||||
|| (restricted_fall
|
||||
&& (!within_bounded_area(tx, ty, dndest.lx, dndest.ly,
|
||||
dndest.hx, dndest.hy)
|
||||
|| (dndest.nlx && within_bounded_area(
|
||||
tx, ty, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy)))) ||
|
||||
|| (dndest.nlx
|
||||
&& within_bounded_area(tx, ty,
|
||||
dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy))))
|
||||
/* on the Wizard Tower levels, objects inside should
|
||||
stay inside and objects outside should stay outside */
|
||||
(dndest.nlx && On_W_tower_level(&u.uz)
|
||||
&& within_bounded_area(tx, ty, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy)
|
||||
!= within_bounded_area(otx, oty, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy)));
|
||||
|| (dndest.nlx && On_W_tower_level(&u.uz)
|
||||
&& within_bounded_area(tx, ty, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy)
|
||||
!= within_bounded_area(otx, oty, dndest.nlx, dndest.nly,
|
||||
dndest.nhx, dndest.nhy)));
|
||||
|
||||
if (flooreffects(obj, tx, ty, "fall")) {
|
||||
return FALSE;
|
||||
|
||||
239
src/trap.c
239
src/trap.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 trap.c $NHDT-Date: 1445126429 2015/10/18 00:00:29 $ $NHDT-Branch: master $:$NHDT-Revision: 1.241 $ */
|
||||
/* NetHack 3.6 trap.c $NHDT-Date: 1446078765 2015/10/29 00:32:45 $ $NHDT-Branch: master $:$NHDT-Revision: 1.242 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -441,7 +441,7 @@ register int x, y, typ;
|
||||
if (Sokoban)
|
||||
maybe_finish_sokoban();
|
||||
}
|
||||
return (ttmp);
|
||||
return ttmp;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -600,10 +600,10 @@ int *fail_reason;
|
||||
/* statues of unique monsters from bones or wishing end
|
||||
up here (cant_revive() sets mnum to be doppelganger;
|
||||
mptr reflects the original form for use by newcham()) */
|
||||
if ((mnum == PM_DOPPELGANGER && mptr != &mons[PM_DOPPELGANGER]) ||
|
||||
if ((mnum == PM_DOPPELGANGER && mptr != &mons[PM_DOPPELGANGER])
|
||||
/* block quest guards from other roles */
|
||||
(mptr->msound == MS_GUARDIAN
|
||||
&& quest_info(MS_GUARDIAN) != mnum)) {
|
||||
|| (mptr->msound == MS_GUARDIAN
|
||||
&& quest_info(MS_GUARDIAN) != mnum)) {
|
||||
mon = makemon(&mons[PM_DOPPELGANGER], x, y,
|
||||
NO_MINVENT | MM_NOCOUNTBIRTH | MM_ADJACENTOK);
|
||||
/* if hero has protection from shape changers, cham field will
|
||||
@@ -656,17 +656,17 @@ int *fail_reason;
|
||||
/* "the|your|Manlobbi's statue [of a wombat]" */
|
||||
shkp = shop_keeper(*in_rooms(mon->mx, mon->my, SHOPBASE));
|
||||
Sprintf(statuename, "%s%s", shk_your(tmpbuf, statue),
|
||||
(cause == ANIMATE_SPELL &&
|
||||
(cause == ANIMATE_SPELL
|
||||
/* avoid "of a shopkeeper" if it's Manlobbi himself
|
||||
(if carried, it can't be unpaid--hence won't be
|
||||
described as "Manlobbi's statue"--because there
|
||||
wasn't any living shk when statue was picked up) */
|
||||
(mon != shkp || carried(statue)))
|
||||
? xname(statue)
|
||||
: "statue");
|
||||
&& (mon != shkp || carried(statue)))
|
||||
? xname(statue)
|
||||
: "statue");
|
||||
pline("%s %s!", upstart(statuename), comes_to_life);
|
||||
} else if (Hallucination) { /* They don't know it's a statue */
|
||||
pline_The("%s suddenly seems more animated.", rndmonnam(NULL));
|
||||
pline_The("%s suddenly seems more animated.", rndmonnam((char *) 0));
|
||||
} else if (cause == ANIMATE_SHATTER) {
|
||||
if (cansee(x, y))
|
||||
Sprintf(statuename, "%s%s", shk_your(tmpbuf, statue),
|
||||
@@ -691,10 +691,10 @@ int *fail_reason;
|
||||
which refers to "it" so needs to follow a message describing
|
||||
the object ("the statue comes to life" one above) */
|
||||
if (cause != ANIMATE_NORMAL && costly_spot(x, y)
|
||||
&& (shkp = shop_keeper(*in_rooms(x, y, SHOPBASE))) != 0 &&
|
||||
&& (shkp = shop_keeper(*in_rooms(x, y, SHOPBASE))) != 0
|
||||
/* avoid charging for Manlobbi's statue of Manlobbi
|
||||
if stone-to-flesh is used on petrified shopkeep */
|
||||
mon != shkp)
|
||||
&& mon != shkp)
|
||||
(void) stolen_value(statue, x, y, (boolean) shkp->mpeaceful,
|
||||
FALSE);
|
||||
|
||||
@@ -2067,7 +2067,7 @@ register struct monst *mtmp;
|
||||
|| (tt == HOLE && !mindless(mptr)))) {
|
||||
/* it has been in such a trap - perhaps it escapes */
|
||||
if (rn2(4))
|
||||
return (0);
|
||||
return 0;
|
||||
} else {
|
||||
mtmp->mtrapseen |= (1 << (tt - 1));
|
||||
}
|
||||
@@ -2141,7 +2141,6 @@ register struct monst *mtmp;
|
||||
if (thitm(0, mtmp, otmp, d(2, 6), FALSE))
|
||||
trapkilled = TRUE;
|
||||
break;
|
||||
|
||||
case SQKY_BOARD:
|
||||
if (is_flyer(mptr))
|
||||
break;
|
||||
@@ -2160,7 +2159,6 @@ register struct monst *mtmp;
|
||||
/* wake up nearby monsters */
|
||||
wake_nearto(mtmp->mx, mtmp->my, 40);
|
||||
break;
|
||||
|
||||
case BEAR_TRAP:
|
||||
if (mptr->msize > MZ_SMALL && !amorphous(mptr) && !is_flyer(mptr)
|
||||
&& !is_whirly(mptr) && !unsolid(mptr)) {
|
||||
@@ -2184,7 +2182,6 @@ register struct monst *mtmp;
|
||||
if (mtmp->mtrapped)
|
||||
trapkilled = thitm(0, mtmp, (struct obj *) 0, d(2, 4), FALSE);
|
||||
break;
|
||||
|
||||
case SLP_GAS_TRAP:
|
||||
if (!resists_sleep(mtmp) && !breathless(mptr) && !mtmp->msleeping
|
||||
&& mtmp->mcanmove) {
|
||||
@@ -2194,7 +2191,6 @@ register struct monst *mtmp;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case RUST_TRAP: {
|
||||
struct obj *target;
|
||||
|
||||
@@ -2256,7 +2252,7 @@ register struct monst *mtmp;
|
||||
(void) split_mon(mtmp, (struct monst *) 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} /* RUST_TRAP */
|
||||
case FIRE_TRAP:
|
||||
mfiretrap:
|
||||
if (in_sight)
|
||||
@@ -2318,7 +2314,6 @@ register struct monst *mtmp;
|
||||
if (see_it)
|
||||
seetrap(trap);
|
||||
break;
|
||||
|
||||
case PIT:
|
||||
case SPIKED_PIT:
|
||||
fallverb = "falls";
|
||||
@@ -2386,19 +2381,19 @@ register struct monst *mtmp;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
/* Fall through */
|
||||
/*FALLTHRU*/
|
||||
case LEVEL_TELEP:
|
||||
case MAGIC_PORTAL: {
|
||||
int mlev_res;
|
||||
|
||||
mlev_res = mlevel_tele_trap(mtmp, trap, inescapable, in_sight);
|
||||
if (mlev_res)
|
||||
return (mlev_res);
|
||||
} break;
|
||||
|
||||
return mlev_res;
|
||||
break;
|
||||
}
|
||||
case TELEP_TRAP:
|
||||
mtele_trap(mtmp, trap, in_sight);
|
||||
break;
|
||||
|
||||
case WEB:
|
||||
/* Monster in a web. */
|
||||
if (webmaker(mptr))
|
||||
@@ -2477,10 +2472,8 @@ register struct monst *mtmp;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case STATUE_TRAP:
|
||||
break;
|
||||
|
||||
case MAGIC_TRAP:
|
||||
/* A magic trap. Monsters usually immune. */
|
||||
if (!rn2(21))
|
||||
@@ -2526,7 +2519,6 @@ register struct monst *mtmp;
|
||||
newsym(trap->tx, trap->ty);
|
||||
}
|
||||
break;
|
||||
|
||||
case LANDMINE:
|
||||
if (rn2(3))
|
||||
break; /* monsters usually don't set it off */
|
||||
@@ -2571,7 +2563,6 @@ register struct monst *mtmp;
|
||||
nomovemsg = "The explosion awakens you!";
|
||||
}
|
||||
break;
|
||||
|
||||
case POLY_TRAP:
|
||||
if (resists_magm(mtmp)) {
|
||||
shieldeff(mtmp->mx, mtmp->my);
|
||||
@@ -2583,7 +2574,6 @@ register struct monst *mtmp;
|
||||
seetrap(trap);
|
||||
}
|
||||
break;
|
||||
|
||||
case ROLLING_BOULDER_TRAP:
|
||||
if (!is_flyer(mptr)) {
|
||||
int style = ROLL | (in_sight ? 0 : LAUNCH_UNSEEN);
|
||||
@@ -2604,7 +2594,6 @@ register struct monst *mtmp;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case VIBRATING_SQUARE:
|
||||
if (see_it && !Blind) {
|
||||
if (in_sight)
|
||||
@@ -2616,7 +2605,6 @@ register struct monst *mtmp;
|
||||
seetrap(trap);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
impossible("Some monster encountered a strange trap of type %d.",
|
||||
tt);
|
||||
@@ -2810,7 +2798,7 @@ long hmask, emask; /* might cancel timeout */
|
||||
if (u.uswallow) {
|
||||
You("float down, but you are still %s.",
|
||||
is_animal(u.ustuck->data) ? "swallowed" : "engulfed");
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (Punished && !carried(uball)
|
||||
@@ -2909,10 +2897,10 @@ long hmask, emask; /* might cancel timeout */
|
||||
dotrap(trap, 0);
|
||||
}
|
||||
|
||||
if (!Is_airlevel(&u.uz) && !Is_waterlevel(&u.uz) && !u.uswallow &&
|
||||
if (!Is_airlevel(&u.uz) && !Is_waterlevel(&u.uz) && !u.uswallow
|
||||
/* falling through trap door calls goto_level,
|
||||
and goto_level does its own pickup() call */
|
||||
on_level(&u.uz, ¤t_dungeon_level))
|
||||
&& on_level(&u.uz, ¤t_dungeon_level))
|
||||
(void) pickup(1);
|
||||
return 1;
|
||||
}
|
||||
@@ -3096,39 +3084,33 @@ domagictrap()
|
||||
break;
|
||||
|
||||
/* very occasionally something nice happens. */
|
||||
case 19: { /* tame nearby monsters */
|
||||
int i, j;
|
||||
struct monst *mtmp;
|
||||
|
||||
case 19:
|
||||
/* tame nearby monsters */
|
||||
{
|
||||
register int i, j;
|
||||
register struct monst *mtmp;
|
||||
(void) adjattrib(A_CHA, 1, FALSE);
|
||||
for (i = -1; i <= 1; i++)
|
||||
for (j = -1; j <= 1; j++) {
|
||||
if (!isok(u.ux + i, u.uy + j))
|
||||
continue;
|
||||
mtmp = m_at(u.ux + i, u.uy + j);
|
||||
if (mtmp)
|
||||
(void) tamedog(mtmp, (struct obj *) 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 20: { /* uncurse stuff */
|
||||
struct obj pseudo;
|
||||
long save_conf = HConfusion;
|
||||
|
||||
(void) adjattrib(A_CHA, 1, FALSE);
|
||||
for (i = -1; i <= 1; i++)
|
||||
for (j = -1; j <= 1; j++) {
|
||||
if (!isok(u.ux + i, u.uy + j))
|
||||
continue;
|
||||
mtmp = m_at(u.ux + i, u.uy + j);
|
||||
if (mtmp)
|
||||
(void) tamedog(mtmp, (struct obj *) 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 20:
|
||||
/* uncurse stuff */
|
||||
{
|
||||
struct obj pseudo;
|
||||
long save_conf = HConfusion;
|
||||
|
||||
pseudo = zeroobj; /* neither cursed nor blessed,
|
||||
and zero out oextra */
|
||||
pseudo.otyp = SCR_REMOVE_CURSE;
|
||||
HConfusion = 0L;
|
||||
(void) seffects(&pseudo);
|
||||
HConfusion = save_conf;
|
||||
break;
|
||||
}
|
||||
pseudo = zeroobj; /* neither cursed nor blessed,
|
||||
and zero out oextra */
|
||||
pseudo.otyp = SCR_REMOVE_CURSE;
|
||||
HConfusion = 0L;
|
||||
(void) seffects(&pseudo);
|
||||
HConfusion = save_conf;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -3500,14 +3482,14 @@ boolean *lostsome;
|
||||
}
|
||||
}
|
||||
if (!otmp)
|
||||
return (FALSE); /* nothing to drop! */
|
||||
return FALSE; /* nothing to drop! */
|
||||
if (otmp->owornmask)
|
||||
remove_worn_item(otmp, FALSE);
|
||||
*lostsome = TRUE;
|
||||
dropx(otmp);
|
||||
invc--;
|
||||
}
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3527,7 +3509,7 @@ drown()
|
||||
if (!rn2(5))
|
||||
inpool_ok = TRUE;
|
||||
else
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!u.uinwater) {
|
||||
@@ -3549,7 +3531,7 @@ drown()
|
||||
losehp(i, "rusting away", KILLED_BY);
|
||||
}
|
||||
if (inpool_ok)
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
|
||||
if ((i = number_leashed()) > 0) {
|
||||
pline_The("leash%s slip%s loose.", (i > 1) ? "es" : "",
|
||||
@@ -3576,7 +3558,7 @@ drown()
|
||||
u.uinwater = 1;
|
||||
under_water(1);
|
||||
vision_full_recalc = 1;
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
if ((Teleportation || can_teleport(youmonst.data)) && !Unaware
|
||||
&& (Teleport_control || rn2(3) < Luck + 2)) {
|
||||
@@ -3584,14 +3566,14 @@ drown()
|
||||
if (!level.flags.noteleport) {
|
||||
(void) dotele();
|
||||
if (!is_pool(u.ux, u.uy))
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
} else
|
||||
pline_The("attempted teleport spell fails.");
|
||||
}
|
||||
if (u.usteed) {
|
||||
dismount_steed(DISMOUNT_GENERIC);
|
||||
if (!is_pool(u.ux, u.uy))
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
crawl_ok = FALSE;
|
||||
x = y = 0; /* lint suppression */
|
||||
@@ -3634,7 +3616,7 @@ crawl:
|
||||
if (succ) {
|
||||
pline("Pheew! That was close.");
|
||||
teleds(x, y, TRUE);
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
/* still too much weight */
|
||||
pline("But in vain.");
|
||||
@@ -3662,7 +3644,7 @@ crawl:
|
||||
You("find yourself back %s.",
|
||||
Is_waterlevel(&u.uz) ? "in an air bubble" : "on land");
|
||||
}
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -4143,7 +4125,7 @@ boolean force;
|
||||
char the_trap[BUFSZ], qbuf[QBUFSZ];
|
||||
|
||||
if (!getdir((char *) 0))
|
||||
return (0);
|
||||
return 0;
|
||||
x = u.ux + u.dx;
|
||||
y = u.uy + u.dy;
|
||||
if (!isok(x, y)) {
|
||||
@@ -4199,7 +4181,7 @@ boolean force;
|
||||
(ttmp->ttyp == WEB) ? "Remove" : "Disarm", the_trap);
|
||||
switch (ynq(qbuf)) {
|
||||
case 'q':
|
||||
return (0);
|
||||
return 0;
|
||||
case 'n':
|
||||
trap_skipped = TRUE;
|
||||
deal_with_floor_trap = FALSE;
|
||||
@@ -4257,7 +4239,7 @@ boolean force;
|
||||
doname, ansimpleoname, "a box");
|
||||
switch (ynq(qbuf)) {
|
||||
case 'q':
|
||||
return (0);
|
||||
return 0;
|
||||
case 'n':
|
||||
continue;
|
||||
}
|
||||
@@ -4272,7 +4254,7 @@ boolean force;
|
||||
|
||||
switch (ynq("Disarm it?")) {
|
||||
case 'q':
|
||||
return (1);
|
||||
return 1;
|
||||
case 'n':
|
||||
trap_skipped = TRUE;
|
||||
continue;
|
||||
@@ -4293,16 +4275,16 @@ boolean force;
|
||||
}
|
||||
} else
|
||||
pline("That %s was not trapped.", xname(otmp));
|
||||
return (1);
|
||||
return 1;
|
||||
} else {
|
||||
You("find no traps on %s.", the(xname(otmp)));
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
You(trap_skipped ? "find no other traps here."
|
||||
: "know of no traps here.");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (stumble_on_door_mimic(x, y))
|
||||
@@ -4314,19 +4296,19 @@ boolean force;
|
||||
if (!IS_DOOR(levl[x][y].typ)) {
|
||||
if (!trap_skipped)
|
||||
You("know of no traps there.");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (levl[x][y].doormask) {
|
||||
case D_NODOOR:
|
||||
You("%s no door there.", Blind ? "feel" : "see");
|
||||
return (0);
|
||||
return 0;
|
||||
case D_ISOPEN:
|
||||
pline("This door is safely open.");
|
||||
return (0);
|
||||
return 0;
|
||||
case D_BROKEN:
|
||||
pline("This door is broken.");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((levl[x][y].doormask & D_TRAPPED
|
||||
@@ -4335,7 +4317,7 @@ boolean force;
|
||||
You("find a trap on the door!");
|
||||
exercise(A_WIS, TRUE);
|
||||
if (ynq("Disarm it?") != 'y')
|
||||
return (1);
|
||||
return 1;
|
||||
if (levl[x][y].doormask & D_TRAPPED) {
|
||||
ch = 15 + (Role_if(PM_ROGUE) ? u.ulevel * 3 : u.ulevel);
|
||||
exercise(A_DEX, TRUE);
|
||||
@@ -4355,10 +4337,10 @@ boolean force;
|
||||
}
|
||||
} else
|
||||
pline("This door was not trapped.");
|
||||
return (1);
|
||||
return 1;
|
||||
} else {
|
||||
You("find no traps on the door.");
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4618,7 +4600,7 @@ boolean disarm;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
} /* case 21 */
|
||||
case 20:
|
||||
case 19:
|
||||
case 18:
|
||||
@@ -4658,7 +4640,7 @@ boolean disarm;
|
||||
if (dmg)
|
||||
losehp(dmg, "electric shock", KILLED_BY_AN);
|
||||
break;
|
||||
}
|
||||
} /* case 6 */
|
||||
case 5:
|
||||
case 4:
|
||||
case 3:
|
||||
@@ -4705,12 +4687,13 @@ t_at(x, y)
|
||||
register int x, y;
|
||||
{
|
||||
register struct trap *trap = ftrap;
|
||||
|
||||
while (trap) {
|
||||
if (trap->tx == x && trap->ty == y)
|
||||
return (trap);
|
||||
return trap;
|
||||
trap = trap->ntrap;
|
||||
}
|
||||
return ((struct trap *) 0);
|
||||
return (struct trap *) 0;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -4720,11 +4703,14 @@ register struct trap *trap;
|
||||
register struct trap *ttmp;
|
||||
|
||||
clear_conjoined_pits(trap);
|
||||
if (trap == ftrap)
|
||||
if (trap == ftrap) {
|
||||
ftrap = ftrap->ntrap;
|
||||
else {
|
||||
for (ttmp = ftrap; ttmp->ntrap != trap; ttmp = ttmp->ntrap)
|
||||
;
|
||||
} else {
|
||||
for (ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
|
||||
if (ttmp->ntrap == trap)
|
||||
break;
|
||||
if (!ttmp)
|
||||
panic("deltrap: no preceding trap!");
|
||||
ttmp->ntrap = trap->ntrap;
|
||||
}
|
||||
if (Sokoban && (trap->ttyp == PIT || trap->ttyp == HOLE))
|
||||
@@ -4738,6 +4724,7 @@ struct trap *trap2, *trap1;
|
||||
boolean u_entering_trap2;
|
||||
{
|
||||
int dx, dy, diridx, adjidx;
|
||||
|
||||
if (!trap1 || !trap2)
|
||||
return FALSE;
|
||||
if (!isok(trap2->tx, trap2->ty) || !isok(trap1->tx, trap1->ty)
|
||||
@@ -4766,13 +4753,14 @@ struct trap *trap;
|
||||
{
|
||||
int diridx, adjidx, x, y;
|
||||
struct trap *t;
|
||||
|
||||
if (trap && (trap->ttyp == PIT || trap->ttyp == SPIKED_PIT)) {
|
||||
for (diridx = 0; diridx < 8; ++diridx) {
|
||||
if (trap->conjoined & (1 << diridx)) {
|
||||
x = trap->tx + xdir[diridx];
|
||||
y = trap->ty + ydir[diridx];
|
||||
t = t_at(x, y);
|
||||
if (isok(x, y) && t
|
||||
if (isok(x, y)
|
||||
&& (t = t_at(x, y)) != 0
|
||||
&& (t->ttyp == PIT || t->ttyp == SPIKED_PIT)) {
|
||||
adjidx = (diridx + 4) % 8;
|
||||
t->conjoined &= ~(1 << adjidx);
|
||||
@@ -4792,22 +4780,25 @@ STATIC_OVL void
|
||||
join_adjacent_pits(trap)
|
||||
struct trap *trap;
|
||||
{
|
||||
struct trap *t;
|
||||
int diridx, x, y;
|
||||
if (!trap) return;
|
||||
for(diridx = 0; diridx < 8; ++diridx) {
|
||||
x = trap->tx + xdir[diridx];
|
||||
y = trap->ty + ydir[diridx];
|
||||
if (isok(x,y)) {
|
||||
if (((t = t_at(x,y)) != 0) &&
|
||||
(t->ttyp == PIT || t->ttyp == SPIKED_PIT)) {
|
||||
trap->conjoined |= (1 << diridx);
|
||||
join_adjacent_pits(t);
|
||||
} else trap->conjoined &= ~(1 << diridx);
|
||||
}
|
||||
}
|
||||
struct trap *t;
|
||||
int diridx, x, y;
|
||||
|
||||
if (!trap)
|
||||
return;
|
||||
for (diridx = 0; diridx < 8; ++diridx) {
|
||||
x = trap->tx + xdir[diridx];
|
||||
y = trap->ty + ydir[diridx];
|
||||
if (isok(x, y)) {
|
||||
if ((t = t_at(x, y)) != 0
|
||||
&& (t->ttyp == PIT || t->ttyp == SPIKED_PIT)) {
|
||||
trap->conjoined |= (1 << diridx);
|
||||
join_adjacent_pits(t);
|
||||
} else
|
||||
trap->conjoined &= ~(1 << diridx);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /*0*/
|
||||
|
||||
/*
|
||||
* Returns TRUE if you escaped a pit and are standing on the precipice.
|
||||
@@ -4929,12 +4920,14 @@ boolean nocorpse;
|
||||
boolean
|
||||
unconscious()
|
||||
{
|
||||
return (boolean)(
|
||||
multi < 0
|
||||
&& (u.usleep || (nomovemsg
|
||||
&& (!strncmp(nomovemsg, "You awake", 9)
|
||||
|| !strncmp(nomovemsg, "You regain con", 14)
|
||||
|| !strncmp(nomovemsg, "You are consci", 14)))));
|
||||
if (multi >= 0)
|
||||
return FALSE;
|
||||
|
||||
return (boolean) (u.usleep
|
||||
|| (nomovemsg
|
||||
&& (!strncmp(nomovemsg, "You awake", 9)
|
||||
|| !strncmp(nomovemsg, "You regain con", 14)
|
||||
|| !strncmp(nomovemsg, "You are consci", 14))));
|
||||
}
|
||||
|
||||
static const char lava_killer[] = "molten lava";
|
||||
@@ -4972,8 +4965,8 @@ lava_effects()
|
||||
|
||||
/* Check whether we should burn away boots *first* so we know whether to
|
||||
* make the player sink into the lava. Assumption: water walking only
|
||||
* comes
|
||||
* from boots. */
|
||||
* comes from boots.
|
||||
*/
|
||||
if (Wwalking && uarmf && is_organic(uarmf) && !uarmf->oerodeproof) {
|
||||
obj = uarmf;
|
||||
pline("%s into flame!", Yobjnam2(obj, "burst"));
|
||||
@@ -5041,7 +5034,7 @@ lava_effects()
|
||||
pline("You're still burning.");
|
||||
}
|
||||
You("find yourself back on solid %s.", surface(u.ux, u.uy));
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
} else if (!Wwalking && (!u.utrap || u.utraptype != TT_LAVA)) {
|
||||
boil_away = !Fire_resistance;
|
||||
/* if not fire resistant, sink_into_lava() will quickly be fatal;
|
||||
@@ -5060,7 +5053,7 @@ burn_stuff:
|
||||
destroy_item(SCROLL_CLASS, AD_FIRE);
|
||||
destroy_item(SPBOOK_CLASS, AD_FIRE);
|
||||
destroy_item(POTION_CLASS, AD_FIRE);
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* called each turn when trapped in lava */
|
||||
|
||||
94
src/uhitm.c
94
src/uhitm.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 uhitm.c $NHDT-Date: 1445126430 2015/10/18 00:00:30 $ $NHDT-Branch: master $:$NHDT-Revision: 1.148 $ */
|
||||
/* NetHack 3.6 uhitm.c $NHDT-Date: 1446078766 2015/10/29 00:32:46 $ $NHDT-Branch: master $:$NHDT-Revision: 1.149 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -116,9 +116,9 @@ struct obj *wep; /* uwep for attack(), null for kick_monster() */
|
||||
* If the monster dies immediately from the blow, the 'I' will
|
||||
* not stay there, so the player will have suddenly forgotten
|
||||
* the square's contents for no apparent reason.
|
||||
if (!canspotmon(mtmp) &&
|
||||
!glyph_is_invisible(levl[bhitpos.x][bhitpos.y].glyph))
|
||||
map_invisible(bhitpos.x, bhitpos.y);
|
||||
if (!canspotmon(mtmp)
|
||||
&& !glyph_is_invisible(levl[bhitpos.x][bhitpos.y].glyph))
|
||||
map_invisible(bhitpos.x, bhitpos.y);
|
||||
*/
|
||||
return FALSE;
|
||||
}
|
||||
@@ -139,9 +139,9 @@ struct obj *wep; /* uwep for attack(), null for kick_monster() */
|
||||
/* if it was an invisible mimic, treat it as if we stumbled
|
||||
* onto a visible mimic
|
||||
*/
|
||||
if (mtmp->m_ap_type && !Protection_from_shape_changers &&
|
||||
if (mtmp->m_ap_type && !Protection_from_shape_changers
|
||||
/* applied pole-arm attack is too far to get stuck */
|
||||
distu(mtmp->mx, mtmp->my) <= 2) {
|
||||
&& distu(mtmp->mx, mtmp->my) <= 2) {
|
||||
if (!u.ustuck && !mtmp->mflee && dmgtype(mtmp->data, AD_STCK))
|
||||
u.ustuck = mtmp;
|
||||
}
|
||||
@@ -157,7 +157,7 @@ struct obj *wep; /* uwep for attack(), null for kick_monster() */
|
||||
*/
|
||||
if (glyph_is_invisible(levl[mtmp->mx][mtmp->my].glyph)) {
|
||||
seemimic(mtmp);
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
stumble_onto_mimic(mtmp);
|
||||
return TRUE;
|
||||
@@ -170,7 +170,7 @@ struct obj *wep; /* uwep for attack(), null for kick_monster() */
|
||||
newsym(mtmp->mx, mtmp->my);
|
||||
if (glyph_is_invisible(levl[mtmp->mx][mtmp->my].glyph)) {
|
||||
seemimic(mtmp);
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
if (!((Blind ? Blind_telepat : Unblind_telepat) || Detect_monsters)) {
|
||||
struct obj *obj;
|
||||
@@ -198,18 +198,18 @@ struct obj *wep; /* uwep for attack(), null for kick_monster() */
|
||||
/* Intelligent chaotic weapons (Stormbringer) want blood */
|
||||
if (wep && wep->oartifact == ART_STORMBRINGER) {
|
||||
override_confirmation = TRUE;
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
if (canspotmon(mtmp)) {
|
||||
Sprintf(qbuf, "Really attack %s?", mon_nam(mtmp));
|
||||
if (!paranoid_query(ParanoidHit, qbuf)) {
|
||||
context.move = 0;
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -350,13 +350,13 @@ register struct monst *mtmp;
|
||||
Strcpy(buf, y_monnam(mtmp));
|
||||
buf[0] = highc(buf[0]);
|
||||
You("stop. %s is in the way!", buf);
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
} else if ((mtmp->mfrozen || (!mtmp->mcanmove)
|
||||
|| (mtmp->data->mmove == 0)) && rn2(6)) {
|
||||
pline("%s doesn't seem to move!", Monnam(mtmp));
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
} else
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ register struct monst *mtmp;
|
||||
bhitpos.x = u.ux + u.dx;
|
||||
bhitpos.y = u.uy + u.dy;
|
||||
if (attack_checks(mtmp, uwep))
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
|
||||
if (Upolyd && noattacks(youmonst.data)) {
|
||||
/* certain "pacifist" monsters don't attack */
|
||||
@@ -377,9 +377,9 @@ register struct monst *mtmp;
|
||||
goto atk_done;
|
||||
}
|
||||
|
||||
if (check_capacity("You cannot fight while so heavily loaded.") ||
|
||||
if (check_capacity("You cannot fight while so heavily loaded.")
|
||||
/* consume extra nutrition during combat; maybe pass out */
|
||||
overexertion())
|
||||
|| overexertion())
|
||||
goto atk_done;
|
||||
|
||||
if (u.twoweap && !can_twoweapon())
|
||||
@@ -408,7 +408,7 @@ register struct monst *mtmp;
|
||||
&& (m_move(mtmp, 0) == 2 || /* it died */
|
||||
mtmp->mx != u.ux + u.dx
|
||||
|| mtmp->my != u.uy + u.dy)) /* it moved */
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
|
||||
if (Upolyd)
|
||||
(void) hmonas(mtmp);
|
||||
@@ -427,7 +427,7 @@ atk_done:
|
||||
&& !(u.uswallow && mtmp == u.ustuck))
|
||||
map_invisible(u.ux + u.dx, u.uy + u.dy);
|
||||
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* really hit target monster; returns TRUE if it still lives */
|
||||
@@ -483,7 +483,7 @@ struct attack *uattk;
|
||||
cutworm(mon, x, y, weapon);
|
||||
}
|
||||
}
|
||||
return (malive);
|
||||
return malive;
|
||||
}
|
||||
|
||||
/* hit target monster; returns TRUE if it still lives */
|
||||
@@ -514,7 +514,7 @@ struct attack *uattk;
|
||||
if (wepbefore && !uwep)
|
||||
wep_was_destroyed = TRUE;
|
||||
(void) passive(mon, mhit, malive, AT_WEAP, wep_was_destroyed);
|
||||
return (malive);
|
||||
return malive;
|
||||
}
|
||||
|
||||
boolean /* general "damage monster" routine */
|
||||
@@ -558,9 +558,9 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
||||
boolean silvermsg = FALSE, silverobj = FALSE;
|
||||
boolean valid_weapon_attack = FALSE;
|
||||
boolean unarmed = !uwep && !uarm && !uarms;
|
||||
boolean hand_to_hand = (thrown == HMON_MELEE ||
|
||||
boolean hand_to_hand = (thrown == HMON_MELEE
|
||||
/* not grapnels; applied implies uwep */
|
||||
(thrown == HMON_APPLIED && is_pole(uwep)));
|
||||
|| (thrown == HMON_APPLIED && is_pole(uwep)));
|
||||
int jousting = 0;
|
||||
int wtype;
|
||||
struct obj *monwep;
|
||||
@@ -602,14 +602,14 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
||||
|| obj->oclass == GEM_CLASS) {
|
||||
/* is it not a melee weapon? */
|
||||
if (/* if you strike with a bow... */
|
||||
is_launcher(obj) ||
|
||||
is_launcher(obj)
|
||||
/* or strike with a missile in your hand... */
|
||||
(!thrown && (is_missile(obj) || is_ammo(obj))) ||
|
||||
|| (!thrown && (is_missile(obj) || is_ammo(obj)))
|
||||
/* or use a pole at short range and not mounted... */
|
||||
(!thrown && !u.usteed && is_pole(obj)) ||
|
||||
|| (!thrown && !u.usteed && is_pole(obj))
|
||||
/* or throw a missile without the proper bow... */
|
||||
(is_ammo(obj) && (thrown != HMON_THROWN
|
||||
|| !ammo_and_launcher(obj, uwep)))) {
|
||||
|| (is_ammo(obj) && (thrown != HMON_THROWN
|
||||
|| !ammo_and_launcher(obj, uwep)))) {
|
||||
/* then do only 1-2 points of damage */
|
||||
if (mdat == &mons[PM_SHADE] && !shade_glare(obj))
|
||||
tmp = 0;
|
||||
@@ -644,9 +644,9 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
||||
valid_weapon_attack = (tmp > 1);
|
||||
if (!valid_weapon_attack || mon == u.ustuck || u.twoweap) {
|
||||
; /* no special bonuses */
|
||||
} else if (mon->mflee && Role_if(PM_ROGUE) && !Upolyd &&
|
||||
} else if (mon->mflee && Role_if(PM_ROGUE) && !Upolyd
|
||||
/* multi-shot throwing is too powerful here */
|
||||
hand_to_hand) {
|
||||
&& hand_to_hand) {
|
||||
You("strike %s from behind!", mon_nam(mon));
|
||||
tmp += rnd(u.ulevel);
|
||||
hittxt = TRUE;
|
||||
@@ -759,9 +759,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
||||
ysimple_name(obj));
|
||||
release_camera_demon(obj, u.ux, u.uy);
|
||||
useup(obj);
|
||||
return (TRUE);
|
||||
/*NOTREACHED*/
|
||||
break;
|
||||
return TRUE;
|
||||
case CORPSE: /* fixed by polder@cs.vu.nl */
|
||||
if (touch_petrifies(&mons[obj->corpsenm])) {
|
||||
tmp = 1;
|
||||
@@ -776,10 +774,10 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
||||
if (resists_ston(mon))
|
||||
break;
|
||||
/* note: hp may be <= 0 even if munstoned==TRUE */
|
||||
return (boolean)(mon->mhp > 0);
|
||||
return (boolean) (mon->mhp > 0);
|
||||
#if 0
|
||||
} else if (touch_petrifies(mdat)) {
|
||||
/* maybe turn the corpse into a statue? */
|
||||
} else if (touch_petrifies(mdat)) {
|
||||
; /* maybe turn the corpse into a statue? */
|
||||
#endif
|
||||
}
|
||||
tmp = (obj->corpsenm >= LOW_PM ? mons[obj->corpsenm].msize
|
||||
@@ -825,7 +823,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
|
||||
minstapetrify(mon, TRUE);
|
||||
if (resists_ston(mon))
|
||||
break;
|
||||
return (boolean)(mon->mhp > 0);
|
||||
return (boolean) (mon->mhp > 0);
|
||||
} else { /* ordinary egg(s) */
|
||||
const char *eggp =
|
||||
(obj->corpsenm != NON_PM && obj->known)
|
||||
@@ -1403,7 +1401,7 @@ register struct attack *mattk;
|
||||
&& u.umonnum != PM_SUCCUBUS && u.umonnum != PM_INCUBUS
|
||||
&& u.umonnum != PM_BALROG) {
|
||||
demonpet();
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
switch (mattk->adtyp) {
|
||||
case AD_STUN:
|
||||
@@ -1764,9 +1762,9 @@ register struct attack *mattk;
|
||||
xkilled(mdef, 0);
|
||||
} else if (tmp)
|
||||
killed(mdef);
|
||||
return (2);
|
||||
return 2;
|
||||
}
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
STATIC_OVL int
|
||||
@@ -1807,7 +1805,7 @@ register struct attack *mattk;
|
||||
mdef->mhp -= tmp;
|
||||
if (mdef->mhp <= 0) {
|
||||
killed(mdef);
|
||||
return (2);
|
||||
return 2;
|
||||
}
|
||||
} else {
|
||||
shieldeff(mdef->mx, mdef->my);
|
||||
@@ -1820,7 +1818,7 @@ register struct attack *mattk;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
@@ -1957,7 +1955,7 @@ register struct attack *mattk;
|
||||
exercise(A_CON, TRUE);
|
||||
}
|
||||
end_engulf();
|
||||
return (2);
|
||||
return 2;
|
||||
case AD_PHYS:
|
||||
if (youmonst.data == &mons[PM_FOG_CLOUD]) {
|
||||
pline("%s is laden with your moisture.", Monnam(mdef));
|
||||
@@ -2032,7 +2030,7 @@ register struct attack *mattk;
|
||||
if ((mdef->mhp -= dam) <= 0) {
|
||||
killed(mdef);
|
||||
if (mdef->mhp <= 0) /* not lifesaved */
|
||||
return (2);
|
||||
return 2;
|
||||
}
|
||||
You("%s %s!", is_animal(youmonst.data) ? "regurgitate" : "expel",
|
||||
mon_nam(mdef));
|
||||
@@ -2042,7 +2040,7 @@ register struct attack *mattk;
|
||||
}
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2105,7 +2103,7 @@ register struct monst *mon;
|
||||
sum[i] = dhit;
|
||||
/* might be a worm that gets cut in half */
|
||||
if (m_at(u.ux + u.dx, u.uy + u.dy) != mon)
|
||||
return (boolean)(nsum != 0);
|
||||
return (boolean) (nsum != 0);
|
||||
/* Do not print "You hit" message, since known_hitum
|
||||
* already did it.
|
||||
*/
|
||||
@@ -2247,7 +2245,7 @@ register struct monst *mon;
|
||||
rehumanize();
|
||||
}
|
||||
if (sum[i] == 2)
|
||||
return ((boolean) passive(mon, 1, 0, mattk->aatyp, FALSE));
|
||||
return (boolean) passive(mon, 1, 0, mattk->aatyp, FALSE);
|
||||
/* defender dead */
|
||||
else {
|
||||
(void) passive(mon, sum[i], 1, mattk->aatyp, FALSE);
|
||||
@@ -2258,7 +2256,7 @@ register struct monst *mon;
|
||||
if (multi < 0)
|
||||
break; /* If paralyzed while attacking, i.e. floating eye */
|
||||
}
|
||||
return ((boolean)(nsum != 0));
|
||||
return (boolean) (nsum != 0);
|
||||
}
|
||||
|
||||
/* Special (passive) attacks on you by monsters done here. */
|
||||
|
||||
116
src/vault.c
116
src/vault.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 vault.c $NHDT-Date: 1432512773 2015/05/25 00:12:53 $ $NHDT-Branch: master $:$NHDT-Revision: 1.38 $ */
|
||||
/* NetHack 3.6 vault.c $NHDT-Date: 1446078792 2015/10/29 00:33:12 $ $NHDT-Branch: master $:$NHDT-Revision: 1.39 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -126,7 +126,7 @@ int x, y;
|
||||
|
||||
STATIC_OVL void
|
||||
restfakecorr(grd)
|
||||
register struct monst *grd;
|
||||
struct monst *grd;
|
||||
{
|
||||
/* it seems you left the corridor - let the guard disappear */
|
||||
if (clear_fcorr(grd, FALSE)) {
|
||||
@@ -135,10 +135,12 @@ register struct monst *grd;
|
||||
}
|
||||
}
|
||||
|
||||
boolean grddead(grd) /* called in mon.c */
|
||||
register struct monst *grd;
|
||||
/* called in mon.c */
|
||||
boolean
|
||||
grddead(grd)
|
||||
struct monst *grd;
|
||||
{
|
||||
register boolean dispose = clear_fcorr(grd, TRUE);
|
||||
boolean dispose = clear_fcorr(grd, TRUE);
|
||||
|
||||
if (!dispose) {
|
||||
/* destroy guard's gold; drop any other inventory */
|
||||
@@ -162,16 +164,16 @@ register struct monst *grd;
|
||||
|
||||
STATIC_OVL boolean
|
||||
in_fcorridor(grd, x, y)
|
||||
register struct monst *grd;
|
||||
struct monst *grd;
|
||||
int x, y;
|
||||
{
|
||||
register int fci;
|
||||
struct egd *egrd = EGD(grd);
|
||||
|
||||
for (fci = EGD(grd)->fcbeg; fci < EGD(grd)->fcend; fci++)
|
||||
if (x == EGD(grd)->fakecorr[fci].fx
|
||||
&& y == EGD(grd)->fakecorr[fci].fy)
|
||||
return (TRUE);
|
||||
return (FALSE);
|
||||
for (fci = egrd->fcbeg; fci < egrd->fcend; fci++)
|
||||
if (x == egrd->fakecorr[fci].fx && y == egrd->fakecorr[fci].fy)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
STATIC_OVL
|
||||
@@ -184,9 +186,9 @@ findgd()
|
||||
if (DEADMONSTER(mtmp))
|
||||
continue;
|
||||
if (mtmp->isgd && on_level(&(EGD(mtmp)->gdlevel), &u.uz))
|
||||
return (mtmp);
|
||||
return mtmp;
|
||||
}
|
||||
return ((struct monst *) 0);
|
||||
return (struct monst *) 0;
|
||||
}
|
||||
|
||||
char
|
||||
@@ -197,8 +199,8 @@ char *array;
|
||||
|
||||
for (ptr = array; *ptr; ptr++)
|
||||
if (rooms[*ptr - ROOMOFFSET].rtype == VAULT)
|
||||
return (*ptr);
|
||||
return ('\0');
|
||||
return *ptr;
|
||||
return '\0';
|
||||
}
|
||||
|
||||
void
|
||||
@@ -376,10 +378,9 @@ invault()
|
||||
(void) mungspaces(buf);
|
||||
} while (!letter(buf[0]) && --trycount > 0);
|
||||
|
||||
if (u.ualign.type == A_LAWFUL &&
|
||||
/* ignore trailing text, in case player includes character's rank
|
||||
*/
|
||||
strncmpi(buf, plname, (int) strlen(plname)) != 0) {
|
||||
if (u.ualign.type == A_LAWFUL
|
||||
/* ignore trailing text, in case player includes rank */
|
||||
&& strncmpi(buf, plname, (int) strlen(plname)) != 0) {
|
||||
adjalign(-1); /* Liar! */
|
||||
}
|
||||
|
||||
@@ -542,18 +543,17 @@ register struct monst *grd;
|
||||
uchar typ;
|
||||
struct fakecorridor *fcp;
|
||||
register struct egd *egrd = EGD(grd);
|
||||
register struct rm *crm;
|
||||
register boolean goldincorridor = FALSE,
|
||||
u_in_vault = vault_occupied(u.urooms) ? TRUE : FALSE,
|
||||
grd_in_vault =
|
||||
*in_rooms(grd->mx, grd->my, VAULT) ? TRUE : FALSE;
|
||||
struct rm *crm;
|
||||
boolean goldincorridor = FALSE,
|
||||
u_in_vault = vault_occupied(u.urooms) ? TRUE : FALSE,
|
||||
grd_in_vault = *in_rooms(grd->mx, grd->my, VAULT) ? TRUE : FALSE;
|
||||
boolean disappear_msg_seen = FALSE, semi_dead = (grd->mhp <= 0);
|
||||
long umoney = money_cnt(invent);
|
||||
register boolean u_carry_gold = ((umoney + hidden_gold()) > 0L);
|
||||
boolean see_guard, newspot = FALSE;
|
||||
|
||||
if (!on_level(&(egrd->gdlevel), &u.uz))
|
||||
return (-1);
|
||||
return -1;
|
||||
nx = ny = m = n = 0;
|
||||
if (!u_in_vault && !grd_in_vault)
|
||||
wallify_vault(grd);
|
||||
@@ -572,17 +572,17 @@ register struct monst *grd;
|
||||
}
|
||||
if (!in_fcorridor(grd, grd->mx, grd->my))
|
||||
(void) clear_fcorr(grd, TRUE);
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
if (abs(egrd->ogx - grd->mx) > 1 || abs(egrd->ogy - grd->my) > 1)
|
||||
return (-1); /* teleported guard - treat as monster */
|
||||
return -1; /* teleported guard - treat as monster */
|
||||
|
||||
if (egrd->witness) {
|
||||
verbalize("How dare you %s that gold, scoundrel!",
|
||||
(egrd->witness & GD_EATGOLD) ? "consume" : "destroy");
|
||||
egrd->witness = 0;
|
||||
grd->mpeaceful = 0;
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
if (egrd->fcend == 1) {
|
||||
if (u_in_vault && (u_carry_gold || um_dist(grd->mx, grd->my, 1))) {
|
||||
@@ -601,12 +601,12 @@ register struct monst *grd;
|
||||
levl[m][n].typ = egrd->fakecorr[0].ftyp;
|
||||
newsym(m, n);
|
||||
grd->mpeaceful = 0;
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
/* not fair to get mad when (s)he's fainted or paralyzed */
|
||||
if (!is_fainted() && multi >= 0)
|
||||
egrd->warncnt++;
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!u_in_vault) {
|
||||
@@ -626,7 +626,7 @@ register struct monst *grd;
|
||||
: "are confronted by %s.",
|
||||
/* "an angry guard" */
|
||||
x_monnam(grd, ARTICLE_A, "angry", 0, FALSE));
|
||||
return (-1);
|
||||
return -1;
|
||||
} else {
|
||||
if (!Deaf)
|
||||
verbalize("Well, begone.");
|
||||
@@ -646,23 +646,23 @@ register struct monst *grd;
|
||||
disappear_msg_seen = TRUE;
|
||||
goto cleanup;
|
||||
}
|
||||
if (u_carry_gold && (in_fcorridor(grd, u.ux, u.uy) ||
|
||||
if (u_carry_gold && (in_fcorridor(grd, u.ux, u.uy)
|
||||
/* cover a 'blind' spot */
|
||||
(egrd->fcend > 1 && u_in_vault))) {
|
||||
|| (egrd->fcend > 1 && u_in_vault))) {
|
||||
if (!grd->mx) {
|
||||
restfakecorr(grd);
|
||||
return (-2);
|
||||
return -2;
|
||||
}
|
||||
if (egrd->warncnt < 6) {
|
||||
egrd->warncnt = 6;
|
||||
if (!Deaf)
|
||||
verbalize("Drop all your gold, scoundrel!");
|
||||
return (0);
|
||||
return 0;
|
||||
} else {
|
||||
if (!Deaf)
|
||||
verbalize("So be it, rogue!");
|
||||
grd->mpeaceful = 0;
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -714,7 +714,7 @@ register struct monst *grd;
|
||||
&& !(u.ustuck && !sticks(youmonst.data)))
|
||||
verbalize("Move along!");
|
||||
restfakecorr(grd);
|
||||
return (0); /* didn't move */
|
||||
return 0; /* didn't move */
|
||||
}
|
||||
x = grd->mx;
|
||||
y = grd->my;
|
||||
@@ -810,15 +810,15 @@ proceed:
|
||||
fcp->ftyp = typ;
|
||||
newpos:
|
||||
if (egrd->gddone) {
|
||||
/* The following is a kludge. We need to keep */
|
||||
/* the guard around in order to be able to make */
|
||||
/* the fake corridor disappear as the player */
|
||||
/* moves out of it, but we also need the guard */
|
||||
/* out of the way. We send the guard to never- */
|
||||
/* never land. We set ogx ogy to mx my in order */
|
||||
/* to avoid a check at the top of this function. */
|
||||
/* At the end of the process, the guard is killed */
|
||||
/* in restfakecorr(). */
|
||||
/* The following is a kludge. We need to keep */
|
||||
/* the guard around in order to be able to make */
|
||||
/* the fake corridor disappear as the player */
|
||||
/* moves out of it, but we also need the guard */
|
||||
/* out of the way. We send the guard to never- */
|
||||
/* never land. We set ogx ogy to mx my in order */
|
||||
/* to avoid a check at the top of this function. */
|
||||
/* At the end of the process, the guard is killed */
|
||||
/* in restfakecorr(). */
|
||||
cleanup:
|
||||
x = grd->mx;
|
||||
y = grd->my;
|
||||
@@ -834,9 +834,9 @@ newpos:
|
||||
if (!semi_dead && (in_fcorridor(grd, u.ux, u.uy) || cansee(x, y))) {
|
||||
if (!disappear_msg_seen && see_guard)
|
||||
pline("Suddenly, %s disappears.", noit_mon_nam(grd));
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
return (-2);
|
||||
return -2;
|
||||
}
|
||||
egrd->ogx = grd->mx; /* update old positions */
|
||||
egrd->ogy = grd->my;
|
||||
@@ -852,7 +852,7 @@ newpos:
|
||||
} else
|
||||
newsym(grd->mx, grd->my);
|
||||
restfakecorr(grd);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Routine when dying or quitting with a vault guard around */
|
||||
@@ -900,25 +900,27 @@ paygd()
|
||||
long
|
||||
hidden_gold()
|
||||
{
|
||||
register long value = 0L;
|
||||
register struct obj *obj;
|
||||
long value = 0L;
|
||||
struct obj *obj;
|
||||
|
||||
for (obj = invent; obj; obj = obj->nobj)
|
||||
if (Has_contents(obj))
|
||||
value += contained_gold(obj);
|
||||
/* unknown gold stuck inside statues may cause some consternation... */
|
||||
|
||||
return (value);
|
||||
return value;
|
||||
}
|
||||
|
||||
boolean gd_sound() /* prevent "You hear footsteps.." when inappropriate */
|
||||
/* prevent "You hear footsteps.." when inappropriate */
|
||||
boolean
|
||||
gd_sound()
|
||||
{
|
||||
register struct monst *grd = findgd();
|
||||
struct monst *grd = findgd();
|
||||
|
||||
if (vault_occupied(u.urooms))
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
else
|
||||
return ((boolean)(grd == (struct monst *) 0));
|
||||
return (boolean) (grd == (struct monst *) 0);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -926,9 +928,11 @@ vault_gd_watching(activity)
|
||||
unsigned int activity;
|
||||
{
|
||||
struct monst *guard = findgd();
|
||||
|
||||
if (guard && guard->mcansee && m_canseeu(guard)) {
|
||||
if (activity == GD_EATGOLD || activity == GD_DESTROYGOLD)
|
||||
EGD(guard)->witness = activity;
|
||||
}
|
||||
}
|
||||
|
||||
/*vault.c*/
|
||||
|
||||
152
src/weapon.c
152
src/weapon.c
@@ -1,11 +1,11 @@
|
||||
/* NetHack 3.6 weapon.c $NHDT-Date: 1445126431 2015/10/18 00:00:31 $ $NHDT-Branch: master $:$NHDT-Revision: 1.54 $ */
|
||||
/* NetHack 3.6 weapon.c $NHDT-Date: 1446078767 2015/10/29 00:32:47 $ $NHDT-Branch: master $:$NHDT-Revision: 1.55 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/*
|
||||
* This module contains code for calculation of "to hit" and damage
|
||||
* bonuses for any given weapon used, as well as weapons selection
|
||||
* code for monsters.
|
||||
* This module contains code for calculation of "to hit" and damage
|
||||
* bonuses for any given weapon used, as well as weapons selection
|
||||
* code for monsters.
|
||||
*/
|
||||
#include "hack.h"
|
||||
|
||||
@@ -135,8 +135,8 @@ struct obj *obj;
|
||||
}
|
||||
|
||||
/*
|
||||
* hitval returns an integer representing the "to hit" bonuses
|
||||
* of "otmp" against the monster.
|
||||
* hitval returns an integer representing the "to hit" bonuses
|
||||
* of "otmp" against the monster.
|
||||
*/
|
||||
int
|
||||
hitval(otmp, mon)
|
||||
@@ -150,10 +150,10 @@ struct monst *mon;
|
||||
if (Is_weapon)
|
||||
tmp += otmp->spe;
|
||||
|
||||
/* Put weapon specific "to hit" bonuses in below: */
|
||||
/* Put weapon specific "to hit" bonuses in below: */
|
||||
tmp += objects[otmp->otyp].oc_hitbon;
|
||||
|
||||
/* Put weapon vs. monster type "to hit" bonuses in below: */
|
||||
/* Put weapon vs. monster type "to hit" bonuses in below: */
|
||||
|
||||
/* Blessed weapons used against undead or demons */
|
||||
if (Is_weapon && otmp->blessed
|
||||
@@ -205,8 +205,8 @@ struct monst *mon;
|
||||
*/
|
||||
|
||||
/*
|
||||
* dmgval returns an integer representing the damage bonuses
|
||||
* of "otmp" against the monster.
|
||||
* dmgval returns an integer representing the damage bonuses
|
||||
* of "otmp" against the monster.
|
||||
*/
|
||||
int
|
||||
dmgval(otmp, mon)
|
||||
@@ -316,7 +316,7 @@ struct monst *mon;
|
||||
}
|
||||
}
|
||||
|
||||
/* Put weapon vs. monster type damage bonuses in below: */
|
||||
/* Put weapon vs. monster type damage bonuses in below: */
|
||||
if (Is_weapon || otmp->oclass == GEM_CLASS || otmp->oclass == BALL_CLASS
|
||||
|| otmp->oclass == CHAIN_CLASS) {
|
||||
int bonus = 0;
|
||||
@@ -348,13 +348,13 @@ struct monst *mon;
|
||||
tmp = 1;
|
||||
}
|
||||
|
||||
return (tmp);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
STATIC_DCL struct obj *FDECL(oselect, (struct monst *, int));
|
||||
#define Oselect(x) \
|
||||
if ((otmp = oselect(mtmp, x)) != 0) \
|
||||
return (otmp);
|
||||
return otmp;
|
||||
|
||||
STATIC_OVL struct obj *
|
||||
oselect(mtmp, x)
|
||||
@@ -365,10 +365,9 @@ int x;
|
||||
|
||||
for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj) {
|
||||
if (otmp->otyp == x
|
||||
&&
|
||||
/* never select non-cockatrice corpses */
|
||||
!((x == CORPSE || x == EGG)
|
||||
&& !touch_petrifies(&mons[otmp->corpsenm]))
|
||||
&& !((x == CORPSE || x == EGG)
|
||||
&& !touch_petrifies(&mons[otmp->corpsenm]))
|
||||
&& (!otmp->oartifact || touch_artifact(otmp, mtmp)))
|
||||
return otmp;
|
||||
}
|
||||
@@ -391,7 +390,9 @@ static NEARDATA const int pwep[] = { HALBERD, BARDICHE, SPETUM,
|
||||
|
||||
static struct obj *propellor;
|
||||
|
||||
struct obj *select_rwep(mtmp) /* select a ranged weapon for the monster */
|
||||
/* select a ranged weapon for the monster */
|
||||
struct obj *
|
||||
select_rwep(mtmp)
|
||||
register struct monst *mtmp;
|
||||
{
|
||||
register struct obj *otmp;
|
||||
@@ -497,7 +498,7 @@ register struct monst *mtmp;
|
||||
/* Don't throw a cursed weapon-in-hand or an artifact */
|
||||
if ((otmp = oselect(mtmp, rwep[i])) && !otmp->oartifact
|
||||
&& !(otmp == MON_WEP(mtmp) && mwelded(otmp)))
|
||||
return (otmp);
|
||||
return otmp;
|
||||
} else
|
||||
for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj) {
|
||||
if (otmp->otyp == LOADSTONE && !otmp->cursed)
|
||||
@@ -523,8 +524,9 @@ static const NEARDATA short hwep[] = {
|
||||
SCALPEL, KNIFE, WORM_TOOTH
|
||||
};
|
||||
|
||||
/* select a hand to hand weapon for the monster */
|
||||
struct obj *
|
||||
select_hwep(mtmp) /* select a hand to hand weapon for the monster */
|
||||
select_hwep(mtmp)
|
||||
register struct monst *mtmp;
|
||||
{
|
||||
register struct obj *otmp;
|
||||
@@ -772,7 +774,7 @@ abon()
|
||||
else if (dex < 8)
|
||||
return (sbon - 1);
|
||||
else if (dex < 14)
|
||||
return (sbon);
|
||||
return sbon;
|
||||
else
|
||||
return (sbon + dex - 14);
|
||||
}
|
||||
@@ -784,24 +786,24 @@ dbon()
|
||||
int str = ACURR(A_STR);
|
||||
|
||||
if (Upolyd)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (str < 6)
|
||||
return (-1);
|
||||
return -1;
|
||||
else if (str < 16)
|
||||
return (0);
|
||||
return 0;
|
||||
else if (str < 18)
|
||||
return (1);
|
||||
return 1;
|
||||
else if (str == 18)
|
||||
return (2); /* up to 18 */
|
||||
return 2; /* up to 18 */
|
||||
else if (str <= STR18(75))
|
||||
return (3); /* up to 18/75 */
|
||||
return 3; /* up to 18/75 */
|
||||
else if (str <= STR18(90))
|
||||
return (4); /* up to 18/90 */
|
||||
return 4; /* up to 18/90 */
|
||||
else if (str < STR18(100))
|
||||
return (5); /* up to 18/99 */
|
||||
return 5; /* up to 18/99 */
|
||||
else
|
||||
return (6);
|
||||
return 6;
|
||||
}
|
||||
|
||||
/* increase a towel's wetness */
|
||||
@@ -909,19 +911,19 @@ int skill;
|
||||
int tmp = P_SKILL(skill);
|
||||
|
||||
/* The more difficult the training, the more slots it takes.
|
||||
* unskilled -> basic 1
|
||||
* basic -> skilled 2
|
||||
* skilled -> expert 3
|
||||
* unskilled -> basic 1
|
||||
* basic -> skilled 2
|
||||
* skilled -> expert 3
|
||||
*/
|
||||
if (skill <= P_LAST_WEAPON || skill == P_TWO_WEAPON_COMBAT)
|
||||
return tmp;
|
||||
|
||||
/* Fewer slots used up for unarmed or martial.
|
||||
* unskilled -> basic 1
|
||||
* basic -> skilled 1
|
||||
* skilled -> expert 2
|
||||
* expert -> master 2
|
||||
* master -> grand master 3
|
||||
* unskilled -> basic 1
|
||||
* basic -> skilled 1
|
||||
* skilled -> expert 2
|
||||
* expert -> master 2
|
||||
* master -> grand master 3
|
||||
*/
|
||||
return (tmp + 1) / 2;
|
||||
}
|
||||
@@ -933,12 +935,17 @@ can_advance(skill, speedy)
|
||||
int skill;
|
||||
boolean speedy;
|
||||
{
|
||||
return !P_RESTRICTED(skill) && P_SKILL(skill) < P_MAX_SKILL(skill)
|
||||
&& ((wizard && speedy)
|
||||
|| (P_ADVANCE(skill) >= (unsigned) practice_needed_to_advance(
|
||||
P_SKILL(skill))
|
||||
&& u.skills_advanced < P_SKILL_LIMIT
|
||||
&& u.weapon_slots >= slots_required(skill)));
|
||||
if (P_RESTRICTED(skill)
|
||||
|| P_SKILL(skill) >= P_MAX_SKILL(skill)
|
||||
|| u.skills_advanced >= P_SKILL_LIMIT)
|
||||
return FALSE;
|
||||
|
||||
if (wizard && speedy)
|
||||
return TRUE;
|
||||
|
||||
return (boolean) ((int) P_ADVANCE(skill)
|
||||
>= practice_needed_to_advance(P_SKILL(skill))
|
||||
&& u.weapon_slots >= slots_required(skill));
|
||||
}
|
||||
|
||||
/* return true if this skill could be advanced if more slots were available */
|
||||
@@ -946,10 +953,13 @@ STATIC_OVL boolean
|
||||
could_advance(skill)
|
||||
int skill;
|
||||
{
|
||||
return !P_RESTRICTED(skill) && P_SKILL(skill) < P_MAX_SKILL(skill)
|
||||
&& ((P_ADVANCE(skill)
|
||||
>= (unsigned) practice_needed_to_advance(P_SKILL(skill))
|
||||
&& u.skills_advanced < P_SKILL_LIMIT));
|
||||
if (P_RESTRICTED(skill)
|
||||
|| P_SKILL(skill) >= P_MAX_SKILL(skill)
|
||||
|| u.skills_advanced >= P_SKILL_LIMIT)
|
||||
return FALSE;
|
||||
|
||||
return (boolean) ((int) P_ADVANCE(skill)
|
||||
>= practice_needed_to_advance(P_SKILL(skill)));
|
||||
}
|
||||
|
||||
/* return true if this skill has reached its maximum and there's been enough
|
||||
@@ -958,9 +968,12 @@ STATIC_OVL boolean
|
||||
peaked_skill(skill)
|
||||
int skill;
|
||||
{
|
||||
return !P_RESTRICTED(skill) && P_SKILL(skill) >= P_MAX_SKILL(skill)
|
||||
&& ((P_ADVANCE(skill)
|
||||
>= (unsigned) practice_needed_to_advance(P_SKILL(skill))));
|
||||
if (P_RESTRICTED(skill))
|
||||
return FALSE;
|
||||
|
||||
return (boolean) (P_SKILL(skill) >= P_MAX_SKILL(skill)
|
||||
&& ((int) P_ADVANCE(skill)
|
||||
>= practice_needed_to_advance(P_SKILL(skill))));
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
@@ -1186,8 +1199,7 @@ int n; /* number of slots to lose; normally one */
|
||||
int skill;
|
||||
|
||||
while (--n >= 0) {
|
||||
/* deduct first from unused slots, then from last placed slot, if any
|
||||
*/
|
||||
/* deduct first from unused slots then from last placed one, if any */
|
||||
if (u.weapon_slots) {
|
||||
u.weapon_slots--;
|
||||
} else if (u.skills_advanced) {
|
||||
@@ -1212,14 +1224,12 @@ struct obj *obj;
|
||||
int type;
|
||||
|
||||
if (!obj)
|
||||
/* Not using a weapon */
|
||||
return (P_BARE_HANDED_COMBAT);
|
||||
return P_BARE_HANDED_COMBAT; /* Not using a weapon */
|
||||
if (obj->oclass != WEAPON_CLASS && obj->oclass != TOOL_CLASS
|
||||
&& obj->oclass != GEM_CLASS)
|
||||
/* Not a weapon, weapon-tool, or ammo */
|
||||
return (P_NONE);
|
||||
return P_NONE; /* Not a weapon, weapon-tool, or ammo */
|
||||
type = objects[obj->otyp].oc_skill;
|
||||
return ((type < 0) ? -type : type);
|
||||
return (type < 0) ? -type : type;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -1290,13 +1300,13 @@ struct obj *weapon;
|
||||
}
|
||||
} else if (type == P_BARE_HANDED_COMBAT) {
|
||||
/*
|
||||
* b.h. m.a.
|
||||
* unskl: +1 n/a
|
||||
* basic: +1 +3
|
||||
* skild: +2 +4
|
||||
* exprt: +2 +5
|
||||
* mastr: +3 +6
|
||||
* grand: +3 +7
|
||||
* b.h. m.a.
|
||||
* unskl: +1 n/a
|
||||
* basic: +1 +3
|
||||
* skild: +2 +4
|
||||
* exprt: +2 +5
|
||||
* mastr: +3 +6
|
||||
* grand: +3 +7
|
||||
*/
|
||||
bonus = P_SKILL(type);
|
||||
bonus = max(bonus, P_UNSKILLED) - 1; /* unskilled => 0 */
|
||||
@@ -1384,13 +1394,13 @@ struct obj *weapon;
|
||||
}
|
||||
} else if (type == P_BARE_HANDED_COMBAT) {
|
||||
/*
|
||||
* b.h. m.a.
|
||||
* unskl: 0 n/a
|
||||
* basic: +1 +3
|
||||
* skild: +1 +4
|
||||
* exprt: +2 +6
|
||||
* mastr: +2 +7
|
||||
* grand: +3 +9
|
||||
* b.h. m.a.
|
||||
* unskl: 0 n/a
|
||||
* basic: +1 +3
|
||||
* skild: +1 +4
|
||||
* exprt: +2 +6
|
||||
* mastr: +2 +7
|
||||
* grand: +3 +9
|
||||
*/
|
||||
bonus = P_SKILL(type);
|
||||
bonus = max(bonus, P_UNSKILLED) - 1; /* unskilled => 0 */
|
||||
|
||||
143
src/wizard.c
143
src/wizard.c
@@ -1,11 +1,11 @@
|
||||
/* NetHack 3.6 wizard.c $NHDT-Date: 1436753529 2015/07/13 02:12:09 $ $NHDT-Branch: master $:$NHDT-Revision: 1.39 $ */
|
||||
/* NetHack 3.6 wizard.c $NHDT-Date: 1446078768 2015/10/29 00:32:48 $ $NHDT-Branch: master $:$NHDT-Revision: 1.42 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* wizard code - inspired by rogue code from Merlyn Leroy (digi-g!brian) */
|
||||
/* - heavily modified to give the wiz balls. (genat!mike) */
|
||||
/* - dewimped and given some maledictions. -3. */
|
||||
/* - generalized for 3.1 (mike@bullns.on01.bull.ca) */
|
||||
/* - heavily modified to give the wiz balls. (genat!mike) */
|
||||
/* - dewimped and given some maledictions. -3. */
|
||||
/* - generalized for 3.1 (mike@bullns.on01.bull.ca) */
|
||||
|
||||
#include "hack.h"
|
||||
#include "qtext.h"
|
||||
@@ -47,8 +47,8 @@ amulet()
|
||||
struct obj *amu;
|
||||
|
||||
#if 0 /* caller takes care of this check */
|
||||
if (!u.uhave.amulet)
|
||||
return;
|
||||
if (!u.uhave.amulet)
|
||||
return;
|
||||
#endif
|
||||
if ((((amu = uamul) != 0 && amu->otyp == AMULET_OF_YENDOR)
|
||||
|| ((amu = uwep) != 0 && amu->otyp == AMULET_OF_YENDOR))
|
||||
@@ -92,8 +92,8 @@ register struct monst *mtmp;
|
||||
|
||||
for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj)
|
||||
if (otmp->otyp == AMULET_OF_YENDOR)
|
||||
return (1);
|
||||
return (0);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -107,16 +107,16 @@ register struct monst *mtmp;
|
||||
|| otmp->otyp == BELL_OF_OPENING
|
||||
|| otmp->otyp == CANDELABRUM_OF_INVOCATION
|
||||
|| otmp->otyp == SPE_BOOK_OF_THE_DEAD)
|
||||
return (1);
|
||||
return (0);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* New for 3.1 Strategy / Tactics for the wiz, as well as other
|
||||
* monsters that are "after" something (defined via mflag3).
|
||||
* New for 3.1 Strategy / Tactics for the wiz, as well as other
|
||||
* monsters that are "after" something (defined via mflag3).
|
||||
*
|
||||
* The strategy section decides *what* the monster is going
|
||||
* to attempt, the tactics section implements the decision.
|
||||
* The strategy section decides *what* the monster is going
|
||||
* to attempt, the tactics section implements the decision.
|
||||
*/
|
||||
#define STRAT(w, x, y, typ) \
|
||||
((unsigned long) (w) | ((unsigned long) (x) << 16) \
|
||||
@@ -130,23 +130,23 @@ register int mask;
|
||||
{
|
||||
switch (mask) {
|
||||
case M3_WANTSAMUL:
|
||||
return (AMULET_OF_YENDOR);
|
||||
return AMULET_OF_YENDOR;
|
||||
case M3_WANTSBELL:
|
||||
return (BELL_OF_OPENING);
|
||||
return BELL_OF_OPENING;
|
||||
case M3_WANTSCAND:
|
||||
return (CANDELABRUM_OF_INVOCATION);
|
||||
return CANDELABRUM_OF_INVOCATION;
|
||||
case M3_WANTSBOOK:
|
||||
return (SPE_BOOK_OF_THE_DEAD);
|
||||
return SPE_BOOK_OF_THE_DEAD;
|
||||
default:
|
||||
break; /* 0 signifies quest artifact */
|
||||
}
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* If "otyp" is zero, it triggers a check for the quest_artifact,
|
||||
* since bell, book, candle, and amulet are all objects, not really
|
||||
* artifacts right now. [MRS]
|
||||
* If "otyp" is zero, it triggers a check for the quest_artifact,
|
||||
* since bell, book, candle, and amulet are all objects, not really
|
||||
* artifacts right now. [MRS]
|
||||
*/
|
||||
STATIC_OVL boolean
|
||||
mon_has_arti(mtmp, otyp)
|
||||
@@ -158,11 +158,11 @@ register short otyp;
|
||||
for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj) {
|
||||
if (otyp) {
|
||||
if (otmp->otyp == otyp)
|
||||
return (1);
|
||||
return 1;
|
||||
} else if (is_quest_artifact(otmp))
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
STATIC_OVL struct monst *
|
||||
@@ -176,9 +176,9 @@ register short otyp;
|
||||
/* no need for !DEADMONSTER check here since they have no inventory */
|
||||
if (mtmp2 != mtmp)
|
||||
if (mon_has_arti(mtmp2, otyp))
|
||||
return (mtmp2);
|
||||
return mtmp2;
|
||||
|
||||
return ((struct monst *) 0);
|
||||
return (struct monst *) 0;
|
||||
}
|
||||
|
||||
STATIC_OVL struct obj *
|
||||
@@ -190,10 +190,10 @@ register short otyp;
|
||||
for (otmp = fobj; otmp; otmp = otmp->nobj)
|
||||
if (otyp) {
|
||||
if (otmp->otyp == otyp)
|
||||
return (otmp);
|
||||
return otmp;
|
||||
} else if (is_quest_artifact(otmp))
|
||||
return (otmp);
|
||||
return ((struct obj *) 0);
|
||||
return otmp;
|
||||
return (struct obj *) 0;
|
||||
}
|
||||
|
||||
STATIC_OVL boolean
|
||||
@@ -202,19 +202,19 @@ register int mask;
|
||||
{
|
||||
switch (mask) {
|
||||
case M3_WANTSAMUL:
|
||||
return (boolean)(u.uhave.amulet);
|
||||
return (boolean) u.uhave.amulet;
|
||||
case M3_WANTSBELL:
|
||||
return (boolean)(u.uhave.bell);
|
||||
return (boolean) u.uhave.bell;
|
||||
case M3_WANTSCAND:
|
||||
return (boolean)(u.uhave.menorah);
|
||||
return (boolean) u.uhave.menorah;
|
||||
case M3_WANTSBOOK:
|
||||
return (boolean)(u.uhave.book);
|
||||
return (boolean) u.uhave.book;
|
||||
case M3_WANTSARTI:
|
||||
return (boolean)(u.uhave.questart);
|
||||
return (boolean) u.uhave.questart;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
STATIC_OVL unsigned long
|
||||
@@ -232,15 +232,15 @@ register struct monst *mtmp;
|
||||
otyp = which_arti(mask);
|
||||
if (!mon_has_arti(mtmp, otyp)) {
|
||||
if (you_have(mask))
|
||||
return (STRAT(STRAT_PLAYER, u.ux, u.uy, mask));
|
||||
return STRAT(STRAT_PLAYER, u.ux, u.uy, mask);
|
||||
else if ((otmp = on_ground(otyp)))
|
||||
return (STRAT(STRAT_GROUND, otmp->ox, otmp->oy, mask));
|
||||
else if ((mtmp2 = other_mon_has_arti(mtmp, otyp)) != 0 &&
|
||||
return STRAT(STRAT_GROUND, otmp->ox, otmp->oy, mask);
|
||||
else if ((mtmp2 = other_mon_has_arti(mtmp, otyp)) != 0
|
||||
/* when seeking the Amulet, avoid targetting the Wizard
|
||||
or temple priests (to protect Moloch's high priest) */
|
||||
(otyp != AMULET_OF_YENDOR
|
||||
|| (!mtmp2->iswiz && !inhistemple(mtmp2))))
|
||||
return (STRAT(STRAT_MONSTR, mtmp2->mx, mtmp2->my, mask));
|
||||
&& (otyp != AMULET_OF_YENDOR
|
||||
|| (!mtmp2->iswiz && !inhistemple(mtmp2))))
|
||||
return STRAT(STRAT_MONSTR, mtmp2->mx, mtmp2->my, mask);
|
||||
}
|
||||
return (unsigned long) STRAT_NONE;
|
||||
}
|
||||
@@ -251,24 +251,24 @@ register struct monst *mtmp;
|
||||
{
|
||||
unsigned long strat, dstrat;
|
||||
|
||||
if (!is_covetous(mtmp->data) ||
|
||||
if (!is_covetous(mtmp->data)
|
||||
/* perhaps a shopkeeper has been polymorphed into a master
|
||||
lich; we don't want it teleporting to the stairs to heal
|
||||
because that will leave its shop untended */
|
||||
(mtmp->isshk && inhishop(mtmp)) ||
|
||||
|| (mtmp->isshk && inhishop(mtmp))
|
||||
/* likewise for temple priests */
|
||||
(mtmp->ispriest && inhistemple(mtmp)))
|
||||
|| (mtmp->ispriest && inhistemple(mtmp)))
|
||||
return (unsigned long) STRAT_NONE;
|
||||
|
||||
switch ((mtmp->mhp * 3) / mtmp->mhpmax) { /* 0-3 */
|
||||
|
||||
default:
|
||||
case 0: /* panic time - mtmp is almost snuffed */
|
||||
return (unsigned long) (STRAT_HEAL);
|
||||
return (unsigned long) STRAT_HEAL;
|
||||
|
||||
case 1: /* the wiz is less cautious */
|
||||
if (mtmp->data != &mons[PM_WIZARD_OF_YENDOR])
|
||||
return (unsigned long) (STRAT_HEAL);
|
||||
return (unsigned long) STRAT_HEAL;
|
||||
/* else fall through */
|
||||
|
||||
case 2:
|
||||
@@ -282,29 +282,28 @@ register struct monst *mtmp;
|
||||
|
||||
if (context.made_amulet)
|
||||
if ((strat = target_on(M3_WANTSAMUL, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
|
||||
if (u.uevent.invoked) { /* priorities change once gate opened */
|
||||
|
||||
if ((strat = target_on(M3_WANTSARTI, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
if ((strat = target_on(M3_WANTSBOOK, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
if ((strat = target_on(M3_WANTSBELL, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
if ((strat = target_on(M3_WANTSCAND, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
} else {
|
||||
if ((strat = target_on(M3_WANTSBOOK, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
if ((strat = target_on(M3_WANTSBELL, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
if ((strat = target_on(M3_WANTSCAND, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
if ((strat = target_on(M3_WANTSARTI, mtmp)) != STRAT_NONE)
|
||||
return (strat);
|
||||
return strat;
|
||||
}
|
||||
return (dstrat);
|
||||
return dstrat;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -333,14 +332,14 @@ register struct monst *mtmp;
|
||||
if (distu(mtmp->mx, mtmp->my) > (BOLT_LIM * BOLT_LIM))
|
||||
if (mtmp->mhp <= mtmp->mhpmax - 8) {
|
||||
mtmp->mhp += rnd(8);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
/* fall through :-) */
|
||||
|
||||
case STRAT_NONE: /* harass */
|
||||
if (!rn2(!mtmp->mflee ? 5 : 33))
|
||||
mnexto(mtmp);
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
default: /* kill, maim, pillage! */
|
||||
{
|
||||
@@ -350,12 +349,12 @@ register struct monst *mtmp;
|
||||
struct obj *otmp;
|
||||
|
||||
if (!targ) { /* simply wants you to close */
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
if ((u.ux == tx && u.uy == ty) || where == STRAT_PLAYER) {
|
||||
/* player is standing on it (or has it) */
|
||||
mnexto(mtmp);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
if (where == STRAT_GROUND) {
|
||||
if (!MON_AT(tx, ty) || (mtmp->mx == tx && mtmp->my == ty)) {
|
||||
@@ -370,23 +369,23 @@ register struct monst *mtmp;
|
||||
: distant_name(otmp, doname));
|
||||
obj_extract_self(otmp);
|
||||
(void) mpickobj(mtmp, otmp);
|
||||
return (1);
|
||||
return 1;
|
||||
} else
|
||||
return (0);
|
||||
return 0;
|
||||
} else {
|
||||
/* a monster is standing on it - cause some trouble */
|
||||
if (!rn2(5))
|
||||
mnexto(mtmp);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
} else { /* a monster has it - 'port beside it. */
|
||||
(void) mnearto(mtmp, tx, ty, FALSE);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*NOTREACHED*/
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -505,7 +504,7 @@ struct monst *mcast;
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Let's resurrect the wizard, for some unexpected fun. */
|
||||
/* Let's resurrect the wizard, for some unexpected fun. */
|
||||
void
|
||||
resurrect()
|
||||
{
|
||||
@@ -525,9 +524,9 @@ resurrect()
|
||||
verb = "elude";
|
||||
mmtmp = &migrating_mons;
|
||||
while ((mtmp = *mmtmp) != 0) {
|
||||
if (mtmp->iswiz &&
|
||||
if (mtmp->iswiz
|
||||
/* if he has the Amulet, he won't bring it to you */
|
||||
!mon_has_amulet(mtmp)
|
||||
&& !mon_has_amulet(mtmp)
|
||||
&& (elapsed = monstermoves - mtmp->mlstmv) > 0L) {
|
||||
mon_catchup_elapsed_time(mtmp, elapsed);
|
||||
if (elapsed >= LARGEST_INT)
|
||||
@@ -559,8 +558,8 @@ resurrect()
|
||||
}
|
||||
}
|
||||
|
||||
/* Here, we make trouble for the poor shmuck who actually */
|
||||
/* managed to do in the Wizard. */
|
||||
/* Here, we make trouble for the poor shmuck who actually
|
||||
managed to do in the Wizard. */
|
||||
void
|
||||
intervene()
|
||||
{
|
||||
|
||||
78
src/worm.c
78
src/worm.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 worm.c $NHDT-Date: 1432512770 2015/05/25 00:12:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */
|
||||
/* NetHack 3.6 worm.c $NHDT-Date: 1446078769 2015/10/29 00:32:49 $ $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -22,7 +22,7 @@ STATIC_DCL struct wseg *FDECL(create_worm_tail, (int));
|
||||
/* Description of long worm implementation.
|
||||
*
|
||||
* Each monst struct of the head of a tailed worm has a wormno set to
|
||||
* 1 <= wormno < MAX_NUM_WORMS
|
||||
* 1 <= wormno < MAX_NUM_WORMS
|
||||
* If wormno == 0 this does not mean that the monster is not a worm,
|
||||
* it just means that the monster does not have a long worm tail.
|
||||
*
|
||||
@@ -35,25 +35,24 @@ STATIC_DCL struct wseg *FDECL(create_worm_tail, (int));
|
||||
* singly threaded linked lists. The wormno variable is used as an index
|
||||
* for these segment arrays.
|
||||
*
|
||||
* wtails: The first (starting struct) of a linked list. This points
|
||||
* to the tail (last) segment of the worm.
|
||||
* wtails: The first (starting struct) of a linked list. This points
|
||||
* to the tail (last) segment of the worm.
|
||||
*
|
||||
* wheads: The last (end) of a linked list of segments. This points to
|
||||
* the segment that is at the same position as the real monster
|
||||
* (the head). Note that the segment that wheads[wormno] points
|
||||
* to, is not displayed. It is simply there to keep track of
|
||||
* where the head came from, so that worm movement and display
|
||||
*are
|
||||
* simplified later.
|
||||
* Keeping the head segment of the worm at the end of the list
|
||||
* of tail segments is an endless source of confusion, but it is
|
||||
* necessary.
|
||||
* From now on, we will use "start" and "end" to refer to the
|
||||
* linked list and "head" and "tail" to refer to the worm.
|
||||
* wheads: The last (end) of a linked list of segments. This points to
|
||||
* the segment that is at the same position as the real monster
|
||||
* (the head). Note that the segment that wheads[wormno] points
|
||||
* to, is not displayed. It is simply there to keep track of
|
||||
* where the head came from, so that worm movement and display
|
||||
* are simplified later.
|
||||
* Keeping the head segment of the worm at the end of the list
|
||||
* of tail segments is an endless source of confusion, but it is
|
||||
* necessary.
|
||||
* From now on, we will use "start" and "end" to refer to the
|
||||
* linked list and "head" and "tail" to refer to the worm.
|
||||
*
|
||||
* One final worm array is:
|
||||
*
|
||||
* wgrowtime: This tells us when to add another segment to the worm.
|
||||
* wgrowtime: This tells us when to add another segment to the worm.
|
||||
*
|
||||
* When a worm is moved, we add a new segment at the head, and delete the
|
||||
* segment at the tail (unless we want it to grow). This new head segment is
|
||||
@@ -95,7 +94,7 @@ get_wormno()
|
||||
new_wormno++;
|
||||
}
|
||||
|
||||
return (0); /* level infested with worms */
|
||||
return 0; /* level infested with worms */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -338,7 +337,7 @@ struct obj *weap;
|
||||
/* Normally 17-20 does */
|
||||
|
||||
if (weap && is_blade(weap)) /* With a blade 1- 6 does not cut */
|
||||
cut_chance += 10; /* 7-20 does */
|
||||
cut_chance += 10; /* 7-20 does */
|
||||
|
||||
if (cut_chance < 17)
|
||||
return; /* not good enough */
|
||||
@@ -672,24 +671,20 @@ register xchar *nx, *ny;
|
||||
*nx = x;
|
||||
*ny = y;
|
||||
|
||||
*nx += (x > 1 ? /* extreme left ? */
|
||||
(x < COLNO ? /* extreme right ? */
|
||||
(rn2(3) - 1) /* neither so +1, 0, or -1 */
|
||||
: -rn2(2)) /* 0, or -1 */
|
||||
: rn2(2)); /* 0, or 1 */
|
||||
*nx += (x > 1 /* extreme left ? */
|
||||
? (x < COLNO /* extreme right ? */
|
||||
? (rn2(3) - 1) /* neither so +1, 0, or -1 */
|
||||
: -rn2(2)) /* 0, or -1 */
|
||||
: rn2(2)); /* 0, or 1 */
|
||||
|
||||
*ny +=
|
||||
(*nx == x ? /* same kind of thing with y */
|
||||
(y > 1 ? (y < ROWNO ? (rn2(2) ? 1 : -1) : -1) : 1)
|
||||
: (y > 1 ? (y < ROWNO ? (rn2(3) - 1) : -rn2(2)) : rn2(2)));
|
||||
*ny += (*nx == x /* same kind of thing with y */
|
||||
? (y > 1 ? (y < ROWNO ? (rn2(2) ? 1 : -1) : -1) : 1)
|
||||
: (y > 1 ? (y < ROWNO ? (rn2(3) - 1) : -rn2(2)) : rn2(2)));
|
||||
}
|
||||
|
||||
/* count_wsegs()
|
||||
*
|
||||
* returns
|
||||
* the number of visible segments that a worm has.
|
||||
* returns the number of visible segments that a worm has.
|
||||
*/
|
||||
|
||||
int
|
||||
count_wsegs(mtmp)
|
||||
struct monst *mtmp;
|
||||
@@ -708,9 +703,7 @@ struct monst *mtmp;
|
||||
}
|
||||
|
||||
/* create_worm_tail()
|
||||
*
|
||||
* will create a worm tail chain of (num_segs + 1) and return a pointer to
|
||||
* it.
|
||||
* will create a worm tail chain of (num_segs + 1) and return pointer to it.
|
||||
*/
|
||||
STATIC_OVL
|
||||
struct wseg *
|
||||
@@ -737,11 +730,10 @@ int num_segs;
|
||||
i++;
|
||||
}
|
||||
|
||||
return (new_tail);
|
||||
return new_tail;
|
||||
}
|
||||
|
||||
/* worm_known()
|
||||
*
|
||||
* Is any segment of this worm in viewing range? Note: caller must check
|
||||
* invisibility and telepathy (which should only show the head anyway).
|
||||
* Mostly used in the canseemon() macro.
|
||||
@@ -773,10 +765,10 @@ int x1, y1, x2, y2;
|
||||
* With digits representing relative sequence number of the segments,
|
||||
* returns true when testing between @ and ? (passes through worm's
|
||||
* body), false between @ and ! (stays on same side of worm).
|
||||
* .w1?..
|
||||
* ..@2..
|
||||
* .65!3.
|
||||
* ...4..
|
||||
* .w1?..
|
||||
* ..@2..
|
||||
* .65!3.
|
||||
* ...4..
|
||||
*/
|
||||
|
||||
if (distmin(x1, y1, x2, y2) != 1) {
|
||||
@@ -802,9 +794,9 @@ int x1, y1, x2, y2;
|
||||
/* we don't know which of <x1,y2> or <x2,y1> we'll hit first, but
|
||||
whichever it is, they're consecutive iff next seg is the other */
|
||||
if (curr->wx == x1 && curr->wy == y2)
|
||||
return (boolean)(wnxt->wx == x2 && wnxt->wy == y1);
|
||||
return (boolean) (wnxt->wx == x2 && wnxt->wy == y1);
|
||||
if (curr->wx == x2 && curr->wy == y1)
|
||||
return (boolean)(wnxt->wx == x1 && wnxt->wy == y2);
|
||||
return (boolean) (wnxt->wx == x1 && wnxt->wy == y2);
|
||||
}
|
||||
/* should never reach here... */
|
||||
return FALSE;
|
||||
|
||||
16
src/worn.c
16
src/worn.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 worn.c $NHDT-Date: 1445214551 2015/10/19 00:29:11 $ $NHDT-Branch: master $:$NHDT-Revision: 1.45 $ */
|
||||
/* NetHack 3.6 worn.c $NHDT-Date: 1446078770 2015/10/29 00:32:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.46 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -658,7 +658,7 @@ long flag;
|
||||
for (obj = mon->minvent; obj; obj = obj->nobj)
|
||||
if (obj->owornmask & flag)
|
||||
return obj;
|
||||
return ((struct obj *) 0);
|
||||
return (struct obj *) 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -871,9 +871,9 @@ boolean polyspot;
|
||||
}
|
||||
}
|
||||
if (handless_or_tiny || has_horns(mdat)) {
|
||||
if ((otmp = which_armor(mon, W_ARMH)) != 0 &&
|
||||
if ((otmp = which_armor(mon, W_ARMH)) != 0
|
||||
/* flimsy test for horns matches polyself handling */
|
||||
(handless_or_tiny || !is_flimsy(otmp))) {
|
||||
&& (handless_or_tiny || !is_flimsy(otmp))) {
|
||||
if (vis)
|
||||
pline("%s helmet falls to the %s!", s_suffix(Monnam(mon)),
|
||||
surface(mon->mx, mon->my));
|
||||
@@ -942,9 +942,9 @@ struct obj *obj;
|
||||
* Exceptions to things based on race. Correctly checks polymorphed player
|
||||
*race.
|
||||
* Returns:
|
||||
* 0 No exception, normal rules apply.
|
||||
* 1 If the race/object combination is acceptable.
|
||||
* -1 If the race/object combination is unacceptable.
|
||||
* 0 No exception, normal rules apply.
|
||||
* 1 If the race/object combination is acceptable.
|
||||
* -1 If the race/object combination is unacceptable.
|
||||
*/
|
||||
int
|
||||
racial_exception(mon, obj)
|
||||
@@ -959,7 +959,7 @@ struct obj *obj;
|
||||
return 1;
|
||||
/* Unacceptable Exceptions: */
|
||||
/* Checks for object that certain races should never use go here */
|
||||
/* return -1; */
|
||||
/* return -1; */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
76
src/write.c
76
src/write.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 write.c $NHDT-Date: 1442276267 2015/09/15 00:17:47 $ $NHDT-Branch: master $:$NHDT-Revision: 1.15 $ */
|
||||
/* NetHack 3.6 write.c $NHDT-Date: 1446078770 2015/10/29 00:32:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "hack.h"
|
||||
@@ -20,8 +20,7 @@ register struct obj *otmp;
|
||||
switch (otmp->otyp) {
|
||||
#ifdef MAIL
|
||||
case SCR_MAIL:
|
||||
return (2);
|
||||
/* break; */
|
||||
return 2;
|
||||
#endif
|
||||
case SCR_LIGHT:
|
||||
case SCR_GOLD_DETECTION:
|
||||
@@ -30,39 +29,32 @@ register struct obj *otmp;
|
||||
case SCR_AMNESIA:
|
||||
case SCR_FIRE:
|
||||
case SCR_EARTH:
|
||||
return (8);
|
||||
/* break; */
|
||||
return 8;
|
||||
case SCR_DESTROY_ARMOR:
|
||||
case SCR_CREATE_MONSTER:
|
||||
case SCR_PUNISHMENT:
|
||||
return (10);
|
||||
/* break; */
|
||||
return 10;
|
||||
case SCR_CONFUSE_MONSTER:
|
||||
return (12);
|
||||
/* break; */
|
||||
return 12;
|
||||
case SCR_IDENTIFY:
|
||||
return (14);
|
||||
/* break; */
|
||||
return 14;
|
||||
case SCR_ENCHANT_ARMOR:
|
||||
case SCR_REMOVE_CURSE:
|
||||
case SCR_ENCHANT_WEAPON:
|
||||
case SCR_CHARGING:
|
||||
return (16);
|
||||
/* break; */
|
||||
return 16;
|
||||
case SCR_SCARE_MONSTER:
|
||||
case SCR_STINKING_CLOUD:
|
||||
case SCR_TAMING:
|
||||
case SCR_TELEPORTATION:
|
||||
return (20);
|
||||
/* break; */
|
||||
return 20;
|
||||
case SCR_GENOCIDE:
|
||||
return (30);
|
||||
/* break; */
|
||||
return 30;
|
||||
case SCR_BLANK_PAPER:
|
||||
default:
|
||||
impossible("You can't write such a weird scroll!");
|
||||
}
|
||||
return (1000);
|
||||
return 1000;
|
||||
}
|
||||
|
||||
/* decide whether the hero knowns a particular scroll's label;
|
||||
@@ -97,6 +89,7 @@ struct obj *objlist;
|
||||
|
||||
static NEARDATA const char write_on[] = { SCROLL_CLASS, SPBOOK_CLASS, 0 };
|
||||
|
||||
/* write -- applying a magic marker */
|
||||
int
|
||||
dowrite(pen)
|
||||
register struct obj *pen;
|
||||
@@ -127,8 +120,11 @@ register struct obj *pen;
|
||||
return 0;
|
||||
/* can't write on a novel (unless/until it's been converted into a blank
|
||||
spellbook), but we want messages saying so to avoid "spellbook" */
|
||||
typeword = (paper->otyp == SPE_NOVEL) ? "book"
|
||||
: (paper->oclass == SPBOOK_CLASS) ? "spellbook" : "scroll";
|
||||
typeword = (paper->otyp == SPE_NOVEL)
|
||||
? "book"
|
||||
: (paper->oclass == SPBOOK_CLASS)
|
||||
? "spellbook"
|
||||
: "scroll";
|
||||
if (Blind) {
|
||||
if (!paper->dknown) {
|
||||
You("don't know if that %s is blank or not.", typeword);
|
||||
@@ -185,16 +181,18 @@ register struct obj *pen;
|
||||
entry, so we don't simply use first match with it;
|
||||
also, player might assign same name multiple times
|
||||
and if so, we choose one of those matches randomly */
|
||||
if (objects[i].oc_uname && !strcmpi(objects[i].oc_uname, nm) &&
|
||||
/* first match: chance incremented to 1,
|
||||
!rn2(1) is 1, we remember i;
|
||||
second match: chance incremented to 2,
|
||||
!rn2(2) has 1/2 chance to replace i;
|
||||
third match: chance incremented to 3,
|
||||
!rn2(3) has 1/3 chance to replace i
|
||||
and 2/3 chance to keep previous 50:50
|
||||
choice; so on for higher match counts */
|
||||
!rn2(++deferralchance))
|
||||
if (objects[i].oc_uname && !strcmpi(objects[i].oc_uname, nm)
|
||||
/*
|
||||
* First match: chance incremented to 1,
|
||||
* !rn2(1) is 1, we remember i;
|
||||
* second match: chance incremented to 2,
|
||||
* !rn2(2) has 1/2 chance to replace i;
|
||||
* third match: chance incremented to 3,
|
||||
* !rn2(3) has 1/3 chance to replace i
|
||||
* and 2/3 chance to keep previous 50:50
|
||||
* choice; so on for higher match counts.
|
||||
*/
|
||||
&& !rn2(++deferralchance))
|
||||
deferred = i;
|
||||
}
|
||||
/* writing by user-assigned name is same as by description:
|
||||
@@ -238,7 +236,7 @@ found:
|
||||
if (pen->spe < basecost / 2) {
|
||||
Your("marker is too dry to write that!");
|
||||
obfree(new_obj, (struct obj *) 0);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* we're really going to write now, so calculate cost
|
||||
@@ -259,7 +257,7 @@ found:
|
||||
useup(paper);
|
||||
}
|
||||
obfree(new_obj, (struct obj *) 0);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
pen->spe -= actualcost;
|
||||
|
||||
@@ -287,11 +285,11 @@ found:
|
||||
*/
|
||||
|
||||
/* if known, then either by-name or by-descr works */
|
||||
if (!objects[new_obj->otyp].oc_name_known &&
|
||||
if (!objects[new_obj->otyp].oc_name_known
|
||||
/* else if named, then only by-descr works */
|
||||
!(by_descr && label_known(new_obj->otyp, invent)) &&
|
||||
&& !(by_descr && label_known(new_obj->otyp, invent))
|
||||
/* and Luck might override after both checks have failed */
|
||||
rnl(Role_if(PM_WIZARD) ? 5 : 15)) {
|
||||
&& rnl(Role_if(PM_WIZARD) ? 5 : 15)) {
|
||||
You("%s to write that.", by_descr ? "fail" : "don't know how");
|
||||
/* scrolls disappear, spellbooks don't */
|
||||
if (paper->oclass == SPBOOK_CLASS) {
|
||||
@@ -308,7 +306,7 @@ found:
|
||||
useup(paper);
|
||||
}
|
||||
obfree(new_obj, (struct obj *) 0);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
/* can write scrolls when blind, but requires luck too;
|
||||
attempts to write books when blind are caught above */
|
||||
@@ -342,7 +340,7 @@ found:
|
||||
new_obj =
|
||||
hold_another_object(new_obj, "Oops! %s out of your grasp!",
|
||||
The(aobjnam(new_obj, "slip")), (const char *) 0);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* most book descriptions refer to cover appearance, so we can issue a
|
||||
@@ -364,8 +362,8 @@ char *outbuf;
|
||||
"vellum",
|
||||
"cloth",
|
||||
#if 0
|
||||
"canvas", "hardcover", /* not used */
|
||||
"papyrus", /* not applicable--can't be produced via writing */
|
||||
"canvas", "hardcover", /* not used */
|
||||
"papyrus", /* not applicable--can't be produced via writing */
|
||||
#endif /*0*/
|
||||
0
|
||||
};
|
||||
|
||||
222
src/zap.c
222
src/zap.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 zap.c $NHDT-Date: 1431998738 2015/05/19 01:25:38 $ $NHDT-Branch: master $:$NHDT-Revision: 1.223 $ */
|
||||
/* NetHack 3.6 zap.c $NHDT-Date: 1446078771 2015/10/29 00:32:51 $ $NHDT-Branch: master $:$NHDT-Revision: 1.230 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -110,16 +110,14 @@ struct obj *obj;
|
||||
so that casting a spell won't re-discover its forgotten book. */
|
||||
if (obj->oclass != SPBOOK_CLASS) {
|
||||
/* if type already discovered, treat this item has having been seen
|
||||
even if the hero is currently blinded (skips redundant makeknown)
|
||||
*/
|
||||
even if hero is currently blinded (skips redundant makeknown) */
|
||||
if (objects[obj->otyp].oc_name_known) {
|
||||
obj->dknown = 1; /* will usually be set already */
|
||||
/* otherwise discover it if this item itself has been or can be
|
||||
* seen */
|
||||
|
||||
/* otherwise discover it if item itself has been or can be seen */
|
||||
} else {
|
||||
/* in case it was picked up while blind and then zapped without
|
||||
examining inventory after regaining sight (bypassing xname())
|
||||
*/
|
||||
examining inventory after regaining sight (bypassing xname) */
|
||||
if (!Blind)
|
||||
obj->dknown = 1;
|
||||
/* make the discovery iff we know what we're manipulating */
|
||||
@@ -600,10 +598,10 @@ coord *cc;
|
||||
* get_container_location() returns the following information
|
||||
* about the outermost container:
|
||||
* loc argument gets set to:
|
||||
* OBJ_INVENT if in hero's inventory; return 0.
|
||||
* OBJ_FLOOR if on the floor; return 0.
|
||||
* OBJ_BURIED if buried; return 0.
|
||||
* OBJ_MINVENT if in monster's inventory; return monster.
|
||||
* OBJ_INVENT if in hero's inventory; return 0.
|
||||
* OBJ_FLOOR if on the floor; return 0.
|
||||
* OBJ_BURIED if buried; return 0.
|
||||
* OBJ_MINVENT if in monster's inventory; return monster.
|
||||
* container_nesting is updated with the nesting depth of the containers
|
||||
* if applicable.
|
||||
*/
|
||||
@@ -1002,13 +1000,14 @@ register struct obj *obj;
|
||||
boolean u_ring;
|
||||
|
||||
/* Is this a charged/enchanted object? */
|
||||
if (!obj || (!objects[obj->otyp].oc_charged && obj->oclass != WEAPON_CLASS
|
||||
&& obj->oclass != ARMOR_CLASS && !is_weptool(obj))
|
||||
if (!obj
|
||||
|| (!objects[obj->otyp].oc_charged && obj->oclass != WEAPON_CLASS
|
||||
&& obj->oclass != ARMOR_CLASS && !is_weptool(obj))
|
||||
|| obj->spe <= 0)
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
if (defends(AD_DRLI, obj) || defends_when_carried(AD_DRLI, obj)
|
||||
|| obj_resists(obj, 10, 90))
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
|
||||
/* Charge for the cost of the object */
|
||||
costly_alteration(obj, COST_DRAIN);
|
||||
@@ -1062,7 +1061,7 @@ register struct obj *obj;
|
||||
}
|
||||
if (carried(obj))
|
||||
update_inventory();
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
boolean
|
||||
@@ -1070,7 +1069,8 @@ obj_resists(obj, ochance, achance)
|
||||
struct obj *obj;
|
||||
int ochance, achance; /* percent chance for ordinary objects, artifacts */
|
||||
{
|
||||
if (obj->otyp == AMULET_OF_YENDOR || obj->otyp == SPE_BOOK_OF_THE_DEAD
|
||||
if (obj->otyp == AMULET_OF_YENDOR
|
||||
|| obj->otyp == SPE_BOOK_OF_THE_DEAD
|
||||
|| obj->otyp == CANDELABRUM_OF_INVOCATION
|
||||
|| obj->otyp == BELL_OF_OPENING
|
||||
|| (obj->otyp == CORPSE && is_rider(&mons[obj->corpsenm]))) {
|
||||
@@ -1078,7 +1078,7 @@ int ochance, achance; /* percent chance for ordinary objects, artifacts */
|
||||
} else {
|
||||
int chance = rn2(100);
|
||||
|
||||
return ((boolean)(chance < (obj->oartifact ? achance : ochance)));
|
||||
return (boolean) (chance < (obj->oartifact ? achance : ochance));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1104,7 +1104,7 @@ struct obj *obj;
|
||||
if (obj->quan > 4L)
|
||||
zap_odds /= 2;
|
||||
|
||||
return ((boolean)(!rn2(zap_odds)));
|
||||
return (boolean) !rn2(zap_odds);
|
||||
}
|
||||
|
||||
/* Use up at least minwt number of things made of material mat.
|
||||
@@ -1723,16 +1723,16 @@ struct obj *obj, *otmp;
|
||||
* monster's inventory. They are not polymorphed
|
||||
* either.
|
||||
* UNDEAD_TURNING - When an undead creature gets killed via
|
||||
* undead turning, prevent its corpse from being
|
||||
* immediately revived by the same effect.
|
||||
* undead turning, prevent its corpse from being
|
||||
* immediately revived by the same effect.
|
||||
* STONE_TO_FLESH - If a statue can't be revived, its
|
||||
* contents get dropped before turning it into
|
||||
* meat; prevent those contents from being hit.
|
||||
* contents get dropped before turning it into
|
||||
* meat; prevent those contents from being hit.
|
||||
* retouch_equipment() - bypass flag is used to track which
|
||||
* items have been handled (bhito isn't involved).
|
||||
* items have been handled (bhito isn't involved).
|
||||
* menu_drop(), askchain() - inventory traversal where multiple
|
||||
* Drop can alter the invent chain while traversal
|
||||
* is in progress (bhito isn't involved).
|
||||
* Drop can alter the invent chain while traversal
|
||||
* is in progress (bhito isn't involved).
|
||||
*
|
||||
* The bypass bit on all objects is reset each turn, whenever
|
||||
* context.bypasses is set.
|
||||
@@ -1969,7 +1969,7 @@ schar zz;
|
||||
|
||||
/*
|
||||
* zappable - returns 1 if zap is available, 0 otherwise.
|
||||
* it removes a charge from the wand if zappable.
|
||||
* it removes a charge from the wand if zappable.
|
||||
* added by GAN 11/03/86
|
||||
*/
|
||||
int
|
||||
@@ -2054,6 +2054,7 @@ struct obj *otmp;
|
||||
|
||||
static NEARDATA const char zap_syms[] = { WAND_CLASS, 0 };
|
||||
|
||||
/* 'z' command (or 'y' if numbed_pad==-1) */
|
||||
int
|
||||
dozap()
|
||||
{
|
||||
@@ -2061,10 +2062,10 @@ dozap()
|
||||
int damage;
|
||||
|
||||
if (check_capacity((char *) 0))
|
||||
return (0);
|
||||
return 0;
|
||||
obj = getobj(zap_syms, "zap");
|
||||
if (!obj)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
check_unpaid(obj);
|
||||
|
||||
@@ -2074,7 +2075,7 @@ dozap()
|
||||
else if (obj->cursed && !rn2(WAND_BACKFIRE_CHANCE)) {
|
||||
backfire(obj); /* the wand blows up in your face! */
|
||||
exercise(A_STR, FALSE);
|
||||
return (1);
|
||||
return 1;
|
||||
} else if (!(objects[obj->otyp].oc_dir == NODIR) && !getdir((char *) 0)) {
|
||||
if (!Blind)
|
||||
pline("%s glows and fades.", The(xname(obj)));
|
||||
@@ -2087,7 +2088,7 @@ dozap()
|
||||
losehp(Maybe_Half_Phys(damage), buf, NO_KILLER_PREFIX);
|
||||
}
|
||||
} else {
|
||||
/* Are we having fun yet?
|
||||
/* Are we having fun yet?
|
||||
* weffects -> buzz(obj->otyp) -> zhitm (temple priest) ->
|
||||
* attack -> hitum -> known_hitum -> ghod_hitsu ->
|
||||
* buzz(AD_ELEC) -> destroy_item(WAND_CLASS) ->
|
||||
@@ -2103,7 +2104,7 @@ dozap()
|
||||
useup(obj);
|
||||
}
|
||||
update_inventory(); /* maybe used a charge */
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -2409,7 +2410,7 @@ boolean ordinary;
|
||||
that the wand itself has been seen */
|
||||
if (learn_it)
|
||||
learnwand(obj);
|
||||
return (damage);
|
||||
return damage;
|
||||
}
|
||||
|
||||
/* called when poly'd hero uses breath attack against self */
|
||||
@@ -2938,7 +2939,7 @@ int skill;
|
||||
|
||||
const char *
|
||||
exclam(force)
|
||||
register int force;
|
||||
int force;
|
||||
{
|
||||
/* force == 0 occurs e.g. with sleep ray */
|
||||
/* note that large force is usual with wands so that !! would
|
||||
@@ -2948,16 +2949,16 @@ register int force;
|
||||
|
||||
void
|
||||
hit(str, mtmp, force)
|
||||
register const char *str;
|
||||
register struct monst *mtmp;
|
||||
register const char *force; /* usually either "." or "!" */
|
||||
const char *str;
|
||||
struct monst *mtmp;
|
||||
const char *force; /* usually either "." or "!" */
|
||||
{
|
||||
if ((!cansee(bhitpos.x, bhitpos.y) && !canspotmon(mtmp)
|
||||
&& !(u.uswallow && mtmp == u.ustuck)) || !flags.verbose)
|
||||
pline("%s %s it.", The(str), vtense(str, "hit"));
|
||||
else
|
||||
pline("%s %s %s%s", The(str), vtense(str, "hit"), mon_nam(mtmp),
|
||||
force);
|
||||
pline("%s %s %s%s", The(str), vtense(str, "hit"),
|
||||
mon_nam(mtmp), force);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2985,13 +2986,12 @@ int range, *skipstart, *skipend;
|
||||
|
||||
/*
|
||||
* Called for the following distance effects:
|
||||
* when a weapon is thrown (weapon == THROWN_WEAPON)
|
||||
* when an object is kicked (KICKED_WEAPON)
|
||||
* when an IMMEDIATE wand is zapped (ZAPPED_WAND)
|
||||
* when a light beam is flashed (FLASHED_LIGHT)
|
||||
* when a mirror is applied (INVIS_BEAM)
|
||||
* A thrown/kicked object falls down at the end of its range or when a
|
||||
*monster
|
||||
* when a weapon is thrown (weapon == THROWN_WEAPON)
|
||||
* when an object is kicked (KICKED_WEAPON)
|
||||
* when an IMMEDIATE wand is zapped (ZAPPED_WAND)
|
||||
* when a light beam is flashed (FLASHED_LIGHT)
|
||||
* when a mirror is applied (INVIS_BEAM)
|
||||
* A thrown/kicked object falls down at end of its range or when a monster
|
||||
* is hit. The variable 'bhitpos' is set to the final position of the weapon
|
||||
* thrown/zapped. The ray of a wand may affect (by calling a provided
|
||||
* function) several objects and monsters on its path. The return value
|
||||
@@ -3058,7 +3058,7 @@ struct obj **pobj; /* object tossed/used, set to NULL
|
||||
if (is_pick(obj) && inside_shop(x, y)
|
||||
&& (mtmp = shkcatch(obj, x, y))) {
|
||||
tmp_at(DISP_END, 0);
|
||||
return (mtmp);
|
||||
return mtmp;
|
||||
}
|
||||
|
||||
typ = levl[bhitpos.x][bhitpos.y].typ;
|
||||
@@ -3323,7 +3323,7 @@ int dx, dy;
|
||||
mtmp = m_at(bhitpos.x, bhitpos.y);
|
||||
m_respond(mtmp);
|
||||
tmp_at(DISP_END, 0);
|
||||
return (mtmp);
|
||||
return mtmp;
|
||||
}
|
||||
if (!ZAP_POS(levl[bhitpos.x][bhitpos.y].typ)
|
||||
|| closed_door(bhitpos.x, bhitpos.y)) {
|
||||
@@ -3341,7 +3341,7 @@ int dx, dy;
|
||||
} else { /* we catch it */
|
||||
tmp_at(DISP_END, 0);
|
||||
You("skillfully catch the boomerang.");
|
||||
return (&youmonst);
|
||||
return &youmonst;
|
||||
}
|
||||
}
|
||||
tmp_at(bhitpos.x, bhitpos.y);
|
||||
@@ -3360,8 +3360,9 @@ int dx, dy;
|
||||
return (struct monst *) 0;
|
||||
}
|
||||
|
||||
/* used by buzz(); also used by munslime(muse.c) */
|
||||
int zhitm(mon, type, nd, ootmp) /* returns damage to mon */
|
||||
/* used by buzz(); also used by munslime(muse.c); returns damage to mon */
|
||||
int
|
||||
zhitm(mon, type, nd, ootmp)
|
||||
register struct monst *mon;
|
||||
register int type, nd;
|
||||
struct obj **ootmp; /* to return worn armor for caller to disintegrate */
|
||||
@@ -3519,7 +3520,7 @@ struct obj **ootmp; /* to return worn armor for caller to disintegrate */
|
||||
debugpline3("zapped monster hp = %d (= %d - %d)", mon->mhp - tmp,
|
||||
mon->mhp, tmp);
|
||||
mon->mhp -= tmp;
|
||||
return (tmp);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
@@ -3736,7 +3737,7 @@ int type; /* either hero cast spell type or 0 */
|
||||
/* very high armor protection does not achieve invulnerability */
|
||||
ac = AC_VALUE(ac);
|
||||
|
||||
return (3 - chance) < ac + spell_bonus;
|
||||
return (3 - chance < ac + spell_bonus);
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
@@ -4023,17 +4024,17 @@ register int dx, dy;
|
||||
explode(sx, sy, type, d(12, 6), 0, EXPL_FIERY);
|
||||
get_out_buzz:
|
||||
if (shopdamage)
|
||||
pay_for_damage(
|
||||
abstype == ZT_FIRE
|
||||
? "burn away"
|
||||
: abstype == ZT_COLD
|
||||
? "shatter"
|
||||
:
|
||||
/* "damage" indicates wall rather than door */
|
||||
abstype == ZT_ACID ? "damage" : abstype == ZT_DEATH
|
||||
? "disintegrate"
|
||||
: "destroy",
|
||||
FALSE);
|
||||
pay_for_damage(abstype == ZT_FIRE
|
||||
? "burn away"
|
||||
: abstype == ZT_COLD
|
||||
? "shatter"
|
||||
/* "damage" indicates wall rather than door */
|
||||
: abstype == ZT_ACID
|
||||
? "damage"
|
||||
: abstype == ZT_DEATH
|
||||
? "disintegrate"
|
||||
: "destroy",
|
||||
FALSE);
|
||||
bhitpos = save_bhitpos;
|
||||
}
|
||||
|
||||
@@ -4426,7 +4427,9 @@ short exploding_wand_typ;
|
||||
return rangemod;
|
||||
}
|
||||
|
||||
void fracture_rock(obj) /* fractured by pick-axe or wand of striking */
|
||||
/* fractured by pick-axe or wand of striking */
|
||||
void
|
||||
fracture_rock(obj)
|
||||
register struct obj *obj; /* no texts here! */
|
||||
{
|
||||
xchar x, y;
|
||||
@@ -4494,13 +4497,13 @@ register struct obj *obj;
|
||||
|
||||
/*
|
||||
* destroy_strings[dindx][0:singular,1:plural,2:killer_reason]
|
||||
* [0] freezing potion
|
||||
* [1] boiling potion other than oil
|
||||
* [2] boiling potion of oil
|
||||
* [3] burning scroll
|
||||
* [4] burning spellbook
|
||||
* [5] shocked ring
|
||||
* [6] shocked wand
|
||||
* [0] freezing potion
|
||||
* [1] boiling potion other than oil
|
||||
* [2] boiling potion of oil
|
||||
* [3] burning scroll
|
||||
* [4] burning spellbook
|
||||
* [5] shocked ring
|
||||
* [6] shocked wand
|
||||
* (books, rings, and wands don't stack so don't need plural form;
|
||||
* crumbling ring doesn't do damage so doesn't need killer reason)
|
||||
*/
|
||||
@@ -4606,7 +4609,7 @@ register int osym, dmgtyp;
|
||||
break;
|
||||
}
|
||||
#if 0
|
||||
if (obj == current_wand) { skip++; break; }
|
||||
if (obj == current_wand) { skip++; break; }
|
||||
#endif
|
||||
dindx = 6;
|
||||
dmg = rnd(10);
|
||||
@@ -4781,7 +4784,7 @@ int osym, dmgtyp;
|
||||
m_useup(mtmp, obj);
|
||||
}
|
||||
}
|
||||
return (tmp);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -4842,7 +4845,7 @@ int damage, tell;
|
||||
killed(mtmp);
|
||||
}
|
||||
}
|
||||
return (resisted);
|
||||
return resisted;
|
||||
}
|
||||
|
||||
#define MAXWISHTRY 5
|
||||
@@ -4851,38 +4854,33 @@ STATIC_OVL void
|
||||
wishcmdassist(triesleft)
|
||||
int triesleft;
|
||||
{
|
||||
static NEARDATA const char *wishinfo[] =
|
||||
{
|
||||
"Wish details:", "", "Enter the name of an object, such as "
|
||||
"\"potion of monster detection\",",
|
||||
"\"scroll labeled README\", \"elven mithril-coat\", or "
|
||||
"\"Grimtooth\"",
|
||||
"(without the quotes).", "", "For object types which come in "
|
||||
"stacks, you may specify a plural "
|
||||
"name",
|
||||
"such as \"potions of healing\", or specify a count, such as "
|
||||
"\"1000 gold",
|
||||
"pieces\", although that aspect of your wish might not be granted.",
|
||||
"",
|
||||
"You may also specify various prefix values which might be used to",
|
||||
"modify the item, such as \"uncursed\" or \"rustproof\" or \"+1\".",
|
||||
"Most modifiers shown when viewing your inventory can be "
|
||||
"specified.",
|
||||
"", "You may specify 'nothing' to explicitly decline this wish.", 0,
|
||||
},
|
||||
preserve_wishless[] = "Doing so will preserve "
|
||||
"'wishless' conduct.",
|
||||
retry_info[] = "If you specify an "
|
||||
"unrecognized object name %s%s "
|
||||
"time%s,",
|
||||
retry_too[] =
|
||||
"a randomly chosen item will be granted.",
|
||||
suppress_cmdassist[] =
|
||||
"(Suppress this assistance with "
|
||||
"!cmdassist in your config file.)",
|
||||
*cardinals[] = { "zero", "one", "two",
|
||||
"three", "four", "five" },
|
||||
too_many[] = "too many";
|
||||
static NEARDATA const char *
|
||||
wishinfo[] = {
|
||||
"Wish details:",
|
||||
"",
|
||||
"Enter the name of an object, such as \"potion of monster detection\",",
|
||||
"\"scroll labeled README\", \"elven mithril-coat\", or \"Grimtooth\"",
|
||||
"(without the quotes).",
|
||||
"",
|
||||
"For object types which come in stacks, you may specify a plural name",
|
||||
"such as \"potions of healing\", or specify a count, such as \"1000 gold",
|
||||
"pieces\", although that aspect of your wish might not be granted.",
|
||||
"",
|
||||
"You may also specify various prefix values which might be used to",
|
||||
"modify the item, such as \"uncursed\" or \"rustproof\" or \"+1\".",
|
||||
"Most modifiers shown when viewing your inventory can be specified.",
|
||||
"",
|
||||
"You may specify 'nothing' to explicitly decline this wish.",
|
||||
0,
|
||||
},
|
||||
preserve_wishless[] = "Doing so will preserve 'wishless' conduct.",
|
||||
retry_info[] =
|
||||
"If you specify an unrecognized object name %s%s time%s,",
|
||||
retry_too[] = "a randomly chosen item will be granted.",
|
||||
suppress_cmdassist[] =
|
||||
"(Suppress this assistance with !cmdassist in your config file.)",
|
||||
*cardinals[] = { "zero", "one", "two", "three", "four", "five" },
|
||||
too_many[] = "too many";
|
||||
int i;
|
||||
winid win;
|
||||
char buf[BUFSZ];
|
||||
@@ -4895,10 +4893,12 @@ int triesleft;
|
||||
if (!u.uconduct.wishes)
|
||||
putstr(win, 0, preserve_wishless);
|
||||
putstr(win, 0, "");
|
||||
Sprintf(buf, retry_info, (triesleft >= 0 && triesleft < SIZE(cardinals))
|
||||
? cardinals[triesleft]
|
||||
: too_many,
|
||||
(triesleft < MAXWISHTRY) ? " more" : "", plur(triesleft));
|
||||
Sprintf(buf, retry_info,
|
||||
(triesleft >= 0 && triesleft < SIZE(cardinals))
|
||||
? cardinals[triesleft]
|
||||
: too_many,
|
||||
(triesleft < MAXWISHTRY) ? " more" : "",
|
||||
plur(triesleft));
|
||||
putstr(win, 0, buf);
|
||||
putstr(win, 0, retry_too);
|
||||
putstr(win, 0, "");
|
||||
|
||||
Reference in New Issue
Block a user