Merge branch 'NetHack-3.6.2'
This commit is contained in:
+3
-3
@@ -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
|
From time to time, some depraved individual out there in netland sends a
|
||||||
particularly intriguing modification to help out with the game. The gods
|
particularly intriguing modification to help out with the game. The
|
||||||
of the dungeon sometimes make note of the names of the worst of these
|
NetHack Development Team sometimes makes note of the names of the worst
|
||||||
miscreants in this, the list of Dungeoneers:
|
of these miscreants in this, the list of Dungeoneers:
|
||||||
|
|
||||||
Adam Aronow Janet Walz Nathan Eady
|
Adam Aronow Janet Walz Nathan Eady
|
||||||
Alex Kompel Janne Salmijarvi Norm Meluch
|
Alex Kompel Janne Salmijarvi Norm Meluch
|
||||||
|
|||||||
+6
-1
@@ -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
|
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,
|
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
|
Vlad wasn't set up as a vampshifter properly
|
||||||
poly'd hero capable of spitting venom would leave intact venom object if it
|
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
|
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
|
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
+2
-1
@@ -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. */
|
/* Copyright (c) Steve Creps, 1988. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -136,6 +136,7 @@ E boolean FDECL(drag_ball, (XCHAR_P, XCHAR_P, int *, xchar *, xchar *,
|
|||||||
xchar *, xchar *, boolean *, BOOLEAN_P));
|
xchar *, xchar *, boolean *, BOOLEAN_P));
|
||||||
E void FDECL(drop_ball, (XCHAR_P, XCHAR_P));
|
E void FDECL(drop_ball, (XCHAR_P, XCHAR_P));
|
||||||
E void NDECL(drag_down);
|
E void NDECL(drag_down);
|
||||||
|
E void NDECL(bc_sanity_check);
|
||||||
|
|
||||||
/* ### bones.c ### */
|
/* ### bones.c ### */
|
||||||
|
|
||||||
|
|||||||
+78
-10
@@ -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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) David Cohrs, 2006. */
|
/*-Copyright (c) David Cohrs, 2006. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -24,12 +24,14 @@ boolean showmsg;
|
|||||||
setuswapwep((struct obj *) 0);
|
setuswapwep((struct obj *) 0);
|
||||||
if (uquiver == uball)
|
if (uquiver == uball)
|
||||||
setuqwep((struct obj *) 0);
|
setuqwep((struct obj *) 0);
|
||||||
;
|
/* [this used to test 'if (uwep != uball)' but that always passes
|
||||||
if (uwep != uball)
|
after the setuwep() above] */
|
||||||
freeinv(uball);
|
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
|
void
|
||||||
ballfall()
|
ballfall()
|
||||||
{
|
{
|
||||||
@@ -40,6 +42,7 @@ ballfall()
|
|||||||
ballrelease(TRUE);
|
ballrelease(TRUE);
|
||||||
if (gets_hit) {
|
if (gets_hit) {
|
||||||
int dmg = rn1(7, 25);
|
int dmg = rn1(7, 25);
|
||||||
|
|
||||||
pline_The("iron ball falls on your %s.", body_part(HEAD));
|
pline_The("iron ball falls on your %s.", body_part(HEAD));
|
||||||
if (uarmh) {
|
if (uarmh) {
|
||||||
if (is_metallic(uarmh)) {
|
if (is_metallic(uarmh)) {
|
||||||
@@ -113,9 +116,9 @@ placebc()
|
|||||||
|
|
||||||
(void) flooreffects(uchain, u.ux, u.uy, ""); /* chain might rust */
|
(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;
|
u.bc_order = BCPOS_DIFFER;
|
||||||
else {
|
} else {
|
||||||
/* ball might rust -- already checked when carried */
|
/* ball might rust -- already checked when carried */
|
||||||
(void) flooreffects(uball, u.ux, u.uy, "");
|
(void) flooreffects(uball, u.ux, u.uy, "");
|
||||||
place_object(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? */
|
/* only need to move the chain? */
|
||||||
if (carried(uball) || distmin(x, y, uball->ox, uball->oy) <= 2) {
|
if (carried(uball) || distmin(x, y, uball->ox, uball->oy) <= 2) {
|
||||||
xchar oldchainx = uchain->ox, oldchainy = uchain->oy;
|
xchar oldchainx = uchain->ox, oldchainy = uchain->oy;
|
||||||
|
|
||||||
*bc_control = BC_CHAIN;
|
*bc_control = BC_CHAIN;
|
||||||
move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
|
move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
|
||||||
if (carried(uball)) {
|
if (carried(uball)) {
|
||||||
@@ -774,21 +778,24 @@ xchar x, y;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ball&chain cause hero to randomly lose stuff from inventory */
|
||||||
STATIC_OVL void
|
STATIC_OVL void
|
||||||
litter()
|
litter()
|
||||||
{
|
{
|
||||||
struct obj *otmp = g.invent, *nextobj;
|
struct obj *otmp, *nextobj = 0;
|
||||||
int capacity = weight_cap();
|
int capacity = weight_cap();
|
||||||
|
|
||||||
while (otmp) {
|
for (otmp = g.invent; otmp; otmp = nextobj) {
|
||||||
nextobj = otmp->nobj;
|
nextobj = otmp->nobj;
|
||||||
if ((otmp != uball) && (rnd(capacity) <= (int) otmp->owt)) {
|
if ((otmp != uball) && (rnd(capacity) <= (int) otmp->owt)) {
|
||||||
if (canletgo(otmp, "")) {
|
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);
|
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*/
|
/*ball.c*/
|
||||||
|
|||||||
+14
-10
@@ -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) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -212,8 +212,8 @@ char *namebuf;
|
|||||||
/* called by savebones(); also by finish_paybill(shk.c) */
|
/* called by savebones(); also by finish_paybill(shk.c) */
|
||||||
void
|
void
|
||||||
drop_upon_death(mtmp, cont, x, y)
|
drop_upon_death(mtmp, cont, x, y)
|
||||||
struct monst *mtmp;
|
struct monst *mtmp; /* monster if hero turned into one (other than ghost) */
|
||||||
struct obj *cont;
|
struct obj *cont; /* container if hero is turned into a statue */
|
||||||
int x, y;
|
int x, y;
|
||||||
{
|
{
|
||||||
struct obj *otmp;
|
struct obj *otmp;
|
||||||
@@ -221,9 +221,13 @@ int x, y;
|
|||||||
u.twoweap = 0; /* ensure curse() won't cause swapwep to drop twice */
|
u.twoweap = 0; /* ensure curse() won't cause swapwep to drop twice */
|
||||||
while ((otmp = g.invent) != 0) {
|
while ((otmp = g.invent) != 0) {
|
||||||
obj_extract_self(otmp);
|
obj_extract_self(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);
|
obj_no_longer_held(otmp);
|
||||||
|
|
||||||
otmp->owornmask = 0;
|
otmp->owornmask = 0L;
|
||||||
/* lamps don't go out when dropped */
|
/* lamps don't go out when dropped */
|
||||||
if ((cont || artifact_light(otmp)) && obj_is_burning(otmp))
|
if ((cont || artifact_light(otmp)) && obj_is_burning(otmp))
|
||||||
end_burn(otmp, TRUE); /* smother in statue */
|
end_burn(otmp, TRUE); /* smother in statue */
|
||||||
@@ -388,7 +392,7 @@ make_bones:
|
|||||||
|
|
||||||
/* check iron balls separately--maybe they're not carrying it */
|
/* check iron balls separately--maybe they're not carrying it */
|
||||||
if (uball)
|
if (uball)
|
||||||
uball->owornmask = uchain->owornmask = 0;
|
uball->owornmask = uchain->owornmask = 0L;
|
||||||
|
|
||||||
/* dispose of your possessions, usually cursed */
|
/* dispose of your possessions, usually cursed */
|
||||||
if (u.ugrave_arise == (NON_PM - 1)) {
|
if (u.ugrave_arise == (NON_PM - 1)) {
|
||||||
@@ -420,21 +424,21 @@ make_bones:
|
|||||||
g.in_mklev = TRUE; /* use <u.ux,u.uy> as-is */
|
g.in_mklev = TRUE; /* use <u.ux,u.uy> as-is */
|
||||||
mtmp = makemon(&mons[u.ugrave_arise], u.ux, u.uy, NO_MINVENT);
|
mtmp = makemon(&mons[u.ugrave_arise], u.ux, u.uy, NO_MINVENT);
|
||||||
g.in_mklev = FALSE;
|
g.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);
|
drop_upon_death((struct monst *) 0, (struct obj *) 0, u.ux, u.uy);
|
||||||
u.ugrave_arise = NON_PM; /* in case caller cares */
|
u.ugrave_arise = NON_PM; /* in case caller cares */
|
||||||
return;
|
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, g.plname);
|
mtmp = christen_monst(mtmp, g.plname);
|
||||||
newsym(u.ux, u.uy);
|
newsym(u.ux, u.uy);
|
||||||
/* ["Your body rises from the dead as an <mname>..." used
|
/* ["Your body rises from the dead as an <mname>..." used
|
||||||
to be given here, but it has been moved to done() so that
|
to be given here, but it has been moved to done() so that
|
||||||
it gets delivered even when savebones() isn't called] */
|
it gets delivered even when savebones() isn't called] */
|
||||||
drop_upon_death(mtmp, (struct obj *) 0, u.ux, u.uy);
|
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);
|
m_dowear(mtmp, TRUE);
|
||||||
}
|
}
|
||||||
if (mtmp) {
|
if (mtmp) {
|
||||||
|
|||||||
+15
-6
@@ -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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2006. */
|
/*-Copyright (c) Michael Allison, 2006. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -772,7 +772,15 @@ boolean *valsetlist;
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (g.update_all || chg || reset) {
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
idxmax = curr->idxmax;
|
idxmax = curr->idxmax;
|
||||||
pc = (idxmax >= 0) ? percentage(curr, &g.blstats[idx][idxmax]) : 0;
|
pc = (idxmax >= 0) ? percentage(curr, &g.blstats[idx][idxmax]) : 0;
|
||||||
|
|
||||||
@@ -853,8 +861,8 @@ boolean *valsetlist;
|
|||||||
if (g.context.botlx && (windowprocs.wincap2 & WC2_RESET_STATUS) != 0L)
|
if (g.context.botlx && (windowprocs.wincap2 & WC2_RESET_STATUS) != 0L)
|
||||||
status_update(BL_RESET, (genericptr_t) 0, 0, 0,
|
status_update(BL_RESET, (genericptr_t) 0, 0, 0,
|
||||||
NO_COLOR, (unsigned long *) 0);
|
NO_COLOR, (unsigned long *) 0);
|
||||||
else if ((updated || g.context.botlx) &&
|
else if ((updated || g.context.botlx)
|
||||||
(windowprocs.wincap2 & WC2_FLUSH_STATUS) != 0L)
|
&& (windowprocs.wincap2 & WC2_FLUSH_STATUS) != 0L)
|
||||||
status_update(BL_FLUSH, (genericptr_t) 0, 0, 0,
|
status_update(BL_FLUSH, (genericptr_t) 0, 0, 0,
|
||||||
NO_COLOR, (unsigned long *) 0);
|
NO_COLOR, (unsigned long *) 0);
|
||||||
|
|
||||||
@@ -1335,7 +1343,8 @@ const char *name;
|
|||||||
STATIC_OVL boolean
|
STATIC_OVL boolean
|
||||||
hilite_reset_needed(bl_p, augmented_time)
|
hilite_reset_needed(bl_p, augmented_time)
|
||||||
struct istat_s *bl_p;
|
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...
|
* This 'multi' handling may need some tuning...
|
||||||
@@ -1393,7 +1402,7 @@ status_eval_next_unhilite()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called by options handling when 'statushilites' boolean is toggled */
|
/* called by options handling when 'statushilites' value is changed */
|
||||||
void
|
void
|
||||||
reset_status_hilites()
|
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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -4087,6 +4087,7 @@ sanity_check()
|
|||||||
timer_sanity_check();
|
timer_sanity_check();
|
||||||
mon_sanity_check();
|
mon_sanity_check();
|
||||||
light_sources_sanity_check();
|
light_sources_sanity_check();
|
||||||
|
bc_sanity_check();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_MIGRATING_MONS
|
#ifdef DEBUG_MIGRATING_MONS
|
||||||
|
|||||||
+5
-8
@@ -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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -618,7 +618,6 @@ int after, udist, whappr;
|
|||||||
return appr;
|
return appr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
STATIC_OVL struct monst *
|
STATIC_OVL struct monst *
|
||||||
find_targ(mtmp, dx, dy, maxdist)
|
find_targ(mtmp, dx, dy, maxdist)
|
||||||
register struct monst *mtmp;
|
register struct monst *mtmp;
|
||||||
@@ -647,14 +646,13 @@ int maxdist;
|
|||||||
if (!m_cansee(mtmp, curx, cury))
|
if (!m_cansee(mtmp, curx, cury))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
targ = m_at(curx, cury);
|
|
||||||
|
|
||||||
if (curx == mtmp->mux && cury == mtmp->muy)
|
if (curx == mtmp->mux && cury == mtmp->muy)
|
||||||
return &g.youmonst;
|
return &g.youmonst;
|
||||||
|
|
||||||
if (targ) {
|
if ((targ = m_at(curx, cury)) != 0) {
|
||||||
/* Is the monster visible to the pet? */
|
/* Is the monster visible to the pet? */
|
||||||
if ((!targ->minvis || perceives(mtmp->data)) && !targ->mundetected)
|
if ((!targ->minvis || perceives(mtmp->data))
|
||||||
|
&& !targ->mundetected)
|
||||||
break;
|
break;
|
||||||
/* If the pet can't see it, it assumes it aint there */
|
/* If the pet can't see it, it assumes it aint there */
|
||||||
targ = 0;
|
targ = 0;
|
||||||
@@ -810,7 +808,6 @@ struct monst *mtmp, *mtarg;
|
|||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
STATIC_OVL struct monst *
|
STATIC_OVL struct monst *
|
||||||
best_target(mtmp)
|
best_target(mtmp)
|
||||||
struct monst *mtmp; /* Pet */
|
struct monst *mtmp; /* Pet */
|
||||||
@@ -862,7 +859,6 @@ struct monst *mtmp; /* Pet */
|
|||||||
return best_targ;
|
return best_targ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* return 0 (no move), 1 (move) or 2 (dead) */
|
/* return 0 (no move), 1 (move) or 2 (dead) */
|
||||||
int
|
int
|
||||||
dog_move(mtmp, after)
|
dog_move(mtmp, after)
|
||||||
@@ -1142,6 +1138,7 @@ int after; /* this is extra fast monster movement */
|
|||||||
/* How hungry is the pet? */
|
/* How hungry is the pet? */
|
||||||
if (!mtmp->isminion) {
|
if (!mtmp->isminion) {
|
||||||
struct edog *dog = EDOG(mtmp);
|
struct edog *dog = EDOG(mtmp);
|
||||||
|
|
||||||
hungry = (g.monstermoves > (dog->hungrytime + 300));
|
hungry = (g.monstermoves > (dog->hungrytime + 300));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -479,6 +479,15 @@ int how;
|
|||||||
}
|
}
|
||||||
|
|
||||||
Strcpy(g.killer.name, buf);
|
Strcpy(g.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)
|
if (mptr->mlet == S_WRAITH)
|
||||||
u.ugrave_arise = PM_WRAITH;
|
u.ugrave_arise = PM_WRAITH;
|
||||||
else if (mptr->mlet == S_MUMMY && g.urace.mummynum != NON_PM)
|
else if (mptr->mlet == S_MUMMY && g.urace.mummynum != NON_PM)
|
||||||
|
|||||||
@@ -842,6 +842,8 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */
|
|||||||
m2->mx = mm.x;
|
m2->mx = mm.x;
|
||||||
m2->my = mm.y;
|
m2->my = mm.y;
|
||||||
|
|
||||||
|
m2->mundetected = 0;
|
||||||
|
m2->mtrapped = 0;
|
||||||
m2->mcloned = 1;
|
m2->mcloned = 1;
|
||||||
m2->minvent = (struct obj *) 0; /* objects don't clone */
|
m2->minvent = (struct obj *) 0; /* objects don't clone */
|
||||||
m2->mleashed = FALSE;
|
m2->mleashed = FALSE;
|
||||||
|
|||||||
+3
-1
@@ -408,7 +408,8 @@ register struct monst *magr, *mdef;
|
|||||||
|| objects[g.otmp->otyp].oc_material == METAL))
|
|| objects[g.otmp->otyp].oc_material == METAL))
|
||||||
&& mdef->mhp > 1
|
&& mdef->mhp > 1
|
||||||
&& !mdef->mcan) {
|
&& !mdef->mcan) {
|
||||||
if (clone_mon(mdef, 0, 0)) {
|
struct monst *mclone;
|
||||||
|
if ((mclone = clone_mon(mdef, 0, 0)) != 0) {
|
||||||
if (g.vis && canspotmon(mdef)) {
|
if (g.vis && canspotmon(mdef)) {
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
|
|
||||||
@@ -416,6 +417,7 @@ register struct monst *magr, *mdef;
|
|||||||
pline("%s divides as %s hits it!", buf,
|
pline("%s divides as %s hits it!", buf,
|
||||||
mon_nam(magr));
|
mon_nam(magr));
|
||||||
}
|
}
|
||||||
|
mintrap(mclone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
|||||||
+7
-4
@@ -320,6 +320,8 @@ xchar rtype;
|
|||||||
boolean oneshot;
|
boolean oneshot;
|
||||||
d_level *lev;
|
d_level *lev;
|
||||||
{
|
{
|
||||||
|
struct monst *mtmp;
|
||||||
|
|
||||||
if (bad_location(x, y, nlx, nly, nhx, nhy)) {
|
if (bad_location(x, y, nlx, nly, nhx, nhy)) {
|
||||||
if (!oneshot) {
|
if (!oneshot) {
|
||||||
return FALSE; /* caller should try again */
|
return FALSE; /* caller should try again */
|
||||||
@@ -340,11 +342,12 @@ d_level *lev;
|
|||||||
case LR_UPTELE:
|
case LR_UPTELE:
|
||||||
case LR_DOWNTELE:
|
case LR_DOWNTELE:
|
||||||
/* "something" means the player in this case */
|
/* "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 */
|
/* move the monster if no choice, or just try again */
|
||||||
if (oneshot)
|
if (oneshot) {
|
||||||
(void) rloc(m_at(x, y), FALSE);
|
if (!rloc(mtmp, TRUE))
|
||||||
else
|
m_into_limbo(mtmp);
|
||||||
|
} else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
u_on_newpos(x, y);
|
u_on_newpos(x, y);
|
||||||
|
|||||||
@@ -1685,6 +1685,7 @@ struct monst **monst_list; /* &g.migrating_mons or &g.mydogs or null */
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (on_map) {
|
if (on_map) {
|
||||||
|
mon->mtrapped = 0;
|
||||||
if (mon->wormno)
|
if (mon->wormno)
|
||||||
remove_worm(mon);
|
remove_worm(mon);
|
||||||
else
|
else
|
||||||
|
|||||||
+2
-1
@@ -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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2006. */
|
/*-Copyright (c) Michael Allison, 2006. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -1620,6 +1620,7 @@ register struct monst *mtmp;
|
|||||||
|
|
||||||
if (!gotu) {
|
if (!gotu) {
|
||||||
register int try_cnt = 0;
|
register int try_cnt = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (++try_cnt > 200)
|
if (++try_cnt > 200)
|
||||||
goto found_you; /* punt */
|
goto found_you; /* punt */
|
||||||
|
|||||||
+3
-1
@@ -1222,7 +1222,8 @@ int dieroll;
|
|||||||
/* but not bashing with darts, arrows or ya */
|
/* but not bashing with darts, arrows or ya */
|
||||||
&& !(is_ammo(obj) || is_missile(obj)))
|
&& !(is_ammo(obj) || is_missile(obj)))
|
||||||
&& hand_to_hand) {
|
&& hand_to_hand) {
|
||||||
if (clone_mon(mon, 0, 0)) {
|
struct monst *mclone;
|
||||||
|
if ((mclone = clone_mon(mon, 0, 0)) != 0) {
|
||||||
char withwhat[BUFSZ];
|
char withwhat[BUFSZ];
|
||||||
|
|
||||||
withwhat[0] = '\0';
|
withwhat[0] = '\0';
|
||||||
@@ -1230,6 +1231,7 @@ int dieroll;
|
|||||||
Sprintf(withwhat, " with %s", yname(obj));
|
Sprintf(withwhat, " with %s", yname(obj));
|
||||||
pline("%s divides as you hit it%s!", Monnam(mon), withwhat);
|
pline("%s divides as you hit it%s!", Monnam(mon), withwhat);
|
||||||
hittxt = TRUE;
|
hittxt = TRUE;
|
||||||
|
mintrap(mclone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+50
-24
@@ -71,18 +71,27 @@
|
|||||||
The distributed copy of config.h will work successfully on VMS;
|
The distributed copy of config.h will work successfully on VMS;
|
||||||
vmsconf.h has conditional code to deal with the UNIX-specific items.
|
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,
|
4. vmsbuild.com checks for several source files in [.util] and if it doesn't
|
||||||
you may edit the procedure [.sys.vms]spec_lev.com and execute it to
|
find them, it uses [.sys.vms]spec_lev.com to generate them. If you have
|
||||||
process several source files for NetHack's special level and dungeon
|
the programming utilities lex or flex and yacc or bison, they be will
|
||||||
compilers. If you use the version of these utilities from the OpenVMS
|
used if symbols are set up to run them. Or if you have them but do not
|
||||||
freeware CD you will have to remove the include <stdlib.h> that yacc
|
have symbols set up, you may edit spec_lev.com to have it run them.
|
||||||
places at the top of each file. The provided spec_lev.com will default
|
If neither of those situations applies, spec_lev.com will default to
|
||||||
to copy pre-processed versions of the appropriate files (dgn_lex.c, lev_lex.c,
|
copying pre-genearated versions of the appropriate files (dgn_lex.c,
|
||||||
dgn_yacc.c, lev_yacc.c, dgn_comp.h, and lev_comp.h) from [.sys.share]
|
lev_lex.c, dgn_yacc.c, lev_yacc.c, dgn_comp.h, and lev_comp.h) from
|
||||||
into [.util]*.c and [.include]*.h.
|
[.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
|
Once the file lev_yacc.c is in place, vmsbuild.com won't execute
|
||||||
do so for you and the results might not be what you expect.
|
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
|
5. To build NETHACK.EXE and its auxiliary programs, execute the
|
||||||
following DCL command:
|
following DCL command:
|
||||||
@@ -212,6 +221,9 @@ Notes:
|
|||||||
is the preferred way to compile because it's guaranteed to compile
|
is the preferred way to compile because it's guaranteed to compile
|
||||||
and link everything.
|
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
|
4. termcap is an ASCII data file containing descriptions of terminal
|
||||||
capabilities and the escape sequences that software must use to take
|
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
|
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
|
termcap file, otherwise a message about "Unknown terminal type" will
|
||||||
be printed and NetHack will exit.
|
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
|
installed with privileges (to allow the playground to be protected
|
||||||
against world write access). This has only undergone limited testing,
|
against world write access). This has only undergone limited testing,
|
||||||
so install NetHack with privileges at your own risk. If you discover
|
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
|
built NetHack, you can relink with tracebacks disabled by doing
|
||||||
$ @[.SYS.VMS]VMSBUILD "LINK" "" "" "/noTrace/noDebug"
|
$ @[.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
|
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
|
to allow other users to access your copy of NetHack you should probably
|
||||||
place an ACL on the playground directory and its save subdirectory.
|
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
|
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.
|
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
|
character when it wants input. This is displayed as ESC inside the
|
||||||
game. Digital VK201 keyboards (used by VT2xx and VT3xx and older
|
game. Digital VK201 keyboards (used by VT2xx and VT3xx and older
|
||||||
VAXstations) and VK401 keyboards (used by VT4xx, newer VAXstations,
|
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;
|
be sure to remember to eventually reattach to the NetHack subprocess;
|
||||||
otherwise the game in progress won't get saved when you logout.
|
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
|
to it whenever a game ends. This can be disabled entirely by adding
|
||||||
an "#undef LOGFILE" directive to vmsconf.h prior to building the
|
an "#undef LOGFILE" directive to vmsconf.h prior to building the
|
||||||
program, or it can be disabled later by removing the file(s) LOGFILE.;*
|
program, or it can be disabled later by removing the file(s) LOGFILE.;*
|
||||||
from the playground directory. If not disabled prior to compilation,
|
from the playground directory. If not disabled prior to compilation,
|
||||||
the logfile can be reinitialized by simply creating an empty file
|
the logfile can be reinitialized by simply creating an empty file
|
||||||
named LOGFILE in the playground, but make sure that users are able
|
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.
|
included, but no such obsolete system was available for testing it.
|
||||||
vmsbuild.com detects the need for the extra support routines and
|
vmsbuild.com detects the need for the extra support routines and
|
||||||
arranges automatically for them to be compiled. The reason that
|
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
|
underwent a major revision for VMS V4.6 and several routines which
|
||||||
NetHack utilizes were not available prior to that upgrade.
|
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.
|
an object library (NETHACK.OLB) as it compiles the source files.
|
||||||
This should prevent the quota-exceeded problems from the linker
|
This should prevent the quota-exceeded problems from the linker
|
||||||
that some sites have reported for prior versions. Note that if you
|
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
|
If you forget to replace the library entry, your newly compiled code
|
||||||
will not be included in the new executable image.
|
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
|
spoil the game with unlimited wishes--you must be running from the
|
||||||
username compiled into the game via Local_WIZARD in vmsconf.h, and
|
username compiled into the game via Local_WIZARD in vmsconf.h, and
|
||||||
you must specify "-D" on the command line when invoking NetHack.
|
you must specify "-D" on the command line when invoking NetHack.
|
||||||
@@ -405,7 +426,11 @@ Notes:
|
|||||||
$ @hackdir:nethack "-D"
|
$ @hackdir:nethack "-D"
|
||||||
Any character name you specify will be ignored in favor of "wizard".
|
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
|
two different processes from using the same character name (under the
|
||||||
same UIC ownership) at the same time. It does this by temporarily
|
same UIC ownership) at the same time. It does this by temporarily
|
||||||
giving that file a second directory entry named PERM.LOCK, then
|
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
|
is accomplished using temporary entry RECORD.LOCK and LOGFILE using
|
||||||
entry LOGFILE.LOCK.
|
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
|
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
|
have both those things, such a configuration has not been tested and
|
||||||
there are no provisions for it in vmsbuild.com. Makefile.src does
|
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
|
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.
|
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>
|
<devteam@nethack.org>
|
||||||
Always include version information for NetHack, the operating system,
|
Always include version information for NetHack, the operating system,
|
||||||
and the C compiler used.
|
and the C compiler used.
|
||||||
|
|
||||||
20-OCT-2003
|
20-OCT-2003
|
||||||
minimally updated 9-NOV-2015...
|
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
|
# Copyright (c) 2003 by Robert Patrick Rankin
|
||||||
# NetHack may be freely redistributed. See license for details.
|
# NetHack may be freely redistributed. See license for details.
|
||||||
|
|||||||
@@ -432,7 +432,7 @@ boolean border;
|
|||||||
w += (int) strlen(text);
|
w += (int) strlen(text);
|
||||||
/* if preceding field has any trailing spaces, don't add extra;
|
/* if preceding field has any trailing spaces, don't add extra;
|
||||||
(should only apply to prev==title; status_update() handles
|
(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
|
if (spacing[fld] > 0 && prev_fld != BL_FLUSH
|
||||||
&& *(p = status_vals[prev_fld]) && *(eos(p) - 1) == ' '
|
&& *(p = status_vals[prev_fld]) && *(eos(p) - 1) == ' '
|
||||||
&& (prev_fld != BL_TITLE || !iflags.wc2_hitpointbar))
|
&& (prev_fld != BL_TITLE || !iflags.wc2_hitpointbar))
|
||||||
|
|||||||
+4
-4
@@ -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 */
|
/* Copyright (c) David Cohrs, 1991 */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -3929,7 +3929,7 @@ unsigned long *colormasks;
|
|||||||
tty_status[NOW][fldidx].lth = 30 + 2; /* '[' and ']' */
|
tty_status[NOW][fldidx].lth = 30 + 2; /* '[' and ']' */
|
||||||
break;
|
break;
|
||||||
case BL_GOLD:
|
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')
|
if ((p = index(status_vals[fldidx], '\\')) != 0 && p[1] == 'G')
|
||||||
tty_status[NOW][fldidx].lth -= (10 - 1);
|
tty_status[NOW][fldidx].lth -= (10 - 1);
|
||||||
break;
|
break;
|
||||||
@@ -4036,7 +4036,7 @@ int sz[3];
|
|||||||
|
|
||||||
/* On a change to the field location, everything further
|
/* On a change to the field location, everything further
|
||||||
to the right must be updated as well. (Not necessarily
|
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.) */
|
multiple fields to put stuff further right back in sync.) */
|
||||||
if (tty_status[NOW][idx].x + tty_status[NOW][idx].lth
|
if (tty_status[NOW][idx].x + tty_status[NOW][idx].lth
|
||||||
!= tty_status[BEFORE][idx].x + tty_status[BEFORE][idx].lth)
|
!= tty_status[BEFORE][idx].x + tty_status[BEFORE][idx].lth)
|
||||||
@@ -4501,7 +4501,7 @@ render_status(VOID_ARGS)
|
|||||||
x += tlth;
|
x += tlth;
|
||||||
}
|
}
|
||||||
finalx[row][NOW] = x - 1;
|
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].dirty = FALSE;
|
||||||
tty_status[NOW][idx].redraw = FALSE;
|
tty_status[NOW][idx].redraw = FALSE;
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user