Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2
This commit is contained in:
@@ -227,9 +227,9 @@ and in days past, devnull.net (gone for now, but not forgotten).
|
||||
- - - - - - - - - -
|
||||
|
||||
From time to time, some depraved individual out there in netland sends a
|
||||
particularly intriguing modification to help out with the game. The gods
|
||||
of the dungeon sometimes make note of the names of the worst of these
|
||||
miscreants in this, the list of Dungeoneers:
|
||||
particularly intriguing modification to help out with the game. The
|
||||
NetHack Development Team sometimes makes note of the names of the worst
|
||||
of these miscreants in this, the list of Dungeoneers:
|
||||
|
||||
Adam Aronow Janet Walz Nathan Eady
|
||||
Alex Kompel Janne Salmijarvi Norm Meluch
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.312 $ $NHDT-Date: 1556649298 2019/04/30 18:34:58 $
|
||||
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.315 $ $NHDT-Date: 1557091781 2019/05/05 21:29:41 $
|
||||
|
||||
This fixes36.2 file is here to capture information about updates in the 3.6.x
|
||||
lineage following the release of 3.6.1 in April 2018. Please note, however,
|
||||
@@ -421,6 +421,11 @@ message given when shape-shifted vampire cheats death by reverting to its
|
||||
Vlad wasn't set up as a vampshifter properly
|
||||
poly'd hero capable of spitting venom would leave intact venom object if it
|
||||
reached end of range at a 'soft' location such as water
|
||||
avoid impossible if monster cannot be relocated from teleport region
|
||||
fix cloned monster trapped and hiding states
|
||||
split monster could be placed on trap without triggering it
|
||||
turning into green slime would make wielded or carried crysknives revert to
|
||||
worm teeth in bones data even though they remained carried
|
||||
|
||||
|
||||
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1555201698 2019/04/14 00:28:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.702 $ */
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1557088399 2019/05/05 20:33:19 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.703 $ */
|
||||
/* Copyright (c) Steve Creps, 1988. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -135,6 +135,7 @@ E boolean FDECL(drag_ball, (XCHAR_P, XCHAR_P, int *, xchar *, xchar *,
|
||||
xchar *, xchar *, boolean *, BOOLEAN_P));
|
||||
E void FDECL(drop_ball, (XCHAR_P, XCHAR_P));
|
||||
E void NDECL(drag_down);
|
||||
E void NDECL(bc_sanity_check);
|
||||
|
||||
/* ### bones.c ### */
|
||||
|
||||
|
||||
90
src/ball.c
90
src/ball.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 ball.c $NHDT-Date: 1450402033 2015/12/18 01:27:13 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.29 $ */
|
||||
/* NetHack 3.6 ball.c $NHDT-Date: 1557088406 2019/05/05 20:33:26 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.36 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) David Cohrs, 2006. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -24,12 +24,14 @@ boolean showmsg;
|
||||
setuswapwep((struct obj *) 0);
|
||||
if (uquiver == uball)
|
||||
setuqwep((struct obj *) 0);
|
||||
;
|
||||
if (uwep != uball)
|
||||
freeinv(uball);
|
||||
/* [this used to test 'if (uwep != uball)' but that always passes
|
||||
after the setuwep() above] */
|
||||
freeinv(uball); /* remove from inventory but don't place on floor */
|
||||
encumber_msg();
|
||||
}
|
||||
}
|
||||
|
||||
/* ball&chain might hit hero when falling through a trap door */
|
||||
void
|
||||
ballfall()
|
||||
{
|
||||
@@ -40,6 +42,7 @@ ballfall()
|
||||
ballrelease(TRUE);
|
||||
if (gets_hit) {
|
||||
int dmg = rn1(7, 25);
|
||||
|
||||
pline_The("iron ball falls on your %s.", body_part(HEAD));
|
||||
if (uarmh) {
|
||||
if (is_metallic(uarmh)) {
|
||||
@@ -113,9 +116,9 @@ placebc()
|
||||
|
||||
(void) flooreffects(uchain, u.ux, u.uy, ""); /* chain might rust */
|
||||
|
||||
if (carried(uball)) /* the ball is carried */
|
||||
if (carried(uball)) { /* the ball is carried */
|
||||
u.bc_order = BCPOS_DIFFER;
|
||||
else {
|
||||
} else {
|
||||
/* ball might rust -- already checked when carried */
|
||||
(void) flooreffects(uball, u.ux, u.uy, "");
|
||||
place_object(uball, u.ux, u.uy);
|
||||
@@ -411,6 +414,7 @@ boolean allow_drag;
|
||||
/* only need to move the chain? */
|
||||
if (carried(uball) || distmin(x, y, uball->ox, uball->oy) <= 2) {
|
||||
xchar oldchainx = uchain->ox, oldchainy = uchain->oy;
|
||||
|
||||
*bc_control = BC_CHAIN;
|
||||
move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
|
||||
if (carried(uball)) {
|
||||
@@ -584,7 +588,7 @@ boolean allow_drag;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
drag:
|
||||
drag:
|
||||
|
||||
if (near_capacity() > SLT_ENCUMBER && dist2(x, y, u.ux, u.uy) <= 2) {
|
||||
You("cannot %sdrag the heavy iron ball.",
|
||||
@@ -774,21 +778,24 @@ xchar x, y;
|
||||
}
|
||||
}
|
||||
|
||||
/* ball&chain cause hero to randomly lose stuff from inventory */
|
||||
STATIC_OVL void
|
||||
litter()
|
||||
{
|
||||
struct obj *otmp = invent, *nextobj;
|
||||
struct obj *otmp, *nextobj = 0;
|
||||
int capacity = weight_cap();
|
||||
|
||||
while (otmp) {
|
||||
for (otmp = invent; otmp; otmp = nextobj) {
|
||||
nextobj = otmp->nobj;
|
||||
if ((otmp != uball) && (rnd(capacity) <= (int) otmp->owt)) {
|
||||
if (canletgo(otmp, "")) {
|
||||
pline("%s you down the stairs.", Yobjnam2(otmp, "follow"));
|
||||
You("drop %s and %s %s down the stairs with you.",
|
||||
yname(otmp), (otmp->quan == 1L) ? "it" : "they",
|
||||
otense(otmp, "fall"));
|
||||
dropx(otmp);
|
||||
encumber_msg(); /* drop[xyz]() probably ought to to this... */
|
||||
}
|
||||
}
|
||||
otmp = nextobj;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -839,4 +846,65 @@ drag_down()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bc_sanity_check()
|
||||
{
|
||||
int otyp;
|
||||
unsigned save_nameknown;
|
||||
const char *onam;
|
||||
|
||||
if (Punished && (!uball || !uchain)) {
|
||||
impossible("Punished without %s%s%s?",
|
||||
!uball ? "iron ball" : "",
|
||||
(!uball && !uchain) ? " and " : "",
|
||||
!uchain ? "attached chain" : "");
|
||||
} else if (!Punished && (uball || uchain)) {
|
||||
impossible("Attached %s%s%s without being Punished?",
|
||||
uchain ? "chain" : "",
|
||||
(uchain && uball) ? " and " : "",
|
||||
uball ? "iron ball" : "");
|
||||
}
|
||||
/* ball is free when swallowed, changing levels, other times? */
|
||||
if (uball && (uball->otyp != HEAVY_IRON_BALL
|
||||
|| (uball->where != OBJ_FLOOR
|
||||
&& uball->where != OBJ_INVENT
|
||||
&& uball->where != OBJ_FREE)
|
||||
|| (uball->owornmask & W_BALL) == 0L
|
||||
|| (uball->owornmask & ~(W_BALL | W_WEAPON)) != 0L)) {
|
||||
otyp = uball->otyp;
|
||||
if (otyp < STRANGE_OBJECT || otyp >= NUM_OBJECTS
|
||||
|| !OBJ_NAME(objects[otyp])) {
|
||||
onam = "glorkum";
|
||||
} else {
|
||||
save_nameknown = objects[otyp].oc_name_known;
|
||||
objects[otyp].oc_name_known = 1;
|
||||
onam = simple_typename(otyp);
|
||||
objects[otyp].oc_name_known = save_nameknown;
|
||||
}
|
||||
impossible("uball: type %d (%s), where %d, wornmask=0x%08lx",
|
||||
otyp, onam, uball->where, uball->owornmask);
|
||||
}
|
||||
/* similar check to ball except can't be in inventory */
|
||||
if (uchain && (uchain->otyp != IRON_CHAIN
|
||||
|| (uchain->where != OBJ_FLOOR
|
||||
&& uchain->where != OBJ_FREE)
|
||||
/* [could simplify this to owornmask != W_CHAIN] */
|
||||
|| (uchain->owornmask & W_CHAIN) == 0L
|
||||
|| (uchain->owornmask & ~W_CHAIN) != 0L)) {
|
||||
otyp = uchain->otyp;
|
||||
if (otyp < STRANGE_OBJECT || otyp >= NUM_OBJECTS
|
||||
|| !OBJ_NAME(objects[otyp])) {
|
||||
onam = "glorkum";
|
||||
} else {
|
||||
save_nameknown = objects[otyp].oc_name_known;
|
||||
objects[otyp].oc_name_known = 1;
|
||||
onam = simple_typename(otyp);
|
||||
objects[otyp].oc_name_known = save_nameknown;
|
||||
}
|
||||
impossible("uchain: type %d (%s), where %d, wornmask=0x%08lx",
|
||||
otyp, onam, uchain->where, uchain->owornmask);
|
||||
}
|
||||
/* [check bc_order too?] */
|
||||
}
|
||||
|
||||
/*ball.c*/
|
||||
|
||||
28
src/bones.c
28
src/bones.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 bones.c $NHDT-Date: 1539653203 2018/10/16 01:26:43 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.73 $ */
|
||||
/* NetHack 3.6 bones.c $NHDT-Date: 1557092711 2019/05/05 21:45:11 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.75 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -214,8 +214,8 @@ char *namebuf;
|
||||
/* called by savebones(); also by finish_paybill(shk.c) */
|
||||
void
|
||||
drop_upon_death(mtmp, cont, x, y)
|
||||
struct monst *mtmp;
|
||||
struct obj *cont;
|
||||
struct monst *mtmp; /* monster if hero turned into one (other than ghost) */
|
||||
struct obj *cont; /* container if hero is turned into a statue */
|
||||
int x, y;
|
||||
{
|
||||
struct obj *otmp;
|
||||
@@ -223,9 +223,13 @@ int x, y;
|
||||
u.twoweap = 0; /* ensure curse() won't cause swapwep to drop twice */
|
||||
while ((otmp = invent) != 0) {
|
||||
obj_extract_self(otmp);
|
||||
obj_no_longer_held(otmp);
|
||||
/* when turning into green slime, all gear remains held;
|
||||
other types "arise from the dead" do aren't holding
|
||||
equipment during their brief interval as a corpse */
|
||||
if (!mtmp || is_undead(mtmp->data))
|
||||
obj_no_longer_held(otmp);
|
||||
|
||||
otmp->owornmask = 0;
|
||||
otmp->owornmask = 0L;
|
||||
/* lamps don't go out when dropped */
|
||||
if ((cont || artifact_light(otmp)) && obj_is_burning(otmp))
|
||||
end_burn(otmp, TRUE); /* smother in statue */
|
||||
@@ -365,7 +369,7 @@ struct obj *corpse;
|
||||
return;
|
||||
}
|
||||
|
||||
make_bones:
|
||||
make_bones:
|
||||
unleash_all();
|
||||
/* in case these characters are not in their home bases */
|
||||
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
|
||||
@@ -390,7 +394,7 @@ make_bones:
|
||||
|
||||
/* check iron balls separately--maybe they're not carrying it */
|
||||
if (uball)
|
||||
uball->owornmask = uchain->owornmask = 0;
|
||||
uball->owornmask = uchain->owornmask = 0L;
|
||||
|
||||
/* dispose of your possessions, usually cursed */
|
||||
if (u.ugrave_arise == (NON_PM - 1)) {
|
||||
@@ -422,21 +426,21 @@ make_bones:
|
||||
in_mklev = TRUE; /* use <u.ux,u.uy> as-is */
|
||||
mtmp = makemon(&mons[u.ugrave_arise], u.ux, u.uy, NO_MINVENT);
|
||||
in_mklev = FALSE;
|
||||
if (!mtmp) {
|
||||
if (!mtmp) { /* arise-type might have been genocided */
|
||||
drop_upon_death((struct monst *) 0, (struct obj *) 0, u.ux, u.uy);
|
||||
u.ugrave_arise = NON_PM; /* in case caller cares */
|
||||
return;
|
||||
}
|
||||
/* give mummy-from-hero a wrapping unless hero already
|
||||
carries one; don't bother forcing it to become worn */
|
||||
if (mtmp->data->mlet == S_MUMMY && !carrying(MUMMY_WRAPPING))
|
||||
(void) mongets(mtmp, MUMMY_WRAPPING);
|
||||
mtmp = christen_monst(mtmp, plname);
|
||||
newsym(u.ux, u.uy);
|
||||
/* ["Your body rises from the dead as an <mname>..." used
|
||||
to be given here, but it has been moved to done() so that
|
||||
it gets delivered even when savebones() isn't called] */
|
||||
drop_upon_death(mtmp, (struct obj *) 0, u.ux, u.uy);
|
||||
/* 'mtmp' now has hero's inventory; if 'mtmp' is a mummy, give it
|
||||
a wrapping unless already carrying one */
|
||||
if (mtmp->data->mlet == S_MUMMY && !m_carrying(mtmp, MUMMY_WRAPPING))
|
||||
(void) mongets(mtmp, MUMMY_WRAPPING);
|
||||
m_dowear(mtmp, TRUE);
|
||||
}
|
||||
if (mtmp) {
|
||||
|
||||
20
src/botl.c
20
src/botl.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 botl.c $NHDT-Date: 1554857126 2019/04/10 00:45:26 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.144 $ */
|
||||
/* NetHack 3.6 botl.c $NHDT-Date: 1557094795 2019/05/05 22:19:55 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.145 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2006. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -811,6 +811,15 @@ boolean *valsetlist;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TODO?
|
||||
* It's possible for HPmax (or ENEmax) to change while current
|
||||
* HP (or energy) stays the same. [Perhaps current and maximum
|
||||
* both go up, then before the next status update takes place
|
||||
* current goes down again.] If that happens with HPmax, we
|
||||
* ought to force the windowport to treat current HP as changed
|
||||
* if hitpointbar is On, in order for that to be re-rendered.
|
||||
*/
|
||||
if (update_all || chg || reset) {
|
||||
idxmax = curr->idxmax;
|
||||
pc = (idxmax >= 0) ? percentage(curr, &blstats[idx][idxmax]) : 0;
|
||||
@@ -892,8 +901,8 @@ boolean *valsetlist;
|
||||
if (context.botlx && (windowprocs.wincap2 & WC2_RESET_STATUS) != 0L)
|
||||
status_update(BL_RESET, (genericptr_t) 0, 0, 0,
|
||||
NO_COLOR, (unsigned long *) 0);
|
||||
else if ((updated || context.botlx) &&
|
||||
(windowprocs.wincap2 & WC2_FLUSH_STATUS) != 0L)
|
||||
else if ((updated || context.botlx)
|
||||
&& (windowprocs.wincap2 & WC2_FLUSH_STATUS) != 0L)
|
||||
status_update(BL_FLUSH, (genericptr_t) 0, 0, 0,
|
||||
NO_COLOR, (unsigned long *) 0);
|
||||
|
||||
@@ -1376,7 +1385,8 @@ const char *name;
|
||||
STATIC_OVL boolean
|
||||
hilite_reset_needed(bl_p, augmented_time)
|
||||
struct istat_s *bl_p;
|
||||
long augmented_time;
|
||||
long augmented_time; /* no longer augmented; it once encoded fractional
|
||||
* amounts for multiple moves within same turn */
|
||||
{
|
||||
/*
|
||||
* This 'multi' handling may need some tuning...
|
||||
@@ -1434,7 +1444,7 @@ status_eval_next_unhilite()
|
||||
}
|
||||
}
|
||||
|
||||
/* called by options handling when 'statushilites' boolean is toggled */
|
||||
/* called by options handling when 'statushilites' value is changed */
|
||||
void
|
||||
reset_status_hilites()
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 cmd.c $NHDT-Date: 1549327488 2019/02/05 00:44:48 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.331 $ */
|
||||
/* NetHack 3.6 cmd.c $NHDT-Date: 1557088405 2019/05/05 20:33:25 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.333 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -4102,6 +4102,7 @@ sanity_check()
|
||||
timer_sanity_check();
|
||||
mon_sanity_check();
|
||||
light_sources_sanity_check();
|
||||
bc_sanity_check();
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MIGRATING_MONS
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 dogmove.c $NHDT-Date: 1551493951 2019/03/02 02:32:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.72 $ */
|
||||
/* NetHack 3.6 dogmove.c $NHDT-Date: 1557094801 2019/05/05 22:20:01 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.74 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -379,8 +379,9 @@ struct edog *edog;
|
||||
else
|
||||
You_feel("worried about %s.", y_monnam(mtmp));
|
||||
stop_occupation();
|
||||
} else if (monstermoves > edog->hungrytime + 750 || DEADMONSTER(mtmp)) {
|
||||
dog_died:
|
||||
} else if (monstermoves > edog->hungrytime + 750
|
||||
|| DEADMONSTER(mtmp)) {
|
||||
dog_died:
|
||||
if (mtmp->mleashed && mtmp != u.usteed)
|
||||
Your("leash goes slack.");
|
||||
else if (cansee(mtmp->mx, mtmp->my))
|
||||
@@ -615,7 +616,6 @@ int after, udist, whappr;
|
||||
return appr;
|
||||
}
|
||||
|
||||
|
||||
STATIC_OVL struct monst *
|
||||
find_targ(mtmp, dx, dy, maxdist)
|
||||
register struct monst *mtmp;
|
||||
@@ -644,14 +644,13 @@ int maxdist;
|
||||
if (!m_cansee(mtmp, curx, cury))
|
||||
break;
|
||||
|
||||
targ = m_at(curx, cury);
|
||||
|
||||
if (curx == mtmp->mux && cury == mtmp->muy)
|
||||
return &youmonst;
|
||||
|
||||
if (targ) {
|
||||
if ((targ = m_at(curx, cury)) != 0) {
|
||||
/* Is the monster visible to the pet? */
|
||||
if ((!targ->minvis || perceives(mtmp->data)) && !targ->mundetected)
|
||||
if ((!targ->minvis || perceives(mtmp->data))
|
||||
&& !targ->mundetected)
|
||||
break;
|
||||
/* If the pet can't see it, it assumes it aint there */
|
||||
targ = 0;
|
||||
@@ -807,7 +806,6 @@ struct monst *mtmp, *mtarg;
|
||||
return score;
|
||||
}
|
||||
|
||||
|
||||
STATIC_OVL struct monst *
|
||||
best_target(mtmp)
|
||||
struct monst *mtmp; /* Pet */
|
||||
@@ -859,7 +857,6 @@ struct monst *mtmp; /* Pet */
|
||||
return best_targ;
|
||||
}
|
||||
|
||||
|
||||
/* return 0 (no move), 1 (move) or 2 (dead) */
|
||||
int
|
||||
dog_move(mtmp, after)
|
||||
@@ -1124,7 +1121,7 @@ int after; /* this is extra fast monster movement */
|
||||
chcnt = 0;
|
||||
chi = i;
|
||||
}
|
||||
nxti:
|
||||
nxti:
|
||||
;
|
||||
}
|
||||
|
||||
@@ -1139,6 +1136,7 @@ int after; /* this is extra fast monster movement */
|
||||
/* How hungry is the pet? */
|
||||
if (!mtmp->isminion) {
|
||||
struct edog *dog = EDOG(mtmp);
|
||||
|
||||
hungry = (monstermoves > (dog->hungrytime + 300));
|
||||
}
|
||||
|
||||
@@ -1184,7 +1182,7 @@ int after; /* this is extra fast monster movement */
|
||||
}
|
||||
}
|
||||
|
||||
newdogpos:
|
||||
newdogpos:
|
||||
if (nix != omx || niy != omy) {
|
||||
boolean wasseen;
|
||||
|
||||
@@ -1256,7 +1254,7 @@ newdogpos:
|
||||
}
|
||||
cc.x = mtmp->mx;
|
||||
cc.y = mtmp->my;
|
||||
dognext:
|
||||
dognext:
|
||||
if (!m_in_out_region(mtmp, nix, niy))
|
||||
return 1;
|
||||
remove_monster(mtmp->mx, mtmp->my);
|
||||
|
||||
11
src/end.c
11
src/end.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 end.c $NHDT-Date: 1554591224 2019/04/06 22:53:44 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.168 $ */
|
||||
/* NetHack 3.6 end.c $NHDT-Date: 1557094801 2019/05/05 22:20:01 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.170 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -500,6 +500,15 @@ int how;
|
||||
}
|
||||
|
||||
Strcpy(killer.name, buf);
|
||||
/*
|
||||
* Chicken and egg issue:
|
||||
* Ordinarily Unchanging ought to override something like this,
|
||||
* but the transformation occurs at death. With the current code,
|
||||
* the effectiveness of Unchanging stops first, but a case could
|
||||
* be made that it should last long enough to prevent undead
|
||||
* transformation. (Turning to slime isn't an issue here because
|
||||
* Unchanging prevents that from happening.)
|
||||
*/
|
||||
if (mptr->mlet == S_WRAITH)
|
||||
u.ugrave_arise = PM_WRAITH;
|
||||
else if (mptr->mlet == S_MUMMY && urace.mummynum != NON_PM)
|
||||
|
||||
@@ -842,6 +842,8 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */
|
||||
m2->mx = mm.x;
|
||||
m2->my = mm.y;
|
||||
|
||||
m2->mundetected = 0;
|
||||
m2->mtrapped = 0;
|
||||
m2->mcloned = 1;
|
||||
m2->minvent = (struct obj *) 0; /* objects don't clone */
|
||||
m2->mleashed = FALSE;
|
||||
|
||||
@@ -419,7 +419,8 @@ register struct monst *magr, *mdef;
|
||||
|| objects[otmp->otyp].oc_material == METAL))
|
||||
&& mdef->mhp > 1
|
||||
&& !mdef->mcan) {
|
||||
if (clone_mon(mdef, 0, 0)) {
|
||||
struct monst *mclone;
|
||||
if ((mclone = clone_mon(mdef, 0, 0)) != 0) {
|
||||
if (vis && canspotmon(mdef)) {
|
||||
char buf[BUFSZ];
|
||||
|
||||
@@ -427,6 +428,7 @@ register struct monst *magr, *mdef;
|
||||
pline("%s divides as %s hits it!", buf,
|
||||
mon_nam(magr));
|
||||
}
|
||||
mintrap(mclone);
|
||||
}
|
||||
}
|
||||
} else
|
||||
|
||||
11
src/mkmaze.c
11
src/mkmaze.c
@@ -326,6 +326,8 @@ xchar rtype;
|
||||
boolean oneshot;
|
||||
d_level *lev;
|
||||
{
|
||||
struct monst *mtmp;
|
||||
|
||||
if (bad_location(x, y, nlx, nly, nhx, nhy)) {
|
||||
if (!oneshot) {
|
||||
return FALSE; /* caller should try again */
|
||||
@@ -346,11 +348,12 @@ d_level *lev;
|
||||
case LR_UPTELE:
|
||||
case LR_DOWNTELE:
|
||||
/* "something" means the player in this case */
|
||||
if (MON_AT(x, y)) {
|
||||
if ((mtmp = m_at(x, y)) != 0) {
|
||||
/* move the monster if no choice, or just try again */
|
||||
if (oneshot)
|
||||
(void) rloc(m_at(x, y), FALSE);
|
||||
else
|
||||
if (oneshot) {
|
||||
if (!rloc(mtmp, TRUE))
|
||||
m_into_limbo(mtmp);
|
||||
} else
|
||||
return FALSE;
|
||||
}
|
||||
u_on_newpos(x, y);
|
||||
|
||||
@@ -1687,6 +1687,7 @@ struct monst **monst_list; /* &migrating_mons or &mydogs or null */
|
||||
}
|
||||
|
||||
if (on_map) {
|
||||
mon->mtrapped = 0;
|
||||
if (mon->wormno)
|
||||
remove_worm(mon);
|
||||
else
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 monmove.c $NHDT-Date: 1545596010 2018/12/23 20:13:30 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.111 $ */
|
||||
/* NetHack 3.6 monmove.c $NHDT-Date: 1557094802 2019/05/05 22:20:02 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.113 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2006. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -541,7 +541,7 @@ register struct monst *mtmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
toofar:
|
||||
toofar:
|
||||
|
||||
/* If monster is nearby you, and has to wield a weapon, do so. This
|
||||
* costs the monster a move, of course.
|
||||
@@ -982,7 +982,7 @@ register int after;
|
||||
if ((likegold || likegems || likeobjs || likemagic || likerock
|
||||
|| conceals) && (!*in_rooms(omx, omy, SHOPBASE)
|
||||
|| (!rn2(25) && !mtmp->isshk))) {
|
||||
look_for_obj:
|
||||
look_for_obj:
|
||||
oomx = min(COLNO - 1, omx + minr);
|
||||
oomy = min(ROWNO - 1, omy + minr);
|
||||
lmx = max(1, omx - minr);
|
||||
@@ -1572,6 +1572,7 @@ register struct monst *mtmp;
|
||||
|
||||
if (!gotu) {
|
||||
register int try_cnt = 0;
|
||||
|
||||
do {
|
||||
if (++try_cnt > 200)
|
||||
goto found_you; /* punt */
|
||||
@@ -1585,7 +1586,7 @@ register struct monst *mtmp;
|
||||
&& (can_ooze(mtmp) || can_fog(mtmp)))))
|
||||
|| !couldsee(mx, my));
|
||||
} else {
|
||||
found_you:
|
||||
found_you:
|
||||
mx = u.ux;
|
||||
my = u.uy;
|
||||
}
|
||||
|
||||
@@ -1227,7 +1227,8 @@ int dieroll;
|
||||
/* but not bashing with darts, arrows or ya */
|
||||
&& !(is_ammo(obj) || is_missile(obj)))
|
||||
&& hand_to_hand) {
|
||||
if (clone_mon(mon, 0, 0)) {
|
||||
struct monst *mclone;
|
||||
if ((mclone = clone_mon(mon, 0, 0)) != 0) {
|
||||
char withwhat[BUFSZ];
|
||||
|
||||
withwhat[0] = '\0';
|
||||
@@ -1235,6 +1236,7 @@ int dieroll;
|
||||
Sprintf(withwhat, " with %s", yname(obj));
|
||||
pline("%s divides as you hit it%s!", Monnam(mon), withwhat);
|
||||
hittxt = TRUE;
|
||||
mintrap(mclone);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
[.sys .os2] -- OS/2
|
||||
[.sys .share .sounds] -- AIFF format audio files
|
||||
[.sys .unix] -- guess :-)
|
||||
[.sys .unit .hints] -- configuration data for setup.sh
|
||||
[.sys .unit .hints] -- configuration data for setup.sh
|
||||
[.sys .wince] -- Windows CE
|
||||
[.sys .wince .ceinc] -- more WinCE
|
||||
[.sys .wince .ceinc .sys] -- ditto
|
||||
@@ -71,18 +71,27 @@
|
||||
The distributed copy of config.h will work successfully on VMS;
|
||||
vmsconf.h has conditional code to deal with the UNIX-specific items.
|
||||
|
||||
4. If you have the programming utilities lex or flex and yacc or bison,
|
||||
you may edit the procedure [.sys.vms]spec_lev.com and execute it to
|
||||
process several source files for NetHack's special level and dungeon
|
||||
compilers. If you use the version of these utilities from the OpenVMS
|
||||
freeware CD you will have to remove the include <stdlib.h> that yacc
|
||||
places at the top of each file. The provided spec_lev.com will default
|
||||
to copy pre-processed versions of the appropriate files (dgn_lex.c, lev_lex.c,
|
||||
dgn_yacc.c, lev_yacc.c, dgn_comp.h, and lev_comp.h) from [.sys.share]
|
||||
into [.util]*.c and [.include]*.h.
|
||||
If you choose to modify spec_lev.com, you want to run and test your
|
||||
changes prior to executing vmsbuild.com; otherwise, vmsbuild.com will
|
||||
do so for you and the results might not be what you expect.
|
||||
4. vmsbuild.com checks for several source files in [.util] and if it doesn't
|
||||
find them, it uses [.sys.vms]spec_lev.com to generate them. If you have
|
||||
the programming utilities lex or flex and yacc or bison, they be will
|
||||
used if symbols are set up to run them. Or if you have them but do not
|
||||
have symbols set up, you may edit spec_lev.com to have it run them.
|
||||
If neither of those situations applies, spec_lev.com will default to
|
||||
copying pre-genearated versions of the appropriate files (dgn_lex.c,
|
||||
lev_lex.c, dgn_yacc.c, lev_yacc.c, dgn_comp.h, and lev_comp.h) from
|
||||
[.sys.share] into [.util]*.c and [.include]*.h.
|
||||
|
||||
Once the file lev_yacc.c is in place, vmsbuild.com won't execute
|
||||
spec_lev.com to make any of them, so if you decide to modify *_comp.l
|
||||
and/or *_comp.y then you'll either need to execute spec_lev.com before
|
||||
vmsbuild.com or remove [.util]lev_yacc.c so vmsbuild.com will do so.
|
||||
|
||||
If you use the versions of the lex and yacc utilities from the OpenVMS
|
||||
freeware CD, you will need to pass "/Define=_DECC_V4_SOURCE" as the
|
||||
third argument to vmsbuild.com in step #5. The version of yacc
|
||||
or bison in that distribution places '#include <stdlib.h>' in the
|
||||
generated code, before nethack's '#include "config.h"', leading to
|
||||
conflicts that prevent compilation from completing.
|
||||
|
||||
5. To build NETHACK.EXE and its auxiliary programs, execute the
|
||||
following DCL command:
|
||||
@@ -138,7 +147,7 @@ Notes:
|
||||
|
||||
1. Save files and bones files from 3.4.x and earlier versions
|
||||
will not work with 3.6.2, but save files and bones file from 3.6.0
|
||||
and 3.6.1 should work. The scoreboard file (RECORD) from 3.6.0 or
|
||||
and 3.6.1 should work. The scoreboard file (RECORD) from 3.6.0 or
|
||||
3.4.x or 3.3.x will work.
|
||||
|
||||
2. To specify user-preference options in your environment, define the
|
||||
@@ -212,6 +221,9 @@ Notes:
|
||||
is the preferred way to compile because it's guaranteed to compile
|
||||
and link everything.
|
||||
|
||||
[Note: Makefile.* have been updated occasionally but not exercised
|
||||
for a long time, so might not be in working order.]
|
||||
|
||||
4. termcap is an ASCII data file containing descriptions of terminal
|
||||
capabilities and the escape sequences that software must use to take
|
||||
advantage of them. If you do not already have a termcap file in use
|
||||
@@ -240,7 +252,11 @@ Notes:
|
||||
termcap file, otherwise a message about "Unknown terminal type" will
|
||||
be printed and NetHack will exit.
|
||||
|
||||
5. NetHack contains code which attempts to make it secure in case it's
|
||||
5. Both vmsbuild.com and Makefile.src have provisions to build nethack's
|
||||
'curses' interface, but the source code for it won't compile using
|
||||
the implementation of curses which is supplied with VMS.
|
||||
|
||||
6. NetHack contains code which attempts to make it secure in case it's
|
||||
installed with privileges (to allow the playground to be protected
|
||||
against world write access). This has only undergone limited testing,
|
||||
so install NetHack with privileges at your own risk. If you discover
|
||||
@@ -293,7 +309,7 @@ Notes:
|
||||
built NetHack, you can relink with tracebacks disabled by doing
|
||||
$ @[.SYS.VMS]VMSBUILD "LINK" "" "" "/noTrace/noDebug"
|
||||
|
||||
6. If you can't or won't install nethack.exe with privileges and if you
|
||||
7. If you can't or won't install nethack.exe with privileges and if you
|
||||
don't have access to a privileged account yourself, then if you intend
|
||||
to allow other users to access your copy of NetHack you should probably
|
||||
place an ACL on the playground directory and its save subdirectory.
|
||||
@@ -326,7 +342,7 @@ Notes:
|
||||
you to run recover.exe on behalf of other users, because you won't be
|
||||
able to create files owned by them unless you have elevated privileges.
|
||||
|
||||
7. Many NetHack commands can be aborted by sending it the <escape>
|
||||
8. Many NetHack commands can be aborted by sending it the <escape>
|
||||
character when it wants input. This is displayed as ESC inside the
|
||||
game. Digital VK201 keyboards (used by VT2xx and VT3xx and older
|
||||
VAXstations) and VK401 keyboards (used by VT4xx, newer VAXstations,
|
||||
@@ -366,16 +382,18 @@ Notes:
|
||||
be sure to remember to eventually reattach to the NetHack subprocess;
|
||||
otherwise the game in progress won't get saved when you logout.
|
||||
|
||||
8. NetHack optionally maintains a logfile which receives one line appended
|
||||
9. NetHack optionally maintains a logfile which receives one line appended
|
||||
to it whenever a game ends. This can be disabled entirely by adding
|
||||
an "#undef LOGFILE" directive to vmsconf.h prior to building the
|
||||
program, or it can be disabled later by removing the file(s) LOGFILE.;*
|
||||
from the playground directory. If not disabled prior to compilation,
|
||||
the logfile can be reinitialized by simply creating an empty file
|
||||
named LOGFILE in the playground, but make sure that users are able
|
||||
to write into it, or new entries will not be appended.
|
||||
to write into it, or new entries will not be appended. A somewhat
|
||||
more elaborate log file named XLOGFILE containing more information is
|
||||
handled similarly.
|
||||
|
||||
9. Some attempt at support for VMS versions earlier than V4.6 has been
|
||||
10. Some attempt at support for VMS versions earlier than V4.6 has been
|
||||
included, but no such obsolete system was available for testing it.
|
||||
vmsbuild.com detects the need for the extra support routines and
|
||||
arranges automatically for them to be compiled. The reason that
|
||||
@@ -383,7 +401,10 @@ Notes:
|
||||
underwent a major revision for VMS V4.6 and several routines which
|
||||
NetHack utilizes were not available prior to that upgrade.
|
||||
|
||||
10. vmsbuild.com collects almost all of the object files (xxx.OBJ) into
|
||||
[That was written many years ago and the chance of it still working
|
||||
is very small.]
|
||||
|
||||
11. vmsbuild.com collects almost all of the object files (xxx.OBJ) into
|
||||
an object library (NETHACK.OLB) as it compiles the source files.
|
||||
This should prevent the quota-exceeded problems from the linker
|
||||
that some sites have reported for prior versions. Note that if you
|
||||
@@ -395,7 +416,7 @@ Notes:
|
||||
If you forget to replace the library entry, your newly compiled code
|
||||
will not be included in the new executable image.
|
||||
|
||||
11. To access "wizard mode"--intended for debugging purposes, not to
|
||||
12. To access "wizard mode"--intended for debugging purposes, not to
|
||||
spoil the game with unlimited wishes--you must be running from the
|
||||
username compiled into the game via Local_WIZARD in vmsconf.h, and
|
||||
you must specify "-D" on the command line when invoking NetHack.
|
||||
@@ -405,7 +426,11 @@ Notes:
|
||||
$ @hackdir:nethack "-D"
|
||||
Any character name you specify will be ignored in favor of "wizard".
|
||||
|
||||
12. At program startup time, NetHack uses the empty file PERM to prevent
|
||||
[More out of date information. Rather than compile-time Local_WIZARD,
|
||||
uses(s) allowed to entre wizard mode are now controlled by the entry
|
||||
WIZARDS in the file SYSCONF.]
|
||||
|
||||
13. At program startup time, NetHack uses the empty file PERM to prevent
|
||||
two different processes from using the same character name (under the
|
||||
same UIC ownership) at the same time. It does this by temporarily
|
||||
giving that file a second directory entry named PERM.LOCK, then
|
||||
@@ -447,7 +472,7 @@ Notes:
|
||||
is accomplished using temporary entry RECORD.LOCK and LOGFILE using
|
||||
entry LOGFILE.LOCK.
|
||||
|
||||
13. Unless you have both Motif and the Athena Widget set from MIT, you
|
||||
14. Unless you have both Motif and the Athena Widget set from MIT, you
|
||||
will not be able to use the X11 interface on VMS. Even if you do
|
||||
have both those things, such a configuration has not been tested and
|
||||
there are no provisions for it in vmsbuild.com. Makefile.src does
|
||||
@@ -473,14 +498,15 @@ Notes:
|
||||
window manager in order for any changes to take effect; it's easiest
|
||||
to just make the session manager quit and then log in again.
|
||||
|
||||
14. If necessary, send problem reports via e-mail to
|
||||
15. If necessary, send problem reports via e-mail to
|
||||
<devteam@nethack.org>
|
||||
Always include version information for NetHack, the operating system,
|
||||
and the C compiler used.
|
||||
|
||||
20-OCT-2003
|
||||
minimally updated 9-NOV-2015...
|
||||
and again 5-MAY-2019...
|
||||
|
||||
# NetHack 3.6 Install.vms $NHDT-Date: 1524689427 2018/04/25 20:50:27 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.12 $
|
||||
# NetHack 3.6 Install.vms $NHDT-Date: 1557100606 2019/05/05 23:56:46 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.14 $
|
||||
# Copyright (c) 2003 by Robert Patrick Rankin
|
||||
# NetHack may be freely redistributed. See license for details.
|
||||
|
||||
@@ -432,7 +432,7 @@ boolean border;
|
||||
w += (int) strlen(text);
|
||||
/* if preceding field has any trailing spaces, don't add extra;
|
||||
(should only apply to prev==title; status_update() handles
|
||||
others that used to have trailing spaces by stripping such */
|
||||
others that used to have trailing spaces by stripping such) */
|
||||
if (spacing[fld] > 0 && prev_fld != BL_FLUSH
|
||||
&& *(p = status_vals[prev_fld]) && *(eos(p) - 1) == ' '
|
||||
&& (prev_fld != BL_TITLE || !iflags.wc2_hitpointbar))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 wintty.c $NHDT-Date: 1555702074 2019/04/19 19:27:54 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.202 $ */
|
||||
/* NetHack 3.6 wintty.c $NHDT-Date: 1557088734 2019/05/05 20:38:54 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.203 $ */
|
||||
/* Copyright (c) David Cohrs, 1991 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -2396,7 +2396,7 @@ winid window;
|
||||
case NHW_MESSAGE:
|
||||
if (ttyDisplay->toplin)
|
||||
tty_display_nhwindow(WIN_MESSAGE, TRUE);
|
||||
/*FALLTHRU*/
|
||||
/*FALLTHRU*/
|
||||
case NHW_STATUS:
|
||||
case NHW_BASE:
|
||||
case NHW_MAP:
|
||||
@@ -3849,7 +3849,7 @@ unsigned long *colormasks;
|
||||
switch (fldidx) {
|
||||
case BL_RESET:
|
||||
reset_state = FORCE_RESET;
|
||||
/* FALLTHRU */
|
||||
/*FALLTHRU*/
|
||||
case BL_FLUSH:
|
||||
if (make_things_fit(reset_state) || truncation_expected)
|
||||
render_status();
|
||||
@@ -3931,7 +3931,7 @@ unsigned long *colormasks;
|
||||
tty_status[NOW][fldidx].lth = 30 + 2; /* '[' and ']' */
|
||||
break;
|
||||
case BL_GOLD:
|
||||
/* \GXXXXNNNN counts as 1 */
|
||||
/* \GXXXXNNNN counts as 1 [moot since we use decode_mixed() above] */
|
||||
if ((p = index(status_vals[fldidx], '\\')) != 0 && p[1] == 'G')
|
||||
tty_status[NOW][fldidx].lth -= (10 - 1);
|
||||
break;
|
||||
@@ -4038,7 +4038,7 @@ int sz[3];
|
||||
|
||||
/* On a change to the field location, everything further
|
||||
to the right must be updated as well. (Not necessarily
|
||||
everything; it's possible for complementary changes to
|
||||
everything; it's possible for complementary changes across
|
||||
multiple fields to put stuff further right back in sync.) */
|
||||
if (tty_status[NOW][idx].x + tty_status[NOW][idx].lth
|
||||
!= tty_status[BEFORE][idx].x + tty_status[BEFORE][idx].lth)
|
||||
@@ -4503,7 +4503,7 @@ render_status(VOID_ARGS)
|
||||
x += tlth;
|
||||
}
|
||||
finalx[row][NOW] = x - 1;
|
||||
/* reset .redraw, .dirty, .padright now that they're rendered */
|
||||
/* reset .redraw and .dirty now that they're rendered */
|
||||
tty_status[NOW][idx].dirty = FALSE;
|
||||
tty_status[NOW][idx].redraw = FALSE;
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user