Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2

This commit is contained in:
nhmall
2019-02-22 08:43:11 -05:00
7 changed files with 1176 additions and 1037 deletions

113
Files
View File

@@ -1,4 +1,3 @@
sh: dat/GENFILES: No such file or directory
This is a listing of all files in a full NetHack 3.6 distribution, organized
in their standard manner on a UNIX system. It indicates which files are
necessary for which versions, so that you can tell which files may be deleted
@@ -31,15 +30,15 @@ prepare-commit-msg
dat:
(files for all versions)
Arch.des Barb.des Caveman.des Healer.des Knight.des
Monk.des Priest.des Ranger.des Rogue.des Samurai.des
Tourist.des Valkyrie.des Wizard.des bigroom.des bogusmon.txt
castle.des cmdhelp data.base dungeon.def endgame.des
engrave.txt epitaph.txt gehennom.des help hh
history keyhelp knox.des license medusa.des
mines.des opthelp oracle.des oracles.txt quest.txt
rumors.fal rumors.tru sokoban.des symbols tower.des
tribute wizhelp yendor.des
Arch.des Barb.des Caveman.des GENFILES Healer.des
Knight.des Monk.des Priest.des Ranger.des Rogue.des
Samurai.des Tourist.des Valkyrie.des Wizard.des bigroom.des
bogusmon.txt castle.des cmdhelp data.base dungeon.def
endgame.des engrave.txt epitaph.txt gehennom.des help
hh history keyhelp knox.des license
medusa.des mines.des opthelp oracle.des oracles.txt
quest.txt rumors.fal rumors.tru sokoban.des symbols
tower.des tribute wizhelp yendor.des
doc:
(files for all versions)
@@ -74,16 +73,16 @@ beconf.h botl.h color.h config.h config1.h
context.h coord.h decl.h def_os2.h dgn_file.h
display.h dlb.h dungeon.h engrave.h extern.h
flag.h func_tab.h global.h hack.h integer.h
lev.h lint.h mail.h mextra.h mfndpos.h
micro.h mkroom.h monattk.h mondata.h monflag.h
monst.h monsym.h ntconf.h obj.h objclass.h
os2conf.h patchlevel.h pcconf.h permonst.h prop.h
qtext.h quest.h rect.h region.h rm.h
skills.h sp_lev.h spell.h sys.h system.h
tcap.h tileset.h timeout.h tosconf.h tradstdc.h
trampoli.h trap.h unixconf.h vision.h vmsconf.h
wceconf.h winami.h wincurs.h winprocs.h wintype.h
you.h youprop.h
isaac64.h lev.h lint.h mail.h mextra.h
mfndpos.h micro.h mkroom.h monattk.h mondata.h
monflag.h monst.h monsym.h ntconf.h obj.h
objclass.h os2conf.h patchlevel.h pcconf.h permonst.h
prop.h qtext.h quest.h rect.h region.h
rm.h skills.h sp_lev.h spell.h sys.h
system.h tcap.h tileset.h timeout.h tosconf.h
tradstdc.h trampoli.h trap.h unixconf.h vision.h
vmsconf.h wceconf.h winami.h wincurs.h winprocs.h
wintype.h you.h youprop.h
(file for tty versions)
wintty.h
@@ -99,19 +98,19 @@ bones.c botl.c cmd.c dbridge.c decl.c detect.c
dig.c display.c dlb.c do.c do_name.c do_wear.c
dog.c dogmove.c dokick.c dothrow.c drawing.c dungeon.c
eat.c end.c engrave.c exper.c explode.c extralev.c
files.c fountain.c hack.c hacklib.c invent.c light.c
lock.c mail.c makemon.c mapglyph.c mcastu.c mhitm.c
mhitu.c minion.c mklev.c mkmap.c mkmaze.c mkobj.c
mkroom.c mon.c mondata.c monmove.c monst.c mplayer.c
mthrowu.c muse.c music.c o_init.c objects.c objnam.c
options.c pager.c pickup.c pline.c polyself.c potion.c
pray.c priest.c quest.c questpgr.c read.c rect.c
region.c restore.c rip.c rnd.c role.c rumors.c
save.c shk.c shknam.c sit.c sounds.c sp_lev.c
spell.c steal.c steed.c sys.c teleport.c timeout.c
topten.c track.c trap.c u_init.c uhitm.c vault.c
version.c vision.c weapon.c were.c wield.c windows.c
wizard.c worm.c worn.c write.c zap.c
files.c fountain.c hack.c hacklib.c invent.c isaac64.c
light.c lock.c mail.c makemon.c mapglyph.c mcastu.c
mhitm.c mhitu.c minion.c mklev.c mkmap.c mkmaze.c
mkobj.c mkroom.c mon.c mondata.c monmove.c monst.c
mplayer.c mthrowu.c muse.c music.c o_init.c objects.c
objnam.c options.c pager.c pickup.c pline.c polyself.c
potion.c pray.c priest.c quest.c questpgr.c read.c
rect.c region.c restore.c rip.c rnd.c role.c
rumors.c save.c shk.c shknam.c sit.c sounds.c
sp_lev.c spell.c steal.c steed.c sys.c teleport.c
timeout.c topten.c track.c trap.c u_init.c uhitm.c
vault.c version.c vision.c weapon.c were.c wield.c
windows.c wizard.c worm.c worn.c write.c zap.c
sys/amiga:
(files for Amiga versions - untested for 3.6.2)
@@ -394,6 +393,54 @@ tiles.vcxproj uudecode.vcxproj
This is a list of files produced by auxiliary programs. They can all be
regenerated from the files in the distribution.
dat:
(file generated by dgn_comp at playground creation time)
dungeon
(files generated by lev_comp at playground creation time)
Arc-fila.lev Arc-filb.lev Arc-goal.lev Arc-loca.lev Arc-strt.lev
Bar-fila.lev Bar-filb.lev Bar-goal.lev Bar-loca.lev Bar-strt.lev
Cav-fila.lev Cav-filb.lev Cav-goal.lev Cav-loca.lev Cav-strt.lev
Hea-fila.lev Hea-filb.lev Hea-goal.lev Hea-loca.lev Hea-strt.lev
Kni-fila.lev Kni-filb.lev Kni-goal.lev Kni-loca.lev Kni-strt.lev
Mon-fila.lev Mon-filb.lev Mon-goal.lev Mon-loca.lev Mon-strt.lev
Pri-fila.lev Pri-filb.lev Pri-goal.lev Pri-loca.lev Pri-strt.lev
Ran-fila.lev Ran-filb.lev Ran-goal.lev Ran-loca.lev Ran-strt.lev
Rog-fila.lev Rog-filb.lev Rog-goal.lev Rog-loca.lev Rog-strt.lev
Sam-fila.lev Sam-filb.lev Sam-goal.lev Sam-loca.lev Sam-strt.lev
Tou-fila.lev Tou-filb.lev Tou-goal.lev Tou-loca.lev Tou-strt.lev
Val-fila.lev Val-filb.lev Val-goal.lev Val-loca.lev Val-strt.lev
Wiz-fila.lev Wiz-filb.lev Wiz-goal.lev Wiz-loca.lev Wiz-strt.lev
air.lev asmodeus.lev astral.lev baalz.lev bigrm-1.lev
bigrm-2.lev bigrm-3.lev bigrm-4.lev bigrm-5.lev bigrm-6.lev
bigrm-7.lev bigrm-8.lev bigrm-9.lev bigrm-10.lev castle.lev
earth.lev fakewiz1.lev fakewiz2.lev fire.lev juiblex.lev
knox.lev medusa-1.lev medusa-2.lev medusa-3.lev medusa-4.lev
minefill.lev minend-1.lev minend-2.lev minend-3.lev minetn-1.lev
minetn-2.lev minetn-3.lev minetn-4.lev minetn-5.lev minetn-6.lev
minetn-7.lev oracle.lev orcus.lev sanctum.lev soko1-1.lev
soko1-2.lev soko2-1.lev soko2-2.lev soko3-1.lev soko3-2.lev
soko4-1.lev soko4-2.lev tower1.lev tower2.lev tower3.lev
valley.lev water.lev wizard1.lev wizard2.lev wizard3.lev
(files generated by makedefs at playground creation time)
data dungeon.pdf options oracles quest.dat rumors
(files generated for Qt interface on Mac OS X)
Info.plist nethack.icns
(files generated for win32 at compile time)
dlb.lst porthelp
(files generated for win32 gui at compile time)
guioptions
(files generated for win32 tty at compile time)
ttyoptions
(tile files optionally generated for X ports at playground creation time)
pet_mark.xbm rip.xpm x11tiles
Arc-fila.lev Arc-filb.lev Arc-goal.lev Arc-loca.lev Arc-strt.lev
Bar-fila.lev Bar-filb.lev Bar-goal.lev Bar-loca.lev Bar-strt.lev
Cav-fila.lev Cav-filb.lev Cav-goal.lev Cav-loca.lev Cav-strt.lev

