Issue a livelog/#chronicle message if saving-grace saves the hero. Right now it's classified as conduct for livelog filtering, because I didn't want to implement a new category (needs update of global.h and also the template 'sysconf') and conduct felt like the best fit of the existing classifications. Report whether saving-grace is available or already used, among the attributes of magical enlightenment or end-of-game disclosure. And move the fixes entry for it from the fixes section to the new features section of fixes3-7-0.txt. It seems likely that someone will want to turn not using saving- grace into a tracked conduct. That seems like overkill to me, not to mention inflating the N for "N conduct games".
3009 lines
187 KiB
Plaintext
3009 lines
187 KiB
Plaintext
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1472 $ $NHDT-Date: 1725143669 2024/08/31 22:34:29 $
|
|
|
|
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 map_glyphinfo() 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
|
|
update persistent inventory when 'menu_headings' or 'sortloot' options change
|
|
update persistent inventory when putting on a helmet causes it to auto-curse
|
|
inventory cursing caused by "this water's no good" effect when drinking from
|
|
a fountain didn't update persistent inventory window
|
|
leashing or unleashing pets wasn't updating persistent inventory window
|
|
when the wetness of a towel in inventory changed, persistent inventory wasn't
|
|
updated to show that
|
|
using wizard mode identify to ID 'all' updated perm_invent window but IDing
|
|
specific items--even every one of them--did not
|
|
hold_another_object added item to inventory first, then maybe removed and
|
|
dropped it, resulting in spurious add and remove perm_invent updates
|
|
when hold_another_object fails while hero is swallowed, drop the item into
|
|
swallower's inventory instead of onto the floor
|
|
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 used hardcoded Stressed to limit carrying instead of
|
|
using the 'pickup_burden' option for that
|
|
transforming a potion by dipping a unicorn horn into it could result in the
|
|
potion being dropped due to 'pickup_burden' if encumbrance was already
|
|
over threshold before dipping but within it after removal from invent
|
|
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
|
|
tribute (Discworld snippets) typos, in book order rather than fix order:
|
|
Sourcery passage #4 "the moment the words were out of your mouth" ->
|
|
"the moment and the words out of your mouth" where "were" didn't
|
|
belong and awkward phrasing because of it caused "and" to be removed
|
|
(would be much clearer if optional comma after "moment" was included)
|
|
Moving Pictures passage #10 initial single quote should be double,
|
|
#12 "or" -> "of", #14 second instance of "megalomaniac" misspelled
|
|
Lords and Ladies passage #5, near end add missing opening double
|
|
quote, passage #7 last paragraph, "to" -> "be"
|
|
Men at Arms passage #1, italicize /for/, passage #2, insert omitted
|
|
word "had": 'it was /fate/ that _had_ let Edward'
|
|
Interesting Times passage #1, italicize several words
|
|
Feet of Clay passage #1, second "does not need" -> "doesn't even need"
|
|
Hogfather passage #7 missing initial double quote for "Oh, just ...",
|
|
also #7 insert missing "you" into "Why are you feeling [...]"
|
|
Soul Music passage #1, italicize /feel/, #8, "fossile" -> "fossil"
|
|
Jingo passage #2 "Vines" -> "Vimes", "profferred" -> "proffered",
|
|
missing opening single quote on second sentence of Lord Downey's
|
|
line, passage #11 both in footnote: "genious" -> "genius",
|
|
"was, oddly enough, was one [...]" -> "was, oddly enough, one [...]"
|
|
The Fifth Elephant #1, italicize /always/, #9, "dublet" -> "doublet"
|
|
The Truth #1, italicize several words
|
|
Thief of Time #2, "gold starts" -> "gold stars"
|
|
A Hat Full of Sky passage #9 "though" -> "thought"
|
|
Death quotes #29, "metaphore" -> "metaphor"
|
|
various, including Death quotes: use two spaces to separate sentences
|
|
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
|
|
make vrocks emit a poison cloud when they flee
|
|
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 if boolean option
|
|
safe_wait is on - override with 'm'
|
|
prevent searching or waiting if hero is slimed, stoning, strangled,
|
|
or deadly ill if safe_wait is on - override with 'm'
|
|
allow random mimics to show up mimicking 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 noticeable if "<mon> finishes taking off his suit" is given
|
|
hostile monsters with a ranged attack 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
|
|
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
|
|
attempting to read a novel while blind reported "you can't read the mystic
|
|
runes" like for a spellbook; use "you can't read the words" for novel
|
|
don't let life draining reduce a monster's max HP below its level + 1
|
|
report "<Mon> expires" rather than "<Mon> dies" if polymorphed hero kills a
|
|
non-living monster (golem, vortex) with life drain (vampire bite)
|
|
allow hero in silver-hating form to ring the silver bell but only if on/over
|
|
the vibrating square
|
|
reading the Book of the Dead while blind is allowed; doing so gives
|
|
"you turn the pages of the Book of the Dead" and the type of item
|
|
becomes discovered, but the object wasn't being flagged as 'dknown'
|
|
so if not seen yet it remained "a spellbook" in hero's inventory
|
|
reading cursed Book of the Dead while blind gave feedback for sighted hero
|
|
reading non-cursed Book of the Dead after prepping with the other tools gave
|
|
a message referring to those as "artifacts" if either of them were
|
|
cursed; those unique items aren't artifacts so use "relics" instead
|
|
zapping a line of boulders with striking or force bolt was updating 'couldsee'
|
|
but deferring 'cansee', resulting in seeing the first boulder fracture
|
|
and only hearing that happen for the others despite coming into view
|
|
the default engraving, epitaph, and bogus monster inserted by 'makedefs -s'
|
|
(3.6.6 fix for empty source data file) lacked terminating newline, so
|
|
when the corresponding file wasn't actually empty its first line ended
|
|
up concatenated; default portion of the bad combined entry would be
|
|
decrypted properly but the portion from the file's first line wouldn't
|
|
if the Wizard of Yendor fled up the stairs on level 1, the game would behave
|
|
as if he was still in play, but he wouldn't be on migrating monsters
|
|
list so couldn't be brought back and wouldn't appear on Plane of Earth
|
|
(stale non-zero value for context.no_of_wizards)
|
|
if a mind flayer's psychic blast targeted a hidden monster, feedback named
|
|
the monster but it wasn't brought out of hiding
|
|
hero poly'd into a mind flayer who used #monster to emit a psychic blast was
|
|
able to harm mindless monsters with it
|
|
some hero attacks that should have gotten a skill bonus or penalty didn't
|
|
change internal name of "<foo> venom" to "splash of <foo> venom"
|
|
some operations that made sense to handle venom ('D', scroll of identify, no
|
|
doubt others) ignored it because venom is suppressed from packorder;
|
|
matters for wizard mode or for normal play that loads wizard bones
|
|
singularize "splashes" to "splash" instead of "splashe"
|
|
treat slinging gems and tossing or slinging stones at unicorns as attacks
|
|
give rot-away timer instead of revive timer to corpses of cancelled trolls
|
|
switch revive timer to rot-away timer if a troll corpse gets cancelled
|
|
uncancel an ice troll if its corpse is put into an ice box; give corpse a
|
|
revive timer if later taken out
|
|
splitting a stack of candy bars gave new wrapper text depending upon the
|
|
obj->o_id value assigned; keep existing text for both halves of stack
|
|
(side-effect: separate candy bars usually won't merge anymore)
|
|
describing tin variety (deep fried, pureed, &c) relied on the 'contents known'
|
|
flag but object identification wasn't setting obj->cknown for tins
|
|
wizard mode #wizintrinsic: setting Levitation wouldn't block Flying as
|
|
intended because the check for that was being made too soon
|
|
chatting to the quest leader in wizard mode with sufficient experience level
|
|
and insufficient piety, player is asked whether alignment should be
|
|
boosted; answering 'n' resulted in being prompted a second time
|
|
end of game inventory disclosure passed an inappropriate argument to the
|
|
inventory display routine; not noticeable for tty and curses,
|
|
noticeable but not harmful for X11, and slightly harmful for Qt
|
|
turning into slime rendered hero as slime one turn too soon
|
|
avoid potential infinite loop if hangup occurs at ring "right or left?" prompt
|
|
randomize the turns where accessories and extrinsics affect nutrition
|
|
handle being interrupted by approaching monsters more consistently
|
|
if hero attacked a peaceful monster, some other peaceful monsters with humanoid
|
|
shape (minotaur, zruty, perhaps others) that witnessed it but which
|
|
shouldn't be capable of normal speech expressed their surprise audibly
|
|
make gasp/exclamation message from peaceful monsters be more verbose to
|
|
indicate which monster is doing the gasping or exclaiming
|
|
when make was invoked with -j makedefs instances could end up running in
|
|
parallel and could trample on each other's temp files; default to
|
|
using mkstemp(); allow a port runtime library implementation that lacks
|
|
mkstemp() to define HAS_NO_MKSTEMP to revert to the old behavior;
|
|
provide a work-alike mkstemp() implementation for windows visual studio
|
|
in mdlib.c so there is no requirement to define HAS_NO_MKSTEMP there
|
|
make piranhas faster and give them extra bite attack
|
|
fire sources can ignite candles, lamps, and potions of oil
|
|
for multiple drop ('D') with menustyle traditional or combination, if the only
|
|
object class player picked was '$' then it operated on all classes
|
|
small monsters could seep through their shirt
|
|
don't snuff brass lantern when it's hit by water unless it is submerged
|
|
when reporting that hero can't repair a chest's broken lock with key/pick/card
|
|
just describe the base item without BUC, user assigned name, &c since
|
|
"You can't repair a chest's lock with an uncursed key." implicitly
|
|
suggests that you might be able to do so with a blessed or cursed one
|
|
pre-populate teleport destination prompt with travel destination
|
|
ghosts cannot be renamed
|
|
tossed upwards objects got two times half physical damage reduction
|
|
monster xorns could pass through iron bars but not eat them; monster rock
|
|
moles could no neither; now they can eat bars when adjacent and will
|
|
do so if the bars are blocking their path
|
|
hero poly'd into rust monster could implicitly eat bars when adjacent by
|
|
trying to move there, now when in rock mole form too; in xorn form
|
|
can explicitly eat them via 'e' after moving onto their spot
|
|
monster hiding under an egg that hatched was kept hidden
|
|
restful sleep regenerates hit points
|
|
restful sleep gives a warning message few turns before you fall asleep
|
|
attacking non-adjacent concealed mimic by applying a polearm would make the
|
|
hero be stuck to that mimic
|
|
hero could break a wand ("raising the wand high over your head, you break it
|
|
in two") even if hands were welded to a two-handed weapon or to a
|
|
one-handed weapon and also to a shield
|
|
if a monster threw a cockatrice egg at the hero but hit and petrified another
|
|
monster, the hero would get credit/blame for killing it
|
|
since ki-rin look quite a bit like unicorns, make them be more like one:
|
|
allow them to use their own horn to cure themselves; remove M1_ANIMAL,
|
|
change MS_NEIGH to MS_SPELL, add MR_POISON, use horse body parts;
|
|
they're still 'A' rather than 'u' and don't care about gems
|
|
wand/scroll of create monster or bag of tricks that makes a new monster which
|
|
can be seen or sensed becomes discovered, but was doing so even for a
|
|
concealed mimic seen as furniture or an object
|
|
'showscore' could be used to determine how much gold was inside a container
|
|
whose contents were unknown
|
|
wizard mode (only way to get timed flying): if levitation and flying time out
|
|
on same turn, player was told "You have stopped levitating and are
|
|
now flying."; status line wasn't updated to remove stale Fly condition
|
|
throwing or kicking a shop container (that's light enough to move) made the
|
|
hero pay for any gold inside, then didn't refund that amount if the
|
|
container landed inside the shop
|
|
try to fix message sequencing for tame golems that "roast/rot/rust in peace"
|
|
autodescribe when moving the cursor was erroneously honoring MSGTYPE=stop
|
|
and potentially delivering sounds
|
|
reduce the number of "seeXYZ" commands by renaming some: #seenv -> #wizseenv,
|
|
#seegold -> #showgold, #seespells -> #showspells, #seetrap -> #showtrap
|
|
when saving while punished or game ends while punished, handling for ball and
|
|
chain might access freed memory with unpredictable consequences
|
|
brown pudding monster hitting another monster with decay attack corroded armor
|
|
instead of rotting it
|
|
<?> -> <full key bindings> omitted 'n' prefix and M-digit for number_pad mode,
|
|
and ^A/re-do was suppressed due lack of obsolete '#define REDO'
|
|
add missing key binding support for rush.numpad; default is M-5 for numpad==1
|
|
or plain 5 for numpad==2 where behavior of 5 and M-5 are swapped
|
|
allow monsters to use wand of undead turning to revive corpses on floor
|
|
in some situations
|
|
selling a container to a shop for gold leaves any contents that the shop
|
|
doesn't ordinarily buy and sell owned by the hero, but selling the
|
|
container for credit resulted in the shop taking possession of such
|
|
contents without giving any additional credit; mark out of place
|
|
contents 'no_charge' so that hero can reclaim them without buying
|
|
add some new demonic and angelic maledictions
|
|
when fire damage dried a wet towel, it would never reduce the wetness to 0
|
|
when water damage wet a towel, the new wetness might randomly become less
|
|
make Death revive earlier, and all the Riders after 67 turns at latest
|
|
when protection from shape changers begins, force mimic out of concealment
|
|
even if hero can't see its location; for locations that can be seen,
|
|
don't make double-trouble Wizard concealed as another monster--or pet
|
|
temporarily mimicking something while eating mimic corpse--fall asleep
|
|
best possible armor class reduced from -127 to -99; worst from +127 to +99;
|
|
charged or enchanted individual items also capped at +/- 99 (affects
|
|
wizard mode wishing, negligible effect on normal play)
|
|
fix several inconsistencies for objects at hole locations
|
|
make repeat (^A) work when bound to some other keystroke
|
|
if a prefix key was bound to some character which ordinarily ran a regular
|
|
command and that command wasn't bound to another key, typing the
|
|
prefix followed by a non-movement key behaved strangely: instead
|
|
of reporting "invalid direction" it would run the other command
|
|
(actually depended upon relative order of prefix's new and old key)
|
|
reqmenu (the request-a-menu prefix supported by a handful of non-movement
|
|
commands) could be bound to some key other than 'm' but it only
|
|
worked if the new key was also a movement prefix
|
|
when telepathically sensed pet ate a mimic corpse and temporarily took on
|
|
a different shape, you were told that you sensed it changing into
|
|
something but the map continued to show its true shape (telepathy
|
|
overrides mimic hiding); give a different message in that case
|
|
when a pet ate a mimic corpse and tried to temporarily look like a sink it
|
|
ended up looking like a throne (terrain type SINK == symbol S_throne)
|
|
have dowhatdoes ('&') catch up with '?i' to describe ^A, ESC, and movement
|
|
prefix keystrokes correctly instead of reporting "no such command"
|
|
give barrow wights a cold touch
|
|
for configuration using external compression on save files that applied a name
|
|
suffix, 'selectsaved' (restore via menu) couldn't handle any which had
|
|
been manually uncompressed, mangling file name trying to remove suffix
|
|
an empty lamp hit by fire reported "the oil lamp catches fire" (but at least
|
|
didn't light)
|
|
spells that require a target spot rather than a direction (like skilled
|
|
fireball) would not let a blinded hero target his/her own spot, with
|
|
feedback stating hero failed to hold location sufficiently in mind;
|
|
when not blind, such spells left autodescribe feedback for target spot
|
|
in the message window while the spell was being performed
|
|
prevent wish request "death wand" from matching Death monster and producing a
|
|
random wand instead of a wand of death
|
|
grammar bit: "you hear a [AEF] note squeak in the distance" (should be "an")
|
|
during engraving, spaces were counted instead of non-spaces [later: affected
|
|
code is gone, removed when engraving was converted into an occupation]
|
|
when an explosion scatters objects, make any that fly over sinks stop there
|
|
output message when changing fastmove mode while cursor targeting
|
|
messages when Minetown watchmen become angry could report "you see an angry
|
|
guard approaching" even if he was invisible and hero can't see invis
|
|
when autopickup is on but disabled due to being inside a shop, have ^X say so
|
|
don't force fake player monks to always be male
|
|
it was theoretically possible to overflow an internal buffer containing
|
|
inventory letters by carrying more than 52 separate lit candles and
|
|
using the '(' or '*' commands
|
|
hero would be blinded and stunned by an Archon's radiance (gaze attack) even
|
|
if the Archon was blind, but monsters would not
|
|
applying a polearm to attempt to attack a hidden monster would report "wait!
|
|
there's a monster hidden there" and display the "remembered, unseen
|
|
monster" glyph but only use a turn if polearm wasn't already wielded
|
|
key parsing during options processing was inconsistent between OPTIONS=foo:k
|
|
BINDINGS=k:foo where k represents a key designation; the OPTIONS form
|
|
recognized backslash escape sequences but not M-x meta characters,
|
|
vice versa for BINDINGS (most noticeable for menu interaction keys
|
|
such as menu_next_page because those can be set via either directive)
|
|
when creating a rolling boulder trap, don't place boulder on a path that
|
|
starts on or passes over a pit/spiked pit, hole/trap door,
|
|
teleport trap/level teleporter/magic portal
|
|
remove superfluous "All" from "All foos are already nonexistent." when blessed
|
|
genocide tries to remove something which has already been genocided
|
|
"#dip <item> into -" produced a scrambled message:
|
|
You mime dip <item> intoing something.
|
|
similarly, "#rub the royal jelly on -" produced
|
|
You mime rub the royal jellying on something.
|
|
mounted hero falling out of saddle shouldn't hit ground and take damage when
|
|
levitating or flying (if done without steed's help)
|
|
avoid "obj not free" panic if monster kills itself by reading scroll of earth
|
|
attempting to throw a partial stack of gold at self was prevented but left
|
|
the partial stack in an extra $ inventory slot
|
|
quivering a partial stack of gold succeeded and put the partial stack in an
|
|
extra $ inventory slot
|
|
if player managed to get multiple $ items, all but the last could be moved to
|
|
normal letter slots via #adjust and then subsequent #adjust with a
|
|
count could split them into even more slots
|
|
when a monster on the far side of a closed door opens it, sometimes the hero
|
|
was told about the monster without it being displayed on the map
|
|
also show extended command name when showing what a key does in help
|
|
poly'd hero who exploded when attacking a monster didn't wake up other
|
|
monsters in the vicinity; when attacking thin air, hero's explosion
|
|
woke other monsters within different radius than same monster's would
|
|
troll corpse revival was inhibited by hero wielding Trollsbane; change that
|
|
to being killed by Trollsbane instead (wielded by hero or by monster)
|
|
statues representing petrified creatures on Medusa's level might be from
|
|
monsters who change form (golems) when hit with stoning damage
|
|
attempt to make corpse or statue of a named player character would yield that
|
|
of a random monster instead when 'record' was empty; could result in
|
|
statues of non-stonable creatures in cockatrice nests
|
|
homemade tin of very low nutrition corpse gave more nutrition than the corpse
|
|
magic mapping performed while engulfed or underwater would display whole map
|
|
but then not switch back to the engulfed or underwater restricted view
|
|
#overview used hardcoded bold and inverse for highlighting; switch to the
|
|
'menu_headings' option value so player has some control
|
|
for menustyle:full, the 'A' menu choice to auto-select everything now only
|
|
does so if no other choices have been picked; when any have (object
|
|
class or BUCX state or both), it auto-selects every item that matches
|
|
those choices (so still skips the second menu) rather than every item
|
|
using travel to move one step diagonally where that step was blocked by being
|
|
too narrow to squeeze through stopped travel instead of considering
|
|
alternate routes to the destination
|
|
turn off input autocompletion for '#twoweapon' since simple 'X' invokes it;
|
|
likewise for #wizdetect (^E), #wizgenesis (^G), #wizidentify (^I),
|
|
#wizlevelport (^V), #wizmap (^F), and #wizwish (^W); probably ought
|
|
to do so for #overview (^O) too but that one still autocompletes
|
|
if a branch has only one level (Fort Ludios), prevent creation of any level
|
|
teleporters there (level definition doesn't have any but wizard mode
|
|
wishing could attempt to place one)
|
|
opening/unlocking magic zapped at monster holding the hero will release hold
|
|
(zap at engulfer already expels hero); zapping at self has same effect
|
|
when riding, allow scroll of remove curse read by hero to affect steed's saddle
|
|
the 'scores' option for final top ten display left default values in place if
|
|
only some of the three settings were set; 'scores:own' should have
|
|
produced '0 top/0 around/own' but ended up as '3 top/2 around/own'
|
|
allow 'scores:none' as shorthand for 'scores:0 t/0 a/!o' (player will be told
|
|
whether new score made the list but no scores will be shown)
|
|
contents of chests, large boxes, and ice boxes are now immune to water damage
|
|
unless the container is cursed, same as for oilskin sacks (previously,
|
|
chests+large boxes were always immune and ice boxes always vulnerable)
|
|
applying an empty brass lantern in an attempt to light it reported "your lamp
|
|
has run out of power"; change to "your lantern is out of power"
|
|
when swallowed or underwater, player could be told about events (such as a
|
|
shapechanger taking on a new form) that the hero sensed but which
|
|
were not shown on the screen; treat being swallowed or underwater as
|
|
situations which block telepathy, extended monster detection, warning
|
|
some rolling boulder trap feedback was inconsistent
|
|
change "killed by <a foo>, while {paralyzed|frozen} by <a foo>" into
|
|
"killed by <a foo>, while {paralyzed|frozen}" if the killer caused
|
|
hero's helplessness
|
|
"It looks very angry" would be given if a hero wielding Excalibur or Demonbane
|
|
offended an unseen demon lord
|
|
Entering a special room, only wake up the monsters in that room instead of
|
|
doing a level-wide wake-up
|
|
any blessed key was behaving as if was the rogue's Master Key when unlocking
|
|
a trapped chest or box
|
|
when an unseen non-pet picks up or uses an item, hero loses known/dknown/
|
|
bknown/cknown/lknown memory of that item (so becomes unidentified; in
|
|
particular, player won't be asked what to call unseen thrown potion)
|
|
when picking up a stackable item, it can be identified by comparing it to
|
|
another identical item that is already identified
|
|
wishing for a partly eaten wraith corpse yielded "partly eaten food (1) more
|
|
nutritious than untouched food (0)"
|
|
if PREFIXES_IN_USE was defined (and VAR_PLAYGROUND forces it to be) when
|
|
COMPRESS was also defined (external save and bones file compression
|
|
via fork()+exec()), the file name buffer in docompress_file() wasn't
|
|
big enough so could overflow and trigger a crash
|
|
suppress "This <foo> corpse takes {delicious|okay|terrible}" if preceded by
|
|
"You have a bad case of stomach acid" or "Ecch - that must have been
|
|
poisonous"
|
|
innocuous items like scrolls or eucalyptus leaves did harm when falling on
|
|
hero's head after being thrown upward
|
|
fighter types who start out knowing all non-magic armor should not know
|
|
cornuthaum and dunce cap
|
|
prediscovered weapons adjustmens: only knights and samurai know polearms;
|
|
rangers know launchers (bows), ammo (arrows), and spears regardless
|
|
of their race/species; likewise, rogues know all daggers
|
|
if the move counter ever reaches 1000000000, end the game
|
|
knights get no metal armor penalty for clerical spells
|
|
change touch of death from instadeath to maxhp reduction and damage
|
|
report cause of death due to touch of death as "killed by the touch of death
|
|
inflicted by <monster>" instead of just "killed by a touch of death"
|
|
report cause of death due to wand/spell/breath as "killed by <flash damage>
|
|
zapped/cast/exhaled by <monster>" instead of just "killed by <damage>"
|
|
dying from being level-drained below level 1 killed hero without saying so
|
|
and jumped straight to "do you want your possessions identified?"
|
|
conflict will now consider your charisma and requires line of sight
|
|
boost hit points of some golems
|
|
make anti-magic fields always drain max energy
|
|
eating magical monsters such as wizards or shamans may give a mild buzz
|
|
make exploding spheres create an actual explosion
|
|
pets are more careful about attacking monsters at low health
|
|
allow killing your quest leader to open the quest
|
|
give King Arthur Excalibur
|
|
when moving the cursor to examine the map, have '^' move to next trap even if
|
|
that trap is displayed with some other symbol (web, vibrating square)
|
|
change valkyrie and warrior (valk quest) monsters from chaotic to lawful
|
|
change attendant (healer quest) monster from lawful to neutral
|
|
quit is not longer bound to M-q
|
|
change default value of autopickup to off and color to on
|
|
resurrected corpse of mon could end up with different gender from original mon
|
|
using a bullwhip to snatch a wielded cockatrice corpse from a monster when not
|
|
wearing gloves and without life-saving could trigger "obj_is_local"
|
|
panic during final cleanup
|
|
make fire-command autowield an appropriate launcher and add fireassist boolean
|
|
option to toggle the assistance off
|
|
Angels and priests were always described as "the {Angel,priest,high priest} of
|
|
<deity>" when first two should have been "{an Angel,a priest}..."
|
|
shopkeepers can remove pits and webs
|
|
perm_invent: when buying shop goods using itemized purchasing while persistent
|
|
inventory window was enabled, the prices of unpaid items went away as
|
|
soon as any item was bought (actual item-by-item purchase worked ok)
|
|
perm_invent: making an engraving which reduced known enchantment of a weapon
|
|
or known charge count of a marker didn't update persistent inventory
|
|
perm_invent: over-reading a spellbook so that in faded to blank didn't update
|
|
persistent inventory to show that if blank spellbook was already known
|
|
change getloc fastmove keys in number_pad mode from hardcoded HJKL to the
|
|
run/rush movement keys (meta+number)
|
|
allow using rush/run prefix key in getloc to fastmove the cursor
|
|
avoid "it" in messages "Wait! There's an it hiding under <an object>!" (hero
|
|
moving) and "It was hidden under <an object>!" (unseen monster moving)
|
|
don't extinguish burning objects when engulfed by a fire vortex
|
|
allow wishing for a novel via description "paperback book" (previously only
|
|
worked when specifying "paperback spellbook")
|
|
deal with gold leaving a shop via scatter()
|
|
defer encumbrance check during polymorph to new man; newman() -> redist_attr()
|
|
-> encumber_msg() could report change in encumbrance that immediately
|
|
became obsolete if polyman() subsequently restored old attributes
|
|
fix heap-use-after-free when attacking monster with potion
|
|
for "a" vs "an", add ukulele and uke as exceptions for "an u<anything>"
|
|
add new extended command #retravel
|
|
remove special doinv key, functionality was equal to BIND=0:inventory
|
|
some monsters should not have been scared of bugle playing
|
|
monsters that drowned would never leave a corpse (holdover from decades ago
|
|
when it wasn't possible to recover anything from a water location)
|
|
give alternate message if hero is blind when throne gives "your vision clears"
|
|
monster wearing an alchemy smock was only getting poison resistance from it,
|
|
not acid resistance; give both properties, just like for hero
|
|
in wizard mode, knowing teleport away spell resulted in ^T always attempting
|
|
the spell instead of teleporting on demand
|
|
describe a couple of isolated moat spots on Samurai quest home level as water
|
|
rather than as moat
|
|
crawling out of water to avoid drowning didn't work as intended when trying
|
|
to move diagonally through a tight squeeze
|
|
in wizard mode, polymorphing into hero's role monster in order to revert to
|
|
normal form would complain about missing light source if hero was
|
|
changing back from the form of a light-emitting monster [didn't affect
|
|
normal play because role monsters are invalid polymorph targets there]
|
|
revise a 3.6.1 fix: if a spellbook which is being read becomes cursed, always
|
|
stop reading: "The <book> slams shut!" and set book->bknown
|
|
concealed mimic could trigger sanity check warning "mimic concealed as an
|
|
object despite Prot-from-shape-changers" if hidden as "strange object"
|
|
cancelled shape changer would become uncancelled if saved and restored (even
|
|
just leaving its level and then returning)
|
|
don't include time spent suspended in background (^Z) or in shell escape (!)
|
|
in the total elapsed time recorded to xlogfile
|
|
if a monster is starting to turn into green slime, eat the corpse, tin, or
|
|
egg of any creature that might polymorph into a fiery monster to cure
|
|
the slime, not just of one of a chameleon
|
|
yet another fix for display problems during restore: if game is saved while
|
|
hero is hallucinating but that's suppressed because of wielding
|
|
Grayswandir, hero is riding, and the steed is on or over an object,
|
|
restore will try to update hero's spot when making sure objects aren't
|
|
being obfuscated by hallucination, but when displaying the hero there
|
|
instead it would access steed pointer before that has been set up
|
|
resistances gained from worn or wielded items also protect hero's inventory
|
|
dwarvish cloaks somewhat protect hero's inventory from cold and fire
|
|
non-metallic gloves protect worn rings from shock
|
|
message "Oops! food rations out of your grasp!" occurred due to perm_invent
|
|
in mid-operation overwriting all of xname's/doname's obufs; fixed by
|
|
having hold_another_object() defer perm_invent update til done with
|
|
all its args (so fixed as a side-effect of "spurious add and remove
|
|
perm_invent updates" above, prior to being reported as #K3401)
|
|
similar "The ogre lord yanks Cleaver from your corpses!" due to caching the
|
|
result from makeplural(body_part(HAND)) then having a perm_invent
|
|
update clobber that; fixed by having inventory display release the
|
|
obuf used for each item so that the same one will be reused for the
|
|
next item, to avoid churning through the whole pool of obufs
|
|
gas clouds are a little random in how they spread out from a point
|
|
Izchak occasionally stocks wands/scrolls/spellbooks of light
|
|
data tracking for #overview was mis-using u.urooms[] and after being in a
|
|
situation where hero was in multiple rooms at once, visiting other
|
|
levels might flag unvisited rooms as having been visited
|
|
special damage attacks by the Riders and by fatal-illness inflictors such as
|
|
Demogorgon did no damage against other monsters, only against the hero
|
|
using obj->o_id to control 'random' behavior of a helm of opposite alignment
|
|
could potentially be controlled by player when wishing for such
|
|
obj->o_id might be set to invalid value 0 when a partly used up stack had a
|
|
dummy copy added to a shop's bill or when a bones file was loaded
|
|
(in theory that could happen on any system but in practice it could
|
|
only happen on a configuration that uses 16-bit ints)
|
|
if a Rider or displacer beast swapped places with a single-segment long worm
|
|
the segment co-located with the head wasn't moved with that head;
|
|
if sanity_checking was enabled a warning could be triggered:
|
|
mon (000000) at seg location is not worm (123abc)
|
|
blessed scroll of remove curse read while confused blesses or curses any
|
|
uncursed items in inventory, but if hero was dual-wielding and the
|
|
scroll cursed the secondary weapon, that would be dropped and further
|
|
object traversal would process items on the floor at hero's spot
|
|
instead of the rest of inventory
|
|
can now use m<dir> to try to move to an adjacent boulder's spot without
|
|
pushing it; hero poly'd into a giant or a tiny creature or carrying so
|
|
little as to be able to squeeze there will succeed, others will fail
|
|
breaching a shop wall, using locking magic to put a door there, then unlocking
|
|
that door yielded a situation where subsequent shop damage repair
|
|
produced invalid map data which resulted in an impossible() warning
|
|
about "wall_angle: unknown" during map display; similar for a vault
|
|
wall if it's the spot where the guard arrives to lead hero out
|
|
if vault guard arrives on a boulder in a breach in the vault wall when coming
|
|
to lead the hero out, smash that boulder into rocks so that the hero
|
|
won't try--and fail, because the guard will be in its way--to push it
|
|
when vault walls are repaired, destroy any rocks or boulders at their spots
|
|
melting ice timer could persist after the ice was gone from digging or from an
|
|
exploding land mine
|
|
using 'F'orcefight against iron bars while wielding something breakable could
|
|
yield erratic outcome because non-deterministic breaktest() was being
|
|
called twice and could yield results that conflicted
|
|
have applying a polearm give feedback similar to 'F' for melee weapon when
|
|
attacking a wall or boulder
|
|
if weight_cap() ever returned 0 (which probably can't happen), using #untrap
|
|
to pull a monster out of a pit would trigger a divide by 0 crash
|
|
avoid "you now detect it where the vampire bat was" when a vampire shifts from
|
|
a bat seen with infravision to an unseen fog cloud
|
|
if an artifact gets created as a random treasure drop and then deleted because
|
|
it is too big to include with a small corpse, explicitly uncreate it
|
|
instead of just discarding it so that it is eligible for use later
|
|
when creating random contents for a container, explicitly exclude artifacts
|
|
(already implicitly excluded because randomly generated artifacts are
|
|
all weapons and containers don't start with any weapons in them)
|
|
don't give lance or mattock as starting equipment when creating soldiers
|
|
fixup for the insect "legs" (some extraneous walls inside solid stone) on the
|
|
baalz level didn't work as intended if that level was flipped
|
|
handle flipped level when fixing up the baalz level "eyes" too
|
|
prevent normal monster activity from picking up the mines' luckstone or the
|
|
Sokoban amulet/bag before hero has done so; relying on scare monster
|
|
and/or engraved Elbereth wasn't sufficient to guard the Sokoban prize
|
|
proceed a little further into dochat() if hero is deaf
|
|
stacks of 1 to 49 gold pieces weighed 0
|
|
the chance for #untrap to free a monster stuck in a web was very unlikely
|
|
unless hero was poly'd into spider form; make it less hard
|
|
if #untrap monst-from-web failure happened while hero was standing on a spot
|
|
where a new web couldn't be created (furniture, grave, magic portal),
|
|
the expected "<monst> remains entangled" feedback wasn't delivered
|
|
if hero is wearing an amulet of magical breathing and polymorphs into a fish
|
|
or sea monster, don't lose health for turns spent out of water
|
|
fix up some "the" handling for monsters whose type name is upper case to avoid
|
|
"Uruk-hai is healthy for a statue", "You can't polymorph into Oracle"
|
|
controlled polymorph would turn hero into new man or woman if player asked to
|
|
become a unique monster of the same race (so usually human) instead of
|
|
being told that polymorphing into the specified form wasn't allowed
|
|
assigning a fruit name that matches the name of an artifact which doesn't use
|
|
any "the" prefix could yield messages showing "the Artifact" when
|
|
dealing with the artifact rather than fruit: "You are blasted by _the_
|
|
Excalibur's power!"; didn't impact basic inventory formatting
|
|
selection of random engravings, epitaphs, and hallucinatory monster names had
|
|
the same problem that rumor selection used to have: entries which
|
|
follow longer than average lines are most likely to be chosen and
|
|
ones which follow shorter than average lines are least likely; use
|
|
same workaround as for rumors: pad the shortest lines; result isn't
|
|
uniforn distribution but is better (tradeoff vs size; see makedefs)
|
|
make selection of random rumors, engravings, epitaphs, and hallucinatory monst
|
|
names have uniform distribution by handling long lines specially
|
|
when filling a special room with monsters, if one that can come in groups got
|
|
picked the group could spill to outside of the room
|
|
extend 3.6.1 fix to explicitly use name of unseen shopkeeper instead of "It"
|
|
in various shop related messages (ones issued outside of shk.c)
|
|
fix some inconsistencies with applied bullwhip vs monster
|
|
polymorphing while wearing an amulet of strangulation from a form that wasn't
|
|
vulnerable to one that was gave wrong message ("still constricts")
|
|
for accessibility reasons, give a message when monster teleports and
|
|
when a monster is created during gameplay (for the cases that
|
|
did not have their own custom message)
|
|
if a gremlin stole intrinsic 'see invisible' the map wasn't updated properly
|
|
mark some messages as urgent ("You die*.", having equipment stolen, being
|
|
caught in a magical explosion)
|
|
if a leashed pet changed name (#name m) or an unnamed pet changed type
|
|
(polymorph or grow-up) and perm_invent was On, persistent inventory
|
|
display didn't get updated to show the leash's changed information
|
|
attack feedback when using a bullwhip said "swing"; change to "lash";
|
|
use "lash" for hero hitting with wet towel too
|
|
attack feedback for monster using polearm when adjacent said "thrust"; change
|
|
to "bash"
|
|
apply runmode delay to multiturn actions, not just running
|
|
if a giant carrying a boulder was on ice that melted, it could be killed
|
|
twice, first by drowning, then by boulder filling the resulting pool
|
|
when it dropped inventory before being removed from the map
|
|
allow fire-command to automatically use a polearm, if wielding it
|
|
make '$' command also count gold carried inside containers
|
|
fleeing leprechauns bury their gold after teleporting
|
|
allow #tipping container contents directly into another container
|
|
when one leg is wounded, have ^X report which (already used plural if both)
|
|
wand of probing used on steed ('z >') didn't include wounded leg(s) feedback
|
|
getting wounded in one leg when the other was already wounded miraculously
|
|
healed old leg and kept longer of their recovery timeouts for new one
|
|
when parsing config file entry "BINDINGS=key1:cmd1,key2:cmd2,key3:cmd3" allow
|
|
keyN to be either a naked comma or backslash+comma instead requiring
|
|
that comma's numeric value be used to bind comma to a command
|
|
when two or more shops share a wall and hero uses Passes_walls to carry an
|
|
unpaid item from inside a shop into the shared wall, it could yield
|
|
impossible "unpaid_cost: object wasn't on any bill" when examining
|
|
inventory if the shop code picked wrong shopkeeper to determine cost
|
|
when two or more shops share a wall and hero uses Passes_walls to carry an
|
|
unpaid item through the shared wall into another shop, theft of that
|
|
unpaid item from the first shop wasn't noticed
|
|
redo the unpaid_cost fix to handle shop items inside hero-owned container
|
|
flyers shouldn't fall on arrival when going down holes or trap doors
|
|
change movement keys and some special keys into extended commands
|
|
"WHAMMM!!!" feedback when kicking a door suggests noise so if hero is deaf an
|
|
alternate message should be given
|
|
fix typo in message shown when hero sees a monster's wet towel become drier
|
|
for hero with slippery fingers, enlightenment reports "slippery fingers" or
|
|
"slippery gloves" but self-probing described it as "slippery hands"
|
|
when hitting with wet towel causes it to lose some wetness, defer "your towel
|
|
dries" until after the hit message
|
|
do some extra damage when hitting an iron golem with a wet towel
|
|
when already at level 30 and gaining another level--which doesn't increase
|
|
level further but does add more HP and Pw--throttle the increases
|
|
don't stop running when next to a peaceful, unless it blocks the way
|
|
mindless monsters shouldn't cringe stepping on squeaky boards
|
|
falling down a hole or trapdoor will cause damage proportional to fall height
|
|
stinking gas clouds block line-of-sight
|
|
covetous monsters will teleport to downstairs or upstairs to heal
|
|
have fake player monsters use verbalize instead of pline when reacting to chat
|
|
fix mention_walls distinguishing unseen walls from solid stone
|
|
don't push unknown boulders when moving
|
|
in flush_screen, reorder the code slightly to complete the bot() and
|
|
timebot() calls prior to the window port call to place the cursor
|
|
on the hero
|
|
magic traps can toggle intrinsic invisibility
|
|
Death attacking a monster does drain life attack
|
|
add unique Rider revival messages
|
|
don't dereference NULL u.ustuck in dobuzz() when hero has been swallowed
|
|
monsters should growl even if you can't hear it
|
|
give a sound effect message when thrown item lands in water or lava
|
|
don't show rusting of items that land in water
|
|
the water used on the Plane of Water stops thrown or kicked items
|
|
looting will do #force if you could do it and the container is locked
|
|
and you didn't have a tool to unlock it
|
|
use silly names for rays (such as breath weapons) when hallucinating
|
|
zombies groan instead of being silent
|
|
martial arts users, sasquatches, and heroes wearing kicking boots can
|
|
no longer miss a monster completely with a clumsy kick
|
|
knights get no caitiff penalty against undead
|
|
candy bars are bright blue in text mode
|
|
towels weigh more than blindfolds
|
|
knight quest home level contains some saddled warhorses
|
|
allow creating unhidden traps in special levels
|
|
reading magic marker shows the specific red ink color
|
|
imps and other creatures cussing hero wake up nearby monsters
|
|
make ravens oviparous
|
|
thrown items can get stuck in webs
|
|
engraving with Fire Brand burns the text on the floor and does not
|
|
dull the artifact
|
|
make looting less tedious by getting rid of a y/n prompt making the command
|
|
go directly into the loot-in-out -menu
|
|
always give a message when monster changes form via polytrap if seen
|
|
illiterate hero receiving a spellbook from their deity gets the spell shoved
|
|
directly into their mind instead
|
|
adjust levels of sleep, confuse monster, and charm monster spells
|
|
replace monk starting sleep spell with confuse monster
|
|
chargeable rings have a chance of getting charged when hit with electricity
|
|
flint and hard gems break less often when thrown
|
|
hobbits getting a sling also get some ammo for it
|
|
elves and rangers get alignment penalty for cutting down trees
|
|
casting a forgotten spell uses some random amount of power
|
|
heroes starting with a spell have at least one level one spell, and
|
|
have just enough power to cast it
|
|
huge monsters and pit fiends get easily out of pits
|
|
give a message when a trapped monster frees itself from some trap
|
|
change kitchen sink glyph to a white {
|
|
killed wood golem has a chance to also drop small shields, clubs,
|
|
elven spears, and boomerangs
|
|
discovering an object on first turn with persistent inventory enabled might
|
|
not update inventory info for that item (autopickup a blank scroll
|
|
or spellbook and read it as first action; it becomes discovered but
|
|
will still be shown as if undiscovered until next inventory update)
|
|
most traps now require touching the floor to trigger
|
|
if a lit potion of oil on the floor was launched by an explosion and it hit
|
|
and killed the hero via missile damage rather than its own explosion,
|
|
it could trigger an "obj_is_local" panic when end of game cleanup
|
|
tried to extinguish it as a light source
|
|
place_object() validated coordinates after using them to index level.objects
|
|
killed rope golem may drop leashes and bullwhips
|
|
using magic portals stuns hero for a few turns
|
|
using level teleporters confuses hero without teleport control for a few turns
|
|
clear obj->bypass for buried objects [a giant on ice triggers a fire trap,
|
|
inventory is subjected to burning and surviving objects have their
|
|
bypass bit set, giant is killed by fire trap and drops a boulder and
|
|
other inventory, ice is melted, boulder plugs resulting pool burying
|
|
rest of giant's dropped inventory, subsequent sanity checks report
|
|
that there are buried objects which are 'flagged bypass']
|
|
give Sunsword as starting gear only to lawful Angels; since Demonbane has
|
|
become a mace and Angels only get swords, they won't start with it
|
|
for #knownclass with menustyle=Traditional, allow player to ask for `a even if
|
|
no artifacts have been discovered yet, same as `<any-object-class>;
|
|
likewise for `u to ask to see unique items
|
|
reduce eucalyptus leaf nutrition to 1
|
|
life-saving might increase max HP; if level drain triggers that, don't let max
|
|
HP go up because it confuses healing for monster wielding Stormbringer
|
|
HP recovery and/or max HP boost from eating royal jelly didn't perform a
|
|
status update to show the change
|
|
if poly'd hero is hiding under food and eats or #offers that food, stop hiding
|
|
hide-under monsters who can be turned to stone aren't able to hide under a
|
|
cockatrice corpse unless there is something else present but make sure
|
|
that the other items aren't all more cockatrice corpses
|
|
don't stop travel when going past a closed door (eg. when traveling along
|
|
a room wall)
|
|
some monster corpses can now convey temporary acid or stoning resistance
|
|
fix travel getting stuck oscillating between two locations
|
|
kicking a trapped chest and getting the exploding chest result destroyed items
|
|
at the hero's location rather than the chest's location; because of
|
|
that it left the exploded chest intact
|
|
it was possible to destroy a Rider corpse with an exploding chest
|
|
when teleporting, don't consider pits/spiked pits/trap doors/holes as unsafe
|
|
destination locations if hero is levitating or flying
|
|
try to avoid locations with engraved Elbereth or scare monster scroll when
|
|
creating new monsters or picking teleport destinations for monsters
|
|
who are susceptible to those
|
|
be more flexible when wishing checks for artifact name matches; now allows
|
|
"firebrand" or "fire-brand" to yield "Fire Brand"
|
|
exclude unique monsters from pacification when untrapped from web
|
|
ask to kick a door open, if it's locked and you don't have unlocking tool
|
|
give a message when stinking cloud is created on top of hero
|
|
when being life-saved prevents the hero from moving again during current turn,
|
|
avoid logfile annotation "while helpless" if hero dies a second time
|
|
if drinking from a fountain randomly gave the 'detect monsters' effect but
|
|
there were no monsters on the level then there was no feedback
|
|
object detection always showed a mimic imitating a statue as a tengu even if
|
|
it had information available about some other type of monster
|
|
avoid "the Lord Surtur's corpse glows iridescently" when shk_your() or the()
|
|
is applied to the corpse of unique monster with a personal name
|
|
restoring while attached ball or chain is on floor in a breach of a shop wall
|
|
could have it be moved out of wall gap as that gets repaired, then
|
|
might trigger an impossible about being positioned too far from hero
|
|
don't try to catch up for lost time for shop damage repair in restdamage()
|
|
called from getlev(); let normal shopkeeper movement take care of it
|
|
shop wall repair that was delayed because the hero or a monster was an
|
|
obstacle in the gap at repair time might not be displayed as wall
|
|
once the obstacle moved and the repair eventually took place
|
|
putting objects into a container with menustyle=traditional and then taking
|
|
them back out with #tip would result in complaints about obj bypass
|
|
bit being set if sanity_check was On
|
|
when drinking or dipping, allow the 'm' prefix to be used to skip asking
|
|
about fountains and pools
|
|
calling real or fake Amulet something could give away information about them
|
|
throwing gold while inside a purple worm would yield "The gold disappears
|
|
in the the purple worm's entrails." (note doubled "the")
|
|
inventory #adjust for !fixinv, after picking 'from' slot the prompt for 'to'
|
|
slot was supposed to include the next letter beyond those in use as
|
|
a candidate for destination but an off by 1 error only showed a-x
|
|
where x is last letter used (despite that, y could still be picked)
|
|
with two-weapon combat or Cleaver attacking multiple targets, hero kept going
|
|
with next attack after being paralyzed by passive counter-attack
|
|
trap detection could falsely find trapped secret doors; those can't be trapped
|
|
due to details of how they use overlaid fields in the rm structure
|
|
for force-fight against edge of level, report "you harmlessly attack unknown
|
|
obstacle" rather than "you have moved as far <direction> as possible"
|
|
using wizard mode ^V in endgame to return to previously visited Plane of Water
|
|
now gets the same air bubbles back instead of a replacement set;
|
|
likewise for clouds on Plane of Air
|
|
on tty at least, "version incompatibility for save/123xyzzy" was invisible:
|
|
a blank message of appropriate length followed by --More--
|
|
fix a pair of off-by-one bugs when doling out initial characteristics points,
|
|
resulting in an unintentional bias toward Str and away from Cha;
|
|
negligible effect on individual games but had a minor cumulative
|
|
effect across a large set of games
|
|
using a marker to write "novel" or "paperback book" on a known blank spellbook
|
|
was producing a randomly chosen Pratchett novel; make it fail instead
|
|
when a monster killed a pudding and it left a glob, that glob might not be
|
|
displayed on the map (wasn't an issue for killed-by-hero case)
|
|
if player gave a subset count when removing an item from a container, then got
|
|
the pickup_burden prompt and declined to continue, the item remained
|
|
split rather be recombined, making it possible to create multiple
|
|
stacks of gold inside a container
|
|
two-handed weapon message stated "welds to monster's hand" instead of
|
|
"welds to monster's hands"
|
|
when formatting an object, avoid capitalization of "The" in "<item> named
|
|
The <quest-artifact>"
|
|
be less specific when cause of death is "handling a <ring or wand>" that
|
|
happened to be silver for current game; list it as "a silver ring" or
|
|
"a silver wand" rather than "ring of searching" or "wand of locking"
|
|
adjust the row placement of copyright and early startup messages so that
|
|
aren't partially overwritten by prompts that follow
|
|
ball and chain could be accessed after having been freed if bones were saved
|
|
early post-3.4.3 tried to fix the "naming artifacts trick" which could be used
|
|
to distinguish the type of some undiscovered items, but using a name
|
|
that only matched an artifact after capitalization was exploitable
|
|
the u.ustuck hierarchy is: swallowed by ustuck, hero poly'd into sticky form
|
|
is holding ustuck even if ustuck is sticky, ustuck is holding hero;
|
|
but some code assumed that the first two cases were reversed and
|
|
could make formerly sticky pold'd hero clear ustuck, leaving hero
|
|
swallowed by nothing (u.uswallow==1 with u.ustuck==NULL); that could
|
|
cause a crash if u.ustuck got dereferenced
|
|
when a vampire gains levels and grows into a vampire lord, change its cham
|
|
field (shapechanger base type) from vampire to vampire lord so that if
|
|
it revives in base form it won't revert to plain vampire
|
|
a migrating long worm that couldn't arrive could be placed at <0,0> while
|
|
setting up another migration attempt to the level, triggering
|
|
impossible "trying to place long worm tail at <0,0> mstate:8 on level"
|
|
(message is confused; it should say "long worm" without tail)
|
|
dropping things with 'D' wouldn't merge them with compatible items already at
|
|
that floor spot because use of obj->bypass made them seem incompatible
|
|
a hero on the quest home level who runs or travels past the quest leader and
|
|
gets tossed out of the quest for some reason would keep running on the
|
|
far side of the quest portal
|
|
allow rush/run over water if wearing discovered water walking boots
|
|
flying pets wouldn't target underwater food but if they happened to fly over
|
|
such food they could and would eat it
|
|
praying on an altar with pet corpse on it can revive the pet
|
|
applying a cursed oil lamp can make your hands slippery
|
|
valkyries start with a spear instead of a long sword
|
|
grid bugs don't have hands
|
|
if #wizmakemap was used to generate a replacement level while any shopkeeper,
|
|
temple priest, or vault guard from the level was off of it at the
|
|
time, the monster's eshk, epri, or egd data became invalid and would
|
|
cause trouble if the monster returned to its 'home' level
|
|
similarly, if #wizfliplevel was used to transpose an active level while a
|
|
vauld guard was maintaining a temporary corridor or while a monster
|
|
with eshk, epri, or egd data was off level, that data became invalid
|
|
blessed potion of polymorph will prompt user for monster to poly into
|
|
out of array bounds access attempt occurred when deciding whether to bounce
|
|
if wand or spell zap reached edge of map
|
|
if blind hero was challenged by a vault guard, it wasn't possible to see how
|
|
to start following that guard out of the vault
|
|
make taming via magic harp be consistent with scroll of taming and charm
|
|
spell: an angry shopkeeper becomes pacified (but never tamed)
|
|
wielding a bec de corbin makes ravens generate peaceful
|
|
moving with 'm' prefix allows hero to enter a known pit carefully
|
|
rangers always succeed in disarming bear traps, unless impaired
|
|
bigroom variant 2 may have ice floor in unlit areas
|
|
bigroom variant 3 may have some walls replaced with other terrain
|
|
bigroom variant 4 may have two large squares of terrain in the middle
|
|
bigroom variant 5 may have patches of ice or clouds
|
|
some large monsters can knock back smaller monsters with a hit
|
|
change Demonbane to a mace, make it the first sac gift for priests,
|
|
and give it an invoke ability to banish demons
|
|
wielding Giantslayer prevents knockback from larger monsters; likewise for
|
|
carried loadstone(s)
|
|
scared hostile monster which cannot move away will attack
|
|
prevent a fog cloud that has engulfed the hero from moving under closed doors
|
|
allow cutting a known spider web with wielded weapon by force-fighting the web
|
|
holes and trapdoors have a fixed exit level
|
|
recent changes to losedogs() could result in an infinite loop when migrating
|
|
monsters try to arrive as hero moves to a different level
|
|
when invisible without see invisible you could see your hands glowing red
|
|
after reading a scroll of confuse monster and delivering melee hits
|
|
greased saddle makes it impossible to mount the steed
|
|
if an item-using monster zaps a wand of digging downward on a level that
|
|
doesn't allow holes but does allow pits, create a pit and trigger it
|
|
no longer override the effect of a new moon by simply carrying a lizard corpse
|
|
make explosions burn monster's armor just like they do hero's armor
|
|
make healing and extra healing better by upping the average amount healed
|
|
lifesaving healing amount depends on the constitution
|
|
hitting a monster with a wielded potion hits you far less
|
|
pyrolisks get a mundane bite attack
|
|
chances of random item being an artifact depends on already existing artifacts
|
|
monsters can zap wands of teleportation at hero
|
|
piranhas devour corpses
|
|
turn on menucolors boolean automatically if any menucolors are defined
|
|
blind hero was notified when brass lantern burned out even though it isn't
|
|
warm enough to detect that by touch; manually switching the lantern
|
|
on or off can be determined that way so still gives on/off message
|
|
turn on statushilites automatically if any are defined
|
|
change poison instakill to damage with attribute and max hp loss
|
|
trappers and lurkers above enfold themselves around and crush their victims,
|
|
not swallow and digest
|
|
attempting to move up or down when poly'd into a holder and holding a monster
|
|
rejected the move; release the monster instead
|
|
throwing a non-weapon while engulfed by an ochre jelly reported that the item
|
|
vanished into the jelly's "currents"
|
|
if a pet gelatinous cube eats a container, treat it the same as when a hostile
|
|
one does: the container is destroyed but its contents are engulfed
|
|
when breaking a wand of sleep hits the hero with the explosion, don't describe
|
|
that as "the sleep ray hits you"
|
|
expose fuzz tester to wizard-mode as #debugfuzzer extended command
|
|
monsters which cannot move due to boulders or walls try to escape
|
|
intelligent monsters see and remember when others trigger traps
|
|
random figurines are of harder monsters by 5..10 difficulty points
|
|
statues for statue traps are of harder monsters too, but only by 3..6
|
|
monsters can blind you with a camera
|
|
lit candles generated by wishing could have wrong light radius
|
|
better feedback from detect unseen
|
|
make public server admin messages use urgent_pline
|
|
cannot kick while squeezed on top of a boulder
|
|
room stocking would put multiple items on the same spot
|
|
splitting a stack of named, shop-owned objects while perm_invent is enabled
|
|
produced impossible "unpaid_cost: object wasn't on any bill."
|
|
more consistent feedback if a reviving corpse becomes an unseen monster
|
|
improve consistency between applying a key and explicitly opening a door:
|
|
if in a pit, you're told "you can't" and no time elapses; if there
|
|
isn't any door in the direction supplied, you're told "no door" and
|
|
time elapses if you discover the non-door's terrain type but doesn't
|
|
if you already knew the type there
|
|
if a bones file contained a doppelganger imitating a unique monster, a game
|
|
that loaded those bones would end up with that monster counted as
|
|
having already been created so it wouldn't be created when the time
|
|
for that arrived (the doppelganger would change its shape normally,
|
|
not be stuck in the unique monster's form)
|
|
if Vlad was lured to a level which allowed bones, he could be present in a
|
|
bones file for that level if he was in wolf/bat/cloud form at the
|
|
time hero died; getting those bones in another game would flag him
|
|
as extinct; if that occurred before entering his level he would not
|
|
be created there, leaving no way for hero to acquire the Candelabrum
|
|
when mounted hero got hit by an explosion, hero and steed shared resistances
|
|
removing an engraving from frost (ie, written with fingers on ice) reported
|
|
"you wipe out the message that was written in the _dust_"
|
|
orc hero starts with poison resistance but orc monsters lacked that
|
|
orc hero has maximum 18/50 strength but hero poly'd into an orc got 18/100
|
|
hero with exceptional strength (18/01..18/100) retained that when polymorphed
|
|
into any monster lacking the strongmonst attribute
|
|
give hero poly'd into a giant 19 strength instead of 18/100
|
|
wait for a response after displaying wishing help; affects X11
|
|
guardian nagas' constriction attack could never hit because the two preceding
|
|
attacks must both hit and those were mutually exclusive: bite and spit
|
|
explicitly throwing 1 for non-gold stack of more than 1 and then canceling at
|
|
direction prompt left a pair of stacks of 1 and N-1 with same invlet
|
|
some attack damage which shouldn't affect shades operated as intended when
|
|
hero could see it happen but erroneously affected them when not seen
|
|
phrasing of the "you can't" message when attempting to name any monster
|
|
defined with a unique name or title sounded strange when rejecting
|
|
<space> to remove the existing name without assigning a new one
|
|
some instances of using up or stealing shop-owned boulder didn't charge for it
|
|
when hero hears an unseen monster reading a scroll, only describe the monster
|
|
accurately if hero is not hallucinating and monster is same species
|
|
as hero's current form
|
|
don't allow monsters to disarm hero with bullwhip if hero is engulfed
|
|
teleporting an object out of a shop put it on the shop bill instead of dealing
|
|
with robbery
|
|
map browsing during gold detection didn't describe fake gold marking traps
|
|
when detection was via cursed scroll
|
|
if hero's action caused engulfer to expel swallowed hero, it might do so onto
|
|
a level teleporter and then have its memory accessed after being
|
|
freed when current level was saved in order to load destination level
|
|
throwing recoil while levitating could send hero out of shop while carrying
|
|
unpaid items, triggering sanity check warnings; once outside, taking
|
|
a step other than back into the shop was treated as a robbery
|
|
if punished and iron ball was cursed and wielded--so welded to hand--falling
|
|
when doors would drop it instead of keeping it welded
|
|
if player's run-time config file had OPTIONS=role:Val and the environment had
|
|
NETHACKOPTIONS='role:!Val' the hero would be a Val instead of !Val
|
|
sleeping or unconscious hero attacked by Medusa would meet her gaze
|
|
if a trap killed both the hero's steed and the hero an impossible "dmonsfree:
|
|
N+1 removed doesn't match N pending" warning could occur
|
|
prevent paralyzed hero from helping nymph or succubus remove worn armor
|
|
when identifying items via menu and more than one pass is needed (so when
|
|
identifying 3 items and player only picks 1, for instance), issue
|
|
--More-- because the next menu might cover up the ID message(s)
|
|
slightly more interesting Gehennom filler levels
|
|
don't reveal color of potions, gems, or spellbooks that haven't been seen up
|
|
close (seeing faraway monster operate on an object counts as up close)
|
|
fix freeing a worn object when forced to drop it by falling down stairs
|
|
allow setting per-level "temperature": hot, cold, or temperate, currently
|
|
only affects some messages
|
|
digging is noisy
|
|
polymorphing into fire elemental allows you eat flammable items
|
|
hitting sleeping monsters will cause them to wake up noisily
|
|
demon gating happens more in Gehennom and less outside it
|
|
intelligent peacefuls avoid digging shop or temple walls
|
|
fix bug making random subrooms never touching the right or bottom
|
|
wall of the parent room
|
|
if a grave is created with the corpse lying on top (bones), don't find a
|
|
corpse or release a zombie or mummy when digging it up
|
|
kicking a headstone might summon a ghoul
|
|
eating garlic makes nearby monsters flee
|
|
giants occasionally get a battle axe or a two-handed sword
|
|
give gremlin the property it stole, if possible
|
|
'F'orcefighting with a war hammer has a small chance of breaking iron bars
|
|
player assigned name for monsters, specific objects, or object types could be
|
|
longer than what was intended to be allowed; for 'curses', much longer
|
|
very rarely random items are generated eroded, erodeproof, or greased
|
|
Nazgul can see invisible
|
|
fix a case where punished iron ball yanked hero on top of a monster
|
|
slightly randomize amount of items and monsters in the mines
|
|
dying in a wall spot (temporary gap or via Passes_walls) shared by two shops
|
|
could result in "place_object: \"<item>\" [0] off map <0,0>" warnings
|
|
a monster capable of using a polymorph trap to deliberately change form could
|
|
do so when trapped in an adjacent web or pit; if that happened, the
|
|
monster remained flagged as 'trapped' and wouldn't be able to move
|
|
give feedback when some types of damage are avoided due to MC (aka negation)
|
|
feedback if a named, shape-shifted vampire reverted to original shape rather
|
|
than dying when engulfed could say "Dracula turns into Dracula"
|
|
adjust archeologist and valkyrie starting intrinsics
|
|
spell of knock can knock back small monsters
|
|
protection from shape changers now prevents the Wizard from mimicking monsters
|
|
having worn levitation boots removed and destroyed (scroll, monster spell,
|
|
dragon breath) and floating down into lava can destroy them twice;
|
|
yielded "object lost" panic if program had been built with a debugging
|
|
malloc implementation which overwrites the contents of freed memory
|
|
ensure that all window interfaces respect flags.silent (suppress terminal beep)
|
|
falling into lava, being life-saved, and teleporting out could yield redundant
|
|
descriptions of what was present at hero's new location
|
|
if hero had passes-walls capability and was at the location of a closed door,
|
|
attempting to use 'o' on own spot reported "you don't find anything
|
|
here to loot"; change to open door for '.' (or '<'), only loot for '>'
|
|
items thrown by monster landing on an altar did not show BUC flash
|
|
a chameleon in giant form who gets trapped (bear trap?) while carrying
|
|
boulders and changes shape could be killed when dropping them;
|
|
shape-change traversal of its inventory would continue after it
|
|
dropped everything, possibly resulting in a crash
|
|
if hero is engulfed and polymorphs into a monster form which is too big to be
|
|
engulfed, make engulfer expel the poly'd hero
|
|
give feedback if monster holding onto the hero has to let go when hero polys
|
|
into a form which can't be held
|
|
prevent hug attacks and touch or engulf attacks for wrap, stick-to, and
|
|
digestion damage from succeeding against unsolid targets (ghosts,
|
|
vortices, a few others) or against worm tails
|
|
wand of speed gives temporary speed, potion gives intrinsic
|
|
some monsters (riders, shopkeepers, priests, quest leader) can break boulders
|
|
if hero owes shop for a boulder and shopkeeper breaks it, continue to bill hero
|
|
for the boulder rather than switching to the resulting rocks
|
|
corpse-eating monsters will go out of their way to eat corpses on the floor
|
|
warnings via impossible() would be unseen if message suppression via ESC at
|
|
--More-- prompt was in effect
|
|
wearing the Eyes of the Overworld overrides OPTIONS:blind; breaking the
|
|
always-blind conduct by doing that was intended but having permanent
|
|
blindness stay cured after removing them was not
|
|
change helm of brilliance from iron to crystal so that it no longer needs to
|
|
be a special case for metallic armor vs spell casting
|
|
fake player monsters in endgame had a 1 in 1000 chance to be given a stack
|
|
of 0 gold pieces, eventually triggering an impossible warning (cited
|
|
one was "Calculating weight of 0 gold pieces?")
|
|
avoid "wall_angle: unknown hwall mode 4" when using #terrain command to
|
|
display a spot remembered as a wall but actually a secret door that
|
|
has been transformed into an open door while not in sight
|
|
it was possible to produce a web at a water or lava location; it would not be
|
|
visible but could trap the hero, resulting in drowning or incineration
|
|
engraving in an open doorway was allowed, engraving in closed one (presumably
|
|
via Passes_walls) was not, but closing the door on an engraving was;
|
|
change to allow engraving at closed door location
|
|
engraving in a breach in a shop's or vault's wall or vault guard's temporary
|
|
corridor would leave the engraving intact after repair/cleanup
|
|
if a fire resistant non-fire immune monster wearing a thoroughly burnt wooden
|
|
shield got knocked into lava, burning the shield completely yielded
|
|
impossible warning "obfree: deleting worn obj"
|
|
hangup in wizard or explore mode would result in answering ESC to "Die?"
|
|
prompt if that was reached, and since default is 'no' the hero would
|
|
be life-saved and the game would try to keep going; if circumstances
|
|
resulted in repeat death then the program might get stuck in a loop
|
|
instead of exiting [no reports of such, but if it ever happened the
|
|
process was probably killed without anyone knowing why it happened]
|
|
with OPTIONS=blind (blind from birth), being inflicted with timed blinding
|
|
yielded "your vision seems to dim for a moment but is normal now"
|
|
avoid sanity_check warning if statue in water or lava gets polymorphed into a
|
|
boulder; break it into a stack of rocks if that would happen
|
|
werewolf or werejackal howling and purple worm burping wakes up monsters
|
|
don't exclude map column 1 from consideration when rloc() picks a random spot
|
|
for destination of a teleported monster
|
|
covetous monster attacking another monster to acquire special item would not
|
|
do so if positioned diagonally adjacent
|
|
skip sanity_check handling when current command is ^P, otherwise it might
|
|
re-trigger and show new sanity warning every time when set for
|
|
line-at-a-line feedback
|
|
applying a cream pie (always) or lump of royal jelly (sometimes) would use up
|
|
the object and then access its memory after that had been freed
|
|
keep track of hero's pending movement points across save and restore
|
|
give feedback if hero sees a monster become hidden under an object or water
|
|
hero might hear unseen monster read scroll of create monster or scroll of
|
|
teleportation; when it was create monster, player was given a chance
|
|
to call it something but not when it was teleportation, allowing the
|
|
player to deduce which type of scroll it actually was
|
|
wizard mode wish for terrain while on a fountain|sink spot made the counter
|
|
for number of fountains|sinks become one too big; would affect level
|
|
sound messages if all fountains|sinks were eventually destroyed
|
|
add a level arrival region to the Gnome King's Wine Cellar variation of the
|
|
Mines' End level so that hero can't end up in the treasure chamber
|
|
make potion of water become discovered if dipping a carried container into an
|
|
uncursed one reports that water gets inside or slides right off
|
|
a monster which was temporarily asleep wouldn't be affected by taming (either
|
|
food or magic), but one that was indefinitely asleep would be; when
|
|
tamable via food, it even caught and ate the food without waking up
|
|
in wizard mode, #terrain has offers to view all map locations as single-
|
|
letter codes corresponding to the levl[][].typ numbers and to view
|
|
a legend showing letter-to-type correspondence; adding new type
|
|
"lava wall" didn't update that legend and misdescribed all the types
|
|
which have higher values
|
|
restore the ability for trap creation via magic which creates pits to destroy
|
|
'furniture'
|
|
allow #sit while flying over a squeaky board trap to trigger it
|
|
weight of statues of wraiths and of monsters which never leave a corpse was 0
|
|
when a werecreature in human form attacked hero, it could transform to critter
|
|
despite hero having the Protection_from_shape_changers_attibute
|
|
status highlighting for hit points didn't work as intended for up or down HP
|
|
changes; 'up' rule was used for both, 'down' rule was ignored
|
|
unhide an unseen water monster using a polymorph trap on land
|
|
allow defining random-teleport exclusion zones in lua
|
|
if Magicbane cancelled a shapeshifter, forcing it to 'unshift', subsequent
|
|
messages continued to refer to the shifted form
|
|
a pet that was poison resistant but not stoning resistant would eat Medusa's
|
|
corpse and be turned to stone
|
|
ring of hunger prevents choking on your food
|
|
paranoid_confirm:pray can be changed to require yes/no response instead of y/n
|
|
by also setting paranoid_confirm:Confirm
|
|
wand of probing reveals map locations and traps in the ray path; also reveals
|
|
secret doors and secret corridors if the ray hits such
|
|
wand of probing zapped downward while hero is over water shows items under that
|
|
wand of probing reveals tin and egg contents
|
|
applying a wielded, lit potion of oil to unlight it while other unlit
|
|
potion(s) of oil were quivered would trigger panic
|
|
"addinv: null obj after quiver merge otyp=N" where N is POT_OIL
|
|
casting stone-to-flesh at self turned wielded or quivered rocks into unwielded,
|
|
unquivered meatballs, merging stacks if there were some in each slot
|
|
the throne room on the Samurai quest home level lacked a throne but gave
|
|
"You enter an opulent throne room!" message the first time it was
|
|
entered; vary the message rather than add a throne
|
|
coughing due to stinking cloud wakes up nearby monsters
|
|
stop occupation when timed levitation or choking issues a message
|
|
use #monster to make dragon steed breathe
|
|
steam vortices and fog clouds leave steam clouds behind
|
|
fog clouds maintain any clouds they are in, even poisonous ones
|
|
bone devils summon skeletons
|
|
adjust wand of make invisible and potion of invisibility effects
|
|
barbed devils have an attack that sticks you to them
|
|
balrogs prefer bullwhip if hero is wielding a weapon
|
|
ice devils have an additional attack, a slowing touch
|
|
buff scroll of confuse monster and blessed potion of monster detection
|
|
if a temple was entered while blind, #overview could show a line of just "."
|
|
when describing altars if no other interesting features on that level
|
|
were known
|
|
rolling boulders ignored walls and trees
|
|
shopkeepers consider the monster type when charging for tins, eggs and corpses
|
|
separate level flags premapped and sokoban
|
|
hero had worn amulet of magical breathing become unworn during theft by nymph,
|
|
dropped it to be able to crawl out of water, so it wasn't there when
|
|
game tried to transfer it to thief, triggering an "object lost" panic
|
|
digging down on a magical trap causes it to explode
|
|
thrown potion of sickness now bypasses target's innate magic resistance but
|
|
only affects current hit points, no longer also reducing maximum HP
|
|
lightning has a small chance of melting iron bars
|
|
make spell menu work with repeat
|
|
when attempting to look up a named fruit in data.base, try harder
|
|
set and check mon->mstate flags more consistently
|
|
fix sanity error when cloud was created over an engraving
|
|
docall naming of the monster that currently has the hero swallowed by
|
|
using their visible interior
|
|
give missiles thrown or shot by monsters the same chance to get used up upon
|
|
hitting as when thrown or shot by the hero
|
|
change menu_headings to also accept a color or color&attribute
|
|
issue feedback for encumbrance more consistently during pickup up
|
|
if hero destroys an altar by breaking a wand of digging or applying a drum of
|
|
earthquake, provoke divine wrath
|
|
if hero destroys a shop wall by breaking a wand of digging or applying a drum
|
|
of earthquake, have shopkeeper demand payment
|
|
mimics sometimes woke up and came out of hiding when they shouldn't have if
|
|
hero without protection from shape changers returned to a previously
|
|
visited level (though they would usually rehide so it wasn't obvious)
|
|
Wizards no longer have a bonus to writing unknown spellbooks, but now
|
|
learn what spellbooks look like as they gain skill in their
|
|
spell schools (allowing a guaranteed write with enough skill)
|
|
starting inventory: magic markers are more likely (guaranteed for
|
|
Wizards), but have fewer charges
|
|
early dungeon (pre-Sokoban) generates extra useful survivability items
|
|
potion of healing is much more common, and has a unique price
|
|
alchemy may affect only a portion of the dipped potions if a large
|
|
stack is dipped (especially if that stack is diluted)
|
|
monster kills can no longer deathdrop comestibles (other than the
|
|
monster's corpse) unless the monster collects food or
|
|
generates with food
|
|
about 10% of the heroes will now be left-handed; track the handedness of the
|
|
hero in the 'you' struct
|
|
if a monster fled from hero by intentionally jumping into a vault teleporter,
|
|
it would teleport randomly instead of into the vault, and if the
|
|
teleport trap's niche wasn't mapped yet, the trap would become mapped
|
|
but the spot would remain a secret corridor and not become accessible
|
|
boomerang travels in a clockwise arc when thrown by a left-handed hero and in
|
|
a counterclockwise arc when thrown by a right-handed hero
|
|
spellbooks weight 50 units but Book of the Dead only 20, and novels only 1;
|
|
the Book of the Dead has been changed to 50 and novels to 10
|
|
save and restore hero tracks, increase track length
|
|
change vrock and hezrou from red to green, adjust vrock tile to have green
|
|
change wolf and werewolf to grey, warg to black
|
|
change [master] mind flayer, the Wizard, and the riders to bright magenta
|
|
change Nalzok and Minion of Huhetotl to bright red
|
|
walking into a shopkeeper tries to pay the bill
|
|
show billed items in a menu when paying with non-traditional menustyle
|
|
prioritize paying shopkeeper next to you even if multiple are detected
|
|
avoid impossible "trapped without a trap (fmon)" from 'sanity_check' when a
|
|
drum of earthquake made a pit at a monster's spot and pit creation
|
|
caused adjacent pool/moat/lava to flood that spot; if a non-floater,
|
|
non-flyer monster survived that, it got marked as trapped even though
|
|
flooding deleted the trap
|
|
demons cannot be frightened by showing them their reflection
|
|
HP regeneration formula has changed, primarily to be less fast in the endgame
|
|
riding negates stealth unless the steed is flying
|
|
previous hero rising as undead in bones retains intrinsics
|
|
level temperature affects monster generation
|
|
amulet of unchanging cannot be polymorphed
|
|
wishing for a "lit candle" provided one, but the feedback as it was added into
|
|
invent was "partly used candle (lit)" because of how 'lit' timer works
|
|
don't fall off steed because of Fumbling if saddle is cursed
|
|
cursed welded quarterstaff doesn't prevent spellcasting
|
|
wielded quarterstaff gives a small spellcasting bonus
|
|
if polymorphing a potion turned it into oil, dipping potions produced oil
|
|
randomly, or a horn of plenty produced a magic potion and converted
|
|
it into oil, the resulting potion of oil had its age (amount left)
|
|
set of the original potion's age (turn it was created) and could burn
|
|
for an arbitrarily long time if applied; conversely, polymorphing oil
|
|
into non-oil kept its relative age (no noticeable effect though)
|
|
an engulfer capable of passing through iron bars could do so even when hero
|
|
was engulfed
|
|
some uses of mons[obj->corpsenm] weren't excluding obj->corpsenm==NON_PM (-1)
|
|
if a covetous monster tried to teleport next to the hero but the level was
|
|
completely full, it would be booted off the level (set to migrate
|
|
back if the hero left and returned) instead of just staying put
|
|
if loadstone was unIDed but had been assigned a type name and you failed to
|
|
pick one up, the message referred to it as "gray stone" rather than
|
|
"stone called <assigned name>"
|
|
when a vision blocking gas cloud dissipated, the screen didn't necessarily
|
|
get updated to show newly visible locations in a timely fashion
|
|
if confused #loot while on a throne moved whole stack of quivered gold into
|
|
'coffers' chest, the gold wasn't unworn from quiver slot, potentially
|
|
leading to crash when quiver was subsequently accessed
|
|
when filling quiver slot, don't bother asking "what do you want to ready?" if
|
|
invent is empty
|
|
no secret doors or corridors on the first two dungeon levels
|
|
the number of items destroyed by elemental effects is based on the damage
|
|
randomize the spellbook in the second level of vlad's tower
|
|
monsters weren't randomly generating if exactly one square was outside LOS,
|
|
and it contained a monster
|
|
when a spellbook was polymorphed into a novel and then incrementing spestudied
|
|
field turned it into a blank spellbook, the novel's title would stick:
|
|
"{spellbook of blank paper|plain spellbook} named <Discworld title>"
|
|
walking on ice can make you slide in a random direction
|
|
if an adjacent statue was a in a pit, you could break it with a pick-axe even
|
|
though you're conceptually at the wrong elevation to reach it
|
|
using '#adjust c c' to collect all invent items compatible with the one in
|
|
slot c prefixed the inventory update message with "Merging:" rather
|
|
than "Collecting:" if there was at least one compatible stack; when
|
|
there weren't any compatible stacks and it was effectively a no-op,
|
|
the prefix used was "Collecting", lacking its intended colon
|
|
using '#adjust c d' or '#adjust d c' after splitting slot c via '#adjust Nc d'
|
|
for N less than c's stack size swapped c and d instead of re-merging
|
|
them even though merging was the intended behavior (the 3.6 change
|
|
that caused this was intended to avoid collecting other compatible
|
|
stacks while still merging the two specified ones)
|
|
ring of aggravate monster increases the level difficulty
|
|
if hero shattered an unseen monster's weapon, the [also unseen] weapon was
|
|
described in the feedback
|
|
don't self-genocide if a monk picks "master-lich" or "masterlich" as target
|
|
(was matching "Master" rank)
|
|
Sunsword can be invoked to create a blinding ray
|
|
Excalibur is much harder to get if hero is not a knight
|
|
pets considered any noise made by hero made as whistling
|
|
silent monsters in stinking clouds don't cough
|
|
unblind telepathy range depends on number of telepathy granting items worn
|
|
gold thrown or kicked at a sleeping monster with the 'greedy' attribute gets
|
|
caught instead of being treated as an attack but the catch message
|
|
neglected to report that target monster was awakened in the process
|
|
hero movement affects the water bubble movement direction
|
|
pets and peacefuls avoid a location hero just kicked
|
|
pets avoid a possible boulder pushing location in sokoban
|
|
shopkeepers bill you for using their bear trap or land mine
|
|
when engraving with a stack of eligible weapons, split one off the stack and
|
|
dull it rather than dull the whole stack
|
|
when engraving with a stack of cursed weapons, treat it differently if that
|
|
stack is welded to hero's hand: write in dust and leave whole stack
|
|
welded rather than split one off stack to engrave on floor
|
|
hero or monster didn't fall into pit if water at the location was boiled away
|
|
shopkeepers magnified the cost of shop items used up as a group; normally
|
|
using an item splits 1 from its stack, but applying a stack of N
|
|
candles to light them all charged N * N * single_candle_price
|
|
the tile for Ixoth (knight's quest nemesis) depicted a demon rather than a
|
|
dragon; change it to be a red dragon
|
|
untrapping containers or doors gives some experience
|
|
only honor DEBUGFILES (for activating debugpline() calls) when in wizard mode
|
|
if hero is on scroll of scare monster or Elbereth, werecreature switching from
|
|
human to beast form or general monster polymorphing into a susceptible
|
|
form will become scared right away instead on its next move
|
|
'altmeta' option didn't work as intended when 'number_pad' was On; typing
|
|
"n <count> ESC c" wasn't treated as "n <count> M-c" because reading
|
|
the 'n' changed program_state.input_state from commandInp to otherInp,
|
|
preventing special ESC handling; not an issue when number_pad was Off
|
|
a 3.6 fix to avoid a potential "object lost" panic when drinking potions had
|
|
unintended side-effect of making used up potions on shop's bill become
|
|
separate bill entries all with count 1 despite having come from same
|
|
unpaid stack; affected Ix inventory listing and itemized shop billing
|
|
buying shop items which include any unpaid ones inside containers would reveal
|
|
them even when the containers hadn't been opened (obj->cknown==0);
|
|
recent change to pay via menu made the problem become more visible;
|
|
shopping has been changed such that buying anything that is inside a
|
|
container requires that the whole container be bought as a unit
|
|
using #loot -> 'i'n to put multiple items into a shop-owned container would
|
|
ask whether to sell each item to the shop, and was prepared to accept
|
|
'a' to sell the current one plus all the rest beyond it, or to accept
|
|
'q' to not sell the current one or any beyond it, but the sell vs
|
|
don't-sell state was being reset for each item so 'a' and 'q' didn't
|
|
stick beyond the current one
|
|
join wall "spines" with walls of water and lava
|
|
some theft messages by nymphs force "she", others use default monster naming
|
|
which yields "it" when unseen; change the latter to "someone" which
|
|
still differs from "she" in a series of messages but isn't as jarring
|
|
if a nymph stole worn armor and got killed (perhaps by pet) before hero's next
|
|
turn, feedback would be "You finish taking off your suit." regardless
|
|
of the type of armor being taken off
|
|
when setting an option interactively [via O or 3.7's mO], if the particular
|
|
option uses a prompt to get a line of input (for compounds: 'fruit',
|
|
'scores', most numeric ones), input was treated as a comma-separated
|
|
list of option[:value] rather than just the new value of that option
|
|
when there was a trap on a no-dig level, the floor beneath it was always
|
|
"too hard to dig into", making it impossible to remove the trap
|
|
the #terrain command didn't know how to cope with visible gas/cloud regions;
|
|
treat as traps as far as player choice of whether to show or hide;
|
|
if/when a spot contains both region and trap, show the trap
|
|
region expiration reported "the gas cloud around you dissipates" even when the
|
|
hero was swallowed
|
|
region expiration could report "the gas cloud around you dissipates" and also
|
|
"you see a gas cloud dissipate" for the same cloud spot
|
|
reduce shopkeeper's innate speed from 18 to 16 so that a hasted shopkeeper
|
|
doesn't always get 2 moves per turn
|
|
when a secret corridor was discovered by wand of secret door detection or by
|
|
wizard mode ^E and converted into a regular corridor, if there was a
|
|
formerly embedded object at the spot, presence of the object would be
|
|
forgotten unless within range of a light source
|
|
when poly'd into a giant, kicking a closed door always succeeds in breaking it
|
|
|
|
|
|
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
|
------------------------------------------------------------
|
|
incrementing EDITLEVEL to invalidate incompatible save files was not working
|
|
as intended because VERSION_COMPATIBILITY was defined as 3.7.0-0 and up
|
|
rather than as 3.7.0-N for the current EDITLEVEL 'N'; undefine it
|
|
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 format 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 teleportation'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
|
|
handle gone portal when going back in quest
|
|
'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
|
|
enabling wizard mode 'sanity_check' option would complain about invalid mhpmax
|
|
value for level N monsters created with a d8 value of 1 for all N d8's
|
|
disable that extra check because gremlim HP split after cloning triggers it
|
|
some versions of tiles processing (not X11's) complained about the rename of
|
|
"{acid,blinding} venom" to "splash of {acid,blinding} venom"
|
|
wizard mode #timeout changed to show timed Displacement in 'can be timed in
|
|
normal play' section instead of 'timed via #wizintrinsic only' section
|
|
the fix to make worm visibility checks work as intended forced the coordinates
|
|
of the extra tail segment co-located with the worm monster to match
|
|
the worm instead of leaving it off the map; place_worm_tail_randomly()
|
|
reverses the segments and can throw some away if there isn't room,
|
|
but throwing away the extra segment removed the worm from the map
|
|
using 'O' to try to change 'symset' was a no-op; 'roguesymset' worked
|
|
change default for lit attribute in special level des.terrain directives to
|
|
'unchanged' instead of 'unlit'
|
|
replace worm tail placement code that reportedly led to a sanity_check warning
|
|
[no actual code problem found; might be compiler bug for 'xchar']
|
|
learn scroll of teleportation after reading even when random destination is
|
|
right by starting spot
|
|
fix off-by-one bug in dimensions of theme rooms
|
|
fire/frost horn feedback when zapped by monster was inaccurate (falsely
|
|
claimed that it was "directed at self" when attacking hero)
|
|
tins of spinach and 'dead' eggs could cause out of array bounds access
|
|
attempting to index into mons[] by polyfodder() macro
|
|
options help ('? g') listed all boolean options, then repeated them among
|
|
the compound options; on macOS they showed a description of "(null)"
|
|
but for other sprintf implementations they might cause a crash
|
|
change name of #wizlevelflip to #wizfliplevel
|
|
dwarves could sometimes pass through walls without digging their way
|
|
fix genetic engineers dropping Schroedinger's cat box
|
|
the checks and handling for fountains, sinks, and drawbridges were being
|
|
missed during liquid_flow
|
|
monster movement flags unification allowed displacer beasts to displace Riders
|
|
a long worm with no visible segments (but one internal segment) might trigger
|
|
warning: tail 'segment' at <0,some_y>, worm at <mx,my> if teleported
|
|
adding displacer beast inadvertently introduced a regression in swapping with
|
|
pets, allowing them to be pulled into water by hero on/over water
|
|
splitting #if MAIL into #if MAIL_STRUCTURES and #if MAIL made it possible to
|
|
wish for and write scrolls of mail with MAIL disabled, but attempting
|
|
to read such a scroll issued impossible "What weird effect is this?"
|
|
remove M2_MALE flag that was unintentionally left on dwarf lord/lady/leader
|
|
entry and was preventing female incarnations
|
|
tilemap.c wasn't building if STATUES_LOOK_LIKE_MONSTERS wasn't defined; also,
|
|
to match the code that should be defined so change the preprocessor
|
|
test to 'ifndef STATUES_DONT_LOOK_LIKE_MONSTERS'
|
|
ensure that monster female name variation ends up as a female during ^G
|
|
arbitrate when there is a conflict between gender term (male or female) and
|
|
a gender-tied monster name (cavewoman) during ^G; gender term wins
|
|
wizard mode sanity check complained about Wizard's clone mimicking a monster
|
|
new ^G gender-naming handling code required a guard against null permonst
|
|
pointer which could occur under some circumstances
|
|
replace "aligned priest" entries in Pri-loca.lua, astral.lua, minetn-1.lua,
|
|
and sanctum.lua, with "aligned cleric"
|
|
attempting to swap places with a peaceful monster might cause it to flee
|
|
gender-specific monster names can be used in .lua files with the gender upheld
|
|
remove unused vision tables
|
|
changes accompanying sorting of discoveries resulted in omitting very last
|
|
item for '`'/#knownclass on a class where every item was discoverable
|
|
and had no extra labels (so potions and rings, possibly others, but
|
|
not scrolls or wands) and every item was actually discovered
|
|
change to can_reach_floor() resulted in hero being unable to reach the floor
|
|
when held by a lichen
|
|
panic if lua init fails
|
|
change wizard mode command #wizmgender to wizard mode option 'wizmgender'
|
|
engraving with non-blade dulled the weapon anyway (pr #464)
|
|
'sortdiscoveries:s' had a spurious generic header shown at the start of the
|
|
last class if there were any artifacts or unique items discovered
|
|
loss of saddle by opening magic left hero mounted on unsaddled steed
|
|
avoid segfault during error reporting for bad 'O' value(s) after theme rooms
|
|
have been initialized, leaving iflags.in_lua set
|
|
avoid complaints of "nothing to foo" for 'force_invmenu' if there are no
|
|
likely candidates to foo with but there are hidden acceptable choices
|
|
avoid "Not carrying anything. Never mind." for 'force_invmenu'
|
|
'altmeta' option could be toggled On but once On could not be toggled back Off
|
|
wearing a ring of protection and any amulet behaved as if wearing an amulet of
|
|
guarding when determining MC value
|
|
messaging for genetic engineer attacks had several problems
|
|
give genetic engineers teleport capability (as they had in slash'em); 'port
|
|
away after polymorphing someone so that they don't just repeat that
|
|
if an invisible hero managed to convert an unaligned altar to an aligned one
|
|
with color enabled, altar wasn't immediately redrawn with new color
|
|
repair some regressions to (a)pply introduced by "getobj refactor" patch
|
|
getobj too: allow attempting to (E)ngrave with any item in inventory
|
|
getobj refactor also allowed non-nameable items on floor to be assigned names
|
|
exploiting the bug to assign type name to glob on floor allowed wishing for
|
|
"N assigned-glob-name" to create a glob with quantity N instead of 1
|
|
fix ^X feedback when held typo: "unseen createure" -> "unseen creature"
|
|
if a <foo> corpse was set to revive as a <foo> zombie and corpse was partly
|
|
eaten at revival time and monster <foo> is defined as providing more
|
|
nutrition that <foo> zombie, oeaten_stat() could give the warning
|
|
"partly eaten food more nutritious than untouched food" when used to
|
|
calculate zombie's hit points (depended upon how much had been eaten)
|
|
undead turning magic revived corpses flagged as no-revive if they were being
|
|
carried but not if they were zapped while on the floor
|
|
forgetting an item's known/dknown/bknown/&c settings when picked up by unseen
|
|
monster made it possible to trigger a latent shop bug with globs;
|
|
avoid clearing dknown flag for globs
|
|
fix globby_bill_fixup to use shopkeeper instead of Null for glob pricing
|
|
applying a book to check readability treated novels as if they were spellbooks
|
|
#version was leaving the 'in_lua' flag set and if subsequent 'O' issued an
|
|
error (example was an attempt to interactively set bouldersym to an
|
|
invalid value), the error reporting routine crashed via segfault
|
|
lighting for baalz level defaulted to random and could end up being lit
|
|
when using 'O' to set menu color patterns, the reminder message that the
|
|
boolean menucolors option needs to be set to True for them to work
|
|
was sometimes given even when already True
|
|
stair revamp unintentionally resulted in cursed potion of levitation no longer
|
|
causing hero to hit head on ceiling
|
|
enlightenment/disclosure when wielding two weapons with two-weap skill higher
|
|
than secondary weapon's skill had "with" duplicated in the feedback
|
|
corpse of monster with gender specific names (king vs queen and so forth)
|
|
was always described by the neutral name (ruler and such)
|
|
prevent obj_pmname() from calling mon_pmname(monst) when monst->data is null
|
|
to prevent a null pointer dereference
|
|
correct the pluralization of monarch to monarchs, rather than monarches
|
|
don't allow web spun by spider to interfere with solving Soloban
|
|
fix parsing of wish adjectives (return value broken by changes accompanying
|
|
figurine gender patch)
|
|
when picking up a thrown weapon while quiver is empty, don't put it into the
|
|
quiver slot if it needs to be wielded for throw-and-return action
|
|
using bhitpos in flooreffects to handle erosion damage broke its original use
|
|
of tracking wand zaps if a teleportation zap hit an object; subsequent
|
|
zap traversal was done from object's landing spot rather than from its
|
|
zap hit spot, resulting in scrambled wand targeting
|
|
restore previous behavior of the 'altmeta' option (only wait for a second
|
|
character when getting a command keystroke, not other key input)
|
|
baby gold dragons weren't able to grow into adult gold dragons
|
|
when hero is displaced, make monsters who try to stay out of direct line do so
|
|
with spot where they think the hero is rather than where he really is
|
|
if hero died while wearing gold dragon scales/mail and left bones, they would
|
|
still be emitting light without being worn when bones got loaded
|
|
if an invisible monster put on or took off armor while out of hero's sight
|
|
spurious message "Suddenly you cannot see it" would be given
|
|
an item thrown or dropped while swallowed was treated as being picked up by an
|
|
unseen monster so object fields {known, dknown, bknown} got cleared
|
|
segfault if gremlin fled weaponless hero wearing gold dragon scales/mail
|
|
'disambiguate WHACK' patch affected field layout of objects[] but EDITLEVEL
|
|
wasn't incremented, allowing incompatible save files to be restored
|
|
restore the boulder exception for piletops that had been unintentionally
|
|
removed during the expanded-glyphs changes
|
|
misaligned potion colors due to lack of reset_glyphmap() following obj shuffle;
|
|
this issue only impacted a new game
|
|
closed doors were described as "horizontal closed door" or "vertical closed
|
|
door" instead of just "closed door"
|
|
glob shrinkage while hero was away from glob's level wasn't handled properly
|
|
unpaid shop-owned glob that shrank to nothing had weight 0 which triggered
|
|
onbill warnings when 'sanity_check' was On; for 'Ix' and itemized
|
|
billing, the empty weight was shown to player if 'wizweight' was On
|
|
if 'showrace' was On and invisible hero couldn't see invisible so didn't see
|
|
self, the color of whatever could be seen underneath changed to white
|
|
in wizard mode, a poly'd priest/priestess attempting to polymorph into priest
|
|
or priestess in order to rehumanize became a new man or woman instead
|
|
because "priest" matched "aligned cleric" rather than the role monster
|
|
if a glob which has just shrunk away to nothing was wielded or quivered,
|
|
unwield it before destroying it
|
|
after changes to gender tracking for corpses and statues, when a unique
|
|
monster got turned into a statue if was erroneously flagged as female
|
|
rather than 'historic'
|
|
changing engraving to an occupation resulted in not dulling a weapon used to
|
|
engrave a single character
|
|
a change to wounded legs handling resulted in not recovering lost dexterity
|
|
or receiving the "leg(s) feel better" message if wound time expired
|
|
rather than having legs be explicitly healed
|
|
turning movement into commands broke the rest_on_space option; it also
|
|
interfered with using pick-axe plus autodig in downward direction
|
|
cursed scroll of light had special message when wielding Sunsword that didn't
|
|
work for wearing gold dragon scales/mail
|
|
giving a prefix keystroke other than 'm' prior to a command that doesn't use
|
|
prefixes was silently ignored instead of being rejected
|
|
prior revision broke all prefix usage
|
|
movement command revamp broke 'm>' and 'm<' on stairs to avoid auto-pickup at
|
|
the destination
|
|
when trapeffect_selector() returns 2 to caller mintrap(), meant to signify
|
|
that the monster was killed in the trap, ensure that mintrap()
|
|
returns that value too
|
|
have com_pager() check for failed nhl_init(); probably can't actually happen
|
|
because the program would never get that far if lua init was failing
|
|
rearranging first-kill and first-hit gamelog messages to get hit before kill
|
|
ordering resulted in "hit with a wielded weapon for first time" being
|
|
given twice if that hit was delivered via applied polearm or via a
|
|
joust hit
|
|
rearranging the feedback for first-kill and first-hit introduced a bug by
|
|
not verifying that the wielded item used to hit was a weapon, giving
|
|
erroneous event feedback and potentially giving it over and over for
|
|
other non-weapon hits for as long as never-hit conduct stayed unbroken
|
|
counting "just picked up" items when deciding what pseudo-classes should be
|
|
included for the 'I' command's object class prompt was operating on
|
|
an uninitialized variable
|
|
changes to stair internals resulted in summoned Kops blockading the stairs up
|
|
rather than intended stairs down
|
|
dumplog's list of "major events" showed all logged events, not just major ones
|
|
pickup via menu ignored player-specified count when picking up gold
|
|
changes in encumbrance sometimes went unreported, leaving stale status line
|
|
info until hero's next move
|
|
taking off yellow dragon scales/mail or having temporary stoning resistance
|
|
time out while wielding a cockatrice corpse without gloves left that
|
|
corpse safely wielded instead of petrifying the hero
|
|
special level loading wasn't honoring gender specified in lua code
|
|
add '#tip' for containers to context-sensitive invent handling
|
|
sequencing confusion: picking an item when viewing inventory and picking an
|
|
action to do with it caused the inventory command to use time, then
|
|
on next turn the action was performed without taking any time
|
|
program would access freed memory if charging caused a ring to explode
|
|
arriving on Valkyrie quest final level could produce impossible warning
|
|
"mkstairs: placing stairs up on molten lava at <68,13>"
|
|
if the repeat command was used after prefix+command, only the command part got
|
|
repeated
|
|
the change for repeat after prefix+command would result in a crash if repeat
|
|
was attempted after an unassigned key
|
|
items obtained via wishing while blind were erroneously being marked as 'seen
|
|
up close' so behaving differently from items picked up off the floor
|
|
corpses of neuter monsters had random chance to be flagged as female so would
|
|
only stack with others that made the same random choice
|
|
one-shot food testing ability conferred by blessed scroll of food detection
|
|
didn't warn about globs of green slime because the relevant code was
|
|
only executed for corpses, eggs, and tins, not for globs
|
|
worn ring of slow digestion blocks per-turn hunger but not the hunger caused
|
|
by wearing it; white dragon scales/mail was blocking per-turn hunger
|
|
and didn't cause any hunger itself; change to treat it like the ring
|
|
if the program was built with EXTRA_SANITY_CHECKS enabled, changing levels
|
|
while riding would give impossible warning "no monster to remove"
|
|
the change to protect Rider corpses from being destroyed by exploding chests
|
|
inadvertently prevented them from being used up when Riders revived
|
|
force-fight against furniture covered by an object described the attack as
|
|
missing an unknown obstacle
|
|
using #wizmakemap on Plane of Water added a new set of air bubbles each time
|
|
it was run and eventually replaced just about all the water; likewise
|
|
with clouds on Plane of Air
|
|
avoid new "where are we?" panic if player quits during character selection
|
|
add Untrap as a potential 'autounlock' action
|
|
if a zombie revived near the hero, a busy hero would keep doing whatever
|
|
action was in progress instead of stopping because the zombify didn't
|
|
walk across the threshold from no-threat to threat
|
|
revised monster teleportation message handling caused magic whistle to be
|
|
changed to not operate on pets that were already adjacent; change back
|
|
revised monster teleportation message handling could produce duplicate message
|
|
when shopkeeper who left shop got returned to it
|
|
revised magic whistle produced message sequencing issues when summoned pet
|
|
arrived on a trap, particularly if killed or sent away or shape changed
|
|
recent changes in removing a dead monster from the map didn't update screen
|
|
to show objects it dropped; they were present, just not displayed
|
|
further changes resulted in dead monsters' corpses be placed at <0,0>;
|
|
reverse the part(s) that cleared stale monst->mx,my
|
|
adding name/rename choice to #therecmdmenu caused it to crash when picking an
|
|
adjacent unnamed, untame monster
|
|
for menustyle:Full, fix the combination of 'A' auto-pick all plus 'P' just
|
|
picked up to limit what "all" means
|
|
for menustyle:Traditional, fix 'P' for just picked up items in inventory when
|
|
filtering what items to put into a container
|
|
restrict stunning effect to is_xport trap types
|
|
lua's garbage collection didn't like the way nethack was trying to use it and
|
|
issued a pair of warnings each time the relevant code got run
|
|
items flagged as just-picked-up were unflagged if you stepped on other items
|
|
without picking anything up
|
|
activating a magic portal still gave "you feel dizzy for a moment, but the
|
|
sensation passes" after portal traversal was changed to make the hero
|
|
be stunned for a few turns
|
|
after the fix for zombie reviving near hero (which now interrupts hero's
|
|
occupation), could get "revive panic" when eating a troll corpse if
|
|
it revived on the same turn that eating the corpse would finish
|
|
a wizard's starting equipment was supposed to include a random spellbook of
|
|
spell level 1 through 3 but it was being foced to be level 1
|
|
earlier fix for prices of unpaid objects going away in persistent inventory
|
|
display when hero bought something during itemized billing didn't work
|
|
if paying for a used-up shop item--prices of any unpaid items vanished
|
|
when inventory got updated to reflect transfer of hero's gold to shk
|
|
save files created with SCORE_ON_BOTL disabled were erroneously being rejected
|
|
if the program was rebuilt with it enabled and vice versa
|
|
avoid "It suddenly appears!" if a monster with the STRAT_APPEARMSG attribute
|
|
is seen to teleport away then not seen at its destination
|
|
avoid boulder-on/in-water sanity_check warnings on the Plane of Water
|
|
when one monster swallowed/engulfed another and killed it, impossible
|
|
"placing <mon> over itself ..." could be given by place_monster()
|
|
if the game crashed or the process was killed, recovering a save file ended
|
|
up with incorrect stairway connections between levels
|
|
when using --nethackrc=file on the command line (currently only implemented
|
|
for ports that use unixmain.c), options parsing freed the string
|
|
containing 'file' before using it as the RC file name
|
|
using 'o'pen as a synonym for #loot of a container at the hero's location did
|
|
not work if the hero was in a pit
|
|
update '?' menu to reflect change to 'O' command
|
|
end of game with DUMPLOG could panic due to perm_invent handling, even when
|
|
the persistent inventory window wasn't in use
|
|
with color Off and the screen symbol for ice the same as for floor, the black
|
|
and white ice was supposed to be rendered in inverse video but that
|
|
got broken by the symbols and glyphs overhaul
|
|
command line processing interleaved with options file processing is complex:
|
|
a recent change to make 'color' show up for tty in the short options
|
|
menu resulted in 'nethack --windowtype:X11' running X11 with ascii map
|
|
('NETHACKOPTIONS=windowtype:X11 nethack' continued to default to tiles)
|
|
when the Astral level got created, any fake player character monsters that
|
|
were seen or sensed when created were reported as "<mon> suddenly
|
|
appears!" rather than be treated as part of level's initial population
|
|
tipping contents of one container directly into another allowed transferring
|
|
wands of cancellation and bags of holding or tricks that were inside
|
|
a sack, box, or chest into a bag of holding without blowing it up
|
|
prevent random traps from being created inside the shops in the tourist quest
|
|
if hero's steed got hit by knockback effect, impossible "no monster to remove"
|
|
would occur (plus more warnings if 'sanity_check' was On)
|
|
the #saveoptions command included options changed via doset_simple() but not
|
|
ones changed via full doset()
|
|
fix 'nethack --scores' as alias for 'nethack -s'
|
|
adding command line 'nethack --usage' broke 'nethack -u name' (however,
|
|
'nethack -uname' still worked for names other than "sage")
|
|
being hit by a big monster and getting knockback effect could send hero out
|
|
of a shop (or into its "free spot") while carrying unpaid goods;
|
|
robbery wasn't noticed until hero eventually moved to a different spot
|
|
hallucination of objects incorrectly included generic objects as candidates
|
|
for what objects looked like; if an object had its dknown flag set,
|
|
formatting a generic object in its place was unreliable (Null pointer
|
|
deference prior to static analyzer fix, odd fake name "generic" after)
|
|
some actions that ask the user to pick a location allow typing '$' to show
|
|
valid spots, accept typing a second '$' prior to moving the cursor to
|
|
toggle the highlights off; ^R already did that; moving the cursor too
|
|
change 'm' prefix for #tip from 'use menu to pick among floor containers'
|
|
(since that's already the default) to 'skip floor containers' so that
|
|
context-sensitive item-action Tip directly operates on the item
|
|
anti-magic field's reduction of hero's maximum energy could result in current
|
|
energy being one point higher than maximum
|
|
if hero was killed by a wand zapped by a monster, cause of death was reported
|
|
as "killed by a bolt of <damage type> imagined by <monster>"
|
|
throttle the difficulty of the monsters in theme room "buried zombies"
|
|
buried troll whose auto-revive timer expired might trigger panic with
|
|
"revive default case 6"
|
|
throwing a helm of brilliance could yield "breaking odd object?"
|
|
sanity checking of engravings was stopping after first problem found
|
|
the fuzzer could get stuck in a loop if hero died in a way where life-saving
|
|
just resulted in a repeat death (cited case was burning up in lava,
|
|
where life-saving teleports you out of it; if the level is full, the
|
|
teleport will fail and you'll immediately burn up again)
|
|
fix unicorn horn's ability to repair blindness
|
|
quest nemesis and a few other special monsters are suppressed from bones;
|
|
their death feedback could be given when they were removed
|
|
running the tutorial until completion and returning to normal play but left
|
|
the 'no followers' flag set; adjacent pets wouldn't tag along when
|
|
hero moved to other levels
|
|
when a magic whistle moved a hidden pet it brought that out of hiding and
|
|
gave a message about "your <pet> appears" but the map was updated
|
|
while it was still hidden so nothing seemed to appear
|
|
entering the tutorial stashed hero's equipment for eventual return to normal
|
|
play but going down stairs to the second tutorial level returned it
|
|
too soon and allowed any items gathered on the first level to be kept
|
|
entering the tutorial disables the Save command; exiting it is supposed to
|
|
re-enable that but the change to fix the second level broke that
|
|
entering the tutorial and then returning to play made the tutorial branch be
|
|
eligible for a portal destination via wizard's Eye of the Aethiopica
|
|
'hard helmet' was based on being metallic so overlooked crystal helmet
|
|
don't blame/credit hero for stinking cloud if dying quest nemesis releases one
|
|
Lua selection operations 'subtract' and 'xor' didn't always work as intended
|
|
accept 'true' or 'false' as value for des.object field 'trapped'
|
|
special level loader didn't check for bad coordinates supplied by <level>.lua
|
|
file thorougnly enough
|
|
hero might not be credited with "entered Mine Town" achievement for the town
|
|
variations which treat the whole level as the town if that level gets
|
|
entered via falling or level teleport
|
|
in the theme room "water-surrounded vault", guarantee an item which can
|
|
be used to escape from the room in one of the four chests
|
|
pets capable of using items would pick up and wear cursed armor
|
|
if something breakable was set up as alternate weapon and the second of two
|
|
bare-handed hits succeeded, it would be broken and trigger impossible
|
|
"objfree: deleting worn obj"
|
|
strength cap for hero poly'd into an orc captain was 18/50 even though it is
|
|
10/100 for Uruk-Hai and monster Uruk-Hai can grow into orc captains
|
|
status_hilite rule for critical-hp takes precedence over up/down/changed HP
|
|
livelog/#chronicle of multiple high priests reported their deaths as
|
|
"killed high priest" and "killed high priest (2nd time)" instead of
|
|
"killed high priest of Foo" and "killed high priest of Bar"
|
|
using wizard mode #wizkill outside the endgame followed by m^V to enter the
|
|
endgame without any intervening moves would result in impossible
|
|
"dmonsfree: 0 removed doesn't match N pending on <endgame level>"
|
|
dwarf/elf/orc/gnome hero killed by zombie would rise as human zombie for bones
|
|
paranoid_confirm:Autoall for menustyle:full has the test handling backward and
|
|
was treating 'yes' as no and 'n' or ESC as 'y'
|
|
applying a wielded lump of royal jelly but not picking something to rub it on
|
|
while other lumps of jelly were quivered would trigger a panic,
|
|
"addinv: null obj after quiver merge" (like applying lit potion of oil)
|
|
ceiling hider could become hidden when there was no ceiling, triggering a
|
|
warning if sanity_check was On
|
|
hero could be forced onto a monster's location if a level was full and an
|
|
engulfer was occupying an adjacent but inaccessible spot, engulfed
|
|
hero, then expelled hero while now occupying hero's accessible spot,
|
|
triggering sanity_check warning "you over monster"
|
|
experimental #saveoptions wasn't saving the set of cond_xyz options correctly;
|
|
if player viewed the 'm O' submenu for status conditions, they would
|
|
get saved even if not changed; otherwise, ones that came in from the
|
|
old RC file wouldn't be included in the new one
|
|
knockback or recoil while levitating could hurtle the hero through a wall of
|
|
water to the spot beyond unless it happened on the Plane of Water
|
|
if recoil from throwing an item while levitating sent hero into a wall of
|
|
water, the thrown item got placed in that water rather than at its
|
|
intended destination
|
|
include '-' as suggested item in "what to dip?" prompt if dipping at pool or
|
|
fountain or sink with slippery hands
|
|
don't attempt a second hit for bare handed/martial arts if wearing a shield
|
|
when using 'm #overview' to annotate a level other than current the one,
|
|
include level number, and dungeon branch if not current one, in the
|
|
prompt instead of generic "this level"
|
|
when using 'm #overview' in the endgame, don't include non-endgame levels
|
|
when a tethered aklys gets caught in a web, make sure it doesn't return
|
|
and that the display of the tether gets cleaned up
|
|
add 'X' as a potential context-sensitive item-action for uwep and uswapwep
|
|
monsters weren't noticing hero's possession or lack of magic resistance when
|
|
hero getting zapped by a wand of striking was or wasn't resisted
|
|
discard monsters' observations about hero's resistances when saving bones
|
|
autopickup while levitating shares code with 'mention_decor'; after being told
|
|
about ice covered by an object, moving over some other object later
|
|
when mention_decor is Off could give "you are back on solid ground"
|
|
long after leaving the ice
|
|
duration of temporary stoning resistance would be extended while eating a
|
|
cockatrice corpse, as intended, but not while eating Medusa's corpse
|
|
so if it timed out during the meal, player got the message about hero
|
|
no longer being protected against stoning but was able to finish the
|
|
meal safely
|
|
farlook at something that was on top of an engraving or grave would report
|
|
the engraving text or headstone epitaph along with the 'something'
|
|
when carrying 52 items (excluding gold), hero couldn't pick up a thrown,
|
|
stolen, or dropped item which was split off from a still-carried stack
|
|
supply chests on early levels weighed the same as empty chests until something
|
|
was added or removed
|
|
stacked pair of potions of healing in supply chest weighed same as one potion;
|
|
drinking one of the two gave a healing message, then both had their
|
|
weight updated as their stack was split; if close to an encumbrance
|
|
threshold, new weight would trigger an encumbrance increase message,
|
|
immediately followed a decrease message when the potion got used up
|
|
bounds checking for object name formatting inadvertently introduced a change
|
|
that hid BUC prefix for charged rings
|
|
debug fuzzer was triggering out of bounds array access in loseexp() if
|
|
life-saving at level 1 used blessed restore ability to regain lost
|
|
levels and restored those all the way to level 30; introducing an
|
|
assert(u.ulevel < MAXULEV) changed bounds issue to assertion failure
|
|
strength less than 25 was unintentionally being capped at 18/07
|
|
if an amulet of flying got stolen while hero was over lava without other
|
|
protection against lava, it would be destroyed even though it's not
|
|
flammable, then attempting to format it for messages would trigger an
|
|
impossible warning about "glorkum", then a crash occurred
|
|
poison gas breath from green dragon or iron golem that hit and was reflected
|
|
left target enveloped in a gas cloud (reflection now takes precedence;
|
|
somewhat odd though: gas that misses still leaves target enveloped)
|
|
Warning didn't show nearby monsters who were inside poison gas/steam/smoke
|
|
regions
|
|
map didn't show adjacent monsters if they were inside a gas region unless
|
|
they were seen via telepathy or extended monster detection, but they
|
|
were described as if visible in messages (combat, for instance)
|
|
OPTIONS=symset:blank and symset:plain didn't load the specified symbols if
|
|
used from the RC file or NETHACKOPTIONS
|
|
for OPTIONS=symset:blank, S_engroom (engraving on a room floor spot) and
|
|
S_engrcorr (engraving on a corridor spot) retained their default
|
|
symbols ('`' and '#', respectively) instead of switching to space
|
|
setting perm_invent in RC file before setting windowtype (whether later in
|
|
that file or via NETHACKOPTIONS) could result in it staying False
|
|
depending upon whether the default windowtype supported it
|
|
if hero was wielding potion(s) of unholy water and a magic trap gave its
|
|
remove curse effect, scroll of remove curse would become discovered
|
|
object discoveries during the tutorial carried over when normal play resumed;
|
|
counts of monsters created and vanquished carried over too
|
|
end-of-game attribute disclosure in wizard mode reported incorrect text for
|
|
for apron/alchemy smock's conferral of poison+acid resistances
|
|
(3.6.x was susceptible to this for T-shirt text but since T-shirts
|
|
don't confer any attributes, it wasn't noticeable)
|
|
if a tame or peaceful monster was trapped and blind hero hadn't seen the trap
|
|
yet, attempting to swap places would report "You stop. <Mon> can't
|
|
move out of that trap." and if the 'tips' option was On, #untrap would
|
|
be suggested; but #untrap would fail due "you know of no traps there"
|
|
camera flash hitting a hidden mimic mentioned it as being a mimic but didn't
|
|
bring it out of hiding
|
|
when chain lightning hit a sleeping monster, the victim didn't wake up
|
|
on medusa-4, Medusa and the downstairs were located in different chambers
|
|
on medusa-3 and medusa-4, Perseus's statue was located in a different chamber
|
|
from Medusa
|
|
omit "a" from "drowned in a limitless water" when drowning on Plane of Water
|
|
restoring a save file could trigger impossible "rnd(0) attempted" if it tried
|
|
to make an unhidden mimic hide as an object; if the code was marked as
|
|
a released version, it would crash due to divide by 0 error instead
|
|
fix regression of a post-3.6 fix: if 2 Wizards of Yendor were in play and 1
|
|
escaped the dungeon, bookkeeping for current number of Wizards stayed
|
|
at 2, interferring with future Wizard behavior
|
|
sometimes a repeat count from the preceding command carried over to most
|
|
recent one when using do-again (^A); if the most recent one was an
|
|
extended command, the spurious repeat was for '#'
|
|
if peaceful monsters react when seeing hero attack a peaceful monster, don't
|
|
have quest guardians run away; also, quest leader only becomes angry
|
|
if the monster being attacked is a quest guardian
|
|
farlook of water/lava location listed wall of lava before molten lava; because
|
|
of that, lava was omitted ("molten" suppressed to reduce vebosity,
|
|
resulting in "lava" which got skipped as substring of "wall of lava")
|
|
having #terrain display gas cloud regions as if they were traps didn't work
|
|
for monsters in such regions that are shown when adjacent to hero or
|
|
sensed via ESP
|
|
when a monster within a gas cloud was displayed on the map because the hero
|
|
was next to it, it remained displayed if hero moved away
|
|
eating a pyrolisk egg on the floor triggered an "object lost" panic
|
|
core object creation and the curses interface's window handling both became
|
|
confused by the 'pauper' option/conduct because they assumed that invent
|
|
being Null meant that the game hadn't started yet
|
|
wizards were discovering unread spellbooks whenever any skill was advanced; do so
|
|
only when a spell skill is advanced
|
|
|
|
|
|
Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository
|
|
------------------------------------------------------------------------------
|
|
curses: 'msg_window' option wasn't functional for curses unless the binary
|
|
also included tty support
|
|
curses: line input that doesn't take place on the bottom line of the message
|
|
window uses a canned curses routine and doesn't support ESC to kill
|
|
partial input or to cancel; "Who are you?" prompt was willing to name
|
|
a character "^["; have the popup version of getlin() fake the usual
|
|
ESC handling, but player has to type <escape><return> for that to work
|
|
curses: menu headings didn't use default text color
|
|
curses: #perminv changes disabled menu_headings attribute for persistent
|
|
inventory window headings; reinstate that
|
|
curses: messages were tagged by turn in 3.6.x so that ^P can place a separator
|
|
between groups of messages; somehow the line of code that recorded
|
|
the turn vanished so ^P behaved as if every message came on its own
|
|
distinct turn, resulting in lots of "---" separators
|
|
curses: when entering a count while in a menu, cursor would jump to the spot
|
|
on screen where the hero was, even if menu covered that part of map;
|
|
post-3.6--started when curses was changed to use core's get_count()
|
|
curses: clipped map crashed due to uninitialized memory
|
|
curses: changes for tty's TTY_PERM_INVENT resulted in viewing inventory under
|
|
curses while carrying only gold to crash; didn't matter if perm_invent
|
|
was On or if TTY_PERM_INVENT was enabled
|
|
curses: for screen refresh, don't attempt to refresh windows that haven't been
|
|
set up yet or have already been shut down
|
|
curses: for raw_print() in #if PDCURSES config, don't attempt to write to
|
|
message window if it isn't set up yet or has already been shut down
|
|
curses: scrollbar 'framecolor' wasn't being initialized before use
|
|
causing an asan crash because the value is used to index an array
|
|
curses: typing ESC to cancel something issued a beep; if the terminal was set
|
|
to 'visible bell', the screen flashed; only beep when the ESC is part
|
|
of an escape sequence--other than M-c generating ESC c--and nethack
|
|
is expecting text rather than a command or direction
|
|
curses: with window borders on and align_status:left, restoring brought up a
|
|
screen where the message window's border wasn't shown; once it needed
|
|
to be scrolled to fit a new message, the border appeared
|
|
curses: after changing curses_mark_synch() to do something, making a menu
|
|
selection by entering a count that uses more than 1 digit caused the
|
|
menu to vanish
|
|
curses: setting up default roguesymset at startup clobbered primary symset if
|
|
config file picked Enhanced1 for primary (core bug exposed by curses)
|
|
Qt: at Xp levels above 20 with 'showexp' On, the combined status field
|
|
"Level:NN/nnnnnnnn" was too big and truncated by a char at each end
|
|
Qt: searching a text window for something that wasn't found and then searching
|
|
for some other target could crash
|
|
Qt: changes in glyph handling in the core introduced a bug in the "paper doll"
|
|
display for inventory subset
|
|
Qt: during role selection, icons for role and race showed giant ant tile after
|
|
the glyph overhaul changes
|
|
Qt: resolve a use-after-free error when saving message history
|
|
Qt: with a pick-one menu containing a pre-selected entry, clicking on that
|
|
worked to re-select it, as intended; clicking on any other entry
|
|
instead of typing the selector letter toggled off preselected entry
|
|
but failed to toggle on the explicitly selected one; clicking again
|
|
after nothing was pre-selected anymore refused to toggle anything on
|
|
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>
|
|
tty: for #wizidentify, using ^I as an unseen group accelerator to pick the
|
|
'all' choice was incorrectly checking menuitem_invert_test() and
|
|
failing, so the 'all' choice wasn't being toggled on if user typed ^I
|
|
tty: changes to support utf8 resulted in lines of text windows being shown
|
|
starting at their second character
|
|
tty: changes to support TTY_PERM_INVENT resulted in blank inventory menu when
|
|
using the 'i' command while carrying only gold; didn't matter whether
|
|
or not TTY_PERM_INVENT was enabled during build
|
|
tty: for the !DEF_PAGER configuration, redraw screen properly if attempting
|
|
to display a file fails and tty_display_file()'s caller requests
|
|
feedback for that situation
|
|
tty: if a group accelerator matched a menu command ('^' in menu for '/')
|
|
it wouldn't work to select, just to manipulate the menu
|
|
tty: after resize changes which included screen erasure changes, ^C and yes|y
|
|
to "Really quit?" while a menu was open would lead to a panic
|
|
tty: make cursor visible again when using ! or ^Z to temporarily leave nethack
|
|
Unix: after lua changes to Makefiles, 'make spotless' for dat subdirectory
|
|
left some generated data files which should have been deleted
|
|
Unix: reject "--sX" on command line except if "X" is "cores" (so "--scores");
|
|
single dash form still accepts "-sX" to lookup scores for "X"
|
|
Windows: new tile additions in win/share did not trigger the creation of a new
|
|
NetHackW.res file
|
|
Windows: nhl_loadlua() was missing the RDBMODE argument on the [dlb_]fopen(),
|
|
which is required on Windows to set binary mode; binary mode is
|
|
required in order to be able to reliably navigate through a file using
|
|
fseek(), ftell() and fread()
|
|
Windows: when VIRTUAL_TERMINAL_SEQUENCES was not defined, the preprocessing
|
|
would fail on consoletty.c
|
|
Windows: original fix for GLYPH_UNEXPLORED background tile merging resulted
|
|
in a new issue where the map wasn't being cleared on level changes
|
|
Windows: don't dupstr the return value of setlocale if it is NULL
|
|
Windows: nethackw.exe calculated vertical spacing for menu items based on
|
|
the height of the tileset in use, even though the tiles in the
|
|
menu were drawn at the default height of 16 anyway; get rid of
|
|
the extraneous vertical spacing between menu rows
|
|
X11: fix build failure if STATUS_HILITES is disabled
|
|
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
|
|
X11: if perm_invent is set in NETHACKOPTIONS or config file, start with the
|
|
persistent inventory window displayed
|
|
X11: use visctrl(response) when X11_yn_function() echoes prompt+response in
|
|
message window
|
|
X11: when trying to lookup scrollbars in order to handle scrolling via keys,
|
|
menu handling always ended up finding the top window
|
|
X11: enable horizontal scrollbar for persistent inventory window
|
|
X11: if a group accelerator matched a menu command ('^' in menu for '/')
|
|
it wouldn't work to select, just to manipulate the menu
|
|
X11+macOS: after the "bad Atom" fix (below), the persistent inventory window
|
|
crept downward every time it got updated
|
|
|
|
|
|
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...]
|
|
curses: indent items in perm_invent window by one space
|
|
curses: don't change the terminal's default colors
|
|
curses: remove unnecessary special handling for dark gray
|
|
curses: sometimes entering a count during menu selection caused the menu to
|
|
disappear (example was apply/loot in-out container menu with two or
|
|
more digits typed followed by non-digit); in-out menu was still active
|
|
but no longer displayed
|
|
curses: support backspace/delete when entering a count during menu selection
|
|
curses: was failing to honor menu_xxx option settings for menu interaction
|
|
curses: make extended command prompt behave more sensibly
|
|
curses: if a menu of objects contains at least one iron ball, and player is
|
|
not already in the midst of entering a count, recognize '0' as a
|
|
group accelerator rather than the start of a count
|
|
curses: obey timed_delay option
|
|
curses: support tty-style extended role/race/&c selection at start of new game
|
|
curses: implement mark_synch() and wait_synch()
|
|
curses: only convert arrow keys to hjkl or 4286 if nethack wants a direction
|
|
curses: conversion of arrows and other numpad-related function keys to digit
|
|
ignored phone-layout setting (inverted up/down) of the num_pad option
|
|
curses: ensure alt+'A' through alt+'Z' and alt+'a' through alt+'z' work
|
|
correctly with PDCURSES
|
|
curses: fix an off-by-one error when deciding whether a long line on the
|
|
bottom line of the message window can fit ">>" (curses' "--More--")
|
|
curses: selecting a partial stack, unselecting it, and then selecting it
|
|
normally did not reset the quantity to the whole stack
|
|
curses: if user's terminal was set to 'application keypad mode' (DEC VTxxx
|
|
nomenclature; set via 2 char "ESC =") and the terminfo or termcap
|
|
entry told the terminal to send 8-bit escape sequences (via 3 char
|
|
"ESC SPC G"), nethack wasn't recognizing number pad keys
|
|
curses: change petattr attributes, dropping support for curses-only ones
|
|
curses: swap the grey and no-color color initialization
|
|
curses: allow changing default colors with the 'palette' config option
|
|
(only if compiled with CHANGE_COLOR)
|
|
curses: if messages have been issued during start-up (for instance, warnings
|
|
about issues in run-time config file), prompt user to press <return>
|
|
so that they can be read before curses erases the screen
|
|
macOS: Xcode project was failing to build if the path to the NetHack source
|
|
tree contained a space; the issue was within some shell script code
|
|
contained within the project
|
|
MS-DOS: add -DSTATUES_LOOK_LIKE_MONSTERS to Makefile1.cross so the VESA mode
|
|
can display statue glyphs
|
|
MS-DOS: sample config file had same MENUCOLOR flaw as Windows (see below)
|
|
MS-DOS: implement inverse text attribute
|
|
Qt: quit if can't load tiles file instead of continuing and then segfaulting
|
|
Qt: [later] tiles load failure at startup now continues using an ascii map
|
|
Qt: use more columns for extended command selection dialog so that the number
|
|
of rows needed doesn't result in some commands being unaccessible
|
|
Qt: suppress wizard mode commands from '#' handling when not in wizard mode
|
|
Qt: organize extended command selection grid by columns instead of by rows
|
|
(first N entries down left column, next N entries down 2nd column, &c)
|
|
Qt: when selecting an extended command by typing its name, support <delete>
|
|
(aka <rubout>) in addition to <backspace> to go back a character
|
|
Qt: switch to fixed-width font for menus
|
|
Qt: don't disable [cancel] button when viewing inventory or other pick-none
|
|
menus; ESC works to dismiss those and [cancel] should be the same
|
|
Qt: clicking on the window's Close button brought up a dialog offering
|
|
choices of "Save" and "Cancel"; picking Cancel sent nethack into an
|
|
infinite loop with complaints about Qt's event loop already being
|
|
active; change dialog: offer "Save and exit" or "Quit without saving"
|
|
with no opportunity to try to back out of the Close operation
|
|
Qt: add 3.6 status fields Stone, Slime, Strngl, Deaf, Lev, Fly, Ride
|
|
Qt: add Attributes, Overview, and Annotate to the "Info" pull down menu
|
|
Qt: rename menu entries game->Save to game->Save-and-exit and game->Quit
|
|
to game->Quit-without-saving
|
|
Qt: menu commands are now working; commands invoked via M-c were having that
|
|
keystroke changed to '?', bringing up nethack's help menu; now those
|
|
send #abc with just enough letters to disambiguate from other commands
|
|
("Compilation" is one remaining problem; it yields "#version" which
|
|
brings up '#' menu subset with choices of "version" and "versionshort")
|
|
Qt: "paper doll" subset of persistent inventory has undergone several changes:
|
|
show previously missing quiver below weapon instead of duplicating
|
|
gloves there; show secondary weapon in shield slot and blank out
|
|
alternate weapon slot when two-weapon combat is active; show wielded
|
|
two-handed weapon in both the shield and primary weapon slots; show
|
|
first active light source in a previously unused slot on lower right;
|
|
show first leash-in-use in a previously unused slot on lower left
|
|
Qt: paper doll inventory view was inconsistently updated during Hallucination
|
|
Qt: when hero died, gold on tombstone only included gold in inventory, not
|
|
any additional gold inside carried containers; also, inventory gold
|
|
will be zero if bones get created for all 3.6.x and for 3.4.x+GOLDOBJ
|
|
Qt: tombstone showed newly constructed date instead of the value set up at
|
|
time of death; it only shows year but that could be wrong if player
|
|
stared at or ignored prior --More-- for long enough on 31 December
|
|
Qt: menu choices All, None, Invert were setting, unsetting, or toggling menu
|
|
entry checkboxes internally but didn't redraw the menu to show that
|
|
Qt: fix the F1/F2/Tab macro keys to not require that number_pad be On
|
|
Qt: unhighlight highlighted message (last one issued) after player has seen it
|
|
Qt: update message window's last message with player's response if it's a
|
|
prompt string for a single-character of input (ynaq or invent letter)
|
|
Qt: for line input, display the prompt+response in the message window
|
|
Qt: enable the popup_dialog WC option (result is a bit flakey but usable)
|
|
Qt: 3.6 catchup - show unexplored locations as unexplored rather than as stone
|
|
Qt: tried to honor 'showexp' but the value was unintentionally suppressed by
|
|
[lack of definition for] obsolete conditional EXP_ON_BOTL
|
|
Qt: implement --More-- prompt to support MSGTYPE=stop
|
|
Qt: for menu search, don't require clicking on the search target popup before
|
|
typing target string (was using typed letters to make menu selections
|
|
if player didn't click on the popup first)
|
|
Qt: rest ("Zz") button on the toolbar only worked when 'rest_on_space' was On
|
|
(core issue, not Qt's fault)
|
|
Qt: rename toolbar button "Get" and action menu choice "Get" to "Pick up"
|
|
Qt: status icons for alignment|hunger|encumbrance which started out centered
|
|
relative to the label text below them would shift to being left
|
|
justified when status got updated
|
|
Qt: handle '&' properly if it occurs as part of yn_function popup dialog
|
|
Qt: fix the display side of saved game selection; character names for
|
|
available save files are shown in a column of push buttons instead
|
|
of each button overwriting all the ones before it
|
|
Qt: don't clobber an existing save file after choosing "new game" in the
|
|
saved game selection widget
|
|
Qt: don't get stuck in a loop after choosing "play" while the character name
|
|
field is empty in the character selection widget
|
|
Qt: when a new message is issued, pan the message window to its left edge if
|
|
player panned it horizontally then didn't manually scroll it back
|
|
Qt: there was no way to enter extended command "#version" by typing; command
|
|
name matching was waiting to disambiguate it from "#versionshort"
|
|
and the only way to that was to type #version<return> but <return>
|
|
explicitly triggered rejection, cancelling '#' processing; #drop vs
|
|
"droptype, "known vs "knownclass, and #takeoff vs #takeoffall are in
|
|
similar ambiguous situation but usually invoked via keystroke
|
|
Qt: render all text windows in fixed-width font instead of just ones which
|
|
have one or more lines with four consecutive spaces; some data.base
|
|
entries do have those (usually final attribution) and some don't,
|
|
so display from one entry to another was inconsistent if default
|
|
proportional font was ever used
|
|
Qt: while a text window was shown (such as the "things that are here" popup
|
|
when stepping on items), typing commands had the input passed on to
|
|
the map and then executed; sometimes that caused the not-yet-dismissed
|
|
text window to hang
|
|
Qt: if player's run-time options specified a tiles file and it couldn't be
|
|
loaded, Qt was falling back to x11tiles just like when the default
|
|
can't be loaded; fallback to player's file plus explicit path instead
|
|
Qt: force the 'toptenwin' option On so that high scores display at end of game
|
|
is shown in a text window instead of being written to stdout where it
|
|
might not be seen (note: doesn't apply to 'nethack -s')
|
|
Qt: during role/race/&c selection, update role titles with their icons, and
|
|
also Valk eligibility, when gender is toggled
|
|
Qt: if a menu of objects contains at least one iron ball, and player is not
|
|
already in the midst of entering a count, recognize '0' as a group
|
|
accelerator rather than the start of a count
|
|
Qt: {maybe just Qt+macOS:} when viewing a text window ('V' to look at 'history'
|
|
for instance), clicking on [Search], entering a search target in the
|
|
resulting popup and clicking on [Okay] or typing <return>, the text
|
|
window got pushed underneath the main window so seemed to go away
|
|
Qt: use idPressed signal instead of buttonPressed and mappedString instead
|
|
of mapped for recent Qt (pr #913 by chasonr)
|
|
Qt: make all NetHack menu and text windows modal
|
|
Qt: support Unicode supplementary characters (pr #1047 by chasonr)
|
|
Qt: qt_tilewidth and qt_tileheight are allocated with alloc() and need to be
|
|
freed with free(); don't use qt_tilewidth and qt_tileheight after
|
|
they have been freed; instead, retrieve the size from the glyphs
|
|
object (pr #1049 by chasonr)
|
|
Qt+macOS: fix control key (fixed all except for ^V); handle ^V as a shortcut
|
|
Qt+macOS: rename menu entry "nethack->Preferences..." for invoking nethack's
|
|
'O' command to "Game->Run-time options" and entry "Game->Qt settings"
|
|
for making persistent Qt customizations to "nethack->Preferences..."
|
|
Qt+macOS: prevent game->Quit-without-saving from being hijacked for the nethack
|
|
menu by renaming it game->_Quit-without-saving (macOS only)
|
|
Qt+macOS: add a separate nethack->Quit menu entry with different functionality;
|
|
Command+Q invokes it
|
|
Qt+macOS: since menu entry help->"About Qt NetHack" gets hijacked and becomes
|
|
"nethack->About nethack", add a separate help->_About_Qt_NetHack_
|
|
which stays where intended and brings up the same information
|
|
Qt+macOS: suppress unwanted "Search [______]" action from being inserted as the
|
|
first entry in the menubar's "Help" dropdown menu
|
|
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
|
|
tty: '$' can now select gold in a menu even when it isn't on current page
|
|
tty: if a menu used full screen and brought up another menu that wasn't full
|
|
screen, sometimes only a small border of background was drawn around
|
|
it with most of the map left blank until after the menu was dismissed
|
|
tty: have <return> dismiss pick-none menus instead of acting like '>' (not
|
|
only wouldn't dismiss when not on last page, wouldn't dismiss at all)
|
|
tty: menu search via ':' would clobber part of the menu with a status line
|
|
refresh if the menu was tall enough to cover that
|
|
tty: add support for petattr
|
|
tty: if a ^C interrupt occurred while DECgraphics characters were being drawn
|
|
on the map, the "Really quit?" prompt would be illegible due to being
|
|
rendered with VT line drawing characters
|
|
tty: hide cursor unless waiting for user input
|
|
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
|
|
Unix: work-around a build issue in ubuntu 21.10 by using ifdef to skip the
|
|
define of warn_unused_result to empty string in tradstdc.h whenever
|
|
__linux__ is defined during build unless GCC_URWARN is also defined
|
|
Unix: re-do command line parsing
|
|
Unix: add ../include/nhlua.h to the alloc.o dependencies in Makefile.utl to
|
|
match Makefile.src
|
|
user_sounds: move the message hook from inside individual window display ports
|
|
to the core where it allows MSGTYP_NOSHOW msgtyp's to still trigger
|
|
sounds to correct a reported github issue; also fixes a past reported
|
|
issue that the curses port on Windows not working with user_sounds
|
|
Windows: update for new status condition fields
|
|
Windows: include commented-out 'PORTABLE_DEVICE_PATHS' in sysconf.template
|
|
Windows: When there was no interesting background in get_bk_glyph()
|
|
in display.c, a default value of GLYPH_UNEXPLORED was returned to
|
|
the caller and then passed on to the interface; the graphical
|
|
Windows version, NetHackW.exe, was trying to use the tile mapped to
|
|
GLYPH_UNEXPLORED as a background tile to merge with the
|
|
foreground tile, so check for GLYPH_UNEXPLORED and bypass that
|
|
Windows: fix range error detected by address sanitizer in plselInitDialog()
|
|
Windows: the .nethackrc template contained a sample MENUCOLOR pattern for
|
|
"cursed .* (being worn)" which didn't work; parentheses need quotes
|
|
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
|
|
X11: avoid 'bad Atom X Error' when perm_invent is enabled (seemingly window
|
|
manager dependent)
|
|
X11: toggling 'perm_invent' off via 'O' didn't dismiss persistent inventory
|
|
window
|
|
X11: with 'slow' resource set to False, the pop up yn_function didn't always
|
|
resize properly when re-used
|
|
X11: (possibly X11+macOS): if persistent inventory was displayed at time of
|
|
end-of-game prompting, prompting would stall until that window was
|
|
manually dismissed
|
|
X11: (possibly X11+macOS): try harder to resize the getlin() prompt, if needed,
|
|
when prompt text changes
|
|
X11: set all selectable menu lines to the same length, left justified
|
|
X11: initializing the get-extended-command widget modified memory beyond what
|
|
it dynamically allocated
|
|
sound: add a soundlib interface that consists of a specification
|
|
documented in doc/sound.txt; default 'nosound' soundlib implementation
|
|
of the specification in src/sounds.c
|
|
sound: added 'macsound' soundlib implementation for use on macOS; the
|
|
interface implementation resides in the objective C file
|
|
sound/macsound/macsound.m; built on top of the built-in AppKit
|
|
NSSound, #import <AppKit/AppKit.h>, linked using -framework AppKit.
|
|
sound: added 'windsound' soundlib implementation for use on Windows; the
|
|
interface implementation resides in the file
|
|
sound/windsound/windsound.c; built on top of the win32 api,
|
|
header file mmsystem.h, linked with winmm.
|
|
sound: add 'qtsound' soundlib implementation for use on any platform
|
|
with Qt; the interface implementation resides win/Qt/qt_bind.cpp;
|
|
built on top of Qt.
|
|
documentation: when building plain text Guidebook.txt from Guidebook.mn, avoid
|
|
attempting to use CR font; change doesn't affect building Guidebook.ps
|
|
which utilizes CR to get various instances of fixed-width text
|
|
Unix: implement SELF_RECOVER compile-time option, on by default on linux
|
|
|
|
|
|
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
|
|
callback lua functions from core at certain game actions
|
|
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), clouds, walls,
|
|
and (melting) ice
|
|
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
|
|
include monk's to-hit penalty for worn suit in the status section of ^X output
|
|
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, helm of caution,
|
|
gold dragon scale mail and set of gold dragon scales
|
|
new monsters: displacer beast ('f') and genetic engineer ('Q'), gold dragon
|
|
and baby gold dragon (both 'D')
|
|
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 1 and "false", "no", "off", or 0
|
|
record number of wishes and artifact wishes in xlogfile
|
|
give feedback for '#chat' directed at walls
|
|
add 'Sokoban' conduct, tracking the number of times the special Sokoban rules
|
|
which incur luck penalties have been violated; don't report it
|
|
unless/until Sokoban branch has been entered
|
|
reduce verbosity when a mind flayer attacks a headless monster; when a
|
|
tentacle-to-head attack hits but fails to accomplish anything skip
|
|
remaining attacks (mind flayer has 3, master mind flayer has 5)
|
|
add section marker [] support to run-time config file; CHOOSE section1,section2
|
|
followed by [section1] ... [section2] ... forced all the rest of the
|
|
file to be part of the last section; that still works the same, but []
|
|
can be used to terminate the last section and revert to common options
|
|
for the remainder of the file
|
|
render the color names in the corresponding color when using the pick-a-color
|
|
menu for adding status highlights or menu colors via 'O'
|
|
reading blessed scroll of teleportation confers one-shot teleport control
|
|
mild zombie apocalypse
|
|
list lamps and lanterns in charging prompt
|
|
let tourists read conical hats
|
|
when "?i" (show key bindings) displays commands and their keys, also show
|
|
commands without any key (so ones useable via '#', or possibly menu,
|
|
only; the majority are debugging commands)
|
|
assign default key binding for <del> or <delete> to execute #terrain
|
|
assign M-X to #exploremode
|
|
make #herecmdmenu and #therecmdmenu autocomplete
|
|
add 'sortdiscoveries' option to control output of '\' and '`' commands
|
|
include an indication of monsters' health during farlook feedback (including
|
|
/M and autodescribe); also include it in death reason when killed by
|
|
a monster: "killed by {an uninjured newt,a heavily injured mumak}"
|
|
[later: suppress the indication of monsters' health]
|
|
add support for a single monster species to have distinct male, female,
|
|
and gender-neutral naming terms
|
|
add support for a single monster species to have distinct male and female
|
|
tiles
|
|
consolidate several monsters that differed only by their gender into their
|
|
single species
|
|
added wizmgender debugging command to display female monsters in red inverse;
|
|
helpful for debugging gender-related matters on tty; currently ignored
|
|
on other window ports [later: changed from command to boolean option]
|
|
record number of encountered bones levels in xlogfile
|
|
add bonesless to extended conducts field in xlogfile
|
|
show bones levels information in enlightenment at end of game or in explore
|
|
and wizmode
|
|
for #wizintrinsic, use any counts entered during menu selection
|
|
give feedback when boolean options are toggled interactively ('O' command)
|
|
'|' command (#perminv) for interacting with persistent inventory display
|
|
(curses and X11 only)
|
|
menu_shift_left, menu_shift_right menu command keys; default '{' and '}'
|
|
(curses for perm_invent only; implemented for X11 too but menus for
|
|
it lack horizontal scroll bars so the shifts don't work there)
|
|
using 'f' while quiver is empty and 'autoquiver' is Off when wielding a
|
|
thrown-and-return weapon will throw that weapon instead of filling
|
|
the quiver (inspired by xNetHack)
|
|
3.6's tribute: add one new passage to Sourcery, three to Small Gods, one to
|
|
Lords and Ladies, two to Soul Music, three to Interesting Times, four
|
|
to Maskerade, three to Hogfather, two to Jingo, four to The Last
|
|
Continent, four to Carpe Jugulum, three to The Fifth Elephant, five
|
|
to The Truth, six to Thief of Time, six to The Last Hero, four to
|
|
The Amazing Maurice, five to Night Watch, four to The Wee Free Men,
|
|
four to Monstrous Regiment, two to A Hat Full of Sky
|
|
monsters can see and remember hero resistances
|
|
monsters can gain resistances by eating corpses
|
|
menu for what-is command supports /^ and /" to view a list of nearby or whole
|
|
level visible and remembered traps
|
|
spiders will occasionally spin webs when moving around
|
|
drinking a burning potion of oil will cure being turned into slime
|
|
new bigroom variant, a boulder maze
|
|
vomiting on an altar provokes the deities wrath
|
|
branch stairs have a different glyph, show up in yellow color in tty
|
|
duration of confusion when drinking booze depends upon hunger state
|
|
using 'D' allows dropping items picked up previously
|
|
bones piles can be ransacked by adjacent monsters
|
|
decaying globs of {ooze,pudding,slime} shrink over time based on their total
|
|
weight, eventually to nothing; for combined globs it can take a long
|
|
time, and while doing so they no longer give the tainted corpse food
|
|
poisoning effect when eaten
|
|
track peak maximum HP and peak maximum energy/power; no noticeable effect
|
|
give some dragon armor extra effects when worn
|
|
issue messages during last stage of food poisoning/terminal illness countdown
|
|
when hero's demise is imminent
|
|
drinking blessed potion of full healing heals wounded legs, either hero's or
|
|
steed's (when riding, wounded leg injury applies to steed, not hero)
|
|
drinking uncursed potion of full healing or blessed potion of extra healing
|
|
heal hero's wounded legs when not riding; no effect on steed if riding
|
|
cancellation explodes most magical traps
|
|
reading a blessed scroll of light has a chance to improve bless/curse state
|
|
of wielded Sunsword or worn gold dragon scales/mail similar to dipping
|
|
those into holy water; cursed scroll has chance to worsen the state
|
|
added a chronicle of major events, and optional live logging of those
|
|
paranoid_confirm:swim to prevent accidental dunking into dangerous liquids;
|
|
joins paranoid_confirm:pray as the default setting
|
|
paranoid_confirm:trap to confirm entering a known trap unless it is harmless;
|
|
like revised paranoid_confirm:pray, requires y/n response; add
|
|
paranoid_confirm:Confirm to require yes/no instead
|
|
extend 'paranoid_confirm:trap' to request confirmation when entering visible
|
|
gas cloud regions
|
|
paranoid_confirm:Autoall to confirm picking 'A' in menustyle:Full filter menu
|
|
looking at a monster will indicate whether it is asleep, and waking up a
|
|
monster yields a message
|
|
extend farlook's "<mon>, asleep" to "<mon>, can't move (paralyzed or sleeping
|
|
or busy)" for timed sleep and also "<mon>, meditating" for monster
|
|
that is waiting for hero to approach
|
|
add body part terminology for spiders; enhance it for cockatrices
|
|
context sensitive item usage menu from inventory, aka "item actions"
|
|
pets are more likely to follow you closely if you are carrying something they
|
|
really like to eat; behave as if you are carrying such whenever you
|
|
are standing on stairs so that pets will try harder to come to you
|
|
allow setting msgtype in SOUND line
|
|
display detected door traps and chest traps as trapped doors and trapped
|
|
chests rather than as fake bear traps
|
|
if built with DEBUG enabled and running in wizard mode, starting play with
|
|
DEBUGFILES=seethru in environment makes clouds on the Plane of Air,
|
|
water on Plane of Water, and fumaroles on Plane of Fire be transparent
|
|
add wizard mode #wizkill command to remove monster(s) from play
|
|
some quest nemeses release a cloud of poisonous gas when they die
|
|
taming magic acting on an already tame creature might make it become tamer
|
|
eliminate scimitar skill and have scimitars use saber skill
|
|
simplified configuration options menu
|
|
rudimentary key rebinding in game options
|
|
experimental #saveoptions command to allow saving configuration settings
|
|
mouse buttons can be bound to extended commands
|
|
hero poly'd into purple worm can gain intrinsics from digesting whole monster
|
|
add some tins of spinach to monk's quest (vegan => no Str from giant corpses)
|
|
very large humanoids can wear mummy wrappings
|
|
for ranger characters, shooting any type of arrow while wielding the Longbow
|
|
of Diana gets an extra +1 to multi-shot
|
|
change the #vanquished command from debug-only to general user command
|
|
add 'sortvanquished' option to be able to set the preferred sort order without
|
|
using 'm #vanquished' and to have it persist across save/restore
|
|
when sorting vanquished monsters by monster class, treat the Riders as a
|
|
separate class from major demons
|
|
add #genocided command
|
|
have 'I u' mention whether there are any unpaid items on the floor (unusual
|
|
but not impossible); it doesn't itemize them or show shop price
|
|
add items given a Japanese name when playing as a Samurai to discoveries list
|
|
make music improvisations more varied and interesting, as well as useful
|
|
give a helpful tip when first entering "farlook" mode
|
|
add a boolean option tips to disable all of the helpful tips
|
|
add a tutorial level
|
|
engravings appear on the map display; 'whatis' can list them ('/e', '/E')
|
|
option to create the character deaf
|
|
add conduct for petless
|
|
preceding #overview with the 'm' prefix brings up the overview display as a
|
|
menu allowing selection of any visited level to #annotate; it also
|
|
shows every level visited rather than just the "interesting" ones
|
|
include monster size in feedback for wand of probing and stethoscope
|
|
crystal armor is now subject to cracking damage rather than outright breakage
|
|
when a doppelganger takes on mplayer (fake hero) form, usually choose role
|
|
from the high scores file; name too if visible at the time
|
|
can now write unknown spellbook without need of Luck when spell is known;
|
|
if spell becomes known without having read its book (potential divine
|
|
gift), writing the book while the spell is still fresh will succeed
|
|
new status highlight rule type for hitpoints: "criticalhp" rule overrides
|
|
hit point rules if current HP is so low that prayer will consider it
|
|
to be major problem; applies to hitpointbar as well as HP status
|
|
high skill level in martial arts or bare-handed combat sometimes hits twice
|
|
answering '?<return>' at the "genocide what?" prompt (for either monster class
|
|
or single species) runs the #genocided command to show what types of
|
|
monsters have already been genocided and then re-prompts
|
|
throwing the silver bell (or other invocation item, or the Amulet) to the
|
|
quest leader will identify it instead of being treated as an attack
|
|
applying gold pieces will flip one and report "heads" or "tails"; with a stack
|
|
of more than one, normally the flipped coin will rejoin the stack
|
|
during enlightenment and end-of-game disclosure, use contraction "<verb>n't"
|
|
for "<verb> not"
|
|
give feedback about the thaw status of ice terrain
|
|
allow #dip '-' in a fountain, pool, or sink to clean slippery fingers/gloves
|
|
allow #dip potions into a sink to get a hint about what they are, similar to
|
|
dropping rings into a sink; dipping other stuff causes water damage
|
|
so could be used to blank out scrolls and books
|
|
when restoring, show current level's player-applied annotation if there is one
|
|
have farlook of a grave report the engraving on the headstone if it's known
|
|
the '*' command (list inventory items in use) now shows items in a specific
|
|
order: amulet, ring on main hand (potentially affected by cursed
|
|
one-handed weapon), ring on off hand, blindfold, wielded weapon,
|
|
secondary or alternate weapon, quiver, suit, cloak, shield, helmet,
|
|
gloves, boots, shirt, lit lamps and candles, leashes attached to pets,
|
|
instead of by object class (sortpack) or inventory letter (!sortpack);
|
|
new perm_invent+perminv_mode==inuse does the same
|
|
allow the ')', '[', '(', '=', '"', and '*' commands to be preceded by the 'm'
|
|
prefix to force a menu where the player can pick an item and choose
|
|
a context-sensitive item action for it; some give a menu even without
|
|
the prefix and for those, same item selection and action can be used
|
|
hot ground (Gehennom / Plane of Fire) often destroys dropped potions
|
|
erinyes overhaul; they now attempt to punish heroes who have violated their
|
|
alignment and get stronger with greater alignment abuse
|
|
accessibility options to tell where on map a message happened (accessiblemsg),
|
|
to notify when a monster is spotted (spot_monsters), and when
|
|
a monster moved (mon_movement), when hero takes damage (showdamage),
|
|
when interesting map locations change (mention_map)
|
|
accessibility command #lookaround which will describe what hero can see
|
|
if hero is punished or tethered to a buried iron ball and has no inventory (or
|
|
only carries gold or embedded dragon scales or both), a nymph might
|
|
remove the chain when finding nothing else to steal
|
|
'showvers' option (and companion 'versinfo' option) to include program version
|
|
in the status display so that it will be visible for screenshots or
|
|
during streaming video
|
|
'query_menu' option to use a menu when asked certain yes/no questions
|
|
pyrolisk eggs explode when broken
|
|
pauper-option to start the character with no possessions
|
|
wand of secret door detection, spell of detect unseen, and wizard mode ^E now
|
|
flash the cursor at each location where detection finds something
|
|
saving-grace: once per game if receiving a killing blow from full or nearly
|
|
full HP, survive with 1 HP
|
|
livelog/#chronicle for saving-grace: if saving-grace prevents hero's death,
|
|
report it [at present, it uses the livelog classification for breaking
|
|
a conduct]
|
|
enlightenment/attribute disclosure for saving-grace: include a line for have
|
|
or haven't been saved (game in progress) or did or didn't get saved
|
|
(game over) via saving-grace
|
|
|
|
|
|
Platform- and/or Interface-Specific New Features
|
|
------------------------------------------------
|
|
user_sounds: provide an experimental mechanism for terminal-side sounds similar
|
|
to the method used for vt_tiledata; new option vt_sounddata that also
|
|
requires compile-time definition of TTY_SOUND_ESCCODES (also requires
|
|
terminal-side code external to NetHack to recognize the sequence and
|
|
act on it)
|
|
curses: implement 'selectsaved', restore via menu of saved games
|
|
curses: implement selecting menu items via mouse
|
|
curses: 'windowborders' can be set to 3 or 4 to suppress perm_invent borders
|
|
to provide slightly more room for actual inventory info
|
|
curses: if panictrace is triggered, reset the terminal before giving backtrace
|
|
curses: if a message is marked urgent, override message suppression initiated
|
|
by user having typed ESC at previous More>> prompt
|
|
curses: implement a dialog for the windowborders option
|
|
curses: implement the windowcolors option
|
|
Qt: the "paper doll" inventory subset can be controlled via the "Qt Settings"
|
|
dialog box ("Preferences..." on macOS)
|
|
Qt: draw a border around each tile in the paper doll inventory; when BUC is
|
|
known for a doll item, change the border's color and thicken it
|
|
Qt: letting the mouse hover over the paper doll shows a tool tip describing
|
|
the object--or lack of same--in the slot under the pointer
|
|
Qt: clicking on the paper doll runs the #seeall command (inventory of wielded
|
|
and worn items plus tools [lamps, leashes] actively in use; in other
|
|
words, same set of things whose tiles are used to populate the doll)
|
|
Qt: clicking on the status window runs the #attributes command (^X)
|
|
Qt: add a Search button to the toolbar
|
|
Qt: support the 'hitpointbar' option
|
|
Qt: add Filter, Layout, and Reset buttons to the extended command selector;
|
|
Filter is only useful in wizard mode, allowing changing the set of
|
|
extended commands between "all", "normal mode only", "extra wizard
|
|
mode only"; Layout redisplays the grid of command buttons, toggling
|
|
from down columns to across rows or vice versa; Reset puts both back
|
|
to their default settings and clears any pending typed input
|
|
Qt: [later] augment extended command selection dialog's Filter to add a
|
|
fourth subset, those commands which autocomplete when typed for tty,
|
|
typically commands with no keystroke or only meta character keystroke;
|
|
that makes Filter useful in normal mode (much shorter list of choices)
|
|
Qt: add '#' as "Extended-commands" to the 'game' dropdown menu
|
|
Qt: add tool tips to the extended command selector's buttons to show command
|
|
descriptions
|
|
Qt: add tool tips to the icons shown in the status window
|
|
Qt: to play user sounds with volume, replace QSound with QSoundEffect; also
|
|
restores user sound support for Qt6
|
|
tiles: male and female variations in monsters.txt; tested only with tile2bmp
|
|
conversion utility so far; also supported by tilemap utility to
|
|
generate tile.c
|
|
tty: use bright colors directly on supporting terminals
|
|
tty: if a message is marked urgent, override message suppression initiated
|
|
by user having typed ESC at previous --More-- prompt
|
|
Unix: can define NOSUSPEND in config.h or src/Makefile's CFLAGS to prevent
|
|
unixconf.h from enabling SUSPEND without need to modify unixconf.h
|
|
Unix: support --nethackrc=filename on the command line; same effect as
|
|
NETHACKOPTIONS='@filename' but leaves NETHACKOPTIONS available for
|
|
specifying options; --no-nethackrc is same as --nethackrc=/dev/null
|
|
Windows: implement MSGHANDLER (pr #749 by argrath)
|
|
Windows: Add configuration to support Curses on WinGUI (pr #1028 by chasonr)
|
|
X11: implement 'selectsaved', restore via menu of saved games
|
|
X11: echo getline prompt and response (wishes, applying names) to message
|
|
window and dumplog message history
|
|
X11: fix map expose area, no longer leaving black bars on the map
|
|
tty and curses: support italic as text attribute
|
|
tty and curses: when hitpointbar is displayed, make it blink if current HP is
|
|
below the "critical HP" threshold (where prayer treats being injured
|
|
as major trouble)
|
|
|
|
|
|
NetHack Community Patches (or Variation) Included
|
|
-------------------------------------------------
|
|
hallucinatory trap names (pr #174 by copperwater)
|
|
autounlock feature originally from unnethack (pr #228 by copperwater)
|
|
replace "You feel cold" message for freezing unseen door (pr #265 by
|
|
copperwater)
|
|
applying a candelabrum with no candles gives a tip (pr #265 by copperwater)
|
|
candelabrum now reads "(n of 7 candles attached)" (pr #265 by copperwater)
|
|
show appropriate message on throne when crowned (pr #265 by copperwater)
|
|
choir chanting, bathing in darkness for death by Moloch (pr #265 by
|
|
copperwater)
|
|
remove "iron hook" unidentified description (pr #265 by copperwater)
|
|
suppress "Unknown command" messages in the dumplog. (pr #265 by copperwater)
|
|
give player message informing them they can use #enhance (pr #265 by
|
|
copperwater)
|
|
neutral sacrifices disappear in a cloud of smoke (pr #265 by copperwater)
|
|
call potion bottles by nonsensical names if hallucinating (pr #265 by
|
|
copperwater)
|
|
add a default message for chatting to gnomes (pr #265 by copperwater)
|
|
better reporting directions for impossible() (pr #265 by copperwater)
|
|
underwater fire scroll causes vaporization (pr #265 by copperwater)
|
|
default shk sell prompt to N (pr #265 by copperwater)
|
|
teach non-mindless monsters about the Castle trapdoors (pr #265 by copperwater)
|
|
always print a message when the hero teleports (pr #265 by copperwater)
|
|
always print a message when the hero level teleports (pr #265 by copperwater)
|
|
remove Sokoban luck penalties for actions you can't cheat with (pr #260 by
|
|
copperwater)
|
|
sounds for minotaurs (pr #298 by NullCGT)
|
|
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 (pr #294 by chasonr)
|
|
redo rndmonst() to operate in a single pass (pr #286 by copperwater )
|
|
fix the "stuck pets" issue (issue #329)
|
|
allow themed room subrooms to be filled (pr #347 by copperwater)
|
|
allow rereading spellbooks to refresh memory at any time (pr #261 by
|
|
copperwater)
|
|
allow themed rooms constrained by level difficulty (pr #344 by copperwater)
|
|
add a varied form of LIBNH nethack library contribution (pr #385, #403
|
|
by apowers313)
|
|
add cross-compile to WASM (pr #385, #403, #412 by apowers313)
|
|
differentiating gendered monster tiles (pr #430 by NullCGT)
|
|
check bones data directly for deja vu messages (pr #374 by entrez)
|
|
unify code for extracting an object from a monster's inventory (pr #455 by
|
|
copperwater)
|
|
make engraving an occupation (pr #460 by copperwater)
|
|
fpostfx index out of bounds when eating standard eggs (pr#547 by janne-hmp)
|
|
"readable" Hawaiian shirt designs (pr#407 by entrez)
|
|
permit blind feeling for objects on trap door and fix up msgs when dropping
|
|
on trapdoor (pr#574 by entrez)
|
|
travel from 'interesting position' (pr #575 by entrez)
|
|
running on ice sent hero in weird directions (pr #588 by copperwater)
|
|
delete extra lines in Guidebook.mn (pr #590 by argrath)
|
|
supply missing changes on Guidebook.tex (pr #591 by argrath)
|
|
fix out-of-bounds access of xdir and ydir in farlook (pr #592 by copperwater)
|
|
variation of imp's period-speak (pr #602 by Vivit-R)
|
|
fix m-prefix movement into warning symbol (pr #573 by entrez)
|
|
pointer precedence fix incrementing flagcounter in do.c (pr #612 by argrath)
|
|
MAX_RADIUS defines the outer bound of the radius table, so leave it at 15
|
|
to avoid out-of-bound access in view_from() and do_clear_area()
|
|
(pr #613 by argrath)
|
|
variable attknum was declared without initialization, and was used in
|
|
find_roll_to_hit() (pr #615 by argrath)
|
|
check for NULL lua_State before calling lua_close() (pr #616 by argrath)
|
|
use %lu, not %d, in format string in timer_sanity_check() (pr #617 by argrath)
|
|
bad cast making sp_lev chameleon light source (pr #625 by entrez)
|
|
add Ray Chason's adaptation of nethack's Qt5 interface to work with Qt6 (issue
|
|
#525 followup comment by chasonr)
|
|
mingw32 build updates and replacement of sys/windows/Makefile.gcc with new
|
|
sys/windows/Makefile.mingw32 and sys/windows/Makefile.mingw32.depend
|
|
(pr #661 by feiyunw)
|
|
mark various pointers to const char as const pointers (pr #624 by argrath)
|
|
function fill_special_room() in sp_lev.c was dereferencing a pointer
|
|
argument prior to a subsequent check for a NULL pointer that
|
|
resulted in an early function return (pr #669 by argrath)
|
|
function repairable_damage() in shk.c was dereferencing a pointer
|
|
argument prior to a subsequent check for a NULL pointer that
|
|
resulted in an early function return (pr #671 by argrath)
|
|
function savelev() in save.c was dereferencing a NHFILE pointer for
|
|
nhfp->mode prior to a subsequent check for nhfp being NULL
|
|
to trigger a call to panic() if it was; move the check for NULL
|
|
above that usage (pr #675 by argrath)
|
|
function tin_details() in eat.c was passing an obj pointer to
|
|
tin_variety() where it was dereferenced; move the tin_details()
|
|
NULL check above that tin_variety() call (pr #676 by argrath)
|
|
remove unnecessary null checks from christen_orc() (pr #681 by argrath)
|
|
mark high altars in altarmask (pr #748 by entrez)
|
|
split kicking empty space into separate function (pr #754 by argrath)
|
|
split adjusting attributes into separate function (pr #757 by argrath)
|
|
split getting damages with a kick into separate function (pr #758 by argrath)
|
|
split fixing curse trouble into separate function (pr #765 by argrath)
|
|
Handle -eaux plurals in makeplural/makesingular (pr #767 by entrez)
|
|
mdisplacem stoning and gloves had test backwards (pr #773 by entrez)
|
|
writing type-named scrolls (pr #551 by entrez)
|
|
more cases where newcham() gives messages (pr #775 by copperwater)
|
|
lua: instance cleanup should not be applied to classes (by ToxicFrog)
|
|
fix memory leaks related to selection_new() (pr #782 by argrath)
|
|
wished-for doors in wizmode always vertical (pr #788 by entrez)
|
|
vampire shapeshifting in a door (pr #794 by entrez)
|
|
split "act_on_act" into separate function (pr #777 by argrath)
|
|
unnecessary null-check on parsesymbols() (pr #793 by argrath)
|
|
split cleaning-up on gd_move() into separate function (pr #791 by argrath)
|
|
from xNetHack: better handling for monsters putting on equipment; fixes
|
|
issue #843: "Mon dies. Mon puts on <armor>. The seemingly dead Mon
|
|
rises as a vampire."
|
|
add Unicode support to DOS Curses port (pr #889 by chasonr)
|
|
add Unicode support to Win32 (pr #903 by chasonr)
|
|
add Unicode support to Qt (pr #910 by chasonr)
|
|
add Unicode, IBMgraphics and DECgraphics support to X11 (pr #923 by chasonr)
|
|
add some glue code for those that might wish to build with 3rd party fmod
|
|
sound library support (pr #962 by MrEveryDay98)
|
|
add new options 'nopick_dropped' and 'pickup_stolen' options to avoid
|
|
auto-pickup of items dropped by hero and to auto-pickup things
|
|
previously stolen from hero if moved upon while autopickup is On; both
|
|
bypass pickup_types and autopickup_exceptions (pr #1140 by entrez)
|
|
fix msg_window:combination and TTY getlin() ^P (pr #1155 by entrez)
|
|
remove a null sobj check from gold_detect that was situated after
|
|
dereferences had already been done (pr #1173 by argrath) and
|
|
adjust prototype in extern.h
|
|
check for valid indexes of def_monsyms[] and def_oc_syms[] in
|
|
choose_classes_menu() (pr #1179 by argrath)
|
|
split damage from acid potion into separate function (pr #1195 by argrath)
|
|
|
|
|
|
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 macOS 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.txt file.
|
|
function reglyph_darkroom() relocated from options.c to display.c
|
|
resurrect 'makedefs -m' to be able to derive default mons[].difficulty 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, include/amiconf.h, include/beconf.h, include/def_os2.h,
|
|
include/os2conf.h, include/macconf.h, include/tosconf.h,
|
|
include/wceconf.h
|
|
removed SYSFLAGS conditional code
|
|
removed MFLOPPY conditional code
|
|
get rid of 3.6.1 workaround needed to retain compatibility with 3.6.0 bones
|
|
files after fix for 3.3.0 through 3.6.0 bug for invalid 'bonesid'
|
|
designation in bones of quest levels
|
|
add an additional note to mextra.h and obj.h comments that reminds people to
|
|
appropriately init new fields if they need to initialize to something
|
|
other than zero
|
|
rework stairs structure into a linked list
|
|
move 'restoring' to the program_state struct; add corresponding 'saving';
|
|
both used to enforce no updating of status lines or of persistent
|
|
inventory when the relevant activity is in progress
|
|
unify special attack damages from separate you-hit-monster, monster-hits-you,
|
|
and monster-hits-monster into functions by damage type
|
|
unify trap effects for hero and monster stepping on the trap by trap type
|
|
replace the single permonst mname field with male, female, and gender-neutral
|
|
names pmnames[NUM_MGENDERS] fields
|
|
adjust window port interface to pass a pointer to a glyph_info struct which
|
|
contains the glyph itself, the ttychar, the color, the glyphflags,
|
|
and the symset index; this affects two window port calls that get
|
|
passed glyphs: print_glyph() and add_menu().
|
|
switch from k&r C to C99
|
|
remove the game-compile dependencies on any pre-generated header files
|
|
date.h dependency and inclusion is removed and comparable functionality is
|
|
produced at runtime; REPRODUCIBLE_BUILD capability will need to be
|
|
reviewed and adjusted
|
|
pm.h dependency and inclusion is removed and comparable functionality is
|
|
produced by moving the monster definitions from monst.c into new header
|
|
file called monsters.h, then taking advantage of the C preprocessor to
|
|
generate appropriate enum values during compile
|
|
onames.h dependency and inclusion is removed and comparable functionality is
|
|
produced by moving object definitions from objects.c into new header
|
|
file called objects.h, then taking advantage of the C preprocessor to
|
|
generate appropriate enum values during compile
|
|
artilist.h is used to generate appropriate artifact enum values by the C
|
|
preprocessor during compile
|
|
remove requirement of object probabilities adding to 1000
|
|
delete obsolete variable 'g.monstermoves' (copperwater pull request #579)
|
|
expand glyphs to map wall styles that can vary between main, mines, gehennom,
|
|
knox and sokoban; tile interfaces were already doing that on the fly
|
|
by swapping several tiles in and out on those levels
|
|
expand glyphs to map altars that can vary between unaligned, chaotic,
|
|
neutral, lawful and other; tty was already doing that on the fly
|
|
per map cell via display code
|
|
explosion types are mapped and can vary between dark, noxious, muddy, wet,
|
|
magical, fiery and frosty; tile interfaces already had unique tiles
|
|
for each and tty was altering the color on the fly via per map cell
|
|
via display code
|
|
expand glyphs to uniquely represent things that are at the top of a pile of
|
|
objects (piletops); some window ports were already doing that on the
|
|
fly via a glyphmap flag, but NetHack itself had no awareness beyond
|
|
setting the glyphmap flag within the display code
|
|
expand glyphs to uniquely represent male and female variations of monsters,
|
|
pets, ridden monsters, detected monsters and the statues of monsters;
|
|
tile interfaces were already mapping them uniquely via a glyphmap flag
|
|
and mapping to separate tiles within the window port code, but NetHack
|
|
itself had very little awareness beyond setting the glyphmap flag
|
|
within the display code
|
|
added glyph_to_body_corpsenm(glyph) and glyph_to_statue_corpsenm(glyph)
|
|
macros to display.h for use by pager.c; the game core code is better
|
|
off using such display macros/functions for all glyph_to_* mappings
|
|
that are needed, rather than resorting to direct references of glyph
|
|
offsets that could change as the set of glyphs expands or gets adjusted
|
|
map_glyphinfo() now simply references an internal array that maps each unique
|
|
glyph to a color, a ttychar, or a tile, also to a set of glyphflags
|
|
that confirm some unique characteristics of that glyph; the glyph
|
|
mappings are set at game init/restore after config file processing, and
|
|
are reset upon level change, or when some game options are adjusted
|
|
in-game that could have an impact on the mappings, but they remain
|
|
stable between those events
|
|
added MG_MALE glyphflag to complement the MG_FEMALE glyphflag that was there
|
|
remove obsolete roles[].femalenum and rename roles[].malenum to roles[].mnum;
|
|
likewise for races[]
|
|
add git submodule support to the Makefiles by specifying git=1 or GIT=1 on the
|
|
make command
|
|
add TT_NONE==0, renumber other u.utraptype values so that TT_BEARTRAP isn't 0
|
|
for Planes of Water and Air, save the air bubbles and clouds with the level
|
|
rather than as game state; affects wizard mode ^V and #wizmakemap
|
|
switch to a flags arg on newcham() in place of the pair of boolean args
|
|
replace some old 'time_t' hackery in system.h and hacklib.c with something
|
|
less obtrusive in unixconf.h
|
|
remove the per dungeon level door limit
|
|
remove various '#if LINT' hacks used to suppress warnings from pre-ANSI 'lint'
|
|
VMS: removed NO_VSNPRINTF conditional code
|
|
remove the window port get_menu_coloring() calls from all the existing window
|
|
ports, and implement the functionality on the core-side of the
|
|
interface prior to calling the window port's foo_add_menu() function
|
|
remove TEXTCOLOR build option
|
|
relocate general-purpose function choose_classes_menu(), from
|
|
options.c to windows.c
|
|
remove register from variable declarations
|
|
|