27 min agoRemove Maxwell's etheric cage master
Kate [Sat, 22 Feb 2020 21:20:42 +0000]
Remove Maxwell's etheric cage

The upside of faster MP regeneration now exists in a fairly common form on
amulets, and even if it were a more notable upside, the downside of doubled
contamination also isn't very relevant with the removal of Haste spell.

99 min agoUpdate lightning rod description
Kate [Mon, 24 Feb 2020 22:10:59 +0000]
Update lightning rod description

99 min agoDon't list zigfigs on the autopickup menu
Kate [Tue, 25 Feb 2020 08:34:30 +0000]
Don't list zigfigs on the autopickup menu

They're a unique(ish) item like the horn of Geryon, and not something that the
player would want to toggle autopickup for in the course of normal play. Add
them to default autopickup instead like runes, to make sure they don't get

100 min agoDisallow -tele on artefact weapons and jewellery
Umer Shaikh [Fri, 21 Feb 2020 13:02:26 +0000]
Disallow -tele on artefact weapons and jewellery

-tele is usually not a meaningful bad artefact property on weapons and
jewellery, since swapping away from those items is so quick.
Furthermore, putting -tele on quick-swapping items allows the player to
explore with a -tele item equipped and swap to their "real" equipment
for fights, thereby avoiding teleport traps and teleportitis at marginal
cost. This is frustratingly uninteresting gameplay. And it allows the
player to neutralize the gameplay benefits of teleport traps with little
risk and no real investment or decision-making regarding their
character's loadout.

A simple solution is to prevent -tele from spawning on any weapons or
jewellery. We could also try to make sure that on jewellery and weapons
-tele always pairs with other properties that make swapping less
trivial (*contam, fragile, harm, etc.), but I am skeptical that the
complexity is worth the trouble.

I also considered changing the behaviour of -tele to stop translocations
only from an internal source. Then wearing -tele would not affect
teleporting unless the player could already choose whether or not to
teleport, so there is no reason to swap to -tele to explore. However
this is additional "player-facing" complexity, in that there is another
somewhat fiddly rule for the player to learn; even very careful players
don't need to know about rules governing placement of artefact
properties. Furthermore it does not address the first issue mentioned,
that weapon and jewellery -tele is rarely an interesting drawback.
Finally this approach takes away an arguably interesting strategic
choice that players are making, to wear -tele on armour to prevent
teleport traps in particular places (esp. Zot).

[ Committer's note: simplified and added a comment. Closes #1292 ]

15 hours agoRename a variable (alexj)
Nicholas Feinberg [Tue, 25 Feb 2020 05:16:58 +0000]
Rename a variable (alexj)

15 hours agoRemove Call Imp type scaling (Wise Wolf)
Nicholas Feinberg [Tue, 25 Feb 2020 05:10:21 +0000]
Remove Call Imp type scaling (Wise Wolf)

The type of imp you could get would vary subtly with spellpower,
but only after a baffling secret 46-power breakpoint. (Introduced
in 854173f2e9b9 / 48f4e9825740 almost 10 years ago, at a time when
the maximum power for the spell "seemed to be 71"?)

I don't think there's any particular need to make a level 2 spell
marginally more useful in the mid-game, and this change should have
almost no effect on how the spell is used in practice. Just
simplifying it so we don't need fun graphs like .

15 hours agoImprove new Brilliance (bhauth, kate)
Nicholas Feinberg [Tue, 25 Feb 2020 05:04:35 +0000]
Improve new Brilliance (bhauth, kate)

Restore the duration to its old length, to match might and stabbing
- the new effect and the old one were closer in power than I'd
realized at plausible mid-game stat + skill values. Also remove the
hunger cost entirely, to make the effect more dramatic.

46 hours agoRemove Berserk's strength bonus as well
Kate [Sun, 23 Feb 2020 21:54:57 +0000]
Remove Berserk's strength bonus as well

For consistency with might.

46 hours agoDon't recolour Dex on the HUD with agility active
Kate [Sun, 23 Feb 2020 21:48:40 +0000]
Don't recolour Dex on the HUD with agility active

46 hours agoCleanup might potion str
Nicholas Feinberg [Sun, 23 Feb 2020 21:48:47 +0000]
Cleanup might potion str

47 hours agoRemove the str bonus from !might lessmighty
Nicholas Feinberg [Sun, 23 Feb 2020 16:25:27 +0000]
Remove the str bonus from !might

!might is a potion that makes you much better at melee combat. It
also, incidentally, gives you 5 str, which adds a little more melee
damage, improves your accuracy and spellcasting chances in armour,
and so on.

Simplify and focus on the core idea of the potion by removing the
bonus strength. The bonus damage remains very beefy and noticable,
and there are plenty of other ways to play with HUGE STRENGTH.

47 hours agoUpdate brilliance status description
Kate [Sun, 23 Feb 2020 20:55:54 +0000]
Update brilliance status description

47 hours agoImprove potion of stabbing description
Kate [Sun, 23 Feb 2020 20:30:44 +0000]
Improve potion of stabbing description

47 hours agoUpdate status documentation
Kate [Sun, 23 Feb 2020 20:30:32 +0000]
Update status documentation

47 hours agoSimplify agility to only apply bonus evasion
Kate [Sun, 23 Feb 2020 20:25:44 +0000]
Simplify agility to only apply bonus evasion

Remove the +5 dex and bonus to stealth, both of which were far less relevant
than the fixed bonus to evasion.

2 days agoRework the potion of brilliance newbrill
Nicholas Feinberg [Fri, 21 Feb 2020 03:55:54 +0000]
Rework the potion of brilliance

At present, the potion of brilliance is an odd bird. It decreases
spell failure cost dramatically and increases spell power slightly,
essentially acting as a 'potion of cast high fail chance spells'.
This encourages players to memorize spells that they can't normally
cast just for the few times during a game they'll use !brill. The
UI for this isn't great (how do you tell what your fail chance will
be after you drink it?), and it's relevant to almost all characters,
meaning that everyone's inventories and tactical options are
cluttered with it.

