Another item from the "A few bugs" mail. Casting spell of protection
when previous casting(s) hadn't timed out yet miscalculated the new AC
boost. At low levels--when this spell probably gets its most use--the
bug wasn't noticeable. (At high levels when someone might cast it a
whole bunch of times in succession, the effect could be noticed but
was probably just assumed to be working as intended. Its behavior is
somewhat convoluted.)
Fix another item in the "A few bugs" mail. Monsters who wanted to flee
weren't able to use 'sstairs' (extra stairway leading to different branch
of dungeon) due to a logic error in the find_defensive() choices.
if (terrain==STAIR) {
} else if (terrain==LADDER) {
} else if (x==sstairs.sx && y==sstairs.sy) {
} else { /* check traps */
}
wouldn't find 'sstairs' because they have terrain type STAIRS. (Also,
the sstairs check wasn't screening out immobile monsters, but that bug
didn't have a chance to manifest.)
There's a bunch of reformatting, and some code re-organization to improve
other formatting, and some additional logic fixes.
Instead of making the caller remember to use MON_NOWEP, make
setmnotwielded handle that automatically. This fixes the
"bad monster weapon restore" errors I've been seeing.
Also adds sanity checks for this.
Fix one of the entries in the "A few bugs" mail. Flesh golems hit by
electric damage calculated a healing amount of dam/6, then ignored it
and used dam instead. Probably never noticed in actual play....
The problem discovered with sanity checking of embedded dragon scales
was with the checking, not with the object flagged "embedded in skin".
I thought W_ARM got cleared when switching 'uarm' object to 'uskin',
but it isn't.
I changed the first quote to use the American spelling (snowplow vs
snowplough) found in the edition I have on hand.
Passages for several more books are still queued up. Transcribing them
is very tedious.
Update the command procedure that can be used to compile and link
everything. The sys/vms Makefiles still need updating.
I added 'tribute' to the command procedure used to create and populate
the plaground directory but am not able to test it.
His changes add file_exists() to sys/vms/vmsfiles.c, which might be
needed in the future but is not useful here. Checking for 'gbd' and
'grep' for PANICTRACE support (which I had working on Alpha--and
ought to work on VAX, no idea about IA64--before losing access to vms)
is pointless since neither is used.
src/files.c
SYSCF support, parse_config_line():
#if VMS, ignore GDBPATH and GREPPATH if present in sysconf;
SYSCF support, assure_syscf_file():
#if VMS, force open()'s optional third argument since the macro
which redirects open to vms_open requires it.
src/sp_lev.c
selection_do_randline():
use configuration-specified 'Rand()' rather than raw 'rand()'.
via UnNetHack, with some slight changes:
1) Folded the two Portal references into one
2) Removed "ACHAT SHTAYIM SHALOSH" ("One Two Three" in Hebrew and apparently
Uri Geller's catchphrase) - I know nothing about Hebrew nor Geller, or
whether this would be appropriate to add.
3) Added "XOR OTA" ("Atorox", reference to Finnish fandom and early scifi)
Implement the suggestion that applying a non-cursed unicorn horn can
cure deafness like other similar troubles. Also, applying a cursed one
can cause deafness, although I made the chance be half of what it is
for the other troubles since they tend to be more significant.
This is entry #2 on the bugzilla list, but I haven't figured out how to
update that yet.
Require the hero to pass the next_to_u() check when using the Eye of the
Aethiopica to portal to another dungeon branch. Even though the reported
exploit of having a steed which is carrying the Amulet bring it along had
already been prevented, this changes the temporary portal behavior to be
like level teleport. A steed carrying the Amulet or a non-adjacent pet
on a cursed leash will inhibit the attempted change of location.
This makes installing NetHack on a public server much easier.
Required some minor changes to the unix top-level Makefile, and
the other hints files; Makefile variable HACKDIR may not be a
full path anymore, use INSTDIR instead.
Make the preface have an unnumbered header and force a new paragraph
for its text;
remove the unterminated switch to bold font;
change "Terry Pratchett" from bold to italics to match Guidebook.tex's
setting.
Allow 'P' and 'R' commands to accept armor and wear/take-off the chosen
item, and 'W' and 'T' commands to accept accessories and put-on/remove
the item. The which-object prompt only lists the type(s) of items that
traditionally go with each command, as does an inventory menu if the
user picks '?', but items of the alternate type(s) can be chosen, by
unshown letter or by the inventory menu given for '*'.
There shouldn't be much difference if you continue picking items that
go with the original commands, although you will somestimes get
"which object? [*]" when the only choices are for alternate command.
And you won't see the all-four-accessories-are-already-worn message
for 'P' unless you also have something worn in all seven armor slots.
The Guidebook.mn changes have been tested (that's how/why I noticed
the preface glitch) but the corresponding Guidebook.tex ones haven't.
Reported by ais; clearing object bypass bits once per turn isn't often
enough. Clear them after the hero moves (which might be more than once
in a turn) and before each monster moves (ditto) and after last monster
moves. This might not be optimal but that shouldn't matter since it's
usually a no-op.
Add macros W_WEAPON and W_ACCESSORY, similar to existing W_ARMOR, bitmask
of all the relevant worn bits. Just for code readability; there should
be no change in behavior.
Also, reformat the "ugly checks" portion of getobj(). Slightly better
readability and fewer continuation lines, but only a modest improvement.
I have several psssages for Maskerade too, but after the time and effort
spent fixing up the ones already present for that book, they'll have to
wait until some other occasion.
Replace instances of strings split across lines which rely on C89/C90
implicit concatenation of string literals to splice them together
with single strings that are outdented relative to the code that uses
them. It's uglier but it won't break compile for pre-ANSI compilers.
This covers many files in src/ that only have one or two such split
strings. There are several more files which have three or more. Those
will eventually be '(2 of 2)'.
Noticed along the way: the fake mail message/subject
Report bugs to devteam@nethack.org.
wasn't using its format string of "Report bugs to %s.", so would have
just shown our email address. Doesn't anybody enable fake mail anymore?
I modified that format to enclose the address within angle brackets and
made a similar change for the 'contact' choice of the '?' command.
If color or dark_room options were toggled during gameplay, and then
the game is saved and restored with different options, the dark room
glyphs were wrong.
Reported by both Boudewijn and Pat.
As reported by Pat:
> After leaving a level and then returning, I'm seeing lit
> room squares as blank
> Options all have their default settings
OPTIONS=nocolor is the default; we should probably change this
sometime, because nearly everyone plays with color.
%o[hij] relied on makesingular() converting "the Eyes of the Overworld"
into "the Eye of the Overworld" to recognize when it should use
they/them/their instead of it/it/its, but makesingular() was changed to
keep "eyes" intract instead of stripping the 's'. So qtext_pronoun()
needs to check for "Eyes" itself.