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

This commit is contained in:
nhmall
2018-09-21 16:40:28 -04:00
23 changed files with 908 additions and 46 deletions

View File

@@ -4089,6 +4089,13 @@ acolyte
there may well be wonderful universes above us where reason is
utterly unreasonable?"
[ The Innocence of Father Brown, by G.K. Chesterton ]
paddle cactus
Opuntia, commonly called prickly pear, is a genus in the cactus
family, Cactaceae. Prickly pears are also known as tuna (fruit),
sabra, nopal (paddle, plural nopales) from the Nahuatl word
nopalli for the pads, or nostle, from the Nahuatl word nochtli
for the fruit; or paddle cactus.
[ Wikipedia, the free encyclopedia ]
prisoner
Where am I?
In the Village.
@@ -4355,6 +4362,29 @@ rogue
conceal it; and therein am I constant to my profession.
[ Autolycus the Rogue, from The Winter's Tale by
William Shakespeare ]
root
dwarven root
But when they were cooked these roots proved good to eat,
somewhat like bread; and the outlaws were glad of them, for
they had long lacked bread save when they could steal it.
"Wild Elves know them not; Grey-elves have not found them;
the proud ones from over the Sea are too proud to delve,"
said Mim.
"What is their name?" said Turin. Mim looked at him sidelong.
"They have no name, save in the Dwarf-tongue, which we do not
teach," he said. "And we not teach Men to find them, for Men
are greedy and thriftless, and would not spare till all the
plants had perished; whereas now they pass them by as they go
blundering in the wild. No more will you learn of me; but you
may have enough of my bounty, as long as you speak fair and
do not spy or steal." Then again he laughed in his throat.
"They are of great worth." he said. "More than gold in the
hungry winter, for they may be hoarded like the nuts of a
squirrel, and already we were building our store from the
first that are ripe."
[ Unfinished Tales, Part 1, by J.R.R. Tolkien ]
roshi
Roshi is a Japanese word, common in Zen Buddhism, meaning "old"
(ro) and "teacher" (shi). Roshi can be used as a term of

70
doc/fixes10.0 Normal file
View File

@@ -0,0 +1,70 @@
New Features:
====================
New character classes (Ken Arromdee)
New weapons code (Ken Arromdee)
Armor weights implemented (Ken Arromdee)
New tools code (Ken Arromdee)
Polymorph self code (Ken Arromdee)
additional bug fixes (Ken Arromdee)
added new character classes and traps (M. Stephenson)
added the Throne Room (M. Stephenson)
Rockmole & Keystone Kops code (Scott R. Turner)
Squeeky Board & Magic traps (Scott R. Turner)
Fountain code (Scott R. Turner)
Magic Marker code (Gil Neiger)
Fountain code enhancements (Gil Neiger)
Enhancements to dozens of routines (Gil Neiger)
more bug fixes in hack.zap.c
#dip mods to fountain code (Eric Backus)
added spellbooks and spellcasting (M. Stephenson)
implemented code for praying (M. Stephenson)
made some enhancements to the endgame (M. Stephenson)
Some of the old code (eg. KOPS) has been enhanced to allow for more
functionality
Kops now throw cream pies (thank/blame KAA for the suggestion)
The wizard may not stay dead!!!
There are a couple of new types of demons.
Demons may not be aggressive.
There are lots more of these little gems, with sufficient hints in
various fortune cookies to give away enough clues.
Build from source changes
=========================
The program "makedefs" has been modified in order to allow limited use of
"#ifdef/#else/#endif" sets in objects.h
Makedefs will only generate one #define for any number of ocurrences of
a given object name string. In addition, "makedefs" also generates
alternate defines for "DEAD_xxxxx" in those cases where a monster
has been given an alternate identity.
Makedefs has been modified in order that it may be used to
initialize the following variable def files:
objects.h -o option, see above.
trap.h -t option, trap type defines.
date.h -d option, date string.
data -D option, optional monster names.
rumors -r option, optional rumor addition.
The Unix "Makefile" has been enhanced to make installation cleaner
and also to allow "initialization" of the play directories (WARNING:
this will destroy old score files!!!). The PC Makefile hasn't been
upgraded in this respect
Known Problems:
=================
The WALKIES code is really crude. Fido get's mnexto()'d you when
he gets out of the effective leash range. I haven't yet been able
to integrate leashed movement into dogmove(). You might just want
to comment out the #define in config.h
ROCKMOLES have some problems with screen updating. I didn't make
any changes to the code I received, and have noticed some distinct
problems with walls not being set to "door" until the rockmole
moves off the cell
There are some problems in the item selection code, the usual effect
of which is to leave the cursor sitting at some arbitrary point on
the screen instead of returning it to the upper left hand corner or
onto the "@". This doesn't affect the screen updating, so I have
ignored it up to now
REDO may not be completely implemented. I am still working on it
here but would appreciate any help anyone out there might want to give

76
doc/fixes14.f Normal file
View File

