Commit Graph

7273 Commits

Author SHA1 Message Date
Pasi Kallinen
e65c921ccb Use grounded macro 2022-02-15 18:44:56 +02:00
Pasi Kallinen
f2ea207936 Monster or hero placement should avoid wall of water 2022-02-13 18:06:56 +02:00
Pasi Kallinen
c1a6dd40bc Flying should not allow monsters to walk on the wall of water
Also applies to levitating monsters.
2022-02-13 17:54:13 +02:00
Pasi Kallinen
2448ead0c4 Wall of water should block monster lined-up checks
Prevents monsters from eg. throwing items through the water.
2022-02-13 17:22:00 +02:00
Pasi Kallinen
3b2e4d682d Water walking doesn't help in wall of water 2022-02-13 14:38:54 +02:00
Pasi Kallinen
7302b87dd5 Improve avoiding walls of water 2022-02-13 14:19:40 +02:00
Pasi Kallinen
d26c7dde44 Fix the "wall of water" and paranoid:swim 2022-02-13 11:00:09 +02:00
Pasi Kallinen
73dbd39d98 Use proper locomotion when avoiding water or lava 2022-02-13 10:56:40 +02:00
PatR
a1bb10e8f6 unix command line
I wanted to be able to specify -windowtype:foo on the command line so
that I didn't have to use "NETHACKOPTIONS='windowtype:foo' nethack"
and it turned out that such an option already exists, as "-wfoo".
I either never knew about that or had completely forgotten it.  Anyway,
this makes specifying windowtype be more versatile.

"-wX11" still works; now "-w X11", "-windowtype=X11", "-windowtype:X11"
work too, with "--" variations of the latter too also supported.  The
long name can be truncated to any leading substring of "windowtype",
although it has to be at least "wi" for "--"; "--w" is rejected.

Also, any errors reported while processing the command line are
treated like config file processing errors rather than just delivered
with raw_printf().  On tty at least, they used to vanish when the
screen cleared to start the game, with no chance to read them.  Here's
an example from after this change.  It sets windowtype to tty and then
overrides that with X11.

|% ./nethack --w:Qt --win tty -wX11 -windowtype
|
|
| * Unknown option: --w:Qt.
| * Window type [nothing] not recognized.  Choices are:  tty, curses, X11, Qt.
|
|2 errors on command line.
|
|
|Hit return to continue:

This should probably be better integrated with argcheck() or vice
versa but the only change to that was a couple of formatting bits.

Anything that already worked should continue to work just the same,
aside from the improvement to the error feedback.
2022-02-12 11:42:17 -08:00
SHIRAKATA Kentaro
bb5150445a Check the return value of nhl_init() on com_pager_core()
nhl_init() can return NULL.
2022-02-12 07:45:46 -08:00
Pasi Kallinen
03c715f179 Add paranoid:swim to prevent typoing into water or lava
In the name of accessibility: Prevent moving into dangerous liquids.

Now with themed rooms, water and lava are more common, and it's
unreasonable to expect blind players to check every step for those.
With paranoid:swim, just prevent normal walking into those liquids,
unless you prefix the movement with 'm', or if the liquid would not
harm you.

Doesn't completely prevent an accidental dunking - for example
if the hero is impaired or couldn't see the liquid.

This comes from xNetHack by copperwater <aosdict@gmail.com>
with some changes to the code.
2022-02-12 17:29:32 +02:00
Pasi Kallinen
bc456938d7 Should see rusting next to you if underwater
You can see to the adjacent squares, if they're water and you're
underwater - show the item rusting there in that case.
2022-02-12 11:54:50 +02:00
Pasi Kallinen
91e2d3633e Use macro for a location next to hero 2022-02-12 11:05:10 +02:00
PatR
2b4cf04281 fix gamelog 1st kill vs 1st weapon hit sequencing
If the first monster the hero kills is killed by the hero's first hit
with a wielded weapon, report the hit first and kill second instead of
the other way around.  Not as hard to manage as I feared, but bound to
be more fragile than the simpler handling that produced the odd order.

Also while testing it I knocked something into a polymorph trap and it
changed form without any feedback.  Give foo-changes-into-bar message
if the hero is moving and can see it happening.  It isn't needed with
a monster moves deliberately into a polymorph trap but probably would
be useful when that's is unintentional.

