6 weeks agoMake nets finite again IDFA
Nicholas Feinberg [Sat, 16 Jan 2021 17:42:22 +0000]
Make nets finite again

Too brutal to give gnolls infinite nets, probably.

2 months agoGive monsters infinite ammo
Nicholas Feinberg [Fri, 1 Jan 2021 23:22:12 +0000]
Give monsters infinite ammo

Don't allow running monsters out of ammo, and make their projectiles
always mulch. Remove extremely spammy 'returning' boomerang animations
from monsters.

Cyclops buff, probably.

2 months agoDon't spawn 8 will-o-the-wisps in Lair (Goratrix)
Nicholas Feinberg [Fri, 1 Jan 2021 22:51:43 +0000]
Don't spawn 8 will-o-the-wisps in Lair (Goratrix)

One will-o-the-wisp is a significant threat in Lair. 8 is death.

2 months agoFix `F`+pproj logic (10804)
advil [Fri, 1 Jan 2021 21:17:45 +0000]
Fix `F`+pproj logic (10804)

This was inverted, and I think it also shouldn't ever set MB_TRUE for
this code path.

2 months agoAdd lua support for targeted CMD_THROW_ITEM_NO_QUIVER
advil [Fri, 1 Jan 2021 20:58:11 +0000]
Add lua support for targeted CMD_THROW_ITEM_NO_QUIVER

This is a partial revert of d0772dbefd; this parameter was waiting for a
case to be added in

2 months agoSimplify throw_it (PleasingFungus)
advil [Fri, 1 Jan 2021 20:55:01 +0000]
Simplify throw_it (PleasingFungus)

This code path has become progressively refactored so that it is only
ever called from one place, and a quiver::action object provides the
full context needed to do throwing/launching; so, use that.

2 months agoRemove unused variable (Mesh)
Nicholas Feinberg [Fri, 1 Jan 2021 19:27:32 +0000]
Remove unused variable (Mesh)

2 months agoMore throwing code cleanup
Nicholas Feinberg [Fri, 1 Jan 2021 17:50:02 +0000]
More throwing code cleanup

Remove a very long-unused return variable and some other unused cases.

This whole use of `dist target` is much more complex than it needs to be
(we never pass a meaningful target in), but...

2 months agoBan shift-dir pproj (12422)
Nicholas Feinberg [Fri, 1 Jan 2021 17:42:40 +0000]
Ban shift-dir pproj (12422)

Recent quiver changes caused shift-direction aiming (which fires projectiles
in a cardinal direction) to crash the game, but it never worked correctly. In
older versions, it would aim at the map border, causing fun messages in e.g
Shoals of "There is a water there".

There's really no situation in which shift-aiming with pproj makes sense,
unless some more complex behaviour of 'aiming at the nearest enemy in that
direction' was added. Barring that, let's ban it.

2 months agoRename a mysterious 15-year-old variable
Nicholas Feinberg [Fri, 1 Jan 2021 17:03:58 +0000]
Rename a mysterious 15-year-old variable

2 months agoRemove an unused parameter
Nicholas Feinberg [Fri, 1 Jan 2021 16:58:02 +0000]
Remove an unused parameter

2 months agoDon't make Hurl Sludge also cast Blinkbolt (vt)
Nicholas Feinberg [Thu, 31 Dec 2020 18:17:33 +0000]
Don't make Hurl Sludge also cast Blinkbolt (vt)

Why are C-style switch/case statements so bad.

2 months agoHave Vehumet support Eringya's Toxic Bog (Lici)
gammafunk [Thu, 31 Dec 2020 17:36:06 +0000]
Have Vehumet support Eringya's Toxic Bog (Lici)

A direct damage spell, just not one using conjurations, so add it to the
special list.

2 months agoRecord origin of clouds that petrify the player (Tungsten)
Alan Malloy [Thu, 31 Dec 2020 11:55:28 +0000]
Record origin of clouds that petrify the player (Tungsten)

2 months agoRemove an unused spellbook 0.27-a0
wheals [Thu, 31 Dec 2020 10:44:09 +0000]
Remove an unused spellbook

2 months agoRemove insubstantial wisps 0.26-b1
Edgar A. Bering IV [Thu, 31 Dec 2020 08:17:28 +0000]
Remove insubstantial wisps

Insubstantial wisps aren't great monsters. Mechanically annoying, rarely
threatening in their vault usage, and not loreful enough to keep as a
rare vault decorating monster (compare toenail golems, which aren't
annoying and are very loreful).

After the Swamp overhaul these continued to appear in:

- assorted vaults (where they were generic electric/translocations theme
  or a now incorrect Swamp monster)
- the Foxfire card's effect list
- in the Abyss spawn list (as a Swamp guest)

None of these usages were particularly inspiring as the monster is not
great, so wisps are finally dissapated by this commit. The tile and
glyph info are retained to use as a dummy for player Wisp form.

For vaults:

- in Swamp and where they are a Swamp guest, they are replaced with
- in places where they are a generic electric threat, they are either
  removed or replaced with ball lightning (as appropriate),
- in places where they are a translocation theme piece, they are

The Foxfire card no longer summons wisps, and just has a shorter list.

The Abyss spawn has been replaced with will-o-the-wisps.

2 months agoFix some zap glyphs
Edgar A. Bering IV [Wed, 30 Dec 2020 18:30:41 +0000]
Fix some zap glyphs

Commits 2f2a4d8, f75564e, and 17de90a zapified more monster spells and
abilities, but in moving them to zap data didn't preserve the default
DCHAR_FIRED_ZAP beam glyph from mons_spell_beam. This resulted in
console animations for the affected abilities using null as the glyph,
hiding the beam.

