OSDN Git Service

set portable directory setting like 3.6.1
[jnethack/source.git] / doc / fixes36.3
1 $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.197 $ $NHDT-Date: 1575173931 2019/12/01 04:18:51 $
2
3 This fixes36.3 file is here to capture information about updates in the 3.6.x
4 lineage following the release of 3.6.2 in May 2019. Please note, however,
5 that another 3.6.x release is not anticipated, and most developer
6 focus will shift to the next major release.
7
8 General Fixes and Modified Features
9 -----------------------------------
10 when place_object() puts a non-boulder on the map at a spot which contains
11         other objects, put it under all boulders in the pile rather than just
12         under the top one; previously, map wasn't showing a boulder there if
13         the top one got moved by means other than pushing
14 when examining the map with '/' or ';', picking a symbol which is used for
15         more than 4 things yielded a sentence lacking its terminating period
16 billing and payment issue as a result of glob coalescing
17 glob pricing did not consider weight properly
18 glob shop interaction improved to handle more of the expected scenarios
19 non-flying steed on Plane of Water would drown when air bubble moved hero
20 xans fly, but could not reach your feet if you flew
21 adjust vortex database entry to be consistent with fire and energy vortices
22 when co-located with a boulder you could sometimes swap places with pets of
23         any size
24 on rare occasions, multiple mine's end luckstones were being marked as the
25         prize and triggering an impossible() on a public server
26 make sure the correct luckstone is the prize in mine's end
27 free dungeon overview's bones information at end of game
28 free current level's bones information at end of game
29 free ball and chain if Punished hero dies while descending stairs or dies or
30         quits while swallowed; put ball and chain in bones for the stairs case
31 if hero dies while a thrown or kicked object is in transit, put that object
32         on the map in case bones data gets saved
33 fix a memory leak that occurred if player used wizard mode to leave and return
34         to the Plane of Air or Plane of Water (not possible in normal play)
35 free sortloot data if object handling is short-circuited by cockatrice corpse
36 on the Plane of Water, make water go all the way to the edges of the level
37 on the Plane of Air, make clouds disrupt line of sight along the edges
38 have '&' (whatdoes) command describe movement keystrokes instead of reporting
39         them as unknown or showing their number_pad action when that is Off
40 some improvement to the handling of endgame levels filling up with monsters
41 if you survive turning into green slime due to life-saving (surviving as a
42         green slime) then die again due to green slimes having been genocided,
43         the feedback was strange because it assumed that the prior message
44         came from answering No to "Really die?" in explore or wizard mode
45 various cases where objects had their bless/curse state become known weren't
46         updating persistent inventory window, when enabled, to reflect changes
47         (cited case was trying to remove cursed armor and being told of the
48         curse but there were lots of other situations with the same issue)
49 similar perm_invent issue when lock state known and/or contents known become
50         set for carried container
51 blessed scroll of remove curse read while confused might be shown to operate
52         on itself by perm_invent after player is told that it has disappeared
53 fix memory leak if corpse auto-revival attempt failed ("you feel less hassled")
54 allow a parent function to issue an an unplacebc() call that restricts
55         subsequent placebc() calls to that parent only
56 flying monsters could enter water on the Plane of Water but then they'd drown
57         unless they could also swim or else didn't need to breathe
58 when finding a place to put a monster on the Plane of Water, don't pick a
59         water location for flyers or floaters (levitate) or clingers (ceiling)
60 #turn worked when unable to speak despite "you chant an arcane formula"
61 #turn implicitly required sight due to wrong check for avoiding spanning walls
62 thrown or kicked light source (lit lamp, candle, oil) should emit light as it
63         traverses the map; dungeon features, objects, or monsters seen while
64         it's in transit will become part of hero's memory of the level, and
65         any messages delivered won't have stale light from it around the hero
66 unlike watching a monster trying to swap out a cursed weapon for some other
67         weapon and failing, watching it wield a cursed weapon didn't report
68         that weapon becoming welded to the monster's hand/claw/whatever
69 accept "hidden" as an attribute for wizard mode ^G monster creation; created
70         monsters which can't be seen will have their locations highlighted
71 don't give feedback for monster zapping a wand if a monster plays a fire horn
72         directed at self to burn away slime
73 if hero knows the number of charges in a wand or magical horn and a monster
74         acquires it and zaps/plays it when not in view, remove the hero's
75         memory of the number of charges
76 for wizard mode 'monpolycontrol', allow usually disallowed type 'chameleon',
77         'doppelganger', or 'sandestin' as answer to "change <monster> @ <x,y>
78         into what?" prompt when <monster> is really that type of creature
79 add Space, Return, and Escape to '? k' (help for menu control keys)
80 hero can no longer negotiate a bribe with a demon lord when deaf
81 wishing for "foo amulet" now yields an "amulet of foo" rather than random one
82 code in parse_conf_file() to trim trailing blanks/cr was skipping over them
83 partly eaten food with one bite left had message anomalies when eaten; the
84         usual "you resume your meal" case lacked the "you're finished" message
85         when done; eating something else in between to clobber meal context
86         resulted in no messages at all when restarting and finishing last bite
87 wizard mode ^I menu could list "Not carrying anything" after inventory items
88         if perm_invent option was On (even on tty where that's not supported)
89 wizard mode ^I with 'perm_invent' On would unintentionally filter the content
90         of the persistent inventory window to unIDed items if any item got
91         chosen to be identified (^R would fix it, as would any invent change)
92 change #adjust to treat carrying only gold as not having anything to adjust
93 saving bones with 'perm_invent' On could result in "Bad fruit #N" warnings
94 update persistent inventory window immediately if 'sortpack' option is toggled
95 grammar bit for wizard mode final disclosure; attribute section could show
96         "You had N experience points, 1 more were needed to attain level X+1."
97 if an engulfer has any worn items, hero could pick them up from inside and
98         they wouldn't be unworn properly, eventually triggering warnings or
99         worse (Juiblex will wear an amulet if created with one; a shapechanger
100         might wear one and then turn into an engulfer)
101 kicking an altar ignored god's wrath if hero injured himself during the kick
102 detect unseen/secret door detection/^E failed to find monsters hiding under
103         objects and failed to find monsters hiding at trap locations
104 when farlook describes a monster at a visible spot as trapped, reveal the trap
105 fix theft when poly'd into nymph form; 3.6.2 change made that anger the victim
106 hero poly'd into nymph would steal gold along with other items
107 change wizard mode #panic to require "yes" if 'paranoid_confirm:quit' is set
108 add some additional validation checks when setting up a new timer (triggered
109         by an ancient source comment rather than by any observed problems)
110 if a chaotic monk or wizard gets crowned and is given a spellbook rather than
111         Stormbringer as the crowning gift, don't describe the hero as having
112         been "chosen to steal souls for [Arioch's] glory"
113 for multi-shot shooting by monsters, a typo checked hero's weapon for
114         compatibility with ammo when monster was wielding an elven bow
115 when a boulder was teleported, if it landed in a pit or trap door or hole its
116         former location wasn't updated to show that it wasn't there anymore
117         (noticed in Sokoban but not limited to there)
118 Terry Pratchett tribute, fix typo in passage #4 for Mort ("the" -> "they");
119         also passage #7 for Soul Music ("genious" -> "genius");
120         and passage #11 for The Light Fantastic ("to" -> "do");
121         passage #3 for Eric ("short" -> "sort");
122         passage #10 for Witches Abroad ("was" -> "what")
123 fix typo in end_of_input() present since 3.6.0 that would prevent compilation
124         for NOSAVEONHANGUP+INSURANCE configuration
125 when a status condition becomes fatal, keep it listed as an active condition
126         during disclosure and/or dumplog rather than having it already reset
127 when a shape-shifted sandestin was turned to stone, it died and reverted to
128         sandestin form with 0 HP; that confused known_hitum() because
129         sandestins are immune to stoning; net result was monster dying twice,
130         triggering "dmonsfree: N removed doesn't match N+1 pending" warning;
131         instead of dying, make it revert to sandestin form with full health
132 toggling perm_invent (where supported) while swallowed or underwater didn't
133         necessarily update the persistent inventory window right away
134 have 'O' update persistent inventory window if 'implicit_uncursed',
135         'menucolors', or 'guicolors' (curses) is toggled or if menucolors is
136         On and any menu color patterns are added or removed
137 'O's "set <option> to what?" could be used to force a buffer overflow
138 'O's response to bad 'statuslines' value said "must be 2 and 3" (at one point
139         it was "must be between 2 and 3", change it to "must be 2 or 3")
140 when spellcasting monster aimed at wrong spot due to not being able to see
141         invisible hero, feedback could be erroneous if hero could see self
142         [messages used 'if (Invisible)' test where 'if (Invis)' was meant]
143 prevent impossible when guard tries to relocate a monster on a full level
144 hallucination provides partial protection from passive gaze counterattack
145         against hero's attack; check for that before checking for free action
146 feedback from blessed potion of restore ability never reported "you feel great"
147         due to bad logic for not-unihorn case in unfixable_trouble_count()
148 when rubbing a ring on a touchstone, all types of rings were treated as if
149         they were gems; an iron ring made a cyan streak instead of yielding
150         "scritch, scritch" and a gold ring made a yellow streak rather than
151         a golden scratch
152 zapping self with wand of opening or spell of knock to escape from a trap
153         reported "you're released from <trap>" rather than "from the <trap>"
154 zapping self with wand of opening or spell of knock to escape from a pit trap
155         didn't reset vision limits--only spots adjacent to pit were visible
156 wielded aklys that returned to hero when thrown while inside an engulfer left
157         a stale 'thrownobj' pointer that triggered "add_to_minv: obj not free"
158         panic if same weapon killed any engulfer via melee from inside
159 uarmh null pointer dereference if a helm of opposite alignment came off due
160         to being polymorphed
161 verb tense was inappropriate in some messages when a mon/pet had a name
162         ending in 's'
163 orctown booty items should have been initialized in mksobj()
164 query_category() and whatdoes_help() had early returns which could each leave
165         a temporary window around, which in turn might eventually lead to a
166         panic due to lack of window slots [probably moot for unmodified 3.6.x;
167         the query one couldn't happen unless there is a coding error for
168         object classes somewhere and the help one couldn't happen unless the
169         installed data files left 'keyhelp' missing]
170 ball and chain could end up too far from punished hero (triggering b&c warning
171         for wizard mode with sanity checking active) when crawling out of
172         water failed because dropping stuff left hero overly encumbered and
173         hero was life saved--or player declined to die--if the hero got
174         teleported one step further from ball and chain's current location
175 avoid 'object lost' panic when polymorph causes loss of levitation boots or
176         water walking boots which dumps hero into water where emergency
177         disrobing/dropping in order to crawl out chooses to drop those boots
178 'sortloot's attempt to group musical instruments separately from other tools
179         didn't work as intended due to missing 'break' in sortloot_classify()
180 <shift><letter> running told player about engravings as they were being moved
181         over but buffered output didn't show it until hero stopped, so it
182         wasn't possible to tell where they were, unlike all other forms of
183         multiple movement; so stop running if/when an engraving is reached
184 fix exploding land mine moving ball or chain and causing a sanity error
185 fix firing attached iron ball when swallowed causing a sanity error
186 fix vault guard impossible when he could not relocate in certain situation
187 fix temple priests or shopkeepers moving over other monsters
188 fix hero still hiding under a statue shattered by a land mine
189 fix helping a monster out of a pit addressing a deleted trap
190 fix launched rolling boulder code accessing deleted trap
191 fix monster stepping on a land mine code accessing deleted trap
192 revise 'O' to show symbol sets in the same order they appear in the symbols
193         file and order the sets in dat/symbols to yield a sensible symset menu
194 yellow dragons had green breath
195 partly eaten food in a bones level shop would show a non-zero sale price
196         while on the floor but not be placed on shop bill if picked up;
197         sale price should have been "no charge"
198 when non-empty container is dropped in shop and hero is asked whether to sell,
199         counting the subset of contents owned by hero vs those owned by shk
200         could obtain wrong answer because the container had been placed on
201         the floor but the 'unpaid' and 'no_charge' flags of its contents
202         hadn't been updated yet, they were still set for when it was carried
203 in a shop which doesn't care about tools:  You drop a <box> containing 1 item.
204         <Shk> offers you <gold> for your items in your <box>.  Sell them?
205         [plural 'items' and 'them' were including the box along with the one
206         item in it even though shk was only offering to buy its contents]
207 grammar correction for "That walking shoes is really a small mimic" when
208         applying a stethoscope
209 mimic immitating a slime mold would change fruit type when player assigned new
210         named fruit
211 parsing for the argument to 'scores' option was sloppy; "3a/o" (slash) and
212         "3a 1o" (space and digit one, not lowercase L) both worked but "3a o"
213         (just space) was supposed to but didn't
214 wizmakemap could leave genocided monsters on map
215 when entering Astral level, initial rendering of guardian angel didn't show
216         it as tame; noticeable if the level was entered with 'hilite_pet' On
217 fix a leashed pet polymorphed into a long worm staying leashed
218 prevent leashing unsolid monsters and monsters with no extremities
219 playing musical instruments gave feedback which ignored deafness
220 some other deafness-related message corrections
221 when dipping into holy/unholy water while blind (where the glow message is
222         suppressed), clear dipped item's bknown flag unless water potion's
223         bless/curse state is known
224 playing music while hallucinating:  message misspelled "butterflies"
225 putting on gloves while having slippery fingers transfered slipperiness to
226         those gloves; taking off slippery gloves directly was disallowed but
227         losing them in other ways transfered slipperiness to bare fingers
228 when a monster reads a scroll of fire to cure sliming, don't access that
229         scroll's memory after it has been used up (bcsign)
230 monster vs monster attacks didn't handle shades or silver weapon feedback
231 successful alchemy would show new potion's description (color) even when blind
232 dipping some types of objects into oil would yield "<object> gleams with an
233         oily sheen" even when blind
234 dipping into an undiscovered potion would offer chance to give a name to the
235         potion even when its description wasn't known (picked up while blind)
236 dipping lichen corpse into acid when not blind and acid was undicovered would
237         not offer a chance to give a name to the potion after lichen feedback
238 pluralization improvement for words ending in a k-sound like "biotech"
239 check for whether a monster was entering a region (gas cloud) erroneously
240         depended upon whether or not the hero was inside the same region
241 all Is_*_level tests during early startup would test as true until
242         dungeon_topology was initialized in a new game or restored from 
243         a save file
244
245
246 Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
247 ------------------------------------------------------------------
248 elemental_clog() loop needed to guard against obliteration of the monster
249         that was trying to be placed
250 using ^G to create "hidden mimic" shouldn't have marked it as undetected since
251         mimics 'hide' by appearing to be something else; honor "hidden" for
252         'hides_under' creatures if/when created at location with object(s),
253         also for eels and other fish if/when created at water location
254 for wizard mode 'wizweight' option, glob weight wasn't shown unless glob had
255         shop price information attached
256 fix for feedback when a monster plays a fire horn at self to cure green slime
257         ended up being used for zapping a wand of fire at self too
258 wizard mode ^I "not carrying anything" still claimed "not carrying anything"
259         if "(all items are already identified)" was given
260 monster throwing from stack of missiles (darts, daggers, spears) would cause
261         crash if it wasn't wielding a weapon (bug in multi-shot shooting fix)
262 surviving death while polymorphed would yield "You are a <foo>" without
263         terminating period
264 'mksobj failure' commit resulted in wrong corpse types for dying monsters
265 a recent intended sanity check fix inadvertently bypassed placing a thrown
266         chained ball back onto the floor
267 in symset:curses, symbol S_tree was accidentally set to horizontal line where
268         plus-or-minus sign was meant; also, change S_bars to not-equals sign
269 percentage highlighting for Xp broke up/down/changed highlighting for it;
270         it was flagged as having gone up every time the percentage changed
271 deaf change to zap_over_floor needed to be restricted to player actions only
272 monster vs shade attack inflicted damage despite "passes harmlessly through"
273 fix for feedback from musical instruments played while deaf ignored whistles
274 special map display symbol S_player_override renamed to S_hero_override
275 curses: sometimes the message window would show a blank line after a prompt
276 curses: the change to show map in columns 1..79 instead of 2..80 made the
277         highlight for '@' show up in the wrong place if clipped map had been
278         panned horizontally
279 curses+'perm_invent': menu coloring patterns which match ordinary inventory
280         menu might fail to match persistent inventory window because leading
281         article and space ("a ", "an ", "the ") is stripped off for brevity;
282         perform the pattern matching tests before stripping doname() prefix
283 tty: revert the attempt to fix "message line anomaly: if autodecribe feedback
284         wrapped to second line, the wrapped portion wasn't erased when a
285         shorter line was shown or getpos was dismissed" because it disrupted
286         prompts that spanned more than one line, a more significant issue
287
288
289 Fixes post-beta1
290 ------------------------------------------------------------------
291 fix several tribute typos
292 pluralization correction for unlikely epoch and loch
293 ensure that --showpaths displays the personal configuration file last
294 don't strip leading slash from hallucinatory monster name "/b/tard"
295 quaffing unknown potion of see invisible resulted in asking what to call the
296         potion while updated monster display was buffered so not yet shown,
297         hence potentially noticeable effect was concealed from player
298 when Riders use their bargethrough capability, don't let them swap places with
299         something located at a spot where corpses can't be created (their
300         door opening ability was letting them exchange places with something
301         co-located with a closed door without opening it; if killed there,
302         there'd be no corpse so no auto-revive)
303 putting on levitation boots while on sink would crash when attempting to set
304         the enchantment known flag on Null 'uarmf' pointer
305 look-at of mimics mimicking altars got an arbitary alignment from misuse of
306         underlying terrain
307 polymorph_sink creating an altar passed a call to rn2() as an argument to a
308         macro which evaluates its parameter more than once
309 if a monster (presumably sensed but not seen) was displayed at a location
310         showing "remembered, unseen monster", remove that since hero now knows
311         something else is there (3.6.1 had similar fix for warned-of monsters)
312 clairvoyance showed all monsters in range, then after player viewed the map,
313         replaced them with "remembered, unseen monster" glyph and finally
314         did a normal monster refresh; the 'I' glyph step clobbers remembered
315         object at same spot, so skip it for locations where monster refresh
316         is going to immediately redisplay a monster
317 take holes that you avoided into consideration when you're on the brink
318 update window port spec to include a color-availability table that the window
319         port can set; merge all has_color() implementations into one central
320         function in src/windows.c which uses a few data checks only and
321         elminates multiple string function calls for each map cell update
322         that were being done in some cases previously
323 taking off a fedora or dented pot (no-delay helmets) left the helmet stuck
324         and took off hero's suit
325 unix: fix double DLB definition in linux hints file
326 windows: fix --showpaths output for the data file which relies on being
327         constructed programmatically to incorporate the version suffix
328 windows+tty: add code to make keypad support for swap_yz behave (currently
329         commented out in include/ntconf.h)
330 windows: fix self-recover user prompting (tty, curses, mswin)
331
332
333 Platform- and/or Interface-Specific Fixes or Features
334 -----------------------------------------------------
335 EDIT_GETLIN: wizard mode 'monpolycontrol' was using the getlin() answer buffer
336         to format the coordinate portion of the "change <monster> @ <x,y> into
337         what kind of monster?" prompt, resulting in "<x,y>" as default answer
338 EDIT_GETLIN: when naming an object or a monster use the existing name, if
339         there is one, as the default answer
340 EDIT_GETLIN: using 'O' to set message types or menu colors was overloading the
341         answer buffer with other stuff, resulting in bogus default response
342         during repeat prompting
343 EDIT_GETLIN: for paranoid confirmation, if answer was neither "yes" nor "no",
344         don't supply the rejected answer as the default when retrying
345 USE_FCNTL: nethack wasn't closing lock file 'perm'
346 curses: very tall menus tried to use selector characters a-z, A-Z, and 0-9,
347         but 0-9 should be reserved for counts and if the display was tall
348         enough for more than 62 entries, arbitrary ASCII punctuation got used
349 curses: when all available lines in the message window are in use,
350         autodescribe feedback for 'pick a position with cursor' overwrote
351         the last line (usually the 'pick a position' prompt/hint), sometimes
352         leaving part of longer underlying line's text visible
353 curses: if message window is only one line, cancelling some prompts with ESC
354         left the prompts visible on the message line instead of erasing them
355 curses: support EDIT_GETLIN (but like with tty, it's disabled by default) to
356         pre-load an earlier response as the default answer for some prompts
357         (however, it's skipped if the 'popup_dialog' option is On)
358 curses: when display windows get reconfigured (after setting align_status,
359         align_message, statuslines, windowborders or due to external resize),
360         the message window was being refreshed with most recent message and
361         the oldest available N-1 messages rather than next to most recent N-1.
362         [Still room for improvement when short lines are combined or long
363         ones are wrapped, where it still shows a subset of N original lines.]
364 curses: plug memory leak when getting a line of input is cancelled by ESC
365 curses: after requesting a line of input from player, next line of message
366         window could end up being skipped
367 curses: don't convert ^M (or <return> or <enter> key) into ^J; both ^J and ^M
368         indicate end of input when typing a line of text but as nethack
369         commands, ^J means run toward bottom of screen (when number_pad is
370         off) and ^M is not bound to any command, so accidental <return> won't
371         cause the hero to try to move
372 curses: draw map in screen columns 1..79 like tty, rather than in 2..80
373 curses: make text windows wider so that help feedback is more readable
374 curses: using ':' for toggling menu items which match a search string, in a
375         multi-page menu it would highlight arbitrary items on the currently
376         visible page in sync with lines that matched items have on other pages
377 curses: when map window was clipped, position bars shown to indicate which
378         part of the map was in view didn't work as intended, always drawing
379         "*--------------" for horizontal (and comparable '*' with multiple '|'
380         underneath for vertical) when it meant to show "---******------" if
381         the 2nd and 3rd fifths (for example) were currently within view
382 curses: support users's setting for erase char and kill char when getting a
383         line of input with 'popup_dialog' Off (already supported for popup On)
384 curses: support erase char and kill char when choosing an extended command
385 curses: attempting to use ^H to rush left actually executed ^G (#wizgenesis)
386 curses: disable the attempt to support Ctrl+Left_click as an alternate way
387         to generate Right_click for systems with one-button mouse or trackpad;
388         the mouse data passed to nethack didn't match the curses (ncurses on
389         OSX 10.11) documentation and things didn't work as intended
390 curses: menu coloring required that both 'menucolors' and 'guicolor' be On;
391         for menus, ignore 'guicolor' and honor more-specific 'menucolors'
392 curses: support symset:curses and symset:DECgraphics for map display
393 curses: enable the 'use_inverse' boolean option (via wincap WC_INVERSE flag)
394         for extended monster detection and black&white lava; forced to True
395         to override default of False (for tty's benefit)
396 curses: force 'O' command's menus for 'symset' and 'roguesymset' options to
397         be wider so that fewer entries with set descriptions will wrap
398 curses: stop restricting menu width to half the display width
399 curses+'perm_invent': entries were wrapping without any control; usually not
400         noticeable because next entry overwrote, but visible for final entry
401         when whole inventory fit within the available height; looked ok with
402         borders Off but clearly wrong for borders On
403 curses+'perm_invent': if too many entries for window height, last one which
404         fit had the next one appended (including hightlighted selector letter)
405         when window borders were Off
406 curses+'perm_invent': top line was wasted (left blank) when borders Off
407 curses+'perm_invent': don't highlight inventory letters since nothing is
408         selectable from the menu comprising the persistent inventory window
409 curses+'perm_invent': could crash during restore if game was saved while
410         hero was swallowed (invalid u.ustuck pointer; suppressing attempts to
411         update persistent inventory window during restore hides the problem)
412 curses+'popup_dialog': show the text cursor at the end of prompts for single
413         character input
414 curses+DUMPLOG: pass along old messages from save file and quest message
415         summaries to dumplog message history
416 curses+EDIT_GETLIN: when a prompt's answer was preloaded, using ESC to discard
417         it deleted it from the answer buffer but didn't erase it from screen
418 curses+EDIT_GETLIN: the preceding fix handled an answer which spanned more
419         than one line but didn't remove the answer properly if the prompt
420         portion of prompt+answer spanned more than one line
421 msdos:  code fixes to allow a build with curses and PDCurses
422 msdos:  added Makefile1.cross (host portion) and Makefile2.cross (target 
423         platform portion) to assist in moving this port toward a cross-compiled
424         build hosted on linux/OSX/Windows with recent C dialect support; that
425         will also pave the way for CI automation and testing of the msdos port
426         build in future should the port remain on the radar; currently only
427         useful for testing the msdos port compile as it cannot yet build a
428         complete game
429 tty: re-do one optimization used when status conditions have all been removed
430         and remove another that tried to check whether condition text to be
431         displayed next was the same as the existing value; sometimes new
432         status condition wouldn't be shown unless a screen redraw was forced
433 tty: take two, if/when autodecribe feedback wraps past top line, clear
434         continuation lines and redraw map if needed when top line is cleared
435         ['exposed by git' section has an entry for reversal of 'take one']
436 tty: video attributes (bold, inverse, &c) for status highlighting sometimes
437         were scrambled
438 unix: sysconf CHECK_PLNAME=1 wouldn't work if attempt to obtain unix username
439         failed even though it didn't need that to check player character name
440 unix+curses: startup error only reset terminal for tty; one noticeable
441         example was answering 'n' to "Destroy old game?"
442 vms: update install.com to include overlooked file bigrm-10.lev in nh-data.dlb
443 Windows: some startup error messages were not being delivered successfully
444 WindowsGUI: player selection dialog box layout was not being adjusted for DPI
445 Windows: significant changes to default directory choices; see documentation
446         for details
447
448
449 General New Features
450 --------------------
451 classify sources as released, beta, or work-in-progress via NH_DEVEL_STATUS
452         rather than just released vs beta via BETA
453 if you reach the edge of a level (relatively uncommon) and try to move off,
454         report that you can't go farther if the 'mention_walls' option is set
455 'attributes' disclosure at end of game includes number of experience points
456         that were needed to reach the next experience level (new for normal
457         play and explore mode; previously only shown for wizard mode)
458 report Friday-13th/phase-of-moon/time-of-day for ^X and final disclosure when
459         their values matter to game play (date and moon are from the start of
460         current session and are not dynamically updated as real time elapses;
461         night is a fixed range of hours using the computer's conception of
462         local time which could differ from player's if there are time zone or
463         system clock issues or simply seasonal variation based on latitude;
464         not new but needs to be documented somewhere other than spoilers...)
465 status highlighting using percentage rules now supported for experience level
466         and experience points; for both, percent is based on Exp progress from
467         the start of the current Xp level to the start of the next Xp level;
468         100% isn't possible so used as special case for next_Xp_lvl - 1 Exp_pt
469 wizard-mode: display effect to show where an unseen wished-for monster landed
470 for 'O's symset and roguesymset menus, mark current symbol set as preselected
471 curses: enable latent mouse support
472 curses: give menus and text windows a minimum size of 5x25 since tiny ones can
473         sometimes be overlooked when shown over old messages rather than map
474 curses+'perm_invent': since persistent inventory is narrow, strip off "a",
475         "an", or "the" prefix on inventory entries shown there so that a tiny
476         bit more of the interesting portion is visible
477 curses+'curses': change the curses map display to use new symbol set 'curses'
478         instead of hard-coded values; it attempts to show IBMgraphics-style
479         map using DECgraphics characters; DECgraphics can also be used as-is
480 fulfill a request from a blind player to have a unique overriding SYMBOL for
481         pets and for the player
482 ROGUESYMBOLS can be overridden in config files like SYMBOLS can
483 in symset:DECgraphics, set S_altar to 'pi' (was default '_'), S_bars to
484         not-equals sign (was 'pi')
485
486
487 NetHack Community Patches (or Variation) Included
488 -------------------------------------------------
489 add a couple of engraving suggestions in pull request #79
490 chasonr's faster method to write characters to msdos VGA in pull request #220
491 chasonr's msdos Makefile.gcc pdcurses build changes in pull request #243
492 autopickup exception priority change in pull request #226
493 FIQ's curses (PDCurses) number pad changes in pull request #247
494
495
496 Code Cleanup and Reorganization
497 -------------------------------
498 began to add some function caller BREADCRUMBS to aid debugging
499 flag existing occurrences of "You hear" as "Deaf-aware" to aid in
500         future maintenance
501
502
503