The "<hero> enters the dungeon" log message had a trailing period but
other log messages don't have sentence punctuation, so take that off.
2022-02-11 16:17:17 -08:00
PatR
27dd93df17 more curses get_count
A couple of formatting bits I made when investigating cursor
positioning misbehavior for curses menu counts.  No change in
behavior here.
2022-02-11 12:12:35 -08:00
Pasi Kallinen
2ca8ac9a80 Make the "wall of water" stop thrown or kicked items 2022-02-11 20:38:29 +02:00
Pasi Kallinen
cd797afd0e Don't show rusting of items landing in water
When a thrown item lands in a pool of water, it immediately
rusts - but don't give that message unless the hero is at the same
location and also under the water.  My reasoning: hero can't see items
under water, and by the time the item rusts, it's in the water.
2022-02-11 20:20:24 +02:00
Pasi Kallinen
8ce3e08d00 Give a sound message when thrown item lands in water or lava 2022-02-11 20:05:46 +02:00
nhmall
5faace8b9e remove unnecessary null checks from christen_monst
Closes #681
2022-02-11 09:08:31 -05:00
SHIRAKATA Kentaro
7c1dba3f0b remove redundant null-check on christen_orc()
rndorcname() returns buf2 itself, so orcname is never NULL.
2022-02-11 16:52:50 +09:00
nhmall
9b1a501c34 error on parse_condition pr #680
The  while(s[sidx]) { ... was acting as while(1), but the
loop body contained appropriate checks and returns to
function correctly.

Fixes #680
2022-02-10 18:18:25 -05:00
PatR
0f2a1ac002 number_pad menu hack
I don't try to toggle 'number_pad' very often, but when I do I almost
always type '0' instead of 'a' for Off or '1' instead of 'b' for On
on the first attempt.  The menu shows
| a -  0 (off)
| b -  1 (on)
| c -  2 (on, MSDOS compatible)
| d -  3 (on, phone-style digit layout)
| e -  4 (on, phone-style layout, MSDOS compatible)
| f - -1 (off, 'z' to move upper-left, 'y' to zap wands)

This change makes '0' through '4' be undocumented group accelerators
for 'a' through 'e' (and '5' for 'f') in the sub-menu put up by 'O'.
tty and X11 worked as-is for '0' and required what amounts to a pair
of one-line changes to handle the other digits.

It doesn't work for curses and Qt (no idea about Windows GUI) because
they insist on treating any typed digit as the start of a count even
if one or more menu entries include that digit as a group accelerator.
(They also fail to support '0' as the group accelerator for iron-ball
class in the menu for multiple-drop.)
2022-02-10 14:18:44 -08:00
PatR
3ea4b00879 memory management
MONITOR_HEAP+heaputil pointed out some unreleased memory.  The livelog
stuff wasn't being freed.  Not surpringly the data used for collecting
and formatting build-options that just got changed from strdup() to
dupstr() wasn't being freed.  And a couple of date/version bits.
2022-02-10 12:14:27 -08:00
PatR
e02834ff87 strdup vs dupstr
mdlib.c was avoiding alloc() and dupstr() because mdlib.o gets linked
with makedefs and makedefs used to need to avoid those.  But makedefs
doesn't avoid those anymore, so mdlib.c doesn't need to either.

Replace a couple of other strdup() calls in other files too.
2022-02-10 10:25:25 -08:00
PatR
a9ba536e38 livelog/chronicle start of game
Add a log entry for the start of a new game.
2022-02-10 10:17:34 -08:00
nhmall
08da5befcb comment out some now dead code
Closes #670
2022-02-10 09:16:29 -05:00
PatR
96ba3c04d1 logging experience level changes again
The livelog message for losing a level had an off-by-1 error, showing
the level the hero ended up at rather than the level that was lost.

There was a message for regaining a previously lost level when rank
title stayed the same but no such message if the title changed (the
achievement of gaining a particular title only occurs once).

Say "regained" rather than "gained" when gaining a previously lost
level.  (Blessed potions of full healing regain levels but can also
reduce u.ulevelmax so a different way to remember peak experience
level has been added.)

Report level change due to polymorphing into new man/woman/elf/&c.
I hadn't realized that that hasn't been recording achievement for new
rank when applicable and decided to leave things that way.

Report gender change when putting on an amulet of change or becoming
a new man/&c unless hero is polymorphed at the time or experience
level is also changing.
2022-02-10 05:45:07 -08:00
Pasi Kallinen
c036c59b00 Monsters should growl even if you can't hear it
Call growl even if you are deaf, because growling also
wakes up nearby monsters. Just make growl not show the message
if you can't hear or see the monster.
2022-02-10 13:41:53 +02:00
PatR
a1feac496e cursed list vs worn light again
Fix a couple of mistakes in commit
 e8341dc9d7
pointed out by vultur-cadens.  While in read.c, reformat some of the
new livelog stuff.
2022-02-09 16:38:26 -08:00
PatR
d761263e89 livelog tweaks
Log all level gains and loses.  For the existing logging of changes
in rank, mention the level number with the new title.  Classifying
level loss as "minor achievement" seems weird but I didn't see any
choice more appropriate.

Make '#chronicle' autocomplete.  That makes "#ch" ambiguous, but
better to have to type #cha to chat than to have to completely spell
out #chronicle.  (Changing it to #journal would make #j ambigious
but might still be an improvement.)
2022-02-09 14:25:32 -08:00
nhmall
478daa0002 Merge branch 'argrath' into NetHack-3.7 2022-02-09 16:09:37 -05:00
PatR
a0771c770b flush_screen() sequencing
Call display_nhwindow(WIN_MAP) after curs_on_u().  Instead of calling
it a second time, it's simplest to just update status before updating
the map.

