Commit Graph

10428 Commits

Author SHA1 Message Date
PatR
86e5022293 fix #H8534 - thrown pick-axe vs "scum!"
Change in meaning of mnearto()'s return value wasn't progagated to
shkcatch().  Make it an int instead of boolean so that it can
communicate both 'moved successfully' and 'moved but had to move
another monster out of the way to do so'.
2019-04-11 15:38:51 -07:00
nhmall
558216e0c5 Guidebook.tex corrections 2019-04-10 17:22:18 -04:00
nhmall
08af2b3b92 Merge branch 'NetHack-3.6.2' 2019-04-10 13:06:37 -04:00
nhmall
b54fd6b7c5 Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-10 12:49:30 -04:00
PatR
14ad5356e5 another STATUS_HILITES optimization
When highlighting is disabled due to 'statushilites' being 0, don't
bother checking whether any temporary highlights are timing out.
2019-04-10 04:29:10 -07:00
PatR
2e30f6916f more !STATUS_HILITES
No point in checking for timed out temporary highlights if there aren't
any highlights.
2019-04-09 17:45:32 -07:00
PatR
2724c88191 Guidebook update
Tweak the status hilites section.  Add a bit of detail about how to
specify both color and attribute and/or multiple attributes.  Also,
change the Guidebook's table of status fields to be column-oriented.
With the exception of 'score', reading down the three columns now
matches going across the status lines.  The previous ordering started
row-oriented but then became scrambled compared to the usual display.

As usual, Guidebook.tex is best guess....
2019-04-09 15:46:19 -07:00
nhmall
d4dc1c1eab Merge branch 'NetHack-3.6.2' 2019-04-09 17:29:28 -04:00
nhmall
3b82956360 Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-09 17:29:15 -04:00
PatR
24d09e64a3 tty blink & dim attributes
Enable blink and dim for the TERMLIB + !NO_TERMS configuration of the
tty interface.  Blink now works the same as in the curses interface
for status highlights.  The terminal emulator I'm using has an escape
sequence for dim but it evidently doesn't do anything (same no effect
as with curses), so that isn't adequately tested.
2019-04-09 13:16:54 -07:00
nhmall
730f9684eb vs nhsetup bit 2019-04-09 00:41:12 -04:00
nhmall
5258bb0ed4 adjust for recently released MS Visual Studio 2019
win\curses\cursstat.c(886) : error C4703: potentially uninitialized local pointer variable 'p' used
2019-04-09 00:35:02 -04:00
nhw_cron
42343e6287 This is cron-daily v1-Feb-22-2019. guidebook updated: doc/Guidebook.txt 2019-04-07 16:25:19 -04:00
nhw_cron
4b5d2c5830 This is cron-daily v1-Feb-22-2019. files updated: Files 2019-04-07 16:24:26 -04:00
nhmall
ea1f04959f Merge branch 'NetHack-3.6.2' 2019-04-06 21:08:01 -04:00
nhmall
e05c0323ea Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-06 21:03:41 -04:00
PatR
0e425d645f curses vs !HILITE_STATUS
The curses interface wouldn't build with HILITE_STATUS disabled.  I
started adapting it to handle genl_status_update() but that was taking
too much effort with each niggling detail leading to another.  This
goes the opposite direction:  forcing the old STATUS_VIA_WINDOWPORT
behavior without having that #define available.  That dragged along a
bunch of unexpected changes too.
2019-04-06 15:53:51 -07:00
PatR
f52e9865f2 fix #H8481 - placing monster at <0,0>
mon_arrive() -> m_into_limbo() -> migrate_to_level() -> wormgone()
followed by place_monster() "for relmon".  relmon() was changed (last
November, cc5bb44a9a) to not require
the monster be on the map, so just get rid of the place_monster() that
was trying to put the "gone" long worm at <0,0>.

Also, another m_into_limbo() bit:  make mdrop_special_objs() check the
location and send any dropped items to random locations if the monster
dropping things isn't on the map, instead of placing them at <0,0>.
2019-04-06 12:57:29 -07:00
nhmall
a30fba15b3 Merge branch 'NetHack-3.6.2' part 2 06-Apr-2019 2019-04-06 09:34:15 -04:00
nhmall
add4540ba9 Merge branch 'NetHack-3.6.2' 2019-04-06 09:13:20 -04:00
nhmall
139d429c1d Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-06 09:13:11 -04:00
PatR
0bfd12dd16 tty status
Take care of a minor 'TODO' and make another stab at getting truncated
encumbrance and/or level-description to reset to full size when enough
space becomes available.
2019-04-06 05:36:29 -07:00
nhmall
9a51f8c06f Merge branch 'NetHack-3.6.2' 2019-04-06 08:22:49 -04:00
nhmall
5e53f7995b Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-06 08:22:01 -04:00
PatR
b7a884289d botl.c functions
Put the prototypes for routines in botl.c into the same order as the
corresponding functions are in the file.  Also a few were missing and
another few used STATIC_OVL when STATIC_DCL was appropriate.
2019-04-06 01:08:16 -07:00
nhmall
7cefa8331f Merge branch 'NetHack-3.6.2' 2019-04-04 22:37:28 -04:00
nhmall
5ceda78475 Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-04 22:33:59 -04:00
PatR
8c4e792770 curses ">>" (terse "--More--")
I've noticed many instances of the game pausing and not being sure why,
then pressing <space> and having it resume.  The curses interface had
a tendency to put its equivalent of the --More-- prompt, >>, somewhere
where that wasn't visible, either off the right hand edge (possibly) or
underneath the window borders if those were enabled.  Especially the
very last one it issues prior to exit.  (An extra one compared to tty
behavior.)

