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:
PatR
2015-10-28 17:33:38 -07:00
parent 530ba8e3d3
commit a447534b2f
10 changed files with 589 additions and 594 deletions

View File

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

View File

@@ -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, &current_dungeon_level))
&& on_level(&u.uz, &current_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 */

View File

@@ -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. */

View File

@@ -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*/

View File

@@ -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 */

View File

@@ -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()
{

View File

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

View File

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

View File

@@ -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
View File

@@ -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, "");