If anything is still leaving the cursor dangling at the end of status
I think it will now dangle at the last updated position on the map.
2022-02-09 13:02:19 -08:00
Pasi Kallinen
1e90f89203 Chronicle of major events, and livelog
Log game events, such as entering a new dungeon level, breaking
a conduct, or killing a unique monster, in a new "Major events"
chronicle. The entries record the turn when the event happened.
The log can be viewed with #chronicle -command, and the entries
also show up in the end-of-game dump, if that is available.

This feature is on by default, but can be disabled by
defining NO_CHRONICLE compile-time option.

This also contains "live logging", writing the events as they
happen into a single livelog-file. This is mostly useful for
public servers. The livelog is off by default, and must be
compiled in with LIVELOG, and then turned on in sysconf.

Mostly this a version of livelogging from the Hardfought server,
with some changes.
2022-02-09 22:49:25 +02:00
nhmall
a1b14b6b5c Merge branch 'fix-eat' of https://github.com/argrath/NetHack into argrath 2022-02-09 15:46:31 -05:00
nhmall
d0eceb9508 Merge branch 'fix-save' of https://github.com/argrath/NetHack into argrath 2022-02-09 15:45:01 -05:00
SHIRAKATA Kentaro
9bd8bcdcfb move null-check on tin_details()
Move null-check of obj and buf before their first use.
2022-02-10 05:16:29 +09:00
PatR
cfcfc3429f water description tweaks
Fix a comment typo and add a couple of extra comments.  The two minor
code changes don't affect behavior but might improve clarity.
2022-02-09 11:55:08 -08:00
SHIRAKATA Kentaro
128966bfe1 move null-check on savelev()
Move null-check of nhfp before its first use.
2022-02-10 01:25:13 +09:00
PatR
445573a01f enhanced water description
Redo how do_screen_description() handles water.  Mainly by using
waterbody_name() for farlook/quicklook and autodescribe to get
hallucinatory descriptions, but it replaces some old hackery with
quite a bit of new hackery.  Applies to lava and ice too.  The latter
is now "frozen <foo>" when hallucinating, where <foo> has a small
chance to be "water" but will usually be something like "tea" or
"clotted blood".
2022-02-09 04:16:27 -08:00
nhmall
d94ebf7396 tab to spaces follow-up
Also, the commit for 0e9ecb88fb
was missing the issue close directive, so do it here.

Closes #674
2022-02-09 05:52:55 -05:00
nhmall
0e9ecb88fb don't dereference NULL u.ustuck in dobuzz() 2022-02-09 05:47:08 -05:00
nhmall
2c7fa4a704 trap magic number follow-up 2022-02-08 19:29:27 -05:00
nhmall
947d80ec6f replace some trap function result magic numbers 2022-02-08 19:16:42 -05:00
nhmall
fe03b10208 fix mintrap() return value and resurrect dead code
fixes #672
2022-02-08 17:31:34 -05:00
nhmall
78dc1302eb Merge branch 'fix-shk' of https://github.com/argrath/NetHack into pr671 2022-02-08 16:09:52 -05:00
SHIRAKATA Kentaro
b55954b2a1 Add null-check on repairable_damage()
Add null-check of dam before its first use.
2022-02-09 05:54:27 +09:00
PatR
ed606cae8c wishing for water terrain
Allow a wizard mode wish for "wall of water" to create WATER terrain.
Previously there was no way to do that.  Wishing for "pool" and "moat"
work but "water" for terrain isn't supported because it yields a potion.
2022-02-08 11:06:26 -08:00
SHIRAKATA Kentaro
cf4cc3fa93 add null-check on fill_special_room()
Add null-check of croom before its first use.
2022-02-08 17:20:50 +09:00
PatR
a0100dd300 using prefixes via their extended command names
Trying to use #reqmenu/#rush/#run/#fight prefixes by their extended
command names didn't work because rhack()'s post-processing was stuck
dealing with the entry for the '#' key after using doextcmd() to run
any command.  Use a static variable (actually a global one since I put
it into struct g) to notify rhack() of the command that ultimately got
executed.
2022-02-07 16:53:56 -08:00
PatR
50d8463b71 <Mon> suddenly appears! vs ^G
For ^G, throttle the monster creation feedback.  Don't say "suddenly"
and don't exclaim the message, just say "<Mon> appears."  Also, use
Norep() so creating lots of similar monsters at once only gives a few
messages (just one unless varied by "next to you" vs "nearby" vs no
qualifier for farther away).  And for mimics created as objects or
furniture, report the sudden appearance of new object or furniture.
2022-02-07 15:55:04 -08:00