@@ -0,0 +1,76 @@
NetHack Fixes List Revision 1.4
dogmove.c: Death code fixed so dog with <1 hp doesn't "die of hunger".
Slack leash message not invoked unless leash attached.
Added "DOGNAME" option (thanks to Roland McGrath).
u_init.c: Priest(esse)s start off with their weapon blessed.
spell.c: Allows high level characters to cast spells upon themselves
zap.c: (such as polymorph).
pray.c: allows for de-cursing worn rings as well as weapons.
Knights, Priests and Priestesses can now "#turn" undead
(UNDEAD = "VWZ &").
fixed bugs in blessings bestowed by gods.
read.c: SPE_CAUSE_FEAR does not give a "You hear..." message unless no
monsters are nearby.
fix to bug in "do_genocide" which allowed player to wipe out
all '@'s and survive.
polyself.c: fix to rehumanize to catch players who wipe out '@'s while
in polymorphed form as they de-polymorph.
wield.c: bug causing segmentation fault on "w-" followed by "w[weapon]"
fixed by chuq@sun
trap.c: similar null pointer problem corrected.
make.exe.uu: correction of names at top of uuencoded files which caused the
nansi.sys.uu: original files to be overwritten by the decoded files when
uudecode was invoked. (found by len@elxsi).
nethack.6: general beautification and appropriate acknowledgement of
trademarks to avoid getting sued. :-) (thanks chuq)
help: addition of "V" and "#" commands to help text.
invent.c: fix to REDO bug inhibiting the appearance of the item usage
prompt.
makedefs.c: added "{", "\" and corrected Rockmole definition in "data".
fixed things for Dos users (file open modes, etc.)
cmd.c: added #[command] auto-substitution.
termcap.c: fixed termlib / curses dependencies.
fixed null padding bug on output of SO/SE/HI/HE.
pcmain.c: many fixes by Ralf Brown (ralf@b.gp.cs.cmu.edu) to allow the
pcunix.c: program to be compiled using the Turbo C compiler in a Dos
Makefile.tcc: enviornment.
engrave.c: engravings burned or engraved into the floor (as opposed to
those made with finger or marker) can be felt out when blind.
(inspired by Stefan Wrammerfors).
mon.c: fixed "monster looked at a strange trap" bug for 16 bit
machines (long vs. int problem reported by mike@cimcor).
fight.c: hitmm() fixed to return 0 (no hit) if either monster passed
in is non-existant. This fixes a number of null reference
problems (ex. monmove.c[~360]).
Misc zero reference errors fixed by Paul Eggert. eggert@grand
Makefile.xenix: New version (that works) supplied by Greg Laskin greg@smash
fountain.c: Misc zero reference errors fixed by Paul Eggert. eggert@grand
search.c:
options.c: New options added for GRAPHICS, DOGNAME, and new routine
added to allow easier sorting of string parameters (":,"
are considered to be string terminators for copying in
name, and dogname).

214
doc/fixes23.e Normal file
View File

@@ -0,0 +1,214 @@
NetHack Fixes List Revision 2.3e
New Files:
Fixes.2.3 This file.
Makefile.3B2 A new Makefile for the ATT 3B2.
Spoilers.mm As above - pre nroff -mm
food.tbl Tables for above manual
fount.tbl
monster.tbl
weapon.tbl
nansi.doc Documentation for nansi.sys.
hh Fixed improper def of "X" for casting spells.
fight.c Dogname fix for "you hit your dog" line. (Janet Walz)
pri.c Patch for "SCORE_ON_BOTL". (Gary Erickson)
config.h
pray.c Null refrence bug fix for Suns. (The Unknown Hacker)
termcap.c null pointer bug fix. (Michael Grenier)
mon.c chameleon shape made dependent on current lev. (RPH)
spell.c
monmove.c
rnd.c fixed SYSV/BSD problems with random(). (many sources)
config.h
shk.c fix to allow compilation with or without HARD option.
(reported by The Unknown Hacker)
termcap.c ospeed fix for SYSV. (reported by Eric Rapin)
unixunix.c fix for NFS sharing of playground. (Paul Meyer)
options.c many misc. bugs while compiling for the PC. (Tom Almy)
pcmain.c
pctty.c
hack.h
nethack.cnf
pager.c
fight.c
mkroom.h Addition of reorganized special-room code.
mkshop.c (Eric S. Raymond)
mklev.c
rnd.c
trap.c Fixed teleport to hell problems caused by rnz().
(reported by Janet Walz)
termcap.c Various fixes to MSDOSCOLOR code. (Tom Almy)
end.c
hack.c Fixed typos. (Steve Creps)
msdos.c
pcmain.c
config.h Enabled the use of termcap file c:\etc\termcap or
termcap.c .\termcap.cnf for MS Dos (Steve Creps)
eat.c Continued implementation of Soldier code.
makedefs.c Added Barracks code. (Steve Creps)
makemon.c
mklev.c
mkroom.h
objects.h
mkshop.c
mon.c
monst.c
permonst.h
makedefs.c Added Landmines code. (Steve Creps)
mklev.c
trap.c
mkroom.h Fixed item / shop probablility code. (Stefan Wrammerfors)
shknam.c Added additional item typ available.
pray.c Randomized time between prayers. (Stefan Wrammerfors)
fight.c Fixed typo. (Stefan Wrammerfors)
mhitu.c Fixed monster special abilities usage bug.
(Stefan Wrammerfors)
objnam.c Randomized max number and max bonus limits on objects
wished for.
Identified cursed items shown as such. (Stefan Wrammerfors)
topten.c Added logfile to allow overall game tuning for balance.
config.h (Stefan Wrammerfors)
mklev.c moved code identifying medusa & wizard levs to eliminate
*main.c garbage on screen. (Izchak Miller)
u_init.c fixed up luck wraparound bug (Izchak Miller)
hack.c
dothrow.c
fight.c
mon.c
play.c
save.c
sit.c
mon.c fixed null referenced pointer bug. (The Unknown Hacker)
config.h Hawaiian shirt code by Steve Linhart
decl.c
do_wear.c
extern.h
invent.c
mhitu.c
obj.h
objects.h
objnam.c
polyself.c
read.c
steal.c
u_init.c
worn.c
config.h "THEOLOGY" code addition (The Unknown Hacker)
pray.c
mklev.c Added typecasts to fix object generation bug on Microport
fountain.c Sys V/AT. (Jerry Lahti)
Makefile.unix Added ${CFLAGS} to makedefs build line. (Jerry Lahti)
Makefile.att
Makefile.3B2
pager.c Inventory fix for "things that are here". (Steve Creps)
cmd.c More wizard debugging tools:
^F = level map
^E = find doors & traps (Steve Creps)
apply.c Blindfolded set/unset to "INTRINSIC" (many sources)
lev.c new restmonchn() code. (Tom May)
save.c
o_init.c OS independance in init_objects (Tom May)
objclass.h (removal of oc_descr_i)
shk.c declaration of typename() (Tom May)
apply.c declaration of lmonnam() (Tom May)
mklev.c fixes to make medusa and wizard levels dependent on MAXLEVEL
(Richard Hughey as pointed out to him by John Sin)
fountain.c added "coins in fountain" code. (Chris Woodbury)
objects.h bound gem color to type (Janet Walz)
o_init.c
spell.c spell list now displayed in the corner (Bruce Mewborne)
apply.c multiple dragon types. (Bruce Mewborne)
cmd.c wand of lightning.
do.c ring of shock resistance.
do_name.c giant eel replaced by electric eel.
end.c "STOOGES" - three stooges code.
engrave.c Named dagger/short sword "Sting".
fight.c Lamps & Magic Lamps.
makemon.c A Badge - identifies you as a Kop.
config.h ^X option for wizard mode - gives current abilities.
mhitu.c New monster djinni '&' for Magic lamps.
mklev.c #rub command for lamps.
mkobj.c New monster: Gremlin 'G' augments Gnome on lower levels.
mon.c major modifications to buzz() code cleans it up.
monmove.c
monst.c objnam.c polyself.c potion.c
pri.c rip.c shk.c sit.c
u_init.c wizard.c zap.c makedefs.c
monst.h obj.h objects.h permonst.h
you.h *main.c *unix.c
rnd.c fixed portability bug for 16 bit machines (Paul Eggert)
mhitu.c fixed many lint flagged bugs (Izchak Miller)
apply.c
fight.c mklev.c mkmaze.c mkshop.c
monmove.c shknam.c trap.c wizard.c
zap.c shk.c do_name.c invent.c
unixtty.c pctty.c unixmain.c pcmain.c
do.c options.c termcap.c makemon.c
spell.c
termcap.c major rewrite *** NOTE: Untested by MRS *** (Kevin Sweet)
do_name.c reversed quantity check for "n blessed +xx items"
(Roland McGrath)
config.h Added Kitchen Sink code (Janet Walz)
rm.h
decl.c do.c hack.c invent.c
makedefs.c mklev.c options.c pager.c
prisym.c wizard.c zap.c
end.c Fixed "killed by" bugs in endgame code. (Steve Creps)
objects.h Changed weight of a leash to a reasonable value. (Janet Walz)

