Commit Graph

4211 Commits

Author SHA1 Message Date
PatR
bb74aeef03 fix github issue #552 - "an ukulele"
Add "ukulele" to the exceptions that yield "a u<something>" in case
someone names their fruit that.  Add the shortened form "uke" too.

While in there, generalize "one" handling to accept "one", "one<space>
<anything>" and "one<underscore><anything>" as exceptions in addition
to existing "one<dash><anything>", and "eu<anything>" to replace
existing "eucalyptus".

Fixes #552
2021-07-17 08:32:07 -07:00
Patric Mueller
4c1f2ffa48 Fix heap-use-after-free when attacking monster with potion
Attacking a monster which has a passive attack (e.g. a red mold) with a
wielded potion that breaks during the attack, the variable weapon would
not be correctly reset and passive() would be called with the pointer to the
freed object.
2021-07-17 13:20:14 +02:00
PatR
35a6939b5e tribute update: The Truth
Add page citations to passages 1 and 2 and missing italics to #1.

Add five new pssages, bringing total to 13.
2021-07-16 19:08:53 -07:00
Patric Mueller
f6632e7ce6 Document "readable" Hawaiian shirt designs in fixes37.0
Closes #407
2021-07-16 18:05:48 +02:00
PatR
e9c813b6ba fix issue #510, pull request #519 - vomit effects
Add some vomiting effects:

Trigger divine wrath if hero vomits at an altar's location.  (What
about adding throne and maybe sink special effects too?)

If poly'd into a yellow dragon, breathe (acid) on self.  (I'm not
sure why.)

If on ice and poly'd into an acidic form, melt the ice.  Also,
change melt_ice() to give its message when melting happens at the
hero's location even if hero can't see.

Fixes #519
Fixes #510
2021-07-15 16:10:34 -07:00
PatR
475648bd02 fix github issue #423, pull request #549
Zapping at an object with teleportation resulted in scrambled zap
targetting as soon as any object was hit.

flooreffects() got changed to set bhitpos for handling erosion damage,
but bhitpos is used by wand/spell zap handling to pick the next target
spot.  So a zap that teleported an object resumed one step beyond the
object's destination rather than one step beyond where it was hit.
The rest of the zap could hit things (monsters as well as other
objects) which weren't in line with the original zap.  Reported case
was one of the Riders on Astral, coming from beyond multiple walls to
arrive adjacent to hero (usual position when a Rider gets teleported).

Fixes #549
Fixes #423
2021-07-14 19:21:18 -07:00
PatR
91248a2b7e fix pull request #548 - encumbrance feedback
when polymorphing into "new man".  Characteristic stats are shuffled
if turning into new man, but when already polymorphed those get
overridden by the old pre-polymorph characteristics, resulting in
another encumbrance check which might contradict the one that just
happened.  Skip the encumbrance check done when shuffling stats so
that there's only one and it comes after all changes are finished.

Fixes #548
2021-07-14 18:29:03 -07:00
PatR
938b51c76b tribute update: The Fifth Elephant
Add three new passages, bringing total to 12.

Also, fix a typo in Thief of Time #2:  had "starts" where "stars"
was intended.
2021-07-12 19:12:40 -07:00
PatR
f7436fd02d fix pull request #540 - don't autoquiver aklys
If player throws a wielded aklys and it fails to return, and quiver
is empty when picking it back up, don't put it into that slot because
it needs to be wielded to achieve best throwing effect.  A player who
had wielded it and was using 'f' to throw it might not notice that
it isn't returning until it hasn't returned several times.  Moot if
quiver already has some missile readied.  Don't autoquiver even if
some other weapon is wielded because that might have been done just
to go retrieve the aklys.

The game doesn't keep track of whether a previously thrown item was
wielded at the time, and shouldn't be changed to auto-wield in such
situation.  Leaving quiver empty so that player is prompted for what
to throw is sufficient.

Fixes #540
2021-07-10 19:09:17 -07:00
PatR
f441ef11f6 wishing fixes
Changes in wish parsing included with figurine gender implementation
3 or so weeks ago accidentally broke asking for "large box" and
possibly other stuff.

Re-do "paperback book" handling to accept "paperback" and "paperback
book" but to reject previously accepted "paperback spellbook" when
wishing for a novel by description.
2021-07-10 17:13:46 -07:00
nhmall
60f30b3fcb fixes37.0 update for gold scatter() 2021-07-10 19:46:38 -04:00
nhmall
82526315f1 index out of bounds eating standard eggs
Closes #547
2021-07-10 07:25:12 -04:00
PatR
2c3b9d1d2d wishing for "paperback book"
Something I noticed recently:  a wish request for "paperback book"
yielded "Nothing fitting that description exists in the game."
Asking for "paperback spellbook" worked though.

