Files
nethack/doc/fixes36.2
PatR 0b93d26269 sortloot - enhanced sorting [re-revamp anyone?]
When objects are in the same class, sortloot orders them by their
formatted name.  It was reformatting each object every time it got
compared to another object.  Change that to remember the formatted
name so that any given object is formatted at most once (during the
current sort; future sorts will need to format it again).

Armor and weapon classes are subdivided into smaller subclasses
and the formatting plus alpha compare is only done for items in
the same subclass, so helms come out before cloaks and don't get
their names compared, for instance.  [That was from my 'revamp'
rather than the original implementation.]  This adds a couple more
subclass sets:  food (named fruit, 'other' food, tins, eggs, corpses,
globs) and tools (containers, pseudo-containers [bag of tricks and
horn of plenty once those have become discovered; prior to discovery,
bag of tricks is classified as a container and horn of plenty as an
instrument], instruments, 'other' tools).

The main difference, aside from the formatting efficiency improvement,
is to change the previous sort order
| pink potion
| potion of enlightenment
| purple-red potion
to be
| pink potion
| purple-red potion
| potion of enlightenment
by grouping undiscovered items before discovered items when class and
subclass match.  So discovery state is essentially a sub-subclass and
formatting plus string comparison is only done for members of the
same sub-subclass.  There are actually four state values:  unseen
(which applies to particular objects rather than to their type),
unknown (not discovered and not named), named (not discovered but has
player-assigned type name), and discovered (either fully discovered
or considered not interesting to discover [no alternate description,
not nameable]).

My testing was primarily done with pickup ('m,' with menustyle:T)
and sortloot:Loot (the default) plus !sortpack (not the default and
not a setting I ordinarily use, but less verbose without the class
separators).  It won't astonish me if oddities crop up with other
usage combinations.
2018-06-12 16:33:35 -07:00

90 lines
4.7 KiB
Groff

$NHDT-Branch: $:$NHDT-Revision: $ $NHDT-Date: $
This fixes36.2 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.1 in April 2018. Please note, however,
that another 3.6.x release is not anticipated after 3.6.2, and most developer
focus will shift to the next major release.
General Fixes and Modified Features
-----------------------------------
last line of config file wasn't being heeded if it had no newline
list MSGTYPE values shows empty strings as reported in H7140
Killing Vlad while he was in bat/fog cloud/wolf form gave poorly worded
feedback when he reverted to vampire form
spaces in hilite_status option title text field not working
numeric hilite_status values didn't allow negative numbers (needed for AC);
change them to accept leading '-', also accept unary '+' as a no-op
permanent inventory window was updated too soon when a scroll of charging
was used to [re]charge an item, not reflecting the item's change(s)
for starting inventory, don't give an orc hero lembas wafers or cram rations
targetting with a polearm could give away location of hidden monster
static prototype could be left orphaned depending on #defines in rip.c
config file error handling routines were calling xx_wait_synch early
even before the window system was initialized; add a default routine
status_finish() in botl.c would unconditionally invoke the window port's
win_status_finish() routine which was problematic if the windowport
wasn't initialized yet
using 'O' to set up a hilite_status rule for string comparison, the menu for
color was titled "choose attribute for when <foo> is 'bar'" and the
one prompting for attribute used the default "pick an attribute"
when finishing using 'O' to examine or set hilite_status rules, if the
'statushilites' option is 0 and there is at least one rule, give a
reminder about setting it to non-zero to activate highlighting
end of game disclosure was exercising Wisdom when revealing inventory and
also repeatedly updating persistent inventory window if enabled
internals for 'sortloot' option have been changed to not reorder the actual
list of objects, so changing it to 'n'one will get the original order
back and having a persistent inventory window open when performing
full-pack identify won't result in possibly skipping some items
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
------------------------------------------------------------------
fix access violation when --debug:xxxx has no other args after it
Setting the inverse attribute for gold had the space before "$:"
getting highlighted along with the gold field
Platform- and/or Interface-Specific Fixes
-----------------------------------------
windows-gui: In nethackw, there could be conflicts between menu accelerators
and an extra choice accelerator to fix H7132.
windows-tty: Specify both width and height when creating font for width testing
windows-tty: To counter lag problems that were occuring with the Win32 console
port, implement a console back buffer to reduce the number of calls
made to WriteConsoleOutputXXX
windows-tty: Additional changes to xputc_core() and early_raw_print() to
manage the cursor position correctly as that is needed to handle
raw printing correctly
windows-tty: Added check for when we might be running off the bottom of the
screen when handling msmsg()
windows-tty: Added runtime checks to keep cursor always within bounds
windows-tty: Fix memory leaks as reported in H5779
windows-tty: Use nhraykey by default if the players keyboard layout is
non-english as reported in H4216
windows-tty: We now support changing altkeyhandler in game
windows: Added ntassert() mechanism for Windows based port use
tty: significant optimizations for performance and per field rendering
unix: Makefile.src and Makefile.utl inadvertently relied on a 'gnu make'
extension when using $(VERBOSEMAKE) to reduce build-time feedback;
replace with $(QUIETCC) which operates the same but defaults to
verbose so doesn't use '$<' for multi-prerequisite targets unless
specifically requested; use 'make QUIETCC=1 <target>' to get the
3.6.1 behavior back
General New Features
--------------------
integrate aklys feature introduced in 3.6.1 into display
status_hilite options which use comparisons may now use <= and >= in
addition to previous < and >; in 3.6.1 the latter operated as if
they were <= and >= but now behave as conventional less than and
greater than; old highlight rules using them should be updated
sortloot option has been enhanced to improve object ordering; primarily,
items of undiscovered type come out before items of discovered type
within each class or sub-class of objects
Code Cleanup and Reorganization
-------------------------------