This ended up being a pretty substantial overhaul of message window
handling.  I wouldn't be surprised if it has off-by-one errors which
happen to be paired up and cancel each other out.  ">>" is still drawn
in orange if guicolor is on, now in inverse video when that is off.
If it happens to be drawn at the same screen location in consecutive
instances, the first ">" will toggle between blink and not blink so
that there'll be no doubt as to whether the keypress registered when
dismissing it (moot if the text preceding it is different but there's
no attempt to be smart enough to check that, just screen placement).
2019-04-04 17:55:40 -07:00
PatR
00aa7206f7 opthelp bit 2019-04-04 15:08:56 -07:00
keni
1386d39b32 Merge branch 'NetHack-3.6.2-beta01' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.6.2-beta01 2019-04-04 17:01:48 -04:00
keni
e0e937e7b6 Solaris hints files from Kevin Smolkowski 2019-04-04 17:00:51 -04:00
PatR
e5fea0291e curses prompting
Make the same fix to curses that was done for tty in 3.6.1:  don't
let MSGTYPE entries be matched against prompt strings.  Like tty,
curses was using ordinary pline() to issue prompts; something like
MSGTYPE=hide"yn"
could wreak havoc.  Switch to custompline(OVERRIDE_MSGTYPE,...).
2019-04-04 13:52:14 -07:00
nhmall
bfddda7c41 Merge branch 'NetHack-3.6.2' 2019-04-04 08:13:16 -04:00
nhmall
385cfedc84 Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-04 08:13:04 -04:00
PatR
505997a702 couple of comment tidbits 2019-04-03 18:31:25 -07:00
nhmall
abfd80d3d7 Merge branch 'NetHack-3.6.2' 2019-04-02 12:25:16 -04:00
nhmall
d11d91a072 Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-02 11:21:10 -04:00
PatR
add4d4d724 untested build fix for term_attr_fixup()
modified:
  sys/mac/mttymain.c
  sys/msdos/video.c
  sys/winnt/nttty.c
2019-04-02 07:38:57 -07:00
PatR
be966cfe5a curses ^P msg_window:Full
This changes the recently added msg_window:f for curses to start
viewing the old messages on the last page rather than the first.  For
msg_window:Reversed (the default for curses) and for either direction
when all of the message history happens to fit on one page, there's
no change.  But for multiple pages, the FIFO feedback now pads the top
of the first page with blank lines so that the last page is full, and
it starts out showing that last page first.  So if you only want to go
back few or several messages, they will be in view immediately.

Old layout:
|first message (oldest)   |  |1st message of last page |
|2nd message of 1st page  |  | ...                     |
| ...                     |  |final (most recent) mesg |
| ...                     |  | (blank filler)          |
|last message of 1st page |  | (blank filler)          |
|             (1 of 2) => |  |          <= (2 of 2)    |
and ^P started with first page visible and needed normal menu handling,
<space> or '>' or '|', to go forward to view the most recent messages.

New layout:
|1st message of last page |  | (blank filler)          |
|2nd message of last page |  | (blank filler)          |
| ...                     |  |first message (oldest)   |
| ...                     |  | ...                     |
|final (most recent)      |  |last message of 1st page |
| <= (2 of 2)             |  |    (1 of 2) =>          |
and ^P starts on last page (two of two in this example) but can go
back with '<' and '^'.

So if the total size takes one and third pages (which isn't uncommon
for the default number of kept messages), you'll see 3/4 of the most
recent messages on the initial screen, then you can page backward if
you want to see the other 1/4.

