cohrs [Mon, 30 Jun 2003 04:18:29 +0000 (04:18 +0000)]
random numbers on linux
Switch the default Linux build behavior to use random instead of lrand48,
since lrand48 exhibits some obviously non-random behavior. random() has
been in glibc for a long time. Even if no other changes are made to
nethack's random number generator, this will improve the Linux behavior.
cohrs [Mon, 30 Jun 2003 04:00:14 +0000 (04:00 +0000)]
SF patch 536615: travel cache
This is derived from the proposed patch and feedback to it. This applies
the last-position cache behavior without an option, making the behavior
more like it is for interfaces with a mouse, where holding the mouse still
acts the same way as the travel cache. The code is not #ifdef'd either.
cohrs [Thu, 26 Jun 2003 00:53:10 +0000 (00:53 +0000)]
shopkeeper geography
From: <Someone>
I dunno if this is relevant but "Gomel" is actually not in Ukraine but in
Belarus. I am pretty sure because I have been there.
nethack.allison [Fri, 13 Jun 2003 19:57:22 +0000 (19:57 +0000)]
djgpp build instructions
Explicitly mention fil41b.zip as a required djgpp component.
Oddly, some people only pick up part of djgpp, then
complain to us when the Makefile doesn't run as
planned.
cohrs [Thu, 12 Jun 2003 05:16:20 +0000 (05:16 +0000)]
guidebook building command
I found that the setting of GUIDECMD sys/unix/Makefile.doc didn't cut
it with groff-1.18. Also, the command was duplicated in the rule to
generate Guidebook.txt.
cohrs [Thu, 12 Jun 2003 04:49:09 +0000 (04:49 +0000)]
corpses on ice use of obj recharged field
A while back, I noticed that there was a custom use of the obj->recharged
flag in mkobj.c for tracking corpses on ice. It's much more obvious for
those of us that don't have the entire source base memorized to follow the
usual convention of adding a #define to obj.h. That's what this change does.
cohrs [Thu, 12 Jun 2003 03:32:58 +0000 (03:32 +0000)]
webbing over stairs
Due to limitations in some interface's display capabilities, don't let
polymorphed players web over stairs or ladders. As a side effect, this
side-steps missing checks for webs when going up or down stairs and ladders.
nethack.allison [Thu, 12 Jun 2003 03:28:39 +0000 (03:28 +0000)]
Long ago we received a bug report complaining that
hilite_pet on Win32 (tty) wasn't respecting
the setting of "use_inverse" (plain "inverse" at the
time I think).
In response, we made it respect the setting. The
"use_inverse" setting is off by default however,
so we've now had about three complaints about
hilite_pet not working.
So I'm changing the default value for win32 tty
to having "use_inverse" set to TRUE.
They can still override it in the config file
that way.
cohrs [Sun, 8 Jun 2003 19:36:45 +0000 (19:36 +0000)]
U393 - jousting puddings into a polymorph trap caused 2 identical new monsters
Because hmon_hitmon caches the monster data type, it needs to update this
whenever the monster might polymorph. It already did this for potions, but
not for jousting. There are other more complex ways this could be addressed.
cohrs [Sun, 8 Jun 2003 18:31:57 +0000 (18:31 +0000)]
U393 - unix hangups in endgame
Unix code does not always go thru hangup() when EOF is encountered.
There is a similar end_of_input() that is sometimes called instead, which
was missing a test of program_state.something_worth_saving.
cohrs [Sun, 8 Jun 2003 17:51:57 +0000 (17:51 +0000)]
U338 - dismounting into known traps
When dismounting by choice and not impaired, the player could end up in a
known trap even if better positions were available. This change allows
the landing spot to prefer non-traps in these cases.
nethack.allison [Sun, 8 Jun 2003 00:22:28 +0000 (00:22 +0000)]
font_size descriptions
In May 2002, <Someone> wrote:
>In src/options.c, there are these options with their descriptions:
>
>#####################
>{ "font_size_map", "the size of the map font", 20, DISP_IN_GAME },
> /*WC*/
>{ "font_size_menu", "the size of the map font", 20, DISP_IN_GAME
> }, /*WC*/
>{ "font_size_message", "the size of the map font", 20,
> DISP_IN_GAME }, /*WC*/
>{ "font_size_status", "the size of the map font", 20, DISP_IN_GAME
> }, /*WC*/
>{ "font_size_text", "the size of the map font", 20, DISP_IN_GAME
> }, /*WC*/ #####################
>
>Surely all those descriptions shouldn't be the same?
nethack.allison [Sat, 7 Jun 2003 17:18:28 +0000 (17:18 +0000)]
U486 follow-up
>>+ #define OPENFAILURE(fd) (fd < 0)
>>+ # endif
>> lockptr = 0;
>>! while (retryct-- && OPENFAILURE(lockptr)) {>nhversion: 3.4.1
>And now this is accepted as valid and nothing is opened...
nethack.allison [Sat, 7 Jun 2003 13:16:40 +0000 (13:16 +0000)]
fix for U486: Can't get Nethack 3.4.1 to work
>nhversion: 3.4.1
>
> nhfrom: 3.4.1 Official binary release for Windows 95/98/NT/2000/Me/XP
> (nh341win.zip)
> comments: Whenever I run NethackW.exe, the nethack window
> appears, and does not run anything. When I close out of the
> program, I get this message:
> Waiting for access to C:\GAMES\NETHACK341\record. (X retries left). > The X seems to always be either 9 or 59. I don't know how to fix this > > problem, any help would be greatly appreciated
<Someone> writes:
>win32 open() returns -1 if failed - same as POSIX open().
> There is no STDIN in GUI applications so 0 is a valid return
> value from open().
> So it should read like that unless that breaks Amiga code:
Since I can't test the Amiga code, I added a macro
OPENFAILURE to keep the Amiga code the same as it
is now. It should probably be reviewed by someone on
the Amiga team to verify if open() on the Amiga returns
0 or -1 on failure. If the latter, the macro could be
removed completely.
nethack.allison [Fri, 6 Jun 2003 03:49:56 +0000 (03:49 +0000)]
number_pad (modified from <Someone>'s patch)
The number_pad option can now optionally hold a value
{0,1, 2 } for {off, on, DOS-mode} but plain number_pad and
!number_pad in config files still work as before.
When number_pad:2 is set, iflags.num_pad_mode is set to 1
which triggers the following behaviour:
> '5', M('5') and M('0') are mapped in rhack()
>in cmd.c, only when they are entered as a command. When used as a
>number, like in the 'n' command, no mapping takes place. '0' is
>already mapped to 'i' by the core. The
>only difference [<Someone>] left in (deliberately) is when you press Ctrl-0;
>this used to map to C('i'), which is an invalid command; now
>keep it '0' (which is interpreted as 'i' by the core.)
nethack.allison [Tue, 3 Jun 2003 10:09:07 +0000 (10:09 +0000)]
win32 (from Yitzhak)
>The attached is a patch for the makefiles and .rc that makes
>Borland compile. Files modified: sys/winnt/Makefile.bcc - changes
>Makefile so dependencies on dlls are removed for console, adds
>gamedir.tag sys/winnt/Makefile.msc - changes the Makefile a bit to
>make it dependent on gamedir.tag in both gui and console, and make
>the dlls a dependency only in console but without the !IF for
>$(GAMEFILE). The .rc format is made workable for both Borland and
>MSC. win/win32/winhack.rc - makes FONT format Borland compatible
Fix the reported problem of combat messages referring to Orcus as
"it" when the data.base entry uses "he"; extend use of gender-specific
pronouns to named and other unique monsters as well as to humanoids.
If any of those should stay as "it", they'll need to be M2_NEUTERed....
And prevent level followers from chasing you across levels if they
are fleeing at the time. It's an old change I've been sitting on which
is not related but happens to be right next to the pronoun code.
nethack.allison [Sun, 1 Jun 2003 17:42:49 +0000 (17:42 +0000)]
look vs pickup
I encountered a look vs pickup cockatrice corpse
bug today.
If you looked at a location with ':', you
would instantly get
"Touching the cockatrice corpse is a fatal mistake..."
but if you used "m," you got the full list of
things at the location to choose from.
This patch makes the behaviour consistent
and more informative to the player.
You now get the partial list of things felt
up until the cockatrice corpse is encountered,
and then you get the
"Touching the cockatrice corpse is a fatal mistake..."
Before, the code was never displaying the partially
built list because the feel_cockatrice() call was
happening before the window display call.
nethack.allison [Sun, 1 Jun 2003 15:54:41 +0000 (15:54 +0000)]
look vs pickup
I encountered a look vs pickup cockatrice corpse
bug today.
If you looked at a location with ':', you
would instantly get
"Touching the cockatrice corpse is a fatal mistake..."
but if you used "m," you got the full list of
things at the location to choose from.
This patch makes the behaviour consistent
and more informative to the player.
You now get the partial list of things felt
up until the cockatrice corpse is encountered,
and then you get the
"Touching the cockatrice corpse is a fatal mistake..."
Before, the code was never displaying the partially
built list because the feel_cockatrice() call was
happening before the window display call.
nethack.rankin [Sun, 1 Jun 2003 14:52:04 +0000 (14:52 +0000)]
random level teleport fix
From the newsgroup: prevent monsters from level teleporting out of
the quest into the main dungeon. The player can't do that and monsters
weren't supposed to be able to, but from time to time the quest nemesis
has seemingly vanished after reading a cursed scroll of teleportation.
His disappearance was due to ending up on a random level between the
quest entrance and the top of the dungeon.
This also fixes an obscure bug that I noticed while trying to
reproduce that problem: uncontrolled level teleports by the player in
the quest had 80% or thereabouts chance of ending up on the quest home
level. All 12-15 main dungeon levels above quest entrance were included
in the random range of 1 thru current+3, then any choice which tried to
pick one of those was converted to quest level 1. (Monster destination
wasn't getting that adjustment.)
nethack.rankin [Sat, 31 May 2003 07:14:21 +0000 (07:14 +0000)]
some lint cleanup
Mostly `gcc -Wwrite-strings' complaining about passing string
literals to safe_qbuf(). `gcc -Wformat' didn't catch the type mismatch
of formatting the return value of strlen() with %d, presumeably because
size_t is defined as unsigned int on this system and it treats int and
unsigned int as interchangeable as far as printf/scanf checking goes.
I'm not sure whether the sizeof() values being passed to safe_qbuf()
ought to have casts. Any system where size_t isn't the same width as
unsigned int is bound to support prototypes, but might possibly warn about
the implicit conversion of unsigned long (or even unsigned long long these
days) to unsigned int.
jwalz [Wed, 28 May 2003 21:54:37 +0000 (21:54 +0000)]
Make enhanced ammo last longer.
Since traps can no longer provide an infinite supply, and people were
complaining that they always ran out of ammo before, make it less likely
to break enchanted and blessed ammo, and more likely to break eroded
ones.
warwick [Wed, 28 May 2003 05:36:57 +0000 (05:36 +0000)]
Unify usage of $(CC) vs. $(LD) for linking to always $(LINK), set
to $(CC) by default.
Necessary for C++ builds where the C++ compiler driver must be used
to link, adding libraries that the C compiler driver does not know
about.
nethack.rankin [Mon, 26 May 2003 17:34:28 +0000 (17:34 +0000)]
cmdassist bits
If the player gives the 'T' command while not wearing any armor,
don't suggest "use 'R' to remove accessories" unless the character is
actually wearing accessories. Likewise for 'R' while not wearing any
accessories, don't suggest "use 'T' to take off armor" unless wearing
some.
Add missing amulet case to the silly_thing() handling for 'W' and
'T'. Also handle boots, gloves, and lenses as plural in the message
there. silly_thing() has been simplified a little bit in the process.
nethack.allison [Mon, 26 May 2003 09:58:15 +0000 (09:58 +0000)]
win32gui: prevent male valkyrie (from <Someone>)
>Steps to reproduce problem:
>1) make sure you don't have race, role, gender specified in your
> defaults.h, then add
> OPTIONS=role:Valkyrie,race:Human,gender:male,align:lawful
>2) start a new nethackw.exe game
>3) Uncheck "Random" from gender box, now you can select from male
> or female, not only female.
>4) Select male and click OK.
>5) When game begins press shift+O (Options) and look to gender.
> Your valkyrie is male.
defaults.nh values were not used the dialog initialization. That's
why both male/female options were available for Valkyries. This is
now fixed.
Also added: checking for consistency of the initial settings and
resetting all incompatible values to ROLE_NONE.
cohrs [Sun, 25 May 2003 23:21:20 +0000 (23:21 +0000)]
another grammar bit
My e-mail archive shows this was originally reported as one of several
items in R871. Clean up a hit message when wielding cream pies.
nethack.allison [Sun, 25 May 2003 22:47:12 +0000 (22:47 +0000)]
Fix B03001
"You can't loot or pick up containers on the floor if you're not
skilled enough to reach them from your saddle, but you can check
for and disarm traps on them; this seems a little odd. (Likewise,
being able to set land mines and beartraps while riding.)"
cohrs [Sun, 25 May 2003 20:28:41 +0000 (20:28 +0000)]
U303 - starting the game as a male valkyrie
A core fixup if the the port startup code sets an invalid flags.female when
starting a new game. The old comment regarding being unable to change
flags.female was not completely correct. The flags.pantheon can be used to
differenciate new games from a restored game.
cohrs [Sun, 25 May 2003 19:03:55 +0000 (19:03 +0000)]
untested FreeBSD compilation fix
this particular fix has been sitting around my inbox for a while although
we've had reports of FreeBSD build problems for a long time. While it's
untested, it certainly looks like the unfixed system.h had a case that
could not be reached. bsdi seems like it needs to be handled the same way.
cohrs [Sun, 25 May 2003 17:40:51 +0000 (17:40 +0000)]
golem statue vs stone-to-flesh
move the fixes entry for this from 35.0 to 34.2 since the fix got
inserted into the 3.4.2 source and is not detrimental to the branch.
cohrs [Sun, 25 May 2003 05:04:11 +0000 (05:04 +0000)]
B03006 - Searching trapped chests
When attempting to disarm a trapped chest, wisdom should only be exercised
when not confused. It stands to reason that even if you manage to find a
trap in a confused/hallucinating state, wisdom shouldn't be exercised.
cohrs [Sun, 25 May 2003 03:47:31 +0000 (03:47 +0000)]
B03005 - Canceling monsters
Since monster cancellation sticks, it doesn't makes sense for Magicbane to
cancel a monster more than once. Tweaked the messages to deal with this fact.
I decided to not make Magicbane's random effect "intelligent", which is what
changing it to use some other attack against a canceled monster would be.
cohrs [Fri, 23 May 2003 02:47:45 +0000 (02:47 +0000)]
sitting in lava and other utraptype sit messages
Several cases in the trap block of code in dosit() were caused by utraptype
being set to values not corresponding to an actual trap. <Someone>
reported back in 12/02 that the "sitting in lava" killer message could not
occur, but the special-case sit messages for TT_INFLOOR and TT_BURIEDBALL
couldn't occur either.
cohrs [Fri, 23 May 2003 02:47:42 +0000 (02:47 +0000)]
class genocide by species name
Incorporate a mod submitted by <Someone> to implement the TODO in the
class genocide code by walking thru the species to find a class to genocide
if the user input does not match the class description.
cohrs [Thu, 22 May 2003 01:43:21 +0000 (01:43 +0000)]
sitting in lava and other utraptype sit messages
Several cases in the trap block of code in dosit() were caused by utraptype
being set to values not corresponding to an actual trap. <Someone>
reported back in 12/02 that the "sitting in lava" killer message could not
occur, but the special-case sit messages for TT_INFLOOR and TT_BURIEDBALL
couldn't occur either.
cohrs [Wed, 21 May 2003 22:08:22 +0000 (22:08 +0000)]
B03003 - throwing short swords
<Someone> pointed out a disagreement between the comment and code in
throwing_weapon(): comment says daggers & knife can be thrown, but
code also allowed short swords. Assuming the comment was correct, changed
the code to match.
cohrs [Wed, 21 May 2003 18:32:40 +0000 (18:32 +0000)]
choking on non-food
<Someone> (also later forwarded by <Someone>) reported that choking
while eating non-food always resulted in calling it a "quick snack".
lesshungry() depends on an occupation to tell if you are actually eatig or
not, but since non-food is eaten in one turn, no occupation was set. Took
his suggestion of setting the occupation temporarily to cause lesshungry()
call choke() appropriately in this case.
cohrs [Wed, 21 May 2003 17:12:47 +0000 (17:12 +0000)]
U464 - picking up items while swallowed in a shop
The bug report referred to greased hands, but that doesn't affect the
behavior. If you drop an object while swallowed or engulfed in a shop, and
that object had previously been picked up from the shop floor, the object
was treated as costly. In some cases, this could result in impossible
errors later on. Perhaps object ox & oy should be modified when in
player/monster inventory, but this fix addresses the specific problem by
not doing the costly check while swallowed.
nethack.rankin [Tue, 20 May 2003 08:25:45 +0000 (08:25 +0000)]
more "disclose" handling
Even though the in game help now lists the actual disclosure values
instead of "all" as the default value, implement support for "all" (also
for "none") since doing so is trivial.
nethack.rankin [Tue, 20 May 2003 06:04:04 +0000 (06:04 +0000)]
vms playground setup
Create an empty paniclog file during playground creation, so that it
starts with the same permissions as other writeable files. Without this,
it's liable to end up being owned by the first random user who triggers
a panic or impossibility rather than by the playground owner and probably
wouldn't be writable by any other user.
cohrs [Tue, 20 May 2003 03:24:30 +0000 (03:24 +0000)]
more knight capitalization
Capitalize a bunch of "Us"s. <Someone> comments that some other "We" and "Our"
actually referred to a group. I disagree and left them alone.
cohrs [Tue, 20 May 2003 02:05:45 +0000 (02:05 +0000)]
U433 - infinite loop with place_branch
This solution is mostly a band-aid. Make sure information set by join_map
that is overlaid by the MAP is cleared out. This ensures that place_branch
will never consider invalid data. A new function, remove_rooms(), with a
helper, remove_room(), takes care of this, but only for rooms created by
join_map, which addresses the only known case that causes this problem.
There's a possibility that some other strange behavior, especially in
minetn-6, will be fixed by this as well. The problem of disconnected caves
on minetn-6 is not yet addressed.
Also, add a check to lev_comp.y to make sure the required fg semantics of
joined levels (fg must be ROOM or CORR) are actually met. Doesn't affect
any levels currently included in the distro, but might address levels
others are trying to make.
cohrs [Sun, 18 May 2003 21:04:49 +0000 (21:04 +0000)]
B02005 - Boulder and vision
add another bit to the flags passed to launch_obj so it can print
the initial "rumbling" message at the appropriate time rather than
having the caller print the message, possibly out of order.
cohrs [Sat, 17 May 2003 22:03:27 +0000 (22:03 +0000)]
starvation killer message
Write "died of starvation" on the tombstone, not just "starvation".
Suggested by <Someone> a couple weeks ago, although his suggested
prefix was different and didn't work as well for the "exhaustion" case.
cohrs [Sat, 17 May 2003 21:46:45 +0000 (21:46 +0000)]
more U429 - tile bits
> While looking at the tiles.bmp file, I've found some more mistakes like
> this : the Wizard of Yendor's shadow is touching Croesus' tile, and one
> of Orcus' wing is touching Yeenoghu's tile.
cohrs [Sat, 17 May 2003 21:35:21 +0000 (21:35 +0000)]
more grammar bits
Reported to the list a while back by <Someone>. The Knight's quest
messages are inconsistent in the use of royal pronouns. Capitalize them all.
Another option would have been to remove all royal capitalization (since such
Capitalization didn't come into use until relatively recently).
cohrs [Sat, 17 May 2003 21:12:16 +0000 (21:12 +0000)]
U442 - scroll of charging
<Someone> suggested a scroll to counteract an unknown scroll of charging
that had negative effects. Scroll of punishment already costs the same,
so that unknown behavior is already covered. Plus, a cursed scroll of
charging already has negative effects, except in the case where the player
was confused where no negative effect from reading a cursed scroll of
charging occured. Added such an effect (since the curse should still cause
something bad, even though the reader is confused), to drain the player's
energy.
cohrs [Sat, 17 May 2003 20:51:11 +0000 (20:51 +0000)]
message when eating a stalking
As suggested by <Someone> to the mailing list, display a message
when you eat a stalker and notice that you became invisible.
cohrs [Sat, 17 May 2003 20:35:07 +0000 (20:35 +0000)]
another README.linux update
Make the instructions a bit more blow-by-blow. Re-order them so they
correspond to the Install.unx step numbers. Explicitly refer to
Install.unx and Install.X11 where appropriate.
nethack.rankin [Wed, 14 May 2003 10:25:26 +0000 (10:25 +0000)]
fix B02004 and other projectile related killer reasons
1) killer reason for scattered land mine shrapnel used "a" or "an" prefix
even when multiple projectiles hit as a group -- one of various things
From a bug report.oextra field) --
noticed while investigating #1 and later From a bug report.4.0 due to an unintentional side-effect of missile killer reason
handling in 3.4.1 (removal of redundant "poisoned" prefix by m_throw()
confused the poison handling routine) -- noticed while investigating #3.
nethack.allison [Sun, 11 May 2003 14:52:59 +0000 (14:52 +0000)]
fixes30.0
On January 20, 2002 Ken Arromdee wrote:
>I dug this out of my files. (Well, it didn't take a lot of
>digging; I already copied the disk in question to my PC long ago.)
[...]
>I may or may not have another one of these but I'd actually
>have to go install a 5 1/4 inch drive to check.
cohrs [Sun, 11 May 2003 03:18:02 +0000 (03:18 +0000)]
U455 - attacking disenchanter
When polymorphed, only attacks involving hands/feet/weapons should result
in damage to object. Theoretically, hug and butt attacks should affect
objects too, but no forms with such attacks currently allow wearing armor.
nethack.allison [Sat, 10 May 2003 21:16:39 +0000 (21:16 +0000)]
final qbuf patch
This is my final src mod to ensure that a qbuf does not overflow due to
a lengthy named object. These recent patches, coupled with the core yn_function() patch earlier, should make it much rarer for a QBUFSZ
buffer overflow to occur in a window port routine (unless the window
port routine has its own bugs, but that isn't the core's fault).
nethack.allison [Sat, 10 May 2003 21:11:16 +0000 (21:11 +0000)]
final qbuf patch
This is my final src mod to ensure that a qbuf does not overflow due to
a lengthy named object. These recent patches, coupled with the core yn_function() patch earlier, should make it much rarer for a QBUFSZ
buffer overflow to occur in a window port routine (unless the window
port routine has its own bugs, but that isn't the core's fault).
nethack.allison [Sat, 10 May 2003 14:11:42 +0000 (14:11 +0000)]
Pat Rankin wrote:
> The `prompt' buffer in tty_yn_function still only holds QBUFSZ
> characters. But fixing the tty incarnation wouldn't be good enough;
> all the other interfaces would need to handle it too. I think it
> should be fixed in the core instead. Prompt strings simply should
> not be allowed to become so lengthy.
Another step in the fight against prompt sting buffer overflows.
The goes after the ones that may not have been found yet.
This makes yn_function a real core function and removes
the #define yn_function macro.
The yn_function validates the prompt string buffer being
passed prior to calling (*windowprocs.win_yn_function)(),
and if necessary, truncating it and adding "...".
This won't help if the overflow occurs in the core in
a buffer that is still QBUFSZ in size, but it will help if
a BUFSZ buffer is being passed to one of the query
functions.
nethack.allison [Fri, 9 May 2003 04:03:16 +0000 (04:03 +0000)]
next qbuf overflow
By naming the candelabrum as long a name as the game will allow, and by naming a candle the longest name also, a qbuf overflow and crash is
triggered when you attach the candle to the candelabrum.
nethack.allison [Fri, 9 May 2003 03:55:33 +0000 (03:55 +0000)]
next qbuf overflow
By naming the candelabrum as long a name as the game will allow, and by naming a candle the longest name also, a qbuf overflow and crash is
triggered when you attach the candle to the candelabrum.
nethack.rankin [Thu, 8 May 2003 07:23:11 +0000 (07:23 +0000)]
bones fix
From the newsgroup: leash found inside a bones level shop was flagged
as "in use". 3.4.0 had a fix for that which works for most cases, but not
when the shopkeeper has taken the dead character's inventory just before
saving the bones file.
This also adds an entry to the branch copy of fixes34.2 to synchronize
it with the trunk copy.