2028 lines
125 KiB
Plaintext
2028 lines
125 KiB
Plaintext
HDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.975 $ $NHDT-Date: 1657868310 2022/07/15 06:58:30 $
|
|
|
|
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'
|
|
allow random mimics to show up mimicing more furniture than just stairs
|
|
scatter exploding bag of holding contents instead of outright deleting them
|
|
male hero poly'd into nymph chooses charm vs seduce message based on being
|
|
male rather than on all nymphs being female but charm message was
|
|
using hardcoded pronouns She,her for target monster--wrong for male
|
|
target and noticable if "<mon> finishes taking off his suit" is given
|
|
hostile monsters with 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 targetted 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 behaviour;
|
|
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
|
|
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 cocktrice 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 poesession 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")
|
|
curses interface failed to honor menu_xxx option settings for menu interaction
|
|
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 targetting
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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 unvisisted 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 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']
|
|
only give Sunsword or Demonbane as starting gear to lawful Angels
|
|
for #knownclass with menustyle=Tradtional, 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 challanged 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
|
|
|
|
|
|
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
|
------------------------------------------------------------------
|
|
incrementing EDITLEVEL to invalidate incompatible save files was not working
|
|
as intended because VERSION_COMPABILITY 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 fromat or corrupted" after some extra checks
|
|
were added while investigating tab handling anomalies
|
|
using nhl_error() to report a Lua processing problem would clobber the stack
|
|
level teleporation's "You materialize on a different level!" could be given
|
|
out of sequence with other arrival messages
|
|
more sequencing: if wielding Sting or similar and level teleporting to a
|
|
level with different warning effect, the start-glowing or stop-glowing
|
|
message came before the materialize message on the destination level
|
|
prevent "you materialize on a different level" after "a mysterious force
|
|
prevents you from descending" if you try to level teleport past the
|
|
stairs down from the quest home level before being granted access
|
|
creating Mine Town variant 1 (Orcish Town) sometimes complained about being
|
|
unable to place lregion type 1 and failed to have any staircase up
|
|
set g.context.botl for glove and wielding actions that could start or end
|
|
bare-handedness in support of condtests[bl_bareh]
|
|
reinstate ranked ordering of the status condition fields
|
|
grammar for messages about a monster removing items from a container was bad
|
|
some new status conditions didn't always update when they should
|
|
fix flipping non-existent stairs and ladders (github #311)
|
|
fix door created into random wall or position opening into solid wall
|
|
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 OSX 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 'segement' 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 targetting
|
|
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 incompatable 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 wharever 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 erroneouly 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 siliently 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 varaible
|
|
changes to stair internals resulted in summoned Kops blockcading 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 progarm 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
|
|
|
|
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
|
|
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
|
|
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
|
|
Unix: after lua changes to Makefiles, 'make spotless' for dat subdirectory
|
|
left some generated data files which should have been deleted
|
|
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
|
|
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+OSX: 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: 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
|
|
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
|
|
msdos: add -DSTATUES_LOOK_LIKE_MONSTERS to Makefile1.cross so the VESA mode
|
|
can display statue glyphs
|
|
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
|
|
alreadly in the midst of entering a count, recognize '0' as a group
|
|
accelerator rather than the start of a count
|
|
Qt: {maybe just Qt+OSX:} 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+OSX: fix control key (fixed all except for ^V); handle ^V as a shortcut key
|
|
Qt+OSX: 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+OSX: prevent game->Quit-without-saving from being hijacked for the nethack
|
|
menu by renaming it game->_Quit-without-saving (OSX only)
|
|
Qt+OSX: add a separate nethack->Quit menu entry with different functionality;
|
|
Command+Q invokes it
|
|
Qt+OSX: 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+OSX: 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)
|
|
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
|
|
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
|
|
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+OSX): if persistent inventory was displayed at time of
|
|
end-of-game prompting, prompting would stall until that window was
|
|
manually dismissed
|
|
X11: set all selectable menu lines to the same length, left justified
|
|
|
|
|
|
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, 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:swim to prevent accidental dunking into dangerous liquids
|
|
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
|
|
|
|
|
|
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
|
|
Qt: the "paper doll" inventory subset can be controlled via the "Qt Settings"
|
|
dialog box ("Preferences..." on OSX)
|
|
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)
|
|
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
|
|
|
|
|
|
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)
|
|
|
|
|
|
Code Cleanup and Reorganization
|
|
-------------------------------
|
|
new core file insight.c - move enlightenment and conduct from cmd.c to it,
|
|
also move vanquished, genocided, and extinct monsters from end.c,
|
|
and move one-line stethoscope/probing feedback from priest.c
|
|
move majority of global variables into instance_globals struct g
|
|
move zeroobj, zeromonst, zeroany into const_globals struct cg
|
|
remove STATIC_DCL, STATIC_OVL, STATIC_VAR, STATIC_PTR
|
|
old Qt moved from win/Qt to win/Qt3 and files renamed to use qt3_ prefix
|
|
more current Qt for Qt version 4 and 5 moved from win/Qt4 to win/Qt; qt4
|
|
moniker changed to qt_
|
|
window-port-interface: add_menu() modified to take a more general itemflags
|
|
parameter to support uses beyond just 'preselected'
|
|
window-port-interface: start_menu() modified to take a new mbehavior parameter
|
|
add some bounds checking to tabexpand (doesn't prevent the apparent compiler
|
|
optimization bug that put homebrew OSX executable into endless loop)
|
|
unified breamm and breamu
|
|
added some stair helper functions
|
|
unified the code for finding a queen bee
|
|
unified the code for multishot class bonus code
|
|
unified the code for obtaining the inventory letter value for sortloot
|
|
unified the code for (un)locking boxes in inventory
|
|
unified the code for finding room pos for some features
|
|
unified the code for revealing hiding monsters for mvm attacks
|
|
options overhaul: moved the option definitions into include/optlist.h;
|
|
combined the boolean and compound options into one allopt[] array;
|
|
each option has its own individual function for setting the option,
|
|
for retrieving the option value, and for processing the option
|
|
following its selection in the 'O' menu, added doc/options.txt file.
|
|
function reglyph_darkroom() relocated from options.c to display.c
|
|
resurrect 'makedefs -m' to be able to derive default mons[].diffculty values
|
|
suitable for assigning to new or changed monsters
|
|
convert obj->oextra->omid from pointer to scalar
|
|
get rid of unused obj->oextra->olong
|
|
relocated unmaintained code to outdated folder, specifically sys/amiga,
|
|
sys/atari, sys/be, sys/mac, sys/os2, sys/wince, win/Qt3, win/gem,
|
|
win/gnome, 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
|
|
|