I'm not sure whether this is the best way to handle this particular
exception but wishing for "paperback book" now works.
2021-07-09 19:40:52 -07:00
Pasi Kallinen
29a8153170 Add a new bigroom variant "boulder maze" 2021-07-09 18:18:31 +03:00
PatR
f8c20800c7 fix pull request #544 - fire vortex engulf
of hero carrying burning objects shouldn't cause those to be
extinguished.  Ditto when fire vortex or poly'd hero engulfs
monsters.

Fixes #544
2021-07-09 06:51:10 -07:00
PatR
c4ec1e9ada tribute update: Carpe Jugulum
Add four new passages to Carpe Jugulum, bringing total to 12.

A couple of fixes for the Fifth Elephant are mixed in:  page reference
and italics for passage #1, correct the spelling of "doublet" in #9.
2021-07-08 19:13:26 -07:00
PatR
ee13fb36ac fix github issue #542 - clumsy "it" message
when encountering a hiding monster that's still unseen after being
revealed (so most likely invisible when hero lacks see invisible).
Change
|Wait!  There's an it hiding under <an object>!
to
!Wait!  There's something hiding under <an object>!
when hero tries to move onto the object.

Also, when a hidden monster reveals itself by attacking, change
|It was hidden under <an object>!
usually followed by "It hits." or "It misses."
to
|Something was hidden under <an object>!
without changing whatever follows.

Fixes #542
2021-07-04 17:47:04 -07:00
Pasi Kallinen
581f12797f Allow using rush/run prefix to fastmove in getloc 2021-07-03 18:22:24 +03:00
Pasi Kallinen
db68395d69 Movement key reworking
Put the rush and run movement keys into g.Cmd instead of bit twiddling
the normal walk keys in multiple places to get the run and rush keys.

Allow meta keys in getpos. Use the normal running keys to fast-move
in getpos, instead of explicit HJKL - I polled couple places online,
and number_pad users did not use the HJKL keys in getpos.

Make meta keys work even after a prefix key.
2021-07-03 18:20:24 +03:00
PatR
0ba7ff46b9 fix pull request #541 - itemized shop billing
when perm_invent is displayed.  The persistent inventory window
showed unpaid items with their prices, but when using itemized
billing those prices went away when an item was purchased.

The prices and item-by-item prompting continued correctly with
remaining unpaid items; only the perm_invent display was affected.

Fixes #541
2021-07-02 18:52:17 -07:00
PatR
4c7734ebbd fix #K3378 - quaffing lit potion of oil
should cure sliming.  Implement the suggestion that quaffing a
burning potion of oil while turning into green slime will cure the
latter.

It's somewhat iffy since the slime is on the outside moving in and
the burning oil ends up on the inside, but the message sequence is
|You burn your face.
|The slime that covers you is burned away!
and it could be that igniting part of the slime quickly spreads to
the rest.

Implemented for monsters as well as for the hero.  They will light
and drink the oil in a single turn in the extremely rare situation
where they actually have a potion of oil and need to use it.
2021-06-30 17:33:18 -07:00
PatR
dad804e118 web spinning tweak for Sokoban
When spiders try to spin webs, don't let them do so in Sokoban
unless the level has already been solved or the spider can see the
stairs up (which was the simplest way I could achieve something
close to "is in the same room as the stairs up") where it can't
interfere with solving the level.
2021-06-26 17:06:37 -07:00
PatR
4aceb467ce tribute update: The Last Continent
Add page citation to passage 2.

Add four new passages, bringing total to 14.
2021-06-25 14:29:07 -07:00
Pasi Kallinen
075844b4d6 Adjust shopkeeper damage fixing
Allow shopkeeper to remove webs and pits.

Change the damage fix messaging to be more specific when
shopkeeper removes a trap. Before this the message was
"A trap was removed from the floor", which sounds really silly
when it comes to holes.

Change the damage fixing so the shopkeeper will fix one damage spot
at a time (instead of all at once), so it's more like a monster action.

Some code cleanup, splitting into smaller functions.

While doing this, I noticed that shopkeepers don't actually bill
the hero for the damage, but that'll have to be another commit...
2021-06-25 20:02:06 +03:00
Pasi Kallinen
1e7b75eb8b Expose stairway data to lua 2021-06-24 18:55:20 +03:00
Pasi Kallinen
3ddb2a91c7 Allow some makemon flags in lua monster creation
Also document the des.monster hash parameter values.
2021-06-24 14:38:12 +03:00
Pasi Kallinen
8dfe963652 Allow spiders to spin webs
Revisited this feature, and the chance of a spider spinning a web
depends now on the number of webs already present on the level.

