Files
nethack/doc/fixes37.0
2020-06-07 16:39:58 +02:00

442 lines
26 KiB
Plaintext

$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.231 $ $NHDT-Date: 1591476281 2020/06/06 20:44:41 $
General Fixes and Modified Features
-----------------------------------
hero polymorphed into a vampire can use #monster to shape-shift rather than
just do a one-shot polymorph into bat/cloud/wolf and shifted vampire
hero can use #monster again to take on another form (randomly chosen
among the shiftable shapes and true vampire form)
adjust bones filename buffer sizes to accommodate suffix
fix internal self-recover to work with recent fields added to checkpoint file
improvements to pronoun usage when hallucinating
function calls made from mapglyph based on dungeon level are now called once
per level
fast hero could have random clairvoyance happen more than once on same turn
using 'Q' on wielded weapon would offer to split stack; make using 'w' on a
quivered stack behave similarly
weight for giant spider was too low for creature of size 'large';
weight for giant beetle was much too low for 'large'
leave some menu items out of "invert all" via '@' when their inclusion would
degrade the usefulness of that interface feature
change crysknife from mineral to bone and worm tooth from unspecified to bone
worn meat ring shouldn't cause increased hunger; neither should fake Amulet
worn +0 ring of protection should cause increased hunger if it is the only
source of extrinsic Protection
monster wielding Stormbringer or healer's Staff against another monster would
heal the hero instead of the wielding monster when draining life
change twoweapon feedback from "not a weapon" to "not a suitable weapon"
don't allow twoweapon combat if either weapon is a bow, crossbow, or sling
[later: or arrows, bolts, and missiles (darts, shuriken, boomerangs)]
drum of earthquake feedback reported various things (fountains, thrones, &c)
falling into a chasm but they remained intact because trap creation
had been changed to not clobber such things (so couldn't make pits)
make earthquake which hits a secret door or a secret corridor reveal it
wizard mode wishing for "Amulet of Yendor" had 50:50 chance for true Amulet
or a cheap plastic imitation; recognize "real Amulet of Yendor" and
"fake Amulet of Yendor" to precisely specify either of them but also
take away the 50% chance of yielding a fake one when neither real nor
fake is specified
unpaid globs showed weight info unconditionally outside of wizmode
walking out of tethered-to-buried-object trap condition was supposed to
reinstate punishment but wasn't finding the buried iron ball because
the trap condition was cleared first to indicate escape; result was
attached chain that got dragged around but had no ball attached
when poly'd into a giant and moving onto a boulder's spot, message given was
confused about whether autopickup would occur so could be misleading
random role selection wasn't honoring unwanted alignment(s) properly
if at the edge of the map window, trying to move farther fails but used a turn
hero can no longer wear blindfold/towel/lenses when poly'd into headless form
revamp achievement tracking for exploring Mine's End and Sokoban (by acquiring
luckstone and bag of holding or amulet of reflection, respectively)
throttle long worm growth rate and HP accumulation
poly'd hero was able to zap wands, apply tools, and #rub objects without
having any hands
spellcasting monster got an extra move after casting
allow defining #wizgenesis quantity in the prompt
digging through iron bars from an adjacent pit made a pit on top of the bars
give feedback if controlled level teleport attempt fails because hero is
already on the bottom level and player tries to go even deeper
unseen pet that drowned didn't give "you have a sad feeling" message
prevent ravens from blinding other ravens: /corvus oculum corvi non eruit/
have ^X provide more information when held or swallowed
display wasn't updating immediately after toggling hilite_pet option
randomly choosing role could lead to crash via segfault
if eel bite attack caused hero to move (killed + rehumanized + crawled out
of water), its grab attack could succeed even if no longer adjacent
specifying a count when picking [part of] a stack of scrolls of scare monster
ignored that count and the whole stack was affected
wizmakemap didn't account for unique monsters and didn't correct monster
birth counts
generate objects (eg. statues) with genocided or extinct monster classes
in special levels, if requested
if the orc-town version of mine town has been loaded, creation of orc zombies
or orc mummies would name them as part of the town raiding orc clan
when punished, involuntarily teleporting and landing within chain range of
attached ball while encumbered worse than burdened could trigger
"remove_object: obj not on floor" panic on hero's next move
inventory cursing caused by "this water's no good" effect when drinking from
a fountain didn't update persistent inventory window
fix priest created inside temple wall
fix vault guard occasionally encasing monsters in stone
tone down scare monster by excluding humans and uniques
lock the castle chest
revamp amnesia to forget skills instead of objects or maps
when Punished and carrying the iron ball and levitating, hurtling in the
opposite direction of a thrown object didn't bring along the chain
recognize "kirin" as alias for "ki-rin" when asked to create a monster
make unique swallowing monsters (Juiblex) resist magical digging from inside
correctly account for fuel remaining when lit candles are attached
to candelabrum (the previous code would make the game unwinnable if
there were 15 or fewer turns remaining)
praying on an unaligned altar outside of Gehennom behaved like an ordinary
prayer; make that always fail
Discworld typo: Moving Pictures passage 12 "or" -> "of"
unicorn corpses and wraith corpses could be sacrificed even if "too old"
hero polymorphed into a hider and hiding was not unhidden when teleporting
impose tighter restraints on 'summon nasties', both for spellcasting monsters
and post-Wizard harassment
prevent swallowing monster ending up in a solid wall if it killed vault guard
fix attached ball getting deallocated if swallowed, going down into a pit,
and saving
level compiler creates correct novel with supplied name
for farlook, describe water in the castle moat and in Juiblex's swamp as moat
and as swamp, respectively, rather than just as "water"
make hezrous emit poison clouds when they move
stepping from one type of terrain to another was triggering an unnecessary
status update
make shriekers summon baby purple worms if purple worms would be too tough
make non-tame (baby) purple worms eat corpses off the ground
make baby purple worms attack shriekers
make hero polymorphed into baby purple worm warned against shriekers
confused scroll of light summons tame cancelled lights
potions of hallucination can give enlightenment
add a small chance of surviving food poisoning
deliberate level teleporter activation ignores magic resistance
auto-id scroll of remove curse when a known buc-state was changed
demon lords hate Demonbane
pets avoid eating shapeshifter corpses unless starving or nearly feral
blessed scroll of teleportation gives a single controlled teleport
allow opening a tin without interruption if slimed
tell player when wielding a different weapon toggles off dual-wielding
object taking erosion damage might give feedback message when out of view
or not give such when in view, depending on stale value of 'bhitpos'
[cited case assumed message came from drowned monster's dropped
inventory when out-of-view ice melted]
it's possible to wish for tins of the Riders in wizard mode; eating one is
fatal but if you're life-saved or decline to die, the game crashed
revival via undead turning of corpse carried by hero said "your <mon> corpse
comes alive" even when revived monster was undead
prevent searching or waiting next to a hostile monster - override with 'm'
allow random mimics to show up mimicing more furniture than just stairs
scatter exploding bag of holding contents instead of outright deleting them
male hero poly'd into nymph chooses charm vs seduce message based on being
male rather than on all nymphs being female but charm message was
using hardcoded pronouns She,her for target monster--wrong for male
target and noticable if "<mon> finishes taking off his suit" is given
hostile monsters with launcher and ammo try to stay away from melee range
allow displacing peaceful creatures
unicorn horns don't restore attribute loss anymore
when a shop is changed from food to health food, change room type to match
wish parsing of things containing monster names would accept all supported
alternate spellings if they occurred at the end ("corpse of mumakil")
but only some when they occurred elsewhere ("gray-elf corpse" worked,
"mumakil corpse" yielded "does not exist") depending upon name length
couldn't wish for werecreature corpse or tin because monster name lookup
always matched the beast form which is flagged no-corpse; switch to
human form for "were<creature>"
wishing for werecreature figurine always made one that created the monster in
beast form if activated; allow "human were<creature>" to explicitly
specify werecreature's human form (for corpses and tins as well as
figurines); override the restriction against human figurines for that
wishing for "royal jelly" yielded "lump of royal jelly" as a special case, but
other 'of' items such as "clove of garlic", "sprig of wolfsbane", or
"piece of cloth" didn't allow using their post-of words as shorthand
monster or object detection found semi-dead vault guard at <0,0> while
traversing fmon list; monster detection gave misleading feedback
(blank map instead of 'strange feeling') if there were no other
monsters on level; likewise object detection and guard's minvent
squadprob[] in mkroom.c was defined with 5 elements but initialized only 4
resulting in giant ants sometimes
allow nurses heal attack when wielding a non-weapon/weaptool
if riding or levitating, hero could apply bullwhip downward to pull up things
from underwater or lava; feedback implied the item was on the surface
some monster code was checking whether pets or engulfers were eating green
slime by checking for green slime corpse instead of glob
change light radius of stack of candles to square root
could get redundate "mon hits other-mon" messages when mon wields an artifact
failed untrap while mounted that moved hero onto the trap would leave steed
with stale coordinates, triggering warnings if 'sanity_check' is On
when digging a pit results in it being filled by adjacent pool or lava, any
objects at the spot weren't subjected to water or fire damage;
also, riding hero's steed wasn't subjected to immersion either
after "double trouble", cloned Wizard would wait until he had suffered some
damage or hero moved into direct view; keep STRAT_WAIT for original
Wizard but avoid that for clones
beyond turn 100000, prayer timeout is longer (scaling with game length)
falling while going down stairs and dropping items due to encumbrance or
punishment wasn't subjecting fragile ones to breakage
objects scattered by an explosion which land on water or lava weren't affected
by the water or lava
hold_another_object (for wishing, horn of plenty, theft while poly'd, other
non-pickup actions giving hero another inventory item) wasn't
reporting change in encumbrance; that would catch up on next turn but
could be off during additional move(s) for current turn
hold_another_object added item to inventory first, then maybe removed and
dropped it, resulting in spurious add and remove perm_invent updates
hold_another_object used hardcoded Stressed to limit carrying instead of
using the 'pickup_burden' option for that
when hold_another_object fails while hero is swallowed, drop the item into
swallower's inventory instead of onto the floor
change mkclass() to usually honor (always honor for L class) the hell-only and
never-in-hell monster creation flags; no more achi-lich in the Castle
(nor master lich there unless demilich gets a potion of gain level)
thieving monster could be killed while hero was removing armor, triggering
warning "stealarm(): dead monster stealing" when taking-off finished
petrifying a long worm and then reanimating it handled tail incorrectly;
with sanity_check On, X coordinate of head segment was reported as 0
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
------------------------------------------------------------------
fix compile when DLB isn't defined
urealtime.realtime was being incorrectly calculated
revised "mysterious force" when climbing out of gehennom could generate
warnings about "rn2(0) attempted" or "rn2(-n) attempted"
after 'w' on split stack patch, wielding '-' would cause an object_lost panic
same patch allowed partial stack from getobj to replace cursed wielded weapon
autounlock of door or chest took no time; chest case depended on whether
anything got looted along with the unlocking
autounlock with artifact unlocking tool didn't do touch check on that tool
autounlock picked Rogue's artifact key over lock-pick or credit card (or
ordinary key depending upon invent order) even for non-rogues who
would be blasted when touching it
wielded aklys had its "(tethered weapon...)" description scrambled
randomized trap name could pick trap #0 which isn't a trap and yielded "water"
if running and Blind or Stunned or Fumbling or Dex < 10, encountering a closed
door orthogonally would keep reporting "ouch! you bump into a door"
repeatedly until eventually interrupted by approaching monster or
hunger or ^C
data.base lookup of an entry with any blank lines would falsely claim that
"'data' file in wrong fromat or corrupted" after some extra checks
were added while investigating tab handling anomalies
using nhl_error() to report a Lua processing problem would clobber the stack
level teleporation's "You materialize on a different level!" could be given
out of sequence with other arrival messages
more sequencing: if wielding Sting or similar and level teleporting to a
level with different warning effect, the start-glowing or stop-glowing
message came before the materialize message on the destination level
prevent "you materialize on a different level" after "a mysterious force
prevents you from descending" if you try to level teleport past the
stairs down from the quest home level before being granted access
creating Mine Town variant 1 (Orcish Town) sometimes complained about being
unable to place lregion type 1 and failed to have any staircase up
set g.context.botl for glove and wielding actions that could start or end
bare-handedness in support of condtests[bl_bareh]
reinstate ranked ordering of the status condition fields
grammar for messages about a monster removing items from a container was bad
some new status conditions didn't always update when they should
fix flipping non-existent stairs and ladders (github #311)
fix door created into random wall or position opening into solid wall
'use_inverse' option was accidentally made Windows-only; change it back to
being more general; change its default to True
change inconsistent achievement spelling of "Mine Town" to "Minetown"
fix crash in water_damage_chain
teleport feedback "you materialize at another location" was given too soon
'mention_decore' was repeatedly reporting "you are back on bottom" when
moving around underwater
revised 'mention_decor' was describing furniture or ice right before look-here
described the same thing when stepping onto object(s)
poison gas clouds located over known but unlit pools were visible as known
clouds but steam clouds in that situation were not
after the wish parsing change, wishing for "<something of monster>" or for
"<monster something>" worked as intended but wishing for "<monster>"
(where <monster> used the canonical spelling) triggered a crash
fix new "objects[0] class #1 not in order!" panic if plain 'char' is unsigned
only generate shop items on solid floor squares
avoid gcc 10 warning by removing duplicate definition of 'head_engr'
if a monster removed a corpse from an ice box, the corpse would never rot away
monster creation on quest levels could make genocided creatures
tty: redraw unexplored locations as S_unexplored rather than <space> after
map has been partially overwritten by popup menu or text display
tty: previous change resulted in remnants of previous level being shown on
new level after level change when S_unexplored is <space>
X11: was still initializing map to 'stone' instead of 'unexplored' after they
became separate glyphs
X11: for text map without color, add support for black&white ice; draw it in
inverse video to distinguish from ordinary floor
Platform- and/or Interface-Specific Fixes
-----------------------------------------
SYSCF: treat most sysconf directives that have invalid values as warnings
rather than errors; use a conservative default value and continue
curses: for vertical status, line up conditions in columns; usually two but
condense to three per line if the status window isn't tall enough
[at present, highlighting with inverse video includes trailing spaces
used to align entries in their columns--that's a feature...]
msdos: add -DSTATUES_LOOK_LIKE_MONSTERS to Makefile1.cross so the VESA mode
can display statue glyphs
tiles: add indicator of thonged portion to aklys tile
tty: role and race selection menus weren't filtering out potential choices
which got excluded by OPTIONS=align:!lawful or !neutral or !chaotic
Unix: when user name is used as default character name, keep hyphenated value
intact instead stripping off dash and whatever follows as if that
specified role/race/&c (worked once upon a time; broken since 3.3.0)
Unix: add "ec2-user" to the list of user names 'sysconf' classifies as generic
Windows: update for new status condition fields
Windows: include commented-out 'PORTABLE_DEVICE_PATHS' in sysconf.template
X11: substantial overhaul of status display, both 'fancy' and 'tty-style'
X11: extend fancy status one-turn inverse video status-change highlighting to
hunger, encumbrance, and conditions
X11: stop including unused column 0 in the map
General New Features
--------------------
if a killer bee encounters a lump of royal jelly and there is no queen bee on
the level, the bee will eat the jelly and become a new queen
automatic annotation "gateway to Moloch's Sanctum" for vibrating square level
once that square's location becomes known (found or magic mapped);
goes away once sanctum temple is found (entered or high altar mapped)
savefile: add support to deconstruct internal data structures down into their
individual fields and save those fields instead of the entire struct
savefile: use little-endian format for fields where that makes a difference
replace build-time level compiler and dungeon compiler with run-time loading of
the dungeon and level descriptions and interpreting them via Lua
split off some of the functionality that was in makedefs (compiled-in options
build date/time, etc) so that it can be built by a cross-compiler
and accessed on the target platform
replace quest.txt and associated conversion to quest.dat via makedefs with
Lua quest texts loaded at runtime
some altars are displayed in different colors (for tty and curses at least)
add 'quick_farsight' option to provide some control over random clairvoyance
where pausing to be able to browse temporarily visible aspects of the
revealed map can seem intrusive; doesn't affect clairvoyance spell
replace "money" in in-game texts with "gold"
when hallucinating, see hallucinated currencies instead of bits for an ale
when hallucinating, see hallucinated liquids when looking at water or lava
on the map
applying a spellbook hints about read charges left
wizard mode wishing for level topology can now create hidden doors (ask for
"secret door" when at a door or wall location), hidden corridor
spots ("secret corridor" at a corridor location), and clouds
tiny chance for randomly created spellbooks to be Discworld novels instead
of having only one in the first book or scroll shop created (won't
occur in hero's initial inventory or NPC priest inventory or be
bestowed as a prayer boon or be found in statues)
'goldX', 'implicit_uncursed', and 'mention_walls' options changed to be
persistent across save/restore
wearing a wet towel confers "half damage from poison gas" attribute
for end of game disclosure and dumplog, show 'achievements' (previously only
available as an encoded value in xlogfile) along with 'conduct'
more grades of self-appearance than beautiful or handsome vs ugly
when 'color' if Off and 'use_inverse' is On, draw ice on the map in inverse
video if it uses the same character as room floor or as dark floor
new 'mention_decor' option; when On, describe dungeon features being stepped
on or floated/flown over even when they're not covered by objects
applying royal jelly on an egg kills, revives, or changes the egg
intelligent monsters pick up and rummage through containers
toggling 'travel' option Off now only inhibits travel by mouse click, not by
'_' command where choosing the destination provides a chance to cancel
different glyphs and symbols for stone and unexplored areas
new glyph GLYPH_NOTHING was added so !dark_room has something to be set to
now that stone could be mapped to an entirely different symbol
added several new status conditions all of which are opt-in except
the new cond_grab and cond_lava which are opt-out
tipping your cap might get a response
special levels can be flipped horizontally and/or vertically
new special level initialization routine, "swamp"
demon lords and princes suppress teleporting in Gehennom
for !fixinv option where inventory letters normally don't stick, try to put
a throw-and-return weapon back into the same inventory slot it gets
thrown from; only works if it does return and is successfully caught
wizard mode #wizborn command
include more skill information in ^X output when dual-wielding
item-using monsters will zap wand of undead turning at corpse-wielding hero
when the corpse is harmful
boiling a pool or fountain now creates a temporary cloud of steam
random themed rooms in the dungeons of doom
extended achievement and conduct fields for xlogfile
record amount of gold in hero's possession in xlogfile
new objects: amulets of flying and guarding
new monsters: displacer beast ('f') and genetic engineer ('Q')
make camera flash which reveals previously unseen map features or objects or
monsters record those on the hero's map; monsters revert to 'unseen'
boolean options can optionally have the form "name:value" with value taken
from among "true", "yes", "on", or "false", "no", "off"
record number of wishes and artifact wishes in xlogfile
Platform- and/or Interface-Specific New Features
------------------------------------------------
NetHack Community Patches (or Variation) Included
-------------------------------------------------
hallucinatory trap names from github pull request #174
autounlock feature originally from unnethack in github pull request #228
replace "You feel cold" message for freezing unseen door (github #265)
applying a candelabrum with no candles gives a tip (github #265)
candelabrum now reads "(n of 7 candles attached)" (github #265)
show appropriate message on throne when crowned (github #265)
choir chanting, bathing in darkness for death by Moloch (github #265)
remove "iron hook" unidentified description (github #265)
suppress "Unknown command" messages in the dumplog. (github #265)
give player message informing them they can use #enhance (github #265)
neutral sacrifices disappear in a cloud of smoke (github #265)
call potion bottles by nonsensical names if hallucinating (github #265)
add a default message for chatting to gnomes (github #265)
better reporting directions for impossible() (github #265)
underwater fire scroll causes vaporization (github #265)
default shk sell prompt to N (github #265)
teach non-mindless monsters about the Castle trapdoors (github #265)
always print a message when the hero teleports (github #265)
always print a message when the hero level teleports (github #265)
remove Sokoban luck penalties for actions you can't cheat with (github #260)
sounds for minotaurs (github #298)
correct the Guidebook descriptions for msdos video_width and video_height to
state that they work with video:vesa; the video:vga setting that was
described there forces the 640x480x16 mode where video_width and
video_height don't operate (github #294)
redo rndmonst() to operate in a single pass (github pull request #286)
Code Cleanup and Reorganization
-------------------------------
new core file insight.c - move enlightenment and conduct from cmd.c to it,
also move vanquished, genocided, and extinct monsters from end.c,
and move one-line stethoscope/probing feedback from priest.c
move majority of global variables into instance_globals struct g
move zeroobj, zeromonst, zeroany into const_globals struct cg
remove STATIC_DCL, STATIC_OVL, STATIC_VAR, STATIC_PTR
old Qt moved from win/Qt to win/Qt3 and files renamed to use qt3_ prefix
more current Qt for Qt version 4 and 5 moved from win/Qt4 to win/Qt; qt4
moniker changed to qt_
window-port-interface: add_menu() modified to take a more general itemflags
parameter to support uses beyond just 'preselected'
window-port-interface: start_menu() modified to take a new mbehavior parameter
add some bounds checking to tabexpand (doesn't prevent the apparent compiler
optimization bug that put homebrew OSX executable into endless loop)
unified breamm and breamu
added some stair helper functions
unified the code for finding a queen bee
unified the code for multishot class bonus code
unified the code for obtaining the inventory letter value for sortloot
unified the code for (un)locking boxes in inventory
unified the code for finding room pos for some features
unified the code for revealing hiding monsters for mvm attacks
options overhaul: moved the option definitions into include/optlist.h;
combined the boolean and compound options into one allopt[] array;
each option has its own individual function for setting the option,
for retrieving the option value, and for processing the option
following its selection in the 'O' menu, added doc/options.doc file.
function reglyph_darkroom() relocated from options.c to display.c
resurrect 'makedefs -m' to be able to derive default mons[].diffculty values
suitable for assigning to new or changed monsters
convert obj->oextra->omid from pointer to scalar
get rid of unused obj->oextra->olong
relocated unmaintained code to outdated folder, specifically sys/amiga,
sys/atari, sys/be, sys/mac, sys/os2, sys/wince, win/Qt3, win/gem,
win/gnome