- this is brute force, always update the status line each time you
insert something into a container. If you look closely, you may still
see the Burdened message disappears momentarily doe to the many possible
messages between the freeinv() call and the point where the object is
actually put into the container.
- the "Burdened" message could disappear from the status line if it was
updated partway thru in_container, clearing the bot flags. Re-order
message so it comes after add_to_container, as in 3.3.1.
- It was possible for hmon_hitmon to call mhurtle to move a monster into a
hole or other trap, causing it to migrate. Then, hmon_hitmon would
subtract hp, and could mark the monster as dead. Later, dmonsfree would
notice the monster wasn't on the level anymore, causing the impossible.
Avoid the problem by just not hurtling the monster if it's going to die.
It's possible it will get lifesaved after not hurtling. Technically, if it
does die, the corpse should be hurtled, but won't be.
- treat jousting similarly
- if you're polymorphed into an eel, you were able to drown things like xorns
- also, fix the tombstone message when an eel drowns you, it was basing the
message on your location, not the eel's location
Fixing some iron ball/teleds stuff:
-- If the player can pass through walls, ignore all checks for walls, or else
things will behave weirdly.
-- Instead of using the kludge "if the distance is >2 it must be a teleport",
pass a parameter indicating whether they crawled or teleported onto the new
space. This fixes a special case, where the player moved one space and the
ball didn't move, but the chain moved through solid rock. This is acceptable
if teleporting and unacceptable if dragging.
This also required some rearrangement of teleds() so that u.ux,u.uy
are set after placing the ball, not before. I'm still not sure the pit
filling line is in the right place; anyone know?
-- add some comments so I can look at the code in a month and still know what
I did.
Most of this patch is just adding the new parameter.
statement that could be followed by ';' anywhere. However, with the goto
there, my compiler complains every time it's used:
"ball.c", line 402: warning: statement not reached
"ball.c", line 434: warning: statement not reached
"ball.c", line 442: warning: statement not reached
"ball.c", line 449: warning: statement not reached
"ball.c", line 452: warning: statement not reached
"ball.c", line 457: warning: statement not reached
"ball.c", line 479: warning: statement not reached
"ball.c", line 498: warning: statement not reached
None of the current uses care about an excess statement, but is there a
way to satisfy both desires?
Replace "feature_toggle" implementation with an easier-to-understand
boolean option called "lootabc".
Provide "showrace", an option to display the hero by race glyph rather
than by role glyph.
Document the above.
Remove some obsolete Mac options.
- make the code in apply.c and zap.c consistent
- use the "drops away from you" case whenever the location type does not
lend itself to using the word "floor"
This includes a reversal of my earlier
boulder/statue/landmine fix,
and places a check for obj->where==OBJ_FLOOR into
fracture_rock(). I think this is a better approach
because:
- if eliminates the pointless extract/place in
fracture_rock, followed by extract/place in
the caller in the two places causing the crash
- it covers any similar situations that we
might have missed or that someone might add
accidentally (you might not expect the location
of an object to change inside fracture_rock())
- it allows fracturing to take place on the
other object chains if we ever need it (statues
falling down stairs, perhaps?)
- it doesn't move objects from other chains onto
the floor briefly as the current code does
There was at least one more special case aside from throwing
(jetisoning items to reduce weight after falling in water) which
have needed the same extra code. This is a more general fix.
If you stepped on an unknown rolling boulder trap, and that rolling boulder
hit a monster and killed it, you would be called a killer. This makes
playing a pacifism conduct game rather difficult.
- track boulders from unknown rolling boulder traps, and don't charge/credit
hero if they kill monsters. This is done by temporarily setting otrapped on
such boulders.
- boulders from known traps are still charged/credited to the hero
- fix a couple places in ohitmon where is_poisonable wasn't checked along
with opoisoned.
Monster centaurs can't wear boots, and characters who polymorph
into centaurs have their boots pushed off, but there was nothing to
prevent such characters from putting those boots right back on.
Make a change suggested by <Someone> to have the Wizard
enter harassment mode when you perform the invocation, in case
you manage to obtain the Book of the Dead without killing him.
Instead of just initiating that periodic effect, behave as if
you have actually killed him (which also affects random monster
generation frequency, prayer timeout, and shopkeeper salutations).
- if a mimic mimics a boulder (top sokoban) or a door atop
a closed door the closed door didn't block your vision after
the mimic is sensed.
- also, make mondied consistent with xkilled WRT corpses on inaccessible
locations: no corpse
Well, this proved rather annoying. Problems included:
-- the solid rock problem that was noticed
-- teleporting to a spot two spaces away but on the other side of solid rock
could also leave the chain in solid rock
-- in one place I said chainx instead of ballx, which could cause problems with
teleporting
-- the teleport code moved the player before moving the ball, violating the
assumption that the player hasn't been moved yet (which only caused problems
after I added the solid rock fix).
Ball movement still isn't quite right, though the cases are really rare. I
may fix them later.
This adds a generic feature_toggle mechanism to
the game. Code that wants to offer two different
ways of doing something can add an entry to
feature_toggles[] (in decl.c), and create a
preprocessor macro for its array index in decl.h.
Then the code can test it using
if (feature_toggle(FEATURE_NAME))
..do_this..
else
..do_that..
The player can toggle the alternate code path
on using OPTIONS=feature_toggle:feature_name_1 feature_name_2 ...
This seems better than creating brand new options
for controlling features (ala prayconfirm, which
could switch to this single option feature_toggle
mechanism as well)
My first use of it is to allow toggling of the selectors
on the loot menu, which I'm hesitant to just change back
because now people are actively using the new selectors and
the complaints would be really loud if the interface were
to just switch back after they adjusted.
The default behaviour is the new behaviour "iob", but with an
OPTIONS=feature_toggle:loot_menu_selectors
in your config file, it will revert to using "abc" as it did
in 3.3.1. I'll add a Guidebook page of "features/behaviour
that can be toggled" later.
The toggles can only be done in defaults.nh, and are
not saved with the game.
Fix the reported problem of incorrect conditional logic
making it impossible to bump into closed doors when moving while
impaired for the #if STEED configuration.
- report: twoweapon mode, eat fried food, get messages like:
Your sword slips from your hands.
Your sword also slips from your hands.
- the fix tracks the kind of the 1st weapon, and adds "other" to the 2nd
message if necessary
This was a tricky one. While the error was ultimately because
he was specifying a non-existant directory in defaults.nh, the
error message lead me to the wrong area until I traced through
with a debugger.
It turns out that an fqn buffer was being re-used before it
was finished being used with the original information in
sys/share/pcunix.c, so the error message listed the
wrong file!
This adds one more buffer and fixes the problem.
Note that it could only affect plaforms with
PREFIXES_IN_USE defined (NOCWD_ASSUMPTIONS
or VAR_PLAYGROUND)
It also alters the WIN32 error message to give them a
hint as to what the problem might be.
<email deleted>
<email deleted>
Sent: Saturday, March 23, 2002 9:27 AM
Subject: #R668: Windows 2000 Lock File Creation Error
> nhfrom: 3.4.0 Official binary release for Windows 95/98/NT/2000/Me/XP
> I get an error after unzipping nethack to c:\nethack, and changing the
> configuration (defaults.nh) to reflect this in the hackdir, levels and save
> configuration items.
>
> The error I get is "cannot creat lock file (C:\nethack\NHPERM_lock.)" after
> entering nethack at the command line and answering the Who are you? question.
- this was a betabug I think, but not recorded as such
- if you kicked a throne, any GEM_CLASS item could be generated, including rocks
- changes behavior to be consistent with gems from fountains
Format multiple bad wizkit items a little better. It will scroll off the screen
if there are more than a screen of bad items, but that's probably not too
likely.
You could still get a panic. To reproduce:
- wizwish for a statue, and drop it
- wizwish for a landmine, and apply it at same location as statue
- move one square and wish for a boulder, drop it (automatically likely)
- push the boulder on the landmine to trigger it.
- the panic came from the statue this time.