More groundwork for overhauling the status display for curses, plus
a few functional changes. It was doing a full status update for
every changed field (except conditions), instead of waiting for a
flush directive after gathering multiple changes at a time. Since
it already does gather every change, the fix to wait is trivial.
This decouples 'hitpointbar' from 'statushilites'. When highlighting
is off, it uses inverse video only. When on, it behaves as before:
using inverse video plus the most recent color used to highlight HP
(which can vary if that has rules to highlight changes or percentage
thresholds) but ignoring any HP attribute(s). This also enables the
latent 'statuslines' option and changes 'windowborders' option from
being settable at startup only to changeable during play.
'statuslines' can have a value of 2 (the default) or 3 and applies to
'align_status:bottom' or 'top'; it's ignored for 'left' and 'right'.
At the moment, setting it to 3 only allows status condition overflow
to wrap from the end of line to 2 to the beginning of line 3, and if
window borders are drawn they'll clobber the last character on line 2
and first one on line 3. There's no point in trying to fix that
because it will go away when the main status overhaul changes go in.
Condition wrapping for vertical orientation (left or right placement)
was already subject to the same phenomenon and will be superseded too.
This also changes the meaning of the 'windowborders' value so could
impact players using source from git (or possibly beta binaries for
Windows, but not for OSX where curses interface wasn't included).
Old:
0 = unspecified, 1 = On, 2 = Off, 3 = Auto (On if display is big
enough, Off otherwise; reevaluated after dynamic resizing);
Unspecified got changed to 3 during curses windowing initialization.
New:
0 = Off, 1 = On, 2 = Auto;
0 gets changed to 2 for default value at start of options processing.
So old value of 2 is changing meaning and explicit old value of 3 is
becoming invalid. Implicit 3 changes to default 2. Explicit 3 could
be the subject of a fixup but there isn't much point since 2 can't
have a similar fix. Users who are using old 2 or explicit 3 will need
to update their run-time config files.
This adds 'statuslines' to the Guidebook and moves some other recently
added documentation of curses options from among the general options
(section 9.4) to "Window Port Customization options" (section 9.5).
None of them have been added to dat/opthelp which seems to be missing
all the wincap options.
Originally I made a lot of changes (mostly moving C99 declarations to
start of their blocks) to the old '#if 0' code at end of cursstat.c,
but have tossed those, except for one subtle bug that assumed 'int'
and 'long' are the same size.
649 lines
40 KiB
Groff
649 lines
40 KiB
Groff
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.277 $ $NHDT-Date: 1553204013 2019/03/21 21:33:33 $
|
|
|
|
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
|
|
if player creates any menu colors via 'O' while menucolors is off, issue a
|
|
reminder that it needs to be on in order for those to become effective
|
|
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
|
|
give vault guards a cursed tin whistle since there is a shrill whistling
|
|
sound if hero teleports out of vault while being confronted by guard
|
|
polymorphing worn amulet triggers panic if it turns into amulet of change
|
|
wishing for small mimic corpse or large mimic corpse failed with 'nothing
|
|
matching that exists'; wishing for large {dog,cat,kobold} corpse
|
|
yielded normal size one (size prefix was being stripped off for globs)
|
|
wishing for "glob of grey ooze" failed even though grey ooze is recognized
|
|
as a variant spelling for gray ooze
|
|
spells of healing and extra healing cast at monsters handled monster blindness
|
|
inconsistently compared to other healing
|
|
when using the 'O' command to create a status highlight that specifies
|
|
multiple attributes (blink+inverse, &c), pick all of them in one menu
|
|
selection and create a single hilite_status rule instead of having
|
|
separate rules for each attribute to be merged when highlighting
|
|
highlighting status conditions would fail to use attributes if a rule with
|
|
them was followed by another one without (color only or color&normal)
|
|
when using 'O' to set hilite_status rules, hide the 'score' status field if
|
|
game has been built without SCORE_ON_BOTL; latent rules for 'score'
|
|
can still be set in config file and removed via 'O' but can't be added
|
|
make stone-to-flesh behave the same on statues of petrified monsters as it
|
|
does on random 'dungeon art' ones (revive at a nearby spot instead of
|
|
becoming a corpse when there's already a monster at statue's location)
|
|
special level loader didn't support populating several types of special rooms
|
|
(ant hole, cockatrice nest, leprechaun hall)
|
|
eating rings while polymorphed didn't handle bonus/penalty for increase damage,
|
|
increase accuracy, or protection correctly
|
|
shopkeeper's position in front of shop door didn't correctly handle bottom
|
|
edge of irregularly shaped shop due to typo or copy+paste error
|
|
(latent bug; no such shops are present in 3.6.x)
|
|
attempting to update permanent inventory window during restore had problems
|
|
with unpaid items (needed shop bill before shop and its shopkeeper
|
|
were restored) and named fruit
|
|
remembered corpse which isn't there anymore would be described by farlook as
|
|
the corpse of a random monster type
|
|
when eating a tin of spinach, don't "feel like Popeye" if sustain-abilities
|
|
prevents any strength gain
|
|
summary text [for message history] of quest message Pri 00081 (Priest quest
|
|
success message given when bringing quest artifact to leader)
|
|
misspelled "congratulations"
|
|
verbal charm/seduce messages were given even when hero was deaf
|
|
succubus/incubus seduction might result in loss of levitation which in turn
|
|
could drop the hero onto a trap that transports him/her elsewhere;
|
|
seduction was proceeding as if nothing unusual had happened
|
|
#turn command which aggravated monsters did so without using a turn (not a pun)
|
|
fix hole/trapdoor passage inconsistency when polymorphed into a giant
|
|
making a wide-open special level with FLAGS:inaccessibles could trigger a
|
|
"floodfill stack overrun" panic (no 3.6.x levels were affected)
|
|
wallifying a special level might go out of map bounds (not with 3.6.x levels)
|
|
and corrupt other level data
|
|
if a random grave produced during level creation included some gold, that gold
|
|
was left on the ground instead of being buried with other treasure
|
|
multiple instances of shop damage at same spot (before repairs, so a broken
|
|
door or dug wall plus trap creation) only charged hero for first one
|
|
shop door repair which took place when hero was on another level only worked
|
|
correctly if a trap at the same spot was removed
|
|
object scattering during shop wall repair was skipped if a trap at the same
|
|
spot was also being removed
|
|
augmented death reason for "while helpless" was broken for record and logfile
|
|
(but still correct for xlogfile)
|
|
prevent wish prompt input from remembering the previous wish
|
|
parchment and vellum are made from animal skin so change material composition
|
|
and color for spellbooks with those descriptions from paper to leather;
|
|
eating those books now breaks vegetarian conduct
|
|
fix monsters not wielding digging implements
|
|
wizard mode ^I^I didn't make temporary identifications become persistent if
|
|
the build configuration makes plain 'char' unsigned
|
|
wizard mode #wizidentify didn't disclose extra information for unID'd items if
|
|
key bindings took away ^I and didn't bind #wizidentify to another key
|
|
make transformation message of a deliberate apply of a figurine seem a bit
|
|
less definite when blind and place unseen monster marker at the spot
|
|
you think it should be
|
|
add window port status_update() value BL_RESET to use as a flag to redraw
|
|
all status fields, distinguished from BL_FLUSH which now only
|
|
specifies that the bot() call has completed so any buffered changes
|
|
should now be rendered
|
|
for hilite_status of string status fields (title, dungeon-level, alignment),
|
|
the types value-goes-up and -down aren't meaningful; treat them as
|
|
value-changed if from config file and don't offer as choices with 'O'
|
|
jumping into or over a Sokoban pit, or over a fire trap, triggers trap twice
|
|
mimics created by #wizgenesis could block or not block vision incorrectly
|
|
handle monsters inside the invocation area
|
|
give monsters who have had a worn item stolen or who have been life-saved
|
|
(used up amulet) a chance to wear replacement gear on next move
|
|
instead of having to wait until they pick something up
|
|
Unchanging hero in clay golem form will be killed when cancelled
|
|
poly'd shapechanger and hiding mimic will revert to normal when cancelled,
|
|
like werecreature in beast form and non-Unchanging hero
|
|
cancelled shapeshifter is no longer able to change shape
|
|
cancelled shapeshifter hit by polymorph magic will become uncancelled
|
|
polymorph zap which created a new long worm (or retains an old one via wizard
|
|
mode monpolycontrol) could hit that worm multiple times (tail segments)
|
|
wishing for "orange" could yield orange or orange colored gem/potion/spellbook
|
|
a sleeping or paralyzed mon would be frightened by its reflection when
|
|
applying a mirror
|
|
prevent leash showing unseen monster as "attached to it"
|
|
gremlins seemed impervious to Sunsword's light yet a flash from a camera
|
|
caused them to cry out in pain
|
|
when objects migrated (fell down stairs) and invisible hero (w/o see invisible,
|
|
no-autopickup) descended, stairs got shown instead of object(s) on them
|
|
drum of earthquake was causing deafness but oddly enough only when used up
|
|
known bear trap was being forgotten about by a player polymorphed into a
|
|
flying monster if the player unsuccessfully tried to #untrap it and
|
|
moved onto the trap square as a result
|
|
no leash-related message is given when a leashed pet yellow light explodes
|
|
shop messages refer to shk by name even when shk is not visible but some
|
|
used pronoun "it" or "its" in same sentence; ditto for vault guards
|
|
poly'd hero and monsters could eat through iron bars in areas where walls
|
|
were flagged as non-diggable
|
|
Samurai seeing items at a distance could have them be described by their
|
|
ordinary names rather than by their Japanese names
|
|
wizard mode ^T shouldn't have been diminishing player power but it was
|
|
and hilite_status:power settings really drew attention to that
|
|
fix missing space in "would flyif you weren't levitating"
|
|
a wand of polymorph lost its magical ability for the turn just because the
|
|
player using it to engrave happened to be blind, which didn't make
|
|
much sense
|
|
floating eye is classified as a flyer but flying is blocked while levitating,
|
|
so don't set intrinsic flying if hero is polymorphed into one
|
|
change default value for the 'autodescribe' option to 'on'
|
|
Elbereth hypocrisy penalty doesn't apply if attacking a monster which isn't
|
|
frightened by Elbereth; normal scuffing of engravings still applies
|
|
Elbereth hypocrisy penalty reduced when alignment is already low
|
|
during character creation, don't unset alternate weapon when a shield gets
|
|
worn (was preventing knight from having lance set up as uswapwep)
|
|
preformatted Guidebook.txt split line in middle of "' '" for #wait command
|
|
prevent simiulated screenshot in Guidebook.txt from spanning page boundary
|
|
overview information for former hero was not being set properly when bones
|
|
file was saved, so current hero coming across a dead hero's grave
|
|
didn't have #overview feedback augmented with "final resting place"
|
|
in Guidebook.mn and Guidebook.txt, the 'I' command mis-described `IX' as
|
|
displaying inventory items whose bless/curse state is "known"
|
|
(Guidebook.tex correctly had "unknown")
|
|
poison gas (stinking cloud) wasn't shown at drawbridge-up spot
|
|
prayer result which enhanced strength (fix weakness from hunger) didn't give
|
|
a message if a change in encumbrance occurred; it came on next move
|
|
add current location within the dungeon to the Background section of ^X and
|
|
final disclosure (it's not background but doesn't fit anywhere else)
|
|
death from something other than loss of hit points could leave hero with
|
|
non-zero HP at end of game (during "really die?" prompt, disclosure)
|
|
added several special cases for genocide and/or wishing prompt: (cookie,
|
|
pie, genie, watchmen)
|
|
lightning strike from Mjollnir did not make any noise
|
|
with menustyle:Full, picking 'A - autoselect all' when putting items into a
|
|
container actually took everything out of that container
|
|
add missing 'A - autoselect all' choice for menustyle:Full when taking items
|
|
out while looting a container
|
|
fix odd wording "The boulder triggers and fills a pit"
|
|
^X status feedback: don't report "not wearing any armor" when wearing a shield
|
|
attempting to #ride a long worm's tail could trigger impossible "worm_cross
|
|
checking for non-adjacent location?"
|
|
avoid "The " in "The <known-artifact-but-not-The-artifact> falls down stairs."
|
|
avoid potential buffer overflow if object with very long name knocks other
|
|
objects down stairs when dropped, thrown, or kicked there
|
|
#wizintrinsic for 'flying' didn't update status line when flying ended
|
|
#wizintrinsic for 'warn_of_mon' didn't set any type of monster (now grid bugs)
|
|
clairvoyance would show trap instead of a monster on/in that trap, which was
|
|
intentional, but when clairvoyance finished the monster wasn't shown
|
|
clairvoyance revealing underwater or under-lava objects left object displayed
|
|
instead of restoring the water or lava
|
|
nurse corpse/tin chance to convey poison resistance when eaten was not honored
|
|
make tame vampires be more aggressive when shifted to bat/fog/wolf form
|
|
a stale gold symbol could be displayed on the status line following a switch
|
|
to a new symset, as observed and reported for Windows RogueEpyx symset
|
|
successfully paying for shop damage with shop credit would be followed by
|
|
impossible "zero payment in money2mon"
|
|
if a migrating monster was killed off because there was no room on the
|
|
destination level, it would leave a corpse even if it was a type
|
|
which should never leave one (demon, golem, blob, &c)
|
|
monsters accompanying hero during level change (usually pets) who failed to
|
|
arrive and tried to re-migrate were being removed from the map after
|
|
already having been removed [impossible "no monster to remove" if
|
|
compiled with EXTRA_SANITY_CHECKS enabled] during migration handling
|
|
monsters accompanying hero during level change (usually pets) who failed to
|
|
arrive and tried to re-migrate (for hero's next visit to the level)
|
|
ended up being killed because the migration attempt happened right
|
|
away (same visit by hero, so level still full) and they weren't
|
|
accompanying hero on the second attempt
|
|
fix for above (all failed arrivals will re-migrate) makes the earlier fix (for
|
|
invalid corpse being left by monst killed upon migration failure) moot
|
|
end of game while carrying Schroedinger's Box would reveal cat-or-corpse
|
|
for inventory disclosure or put that info into dumplog, but not both
|
|
attempting to untrap an adjacent trap while on the edge of--not in--a pit
|
|
failed due to not being able to reach the floor
|
|
magic trap's deafening roar effect wasn't waking nearby monsters
|
|
scattering of objects might leave source location with wrong thing displayed
|
|
for configurations with 'long int' larger than 'int', lev_comp wrote some
|
|
garbage into the *.lev files, but nethack seemed unaffected by that
|
|
(at least on little-endian hardare) and loaded the levels successfully
|
|
stinking cloud placed near water could kill underwater creatures
|
|
applying--rather than wielding--a cursed polearm or weapon-tool didn't report
|
|
that it had become welded to hero's hand(s)
|
|
the message when riding a steed into a pit was composed but not shown
|
|
dismount that killed steed because there was no room to put it on map blamed
|
|
hero; change that to only blame hero if dismount is voluntary
|
|
to emphasize that it's not a light source, change description of wielded Sting
|
|
from "(glowing light blue)" to "(light blue aura)" when sighted and
|
|
from "(glowing)" to nothing (not warm enough to feel) when blind
|
|
[subsequently changed in different manner; see 'exposed via git' below]
|
|
glowing Sting quivers if hero becomes blind and quivering Sting glows if
|
|
blindness ends; it worked for timed blindness but not for blindfold
|
|
weapon (wielded pie, egg, potion, boomerang) might be destroyed when hitting a
|
|
long worm, then freed memory was accessed to decide whether to cut it
|
|
level change after being interruped locking or unlocking a container might
|
|
access freed memory
|
|
if a restore attempt failed and a new game was started instead, it would use
|
|
stale context from old game if restoration got far enough to load that
|
|
if hero survives turning into slime (life-saving), survive as a green slime
|
|
hero hit by something that causes inventory items to be destroyed with loss of
|
|
any of those causing other inventory items to be dropped or destroyed,
|
|
inventory traversal became unreliable (known sequence: potions hit by
|
|
fire then breathing vapor from boiled unholy water triggering 'were'
|
|
transformation to beast form; possible sequence: ring of levitation
|
|
blasted by lightning and dropping hero onto fire trap); [3.6.1 fixed a
|
|
similar problem with more obvious symptom, an "object lost" panic when
|
|
the unholy water was wielded; the fix for that wasn't general enough]
|
|
add MM_ASLEEP makemon() flag and honor it when creating group for fill_zoo
|
|
add MM_NOGRP makemon() flag as a means of suppressing groups of monsters in
|
|
a couple places that warrant it when a specific monster type isn't
|
|
specified on the call to makemon()
|
|
at start of session (new game or restore), HILITE_STATUS for gold was ignored
|
|
setting second or later named fruit to value beginning with two or more spaces
|
|
followed by non-space gave "singular of null?" warning
|
|
when blocking/unblocking of levitation or flying was updated due to walking
|
|
onto different terrain, the relevant status condition wasn't updated
|
|
on the screen until some other status update happened
|
|
if levitating hero in pass-wall creature form jumped or teleported from
|
|
terrain that allowed levitation to terrain that didn't or vice versa,
|
|
blocking of levitation wasn't updated properly
|
|
digging down or level teleporting while stuck in solid rock which is blocking
|
|
levitation or flight didn't notice when that should become unblocked
|
|
make it easier to clear 'pickup_types' (menustyles Traditional and Combination
|
|
could do so by setting it to 'a'; now ' ' works too; Full and Partial
|
|
allowed unselecting every object class; now 'all classes' is a choice)
|
|
distribution of monsters selected by mkclass() didn't match expected distrib
|
|
(cited example was ndemon() creating twice as many incubi as succubi)
|
|
while inside a shop, dropping an unpaid item inside an engulfer would leave
|
|
that item 'unpaid' and it would remain so on shop floor after the
|
|
the engulfer was killed; treat dropping shop items inside an engulfer
|
|
as stealing them and giving them to that engulfer--hero must pay for
|
|
them and shop retains ownership of them
|
|
while levitating inside a shop, throwing an unpaid item and having recoil move
|
|
hero out of shop (or to shopkeeper's spot in front of door) would
|
|
leave the item unpaid on shop floor and also on the shop's bill but
|
|
not visible via 'Iu' or 'Ix'; leaving the shop after that would anger
|
|
the shopkeeper and summon kops
|
|
diluted potion of oil is less effective when filling lamps (adds less fuel)
|
|
or burning (lasts less long) or exploding (inflicts less damage)
|
|
apply fix from grunthack to prevent panic "fakecorr overflow" when vault guard
|
|
couldn't figure out how to lead the hero from vault to civilization;
|
|
fixes longstanding bug C343-23
|
|
vibrating square is not really a trap so monsters don't need to avoid it
|
|
if hero kicks some embedded gold out of a wall while following vault gaurd
|
|
away from vault, don't report "the guard _calms_down_and_ picks up
|
|
the gold" unless he's on brink of going ballistic
|
|
for '/?' information lookup, "item named The Artifact" failed to find info
|
|
about "Artifact" due to presence of "The"
|
|
identifying or forgetting gem types now adjusts prices for gems already on
|
|
shopping bill
|
|
when fire converts an ice location into a water location, dunk any monster on
|
|
that spot immediately instead of waiting until its next move
|
|
training riding skill had an off-by-one bug when counting turns riding
|
|
message sequencing when vampire shifts to fog cloud to pass under closed door:
|
|
when in sight, give form change message before moving to door spot
|
|
limit carrying heavy loads from water to land
|
|
failing to carry a wished-for item behaved differenctly from dropping one
|
|
life-saving while weak/starving/fainting boosted nutrition without restoring
|
|
lost point of strength, making temporary loss be permanent
|
|
unlike #chat in a shop, walking on an item in a shop failed to include price
|
|
for hero-owned container holding shop-owned items
|
|
bag of holding explosion inside shop billed hero for unpaid contents if it
|
|
happened when applied while carried but not when looted while on floor
|
|
looking into an applied container with ':' showed prices of unpaid items but
|
|
looking into a looted one with ':' did not show prices for shop items
|
|
prevent achievement luckstone from merging with other luckstones if kicked or
|
|
dropped by monster (not applicable for dropped by player; achievement
|
|
would have been recorded and luckstone reverted to normal if picked up)
|
|
when splitting a stack where internal ID is used to make adjustment to
|
|
shop prices, pick an ID for new stack that yields same prices as old
|
|
when merging a stack where internal ID is used to adjust shop prices, always
|
|
keep the ID which induces the higher price (only matters when buying
|
|
from shop, not when selling; doesn't affect items already on bill)
|
|
since knives became stackable in 3.6.0, fake player monsters could be given
|
|
multi-quantity stacks for weapons (scalpel, athame) they never throw
|
|
using 'O' to attempt to set bouldersym to a monster letter or warning digit
|
|
while it still had its default value would override the display value
|
|
for it to be <NUL> ('\0') after 'badoption' feedback
|
|
when ^T resorted to the teleport-away spell if hero didn't have intrinsic
|
|
telepotation, it used different hunger/strength/energy requirements
|
|
than casting with 'Z'; ^T also required that the corresponding book
|
|
be known even though knowing and casting a spell should be (and is
|
|
with 'Z') possible after forgetting the spellbook due to amnesia
|
|
setting SEDUCE=0 made all succubus and incubus attacks be described as
|
|
smiling engagingly or seductively rather than hitting or missing
|
|
entering Ft.Ludios with a lit candle lit up the entire entry room except for
|
|
one corner spot; that corner is beyond candle radius but other spots
|
|
even further away were being shown; force the walls to unlit in order
|
|
to prevent those wall spots from showing so soon
|
|
a couple of short wall segments in the "Gnome King's Wine Cellar" variant of
|
|
Mines' End were diggable; one stone spot which should have been, wasn't
|
|
boulder dropped or launched by a monster onto a monster trapped in a pit and
|
|
killing it credited/blamed the hero and might trigger a deltrap panic
|
|
the simulation of dual weapon combat when polymorphed into a form with more
|
|
than one weapon attack allowed off-hand artifact to be used; it also
|
|
used seconary weapon even when wearing a shield, or if it was silver
|
|
even when current shape couldn't handle silver, or if it was cursed;
|
|
cursed is allowed but weapon will be dropped, just like in two-weapon
|
|
demons gated in other demons without any message
|
|
if vampire revives from from dead bat/cloud/wolf shape held by hero poly'd
|
|
into grabber, release it from hero's grasp
|
|
various non-weapon attacks while polymorphed didn't inflict blessed or silver
|
|
weapon damage when worn items contacted vulnerable target monsters
|
|
hero poly'd into rope golem form could choke headless or non-breathing monsts
|
|
hero poly'd into creature with hug attack could hug a long worm's tail which
|
|
rendered the whole worm immobile
|
|
smudging of an engraving has been relocated to after a succesful move
|
|
and both your former location and your resulting location are
|
|
subject to the smudging
|
|
monster with multiple items in inventory could trigger 'dealloc_obj with nobj'
|
|
panic when turned into a statue if separate mon->minvent items merged
|
|
lock picking context could end up with stale container pointer if container
|
|
being forced/unlocked/locked got destroyed or sent to another level
|
|
teleporting out a vault after guard appears could result in the guard being
|
|
stranded in a one-square long temporary corridor adjacent to vault
|
|
wall and periodically saying "Move along!"
|
|
if game ends while hero is in a vault wall breach or in guard's temporary
|
|
corridor, a message "you are encased in the rock" could be given when
|
|
guard repairs things (for possible bones); suppress it if hero is dead
|
|
DUMPLOG: output from '/' (#whatis) and ';' went into ^P message recall history
|
|
but was missing from DUMPLOG's message history due to special handling
|
|
for the first character which might be graphical rather than text
|
|
when donning armor, defer flagging its +/- value--which can be deduced from
|
|
the status line--as known until finished in case it gets stolen before
|
|
then (player might still deduce the +/- value but hero won't learn it)
|
|
a monster with resistances supplied by worn armor would lose them if that
|
|
monster went through a shape change even if the armor stayed worn
|
|
when using 'f' to fire/throw--and possibly some ^A's to repeat--then running
|
|
out of ammo (with either 'autoquiver' off or nothing suitable to put
|
|
in quiver), using ^A would put whichever inventory item was assigned
|
|
the same letter as the prior direction into quiver slot (unless item
|
|
was already worn or wielded) and then ask for a direction to fire it
|
|
early rolling boulder trap lacking any boulder might still have the corpse
|
|
of a dead adventurer
|
|
persistent inventory window would show "(being worn)" for armor that was in
|
|
the midst of being put on or taken off; it is 'partly worn' in such
|
|
circumstances so "being worn" could be misleading
|
|
toggling perm_invent on didn't immediately show persistent inventory window
|
|
some fish should lay their eggs in the water rather than on land
|
|
wand or spell of undead turning handled messages and wand-discovery in a
|
|
non-intuitive manner biased toward healers
|
|
if steed ate a mimic corpse and began masquerading as something, hero could
|
|
keep riding it; force dismount
|
|
kicking an object stack moves the topmost 1, but range calculation used the
|
|
weight of the whole stack to decide how far it would move, possibly
|
|
yielding "thump" result with no movement despite being a light item
|
|
status lines' dungeon location field in the elemental planes now shows Earth
|
|
or Air or Fire or Water instead of generic End Game
|
|
|
|
|
|
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
|
|
sortloot segfaulted when filtering a subset of items (seen with 'A' command)
|
|
orctown: prevent "Bad fruit #0" and some minor tuning
|
|
orctown: orcs beyond the mines were being given any left-over booty and named
|
|
as part of the same marauding gang operating within the mines
|
|
make long extended commands list be more navigable
|
|
simplify #wizidentify; don't rely on having bold menu entries
|
|
add object class group accelerators to #wizidentify
|
|
ensure tmp_at() structures are initialized for all code paths when swallowed
|
|
trapped-vs-levitation/flying change broke Sting releasing hero from web
|
|
life-saving while poly'd and Unchanging wasn't restoring u.mh (HP as monster)
|
|
change in searching stopped finding unseen monsters except hiders and eels
|
|
buliding with EXTRA_SANITY_CHECKS enabled would issue "no monster to remove"
|
|
warning if steed was killed out from under the hero
|
|
changing Sting's description to be "(weapon in hand) (light blue aura)" was
|
|
too close to feedback when objects become blessed; change it again,
|
|
to "(weapon in hand, flickering/glimmering/gleaming light blue)"
|
|
fix bit-use collision between WC2_TERM_SIZE and WC2_RESET_STATUS in
|
|
include/winprocs.h following a recent merge
|
|
fix foxen pluralization again after underflow remedy reintroduced the problem
|
|
fix "placing monster over another?" warning for vault guards
|
|
status highlighting classifies gold, time, and experience-points as data type
|
|
'long' but when selecting hilite rule to use treated them as 'int'
|
|
a config file line with OPTIONS=symset:default, roguesymset:RogueEpyx
|
|
was disabling color on RogueEpyx even though the symset is
|
|
meant to have color; that was due to an errant init_symbols() call
|
|
during the processing of symset:default done after RogueEpyx had
|
|
already been processed
|
|
avoid potential segfault when doing 'more information' lookup
|
|
when built with STATUS_HILITES enabled (the default), gold on status line
|
|
was missing '$' prefix for symset:Blank
|
|
wizard mode ^G, creating a monster of class 'I' yielded impossible "mkclass
|
|
found no class 35 monsters"
|
|
wizard mode ^G, creating a monster via class name using "lo" through "long wor"
|
|
or "long worm t" through "long worm tail" yielded impossible "mkclass
|
|
found no class 59 monsters" (class '~' creates a long worm as intended)
|
|
if bouldersym bug (via 'O', above) put a <NUL> ('\0') on the map, examining
|
|
that spot matched placeholder monster class #0 and triggered impossible
|
|
"Alphabet soup: 'an("")'."
|
|
wizard mode m^T, not selecting a teleport choice didn't teardown the menu
|
|
properly and could eventually lead to "No window slots!" panic
|
|
when in a shop and using ':' to look inside a container in inventory, items
|
|
owned by hero showed price they'd be charged if hero was buying them
|
|
when in a shop and using ':' to look inside a container on shop floor, items
|
|
that shopkeeper didn't care about weren't shown as "no charge" unless
|
|
the hero owned the container
|
|
when engulfed while in a shop, dropping an item into the engulfer and then
|
|
using ':' to look at current location could cause a crash
|
|
when items were on the floor just inside a shop's door where the shopkeeper
|
|
doesn't buy and sell stuff, those items showed a 'for sale' price
|
|
applying a container while inside a shop and initiating a put-in operation
|
|
would show non-empty containers in inventory--including the one being
|
|
applied--with "for sale" amounts for the prices of their contents
|
|
after 'when donning armor, enchanment becomes known even if interrupted' fix,
|
|
wearing a leather jacket, fedora, or dented pot (no multi-turn delay
|
|
worn in a slot which usually has one) didn't make +/- become known
|
|
when persistent inventory window is enabled, wearing armor didn't immediately
|
|
update it with armor's newly observed +/- value
|
|
having an artifact wish be refused ("for a moment you feel <artifact> in
|
|
your hands, but it disappears") would immediately segfault
|
|
tty: turn off an optimization that is the suspected cause of Windows reported
|
|
partial status lines following level changes
|
|
tty: ensure that current status fields are always copied to prior status
|
|
values so that comparisons are correct
|
|
tty: fix an out of bounds error in tty_status_update() for BL_HUNGER case
|
|
tty: fix leftover display artifact when the last field on the row got placed
|
|
to the left of where it was previously due to it, or one of the fields
|
|
to its left, getting shorter
|
|
X11: its use of genl_status_update exposed a negative index use that could
|
|
lead to a segfault
|
|
X11: rollback disabling of keystroke input for PICK_NONE menus (for scrolling)
|
|
curses: catch up with tty to not put dolook/whatis autodescribe feedback into
|
|
^P message recall (multi-digit count feedback was already handled)
|
|
curses: if the interface code ran out of memory, it would crash rather than
|
|
attempt a controlled panic (though that's fairly likely to crash anyway
|
|
if done when there's no more memory available)
|
|
curses: when getting multi-character responses from player, support <delete>
|
|
as well as <backspace> to remove last character entered; also, return
|
|
<escape> to core if ESC is typed when there is no input entered
|
|
curses: extend preceding <delete> support to typing of extended command names
|
|
curses: support hilite_pet and hilite_pile even when color is disabled
|
|
curses: support color hilite_status rules even if 'guicolor' is off
|
|
curses: update status if 'O' is used to add/change/remove hilite_status rules
|
|
curses: was doing a full status update for every changed field even when more
|
|
than one field was being changed at the same time
|
|
curses: 'hitpointbar' now works even when status highlighting is disabled
|
|
curses: add 'statuslines' option (value is 2 or 3)
|
|
curses: change 'windowborders' option's value (0=Off, 1=On, or 2=Auto instead
|
|
of 1=On, 2=Off, 3=Auto; can now be changed via 'O' during play)
|
|
vms: add compile of isaac64.c to Makefile.src and vmsbuild.com
|
|
vms+curses: add compile support but it is known to fail to build
|
|
|
|
|
|
Platform- and/or Interface-Specific Fixes or Features
|
|
-----------------------------------------------------
|
|
move 'perm_invent' value from flags to iflags to keep it out of save files;
|
|
affects X11, win32, and curses (save file compatibility is preserved)
|
|
always define shell and suspend commands so that key bindings copied from one
|
|
platform to another work even if second one disables those commands
|
|
amiga: fix missing line continuation characters in Makefile
|
|
MacOSX: add curses window port
|
|
MacOSX: add Xcode project to sys/unixNetHack.xcodeproj
|
|
MacOSX: add Xcode supporting files README.xcode and XCode.xcconfig
|
|
containing important build info
|
|
Qt: add Qt5 specific hints file for linux and Mac OS X (Ray Chason)
|
|
Qt: enable compiling Qt5 on Windows (Ray Chason)
|
|
Qt: entering extended commands, hide non-matching ones
|
|
Qt: remember tile and font size
|
|
tty: significant optimizations for performance and per field rendering
|
|
tty: use WC2_FLUSH_STATUS to buffer changes until BL_FLUSH is received
|
|
tty: support BL_RESET in status_update to force an update to all status fields
|
|
tty: stop hitpointbar from jumping to 100% health at zero hit points
|
|
tty: try harder to prevent a disconnected terminal (SIGHUP) from running amok
|
|
and using up all available CPU time
|
|
tty: suppress intermediate 'Count: 123' prompt and getpos autodescribe
|
|
feedback from being included in ^P message recall
|
|
tty: ^P feedback with msg_window:full/combination/reverse containing output
|
|
from dolook/whatis could show strange characters for DECgraphics
|
|
tty: if eight_bit_tty option is set and current symbol set specifies
|
|
DECgraphics handling, render line-drawing characters (in nethack's
|
|
scheme, the 4th quarter of ASCII--mostly lower case letters--with
|
|
8th-bit forced on) instead of treating that subset as 8-bit characters
|
|
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
|
|
unix: add curses window port
|
|
unix: in nethack.sh, use 'test -f' instead of 'test -e' when checking for
|
|
fonts.dir while running under X11
|
|
vms: data file processing and playground setup were missing post-3.4.3 files
|
|
engrave, epitaph, and bogusmon made from corresponding *.txt
|
|
windows: Added ntassert() mechanism for Windows based port use
|
|
windows: heed OPTIONS=symset:default in config file if it is present
|
|
windows: add curses window port which can co-exist with tty in exe and be
|
|
selectable in user config file via OPTIONS=windowtype:curses
|
|
windows-gui: In nethackw, there could be conflicts between menu accelerators
|
|
and an extra choice accelerator to fix H7132.
|
|
windows-gui: recognize new BL_RESET in status_update; no change in behavior yet
|
|
windows-gui: align hpbar behavior at zero hit points with tty behavior
|
|
windows-gui: add support for status_hilites for the player condition field
|
|
such as stone, slime, strngl, blind, deaf, stun, conf, etc.
|
|
windows-gui: a shop or vault message could appear in a popup after the
|
|
close-window button was used when game was ending
|
|
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 player's keyboard layout is
|
|
non-english as reported in H4216
|
|
windows-tty: We now support changing altkeyhandler in game
|
|
windows-tty: augment codepage850-to-Unicode mappings that are not displayable
|
|
with codepage437-to-Unicode mappings that are, to help ensure that
|
|
rogue-level characters o status line match their appearance on map
|
|
windows-tty: add support for mouse_support:0 (disabled), mouse_support:1
|
|
(fully-functional including disabling QuickEdit on Windows console
|
|
because QuickEdit intercepts the mouse clicks so NetHack never sees
|
|
them), or mouse_support:2 (NetHack support on but QuickEdit left as is)
|
|
X11: implement menucolors and allow menus to obey some attributes
|
|
X11: make key translations work with menus on Linux
|
|
X11: allow mouse wheel scrolling to work in menus by default
|
|
X11: handle paged menu control keys
|
|
X11: remember perm_invent window geometry
|
|
X11: handle X errors via panic
|
|
X11: don't reuse perm_invent window for picking an object
|
|
X11: obey mouse_support and allow toggling it in game
|
|
X11: obey menu movement keys
|
|
X11: enable menu [cancel] button for PICK_NONE menus
|
|
X11: text popups on OSX wouldn't accept keyboard input unless the 'autofocus'
|
|
resource was enabled; most noticeable when trying to dismiss 'things
|
|
that are here' while walking over object piles
|
|
X11: default to using XPM format tile file and rip screen
|
|
X11: when showing graphical tombstone, would crash if file rip.xpm is missing;
|
|
revert to text tombstone instead
|
|
|
|
|
|
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
|
|
YAFM when stumbling on an undetected monster while hallucinating
|
|
make it clear when a leprechaun dodges your attack
|
|
wizard mode #wizidentify can now select individual items for permanent
|
|
identification and don't display the selection to permanently
|
|
identify everything if everything is already fully identified
|
|
make mine town "orctown" variation a multiple level feature of the mines
|
|
replace #monpolycontrol command with monpolycontrol boolean option
|
|
replace #wizdebug_traveldisplay command with travel_debug boolean option
|
|
rename #wizdebug_bury command to #wizbury
|
|
life-saving now makes swallower or grabber release hero
|
|
for ^X and enlightenment, display the information in a menu rather than a
|
|
plain text popup, so that player can go back within the text via
|
|
'<' (menu_previous_page) and '^' (menu_first_page) menu keys;
|
|
needed for interfaces (tty) without text popup scrollbar support;
|
|
end of game disclosure of attributes remains single-forward-pass
|
|
for ^X, include current state of 'autopickup'
|
|
being trapped (bear trap, web, molten or solidified lava, chained to buried
|
|
iron ball) blocks both levitation and flight (note: being stuck in a
|
|
pit ends when either of those starts so doesn't apply)
|
|
early level traps are sometimes covered by the remains of fake players
|
|
fake player characters resist Conflict
|
|
when inside a shop, far-look now includes shop prices for items marked as
|
|
having been seen up close
|
|
when sortloot is enabled, gems are grouped in subsets (1) unseen gems and
|
|
glass, (2) seen but unidentified gems and glass, (3) identified gems,
|
|
(4) identified glass, (5) unseen stones (includes unseen rocks),
|
|
(6) seen but unidentified gray stones, (7) identified gray stones,
|
|
and (8) seen rocks (IDed/unIDed not applicable)
|
|
in wizard mode, ^T can be preceded by 'm' prefix in order to test teleporting
|
|
without having wizard mode override various restrictions
|
|
include isaac64 for pseudo random number generation
|
|
core prng and display prng use different contexts
|
|
when healing magic other than unicorn horn cures blindness, cure deafness too
|
|
|
|
|
|
NetHack Community Patches (or Variation) Included
|
|
-------------------------------------------------
|
|
curses: the community patch for an optional curses window-port was
|
|
incorporated into the NetHack source code tree. The curses
|
|
window-port evolved from work originally done by Karl Garrison,
|
|
and has been in use in several NetHack variants and on
|
|
nethack.alt.org and on www.hardfought.org/nethack/ for a while.
|
|
It is available and tested for 3.6.2 for Windows with PDCurses
|
|
layered underneath, and for Mac OSX and Unix (using ncurses as
|
|
the layer underneath). It may also work for DOS with PDCurses
|
|
layered underneath, but that has not been tested.
|
|
|
|
|
|
Code Cleanup and Reorganization
|
|
-------------------------------
|
|
generated source file monstr.c is no longer used
|
|
|