49
doc/fixes30.pl01 Normal file
View File

@@ -0,0 +1,49 @@
As things have mostly settled down to rediscoveries of fixed bugs,
it is time to distribute the first batch of patches and ports.
NOTICE: The diffs comprising this update batch were cut on NetHack 3.0
release version. If you modified any of your files, store them
and replace with release version files before applying this kit.
Changes made:
Eric Smith provided a port to the Atari using gcc; the older Lattice C
vestiges moved to different preprocessor options and remain untested.
Ralf Brown adapted NetHack to the Andrew File System.
The fruit naming code was enclosed in a new option, TUTTI_FRUTTI, which
allows another 3K of object code to be defined out.
Various tweaks, rewritings, and reshufflings to get the code to get along
with various compilers and preprocessors, including Microport SysV/AT 2.4,
Gould UTX/32, HP-UX, and of course Turbo C.
Various suggested changes in behavior, none major.
Distribution of termcap.uu, the uuencoded termcap.arc for PCs that was
previously distributed with NetHack 2.2 and 2.3.
Explicit instructions to short-circuit common installation mistakes.
Bug fixes:
Various segmentation faults no longer exist, including the popular dropping
items in shops.
Vortices can no longer disappear through solid walls when they disgorge you
over a moat.
You now get credit for food when engulfing monsters.
A few more spelling errors that fell through the cracks.
Suggestion for overflowing compiler tables: follow the SysV-AT trail in the
src Makefile with -DDUMB and DUMB.Setup. It appears that many SVR2 3Bs will
need to do this.

80
doc/fixes30.pl02 Normal file
View File

@@ -0,0 +1,80 @@
--------------
UPDATE2
--------------
This patch kit upgrades NetHack to version 3.0f. The kit should
be applied to the original release, patched with patchlevel 1.
Many of the diffs included here are bugfixes to bugs reported to
us by players. We are very grateful for these reports.
There were questions about our netnews usage. We use the good
offices of comp.sources.games because, unlike rec.games.hack, it
is archived. It is the only way to secure the availability of
the source code and the official patches for future users. For
this reason, comp.sources.games will remain the only place where
the official NetHack patches are posted.
Occasionally we may see a need to post a semi-official stopgap patch
such as the one for the 'killer' bug posted just after Patch 1 in
rec.games.hack and in comp.sources.games.bugs. These stopgap patches
will always be included in the next official patch kit. The 'killer'
bugfix is, indeed, included here.
The above two newsgroups often contain many bug reports and unofficial
fixes. We read these groups, and thus we get the reports. But it
will be helpful if you mailed nethack-bugs a copy of your posting.
If your site gets these newsgroups, you may want to check them for
mentions of bugs before reporting the same bug to nethack-bugs (or
to the same newsgroups, for that matter -- unless you have additional
information).
Now, on to the main changes.
Objects were rearranged slightly, so the cautious may want to throw
out saved games and bones files.
Timo Hakulinen provided an OS/2 port.
Various people convinced various OS versions to be better about
sensing the available screen size at start-up.
The game tries now to be smarter about guessing defaults for players
who don't set environment variables of interest to NetHack.
Eric Raymond extended the PC color code slightly to allow its use by
SVR3.2 machines with color information from terminfo, and also allowed
many extended commands to be available via a meta key under SYSV.
Paul Gyugyi provided a better makefile for MicroSoft C.
The MSDOS terminal problems, including always needing TERMLIB, are
(hopefully) fixed.
The '/' command now allows multiple identifications, and more things
may be usefully identified.
More code was shuffled and rewritten to satisfy compiler and preprocessor
constraints.
Starving dogs again eat people food.
Credit cards can no longer lock things.
Doors have been toned down slightly, but are in no danger of being removed.
The gods' ranking of player troubles was revised.
Wizards can no longer start with certain useless items.
Various code, including game ending, seduction, and monster attack, is
considerably cleaner.
Above all: scores of bugs were fixed.
Please continue testing the game and reporting to nethack-bugs. Your
response has been wonderful, and it has made this effort worth while.