2 months agoClarify annotations in Ctrl+O and in the manual
Goratrix [Wed, 30 Dec 2020 14:13:58 +0000]
Clarify annotations in Ctrl+O and in the manual

After commit 8436896, any level can be annotated. Update instructions
in Ctrl+O and in the manual accordingly.

2 months agoFix the build
wheals [Wed, 30 Dec 2020 18:06:53 +0000]
Fix the build

With the rename, the flavor connection to the vault is more tenuous than
ever, but I'll allow it.

2 months agoRemove Robustness (;
Nicholas Feinberg [Wed, 30 Dec 2020 17:54:36 +0000]
Remove Robustness (;

2 months agoRename two unrand rings (CanOfWorms, hellmonk, PleasingFungus)
Edgar A. Bering IV [Wed, 30 Dec 2020 17:44:13 +0000]
Rename two unrand rings (CanOfWorms, hellmonk, PleasingFungus)

Robustness -> the Tortoise
Phasing    -> the Hare

1. Robustness has the same name as the mutation, but a completely different
2. Tortoise / Hare pairing is good Lore that links the two rings.
3. I got to the bikeshed with the paint colour I like before PF did
   (alternate suggestion was Robustness -> Invincibility).

2 months agoFix gargoyle statue form LRD damage
Nicholas Feinberg [Wed, 30 Dec 2020 17:05:55 +0000]
Fix gargoyle statue form LRD damage

See 25521206441 for reasoning.

2 months agoWarn before entering a bezotted branch
Nicholas Feinberg [Wed, 30 Dec 2020 16:55:48 +0000]
Warn before entering a bezotted branch

To help players notice when they're short on time?

2 months agoRefactor stair warnings
Nicholas Feinberg [Wed, 30 Dec 2020 16:44:34 +0000]
Refactor stair warnings

2 months agoSmall update in options guide
Goratrix [Tue, 29 Dec 2020 20:47:48 +0000]
Small update in options guide

Eringya's Noxious Bog has a default force_targeter now,
so update options guide accordingly. Also fix two stray rows
which were longer than 80 characters.

2 months agoRename art-data MAGIC->WILL
Nicholas Feinberg [Tue, 29 Dec 2020 16:23:47 +0000]
Rename art-data MAGIC->WILL

MAGIC was always an extremely confusing property name.

2 months agoFix a changelog entry (ebering)
gammafunk [Tue, 29 Dec 2020 12:47:03 +0000]
Fix a changelog entry (ebering)

2 months agoUpdate the changelog
gammafunk [Tue, 29 Dec 2020 12:12:41 +0000]
Update the changelog

Through 0.26-a0-1210-gada54dbd18.

2 months agoRestore the Glaive of the Guard's enchantment (curatorofearth)
gammafunk [Tue, 29 Dec 2020 12:06:41 +0000]
Restore the Glaive of the Guard's enchantment (curatorofearth)

Make it +8 again, since its spectral weapon ego is good, but not good
enough to also have bad enchantment. This was an apparently
unintentional change made when ebering was testing a version with
multiple spectral weapons (!!).

2 months agoTweak boulder beetle rolling AI
gammafunk [Tue, 29 Dec 2020 10:01:49 +0000]
Tweak boulder beetle rolling AI

Boulder beetles currently continue rolling even if they don't have a
viable move, which leads to them rolling in-place behind monsters or
damaging clouds. This does confer a benefit to the monster should a
viable path open up before the roll enchantment expires, but is counter
to the player expectation that rolling implies to movement. This commit
has boulder beetles stop rolling if they have no viable move, and
likewise prevents them from attempting to roll if there is no viable
move. Although this is a slight nerf to boulder beetles, they're quite
worthy foes already.

This implementation uses the monster tracking info use by thorn hunters,
specifically tracking what our next viable move is. It would be ideal to
have better fidelity about this move information, since it doesn't
necessarily contain the move a monster would end up choosing. A later
codepath ends up trying a backup move location if current choice proves
unviable, but we don't have access to this data.

2 months agoClarify AF_CONFUSE's confusing flavour
wheals [Tue, 29 Dec 2020 10:52:50 +0000]
Clarify AF_CONFUSE's confusing flavour

AF_CONFUSE, when combined with AT_SPORE, represents a cloud of confusing
spores that cause confusion when breathed in. Otherwise, it is simply a
magical effect that causes confusion.

Fixes #1385

2 months agoRemove a confusingly redundant function.
wheals [Tue, 29 Dec 2020 10:58:17 +0000]
Remove a confusingly redundant function.

2 months agoAdd some periods.
wheals [Tue, 29 Dec 2020 10:27:14 +0000]
Add some periods.

2 months agoMark an ossuary entrance as transparent
advil [Mon, 28 Dec 2020 19:38:29 +0000]
Mark an ossuary entrance as transparent

Resolves #1639

2 months agoTransparency fixes for a kennysheep vault (12426)
advil [Mon, 28 Dec 2020 19:11:12 +0000]
Transparency fixes for a kennysheep vault (12426)

It lacks an @, so when marked as opaque could generate with the single
door not connected.

2 months agoAdd a flashy Wu Jian overflow altar vault
paul [Sun, 27 Dec 2020 23:42:53 +0000]
Add a flashy Wu Jian overflow altar vault

This vault is a nod to a classic 70's Kung Fu flick called Five Deadly Venoms.
The titular characters of the movie have nicknames and martial arts
styles that are reasonably well-represented by existing monsters and
tiles in DCSS and thought Wu Jian deserves a fancy Lua'd up altar like
some other deities!

[ Committer's note: Closes #1660. Set overflow depth appropriately. ]

2 months agoRe-conditionalize quiver redraw (wheals)
advil [Mon, 28 Dec 2020 18:12:40 +0000]
Re-conditionalize quiver redraw (wheals)

I'm not sure why this `if` got removed, but it might have just been an
accident during testing.

2 months agoFix macro menu handling of unprintable keycodes
advil [Mon, 28 Dec 2020 17:49:40 +0000]
Fix macro menu handling of unprintable keycodes

This is an attempt at some minimal fixes for this menu; anything more
ambitious will need to happen not during a feature freeze. Keycode
munging under the hood is a complete mess; this commit tries to work
around what's there with only minimal changes, rather than rewriting
everything. Main changes:

* Print readable names of many unprintable keycodes as menu hotkeys and
  in macro editing.
* Fix an issue where some ancient numpad handling code would interfere
  with ncurses handling of F1-F4. This has been wrong for a very long
  time and was hard to address without knock-on effects; for now
  webtiles still uses the wrong keycodes (which mistakenly got reified
  in key-conversion.js) and they are translated internally. There's also
  fixup code which translates wrong keycodes in a macro file into the
  correct ones.
* Add a macro editing mode where you can enter a keycode by number, as a
  last resort for console keycode editing. (This menu should be changed
  to let arrow keys select an item as a better alternative to this.)
  This is triggered by hitting \ at the entry prompt (so to set a macro
  for `\` you now need to do this at the menu or by keycode).
* More consistently print keycodes along with whatever printable symbol
  there might be for a keycode.
* Add a bunch of comments documenting weirdnesses in this underlying

Some remaining flaws: no handling for alt in SDL. Keycodes for many keys
are inconsistent across build targets and should possibly be normalized.
For weird keycodes, SDL sometimes prints surprising character names. The
windows code here is a shot in the dark (but I will test before
release). The macro menu followup UI is now even more complicated.

2 months agoNew mini vaults
amcnicky [Thu, 27 Aug 2020 15:48:12 +0000]
New mini vaults

Vaults in this collection:

A decorative minivault containing a small randomised pool

A rare vault which allows the dungeon generator to, on occasion, produce
a corridor surrounded on either side by liquid, perhaps to be read as
either a bridge over liquid below, or as a passageway between the
liquid's depths.

A decorative minivault containing a feature lined corridor

A slightly larger version of pool_small that can generate monsters, and
also appear ruined when generated within Depths.

[ Committer's note: Closes #1544. Tweaked and trimmed, dropped the beach
  vault submitted with this patch, adjusted depths and weights. ]

2 months agoNew simple and small arrival vaults
amcnicky [Thu, 27 Aug 2020 15:32:08 +0000]
New simple and small arrival vaults

Vaults in this collection:

A medium sized arrival vault featuring two highly randomised pillars and
a selection of entrance/exit possibilities

As above, but on a smaller scale

A double-entrance arrival vault with the potential for many different
hints of flavour in the feature tile

The player enters the dungeon through an entry room containing a number
of fountains. The downstairs of an abandonned bath house? A door in the
back of an ancient fountain temple? One of the fountains is broken, and
the player sees a corresponding pool of water

A vault intended to off the chance for an interesting tactical choice.
Should the player be chased back into this room by an early enemy, there
are no pillars to dance around. Instead, the player must either stand
and fight, or take a risk with the shaft to escape.

A more decorative vault, the player enters the dungeon by passing
through an underground garden. Was the dungeon entrance hidden within a
forbidden forest?

The player is presented with a randomised pillar, two possible
connections to the dungeon, and large smears of blood surrounding a
solitary trapdoor. What became of the last player who tried to use that

The player enters the dungeon via a secret room behind one of the water
features in an unspecified room. The vault tiles make this connection
through to the dungeon of zot appear almost intentional?

Which entrance to choose to the great dungeon of Zot? Which way does the
wind blow?

The player enters the dungeon of zot through a mysterious back alleyway
amongst an abandonned marketplace.

[ Committer's note: Closes #1542. Small tweaks to shrink some sizes,
  get the "story" of the vault in view on spawn, tactical checks,
  redundant doors. ]

2 months agoTwo new altar vaults
amcnicky [Thu, 27 Aug 2020 15:41:26 +0000]
Two new altar vaults

The vaults added are as follows:

A simple altar layout with (the potential for) a nice monetary surprise.

Lugonu has entered the dungeon! This vault iterates on the initial
submission idea of 'dungeon corruption' which could generate in many
branches and represents the fist of Lugonu smashing into the terrain.
Current monster spawns use Lurking Horrors to bring their fairly novel
tactical implications beyond just the abyss.

[ Committer's note: Closes #1538. inner_sanctum not taken as altar
  vaults are meant to place altars. It might be ok as a float/mini
  monsters type vault since the altar is more decorative. Tweaked
  lugonu_corruption to tone down the number of lurking horrors, have
  more variability in its 'corruption', and be approachable and
  connected from all sides. ]

2 months agoDefer redrawing the wield display if travel_delay = -1 (#1626)
wheals [Mon, 28 Dec 2020 11:07:42 +0000]
Defer redrawing the wield display if travel_delay = -1 (#1626)

Rather than cancelling the redraws entirely. Does the same thing with
the other displays as well, in case similar bugs happen in the future.

Fixes #1626

2 months agoForbid DEBUG_TRAVEL without DEBUG_DIAGNOSTICS
Aliscans [Tue, 10 Nov 2020 02:01:50 +0000]

Put a "#ifdef DEBUG_DIAGNOSTICS" statement around the #define for
DEBUG_TRAVEL, as this only does anything useful when DEBUG_DIAGNOSTICS
is set.

[ Committer's note: Split up code-review revisions and squashed them
  into the relevant commits. Made a few small tweaks also.
  Closes #1608 ]

2 months agoDon't set greedy_place for items in hostile areas
Aliscans [Tue, 10 Nov 2020 01:35:02 +0000]
Don't set greedy_place for items in hostile areas

As things stood, if autopickup was off and there was an unexplored space
behind a runed door, _explore_find_target_square() called pathfind()
once to no avail, called it a second time with try_fallback set, and
made that the target.

If autopickup was on, it called pathfind() once, cleared it (because it
had a negative travel_point_distance[] value), and printed a "Partly
explored" message.

This patch prevents greedy_place from being set if
travel_point_distance[x][y] is negative, so the square containing the
item can become the target.

2 months agoExpand the behavior of travel_open_doors
Aliscans [Tue, 10 Nov 2020 01:15:07 +0000]
Expand the behavior of travel_open_doors

Add a value for the travel_open_doors option which means that
autoexplore & travel plan routes which don't go through closed doors
where possible (in the same way it always does for runed doors).

The "actually stop travelling" code has moved from to

travel-open-doors-type.h lists the values, with "true" and "false"
mapped to more descriptive words for the previous behaavior.

A new template MultipleChoiceGameOption is implemented to support this
behavior, old multiple choice options should consider being ported to

2 months agoFix a stray text cursor showing up on local tiles
wheals [Mon, 28 Dec 2020 10:17:31 +0000]
Fix a stray text cursor showing up on local tiles

The root cause of most of these problems is using the same construct
both for text prompts and for highlighting squares on the map. Untangling
the uses, however, is not simple.

2 months agoUnify the two cursors on local tiles X somewhat.
wheals [Mon, 28 Dec 2020 10:11:49 +0000]
Unify the two cursors on local tiles X somewhat.

Clicking on a place on the map will move the map cursor to there.
Clicking on the map cursor will travel to there. It would be nice to
unify them entirely, but the problem is that X automatically centers the
map around the map cursor, so moving the mouse will shake around the
view erratically.

2 months agoShow LRD damage
Nicholas Feinberg [Mon, 28 Dec 2020 00:51:13 +0000]
Show LRD damage

2 months agoHackily fix Zot status description (vt)
Nicholas Feinberg [Mon, 28 Dec 2020 00:41:54 +0000]
Hackily fix Zot status description (vt)

Don't claim Zot is about to consume you when it's 15k turns away.

2 months agoSlightly increase density of winding_woodlands
nikheizen [Sun, 27 Dec 2020 19:11:03 +0000]
Slightly increase density of winding_woodlands

Increase the density of 5x5 rooms from averaging slightly less
than one 0 per room, to 1.5.

Increase the density of 5x15 rooms from averaging two 0 per room
to three.

winding_woodlands vaults would often spawn with very few monsters
in the connector rooms, and most of the threat would be spilling out
from the center subvaults. This makes them a little denser, while still
allowing the possibility of empty connector rooms occasionally.

2 months agoFix a couple subvault errors
nikheizen [Sun, 27 Dec 2020 18:59:28 +0000]
Fix a couple subvault errors

The 5x15_jagged subvault was 5x14, and thus could create some vaults
where part of the vault was only accessible by stairs, if the whole
vault wouldn't be vetoed.

The 15x15_boxy_spiral subvault had one of its exits misaligned by 1,
causing it to have buggy placement occasionally.

2 months agoReimagine Eringya's Noxious Bog (hellmonk,ebering)
gammafunk [Sun, 27 Dec 2020 11:58:14 +0000]
Reimagine Eringya's Noxious Bog (hellmonk,ebering)

The combined damage and movement/combat debuff of the bog is
interesting, but the spell's current approach of applying it in the
caster's wake makes the spell ineffective and somewhat difficult to use.
The additional turns spent moving to set up the effect incurs another
cost for a spell that's already damage over time. Obviously we could
increase the strength of the effect, but an alternative was proposed by
hellmonk: have the spell affect many cells, but only those not adjacent
to solid features. Being next to a lot of walls is generally helpful for
the player, so this requirement adds a different kind of cost, which is
that the player has to be near comparatively open areas. This is
positional, giving the spell a natural power scaling based on how open
the player's position is, and doesn't require kiting-like movement.

This commit changes the spell to transform all areas into bog that are
within a range of 4 and not adjacent to solid features, also excluding
the player's position. The transformation happens instantly and reverts
when the duration expires, with recasting not allowed until then. The
requirement that the feature have a solid floor remains (e.g. no deep
water or lava, but shallow water is fine). Additionally, only cells
visible via not-translocation-blocking LOS can be transformed, and
likewise we require that any transformed cell have all its adjacent
cells be visible. The second requirement is to prevent an information
leak by either using the targeter or casting the spell, either of which
would be a tedious exploit.

The duration is unchanged from before, as it seems reasonable for a
damage-over-time spell like this, but both this and the range of effect
of four will be reevaluated after more play-testing. If we want to
incorporate spell-power more, we one possible change is to increase the
range with spell-power, starting from a lower range at low power. We
have to strike a balance between the high level of the spell and its
need to be sufficiently strong and the fact that it can affect so many
more cells as we increase the range.

The spell has a static targeter showing potentially affected cells. I've
updated the casting noise from 2 to 6, which I assume was unintentional,
since we generally always have this noise value be the spell level. The
spell description is also updated. I've moved the spell from to, since this spell is really a damage
spell at its core, is similar to spells like Frozen Ramparts or Summon
Forest that not in

2 months agoMake X on local tiles slightly more useful
wheals [Sun, 27 Dec 2020 19:07:21 +0000]
Make X on local tiles slightly more useful

Make the cursor automatically move around with your mouse. Also, show
descriptions of features that are outside LOS_RADIUS but in your map

2 months agoRestore the cursor on offline windows tiles targeting (#12424)
wheals [Sun, 27 Dec 2020 18:23:38 +0000]
Restore the cursor on offline windows tiles targeting (#12424)

2 months agoDon't blink after death (nee)
Nicholas Feinberg [Sat, 26 Dec 2020 15:58:33 +0000]
Don't blink after death (nee)

God bless Felids.

2 months agoFix a typo (Renan)
gammafunk [Sat, 26 Dec 2020 15:33:41 +0000]
Fix a typo (Renan)

2 months agoFix no longer fix grammar (realallion)
Neil Moore [Sat, 26 Dec 2020 14:15:08 +0000]
Fix no longer fix grammar (realallion)

2 months agoAdd a bit more control to fire_order
advil [Thu, 24 Dec 2020 21:23:41 +0000]
Add a bit more control to fire_order

This is a bit of a filler commit; I think fire_order needs to be
restructured in a more general way, but for now at least provide some
coarse control over the order of action types when cycling the quiver.
This commit also lets players remove an entire type from the cycle order
(which has been particularly requested for abilities).

Because game start autoquivering uses `cycle()`, this commit also
affects that, so for the people who find it objectionable that Berserk
autoquivers on a Be start, this gives them a way to prevent that.

Eventually I think this would be *much* better as an in-game interface
along the lines of spellbook hide/show.

2 months agoMake Irradiate check AC and bump damage
Nicholas Feinberg [Thu, 24 Dec 2020 18:00:33 +0000]
Make Irradiate check AC and bump damage

Not checking AC was an oversight in the initial implementation that
slowly transmuted into a feature. Well, let's transmute it back.

I've made the damage a bit higher to compensate. Per a suggestion from
hellmonk, I've also reduced the number of dice that are rolled, which
reduces the predictability of the spell a bit.

2 months agoAdd an action inventory selector for Q*
advil [Thu, 24 Dec 2020 17:45:34 +0000]
Add an action inventory selector for Q*

Now, only the the non-tossing actions are shown on Q*, with an extra *
to toggle the full inventory.

This commit also:
* handles a bunch of corner cases with few or no actions better,
  especially for felids
* adds % as a secondary shortcut for items. This is because macroing Q*
  can lead to weird cases when there are no quiverable items, because *
  doubles ctrl; in the worst case if you macro Q to Q* and press QQ you
  get a quit prompt.

2 months agoMore eating remove
advil [Thu, 24 Dec 2020 16:29:29 +0000]
More eating remove

2 months agoDon't guarantee nzn_prometheus_bound
nikheizen [Thu, 24 Dec 2020 06:27:13 +0000]
Don't guarantee nzn_prometheus_bound

The map was a PLACE: instead of a DEPTH:, fix this, and
move the vault to shoals.des, since it only appears there

2 months agoUnify movement checks for barbs/ice spells
wheals [Wed, 23 Dec 2020 15:49:54 +0000]
Unify movement checks for barbs/ice spells

Incidentally fixes #1647 by putting them in the same code path as checks
for traps/dangerous terrain/etc.

2 months agoGive centaur enemies their bardings back (#12420)
wheals [Wed, 23 Dec 2020 14:59:29 +0000]
Give centaur enemies their bardings back (#12420)

Now that barding is adaptable enough for two species, why not three?

2 months agoFix Zin wrath
wheals [Wed, 23 Dec 2020 14:47:14 +0000]
Fix Zin wrath

Accidentally broken when the hunger effect was removed.

The situation remains where you get slightly less bad wrath by having
only bad mutations. This seems like its own punishment.

Fixes #1643

2 months agoShow correct cast messages when a spell is redirected against the caster
wheals [Wed, 23 Dec 2020 14:39:38 +0000]
Show correct cast messages when a spell is redirected against the caster

The second clause didn't seem to be doing anything, and I tested a bunch
of different monsters and didn't notice issues. Still, it's worth
keeping an eye out to make sure this doesn't cause other monspeak

Fixes #1652

2 months agoGrammatrise a Frozen Ramparts message
wheals [Wed, 23 Dec 2020 14:10:22 +0000]
Grammatrise a Frozen Ramparts message

Fixes #1635

2 months agoDisplay threat levels on the /polymorph targeter
Nikolai Lavsky [Wed, 23 Dec 2020 10:25:51 +0000]
Display threat levels on the /polymorph targeter

As a followup to 6ee96136, this commit colourizes the names of monsters
on the /polymorph targeter to show their potential threat level.
This gives the player a quick way to see if polymorphing a monster is a
good idea.

2 months agoEven more food removal (#1654)
wheals [Wed, 23 Dec 2020 13:46:08 +0000]
Even more food removal (#1654)

Featuring bonus rod removal and carrying corpses removal!

Fixes #1654

2 months agoCheckwhite
wheals [Wed, 23 Dec 2020 13:36:21 +0000]

2 months agoPut the cursor back in the X menu on Windows (#1536)
wheals [Wed, 23 Dec 2020 13:26:42 +0000]
Put the cursor back in the X menu on Windows (#1536)

See the comments on the PR. As aidanh mentions, cursor_control is a
blunt force instrument that needs to be manually turned on and off here,
but my naive attempts to enable the cursor only when the map cursor is
being drawn didn't work -- it seems that it gets redrawn at odd moments,
and that ends up wiping the cursor away.

I didn't bother to make use_fake_cursor work here, because it already
was broken for the direction chooser anyway. If we ever hear about
someone using it on Windows, we can fix it, but it seems like it only
fixes a Unix-specific problem.

I'd wait for a more thorough fix, but this is a game-breaking bug on
Windows console and we have a release coming up.

Fixes #1536

This also incidentally fixes a related problem where the cursor appeared
when opening up sub-menus from the direction chooser.

2 months agoFix a warning when compiling for Windows
wheals [Wed, 23 Dec 2020 10:08:08 +0000]
Fix a warning when compiling for Windows

2 months agoUpdate Drain status description
Nikolai Lavsky [Wed, 23 Dec 2020 10:49:55 +0000]
Update Drain status description

After 4cbea82f, Drain temporarily reduces max HP instead of skills.

2 months agoPass some parameters by reference
Quipyowert2 [Wed, 20 May 2020 01:22:20 +0000]
Pass some parameters by reference

According to Cppcheck, this is "usually faster" than passing by value
and "recommended in C++."

2 months agolint
advil [Wed, 23 Dec 2020 00:05:21 +0000]

2 months agoRefactor quiver redraw state
advil [Tue, 22 Dec 2020 23:43:34 +0000]
Refactor quiver redraw state

This fixes some bugs where the launcher quiver wasn't getting properly
redrawn, but also provides some abstraction over the raw booleans stored
on `you`.

2 months agoAdd a basic menu to macro/keybind editing
advil [Tue, 22 Dec 2020 23:38:53 +0000]
Add a basic menu to macro/keybind editing

Especially for online play, it's extremely annoying that there's no way
to view current macro/keymap mappings without going key by key. This
commit solves that by putting a real submenu behind the `~` options,
letting you see all current macros/keybinds (of the same type) at once.
It also does some light refactoring of how some of the options are
chosen, and will involve an extra keypress for new macros (or more for
keys that are used in the menu ui).  This menu is very much at the
minimal viable ui state: I didn't widgetify anything except the
key/macro selection part, and there's a *lot* more one could do with
this to give it a real ui. However, for now it's a net improvement.

2 months agoSome fixes and cleanups for winding_woodlands
gammafunk [Tue, 22 Dec 2020 12:42:24 +0000]
Some fixes and cleanups for winding_woodlands

Fix the glyphing for nzn_winding_woodlands_large and
nzn_winding_woodlands_stair_trap, which had some incorrect subvault
glyphs that would never let the maps successfully place.

Empty the default-depth before the subvaults are defined so they won't
inherit the prior default depth used by the parent vaults. Parent vaults
that tried to place in Swamp weren't able to find viable subvaults,
since the default depth doesn't include the Swamp branch. Having an
empty depth will allow the subvaults to place anywhere the parent map
requires, and the parent map will still be subject to the restrictions
of the previous default depth at the beginning of the file.

Finally, clean up some NSUBST and SUBST syntax. Closes #1610.

2 months agoSome minivault adjustments
gammafunk [Tue, 22 Dec 2020 11:29:33 +0000]
Some minivault adjustments

For nzn_sisyphean_effort and nzn_prometheus_bound, have the placed
corpse on a delayed decay instead of never decaying. For the Prometheus
vault, place a Book of Fire instead of a Book of Flames, since the
former is a more appropriate reward in Shoals and just as thematically

For nzn_life_drinkers, simply clean up some SUBST. This vault could
place as an overflow altar with low weight for D:8-9. In Vaults, ideally
it would be tagged as a vaults room so that it could place successfully
more often. It works fine as a standalone altar vault altar and can
successfully place in Vaults per wizmode tests, so I can save both
potential changes for some time before the 0.26 release.

2 months agoSome adjustments to new overflow altars
gammafunk [Mon, 21 Dec 2020 23:43:22 +0000]
Some adjustments to new overflow altars

For nzn_hepliaklqana_mist_gate and nzn_wu_jian_contemplation some minor
simplifications and spacing cleanups.

For nzn_makhleb_speed_demon, replace the executioner with a sixfirhy,
since an executioner is basically worse than any possible 8 spawn for
D:7-D:11. A sixfirhy is quite fast and dangerous for these same depths,
but not so much that no character would reasonably open the vault to get
to the Makhleb altar.

For nzn_overflow_gifts_of_might_and_magic, revamp the Trog-themed weapon
to add enchant at the earliest depth and have Trog-themed brands (so
vorpal, flaming, or antimagic) but no enchant at subsequent depths. This
way the Trog item offering isn't so meagre compared to the Sif item,
which gifts a small number of low-level spells.

2 months agoSome changes to the new Swamp end vault
gammafunk [Tue, 22 Dec 2020 10:33:56 +0000]
Some changes to the new Swamp end vault

For nzn_swamp_witches_coven, add deep elf mages to the "wizard" set and
reduce the weighting for spriggan druids, giving their previously double
weight to the mages and to the wizards that previously had half weight.
Druids have a somewhat harder time in this vault since there are so few
trees, so it's best to not place so many of them.

For the inner areas that randomly get shallow water, land, or monsters,
increase the amount of land by 50% and decrease the amount of water.
This vault previously placed an awful lot of water without very much
land. Some tests with the new weight shows that there is still mostly
water with relatively few tiles safe from trees, but it's not going to
be quite so hard to find an area to fight inside the vault. Otherwise
the incentive is to clear nearly all of the vault from outside.

Also, make the inner pentagram walls use special dark stone wall tiles
that more strongly suggest a demonic theme, using magenta for these
walls in console. This is purely a cosmetic change with no affect on
gameplay. Finally, make the central granite statue always use a
demonic-themed tile.

2 months agoSome Swamp vault fixes and cleanups
gammafunk [Tue, 22 Dec 2020 10:33:36 +0000]
Some Swamp vault fixes and cleanups

Make vault statements in a number of vaults have aligned spacing, and
remove no_item_gen where not necessary. Although placing additional
level monsters in a vault can make it harder and dilute its theme in
some cases, no_item_gen doesn't generally affect these aspects. It's
better to allow level item generation to be natural when possible and
have fewer spoilers.

For nzn_swamp_weyward_sisters, expand its placement from Swamp:3- to
Swamp:2 and give it normal weight. Although a few fenstrider witches is
scary, these monsters place with decent weight from Swamp:1 as it is.
Put the peaceful human behind a runed door, since otherwise it will open
the door and probably die while attacking one of the witches. Make the
placed corpses and skeletons all have a delayed decay like we usually do
for these vault corpses. Finally make some slight syntax cleanups.

For nzn_swamp_blast_mining, reglyph to use no predefined glyphs and
simplify the monster placement logic. The previous logic was more
complicated didn't quite agree with the stated averages in the comments.
Use two NSUBST to simplify the logic instead of a SHUFFLE and two SUBST.

For nzn_swamp_dancing_lights, remove the down-weighting, as this is not
a particularly nasty vault, and simplify syntax.

2 months agoSome cleanups to a ghost vault
gammafunk [Tue, 15 Dec 2020 12:39:56 +0000]
Some cleanups to a ghost vault

For nzn_ghosts_randoct, rename it to nzn_ghost_randoct for consistency
with our other vaults and reglyph it to not use any predefined glyphs.
Simplify some shuffles into substs, then combine related statements into
one line.

2 months agoAdd one (1) ghost vault
nikheizen [Mon, 7 Dec 2020 22:06:50 +0000]
Add one (1) ghost vault

Per request of gammafunk, a nasty ghost/transporter vault which becomes
nastier and deeper depending on branch/depth.

2 months agoAdjust the weight of a couple nzn vaults
nikheizen [Mon, 7 Dec 2020 19:10:05 +0000]
Adjust the weight of a couple nzn vaults

speed_demon should be vanishingly rare since most folks won't be opening

the swamp exclusive winding_woodlands center vault has been made
twice as likely to accomodate for how rarely a valid vault for it
to be selected in will even place.

2 months agoAdd 4 swamp vaults and one new swamp endvault
nikheizen [Tue, 1 Dec 2020 05:39:23 +0000]
Add 4 swamp vaults and one new swamp endvault

weyward_sisters: A trio of witches. One captures the men, one cooks
them, and one gives their bones so that the mushrooms may grow.
stair_ambush: Does what it says on the tin.
blast_mining: Bloated husks have some practical applications.
dancing_lights: A trio of will-o-the-wisps with accompanying fog
machines for that spooky swamp feeling.

All of these aside stair_ambush are weighted 5 either because they
are gimmicky (blast_mining) or are quite deadly.

witches_coven: A standard coven (or baker's dozen) of witches,
congregating around the decaying rune and summoning demons in an
inverted pentagram-shaped facility.

2 months agoWinding Woodlands: forest-themed subvault maps
nikheizen [Thu, 12 Nov 2020 18:00:46 +0000]
Winding Woodlands: forest-themed subvault maps

Winding Woodlands are a set of maps which heavily utilize
subvaults and have a woodland/forest theme (when the subvaults
aren't simple geometric shapes).

As of this commit there are 8 maps with 41 subvaults for said
maps to draw from.

2 months agoAdd two vaults based off of Greek Myth (Silurio)
nikheizen [Thu, 12 Nov 2020 17:49:50 +0000]
Add two vaults based off of Greek Myth (Silurio)

The two myths referenced are Prometheus Bound and Sisyphus.
Even if the intention of the flavour misses, these still have
enough "anonymous" flavour to be somewhat interesting.

2 months agoAdd 7 altar vaults
nikheizen [Sat, 7 Nov 2020 07:17:51 +0000]
Add 7 altar vaults

- hepliaklqana_mist_gate: simple thematic hep vault where the player
must peer into the past
- makhleb_speed_demon: only the quickest warriors deserve makhleb's
favour. bit of a meta reference to speedrunning the game. idea stolen
from hellmonk
- wu_jian_council_hall: simple wjc vault where the likeness of the council
members look down upon their altar
- wu_jian_contemplation: an idyllic shrine whose maintainer is now absent
- overflow_gifts_of_might_and_magic: dual trog/sif overflow lightly themed
on their shared attribute of gifting
- overflow_masters_of_martial_movement: dual WJC/uskayaw mini. prove
your worthiness by dancing around this boulder beetle
- life_drinkers: vampiric philosophers have long pondered on makhleb and
the shining ones penchant for healing devout worshippers when they kill

2 months agoMake a lua vault function more widely available
gammafunk [Mon, 21 Dec 2020 22:49:42 +0000]
Make a lua vault function more widely available

Move random_item_def() to dungeon.lua, so it can be used by vaults other
than ghost vaults. A subsequent commit will use this function for an
overflow altar vault.

2 months agoDon't let Gauntlet room monsters pickup loot (Yermak)
gammafunk [Tue, 22 Dec 2020 09:09:45 +0000]
Don't let Gauntlet room monsters pickup loot (Yermak)

Now that all monsters generate awake in Gauntlet, certain intelligent
monsters might pick up the loot they find before the player first sees
it. This was also possible before they generated awake, for example if
noise from combat woke up monsters in other rooms, but now it's
especially common. In any case, it was always intentional that players
would get full information about the loot in rooms for decision-making
purposes and that they'd get access to those rewards without e.g.
monsters using consumables.

This commit marks all room loot as no_pickup. The minotaur's loot pile
does not have this tag, so this monster still has its access to some
choice gear.

It would be ideal if no_pickup could be set vault-wide for items and
possibly also using KMASK. For now, I've modified all item statement to
programmatically add "no_pickup" in a way that should be pretty
resistant to breakage. I had to redefine * and | as "star_item
no_pickup" and "superb_item no_pickup" using KITEM, and have likewise
done this for the % and $ glyphs, even those are not currently used.

2 months agoRemove an island from due_jungle_book (12364)
advil [Tue, 22 Dec 2020 02:45:05 +0000]
Remove an island from due_jungle_book (12364)

This island is kind of pointless as far as I can tell, because the
anaconda can travel through water. Is it possible that this vault
precedes b98e291e80b1?

2 months agoDon't feel safe on hexers trapped in grates (12371, #1651)
advil [Tue, 22 Dec 2020 01:39:43 +0000]
Don't feel safe on hexers trapped in grates (12371, #1651)

If a monster had only non-damaging ranged spells and was trapped in
grates (or water, etc), this code would register that the monster could
not hurt the player. This is narrowly true, but because this function is
used for i_feel_safe, the monster would not count as a threat for the
player under various broader  conditions, notably, autotravel.

The specific buggy case that has come up in several reports is draining
eyes, which don't damage the player but do of course drain mp; in other
circumstances they register as dangerous by having a foe path to the
player. In 0.25, `explore_auto_rest` became default true, and so if the
player autotraveled into los of a trapped draining eye, they would enter
a perpetual rest + drain cycle because i_feel_safe returned true,
running up the clock until they interrupted it. This is even worse for
players who have a force_more on the drain message (e.g. ones using
HDA's rc as in #1651) because it is hard to interrupt the loop. It's
also compounded by the lack of hunger: in 12371 the player got out of
the autoexplore loop when they became hungry, which can't happen any

The change is to construe "hurt" for this function's purposes more
broadly, to include any dangerous ranged spells regardless of whether
they are attacks; it's used only for autoexplore and as a minor check on
tension.  It's possible this will stop autoexplore incorrectly in some
cases I haven't thought of, but it can be fine-tuned from here.

Resolves #1651

2 months agoChange the quiver verb for tremorstones
advil [Mon, 21 Dec 2020 19:45:17 +0000]
Change the quiver verb for tremorstones

"Throw" was more consistent with a previous version of tremorstones'
flavor, and also confusing together with actual throwing.

2 months agoAllow quivering evokables from inventory
advil [Mon, 21 Dec 2020 19:42:05 +0000]
Allow quivering evokables from inventory

2 months agoFix some ammo_to_action logic (12414)
advil [Mon, 21 Dec 2020 19:39:42 +0000]
Fix some ammo_to_action logic (12414)

2 months agoAvoid a crash when using OTR and worshipping Beogh
wheals [Mon, 21 Dec 2020 19:16:06 +0000]
Avoid a crash when using OTR and worshipping Beogh

2 months agoRemove some broken local tiles clicking stuff
advil [Mon, 21 Dec 2020 18:31:14 +0000]
Remove some broken local tiles clicking stuff

This has been broken in an unusable way since c3daa31c0c (about two
years) because of the incorrect use of testbits, and even fixing that
these features are still pretty unusable in my testing. They are also now
somewhat redundant with the quiver features. I think something like the
previous behavior of ctrl-click and alt-click could be a good thing to
have, but it needs to be rewritten (perhaps using the actions api) and
restructured to be less redundant. One idea in the long run might be to
have these extra click combos access more quivers, or quivers that are
spell and evocable specific (similar to the launcher quiver).

Given how broken this has been, I'm just removing for now, the main
place to notice a difference will be that ctrl-click on the player will
now not lead to broken/confusing behavior with targeted spells. There's
shift-click to cast/evoke from the new quiver, and also still a
click-to-cast interface in the sidebar for local tiles.

2 months agoFix a bunch of local tiles clicking stuff
advil [Mon, 21 Dec 2020 18:20:18 +0000]
Fix a bunch of local tiles clicking stuff

We got a report that e42c0a684a0 broke click-to-throw. I'm still not
sure what this report was about, but on looking into this, I found any
number of things broken about clicking-related stuff. Some of this is
related to quivers, some is older. This commit fixes at least the
following bugs:

* The tooltip info was a mess and often wrong
* Some of the conditions for whether to report "Travel" tooltips were
  out of sync with the travel code
* open door tooltips were being calculated wrong
* quivers were being triggered, but by passing key commands to the fire
  interface, rather tha by setting a target directly
* On shift-click to cast with too low mana, a bunch of key errors were
* primary attacks with launchers weren't handled correctly, and only
  triggered movement

2 months agoDo basic deduplication when rendering tile overlays
advil [Mon, 21 Dec 2020 00:46:24 +0000]
Do basic deduplication when rendering tile overlays

This is very minimal: it just prevents stacking completely adjacent
identical overlays. This is intended to handle cases with large numbers
of bennus (e.g. in a zig) where many, many explosions can get stacked on
top of each other; in these cases, the number of overlays was easily
reaching the cap (20) which causes a crash. Since layering these
overlays does nothing, simply prevent it. If this system is ever used to
layer overlays with alpha values, this may have unexpected effects, but
to my knowledge it isn't.