This changes !brilliance to instead do two specific things: act as
a universal spell enhancer (like archmagi) and reduce spell hunger
costs by half. The former is a buff for 'casters', but probably
not something most 'melee-focused' characters care about (and thus
need to have in their inventory). The latter is intended to act as
moral encouragement to blast away with your most powerful spells
while the potion is running.

The new brilliance looks more powerful than the old one, so its
duration is roughly halved.

3 days agoMark a slime entry vault as no_tele_into (#12206)
Kate [Sat, 22 Feb 2020 16:48:18 +0000]
Mark a slime entry vault as no_tele_into (#12206)

3 days agoRe-brace
Kate [Fri, 21 Feb 2020 22:21:19 +0000]

4 days agoFix tremorstone vaults
Nicholas Feinberg [Fri, 21 Feb 2020 04:08:31 +0000]
Fix tremorstone vaults

4 days agoMake tremorstones multi-use
Nicholas Feinberg [Fri, 21 Feb 2020 01:43:49 +0000]
Make tremorstones multi-use

As with boxes of beasts and sacks of spiders, each tremorstone
item can be used repeatedly until it (1/3 chance) collapses. The
goal is to make them a bit stronger and worth carrying, since a
single shot of a rare item wasn't quite worth it in practice.

5 days agoUpdate the changelog (PleasingFungus, Ge0ff)
gammafunk [Thu, 20 Feb 2020 06:01:59 +0000]
Update the changelog (PleasingFungus, Ge0ff)

Through 0.25-a0-544-gee0576305d. Remove the entry for the staff of
Battle, since that was already released in 0.24! oops.

5 days agoA new octopode splash screen from Nibiki
gammafunk [Wed, 19 Feb 2020 21:05:36 +0000]
A new octopode splash screen from Nibiki

Nibiki has agreed to license this image under CC0. Many thanks to him
for this great artwork.

6 days agoCreate ~/.ccache if needed
Alex Jurkiewicz [Wed, 19 Feb 2020 20:21:19 +0000]
Create ~/.ccache if needed

6 days agoChange chance of triggering paralysis/pain bond to be turn-length invariant
Byrel Mitchell [Wed, 17 Jul 2019 19:26:59 +0000]
Change chance of triggering paralysis/pain bond to be turn-length invariant

Previously, this formula gave you a significant higher chance of triggering a paralysis or painbond event per aut if you were taking shorter actions:

0 auts remaining on TIMER:
10 aut turn => 0.01 events/aut
5 aut turn => 0.02 events/aut

200 auts remaining on TIMER:
10 aut turn => 0.0033 events/aut
5 aut turn => 0.004 events/aut

This incentivizes doing fast actions whenever you have to wait at higher piety instead of simply resting. It's even optimal when enemies are out of sight, since a paralysis/pain bond event triggering when no enemies are in sight resets the relevant TIMER to 0.

The new formula makes the expected value of events proportional to the duration of the turn, and so eliminates all turn-length dependence except for rounding errors. Event rates are all set to the same as with 10 aut actions previously, regardless of action length. This is probably a slight nerf in general, but a significant nerf to quickblade Uskers.

6 days agoImprove macOS Makefile support
Alex Jurkiewicz [Wed, 1 Jan 2020 05:27:15 +0000]
Improve macOS Makefile support

BSD sed (used on macOS) lacks -r and has different semantics for -i,
which causes some incompatibilities. Allow the user to override the sed
command for these sed calls, eg "make SED=gsed"

macOS also has BSD find which lacks -o as an alias for -or. Change the
Makefile to use -or as GNU find also supports this.

6 days agoAdd size limits to ccache
Alex Jurkiewicz [Wed, 12 Feb 2020 02:45:46 +0000]
Add size limits to ccache

6 days agoDisplay ccache config per-build
Alex Jurkiewicz [Tue, 11 Feb 2020 11:13:26 +0000]
Display ccache config per-build

6 days agos/coveralls/codecov/
Alex Jurkiewicz [Tue, 11 Feb 2020 20:38:42 +0000]

6 days agoExclude catch2-tests/ from coverage data
Alex Jurkiewicz [Tue, 11 Feb 2020 20:17:55 +0000]
Exclude catch2-tests/ from coverage data

6 days agoDisable Codecov pull request comments
Alex Jurkiewicz [Tue, 11 Feb 2020 20:13:26 +0000]
Disable Codecov pull request comments

6 days agoUpdate new dev guidelines
Edgar A. Bering IV [Wed, 19 Feb 2020 13:47:09 +0000]
Update new dev guidelines

As the newest dev I suppose this falls to me. This update restores the
information about the process for adding a member to the team that got
lost in the dev-doc-shuffle of 2017, wraps things to 80 columns,
and updates some links and process information to point to github.

6 days agoWrap to 80 columns
Edgar A. Bering IV [Wed, 19 Feb 2020 12:53:40 +0000]
Wrap to 80 columns

Closes #1275

6 days agoRemove install instructions for Void Linux
Alex Jurkiewicz [Sat, 8 Feb 2020 20:16:38 +0000]
Remove install instructions for Void Linux

They were added several years ago by a now deleted user in #460. The
package names are all unsurprising and no special steps are required, so
it seems unnecessary to include.

6 days improvements
Alex Jurkiewicz [Mon, 3 Feb 2020 12:59:43 +0000] improvements

* Install pngcrush & advancecomp
* Add a section on using DCSS's packaged dependencies

6 days agoDon't mention player-only mechanics in monster spells descriptions
Nikolai Lavsky [Wed, 29 Jan 2020 11:59:42 +0000]
Don't mention player-only mechanics in monster spells descriptions

Several monster spells use descriptions of similar god abilities,
which reference the Invocations skill or player-only mechanics.

Fix this and, as a followup to 9231cdcb, adjust description for the
Drain Life spell.

6 days agoExtend alias functionality for database lookups
Nikolai Lavsky [Wed, 29 Jan 2020 11:57:11 +0000]
Extend alias functionality for database lookups

Currently, descriptions for abilities, spells, and dungeon features can
be reused via aliases, d52d0508. But it's not possible to use an alias
and then add details to it.

This commit adds support for a new type of marker for database entries,
[[foo]]. Any [[foo]] marker in a database entry will be replaced with a
corresponding entry's text before being displayed to the player.

6 days agoUpdate Summon Drakes description
Nikolai Lavsky [Tue, 18 Feb 2020 10:45:26 +0000]
Update Summon Drakes description

Dragons were cut from the spell and replaced with lindwurms in 9b5a2163.

6 days agoConvert dummy agility to stabbing, not degen
advil [Tue, 18 Feb 2020 21:35:06 +0000]
Convert dummy agility to stabbing, not degen

6 days agoAssimilate handling of dummy agility to other removed potion types
advil [Tue, 18 Feb 2020 21:31:09 +0000]
Assimilate handling of dummy agility to other removed potion types

This is unfortunately ugly, but it does not crash. Basically, treat this
very temporary potion like any other potion that's been removed -- even
though it's last in the enum, keep it around until a major version tag,
and do save compat unconditionally.

This is a semi-revert of 08029b5080ff (sorry).

7 days agoFix a flight message not displaying
Kate [Tue, 18 Feb 2020 20:16:51 +0000]
Fix a flight message not displaying

Appears to have been broken by 4dc341646031.

7 days agoReword a hint
Kate [Tue, 18 Feb 2020 20:02:37 +0000]
Reword a hint

7 days agoFix a monspeak entry (#12201)
Kate [Sun, 16 Feb 2020 20:20:24 +0000]
Fix a monspeak entry (#12201)

7 days agoRemove a funny message
Nicholas Feinberg [Tue, 18 Feb 2020 02:41:14 +0000]
Remove a funny message

Jokes are like fish: they begin to smell after three days.

7 days agoFix garbage potions
Nicholas Feinberg [Mon, 17 Feb 2020 23:48:05 +0000]
Fix garbage potions

8 days agoCleanup !agi cleanup
Nicholas Feinberg [Mon, 17 Feb 2020 17:15:12 +0000]
Cleanup !agi cleanup

8 days agoCleanup !agi
Nicholas Feinberg [Mon, 17 Feb 2020 16:35:53 +0000]
Cleanup !agi

Remove the dummy potion hack.

8 days agoMark potions of agility as removed (Yermak)
gammafunk [Mon, 17 Feb 2020 08:45:51 +0000]
Mark potions of agility as removed (Yermak)

It's necessary to add these potions to the removed_items set so that we
don't get a "potion of bugginess" entry in the unknown item listing of
the identification menu. This entry might also be necessary to disable
things like generation, but I haven't checked this.

A subsequent commit should TAG_MAJOR various portions of agility potion
code, the related agility duration code, and remove the effect from the
list of Xom effects.

8 days agoPotion of agility -> stabbing potstab
Nicholas Feinberg [Wed, 12 Feb 2020 04:46:28 +0000]
Potion of agility -> stabbing

Potions of agility were not an interesting item. You plopped them
on when you were going to get in a big fight and they made you take
slightly less damage. It wasn't something that you used differently
from !might or !brill or arguably !haste, just another buff to stack
on the pile and clog up your inventory.

Instead, replace !agility with !stabbing, which gives a 50% chance
to upgrade weak stabs (distraction, etc) to strong stabs (sleep,
etc). This is most useful for 'stabbers', but any character that
can generate distractions (from allies, evocables, gods etc) and
stab people can use it, in a reasonably meaty and distinctive way.

Minor note: it's not marked useless for Ru chars who sacrificed
stealth because they could, in principle, still stab. (I think?)

8 days agoAdjust floor and overlay tiles for Frozen Ramparts
gammafunk [Sun, 16 Feb 2020 23:38:10 +0000]
Adjust floor and overlay tiles for Frozen Ramparts

With CanOfWorms' wall overlay tiles, the tiles for floors adjacent to
icy walls and for icy floor overlays look too bright and cyan. This
commit lightens and adjusts hue for both sets to work better with the
wall overlays. Now the icy floor tiles aren't such a contrast compared
to the final overlayed icy walls for wall types with darker tiles.

The wall overlays currently have clear boundaries between tiles. If
these overlays were reworked to fit together more continuously like our
wall and floor tiles do, it would improve the appearance. The floor
overlays are not necessary now that we have wall overlays, but the floor
overlays do fit together nicely and help break up the wall boundaries,
so I'm keeping them for now.

9 days agoHave Fedhas protect plants from clouds (sdynet, 12195)
gammafunk [Sun, 16 Feb 2020 03:47:02 +0000]
Have Fedhas protect plants from clouds (sdynet, 12195)

Fedhas now protects plants from a wide variety of player effects,
including explosions and LOS damage spells, but clouds aren't currently
included. Since we now track god conducts for cloud placement, it's best
to have the prevent placement of harmful clouds made by Fedhas'
worshipers at the locations of plant allies. This prevents e.g. scrolls
of immolation having Fedhas ally protection from the explosions but not
ally protection from the flame cloud placement.

9 days agoRemove an unused function argument
gammafunk [Sat, 15 Feb 2020 22:02:02 +0000]
Remove an unused function argument

9 days agoDisable lua load(), loadstring() bytcode loading
Aidan Holm [Sun, 16 Feb 2020 05:34:42 +0000]
Disable lua load(), loadstring() bytcode loading

10 days agoClean up icy walls upon level load
gammafunk [Sat, 15 Feb 2020 02:48:04 +0000]
Clean up icy walls upon level load

Frozen Ramparts creates "icy walls" with the FPROP_ICY property. It
expires the props when the Ramparts duration expires, but early versions
of the spell didn't do this properly. In this commit we unset the prop
for all squares with the property that don't that aren't properly in LOS
of the last position of any active cast of Frozen Ramparts. This will
fix walls changed by buggy versions of the spell upon level load. This
cleanup is tag-majored, since it shouldn't be necessary for versions
where the spell logic is fixed.

Additionally, the icy wall presence level state is now updated properly
upon level load when any valid icy walls are found for a current cast of
Frozen Ramparts. Previously this wasn't done, so casts active at time of
save didn't have working icy walls when the save was reloaded.

10 days agoProperly handle recasting of Frozen Ramparts (shummie)
gammafunk [Fri, 14 Feb 2020 22:05:38 +0000]
Properly handle recasting of Frozen Ramparts (shummie)

This spell should only be castable when the Ramparts duration isn't
already active, but I never added this restriction. By recasting the
spell before the duration expires, we allow too many icy walls at once.
This also creates a bug allowing semi-permanent icy walls. The previous
set of walls never had the icy wall property cleared, so when later
casting the spell, the old walls would become active if in LOS of the

With this commit, Frozen Ramparts can't be cast until its duration
expires. A subsequent commit will fix walls with stale property flags by
cleaning those up upon level load.

10 days agoImprove UI for attempting to recast Dragon's Call
gammafunk [Fri, 14 Feb 2020 20:34:29 +0000]
Improve UI for attempting to recast Dragon's Call

Move the check to deny casting the spell when either the Dragoncall or
-Dragoncall durations are active to spell_uselessness_reason(). Now
Dragon's Call is properly marked as useless while these durations are

11 days agoTurn the boots of the Assassin into a hat
Kate [Sat, 8 Feb 2020 15:35:26 +0000]
Turn the boots of the Assassin into a hat

The flavour of detecting monsters and spotting vulnerabilities didn't really
fit on a pair of boots, and is much more appropriate for a piece of headgear.

11 days agoRemove Bloodbane and merge its properties into Leech
Kate [Sat, 8 Feb 2020 00:57:02 +0000]
Remove Bloodbane and merge its properties into Leech

Leech loses its tacked-on AC-3 and EV-3 and gains Bloodbane's main
distinguishing feature of */+Rage, with Leech's reliable vampiric effect to
help compensate for *Rage as a downside.

11 days agoFix the skin of Zhor's inscription
Kate [Fri, 14 Feb 2020 12:42:32 +0000]
Fix the skin of Zhor's inscription

Since it was claiming to cast the wrong spell.

11 days agoFix unrand uniqueness for acquirement (AliasTheSpectator)
gammafunk [Fri, 14 Feb 2020 07:33:54 +0000]
Fix unrand uniqueness for acquirement (AliasTheSpectator)

Scrolls of acquirement copy item definitions for the generated items and
remove the created items, only re-making the selected item when the
player makes a choice. For unrands, the item def has to have its
uniqueness status cleared, but this wasn't properly reinstated if the
unrand ended up being chosen by the player. Hence it was possible to
generate a specific unrand again after acquiring it, either through
another acquirement or as random loot.

With this commit, we properly set the unrand's uniqueness status when
making the final item in acquirement, making it actually unique.

11 days agoFix acquirement for rare cases (amalloy)
gammafunk [Thu, 13 Feb 2020 04:21:52 +0000]
Fix acquirement for rare cases (amalloy)

If you worship Trog and have all 27 skills, the current acquirement code
will always generate a menu with one less item than usual when the book
class is randomly chosen. This is because Trog hates all spellbooks and
all manuals are useless, so no valid acquirement book item can be made.
This is an obscure case, but in general we'd like the acquirement code
to be more robust for handling classes where we can't generate an item
for whatever reason.

This commit refactors the code to generate each item as it iterates over
all possible classes in a random order, only adding to the final set if
an item could be generated for a given class. This will stop when we've
reached the desired number of items or when we've exhausted all valid
item classes. Hence the acquirement choices will be as close to the
desired number of items as we can make it.

11 days agoSplit tremorstone explosions in half (Wise Wolf)
Nicholas Feinberg [Fri, 14 Feb 2020 05:01:39 +0000]
Split tremorstone explosions in half (Wise Wolf)

This makes them effectively 6x resisted by AC, which means they're
*actually* relatively safe to use as a moderately armoured

12 days agoDisable lua bytecode loading
Aidan Holm [Thu, 13 Feb 2020 13:31:55 +0000]
Disable lua bytecode loading

13 days agoValue Tremorstones lower
Nicholas Feinberg [Wed, 12 Feb 2020 15:35:53 +0000]
Value Tremorstones lower

Since they're single-use now, make them worth a bit less in shops
and acquire them in pairs.

13 days agoRe-alphabetize items.txt
Nicholas Feinberg [Wed, 12 Feb 2020 03:40:18 +0000]
Re-alphabetize items.txt

13 days agoNew single-use item: Tremorstone pull/1282 shattersphere 1282/head
Nicholas Feinberg [Tue, 11 Feb 2020 05:41:56 +0000]
New single-use item: Tremorstone

Tremorstones are single-use evocables that cause a radius 2 explosion at
range 3. Their explosion is skewed by 1 tile from the target, so they always
have at least a 1/3 chance of hitting the player. However, since they do
6d12 BEAM_FRAG damage, players with 20-25 AC will usually take little to
no damage. (BEAM_FRAG checks 3x AC.) As such, this is intended to be a fun
toy for well-armoured characters and a desperation option for others.

A design space that I've wanted to explore for many years is the
'3x AC' damage type (ala LRD and the late, lamented Orb of Fragmentation).
I initially tried to make it into a spell, but it's very much the opposite
of the modern Earth school philosophy and in general makes more sense as a
tool for armoured, less-spell-focused characters.

This will always warn about self-targeting, which is a bit clunky. Since
it's not especially common and it's nice to warn players who might not have
read the description before they blow themselves up, though, that seems OK.

13 days agoSome changelog trimming (PleasingFungus)
gammafunk [Wed, 12 Feb 2020 00:37:21 +0000]
Some changelog trimming (PleasingFungus)

Remove a couple things that are basically minor bugfixes. Don't mention
the two float vaults, since that's better HYPED in the Trunk Updates.
Despite the request of our beetle overlords, I'm keeping the cloud god
conduct changes entry, since that impacts some fairly commonly scenarios
like use scrolls of immolation.

13 days agoAdjust some unrand descriptions
Kate [Tue, 11 Feb 2020 23:15:00 +0000]
Adjust some unrand descriptions

13 days agoRemove incorrect Xom pronouns
Kate [Tue, 11 Feb 2020 23:14:02 +0000]
Remove incorrect Xom pronouns

13 days agoImprove handling of skills for manual acquirement
Kate [Mon, 10 Feb 2020 21:37:50 +0000]
Improve handling of skills for manual acquirement

De-duplicate a list - WJC wasn't correctly handled in the check for skill

2 weeks agoFix some changelog typos
Kate [Tue, 11 Feb 2020 15:54:59 +0000]
Fix some changelog typos

2 weeks agoFix an outdated file reference in a comment
theJollySin [Wed, 8 Jan 2020 01:07:38 +0000]
Fix an outdated file reference in a comment

[ Committer's Note: Small wording and colour tweaks, elaborated on
  commit messages and adjusted tense. Closes #1254 ]

2 weeks agoDocument an arrival vault guideline (ebering)
theJollySin [Fri, 10 Jan 2020 01:19:21 +0000]
Document an arrival vault guideline (ebering)

2 weeks agoNew arrival vaults
theJollySin [Sun, 5 Jan 2020 13:33:29 +0000]
New arrival vaults

- dark_side_of_the_moon a large pillar with a dark motif
- battle_scene a bloody room with many corpses
- enchanted_forest a circle of stone arches in a wood full of magic
- ceremonial_halls a marble tomb
- henge a less enchanted ring of arches in a wood
- glass_houses for those who do not throw stones

2 weeks agoUpdate the changelog through 0.25-a0-491-gd071885120
gammafunk [Tue, 11 Feb 2020 04:16:45 +0000]
Update the changelog through 0.25-a0-491-gd071885120

[skip ci]

2 weeks agoPavise -> tower shield (various)
Nicholas Feinberg [Tue, 11 Feb 2020 03:10:47 +0000]
Pavise -> tower shield (various)

I wildly underestimated how obscure a term 'pavise' was. Let's be a
bit more clear.

2 weeks agoAdd Github Actions CI
Alex Jurkiewicz [Mon, 13 Jan 2020 11:40:50 +0000]
Add Github Actions CI

I initially implemented this for code coverage support, which is
included. But using GA for all CI tasks has several advantages over

* Native support for building on macOS.
* Simpler configuration language.
* Easier composability of steps from third parties. The steps can be
  published as Docker images or Node modules and are fully versioned.
* Better integration with GitHub (one status check per build job, rather
  than one for the whole CI system).

Requires `CODECOV_TOKEN` set up as a GitHub repo secret (from

2 weeks agoDescribe item you plan to acquire
Alan Malloy [Mon, 10 Feb 2020 18:59:51 +0000]
Describe item you plan to acquire

2 weeks agoFix unrand pavise player tiles
Nicholas Feinberg [Mon, 10 Feb 2020 01:58:07 +0000]
Fix unrand pavise player tiles

And remove support for caps.

2 weeks agoFix some unrand shield player tiles
Nicholas Feinberg [Mon, 10 Feb 2020 01:51:38 +0000]
Fix some unrand shield player tiles

2 weeks agoRename shield -> kite shield
Nicholas Feinberg [Sun, 9 Feb 2020 23:43:23 +0000]
Rename shield -> kite shield

As explained in ca9fc5ac96d, we'd like to be able to refer to an
item without confusing it with a category. A kite shield was a
large, teardrop-shaped shield. It would be more accurate to use
the term 'heater shield' for the shields in game, but that name
is even more anachronistic and silly.

Other alternatives considered were:
- targe (too close to a buckler in both size and meaning)
- hoplon (a shield used by a hoplite - too obscure)
- aspis (the 'proper' name for a hoplon, but come on)
- dhal (again, too close to a buckler)
- umbumbuluzo (cool but way too long)
- ihawu (cool but it's three syllables)

I think the closest alternative contender was 'targe', fwiw.

The shield of resistance and of the gong were intentionally not
renamed, which I don't believe should cause confusion, but we can
rename them later if it does.

2 weeks agoRename large shield -> pavise
Nicholas Feinberg [Sun, 9 Feb 2020 20:00:58 +0000]
Rename large shield -> pavise

Having the name of a category (shields) also be the name of an item in
that category (shields, large shields) has always been annoying and
confusing. ("Oh, I'm using a long sword and a shield." "What kind of shield?")
Use a more specific word instead. (A pavise is a roughly body-sized shield.
Often they were placed in frames and used in a stationary fashion, but the same
is true of triple crossbows. A little hyperbole is good for adventurers.)

This is part 1 of a 2-part change. The following commit will rename shields.

2 weeks agoRefactor some vault loot statements
gammafunk [Mon, 10 Feb 2020 00:00:17 +0000]
Refactor some vault loot statements

The commit a45ed2c2 fixed some previous errors in these two vaults, but
we have item lists in dungeon.lua specifically to help with this kind of
loot, so let's use those instead. The original vault for
biasface_vaults_ghost_orc_armoury for non-Vaults branches already does

2 weeks agoFix Dith's Shadow Mimic for Teleport Other (joemaro)
gammafunk [Sun, 9 Feb 2020 23:16:08 +0000]
Fix Dith's Shadow Mimic for Teleport Other (joemaro)

Dithmenos currently shadow mimics Teleport Other unconditionally, like
it does for other hexes. This creates a problem where a player trying to
teleport (or remove teleport from) a monster has their work potentially
undone by the shadow mimic if their initial cast was successful.

This commit has Dith not shadow mimic if Teleport Other hits its
intended target and successfully changes its teleportation state on the
first cast. If the Teleport Other was unsuccessful, Dith still has the
usual chance to shadow mimic the spell. Closes #1273.

2 weeks agoImprove armour AC change descriptions
Kate [Sun, 9 Feb 2020 20:42:21 +0000]
Improve armour AC change descriptions

Don't display a pointless line for shields (although it might be good to extend
this functionality to handle changes in EV and SH).

2 weeks agoFix Warlock's Mirror not reflecting piercing ranged weapons (#12142)
Kate [Sun, 9 Feb 2020 19:49:36 +0000]
Fix Warlock's Mirror not reflecting piercing ranged weapons (#12142)

2 weeks agoFix some vault item definitions (#12191)
Kate [Sun, 9 Feb 2020 19:37:44 +0000]
Fix some vault item definitions (#12191)

2 weeks agoSmall Cigotuvi's tweaks and fixes
Nicholas Feinberg [Sat, 8 Feb 2020 16:11:23 +0000]
Small Cigotuvi's tweaks and fixes

- Use the actual base AC property as defined in art-data.txt rather
  than hardcoding a second constant.
- Don't clobber the AC on load.
- *Drain rather than *Curse (Jimmahdean) - generally a similar effect,
  but one that we do less often and that might provide a more
  consistently interesting tradeoff re: taking the armour off.
- Make armour decay faster at high corpse counts to make megakills a bit
  less persistently silly, but upgrade the armour-per-corpse scaling 50%.

2 weeks agoHave Vehumet support Frozen Ramparts
gammafunk [Sat, 8 Feb 2020 05:50:55 +0000]
Have Vehumet support Frozen Ramparts

This is not a Conjurations spell, but like Freeze it directly damages
monsters and should be supported by the god.

2 weeks agoGive Cigotuvi's Embrace *Curse (hellmonk)
gammafunk [Fri, 7 Feb 2020 23:58:17 +0000]
Give Cigotuvi's Embrace *Curse (hellmonk)

We don't want to give the player a reason to frequently swap off armor
in order to animate remains or eat corpses. Adding *Curse will still let
this be done to some degree, but now that will be limited by
availability of scrolls of remove curse.

2 weeks agoTweak god conducts for Cigotuvi's Embrace (PleasingFungus)
gammafunk [Fri, 7 Feb 2020 23:09:42 +0000]
Tweak god conducts for Cigotuvi's Embrace (PleasingFungus)

Originally the unrand tracked conducts based on the corpse (desecrating
the remains of holy/souled beings) with the "did evil" conduct applying
only if a corpse conduct didn't apply. This is an evil item and that
conduct should always apply. This commit applies the conduct when any
corpse harvesting happens, applying any specific corpse conducts in
addition to "did evil".

2 weeks agoCigotuvi's Embrace, unrand body armour
Nicholas Feinberg [Mon, 3 Feb 2020 04:39:14 +0000]
Cigotuvi's Embrace, unrand body armour

Cigotuvi's Embrace is a unique body armour (currently based on ring
mail) that automatically sucks up corpses within LOS and turns them
into temporary AC. This is primarily intended to provide a fun
press-your-luck mechanic - how long can you keep fighting and keep
your corpse armour on before you have to rest? It also comes as
something of a 'hunger' conduct (since you can't eat those corpses)
and effectively turns off most forms of necromancy, which can be a
plus or a minus, depending on whether you're a necromancer or your
enemies are.

At present, the Embrace starts as +4 rN+ rRot armour (the rRot is for
flavour). It goes to +8 with one corpse harvested, which takes about
100 turns to fully slough off. Four corpses give you about +12 and
take 200 turns to fully go away, sixteen corpses give about +20 and
take 400 turns to fully rot away, etc. All numbers are very much open
to discussion.

The original Embrace was removed because it couldn't compete with
necromancy as a spell; as an unrand it might be more feasible to
balance and make fun.

Comitter's Note: Merged with a couple tweaks in the subsequent two
commits. Closes #1272.

2 weeks agoChange the messaging for abandoned shops
Alex Jurkiewicz [Thu, 6 Feb 2020 00:48:59 +0000]
Change the messaging for abandoned shops

So there's no ambiguity about "will they open again"?

Inspired by watching a player on CPO.

2 weeks agoFix monster AI for damaging walls (howmanybefore)
gammafunk [Thu, 6 Feb 2020 02:28:00 +0000]
Fix monster AI for damaging walls (howmanybefore)

The monster movement code makes calculations to deciding whether to move
near damaging slimy or icicle covered walls. If the count of adjacent
damaging walls at a potential destination square is higher than that of
their current square, they'd not move unless their HP is high.  However
monsters only ever take damage from one wall at a time, regardless of
how many are adjacent. Hence this calculation can lead them to
incorrectly refuse to move when both source and target had damaging
walls, but the number of such walls at the target was higher. In these
situations, monsters with low HP would stand in place, taking damage.
This bug also applies to slimy walls, but those are rare outside of
Slime Pits. In that branch, all monster spawns have immunity to the
slimy wall effect, so the bug was hard to see in practice.

This commit fixes the AI by only considering whether the number of
damaging walls is above zero at source and target for these

2 weeks agoEnd Frozen Ramparts upon level change (Lightli)
gammafunk [Thu, 6 Feb 2020 00:26:31 +0000]
End Frozen Ramparts upon level change (Lightli)

The implementation for level cleanup when the Ramparts status expires
wrongly assumed that the player is still on the current level. They
could, of course, leave the level and have the status expire on the new
level, returning to the old level later. This meant that walls could
become permanently be flagged as icicle covered, even though they would
only operate as such if the player was in LOS and had the spell active.

This commit has the Ramparts status expire and trigger the usual feature
property cleanup whenever a level change happens.

2 weeks agoWall overlays for Frozen Ramparts (CanOfWorms)
gammafunk [Wed, 5 Feb 2020 20:06:26 +0000]
Wall overlays for Frozen Ramparts (CanOfWorms)

A set of wall overlays by CanOfWorms for the icicle covered walls
created by the Frozen Ramparts spell. Add code support for making the
wall overlay as well as choosing an overlay variant based on the wall's

These look relatively subtle compared to the extremely cyan 'programmer
art' floor tiles and floor overlays I made, which were simply color
changes of the ones from slimy walls. Hence I'll probably need to
modify said tiles to be more inline with these new wall overlays.

2 weeks agoRemove an unused variable (geekosaur)
gammafunk [Wed, 5 Feb 2020 18:03:12 +0000]
Remove an unused variable (geekosaur)

2 weeks agoTweak Frozen Ramparts spell description
gammafunk [Wed, 5 Feb 2020 07:13:16 +0000]
Tweak Frozen Ramparts spell description

Don't imply that it only works on rock walls and clean up some of the

2 weeks agoFrozen Ramparts, a level 3 Ice spell
gammafunk [Wed, 5 Feb 2020 05:21:27 +0000]
Frozen Ramparts, a level 3 Ice spell

This spell is available to Ice Elementalists in their starting Book of
Frost. Frozen Ramparts temporarily changes all non-permarock walls in
radius 3 of the player into icicle covered walls that damage and debuff
monsters that walk adjacent to them. The damage per 10 aut is a bit less
than Freeze, although this spell has a higher spellpower cap of 50. The
debuff is the Frozen status that slows monster movement (but not other

The player and allies are not affected by these walls and can move
safely adjacent to them. Player LOS of the monster is required for the
walls to have an effect, and walls revert to normal when the Ramparts
status expires. Spellpower increases the duration of the walls as well
as their damage. The damage uses BEAM_ICE, hence is only 40% resistible,
yet it does apply AC, unlike Freeze. The wall effect is themed as a
release of a blast of icicles that encases the victim in ice.

2 weeks agoIcicle covered walls
gammafunk [Wed, 5 Feb 2020 05:04:16 +0000]
Icicle covered walls

This wall feature property will be used in an upcoming spell which
temporarily changes surrounding walls to damage and debuff monsters that
wonder nearby. The effect works similarly to the acid damage slimy rock
walls used in the Slime Pits.

This commit adds support for the feature property itself, the level
state tracking, the description of the property seen in-game, as well as
Tiles and console rendering of the walls. Monster AI is updated to
consider the walls in the same way they currently do for slimy walls,
although the actual damage effect will be added in a subsequent commit
that implements the spell.

Give description support for both highlight and full description (i.e.
x-v and X-v), with the full description giving details about the effect
the walls have on monsters. Add "icy" floor and overlay tiles that are
rendered in the same way as slimy walls. For console, we animate the
icicle walls with ETC_ICE and recolour adjacent floors to light cyan.

As a technical note, use of a property instead of a dedicated feature
type for the icicle covered walls works better here. We'd like the spell
to affect all kinds of non-permarock walls and wouldn't want to make
unique "icicle covered" features for each wall material.

2 weeks agoMake checks for slimy walls more accurate
gammafunk [Wed, 5 Feb 2020 04:39:51 +0000]
Make checks for slimy walls more accurate

Some Tiles code tries to infer whether to try for slimy wall overlays
based on the player's branch location. Whether a slimy wall exists is
more accurately stored in the level state, which is updated every time
stairs are taken. Use this data instead.