36
doc/fixes30.pl03 Normal file
View File

@@ -0,0 +1,36 @@
Date: Thu, 7 Sep 89 09:38:37 EDT
From: Izchak Miller <izchak@linc.cis.upenn.edu>
The main changes included in patch kit 3 are as follows:
A few new objects were added to objects.c, so old save/bones files
should be thrown out.
Prototypes were adapted to satisfy ANSI C. Hopefully, we will not see
anymore postings which helpfully fix prototypes for ANSI, while breaking
them for the MSDOS compilers they were, originally, set up for.
Use of $(MAKE), and a better use of $PAGER, in scripts.
Improvements to OS/2 and TOS code, including their Makefiles.
Graphics setting was centralized.
Alignment was added to artifacts, and their suitability was improved.
Discover mode games no longer use up bones files.
Some excess 'register's that were giving Xenix trouble were removed.
We settled an (amusing) argument over "rights" to available bits which
was responsible (unintentionally) for ring-wielding bestowing
long-lasting intrinsic attributes.
In addition, many bugs were fixed. Among those were the problems
with polymorphing creatures that swallowed you, finishing with
containers, having chains eaten, external pagers, statue weights, wishing
loopholes, parsing endgame options, and monsters growing up.
In other words, this is a nuts and bolts patch, nothing dramatic but
lots of cleanup.

38
doc/fixes30.pl04 Normal file
View File

@@ -0,0 +1,38 @@
-------------
UPDATE4
-------------
NOTICE: The changes which were made in the code make all save and bones
files absolete. Once Patch 4 is applied, all the old save and bones files
must be thrown out.
Here is a list of the main changes:
Object and monster types got a new field specifying their color, so things
can now appear in "living color" instead having one color for all monsters,
one for all weapons, and so on.
References to monsters and objects on the floor were moved to new structures,
which support the better color handling as well as provide yet faster access.
David Gentzel provided a port for VMS. Although extensively tested by
David and others, and found to be sound, it probably needs further
refinements. We are appealing to those of you who know VMS (none of us
does..) to join David in his efforts to refine the VMS code.
Much of the *main.c code was moved to a new file, to avoid having to update
that common code in three different *main.c files.
VARARG handling was ifdef'd to satisfy ANSI compilers.
Almost all grey creatures now join the other gray creatures.
Monsters will no longer be created in the same room as the player, and should
no longer want to end up in the SE corner of the dungeon.
Lycanthropy is now considered a "major problem" (allowing for appeal to the
gods through prayer), some artifacts are associated with particular character
classes, various oddities involving statues, digging, iron balls, and
throwing have been removed, and many other bugs, both major and minor, were
fixed.

46
doc/fixes30.pl05 Normal file
View File