For a giant spider to spin a web in the middle of a room with no
supports, the limit of existing webs is 4, next to one support 9,
next to two supports 14, and so on. Cave spider limits are much lower.
2021-06-23 22:50:57 +03:00
PatR
fa7980c585 monster name formatting
While testing monster summoning by using a debugger to force the
outcome, I saw "the renegade Angel of <foo> appears in a cloud of
smoke" as if only one such creature existed.  Trying to change
that to "a renegate Angel" pointed out some problems:  type names
like Angel, Green-elf, and Uruk-hai fool an() into using "the"
because of their capital letter.  Fixing that was a bit of a hack
and worked for Green-elf and Uruk-hai but not for Angel because
it has the eminion extension so uses priestname() instead of the
guts of x_monnam().  Fixing that involved more hackery and now I
feel unclean, but it seems to be working.

It wasn't as noticeable as it might have been because most of the
time that "the Angel of <foo>" or "the priest of <bar>" was shown,
the caller is requesting "the" rather than "a/an".
2021-06-21 17:44:35 -07:00
nhmall
429b665379 fix monarch pluralization 2021-06-20 07:51:53 -04:00
PatR
7552a52daa tribute: Jingo
Add two new passages to Jingo, bringing the total to 14.
2021-06-18 14:51:21 -07:00
Pasi Kallinen
76f77ee0cc Add assistance to fire-command
Allows the fire-command to autowield a launcher; it will now
do either swapweapon or wield an appropriate launcher, if you
have ammo quivered.

This assistance can be turned off with the fireassist boolean option.

Adds a rudimentary command queue, which allows the code to add keys
or extended commands into the queue, and they're executed as if
the user did them.  Time passes normally when doing the queue,
and the queue will get cleared if hero is interrupted.
2021-06-16 13:14:32 +03:00
PatR
f6e60c7516 fix bullwhip-induced panic
While testing some corpse/statue name manipulation changes I managed
to trigger a panic during end-of-game cleanup.  Using a bullwhip to
snatch a wielded cockatrice corpse from a monster's inventory into
the hero's inventory and being turned to stone due to lack of gloves
took the corpse out of the monster's inventory but didn't place it
anywhere.  If no life-saving took place, it led to an "obj_is_local"
panic during timer cleanup when freeing the level.

This patch includes some of the stuff I've been testing rather than
just the fix for the panic (which is the very last bit of the diff).
2021-06-15 18:42:30 -07:00
nhmall
fe4822829c fixes37.0 entry update 2021-06-15 16:30:07 -04:00
nhmall
5ac913e035 null pointer dereference in do_name.c
fixes #534
2021-06-15 15:49:31 -04:00
PatR
38d2b3afc2 tribute update: Hogfather
Add three new passages for Hogfather, bringing total to 13.
2021-06-09 16:45:37 -07:00
PatR
04a8ddcce1 fix github issue #531 - genderless corpses
Dead monsters that had traits saved with the corpse would revive as
the same gender, but ordinary corpses revived with random gender so
could be different from before they got killed.

Since corpses of monsters lacked gender, those for monsters with
gender-specific names were described by the neuter name.

This is a fairly big change for a fairly minor problem and needs a
lot more testing.

Fixes #531
2021-06-08 03:43:46 -07:00
PatR
e20dd2e760 fix github issue #530 - weapon skill enlightenment
^X feedback and end of game disclosure reported
 Your two weapon skill {is,was} [also] limited by being <skill rating>
 with with <secondary weapon>.
when the skill rating for the secondary weapon is/was less than the
skill rating for two-weapon combat.  The corresponding message for
primary weapon did not duplicate the word "with".

Fixes #530
2021-06-06 13:38:49 -07:00
Pasi Kallinen
97e58a4fdc Change autopickup and color default values
Change the default value of autopickup to off. Having it on is
harmful for new players, making them very easily burdened.
We can't expect new players to know how to configure
pickup_types, pickup_burden, and pickup exceptions.

Change the default value of color to on. We can safely assume
new users have a terminal that supports color, and most people
want color.
2021-06-06 19:25:49 +03:00
PatR
41eecdf6b3 curses menu: support backspace/delete for counts
Have curses call the core get_count() routine instead rolling its
own so that backspace and delete are supported.  That part was
trivial to accomplish.  Unfortunately it brought the disappearing
menu phenomenon back so it became more complicated overall.
2021-06-06 05:54:53 -07:00
PatR
0280006d76 fix #K3357 - curses menu disappears
This fixes the disappearing menu, but not curses menu count entry
failing to honor backspace/delete.  Entering two or more digits
to get a "Count:12" message, followed by non-digit which removes
that, resulted in the menu for apply/loot in-out container operation
vanishing while it was still waiting for a choice.  (Typing a choice
blindly did work.)

The code intended to handle this.  I don't understand why refresh()
wasn't working.  Reordering stuff didn't help until I changed that
from refresh() to wrefresh(win).