The page indicator is deliberately drawn a bit differently just to
draw attention to the fact you're starting on the last page.  I'm not
sure whether that is actually worthwhile but it was trivial to do.
2019-04-02 01:11:59 -07:00
nhmall
3bf0029d56 Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2 2019-04-02 01:45:00 -04:00
PatR
72696a36a5 build fix for X11-only
I didn't noticed this because I've been building for tty+curses+X11
and either of the first two cause iflags.extmenu to exist.  Make it
unconditional; there's not much benefit from trying to suppress it
for configurations that don't need it.
2019-04-01 14:56:00 -07:00
PatR
10dac50433 X11 extended commands menu scrolling
Support for scrolling within menus via first-/previous-/next-/last-
page keystrokes ("^<>|" by default) was added to X11's general menu
handling but the extended commands menu uses a special menu rather
than a general one.  This clones the relevant code to add support for
those keys to extended commands.
2019-04-01 09:27:09 -07:00
PatR
0cad960428 X11 extended command selection
The expansion of the extended commands list to include every command
has made picking extended commands out of X11's menu become tedious.
This uses the existing 'extmenu' option (previously tty-only) to
control whether all the commands are present or just the traditional
subset not bound to non-meta keystrokes ('adjust', 'chat', 'loot', &c).
2019-04-01 08:58:49 -07:00
PatR
cd12422af5 curses message suppression
The curses interface was using 'moves' as if it meant "moves" rather
than "turns".  Typing ESC at >> (curses' terser version of --More--)
prompt would suppress messages for the rest of the current turn rather
than just the rest of the current move.  So if the hero got an extra
move due to being Fast, there would be no feedback during that move.
2019-03-31 15:34:46 -07:00
PatR
0a847f46f9 streamlined status update for 'time'
When the 'time' option is on and context.botl isn't already set,
call a simpler status update routine that ignores all other fields.
When that flag is already set, full status update takes care of time
along with the other fields.

Expected to reduce bottom lines processing time but not screen I/O.
Only lightly tested.
2019-03-31 08:23:36 -07:00
PatR
c8fdb040cb curses status highlighting
window.doc states that the colormasks argument to status_update() is
only relevant for BL_CONDITION, but curses was relying on it to be
passed for BL_FLUSH as well.  Yesterday's changes stopped the latter
and broke highlighting of status conditions.  Other interfaces appear
to honor the description in window.doc.
2019-03-31 07:04:23 -07:00
PatR
c63d3fbfbb bogus status updates
I finally figured out why status gets updated periodically even if
none of the fields have changed.  Once a temporary highlight times
out, it starts a cycle of timeouts every 'statushilites' turns.  When
I worked on this before, it was convoluted but not this convoluted.

In moveloop, if 'context.botl' call bot; in bot
  call evaluate_and_notify_windowport;
  for each field, call evaluate_and_notify_windowport_field:
    call hilite_reset_needed and set 'reset' to the result;
    if 'reset' is True then do status_update
      and set 'curr->chg' and 'prev->chg' to True.
Then in moveloop call status_eval_next_unhilite:
  for each field
    if 'curr->chg' set 'curr->time' to moves+hilite_delta;
    on the call after hilite_delta ('statushilites') moves,
      call hilite_reset_needed which returns True if there is any
      rule for temporary highlight and set 'context.botl'.
Go back to start.  If multiple fields had temporary timeouts and
they were activated on different turns so expired on different turns
you could conceivably end up with context.botl being set every turn.

My first writeup trying to explain all this was wrong.  I won't
testify about the accuracy of this one in court....

This extends the highlighting data structure to track the current
rule that's in use.  And for that to make sense, it eliminates the
merging of settings from multiple matching rules.  So anybody with
 hit-points/up/inverse
 hit-points/up/green
 hit-points/up/bold
will need to manually merge their rules like
 hit-points/up/green&inverse+bold
or else whichever rule matches last will be the only one in effect.

There are a lot of miscellaneous changes made as I flailed about.
The three most significant ones are that there is no guesswork over
what kind of highlight rule is in effect, status_eval_next_unhilite
will only set a timeout value if the current rule is for a temporary
highlight, and hilite_reset_needed will only return True if a timeout
is for a temporary highlight (probably moot after the _next_unhilite
change).
2019-03-31 00:33:33 -07:00
PatR
4ca8f6428b status line title field
Status formatting used to truncate the Name portion of "Name the Rank"
or "Name the Monster-type" at 10 characters even if the rank or monster
portion left room for more.  Change that to keep as much of the name as
will fit.  The truncation might vary over time as new experience levels
produce new rank titles of differing lengths, but I don't think that's
a problem.  For truncated names, it still keeps at least 10 characters
even if that leaves the field longer than the target length for title
(which used to be 29 but now is 30).
2019-03-30 17:46:16 -07:00
PatR
68542da636 curses: save/restore message history
Have the curses interface save and restore message history for use
by ^P.  It doesn't spit the saved messages out into the visible
message window after restore; that's too distracting.
2019-03-29 17:03:03 -07:00
PatR
14d8ed199e tty: panning while clipped
Noticed while testing statuslines on a small terminal window.  Using
the cursor to pick locations that panned the map to view a new subset
would end up showing a new view of the regular map rather than a
different section of what was currently displayed.  For farlook that
caused monsters to take on new hallucinatory forms which was fairly
inconsequential, but for #terrain and various forms of detection it
reverted to the ordinary map instead of showing the map features that
the player requested or the temporarily revealed monsters and such.

Most interfaces keep track of the whole map and just show their view
of the new subset when panning, similar to redisplay after being
covered up and then re-exposed, but tty isn't doing that.  I made
same change to Amiga as to tty since the code it was using was very
similar.  I haven't touched any of the other interfaces and assume
that they don't need this.  I've verified that curses and X11 don't.
2019-03-29 14:35:36 -07:00