@@ -0,0 +1,46 @@
Old bones and save files should at least be syntactically correct this time,
but you should still throw them out if you don't want to be confronted with
monsters permanently masquerading as different monsters (since some of the
monsters' letters have changed).
Note that the posted shop fix was a stopgap patch, not an official patch, so
it should be reversed before applying these patches. If you do not reverse
it, probably nothing worse than a failure of one shk.c band will happen this
time. In general, however, you will have to do considerable hand-patching if
you leave intermediate patches in.
The major bug fix in Patch 5 is moving the color definitions to color.h, thus
breaking the annoying dependency loop when bootstrapping NetHack.
Patch 5 contains Johnny Lee's provision of a port to the Macintosh. The
Macintosh files live in a new subdirectory, 'mac'. We know that many of you
were waiting for a Mac port, and for you we are happy to have it.
Basic support for several new other compilers or machines (see README), but
these probably need some more tweaking.
A major new feature in Patch 5 is timed-out eating, i.e., being able to be
interrupted while eating by monsters attack. Mike Stephenson provided the
basic structure for dealing with partially eaten food. We believe that the
only remaining flaws in this code are occasional non-optimal messages which
are generated by it (we are working on correcting this).
Incorrect iron ball behavior and bugs in the iron ball code were
systematically corrected by Kevin Darcy who communicated with us about it
and mailed us his patches. (Yes, Kevin, as you can see, it went in, and
with only one minor change.)
There were other, smaller, patches which were mailed to us and which were
implemented. To repeat: we are very happy to receive bug-fixing patches
and code-enhancement patches. But please do as Kevin did, namely, tell us
about it in advance.
Difficulties with dropping objects in shops, burning to death in hell,
wielding amulets, pets eating corpses were fixed. So were scores of other
small but annoying bugs.
MICROPORT_BUG was added to cater to compilers that don't like large
structures.

38
doc/fixes30.pl06 Normal file
View File

@@ -0,0 +1,38 @@
This patch contains two major improvements:
First, thanks to Ari Huttunen, different door states show up as different
(configurable) characters on the screen.
Second, doors can now be entered/exited diagonally both for player and
monster.
Third, a gaggle of people credited in the appropriate files developed an
overlay manager for MS-DOS and MSC such that all the options of NetHack can
be supported. See Install.dos and ovlmgr.* for further details.
In more minor news:
You no longer have to pick up food to eat it, and you no longer necessarily
resume eating your interrupted meal.
You can no longer get properties from wielding a non-weapon.
There is a new option, CLIPPING, which allows playing on small screens or
windows.
The multiple demon types portion of HARD has been split off into the new
INFERNO option.
The Macintosh port has been further refined.
The / command now takes configurable characters into account when identifying
items.
Leprechauns and lichs and nymphs and nagas had their letters switched so that
the more formidable monsters get capital letters. Several new low-level
monsters were added.
Drawbridge interactions are much smarter, thanks to Kevin Darcy.
And a large number of minor bug fixes and efficiency enhancements.

35
doc/fixes30.pl07 Normal file
View File

@@ -0,0 +1,35 @@
Sorry this one took so long. We think just about every computer and network
we depend on has broken sometime in last few weeks.
Work on the PC overlay mechanism continues, with Kevin Smolkowski joining
Pierre Martineau, Stephen Spackman, and Norm Meluch. Breaking each .c file
into separately-swapped pieces should help performance considerably. More
changes to the overlay manager are brewing, and will be distributed in the
unfortunately required Patch 8.
The Amiga port was brought up to date and extended by Richard Addison,
Jochen Erwied, Mark Gooderum, Ken Lorber, Greg Olson, Mike Passaretti, and
Gregg Wonderly.
The Macintosh port was futher extended by Kevin Sitze, Andy Swanson, Jon
Watte, and Tom West, working with Johnny Lee.
Support for recent versions of HP-UX was added by Steve Creps.
We believe all major various platforms and compilers are working properly now.
In other news, '/' now distinguishes among monsters of a given class, named
objects (including artifacts) are handled better, an extended version command
gives compilation options, monster colors should show up better, more
occupations are being stopped appropriately, unconscious and non-animal
monsters are handled better, and the eating behavior and ending messages have
been overhauled again.
Various display nuisances have been fixed and the "worm segment", "nymph
freeinv", and combined nymph/succubus/polymorphing bugs are gone, along with
a large number of less notorious problems. A few more fun loopholes no longer
exist.
In all, we think this is the stablest and most balanced version yet.

59
doc/fixes30.pl08 Normal file
View File

@@ -0,0 +1,59 @@
From @RELAY.CS.NET,@central.cis.upenn.edu:izchak@linc.cis.upenn.edu Sun Jun 3 19:07:16 1990
Received: from tekred.CNA.TEK.COM by saab.CNA.TEK.COM (3.2/6.24)
id AA19831; Sun, 3 Jun 90 19:07:15 PDT
Received: by tekred.CNA.TEK.COM (5.51/6.24)
id AA07744; Sun, 3 Jun 90 19:04:46 PDT
Received: by tektronix.TEK.COM (5.51/7.1)
id AA19147; Sun, 3 Jun 90 19:09:13 PDT
Received: from by zephyr.ENS.TEK.COM (4.1/7.1)
id AB19260; Sun, 3 Jun 90 19:03:29 PDT
Received: from relay.cs.net by RELAY.CS.NET id aa02627; 3 Jun 90 21:57 EDT
Received: from central.cis.upenn.edu by RELAY.CS.NET id aa02050;
3 Jun 90 21:58 EDT
Received: from LINC.CIS.UPENN.EDU by central.cis.upenn.edu
id AA24573; Sun, 3 Jun 90 21:58:54 -0400
Return-Path: <izchak@linc.cis.upenn.edu>
Received: by linc.cis.upenn.edu
id AA04476; Sun, 3 Jun 90 21:58:14 EDT
Date: Sun, 3 Jun 90 21:58:14 EDT
From: Izchak Miller <izchak@linc.cis.upenn.edu>
Posted-Date: Sun, 3 Jun 90 21:58:14 EDT
Message-Id: <9006040158.AA04476@linc.cis.upenn.edu>
To: billr@saab.CNA.TEK.COM
Subject: UPDATE8
Status: O
This patch is devoted to bugfixes and accommodations for more versions of
the newer ports.
The VMS port should now compile with both VAXC and GNUC and install more
easily under a variety of OS versions, thanks to Joshua Delahunty and Pat
Rankin.
A number of strange interactions in the Macintosh-specific code have been
cleaned up.
The MSDOS overlay manager was debugged, and the overlay assignments and macro
names straightened out, so the result should be both faster and more stable
than previous versions. See the new file Install.ovl and various files in
the others directory for more information.
The Amiga port now specifies addressing modes for many external variables,
which should make its executable smaller and faster as well.
The biggest externally visible change separates DECgraphics and IBMgraphics
from the general graphics-setting code, and makes them selectable on the
command line.
Once again, existing saved games and bones files should be discarded (or the
update postponed until they are gone).
A number of reasonably simple bugs are no more, although some screen update
oddities are postponed to 3.1. Among the dead are problems with shops on
bones levels, renaming artifacts, kicking non-objects, winning gem treatment,
level bounds checking and monster filling, mimic appearances, taking items
out of containers, monster interiors and inventories, and guard behavior.
Various other things were changed to be consistent with similar situations.

11
doc/fixes30.pl09 Normal file
View File

@@ -0,0 +1,11 @@
Patchlevel 9 is in fact an amendment patch to Patchlevel 8. It
contains fixes to some deadly bugs discovered thus far in the Pl8
code.
Among the bugs fixed are a 0 dereference bug in the Amiga code, a
bug in the tins code, a bug in the inventory weight code, a level
files bug in the Mac code, an ST display bug, a bug in the maze's
bones level, a bug with chest traps, a bug in the restoring code, a
vault guard bug, a PC collapsing dungeon bug, and other more minor
bugs.

23
doc/fixes30.pl10 Normal file
View File

@@ -0,0 +1,23 @@
UPDATE10
Patch 10 to NetHack 3.0 adds no new features, and few optimizations.
It fixes many mostly rare bugs and extends support to a couple more
system variants.
The major change with this patch is that the MSDOS overlay manager is
now bright enough to split up one logical executable among several disk
files, thus simplifying distribution via floppies since each file can
be <360K. Entering debugging mode for the Macintosh is simplified.
There are provisions for later versions of several compilers, although
not yet Turbo C++, as we have not gotten an executable with adequate
performance (see Install.ovl for gory details).
NetHack should now get along better with Irises, IBM RS/6000s, NeXTs,
and possibly even SCO UNIX.
Among the dead bugs are those involving artifact damage, VMS file
manipulation, crushed iron balls, elven equipment, orcs with 2^32-1
daggers, trolls with ridiculously high hitpoints, exploding bags of
holding on the ground, inappropriate messages, saved luck, unbounded
digging on special levels, and several distinct trap problems.

View File

@@ -140,6 +140,7 @@ tty: turn off an optimization that is the suspected cause of Windows reported
partial status lines following level changes
tty: ensure that current status fields are always copied to prior status
values so that comparisons are correct
orctown: prevent Bad fruit #0 and some minor tuning
Platform- and/or Interface-Specific Fixes

View File

@@ -521,7 +521,7 @@ E void FDECL(container_impact_dmg, (struct obj *, XCHAR_P, XCHAR_P));
E int NDECL(dokick);
E boolean FDECL(ship_object, (struct obj *, XCHAR_P, XCHAR_P, BOOLEAN_P));
E void FDECL(obj_delivery, (BOOLEAN_P));
E void FDECL(deliver_obj_to_mon, (struct monst *mtmp, unsigned long));
E void FDECL(deliver_obj_to_mon, (struct monst *mtmp, int, unsigned long));
E schar FDECL(down_gate, (XCHAR_P, XCHAR_P));
E void FDECL(impact_drop, (struct obj *, XCHAR_P, XCHAR_P, XCHAR_P));
@@ -1703,6 +1703,7 @@ E const char *FDECL(helm_simple_name, (struct obj *));
E const char *FDECL(mimic_obj_name, (struct monst *));
E char *FDECL(safe_qbuf, (char *, const char *, const char *, struct obj *,
char *(*)(OBJ_P), char *(*)(OBJ_P), const char *));
E int FDECL(shiny_obj, (CHAR_P));
/* ### options.c ### */

View File

@@ -272,8 +272,7 @@ typedef struct sortloot_item Loot;
/* flags for deliver_obj_to_mon */
#define DF_NONE 0x00
#define DF_RANDOM2 0x01
#define DF_RANDOM3 0x02
#define DF_RANDOM 0x01
#define DF_ALL 0x04
/* special mhpmax value when loading bones monster to flag as extinct or

View File

@@ -50,7 +50,7 @@ boolean FDECL((*gp_getvalidf), (int, int));
getpos_getvalid = gp_getvalidf;
}
const char *const gloc_descr[NUM_GLOCS][4] = {
static const char *const gloc_descr[NUM_GLOCS][4] = {
{ "any monsters", "monster", "next monster", "monsters" },
{ "any items", "item", "next object", "objects" },
{ "any doors", "door", "next door or doorway", "doors or doorways" },
@@ -60,7 +60,7 @@ const char *const gloc_descr[NUM_GLOCS][4] = {
"anything interesting" }
};
const char *const gloc_filtertxt[NUM_GFILTER] = {
static const char *const gloc_filtertxt[NUM_GFILTER] = {
"",
" in view",
" in this area"
@@ -90,11 +90,11 @@ getpos_help(force, goal)
boolean force;
const char *goal;
{
static const char *const fastmovemode[2] = { "8 units at a time",
"skipping same glyphs" };
char sbuf[BUFSZ];
boolean doing_what_is;
winid tmpwin = create_nhwindow(NHW_MENU);
const char *const fastmovemode[2] = { "8 units at a time",
"skipping same glyphs" };
Sprintf(sbuf,
"Use '%c', '%c', '%c', '%c' to move the cursor to %s.", /* hjkl */
@@ -275,8 +275,8 @@ int glyph;
}
STATIC_OVL int
gloc_filter_floodfill_matcharea(x,y)
int x,y;
gloc_filter_floodfill_matcharea(x, y)
int x, y;
{
int glyph = back_to_glyph(x, y);
@@ -308,7 +308,7 @@ gloc_filter_init()
{
if (iflags.getloc_filter == GFILTER_AREA) {
if (!gloc_filter_map) {
gloc_filter_map = selection_opvar(NULL);
gloc_filter_map = selection_opvar((char *) 0);
}
/* special case: if we're in a doorway, try to figure out which
direction we're moving, and use that side of the doorway */
@@ -321,8 +321,6 @@ gloc_filter_init()
} else {
gloc_filter_floodfill(u.ux, u.uy);
}
}
}
@@ -331,7 +329,7 @@ gloc_filter_done()
{
if (gloc_filter_map) {
opvar_free_x(gloc_filter_map);
gloc_filter_map = NULL;
gloc_filter_map = (struct opvar *) 0;
}
}
@@ -466,7 +464,7 @@ boolean fulldir;
/* explicit direction; 'one step' is implicit */
Sprintf(buf, "%s", directionname(dst));
} else {
const char *dirnames[4][2] = {
static const char *dirnames[4][2] = {
{ "n", "north" },
{ "s", "south" },
{ "w", "west" },
@@ -543,7 +541,8 @@ int cx, cy;
cc.x = cx;
cc.y = cy;
if (do_screen_description(cc, TRUE, sym, tmpbuf, &firstmatch, (struct permonst **)0)) {
if (do_screen_description(cc, TRUE, sym, tmpbuf, &firstmatch,
(struct permonst **) 0)) {
(void) coord_desc(cx, cy, tmpbuf, iflags.getpos_coords);
custompline(SUPPRESS_HISTORY,
"%s%s%s%s%s", firstmatch, *tmpbuf ? " " : "", tmpbuf,
@@ -590,6 +589,7 @@ int gloc;
coord tmpcc;
const char *firstmatch = "unknown";
int sym = 0;
any.a_int = i + 1;
tmpcc.x = garr[i].x;
tmpcc.y = garr[i].y;
@@ -804,11 +804,12 @@ const char *goal;
msg_given = TRUE;
goto nxtc;
} else if (c == Cmd.spkeys[NHKF_GETPOS_LIMITVIEW]) {
const char *const view_filters[NUM_GFILTER] = {
static const char *const view_filters[NUM_GFILTER] = {
"Not limiting targets",
"Limiting targets to in sight",
"Limiting targets to in same area"
};
iflags.getloc_filter = (iflags.getloc_filter + 1) % NUM_GFILTER;
for (i = 0; i < NUM_GLOCS; i++) {
if (garr[i]) {
@@ -845,6 +846,7 @@ const char *goal;
if (iflags.getloc_usemenu) {
coord tmpcrd;
if (getpos_menu(&tmpcrd, gloc)) {
cx = tmpcrd.x;
cy = tmpcrd.y;
@@ -1513,7 +1515,7 @@ namefloorobj()
(cc.x == u.ux && cc.y == u.uy) ? "under you" : "there");
return;
}
/* note well: 'obj' might be as instance of STRANGE_OBJECT if target
/* note well: 'obj' might be an instance of STRANGE_OBJECT if target
is a mimic; passing that to xname (directly or via simpleonames)
would yield "glorkum" so we need to handle it explicitly; it will
always fail the Hallucination test and pass the !callable test,
@@ -2025,9 +2027,9 @@ static NEARDATA const char *const hliquids[] = {
"instant coffee", "tea", "herbal infusion", "liquid rainbow",
"creamy foam", "mulled wine", "bouillon", "nectar", "grog", "flubber",
"ketchup", "slow light", "oil", "vinaigrette", "liquid crystal", "honey",
"caramel sauce", "ink", "aqueous humour", "milk substitute", "fruit juice",
"glowing lava", "gastric acid", "mineral water", "cough syrup", "quicksilver",
"sweet vitriol", "grey goo", "pink slime",
"caramel sauce", "ink", "aqueous humour", "milk substitute",
"fruit juice", "glowing lava", "gastric acid", "mineral water",
"cough syrup", "quicksilver", "sweet vitriol", "grey goo", "pink slime",
};
const char *
@@ -2035,7 +2037,7 @@ hliquid(liquidpref)
const char *liquidpref;
{
return (Hallucination || !liquidpref) ? hliquids[rn2(SIZE(hliquids))]
: liquidpref;
: liquidpref;
}
/* Aliases for road-runner nemesis

View File

@@ -410,7 +410,7 @@ boolean with_you;
if ((mtmp->mspare1 & MIGR_LEFTOVERS) != 0L) {
/* Pick up the rest of the MIGR_TO_SPECIES objects */
if (migrating_objs)
deliver_obj_to_mon(mtmp, DF_ALL);
deliver_obj_to_mon(mtmp, 0, DF_ALL);
}
if (xlocale && wander) {

View File

@@ -1671,20 +1671,22 @@ boolean near_hero;
}
void
deliver_obj_to_mon(mtmp, deliverflags)
deliver_obj_to_mon(mtmp, cnt, deliverflags)
int cnt;
struct monst *mtmp;
unsigned long deliverflags;
{
struct obj *otmp, *otmp2;
int where, cnt = 0, maxobj = 0;
int where, maxobj = 1;
if (deliverflags & DF_RANDOM3)
maxobj = rn2(3) + 1;
else if (deliverflags & DF_RANDOM2)
maxobj = rn2(2) + 1;
else if (deliverflags == DF_NONE)
if ((deliverflags & DF_RANDOM) && cnt > 1)
maxobj = rnd(cnt);
else if (deliverflags & DF_ALL)
maxobj = 0;
else
maxobj = 1;
cnt = 0;
for (otmp = migrating_objs; otmp; otmp = otmp2) {
otmp2 = otmp->nobj;
where = (int) (otmp->owornmask & 0x7fffL); /* destination code */

View File

@@ -1391,7 +1391,7 @@ int mmflags;
}
if (allow_minvent && migrating_objs)
deliver_obj_to_mon(mtmp, DF_RANDOM2); /* in case there's waiting items */
deliver_obj_to_mon(mtmp, 1, DF_NONE); /* in case there's waiting items */
if (!in_mklev)
newsym(mtmp->mx, mtmp->my); /* make sure the mon shows up */

View File

@@ -632,6 +632,7 @@ char *s;
}
#define ORC_LEADER 1
static const char *orcfruit[] = {"paddle cactus", "dwarven root"};
void
migrate_orc(mtmp, mflags)
@@ -650,9 +651,12 @@ unsigned long mflags;
* orcs between here and the bottom of the mines.
*/
nlev = max_depth;
/* once in a blue moon, he won't be at the very bottom */
if (!rn2(40))
nlev--;
mtmp->mspare1 = MIGR_LEFTOVERS;
} else {
nlev = rn2(max_depth - cur_depth) + cur_depth + 1;
nlev = rn2((max_depth - cur_depth) + 1) + cur_depth;
if (nlev == cur_depth)
nlev++;
if (nlev > max_depth)
@@ -663,6 +667,39 @@ unsigned long mflags;
migrate_to_level(mtmp, ledger_no(&dest), MIGR_RANDOM, (coord *) 0);
}
void
shiny_orc_stuff(mtmp)
struct monst *mtmp;
{
int gemprob, goldprob, otyp;
struct obj *otmp;
boolean is_captain = (mtmp->data == &mons[PM_ORC_CAPTAIN]);
/* probabilities */
goldprob = is_captain ? 600 : 300;
gemprob = goldprob / 4;
if (rn2(1000) < goldprob) {
if ((otmp = mksobj(GOLD_PIECE, FALSE, FALSE)) != 0) {
otmp->quan = 1L + rnd(goldprob);
otmp->owt = weight(otmp);
add_to_minv(mtmp, otmp);
}
}
if (rn2(1000) < gemprob) {
if ((otmp = mkobj(GEM_CLASS, FALSE)) != 0) {
if (otmp->otyp == ROCK)
dealloc_obj(otmp);
else
add_to_minv(mtmp, otmp);
}
}
if (is_captain || !rn2(8)) {
otyp = shiny_obj(RING_CLASS);
if ((otyp != STRANGE_OBJECT) &&
(otmp = mksobj(otyp, FALSE, FALSE)) != 0)
add_to_minv(mtmp, otmp);
}
}
void
migr_booty_item(otyp, gang)
int otyp;
@@ -673,8 +710,13 @@ const char *gang;
if (otmp && gang) {
new_oname(otmp, strlen(gang) + 1); /* removes old name if one is present */
Strcpy(ONAME(otmp), gang);
if (otyp >= TRIPE_RATION && otyp <= TIN)
if (otyp >= TRIPE_RATION && otyp <= TIN) {
if (otyp == SLIME_MOLD)
otmp->spe = fruitadd((char *) orcfruit[rn2(SIZE(orcfruit))],
(struct fruit *) 0);
otmp->quan += (long) rn2(3);
otmp->owt = weight(otmp);
}
}
}
@@ -699,24 +741,16 @@ stolen_booty(VOID_ARGS)
*/
gang = rndorcname(gang_name);
/* create the leader of the orc gang */
mtmp = makemon(&mons[PM_ORC_CAPTAIN], 0, 0, MM_NONAME);
if (mtmp) {
mtmp = christen_monst(mtmp, upstart(gang));
mtmp->mpeaceful = 0;
migrate_orc(mtmp, ORC_LEADER);
}
/* create the stuff that the rest of the gang took */
migr_booty_item(rn2(2) ? LONG_SWORD : SILVER_SABER, gang);
cnt = rn2(3) + 1;
/* create the stuff that the gang took */
cnt = rnd(4);
for (i = 0; i < cnt; ++i)
migr_booty_item(rn2(4) ? TALLOW_CANDLE : WAX_CANDLE, gang);
cnt = rn2(2) + 1;
cnt = rnd(3);
for (i = 0; i < cnt; ++i)
migr_booty_item(SKELETON_KEY, gang);
otyp = rn2((GAUNTLETS_OF_DEXTERITY - LEATHER_GLOVES) + 1) + LEATHER_GLOVES;
migr_booty_item(otyp, gang);
cnt = rn2(9) + 1;
cnt = rnd(10);
for (i = 0; i < cnt; ++i) {
/* Food items - but no lembas! (or some other weird things) */
otyp = rn2((TIN - TRIPE_RATION) + 1) + TRIPE_RATION;
@@ -727,6 +761,15 @@ stolen_booty(VOID_ARGS)
otyp != HUGE_CHUNK_OF_MEAT && otyp != CORPSE)
migr_booty_item(otyp, gang);
}
migr_booty_item(rn2(2) ? LONG_SWORD : SILVER_SABER, gang);
/* create the leader of the orc gang */
mtmp = makemon(&mons[PM_ORC_CAPTAIN], 0, 0, MM_NONAME);
if (mtmp) {
mtmp = christen_monst(mtmp, upstart(gang));
mtmp->mpeaceful = 0;
shiny_orc_stuff(mtmp);
migrate_orc(mtmp, ORC_LEADER);
}
/* Make most of the orcs on the level be part of the invading gang */
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
if (DEADMONSTER(mtmp))
@@ -751,14 +794,16 @@ stolen_booty(VOID_ARGS)
* members of the invading gang until they get their spoils assigned
* to the inventory; handled during that assignment.
*/
cnt = rn2(7) + 5;
cnt = rn2(10) + 5;
for (i = 0; i < cnt; ++i) {
int mtyp;
mtyp = rn2((PM_ORC_SHAMAN - PM_ORC) + 1) + PM_ORC;
mtmp = makemon(&mons[mtyp], 0, 0, MM_NONAME);
if (mtmp)
if (mtmp) {
shiny_orc_stuff(mtmp);
migrate_orc(mtmp, 0UL);
}
}
ransacked = 0;

View File

@@ -2753,6 +2753,13 @@ char oclass;
return STRANGE_OBJECT;
}
int
shiny_obj(oclass)
char oclass;
{
return (int) rnd_otyp_by_namedesc("shiny", oclass);
}
/*
* Return something wished for. Specifying a null pointer for
* the user request string results in a random object. Otherwise,