Merge branch 'NetHack-3.6.2'
This commit is contained in:
@@ -62,7 +62,7 @@ Please read items (1), (2) and (3) BEFORE doing anything with your new code.
|
|||||||
Intel Pentium or better (or clone) running Linux, BSDI, or
|
Intel Pentium or better (or clone) running Linux, BSDI, or
|
||||||
Windows (7 through 10)
|
Windows (7 through 10)
|
||||||
Intel 80386 or greater (or clone) boxes running Linux, or BSDI
|
Intel 80386 or greater (or clone) boxes running Linux, or BSDI
|
||||||
Mac OS X 10.9
|
Mac OS X 10.11 (follow the instructions in sys/unix, not sys/mac)
|
||||||
OpenVMS (aka VMS) V8.4 on Alpha and on Integrity/Itanium/IA64
|
OpenVMS (aka VMS) V8.4 on Alpha and on Integrity/Itanium/IA64
|
||||||
|
|
||||||
Instructions have been provided by way of community contribution on:
|
Instructions have been provided by way of community contribution on:
|
||||||
@@ -166,6 +166,6 @@ In our own patches, we will assume that your code is synchronized with ours.
|
|||||||
|
|
||||||
-- Good luck, and happy Hacking --
|
-- Good luck, and happy Hacking --
|
||||||
|
|
||||||
# $NHDT-Date: 1524689604 2018/04/25 20:53:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.42 $
|
# $NHDT-Date: 1533602460 2018/08/07 00:41:00 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.46 $
|
||||||
# Copyright (c) 2012 by Michael Allison
|
# Copyright (c) 2012 by Michael Allison
|
||||||
# NetHack may be freely redistributed. See license for details.
|
# NetHack may be freely redistributed. See license for details.
|
||||||
|
|||||||
@@ -76,6 +76,11 @@ summary text [for message history] of quest message Pri 00081 (Priest quest
|
|||||||
success message given when bringing quest artifact to leader)
|
success message given when bringing quest artifact to leader)
|
||||||
misspelled "congratulations"
|
misspelled "congratulations"
|
||||||
verbal charm/seduce messages were given even when hero was deaf
|
verbal charm/seduce messages were given even when hero was deaf
|
||||||
|
succubus/incubus seduction might result in loss of levitation which in turn
|
||||||
|
could drop the hero onto a trap that transports him/her elsewhere;
|
||||||
|
seduction was proceeding as if nothing unusual had happened
|
||||||
|
#turn command which aggravated monsters did so without using a turn (not a pun)
|
||||||
|
fix hole/trapdoor passage inconsistency when polymorphed into a giant
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -988,10 +988,31 @@ dodown()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trap)
|
if (trap) {
|
||||||
You("%s %s.", Flying ? "fly" : locomotion(youmonst.data, "jump"),
|
const char *down_or_thru = trap->ttyp == HOLE ? "down" : "through";
|
||||||
trap->ttyp == HOLE ? "down the hole" : "through the trap door");
|
const char *actn = Flying ? "fly" : locomotion(youmonst.data, "jump");
|
||||||
|
|
||||||
|
if (youmonst.data->msize >= MZ_HUGE) {
|
||||||
|
char qbuf[QBUFSZ];
|
||||||
|
|
||||||
|
You("don't fit %s easily.", down_or_thru);
|
||||||
|
Sprintf(qbuf, "Try to squeeze %s?", down_or_thru);
|
||||||
|
if (yn(qbuf) == 'y') {
|
||||||
|
if (!rn2(3)) {
|
||||||
|
actn = "manage to squeeze";
|
||||||
|
losehp(Maybe_Half_Phys(rnd(4)),
|
||||||
|
"contusion from a small passage", KILLED_BY);
|
||||||
|
} else {
|
||||||
|
You("were unable to fit %s.", down_or_thru);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
You("%s %s the %s.", actn, down_or_thru,
|
||||||
|
trap->ttyp == HOLE ? "hole" : "trap door");
|
||||||
|
}
|
||||||
if (trap && Is_stronghold(&u.uz)) {
|
if (trap && Is_stronghold(&u.uz)) {
|
||||||
goto_hell(FALSE, TRUE);
|
goto_hell(FALSE, TRUE);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+38
-12
@@ -11,7 +11,8 @@ STATIC_VAR NEARDATA struct obj *mon_currwep = (struct obj *) 0;
|
|||||||
STATIC_DCL boolean FDECL(u_slip_free, (struct monst *, struct attack *));
|
STATIC_DCL boolean FDECL(u_slip_free, (struct monst *, struct attack *));
|
||||||
STATIC_DCL int FDECL(passiveum, (struct permonst *, struct monst *,
|
STATIC_DCL int FDECL(passiveum, (struct permonst *, struct monst *,
|
||||||
struct attack *));
|
struct attack *));
|
||||||
STATIC_DCL void FDECL(mayberem, (const char *, struct obj *, const char *));
|
STATIC_DCL void FDECL(mayberem, (struct monst *, const char *,
|
||||||
|
struct obj *, const char *));
|
||||||
STATIC_DCL boolean FDECL(diseasemu, (struct permonst *));
|
STATIC_DCL boolean FDECL(diseasemu, (struct permonst *));
|
||||||
STATIC_DCL int FDECL(hitmu, (struct monst *, struct attack *));
|
STATIC_DCL int FDECL(hitmu, (struct monst *, struct attack *));
|
||||||
STATIC_DCL int FDECL(gulpmu, (struct monst *, struct attack *));
|
STATIC_DCL int FDECL(gulpmu, (struct monst *, struct attack *));
|
||||||
@@ -2349,7 +2350,7 @@ struct attack *mattk;
|
|||||||
return (pagr->mlet == S_NYMPH) ? 2 : 0;
|
return (pagr->mlet == S_NYMPH) ? 2 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns 1 if monster teleported */
|
/* returns 1 if monster teleported (or hero leaves monster's vicinity) */
|
||||||
int
|
int
|
||||||
doseduce(mon)
|
doseduce(mon)
|
||||||
struct monst *mon;
|
struct monst *mon;
|
||||||
@@ -2392,7 +2393,7 @@ struct monst *mon;
|
|||||||
if (ring->owornmask && uarmg) {
|
if (ring->owornmask && uarmg) {
|
||||||
/* don't take off worn ring if gloves are in the way */
|
/* don't take off worn ring if gloves are in the way */
|
||||||
if (!tried_gloves++)
|
if (!tried_gloves++)
|
||||||
mayberem(Who, uarmg, "gloves");
|
mayberem(mon, Who, uarmg, "gloves");
|
||||||
if (uarmg)
|
if (uarmg)
|
||||||
continue; /* next ring might not be worn */
|
continue; /* next ring might not be worn */
|
||||||
}
|
}
|
||||||
@@ -2422,7 +2423,7 @@ struct monst *mon;
|
|||||||
if (uarmg) {
|
if (uarmg) {
|
||||||
/* don't put on ring if gloves are in the way */
|
/* don't put on ring if gloves are in the way */
|
||||||
if (!tried_gloves++)
|
if (!tried_gloves++)
|
||||||
mayberem(Who, uarmg, "gloves");
|
mayberem(mon, Who, uarmg, "gloves");
|
||||||
if (uarmg)
|
if (uarmg)
|
||||||
break; /* no point trying further rings */
|
break; /* no point trying further rings */
|
||||||
}
|
}
|
||||||
@@ -2449,14 +2450,25 @@ struct monst *mon;
|
|||||||
Who, the(xname(ring)), body_part(HAND));
|
Who, the(xname(ring)), body_part(HAND));
|
||||||
setworn(ring, LEFT_RING);
|
setworn(ring, LEFT_RING);
|
||||||
} else if (uright && uright->otyp != RIN_ADORNMENT) {
|
} else if (uright && uright->otyp != RIN_ADORNMENT) {
|
||||||
|
/* note: the "replaces" message might be inaccurate if
|
||||||
|
hero's location changes and the process gets interrupted,
|
||||||
|
but trying to figure that out in advance in order to use
|
||||||
|
alternate wording is not worth the effort */
|
||||||
pline("%s replaces %s with %s.",
|
pline("%s replaces %s with %s.",
|
||||||
Who, yname(uright), yname(ring));
|
Who, yname(uright), yname(ring));
|
||||||
Ring_gone(uright);
|
Ring_gone(uright);
|
||||||
|
/* ring removal might cause loss of levitation which could
|
||||||
|
drop hero onto trap that transports hero somewhere else */
|
||||||
|
if (u.utotype || distu(mon->mx, mon->my) > 2)
|
||||||
|
return 1;
|
||||||
setworn(ring, RIGHT_RING);
|
setworn(ring, RIGHT_RING);
|
||||||
} else if (uleft && uleft->otyp != RIN_ADORNMENT) {
|
} else if (uleft && uleft->otyp != RIN_ADORNMENT) {
|
||||||
|
/* see "replaces" note above */
|
||||||
pline("%s replaces %s with %s.",
|
pline("%s replaces %s with %s.",
|
||||||
Who, yname(uleft), yname(ring));
|
Who, yname(uleft), yname(ring));
|
||||||
Ring_gone(uleft);
|
Ring_gone(uleft);
|
||||||
|
if (u.utotype || distu(mon->mx, mon->my) > 2)
|
||||||
|
return 1;
|
||||||
setworn(ring, LEFT_RING);
|
setworn(ring, LEFT_RING);
|
||||||
} else
|
} else
|
||||||
impossible("ring replacement");
|
impossible("ring replacement");
|
||||||
@@ -2471,16 +2483,25 @@ struct monst *mon;
|
|||||||
: naked ? "murmurs sweet nothings into your ear"
|
: naked ? "murmurs sweet nothings into your ear"
|
||||||
: "murmurs in your ear",
|
: "murmurs in your ear",
|
||||||
naked ? "" : ", while helping you undress");
|
naked ? "" : ", while helping you undress");
|
||||||
mayberem(Who, uarmc, cloak_simple_name(uarmc));
|
mayberem(mon, Who, uarmc, cloak_simple_name(uarmc));
|
||||||
if (!uarmc)
|
if (!uarmc)
|
||||||
mayberem(Who, uarm, "suit");
|
mayberem(mon, Who, uarm, suit_simple_name(uarm));
|
||||||
mayberem(Who, uarmf, "boots");
|
mayberem(mon, Who, uarmf, "boots");
|
||||||
if (!tried_gloves)
|
if (!tried_gloves)
|
||||||
mayberem(Who, uarmg, "gloves");
|
mayberem(mon, Who, uarmg, "gloves");
|
||||||
mayberem(Who, uarms, "shield");
|
mayberem(mon, Who, uarms, "shield");
|
||||||
mayberem(Who, uarmh, helm_simple_name(uarmh));
|
mayberem(mon, Who, uarmh, helm_simple_name(uarmh));
|
||||||
if (!uarmc && !uarm)
|
if (!uarmc && !uarm)
|
||||||
mayberem(Who, uarmu, "shirt");
|
mayberem(mon, Who, uarmu, "shirt");
|
||||||
|
|
||||||
|
/* removing armor (levitation boots, or levitation ring to make
|
||||||
|
room for adornment ring with incubus case) might result in the
|
||||||
|
hero falling through a trap door or landing on a teleport trap
|
||||||
|
and changing location, so hero might not be adjacent to seducer
|
||||||
|
any more (mayberem() has its own adjacency test so we don't need
|
||||||
|
to check after each potential removal) */
|
||||||
|
if (u.utotype || distu(mon->mx, mon->my) > 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (uarm || uarmc) {
|
if (uarm || uarmc) {
|
||||||
if (!Deaf)
|
if (!Deaf)
|
||||||
@@ -2627,7 +2648,8 @@ struct monst *mon;
|
|||||||
}
|
}
|
||||||
|
|
||||||
STATIC_OVL void
|
STATIC_OVL void
|
||||||
mayberem(seducer, obj, str)
|
mayberem(mon, seducer, obj, str)
|
||||||
|
struct monst *mon;
|
||||||
const char *seducer; /* only used for alternate message */
|
const char *seducer; /* only used for alternate message */
|
||||||
struct obj *obj;
|
struct obj *obj;
|
||||||
const char *str;
|
const char *str;
|
||||||
@@ -2636,6 +2658,10 @@ const char *str;
|
|||||||
|
|
||||||
if (!obj || !obj->owornmask)
|
if (!obj || !obj->owornmask)
|
||||||
return;
|
return;
|
||||||
|
/* removal of a previous item might have sent the hero elsewhere
|
||||||
|
(loss of levitation that leads to landing on a transport trap) */
|
||||||
|
if (u.utotype || distu(mon->mx, mon->my) > 2)
|
||||||
|
return;
|
||||||
|
|
||||||
/* being deaf overrides confirmation prompt for high charisma */
|
/* being deaf overrides confirmation prompt for high charisma */
|
||||||
if (Deaf) {
|
if (Deaf) {
|
||||||
|
|||||||
+14
-12
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 objnam.c $NHDT-Date: 1525012618 2018/04/29 14:36:58 $ $NHDT-Branch: master $:$NHDT-Revision: 1.202 $ */
|
/* NetHack 3.6 objnam.c $NHDT-Date: 1533352036 2018/08/04 03:07:16 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.206 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2011. */
|
/*-Copyright (c) Robert Patrick Rankin, 2011. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -3978,17 +3978,19 @@ struct obj *suit;
|
|||||||
{
|
{
|
||||||
const char *suitnm, *esuitp;
|
const char *suitnm, *esuitp;
|
||||||
|
|
||||||
if (Is_dragon_mail(suit))
|
if (suit) {
|
||||||
return "dragon mail"; /* <color> dragon scale mail */
|
if (Is_dragon_mail(suit))
|
||||||
else if (Is_dragon_scales(suit))
|
return "dragon mail"; /* <color> dragon scale mail */
|
||||||
return "dragon scales";
|
else if (Is_dragon_scales(suit))
|
||||||
suitnm = OBJ_NAME(objects[suit->otyp]);
|
return "dragon scales";
|
||||||
esuitp = eos((char *) suitnm);
|
suitnm = OBJ_NAME(objects[suit->otyp]);
|
||||||
if (strlen(suitnm) > 5 && !strcmp(esuitp - 5, " mail"))
|
esuitp = eos((char *) suitnm);
|
||||||
return "mail"; /* most suits fall into this category */
|
if (strlen(suitnm) > 5 && !strcmp(esuitp - 5, " mail"))
|
||||||
else if (strlen(suitnm) > 7 && !strcmp(esuitp - 7, " jacket"))
|
return "mail"; /* most suits fall into this category */
|
||||||
return "jacket"; /* leather jacket */
|
else if (strlen(suitnm) > 7 && !strcmp(esuitp - 7, " jacket"))
|
||||||
/* suit is lame but armor is ambiguous and body armor is absurd */
|
return "jacket"; /* leather jacket */
|
||||||
|
}
|
||||||
|
/* "suit" is lame but "armor" is ambiguous and "body armor" is absurd */
|
||||||
return "suit";
|
return "suit";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1939,12 +1939,12 @@ doturn()
|
|||||||
pline("For some reason, %s seems to ignore you.", u_gname());
|
pline("For some reason, %s seems to ignore you.", u_gname());
|
||||||
aggravate();
|
aggravate();
|
||||||
exercise(A_WIS, FALSE);
|
exercise(A_WIS, FALSE);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
if (Inhell) {
|
if (Inhell) {
|
||||||
pline("Since you are in Gehennom, %s won't help you.", u_gname());
|
pline("Since you are in Gehennom, %s won't help you.", u_gname());
|
||||||
aggravate();
|
aggravate();
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
pline("Calling upon %s, you chant an arcane formula.", u_gname());
|
pline("Calling upon %s, you chant an arcane formula.", u_gname());
|
||||||
exercise(A_WIS, TRUE);
|
exercise(A_WIS, TRUE);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
Building a PPC NetHack 3.6 with the Metrowerks compilers
|
Building a PPC NetHack 3.6 with the Metrowerks compilers
|
||||||
|
|
||||||
|
Note: If you are building using any compiler for OS X, use the instructions
|
||||||
|
in sys/unix. These are old instructions for 68k builds.
|
||||||
|
|
||||||
You must be familiar with the Metrowerks compiler and know how to construct
|
You must be familiar with the Metrowerks compiler and know how to construct
|
||||||
projects. The NetHack source may come with the four pre-made projects that
|
projects. The NetHack source may come with the four pre-made projects that
|
||||||
|
|||||||
Reference in New Issue
Block a user