1
dat/.gitattributes vendored
View File

@@ -4,5 +4,6 @@
data.base NHSUBST
symbols NHSUBST
tribute NHSUBST
GENFILES NHSUBST
* NH_filestag=(file%s_for_all_versions)
..files NH_filegenprog

View File

@@ -1,4 +1,7 @@
#!/usr/bin/perl
# NetHack 3.6 GENFILES $NHDT-Date: 1550799147 2019/02/22 01:32:27 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.0 $
# Copyright (c) 2018 by Kenneth Lorber
# NetHack may be freely redistributed. See license for details.
# 2 sections:
# *.lev entries are generated by reading *.des

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.259 $ $NHDT-Date: 1550629490 2019/02/20 02:24:50 $
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.261 $ $NHDT-Date: 1550800390 2019/02/22 01:53:10 $
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,
@@ -373,6 +373,13 @@ when donning armor, defer flagging its +/- value--which can be deduced from
then (player might still deduce the +/- value but hero won't learn it)
a monster with resistances supplied by worn armor would lose them if that
monster went through a shape change even if the armor stayed worn
after using 'f' to fire/throw with autoquiver enabled and numpad off, then
using ^A to repeat, if ammo was just used up and there's nothing
suitable to autoquiver it would pick the item in the inventory slot
corresponding to the direction letter from preceding 'fire' (and if
there was such an item, then ask for direction since ^A data ran out)
early rolling boulder trap lacking any boulder might still have the corpse
of a dead adventurer
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 dothrow.c $NHDT-Date: 1545597420 2018/12/23 20:37:00 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.155 $ */
/* NetHack 3.6 dothrow.c $NHDT-Date: 1550784489 2019/02/21 21:28:09 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.157 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
@@ -384,6 +384,8 @@ dofire()
/* if autoquiver is disabled or has failed, prompt for missile;
fill quiver with it if it's not wielded */
if (!obj) {
/* direction of previous throw is not suitable answer here */
in_doagain = FALSE;
obj = getobj(uslinging() ? bullets : toss_objs, "throw");
/* Q command doesn't allow gold in quiver */
if (obj && !obj->owornmask && obj->oclass != COIN_CLASS)
@@ -727,12 +729,11 @@ int x, y;
}
/* FIXME:
* Each trap should really trigger on the recoil if
* it would trigger during normal movement. However,
* not all the possible side-effects of this are
* tested [as of 3.4.0] so we trigger those that
* we have tested, and offer a message for the
* ones that we have not yet tested.
* Each trap should really trigger on the recoil if it would
* trigger during normal movement. However, not all the possible
* side-effects of this are tested [as of 3.4.0] so we trigger
* those that we have tested, and offer a message for the ones
* that we have not yet tested.
*/
if ((ttmp = t_at(x, y)) != 0) {
if (stopping_short) {
@@ -1037,7 +1038,7 @@ boolean hitsroof;
} else if (petrifier && !Stone_resistance
&& !(poly_when_stoned(youmonst.data)
&& polymon(PM_STONE_GOLEM))) {
petrify:
petrify:
killer.format = KILLED_BY;
Strcpy(killer.name, "elementary physics"); /* "what goes up..." */
You("turn to stone.");
@@ -1104,9 +1105,9 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
if ((obj->cursed || obj->greased) && (u.dx || u.dy) && !rn2(7)) {
boolean slipok = TRUE;
if (ammo_and_launcher(obj, uwep))
if (ammo_and_launcher(obj, uwep)) {
pline("%s!", Tobjnam(obj, "misfire"));
else {
} else {
/* only slip if it's greased or meant to be thrown */
if (obj->greased || throwing_weapon(obj))
/* BUG: this message is grammatically incorrect if obj has
@@ -1150,7 +1151,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
if (u.dz < 0
/* Mjollnir must we wielded to be thrown--caller verifies this;
aklys must we wielded as primary to return when thrown */
&& ((Role_if(PM_VALKYRIE) && obj->oartifact == ART_MJOLLNIR) || tethered_weapon)
&& ((Role_if(PM_VALKYRIE) && obj->oartifact == ART_MJOLLNIR)
|| tethered_weapon)
&& !impaired) {
pline("%s the %s and returns to your hand!", Tobjnam(obj, "hit"),
ceiling(u.ux, u.uy));
@@ -1190,8 +1192,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
}
} else {
/* crossbow range is independent of strength */
crossbowing =
(ammo_and_launcher(obj, uwep) && weapon_type(uwep) == P_CROSSBOW);
crossbowing = (ammo_and_launcher(obj, uwep)
&& weapon_type(uwep) == P_CROSSBOW);
urange = (crossbowing ? 18 : (int) ACURRSTR) / 2;
/* balls are easy to throw or at least roll;
* also, this insures the maximum range of a ball is greater
@@ -1360,7 +1362,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
thrownobj = (struct obj *) 0;
return;
} else {
if (tethered_weapon) tmp_at(DISP_END, 0);
if (tethered_weapon)
tmp_at(DISP_END, 0);
/* when this location is stepped on, the weapon will be
auto-picked up due to 'obj->was_thrown' of 1;
addinv() prevents thrown Mjollnir from being placed
@@ -1425,8 +1428,7 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
}
}
/* an object may hit a monster; various factors adjust the chance of hitting
*/
/* an object may hit a monster; various factors adjust chance of hitting */
int
omon_adj(mon, obj, mon_notices)
struct monst *mon;
@@ -1525,7 +1527,7 @@ register struct obj *obj; /* thrownobj or kickedobj or uwep */
* No bonuses for fleeing or stunned targets (they don't dodge
* melee blows as readily, but dodging arrows is hard anyway).
* Not affected by traps, etc.
* Certain items which don't in themselves do damage ignore tmp.
* Certain items which don't in themselves do damage ignore 'tmp'.
* Distance and monster size affect chance to hit.
*/
tmp = -1 + Luck + find_mac(mon) + u.uhitinc
@@ -1848,7 +1850,7 @@ register struct obj *obj;
(void) mpickobj(mon, obj); /* may merge and free obj */
ret = 1;
nopick:
nopick:
if (!Blind)
pline1(buf);
if (!tele_restrict(mon))

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 mklev.c $NHDT-Date: 1511681724 2017/11/26 07:35:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.47 $ */
/* NetHack 3.6 mklev.c $NHDT-Date: 1550800390 2019/02/22 01:53:10 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.59 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Alex Smith, 2017. */
/* NetHack may be freely redistributed. See license for details. */
@@ -89,7 +89,7 @@ xchar xl, yl, xh, yh;
/* cannot find something reasonable -- strange */
x = xl;
y = yh;
gotit:
gotit:
cc->x = x;
cc->y = y;
return;
@@ -99,11 +99,12 @@ void
sort_rooms()
{
#if defined(SYSV) || defined(DGUX)
qsort((genericptr_t) rooms, (unsigned) nroom, sizeof(struct mkroom),
do_comp);
#define CAST_nroom (unsigned) nroom
#else
qsort((genericptr_t) rooms, nroom, sizeof(struct mkroom), do_comp);
#define CAST_nroom nroom /*as-is*/
#endif
qsort((genericptr_t) rooms, CAST_nroom, sizeof (struct mkroom), do_comp);
#undef CAST_nroom
}
STATIC_OVL void
@@ -728,11 +729,12 @@ makelevel()
/* make a secret treasure vault, not connected to the rest */
if (do_vault()) {
xchar w, h;
debugpline0("trying to make a vault...");
w = 1;
h = 1;
if (check_room(&vault_x, &w, &vault_y, &h, TRUE)) {
fill_vault:
fill_vault:
add_room(vault_x, vault_y, vault_x + w, vault_y + h, TRUE, VAULT,
FALSE);
level.flags.has_vault = 1;
@@ -785,7 +787,7 @@ makelevel()
mkroom(COCKNEST);
}
skip0:
skip0:
/* Place multi-dungeon branch. */
place_branch(branchp, 0, 0);
@@ -848,6 +850,7 @@ skip0:
if (!rn2(27 + 3 * abs(depth(&u.uz)))) {
char buf[BUFSZ];
const char *mesg = random_engraving(buf);
if (mesg) {
do {
x = somex(croom);
@@ -859,7 +862,7 @@ skip0:
}
}
skip_nonrogue:
skip_nonrogue:
if (!rn2(3)) {
(void) mkobj_at(0, somex(croom), somey(croom), TRUE);
tryct = 0;
@@ -1259,6 +1262,7 @@ struct mkroom *croom;
coord *tm;
{
register int kind;
struct trap *t;
unsigned lvl = level_difficulty();
coord m;
@@ -1367,7 +1371,11 @@ coord *tm;
|| (avoid_boulder && sobj_at(BOULDER, m.x, m.y)));
}
(void) maketrap(m.x, m.y, kind);
t = maketrap(m.x, m.y, kind);
/* we should always get type of trap we're asking for (occupied() test
should prevent cases where that might not happen) but be paranoid */
kind = t ? t->ttyp : NO_TRAP;
if (kind == WEB)
(void) makemon(&mons[PM_GIANT_SPIDER], m.x, m.y, NO_MM_FLAGS);
@@ -1392,8 +1400,13 @@ coord *tm;
lethal, and tend not to generate on shallower levels anyway.
Finally, pits are excluded because it's weird to see an item
in a pit and yet not be able to identify that the pit is there. */
if (lvl <= (unsigned) rnd(4)
if (kind != NO_TRAP && lvl <= (unsigned) rnd(4)
&& kind != SQKY_BOARD && kind != RUST_TRAP
/* rolling bounder trap might not have a boulder if there was no
viable path (such as when placed in the corner of a room), in
which case tx,ty==launch.x,y; no boulder => no dead predecessor */
&& !(kind == ROLLING_BOULDER_TRAP
&& t->launch.x == t->tx && t->launch.y == t->ty)
&& !is_pit(kind) && kind < HOLE) {
/* Object generated by the trap; initially NULL, stays NULL if
we fail to generate an object or if the trap doesn't