The original Count:123 display was limited to 25 characters and
menus to half the main window, so they didn't overlap.  I made the
count display wider--because it is now also used for 'autodescribe'
feedback when moving the cursor around the map--so made something
that originally was impossible become possible.  One line of the
menu does get erased while "Count:" is displayed, but then gets put
back by the wrefresh().
2021-06-05 16:11:50 -07:00
PatR
b8b95718d7 fix pull request #527 - cursed levitation
The stair handling reorganization changed drinking a cursed potion
of levitation to only check whether stairs up existed on the level
instead of whether the hero drank the potion while at their spot.
That resulted in always attempting to go up and then getting "you
can't go up here" when not at stairs instead of the intended "you
hit your head on the ceiling".

Fixes #527
2021-06-05 15:37:03 -07:00
PatR
60cc48890b fix pull request #526 - 'menucolor' help message
being given when it shouldn't be.  A change for perm_invent handling
back in March screwed up the if/then/else logic for code executed
when finishing MENUCOLOR manipulation via the 'O' command.  That
resulted in the reminder to set menucolors to True being given even
when it was already True if perm_invent happened to be False.

I noticed this myself recently, then neglected to investigate it or
even write it down anywhere.

Fixes #526
2021-06-05 15:17:55 -07:00
Patric Mueller
5c15ca1002 curses: remove unnecessary special handling for dark gray
On terminals with at least 16 colors there should be no need for special
handling dark gray.

The curses code uses COLORS < 16, COLORS <= 16, COLORS > 16, or COLORS >= 16
at several places although I'm not sure if they are correct or which could
possibly be off-by-one errors.

But realistically in this case, we only need to distinguish between 8 color
terminals and terminals supporting more than 8 colors as this will mean the
terminal supports at least 256 colors.
2021-06-05 14:38:41 +02:00
Patric Mueller
6e7f1bc1f0 curses: don't change the terminal's default colors
The curses port changed some of the basic 8 terminal colors and all 8 bright
colors on terminals supporting changing colors.
2021-06-05 14:38:13 +02:00
Pasi Kallinen
8849f66dae Don't bind quit to any key by default
Quit is not a commmand you usually need very often, and generally
don't want to use by accident.

Apparently, on Spanish keyboard layout, n-with-tilde is interpreted
by the Windows NetHack as M-q, and the key is next to l. Loot also
asks for confirmation, just like quit.

Prevent stuff like this by not binding the quit command to any key.
2021-06-04 09:13:30 +03:00
PatR
9e59977c79 fix pull request #521 - valk+warrior alignment
Valkyrie player monster was set to be chaotic even though valk
hero is lawful by default and can also be neutral but not chaotic.
Change it to be lawful.  Warrior quest monsters attending leader
were also chaotic; change to lawful to match revised valk.  If
hero is a neutral valk then both the player monster and warriors
get changed to neutral at start of game (and stay that way even
if hero changes alignment).  The leader defaults to neutral but
gets changed to lawful for lawful valk hero.

Attentdant quest monsters with the healer leader were lawful but
if they gain enough experience they get promoted to healer, so
make them neutral like the latter.

I've added some miscellaneous comments and done a small amount of
reformatting.  Comment about alignment changing in bones applies
to all roles that can be played with different alignments, not
just to valkyries.  It isn't new; I just thought that it ought to
be mentioned somewhere.

Fixes #521
2021-06-01 17:14:50 -07:00
PatR
6fb8434ec9 Tribute: Feet of Clay
Add a page citation for passage #1 and change the wording of that
passage to match the book:  the second "does not need" should be
"doesn't even need".

Also make the comments about various added passages (for other
books) be more consistent.
2021-05-31 07:59:12 -07:00
PatR
53888a713c add ^ and " choices to / command
Like /m for nearby monsters and /O for all objects, implement /^
and /" to view a list of nearby traps or all known traps.  Only
lists discovered traps (or mimics immitating traps, or detected
door or chest traps iff still shown as such on map), but lists
map traps even when an object or monster at the same location is
blocking view of them.

For traps on the Water and Air levels that have been mapped, they
will only be listed when within line of sight so that this feature
can't be used to track portal location as it moves around.  However,
when within line of sight it does allow the portal to be recognized
if that has become covered.
2021-05-30 17:31:47 -07:00
PatR
494b374e12 whatis / quick-whatis for '^'
When using '//' or ';' to examine the map and player uses '^' to
move the cursor to the next displayed trap, have cursor go to
locations containing webs, the vibrating square, or other non-'^'
trap when such is the next trap symbol up.  Otherwise looking at
webs is very tedious because '"' is treated as a look-at command
rather than than a target symbol.
2021-05-30 01:31:54 -07:00
PatR
7f2620b98c fix pull request #523 - lighting on baalz level
Details for baalz level are different from other levels and that
unintentionally gave it a chance to be lit.  Force it to be unlit.

Fixes #523
2021-05-29 13:33:15 -07:00