update dat src include...

This commit is contained in:
nhmall
2026-04-26 12:34:02 -04:00
parent 11ae226eeb
commit d6f8241ac1
46 changed files with 78 additions and 78 deletions
+3 -3
View File
@@ -1384,7 +1384,7 @@ dispater
Wealth". It refers to the wealth of precious stone below the
earth.
[ Encyclopedia Mythica, ed. M.F. Lindemans ]
# 3.7; monster adapted from slash'em based on an AD&D Monster Manual entry;
# 5.0; monster adapted from slash'em based on an AD&D Monster Manual entry;
# slash'em lacked a description so this entry has been created from scratch;
# the puma comparison is how the AD&D monster is described (except that
# that creature has six legs and two tentacles!) but the actual monster's
@@ -2048,7 +2048,7 @@ gem or rock
same as for jewels: it is always the false ones that look the
most real, the most brilliant.
[ Salvador Dali ]
# 3.7; monster derived from slash'em which lacked a description so this
# 5.0; monster derived from slash'em which lacked a description so this
# entry has been created from scratch
genetic engineer
These very odd people have mastered the ability to insert gene
@@ -2418,7 +2418,7 @@ helm of caution
A helmet which confers the "warning" property, sensing the
strength of threats posed by unseen hostile creatures.
# note: this quotation had "high of steel" but we're going to cheat--it is
# now deliberately mistranslated as "high of crystal" to match nethack 3.7's
# now deliberately mistranslated as "high of crystal" to match nethack 5.0's
# change to helm of brilliance and become more useful to players.
# PR #1109 wanted to change it to be for all helms but being covered with
# gems and gold is not appropriate for ordinary helmets (plus it states that
+1 -1
View File
@@ -185,7 +185,7 @@ dungeon = {
},
{
name = "minend",
-- 3.7.0: minend changed to no-bones to simplify achievement tracking
-- 5.0.0: minend changed to no-bones to simplify achievement tracking
-- bonetag = "E"
base = -1,
nlevels = 3
+1 -1
View File
@@ -1,4 +1,4 @@
NetHack History file for release 3.7
NetHack History file for release 5.0
Behold, mortal, the origins of NetHack...
+2 -2
View File
@@ -2464,7 +2464,7 @@ Dibbler removed his cigar.
[Moving Pictures, by Terry Pratchett]
%e passage
#
# New for 3.7 - these are worthy but 16 passages are already more than enough.
# New for 5.0 - these are worthy but 16 passages are already more than enough.
#-#
#-# p. 304
#-%passage 17
@@ -4138,7 +4138,7 @@ followed by long periods of being dead."
[Interesting Times, by Terry Pratchett]
%e passage
#
# 3 new passages for 3.7
# 3 new passages for 5.0
#
# p. 45
%passage 11
+1 -1
View File
@@ -53,7 +53,7 @@ typedef long off_t;
/* data librarian defs */
#define DLBFILE "nhdat" /* main library */
/* nhsdat sound library not used in 3.7 */
/* nhsdat sound library not used in 5.0 */
#undef DLBFILE2
#ifndef CROSS_TO_AMIGA
+1 -1
View File
@@ -422,7 +422,7 @@ extern struct nomakedefs_s nomakedefs;
#include "color.h"
/*
* Version 3.7.x has aspirations of portable file formats. We
* Version 5.0.x has aspirations of portable file formats. We
* make a distinction between MAIL functionality and MAIL_STRUCTURES
* so that the underlying structures are consistent, whether MAIL is
* defined or not.
+6 -6
View File
@@ -972,7 +972,7 @@
8, CLR_RED, SCORPION),
/*
* trappers, lurkers, &c
* Note: prior to 3.7, these were defined to do AD_DGST damage,
* Note: prior to 5.0, these were defined to do AD_DGST damage,
* but they don't swallow their victims into their stomachs and
* digest, they enfold and crush or suffocate.
* The Monster Manual states that someone engulfed by a trapper
@@ -2031,7 +2031,7 @@
| M1_OMNIVORE,
M2_STRONG, 0,
13, HI_GOLD, GOLDEN_NAGA),
/* 3.7: guardian naga used to have three attacks: bite, spit, hug
/* 5.0: guardian naga used to have three attacks: bite, spit, hug
but in order for the hug to succeed the two preceding attacks had
to have hit, and it's not possible to both bite and spit, hence
the hug never hit; change to spit, bite, touch, hug; if the bite
@@ -2132,7 +2132,7 @@
M1_HUMANOID | M1_OMNIVORE | M1_POIS | M1_TPORT, M2_HOSTILE,
M3_INFRAVISIBLE,
9, CLR_CYAN, QUANTUM_MECHANIC),
/* 3.7: from slash'em, to expand Q class; hit polymorphs target */
/* 5.0: from slash'em, to expand Q class; hit polymorphs target */
MON(NAM("genetic engineer"), S_QUANTMECH,
LVL(12, 12, 3, 10, 0), (G_GENO | 1),
A(ATTK(AT_CLAW, AD_POLY, 1, 4),
@@ -2695,7 +2695,7 @@
| M2_SHAPESHIFTER,
M3_INFRAVISIBLE,
11, HI_DOMESTIC, DOPPELGANGER),
/* 3.7: shopkeepers used to have speed 18, but if/when they were
/* 5.0: shopkeepers used to have speed 18, but if/when they were
hasted they always got 2 moves per turn and had a tendency to move
away from blocking the door and then move right back; since they
might start with a potion of speed and drink that as soon as the
@@ -2925,7 +2925,7 @@
#define SEDUCTION_ATTACKS_NO \
A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), \
ATTK(AT_BITE, AD_DRLI, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK)
/* incubus and succubus; prior to 3.7, succubus and incubus were
/* incubus and succubus; prior to 5.0, succubus and incubus were
distinct monsters; "amorous demon" is considered to be a temporary
placeholder but may be here to stay... */
MON(NAMS("incubus", "succubus", "amorous demon"), S_DEMON,
@@ -3195,7 +3195,7 @@
/*
* sea monsters
*
* 3.7: all the fish except kraken used to specify M1_SLITHY, presumably
* 5.0: all the fish except kraken used to specify M1_SLITHY, presumably
* cloned from giant eel. Using "slither" to describe their movement
* wasn't appropriate. Unfortunately, locomotion() isn't able to choose
* "swim" as their movement description because it is only passed a
+1 -1
View File
@@ -224,7 +224,7 @@ WEAPON("stiletto", NoDes,
/* 3.6: worm teeth and crysknives now stack;
when a stack of teeth is enchanted at once, they fuse into one crysknife;
when a stack of crysknives drops, the whole stack reverts to teeth */
/* 3.7: change crysknife from MINERAL to BONE and worm tooth from 0 to BONE */
/* 5.0: change crysknife from MINERAL to BONE and worm tooth from 0 to BONE */
WEAPON("worm tooth", NoDes,
1, 1, 0, 0, 20, 2, 2, 2, 0, 0, P_KNIFE, BONE, CLR_WHITE,
WORM_TOOTH),
+2 -2
View File
@@ -62,7 +62,7 @@
/*#define VERSION_COMPATIBILITY 0x03070000L*/
/****************************************************************************/
/* Version 3.7.x */
/* Version 5.0.x */
/*
* NetHack 5.0.0, <insert date here>
@@ -95,7 +95,7 @@
* the official 3.6.6 binary was built.
* windows: switch from using keyhandling dll's to incorporating the three
* variations (default, ray, 340) in sys/winnt/nttty.c
* curses: cherry-picked selectsaved code from 3.7 for menu of save files
* curses: cherry-picked selectsaved code from 5.0 for menu of save files
* NetHackW: fix delayed rendering of cursor when using farlook
*/
+1 -1
View File
@@ -157,7 +157,7 @@ typedef const char *vA;
[nethack's core doesn't use VA_NEXT() so doesn't use VA_SHIFT()
either, and this definition is just retained for completeness.
lev_comp does use VA_NEXT(), but it passes all 'argX' arguments.
Note: as of 3.7.0, lev_comp doesn't exist anymore.]
Note: as of 5.0.0, lev_comp doesn't exist anymore.]
*/
#define VA_SHIFT() \
(arg1 = arg2, arg2 = arg3, arg3 = arg4, arg4 = arg5, arg5 = arg6, \
+1 -1
View File
@@ -164,7 +164,7 @@ PANICTRACE_GDB=2 #at conclusion of panic, show a call traceback and then
*/
/* This used to be force-defined for VMS in topten.c, but with
* the global variable consolidation into g in 3.7, it has to be
* the global variable consolidation into g in 5.0, it has to be
* defined here so that decl.h includes the field in g.
*/
#define UPDATE_RECORD_IN_PLACE
+3 -3
View File
@@ -127,7 +127,7 @@ extern
#define display_file (*windowprocs.win_display_file)
#define start_menu (*windowprocs.win_start_menu)
#define end_menu (*windowprocs.win_end_menu)
/* 3.7: There are real add_menu() and select_menu in the core now.
/* 5.0: There are real add_menu() and select_menu in the core now.
* add_menu does some common activities, such as menu_colors.
* select_menu does some before and after activities.
* add_menu() and select_menu() are in windows.c
@@ -151,7 +151,7 @@ extern
#define nh_poskey (*windowprocs.win_nh_poskey)
#define nhbell (*windowprocs.win_nhbell)
#define nh_doprev_message (*windowprocs.win_doprev_message)
/* 3.7: There is a real getlin() in the core now, which does
/* 5.0: There is a real getlin() in the core now, which does
* some before and after activities.
* [alternative fix for menu search via ':'.]
* getlin() is in windows.c
@@ -297,7 +297,7 @@ struct wc_Opt {
/* Macro for the currently active Window Port whose function
pointers have been loaded */
#if 0
/* 3.7 The string comparison version isn't used anymore */
/* 5.0 The string comparison version isn't used anymore */
#define WINDOWPORT(wn) \
(windowprocs.name && !strncmpi((#wn), windowprocs.name, strlen((#wn))))
#endif
+1 -1
View File
@@ -167,7 +167,7 @@ typedef struct glyphinfo {
#define MENU_ITEMFLAGS_SKIPINVERT 0x0000002U
#define MENU_ITEMFLAGS_SKIPMENUCOLORS 0x0000004U
/* 3.7+ enhanced menu flags that not all window ports are likely to
/* 5.0+ enhanced menu flags that not all window ports are likely to
* support initially.
*
* As behavior and appearance modification flags are added, the various
+1 -1
View File
@@ -683,7 +683,7 @@ rnd_attr(void)
{
int i, x = rn2(100);
/* 3.7: the x -= ... calculation used to have an off by 1 error that
/* 5.0: the x -= ... calculation used to have an off by 1 error that
resulted in the values being biased toward Str and away from Cha */
for (i = 0; i < A_MAX; ++i)
if ((x -= gu.urole.attrdist[i]) < 0)
+1 -1
View File
@@ -455,7 +455,7 @@ dig(void)
} else if (digtyp == DIGTYP_BOULDER
&& (obj = sobj_at(BOULDER, dpx, dpy)) != 0) {
fracture_rock(obj);
/*[3.7: this probably isn't necessary anymore]*/
/*[5.0: this probably isn't necessary anymore]*/
if ((bobj = sobj_at(BOULDER, dpx, dpy)) != 0) {
/* another boulder here, restack it to the top */
obj_extract_self(bobj);
+2 -2
View File
@@ -2214,7 +2214,7 @@ flush_screen(int cursor_on_u)
glyph_info bkglyphinfo = nul_glyphinfo;
int bkglyph;
/* 3.7: don't update map, status, or perm_invent during save/restore */
/* 5.0: don't update map, status, or perm_invent during save/restore */
if (_suppress_map_output())
return;
@@ -3453,7 +3453,7 @@ t_warn(struct rm *lev)
static const char warn_str[] = "wall_angle: %s: case %d: seenv = 0x%x";
const char *wname;
/* 3.7: non-T_wall cases added after shop repair (via breaching a wall,
/* 5.0: non-T_wall cases added after shop repair (via breaching a wall,
using locking magic to put a door there, then unlocking the door;
D_CLOSED carried over to the wall) triggered warning for "unknown" */
switch (lev->typ) {
+3 -3
View File
@@ -77,7 +77,7 @@ boulder_hits_pool(
levl[rx][ry].typ = ROOM, levl[rx][ry].flags = 0;
recalc_block_point(rx, ry);
}
/* 3.7: normally DEADMONSTER() is used when traversing the fmon
/* 5.0: normally DEADMONSTER() is used when traversing the fmon
list--dead monsters usually aren't still at specific map
locations; however, if ice melts causing a giant to drown,
that giant would still be on the map when it drops inventory;
@@ -1533,7 +1533,7 @@ goto_level(
* -2 5.21 4.17 0.0
* -3 2.08 0.0 0.0
*
* 3.7.0: the chance for the "mysterious force" to kick in goes down
* 5.0.0: the chance for the "mysterious force" to kick in goes down
* as it kicks in, starting at 25% per climb attempt and dropping off
* gradually but substantially. The drop off is greater when hero is
* sent down farther so benefits lawfuls more than chaotics this time.
@@ -2438,7 +2438,7 @@ set_wounded_legs(long side, int timex)
set_itimeout(&HWounded_legs, (long) timex);
/* the leg being wounded and its timeout might differ from one
attack to the next, but we don't track the legs separately;
3.7: both legs will ultimately heal together; this used to use
5.0: both legs will ultimately heal together; this used to use
direct assignment instead of bitwise-OR so getting wounded in
one leg mysteriously healed the other */
EWounded_legs |= side;
+1 -1
View File
@@ -433,7 +433,7 @@ objtyp_is_callable(int i)
switch(objects[i].oc_class) {
case AMULET_CLASS:
/* 3.7: calling these used to be allowed but that enabled the
/* 5.0: calling these used to be allowed but that enabled the
player to tell whether two unID'd amulets of yendor were both
fake or one was real by calling them distinct names and then
checking discoveries to see whether first name was replaced
+1 -1
View File
@@ -2501,7 +2501,7 @@ find_ac(void)
uac -= u.ublessed;
uac -= u.uspellprot;
/* put a cap on armor class [3.7: was +127,-128, now reduced to +/- 99 */
/* put a cap on armor class [5.0: was +127,-128, now reduced to +/- 99 */
if (abs(uac) > AC_MAX)
uac = sgn(uac) * AC_MAX;
+2 -2
View File
@@ -601,13 +601,13 @@ really_kick_object(coordxy x, coordxy y)
|| closed_door(x + u.dx, y + u.dy))
range = 1;
/* 3.7: this used to skip 'costly' handling if kickedobj->no_charge
/* 5.0: this used to skip 'costly' handling if kickedobj->no_charge
was set but that optimization could result in no_charge staying set
for objects kicked out of the shop */
shkp = find_objowner(gk.kickedobj, x, y);
costly = (shkp && (costly_spot(x, y) || (costly_adjacent(shkp, x, y)
&& gk.kickedobj->unpaid)));
/* 3.7: give feedback about the item being kicked; some follow-on
/* 5.0: give feedback about the item being kicked; some follow-on
messages refer to "it" */
Norep("You kick %s.",
!isgold ? singular(gk.kickedobj, doname) : doname(gk.kickedobj));
+1 -1
View File
@@ -2082,7 +2082,7 @@ thitmonst(
/* throwing real gems to co-aligned unicorns boosts Luck,
to cross-aligned unicorns changes Luck by random amount;
throwing worthless glass doesn't affect Luck but doesn't anger them;
3.7: treat rocks and gray stones as attacks rather than like glass
5.0: treat rocks and gray stones as attacks rather than like glass
and also treat gems or glass shot via sling as attacks */
if (obj->oclass == GEM_CLASS && is_unicorn(mon->data)
&& objects[obj->otyp].oc_material != MINERAL && !uslinging()) {
+6 -6
View File
@@ -839,7 +839,7 @@ cprefx(int pm)
/* life-saving needed to reach here */
exercise(A_WIS, FALSE);
/* revive an actual corpse; can't do that if it was a tin;
3.7: this used to assume that such tins were impossible but
5.0: this used to assume that such tins were impossible but
they can be wished for in wizard mode; they can't make it
to normal play though because bones creation empties them */
if (svc.context.victual.piece /* Null for tins */
@@ -1891,7 +1891,7 @@ eatcorpse(struct obj *otmp)
rotted -= 2L;
}
/* 3.7: globs don't become tainted, they shrink away */
/* 5.0: globs don't become tainted, they shrink away */
if (!glob && !stoneable && !slimeable && rotted > 5L) {
boolean cannibal = maybe_cannibal(mnum, FALSE);
@@ -2632,7 +2632,7 @@ edibility_prompts(struct obj *otmp)
*/
char buf[BUFSZ], foodsmell[BUFSZ],
it_or_they[QBUFSZ];
/* 3.7: decaying globs don't become tainted anymore; in 3.6, they did */
/* 5.0: decaying globs don't become tainted anymore; in 3.6, they did */
boolean cadaver = (otmp->otyp == CORPSE), stoneorslime = FALSE;
int material = objects[otmp->otyp].oc_material, mnum = otmp->corpsenm;
long rotted = 0L;
@@ -3179,7 +3179,7 @@ gethungry(void)
u.uhunger--; /* ordinary food consumption */
/*
* 3.7: trigger is randomized instead of (moves % N). Makes
* 5.0: trigger is randomized instead of (moves % N). Makes
* ring juggling (using the 'time' option to see the turn counter
* in order to time swapping of a pair of rings of slow digestion,
* wearing one on one hand, then putting on the other and taking
@@ -3209,7 +3209,7 @@ gethungry(void)
* Possessing the real Amulet imposes a separate hunger penalty
* from wearing an amulet (so gets a double penalty when worn).
*
* 3.7.0: Worn meat rings don't affect hunger.
* 5.0.0: Worn meat rings don't affect hunger.
* Same with worn cheap plastic imitation of the Amulet.
* +0 ring of protection might do something (enhanced "magical
* cancellation") if hero doesn't have protection from some
@@ -3222,7 +3222,7 @@ gethungry(void)
*/
switch (accessorytime) { /* note: use even cases among 0..19 only */
case 0:
/* 3.7: if not wearing a ring of slow digestion, obtaining
/* 5.0: if not wearing a ring of slow digestion, obtaining
that property from worn armor (white dragon scales/mail)
causes the armor to burn nutrition; since it's not
actually a ring, we don't check for it on the ring
+2 -2
View File
@@ -2298,7 +2298,7 @@ domove_fight_empty(coordxy x, coordxy y)
} else if (solid) {
/* glyph might indicate unseen terrain if hero is blind;
unlike searching, this won't reveal what that terrain is;
3.7: used to say "solid rock" for STONE, but that made it be
5.0: used to say "solid rock" for STONE, but that made it be
different from unmapped walls outside of rooms (and was wrong
on arboreal levels) */
if (levl[x][y].seenv || IS_STWALL(levl[x][y].typ)
@@ -2310,7 +2310,7 @@ domove_fight_empty(coordxy x, coordxy y)
}
/* note: 'solid' is misleadingly named and catches pools
of water and lava as well as rock and walls;
3.7: furniture too */
5.0: furniture too */
} else {
Strcpy(buf, "thin air");
}
+1 -1
View File
@@ -93,7 +93,7 @@ staticfn void opt_out_words(char *, int *) NONNULLPTRS;
staticfn void build_savebones_compat_string(void);
static int idxopttext, done_runtime_opt_init_once = 0;
#define MAXOPT 60 /* 3.7: currently 40 lines get inserted into opttext[] */
#define MAXOPT 60 /* 5.0: currently 40 lines get inserted into opttext[] */
static char *opttext[MAXOPT] = { 0 };
#define STOREOPTTEXT(line) \
((void) ((idxopttext < MAXOPT) \
+1 -1
View File
@@ -1312,7 +1312,7 @@ gulpmu(struct monst *mtmp, struct attack *mattk)
place_monster(mtmp, u.ux, u.uy);
set_ustuck(mtmp);
newsym(mtmp->mx, mtmp->my);
/* 3.7: dismount for all engulfers, not just for purple worms */
/* 5.0: dismount for all engulfers, not just for purple worms */
if (u.usteed) {
char buf[BUFSZ];
+3 -3
View File
@@ -957,7 +957,7 @@ mksobj_init(struct obj **obj, boolean artif)
/* for emphasis; glob quantity is always 1 and weight varies
when other globs coalesce with it or this one shrinks */
otmp->quan = 1L;
/* 3.7: globs in 3.6.x left owt as 0 and let weight() fix
/* 5.0: globs in 3.6.x left owt as 0 and let weight() fix
that up during 'obj->owt = weight(obj)' below, but now
we initialize glob->owt explicitly so weight() doesn't
need to perform any fix up and returns glob->owt as-is */
@@ -1899,7 +1899,7 @@ weight(struct obj *obj)
manage glob->owt and there is nothing for weight() to do except
return the current value as-is */
if (obj->globby) {
/* 3.7: in 3.6.x this checked for owt==0 and then used
/* 5.0: in 3.6.x this checked for owt==0 and then used
owt as-is when non-zero or objects[].oc_weight if zero;
we don't do that anymore because it confused calculating
the weight of a container when a glob inside shrank down
@@ -1964,7 +1964,7 @@ weight(struct obj *obj)
} else if (obj->oclass == FOOD_CLASS && obj->oeaten) {
return eaten_stat((int) obj->quan * wt, obj);
} else if (obj->oclass == COIN_CLASS) {
/* 3.7: always weigh at least 1 unit; used to yield 0 for 1..49 */
/* 5.0: always weigh at least 1 unit; used to yield 0 for 1..49 */
wt = (int) ((obj->quan + 50L) / 100L);
return max(wt, 1);
} else if (obj->otyp == HEAVY_IRON_BALL && obj->owt != 0) {
+2 -2
View File
@@ -1784,13 +1784,13 @@ m_move(struct monst *mtmp, int after)
* attack it.
*/
if (intruder && intruder != mtmp
/* 3.7: this used to use 'dist2() < 2' which meant that intended
/* 5.0: this used to use 'dist2() < 2' which meant that intended
attack was disallowed if they were adjacent diagonally */
&& dist2(mtmp->mx, mtmp->my, tx, ty) <= 2) {
gb.bhitpos.x = tx, gb.bhitpos.y = ty;
gn.notonhead = (intruder->mx != tx || intruder->my != ty);
covetousattack = mattackm(mtmp, intruder);
/* 3.7: this used to erroneously use '== 2' (M_ATTK_DEF_DIED) */
/* 5.0: this used to erroneously use '== 2' (M_ATTK_DEF_DIED) */
if (covetousattack & M_ATTK_AGR_DIED)
return MMOVE_DIED;
mmoved = MMOVE_MOVED;
+2 -2
View File
@@ -4106,9 +4106,9 @@ readobjnam_preparse(struct _readobjnam_data *d)
break;
d->gsize = 1;
} else if (!strncmpi(d->bp, "medium ", l = 7)) {
/* 3.7: in 3.6, "medium" was only used during wishing and the
/* 5.0: in 3.6, "medium" was only used during wishing and the
mid-size glob had no adjective when formatted, but as of
3.7, "medium" has become an explicit part of the name for
5.0, "medium" has become an explicit part of the name for
combined globs of at least 5 individual ones (owt >= 100)
and less than 15 (owt < 300) */
d->gsize = 2;
+1 -1
View File
@@ -3679,7 +3679,7 @@ optfn_scores(
if ((op = string_for_opt(opts, FALSE)) == empty_optstr)
return optn_err;
/* 3.7: earlier versions left old values for unspecified arguments
/* 5.0: earlier versions left old values for unspecified arguments
if player's scores:foo option only specified some of the three;
in particular, attempting to use 'scores:own' rather than
'scores:0 top/0 around/own' didn't work as intended */
+1 -1
View File
@@ -556,7 +556,7 @@ look_at_monster(
/* describe a pool location's contents; might return a static buffer so
caller should use it or copy it before calling waterbody_name() again
[3.7: moved here from mkmaze.c] */
[5.0: moved here from mkmaze.c] */
const char *
waterbody_name(coordxy x, coordxy y)
{
+1 -1
View File
@@ -582,7 +582,7 @@ dodrink(void)
* was no longer dealing with an inventory item. Unwearing
* the current potion is intended to keep it in inventory.]
*
* 3.7: switch back to relying on useup() unless the object is
* 5.0: switch back to relying on useup() unless the object is
* actually worn. Otherwise drinking a stack of unpaid potions
* one by one in a shop makes each one a separate used-up item
* for 'Ix' invent display and for itemized shop billing instead
+2 -2
View File
@@ -1505,7 +1505,7 @@ seffect_remove_curse(struct obj **sobjp)
if (scursed) {
pline_The("scroll disintegrates.");
} else {
/* 3.7: this used to use a straight
/* 5.0: this used to use a straight
for (obj = invent; obj; obj = obj->nobj) {}
traversal, but for the confused case, secondary weapon might
become cursed and be dropped, moving it from the invent chain
@@ -3212,7 +3212,7 @@ create_particular_parse(
d->which = name_to_mon(bufp, &gender_name_var);
/*
* With the introduction of male and female monster names
* in 3.7, preserve that detail.
* in 5.0, preserve that detail.
*
* If d->fem is already set to MALE or FEMALE at this juncture, it means
* one of those terms was explicitly specified.
+1 -1
View File
@@ -303,7 +303,7 @@ rumor_check(void)
DISABLE_WARNING_FORMAT_NONLITERAL
/* 3.7: augments rumors_check(); test 'engrave' or 'epitaph' or 'bogusmon' */
/* 5.0: augments rumors_check(); test 'engrave' or 'epitaph' or 'bogusmon' */
staticfn void
others_check(
const char *ftype, /* header: "{Engravings|Epitaphs|Bogus monsters}:" */
+1 -1
View File
@@ -308,7 +308,7 @@ static long floc = 0L;
/*
* historical structlevel savefile writing and reading routines follow.
* These were moved here from save.c and restore.c between 3.6.3 and 3.7.0.
* These were moved here from save.c and restore.c between 3.6.3 and 5.0.0,.
*/
staticfn int getidx(int, int);
+2 -2
View File
@@ -1525,7 +1525,7 @@ cheapest_item(int ibillct, Bill *ibill)
long gmin = ibill[0].cost;
/*
* 3.7: old version didn't determine cheapest item correctly if it
* 5.0: old version didn't determine cheapest item correctly if it
* was either the partly used or partly intact portion of a partially
* used stack. Rather than modify it to use bp_to_obj() in order to
* obtain quanities for every entry on eshkp->bill_p[], switch to
@@ -2107,7 +2107,7 @@ pay_billed_items(
} while (via_menu);
/*
* 3.7: this used to make two passes through eshkp->bill_p[],
* 5.0: this used to make two passes through eshkp->bill_p[],
* the first for used up items and the second for unpaid ones.
* Items which were partly used were processed on both passes.
*
+1 -1
View File
@@ -214,7 +214,7 @@ throne_sit_effect(void)
You_feel("somehow out of place...");
}
/* 3.7: when the random chance for removal is hit, ask for confirmation
/* 5.0: when the random chance for removal is hit, ask for confirmation
if in wizard mode, and remove the throne even if hero was teleported
away from it. [This used to remove a throne at hero's current
location if there happened to be one, so for the teleport case that
+1 -1
View File
@@ -1080,7 +1080,7 @@ domonnoise(struct monst *mtmp)
} else
switch (monsndx(ptr)) {
case PM_HOBBIT:
/* 3.7: the 'complains' message used to be given if the
/* 5.0: the 'complains' message used to be given if the
hobbit's current hit points were at 10 below max or
less, but their max is normally less than 10 so it
would almost never occur */
+1 -1
View File
@@ -961,7 +961,7 @@ fall_asleep(int how_long, boolean wakeup_msg)
if (wakeup_msg && gm.multi == how_long) {
/* caller can follow with a direct call to Hear_again() if
there's a need to override this when wakeup_msg is true */
/* 3.7: how_long is negative so wasn't actually incrementing the
/* 5.0: how_long is negative so wasn't actually incrementing the
deafness timeout when it used to be passed as-is */
incr_itimeout(&HDeaf, abs(how_long));
disp.botl = TRUE;
+3 -3
View File
@@ -5311,7 +5311,7 @@ untrap_prob(
chance = 1;
/* else chance stays 3 */
} else if (!webmaker(u.umonst->data)) {
chance = 7; /* 3.7: used to be 30 */
chance = 7; /* 5.0: used to be 30 */
}
}
if (Confusion || Hallucination)
@@ -5996,7 +5996,7 @@ untrap(
} /* end if */
if (boxcnt) {
/* 3.7: this used to allow searching for traps on multiple
/* 5.0: this used to allow searching for traps on multiple
containers on the same move and needed to keep track of
whether any had been found but not attempted to untrap;
now at most one per move may be checked and we only
@@ -6855,7 +6855,7 @@ lava_effects(void)
/* Check whether we should burn away boots *first* so we know whether to
* make the player sink into the lava. Assumption: water walking only
* comes from boots.
* (3.7: that assumption is no longer true, but having boots be the first
* (5.0: that assumption is no longer true, but having boots be the first
* thing to come into contact with lava makes sense.)
*/
if (uarmf && (uarmf->in_use
+2 -2
View File
@@ -2202,7 +2202,7 @@ steal_it(struct monst *mdef, struct attack *mattk)
if (ustealo) { /* we will be taking everything */
char heshe[20];
/* 3.7: this uses hero's base gender rather than nymph femininity
/* 5.0: this uses hero's base gender rather than nymph femininity
but was using hardcoded pronouns She/her for target monster;
switch to dynamic pronoun */
if (gender(mdef) == (int) u.mfemale
@@ -4228,7 +4228,7 @@ mhitm_ad_ston(
pline("%s seems to grimace.", Monnam(magr));
}
/*
* 3.7: New moon is no longer overridden by carrying a
* 5.0: New moon is no longer overridden by carrying a
* lizard corpse. Having the moon's impact on terrestrial
* activity be affected by carrying a dead critter felt
* silly.
+1 -1
View File
@@ -1186,7 +1186,7 @@ dump_fmtstr(
else
Strcpy(tmpbuf, "{current date+time}");
break;
case 'v': /* version, eg. "3.7.0-0" */
case 'v': /* version, eg. "5.0.0,-0" */
Sprintf(tmpbuf, "%s", version_string(verbuf, sizeof verbuf));
break;
case 'u': /* UID */
+1 -1
View File
@@ -620,7 +620,7 @@ nasty(struct monst *summoner)
for (i = rnd(tmp); i > 0 && count < MAXNASTIES; --i) {
/* Of the 44 nasties[], 10 are lawful, 14 are chaotic,
* and 20 are neutral. [These numbers are up date for
* 3.7.0; the ones in the next paragraph are not....]
* 5.0.0; the ones in the next paragraph are not....]
*
* Neutral caster, used for late-game harassment,
* has 18/42 chance to stop the inner loop on each
+1 -1
View File
@@ -224,7 +224,7 @@ worm_move(struct monst *worm)
wgrowtime[wnum] = svm.moves + rnd(5);
} else {
int mmove = mcalcmove(worm, FALSE),
/* prior to 3.7.0, next-grow increment was 3..17 but since
/* prior to 5.0.0,, next-grow increment was 3..17 but since
it got checked every 4th turn when the speed 3 worm got
to move, it was effectively 0..5; also, its usage was
'wgrowtime += incr', so often 'wgrowtime' would be
+3 -3
View File
@@ -198,7 +198,7 @@ bhitm(struct monst *mtmp, struct obj *otmp)
seemimic(mtmp);
shieldeff(mtmp->mx, mtmp->my);
pline("Boing!");
/* 3.7: used to 'break' to avoid setting learn_it here */
/* 5.0: used to 'break' to avoid setting learn_it here */
} else if (u.uswallow || rnd(20) < 10 + find_mac(mtmp)) {
if (disguised_mimic)
seemimic(mtmp);
@@ -1865,7 +1865,7 @@ poly_obj(struct obj *obj, int id)
while (otmp->otyp == SPE_POLYMORPH)
otmp->otyp = rnd_class(svb.bases[SPBOOK_CLASS], SPE_BLANK_PAPER);
/* reduce spellbook abuse; non-blank books degrade;
3.7: novels don't use spestudied so shouldn't degrade to blank
5.0: novels don't use spestudied so shouldn't degrade to blank
(but don't force spestudied to zero for them since a non-zero
value could get passed along to a future polymorph) */
if (otmp->otyp != SPE_BLANK_PAPER && otmp->otyp != SPE_NOVEL) {
@@ -4547,7 +4547,7 @@ zhitu(
}
/*
* 3.7: when fatal, this used to yield "Killed by <fltxt>." without any
* 5.0: when fatal, this used to yield "Killed by <fltxt>." without any
* information about who was responsible. Now 'buzzer' is used to try
* to supply "zapped/cast/breathed by <mon> [imitating <other_mon>]."
*
+1 -1
View File
@@ -1590,7 +1590,7 @@ do_oracles(void)
/* Read one line from input, up to and including the next newline
* character. Returns a pointer to the heap-allocated string, or a
* null pointer if no characters were read.
* 3.7: redone to use nethack's alloc() rather than libc's malloc()
* 5.0: redone to use nethack's alloc() rather than libc's malloc()
* and realloc().
*/
static char *
+1 -1
View File
@@ -195,7 +195,7 @@ main(int argc, char *argv[])
exit(EXIT_FAILURE);
sz = strlen(folderbuf);
(void) snprintf(eos(folderbuf), sizeof folderbuf - sz,
"\\AppData\\Local\\NetHack\\3.7\\");
"\\AppData\\Local\\NetHack\\5.0\\");
// initoptions_init(); // This allows OPTIONS in syscf on Windows.
set_default_prefix_locations(argv[0]);
#endif