2 months agoDescribe curse exploration (mdonais)
Edgar A. Bering IV [Fri, 26 Feb 2021 20:01:16 +0000]
Describe curse exploration (mdonais)

2 months agoFix unused variable warning
Nicholas Feinberg [Fri, 26 Feb 2021 16:24:22 +0000]
Fix unused variable warning

2 months agoCanonical skill abbreviations for display ashenzaru pull/1736 1736/head
Edgar A. Bering IV [Fri, 26 Feb 2021 14:41:39 +0000]
Canonical skill abbreviations for display

Currently used for Ru and Ashenzari ability menu display, and Ash curse

2 months agoCreate a new vision_iterator (PleasingFungus)
Edgar A. Bering IV [Fri, 26 Feb 2021 11:00:11 +0000]
Create a new vision_iterator (PleasingFungus)

A handful of places in the code performed a radius_iterator iteration
over LOS_NONE and then immediately filtered for you.see_cell to respect
scrying and wizard xray vision effects. This iterator encapsulates the
idiom of iterating over an actor's vision (permitting actor::see_cell to
override the considerations of LOS checks).

2 months agoReforge the Chains VI: Randartify cursed items
Edgar A. Bering IV [Fri, 26 Feb 2021 08:59:36 +0000]
Reforge the Chains VI: Randartify cursed items

To make the curses more permanent, cursed items are made into randarts
if possible, locking in their brand and enchantment. No randart props
are granted (other than the skill boosts!). Randart names are generated
from a special Ashenzari keyword in the database for a thematic name.

Thanks to CanOfWorms,hatsuma, Lici_the_Crawler, nicolae, and
PleasingFungus for curse name suggestions.

2 months agoCode cleanup of old curse code
Edgar A. Bering IV [Thu, 25 Feb 2021 19:23:37 +0000]
Code cleanup of old curse code

2 months agoSave compatibility for new Ashenzari
Edgar A. Bering IV [Thu, 25 Feb 2021 19:12:18 +0000]
Save compatibility for new Ashenzari

2 months agoReforge the Chains V: Bind skill knowledge to curses
Edgar A. Bering IV [Mon, 22 Feb 2021 06:22:15 +0000]
Reforge the Chains V: Bind skill knowledge to curses

This commit reimagines Ashenzari curses to offer specific knowledge (in
exchange for binding the slot). Currently Ash picks two skills and the
player can either take the curse and the knowledge, or ignore it. Ash
will eventually offer a new curse.

This choice can hit the player in a variety of ways: are the skills
offered too good to pass up, thus ending up on an otherwise not great
item for a long time? Are the skills not ones the player anticipates
using but they're desparate for piety so they'll put a not great curse
on a great item? Both are good, and occasionally the player will delight
in getting the opportunity to put a good curse on a good item they want
to keep!

With the variety of curses, it remains possible for an Ash character to
be a jack of all trades, but also to become highly focused in something
that might otherwise be hard for their species! Exciting possibilities
abound, that will need some further number tuning.

2 months agoRemove an XXX; handles the issue in question
Edgar A. Bering IV [Sat, 20 Feb 2021 15:31:57 +0000]
Remove an XXX; handles the issue in question

2 months agoReforge the Chains IV: Shatter the Chains
Edgar A. Bering IV [Mon, 15 Feb 2021 19:01:42 +0000]
Reforge the Chains IV: Shatter the Chains

To go with the new curse scheme, uncursing becomes available to any
cursed Ash worshipper.

Uncursing removes and destroys the item (triggering all on remove
effects, no secret disto unwield tech). It also forgoes the currently
offered curse and re-sets the curse timer (to make sure uncursing is

2 months agoReforge the Chains III: Curse piety
Edgar A. Bering IV [Sat, 13 Feb 2021 22:06:52 +0000]
Reforge the Chains III: Curse piety

Tying Ashenzari's curses to scrolls was always a bit awkward. With the
removal of other curses and the rc scroll this mechanic is untenable.
Since Ash's introduction Crawl gained another god: Ru, who periodically
offers something which grants piety through an alternate mechanism.

As part of an overhaul of Ashenzari, this commit changes Ash piety to
scale directly with bondage level: it takes two curses for a Human to
reach 1*, and they arrive at 6* when all slots are bound. The exact
formula scales with slots, so Felids have a much easier time reaching
6*; the formula is:

    piety = 2 + ( num_cursed * 160 ) / num_slots

This applies to current slots, so if a slot is lost due to mutations the
player isn't penalized.

Coupled with this: Ashenzari no longer applies curses in exchange for
items. Instead, players are occasionally invited to curse an item.
Accepting a curse re-starts the curse timer; ignoring it simly lets it
sit there.

2 months agoReforge the Chains II: Adjust Ash passives
Edgar A. Bering IV [Wed, 10 Feb 2021 21:07:08 +0000]
Reforge the Chains II: Adjust Ash passives

Grant Ashenzari's passives earlier, with skill boost arriving at 1*, see
invisible at 2*, and clarity at 3*. Starting at 4*, also grant
perma-scrying with a radius of 2, the radius grows with piety stars
until reaching radius 4 at 6*.

2 months agoReforge the Chains I: Remove old Ash actives
Edgar A. Bering IV [Wed, 10 Feb 2021 18:30:20 +0000]
Reforge the Chains I: Remove old Ash actives

Remove Scrying and Skill Transfer, the new Ash will only have passive

2 months agoTweak spell descriptions (ShaperMC)
Nicholas Feinberg [Fri, 26 Feb 2021 06:23:11 +0000]
Tweak spell descriptions (ShaperMC)

Increase clarity, decrease poetry.

2 months agoSimplify
Nicholas Feinberg [Fri, 26 Feb 2021 06:09:54 +0000]

Make prefer_ranged do something other than 'prefer shooting to attacking
with reach weapons' if it's not on a monster with the 'archer' flag. At
present, it always *is* on monsters with the archer flag, so this commit
does nothing, but it seems like nice future proofing.

2 months agoNew AK splash screen from E.M. Fields
Nicholas Feinberg [Fri, 26 Feb 2021 01:46:40 +0000]
New AK splash screen from E.M. Fields

The artist ( has agreed to
license the art under CC0. Many thanks to him for the fantastic piece!
The original can be seen here:

2 months agoFix equipment identification
Implojin [Thu, 25 Feb 2021 21:48:59 +0000]
Fix equipment identification

bb19ded didn't properly identify items that were already in the player's
inventory. This commit restores equip identify behavior, to fix this
and handle any unforeseen cases of items being placed directly into the
player's inventory.

Closes #1777.

2 months agoFix @player_only@ messages (#9201)
Nicholas Feinberg [Thu, 25 Feb 2021 17:23:53 +0000]
Fix @player_only@ messages (#9201)

When printing monster spell messages, we never checked to see if we
they were valid. As a result, unseen ghost moths casting Draining Gaze
on other monsters would print the literal string "You feel something
watching you. @player_only@".

This bug was introduced in e143a0ad5d2 (October 2014) and first reported
by johlstei a month later. I managed to reproduce it in March 2015 but was
unable to figure out the root cause, because the monster speech code is
absolutely insane. But this is it!

2 months agoFix ID notes (dinky)
Nicholas Feinberg [Thu, 25 Feb 2021 16:34:42 +0000]
Fix ID notes (dinky)

Broken in bb19ded6d30e696c234aeda7060a468f3fc7a340 .

2 months agoFix more cursed item descs (Nomi)
Nicholas Feinberg [Thu, 25 Feb 2021 02:28:27 +0000]
Fix more cursed item descs (Nomi)

See 52645efa069834ac9ca1066c78a845ef7baba59d .

2 months agoTweak animated armour scaling (gammafunk)
Nicholas Feinberg [Wed, 24 Feb 2021 05:56:14 +0000]
Tweak animated armour scaling (gammafunk)

To avoid confusion between the summoned armour's plus and the worn
armour it comes from, buff HD with power instead.

2 months agoTweak permasummon desc
Nicholas Feinberg [Wed, 24 Feb 2021 05:55:35 +0000]
Tweak permasummon desc

Replace an awkward "and" about stairs. It keeps happening.

2 months agoTurn wear-id into floor-id
Implojin [Mon, 22 Feb 2021 14:53:43 +0000]
Turn wear-id into floor-id

Following much the same reasoning as in f6d4cf81.

Especially now that curses are gone (RIP), there's very little incentive not
to wear-ID items. (This was mostly true before too, but it's extra obvious
now.) Instead, just identify equippable items when you step on them. This does
remove certain categories of surprise from randarts (it's *Contam!), but
players will live.

No comp for this in terms of ?id drops, since that item was better spent on
consumables for the period of the game in which ?id is in finite supply.
(So no difference.)

Closes #1770.

2 months agoFix monster quiver desc (vt)
Nicholas Feinberg [Wed, 24 Feb 2021 05:35:54 +0000]
Fix monster quiver desc (vt)

2 months agoSimplify ghostly spectral weapon code pull/1769 very_spectral_weapon 1769/head
Nicholas Feinberg [Tue, 23 Feb 2021 01:55:02 +0000]
Simplify ghostly spectral weapon code

It was only ever being cast at one power. ( doesn't count,
since that code will never be hit.)

2 months agoSimplify spectral weapons
Nicholas Feinberg [Mon, 22 Feb 2021 00:54:33 +0000]
Simplify spectral weapons

Simplify the effect. The weapon pops out when you attack, immediately
follows up, and then sticks around until the end of your next turn.
If you hit again, everything repeats. Otherwise, it vanishes.

The design here is of an ego with great damage but that has some
positioning constraints, and that still has the potential drawback of
damage sharing. (If the positioning constraints turn out to be enough to
make it interesting, we can junk the damage sharing.)

I've just removed monster spectral ego for now, but it'd be nice to have
it back eventually.

2 months agoMake spines trigger on manifold assault attacks
Nicholas Feinberg [Tue, 23 Feb 2021 01:06:59 +0000]
Make spines trigger on manifold assault attacks

This is 100% impossible to trigger right now, but it's good to future-proof.

2 months agoFix another changelog typo
advil [Mon, 22 Feb 2021 22:53:20 +0000]
Fix another changelog typo

Turns out there were two!

2 months agoFix a typo in the changelog
Neil Moore [Mon, 22 Feb 2021 21:27:09 +0000]
Fix a typo in the changelog

skip ci

2 months agoManual updates (nicolae)
Nicholas Feinberg [Mon, 22 Feb 2021 20:04:43 +0000]
Manual updates (nicolae)

2 months agoMake zigs grant zot immunity (hellmonk, etc)
Nicholas Feinberg [Mon, 22 Feb 2021 00:16:45 +0000]
Make zigs grant zot immunity (hellmonk, etc)

If you can clear an entire zig, you're well past the point in the
game where the zot clock (as it currently exists) is relevant. It's
fairly hard to imagine a version of the zot clock that co-exists with
ziggurats, really.

2 months agoFix LRD not hitting monsters standing on open doors (#12515)
Kate [Sun, 21 Feb 2021 23:01:43 +0000]
Fix LRD not hitting monsters standing on open doors (#12515)

Caused by reversed logic in e2d8f9cc.

2 months agoFix some skill training display interactions (#12514)
Kate [Sun, 21 Feb 2021 19:51:10 +0000]
Fix some skill training display interactions (#12514)

Make evocations show up as a trainable skill by default with the staff of
Wucad Mu carried, make necromancy visible with a pain weapon, and fix
evocations being visible with spectral weapons and the salamander hide

2 months agoPrevent unwielding the obsidian axe while mesmerised
Kate [Sun, 21 Feb 2021 16:12:14 +0000]
Prevent unwielding the obsidian axe while mesmerised

To make it more of a real commitment (while still keeping the *Drain penalty
to prevent swapping it freely between combats).

2 months agoFix the build for ancient perl versions?
advil [Sun, 21 Feb 2021 16:39:23 +0000]
Fix the build for ancient perl versions?

This is breaking CAO (and also PF).

2 months agoRevert "Add one more draconian skill title (hellmonk)"
Nicholas Feinberg [Sun, 21 Feb 2021 04:10:21 +0000]
Revert "Add one more draconian skill title (hellmonk)"

This reverts commit d82557afd8e216d667967f927f2beb04dc6b3180.

Duplicates a WJC title.

2 months agoAdd one more draconian skill title (hellmonk)
Nicholas Feinberg [Sun, 21 Feb 2021 03:56:03 +0000]
Add one more draconian skill title (hellmonk)

Other suggestions I haven't added:
- Pearl Dragon (TSO)
- Shadow Dragon (Stealth)
- Bone Dragon (Necromancy)

2 months agoRe-rename KILLED_BY_EXPLOSION
Nicholas Feinberg [Sun, 21 Feb 2021 03:48:14 +0000]

It's not just any explosion, it's a death explosion specifically. Fireballs
need not apply.

Closes #1765.

2 months agoFix inner flame explosion death messages
Hatsuma [Sat, 20 Feb 2021 20:49:14 +0000]
Fix inner flame explosion death messages

(Committer's note: Turning death explosions into a fineff broke the
messaging for inner flame explosions. This commit should hopefully fix them.)

Hatsuma [Sat, 20 Feb 2021 16:22:14 +0000]

2 months agoMake the "1 corona" status message grammatically correct, and other bugfixes.
Aliscans [Fri, 19 Feb 2021 21:04:45 +0000]
Make the "1 corona" status message grammatically correct, and other bugfixes.

1. Fix the handling of singulars and plurals in _condition_string(). It had been saying "(1 reflect damage)", where it should have been "reflects".

2. Fix a typo in a flag name in monster_info_flag_names.

3. Fix a copy/paste error in mons_conditions_string() which prevented missile-wielders from being reported correctly in the monster list.

2 months agoSilence a GCC type warning
Edgar A. Bering IV [Sat, 20 Feb 2021 10:35:42 +0000]
Silence a GCC type warning

Closes #1758

2 months agoFix monster airstrike messaging (shummie)
Kate [Sat, 20 Feb 2021 01:09:42 +0000]
Fix monster airstrike messaging (shummie)

Closes #1762.

2 months agoFix Ozo's Armour allowing cancellation of dispersal traps
Kate [Fri, 19 Feb 2021 22:04:00 +0000]
Fix Ozo's Armour allowing cancellation of dispersal traps

Closes #1743.

2 months agoRename and staticify a function
Kate [Fri, 19 Feb 2021 22:03:37 +0000]
Rename and staticify a function

2 months agoRemove Airstrike's bonus damage against fliers
Kate [Sun, 7 Feb 2021 22:19:30 +0000]
Remove Airstrike's bonus damage against fliers

Against monsters, it was just another type of elemental vulnerability, but
against players, it was almost never tactically interesting and heavily
penalised forgetting to toggle permanent sources of flight off. Rather than
make it behave inconsistently against monsters, remove the bonus entirely -
the increased damage against targets in open space is a more interesting
bonus to focus the spell on (although the way it works should probably be

2 months agofix typo in crawl_manual.rst
Jeffery Stager [Fri, 19 Feb 2021 21:59:56 +0000]
fix typo in crawl_manual.rst

2 months agoAdd a scale to one missed describe call
advil [Fri, 19 Feb 2021 21:59:43 +0000]
Add a scale to one missed describe call

missed in 236002575ef

2 months agoRemove a debug call
advil [Fri, 19 Feb 2021 21:44:35 +0000]
Remove a debug call

2 months agoDouble-size main tiles in (webtiles) describe popups
advil [Fri, 19 Feb 2021 21:41:47 +0000]
Double-size main tiles in (webtiles) describe popups

This is for purely aesthetic reasons, but we'll see if others agree. It
gives a nice pixelly look on default settings (though some tiles look
better than others). If the ultimate judgment on this is positive, it
can be ported to local tiles also.

2 months agoAdjust wall jump interaction with mesmerise (#12205)
Kate [Fri, 19 Feb 2021 18:25:43 +0000]
Adjust wall jump interaction with mesmerise (#12205)

Make mesmerise restrict wall jumps based on the landing location instead of
the targeted wall, so that jumping away from mesmerising enemies is
prevented and jumping towards them is allowed, not the other way around.

2 months agoBuff Boris on the orb run
Edgar A. Bering IV [Wed, 17 Feb 2021 20:37:41 +0000]
Buff Boris on the orb run

Boris has been spawning on the orb run for about a year now and hasn't
bagged a player. That simply will not do, so in this commit we give our
boy a hand. If Boris sees the player with the orb he gains permanent
haste and permanent brilliance aura effect. The former will help him
chase players and sling spells at them; the latter will give him Ancient
Lich spellcasting HD for greater lethality.

2 months agoFurther tweak Lich spell sets
Edgar A. Bering IV [Wed, 17 Feb 2021 16:20:57 +0000]
Further tweak Lich spell sets

By popular demand for more cold threats after the spell overhaul, as
well as for liches with OOD and Petrify, this commit splits the
Lich/Ancient Lich spell sets.

Liches get Bolt of Cold, OOD, Slow, Haste, and Invis.

Ancient Liches keep their new spell set but trade Slow for Petrify.

2 months agoClean up trove syntax
gammafunk [Wed, 17 Feb 2021 15:10:59 +0000]
Clean up trove syntax

Reorganize statements for consistency with the rest of DES, group ITEM
statements, and reindent the veto clause. Closes #1755.

2 months agoRework evocations-themed trove
Goratrix [Wed, 17 Feb 2021 14:22:42 +0000]
Rework evocations-themed trove

Since some of the misc evocables have been removed and the remaining six
were changed to xp-rechargable, this trove has been often disappointing,
placing on average 10 of misc evocables out of the total 14 items, with
multiple useless copies of each.

This changes the trove to guarantee exactly one of each of the 6 misc
evocables, plus 8 wands/staves, weighted as average 6 wands and
2 staves.

2 months agoFix an ability description typo
advil [Wed, 17 Feb 2021 14:00:17 +0000]
Fix an ability description typo

2 months agoDon't assault firewood
Nikolai Lavsky [Tue, 16 Feb 2021 13:31:02 +0000]
Don't assault firewood

Also, fix an overlap between ``wont_attack()`` and ``neutral()`` in
a condition. The former means ``ATT_FRIENDLY || ATT_GOOD_NEUTRAL
|| ATT_STRICT_NEUTRAL``, the latter means ``ATT_NEUTRAL

2 months agoMemoize some terrain functions
advil [Tue, 16 Feb 2021 21:36:53 +0000]
Memoize some terrain functions

This fixes up a bunch of existing small hotspots by using the built in
memoize code; somewhat redundant with the previous commit, which dealt
with a stair direction call in a different way already. Really, the
consequential change here is the feat_is_altar change, but I've also
memoized a few key things that were downstream from this just because
it's easy to do. The suppress blood check is heavily called on a
webtiles build, so seems to merit converting to a more standard terrain
function and memoizing as well (though really it was a hotspot because
of the altar check).

2 months agoLimit stair exclusions to stairs
advil [Tue, 16 Feb 2021 21:01:53 +0000]
Limit stair exclusions to stairs

Altars and shops also have stair directions, but stair exclusion
semantics doesn't make any sense for them (and regular exclusions should
still work if you want that). Also, because this is called a lot in
rendering, checking the stair direction of altars was a weird little
hotspot because it has to iterate through possible altar features (2% of
weight during an early game qw run with a profiler attached, which is comparable to all of console rendering).

Is there a use case for stair exclusion semantics acting on
transporters? I'm not sure if that even worked but this probably
prevents it if it did. If people complain I'll add them back.

2 months agoMove some text for some artefacts to art-data.txt.
Aliscans [Mon, 1 Feb 2021 19:51:46 +0000]
Move some text for some artefacts to art-data.txt.

Create DESCRIP and DBRAND fields in art-data.txt. These fields are used
in the description of an artefact. DBRAND extends the brand description
and should be used for special brands. DESCRIP is used for sundry

The staff of Olgreb, Storm Bow, Maxwell's Thermic Engine, salamander
hide armour, macabre finger necklace, and the glaive of the Guard are
all adjusted to use these new data fields.

I've put this in the description below the "excrutiating wounds"
description, but this doesn't matter as the spell cannot be used on

I haven't moved the Warlock's Mirror description, as this field only
works if the text to insert is fixed.

Add + as a "start of line" character to show that the contents of a line
in art-data.txt continues the preceding (string) field. Where, with
whitespace, a space is added between the old line and the new one, with
+, a newline is added.

Add a description of the fields to the top of art-data.txt.

[ Committer's note: Squashed and rebased, revised the commit message,
  tweaked some documentation and moved formatting newlines to only (no extra newlines from Closes #1717 ]

2 months agoMake travel_pathfind::points a local variable.
Aliscans [Mon, 15 Feb 2021 21:08:16 +0000]
Make travel_pathfind::points a local variable.

points is only used as the iterator for one loop in travel_pathfind::pathfind(), so it doesn't need a wider scope.

2 months agoDelete some unnecessary functions from travel_pathfind.
Aliscans [Mon, 15 Feb 2021 21:02:38 +0000]
Delete some unnecessary functions from travel_pathfind.

Delete set_annotate_map() and set_distance_grid(), which were never used.

Replace travel_move() with travel_move in travel_pathfind. It was only called by pathfind(), which could access both.

Move _find_explore_status() into travel_pathfind (now called explore_statu()). As its purpose is to interrogate a travel_pathfind, it seems like a good fit.

Replace greedy_square(), unexplored_square() and get_unreachables() with the underlying variables. _find_explore_status() was the only function which read them, and it can now read the variables directly.

2 months agoDelete the redundant rmode variable from _find_travel_pos().
Aliscans [Mon, 15 Feb 2021 22:19:01 +0000]
Delete the redundant rmode variable from _find_travel_pos().

2 months agoRemove a pointless travel_pathfind::pathfind() call.
Aliscans [Mon, 15 Feb 2021 21:22:15 +0000]
Remove a pointless travel_pathfind::pathfind() call.

pathfind() always returns (0,0) without a target, so fill_travel_point_distance() no longer checks this.

pathfind() clears travel_point_distance as it starts, so fill_travel_point_distance() no longer calls it twice if features hasn't been provided.

It changes the order of *features, so I still call it twice if it is set.

2 months agoSplit find_travel_pos().
Aliscans [Mon, 15 Feb 2021 21:21:39 +0000]
Split find_travel_pos().

_find_travel_pos() handles the case where move_x and move_y are set.
fill_travel_point_distance() handles the cases without them.

This change just removes the code which isn't run in each case, and puts _find_travel_pos() above the function which calls it.

2 months agoReplace running with rampaging in wizlabs
shummie [Tue, 16 Feb 2021 16:56:30 +0000]
Replace running with rampaging in wizlabs

Two vaults - Cloud Mages' Chambers and Roulette of Golubria have boots of running as possible rewards. With the removal of boots of running, these were missed. Replace these with boots of rampaging since they still fit the intended theme/reward of the wizlab.

2 months agoFix polearm titles (#12507)
wheals [Tue, 16 Feb 2021 16:36:40 +0000]
Fix polearm titles (#12507)

2 months agoConvert traversability memoization to an array
advil [Tue, 16 Feb 2021 15:10:58 +0000]
Convert traversability memoization to an array

a42c0fa56e7 did get noticeable speedups in world_reacts bad cases, but
it turns out that lookup time for unordered_map on this scale is still
surprisingly bad because (it seems) of weird stdlib implementation
constraints that lead to high layers of abstraction surrounding the
constant lookup. So, just use an array, like most other member functions
for this class.

2 months agoSome fixes for three Swamp vaults
gammafunk [Tue, 16 Feb 2021 11:30:59 +0000]
Some fixes for three Swamp vaults

cheibrodos_swamp_witchery: Remove the unnecessary downweight, as it's a
simple vault that places a single, normal-depth monster. Add some glass
to make this not an autoexplore trap, since fenstriders do have
paralyse. Make the special loot more appropriate to what the monster is
thematically. Also clean up vault syntax.

cheibrodos_swamp_pet_leeches: Make the corpse closet have a door;
there's no reason for this to be accessible only with dig. Also remove
the no_tele_into portions, as it's not necessary.

For all three of these vaults, remove unnecessary range restrictions for
Swamp:4, as they work just fine on that level. Also remove no_item_gen,
as there's no problem with items generating in these. Vault makers tend
to use this when they place their own loot, thinking they don't want the
layout to place more loot on the level. But this tag doesn't affect the
amount of loot generated as level items, just what places are eligible.

Likely we'll need to make another pass through swamp.des to fix up other
issues related to the Swamp changes.

2 months agoTweak some Swamp witch vaults to better fit their creators' intentions
AdamPG [Tue, 16 Feb 2021 01:56:42 +0000]
Tweak some Swamp witch vaults to better fit their creators' intentions

grunt_witch_cave gets a real witch now that they exist.

cheibrodos_swamp_witchery seemingly wanted to place exactly one
witch in one of the huts randomly, but actually placed zero to
two witches. Replacing SUBST with NSUBST leads to the intended

2 months agoUpdate the changelog through 0.27-a0-365
Edgar A. Bering IV [Tue, 16 Feb 2021 06:51:59 +0000]
Update the changelog through 0.27-a0-365

2 months agoUpdate the changelog for 0.26.1
Edgar A. Bering IV [Wed, 3 Feb 2021 18:58:56 +0000]
Update the changelog for 0.26.1

(cherry picked from commit d7a4d63c155831395aa76a5b27c080510dfb948e)

2 months agoCalm down pathing for lost batty band leaders (12505)
advil [Tue, 16 Feb 2021 03:49:00 +0000]
Calm down pathing for lost batty band leaders (12505)

When a band leader is inaccessible and far away, what's supposed to
happen is that the range check in _band_ok keeps a new path calculation
attempt from happening while band members move between random wander
targets. However, if the band consists of batty monsters, this logic was
being overridden; apparently batty monsters get a new wander target each
turn no matter what (??). This was leading to a pretty massive cpu spike
when scarab beetles lost their band leader in tomb, as seen in the save
in 12505. This commit causes batty band members to use the _band_ok
logic rather than blanket recalculating every call. I'm not sure if
there will be any weird side effects to this, e.g. they might move
around less when wandering. Possibly affects only scarab beetles.

2 months agoMemoize traversability checks in pathfinding
advil [Tue, 16 Feb 2021 03:09:15 +0000]
Memoize traversability checks in pathfinding

In extreme cases, pathfinding with a large range on an open level calls
this ~7-8 times per square, so it can be a noticeable speedup to not
recalculate traversability constantly.

2 months agoUpdate the des syntax doc
Nikolai Lavsky [Mon, 15 Feb 2021 19:34:58 +0000]
Update the des syntax doc

This commit updates examples and removes mentions of obsolete/deprecated
item types, glyphs, and modifiers.

2 months agoRestructure some wizmode help commands
advil [Mon, 15 Feb 2021 20:10:51 +0000]
Restructure some wizmode help commands

I can never find what I'm looking for in this menu, and this commit is
an attempt to have slightly easier ordering and sections for
level/builder/feature-related commands.

2 months agoImprove some divine exegesis menu issues
advil [Mon, 15 Feb 2021 19:16:47 +0000]
Improve some divine exegesis menu issues

e12f10fa2d7f24c87a used ' ' as the hotkey for uncastable spells in
  divine exegesis as a display hack, following code for unmemorizable
  spells from before that commit. Previously this was the only (maybe
  even standard?) way to mix hotkeyed and non-hotkeyed MenuEntrys in
  a menu with reasonable formatting.  However, space is a valid hotkey
  that the menu code will handle as such, and for unrelated reasons
  dd83002478 changed how this hotkey renders, leading to weird effects
  for DE in particular. (I'm not actually sure under what conditions the
  memorise case here gets triggered..) This commit adds a fairly
  brute-force way of fixing the formatting for actually non-hotkeyed
  entries. Possibly should be the default on everything, but the way
  hotkeys are rendered generally needs a bigger refactor.
* Fix header spacing in the (Cast) version of the menu.
* Show some DE-specific text + current MP in the footer; the fact that
  the player needed MP for the spell seems to have been tripping people
  up in combination with the "Space" bug, so showing it explicitly will
  make clear why some spells are disabled.

There's still an issue with this menu when the player has >52 spells

2 months agoFix tests?
Nicholas Feinberg [Mon, 15 Feb 2021 19:04:24 +0000]
Fix tests?

2 months agoLet dancing launchers shoot
Nicholas Feinberg [Mon, 15 Feb 2021 18:51:21 +0000]
Let dancing launchers shoot

2 months agoGive dancing launchers ammo
Nicholas Feinberg [Mon, 15 Feb 2021 18:47:17 +0000]
Give dancing launchers ammo

2 months agoMake dancing launchers not crash the game
Nicholas Feinberg [Mon, 15 Feb 2021 18:22:27 +0000]
Make dancing launchers not crash the game

2 months agoNew spell: Manifold Assault (L5 Translocations) projected_weapon pull/1697 1697/head
Nicholas Feinberg [Sun, 17 Jan 2021 22:44:59 +0000]
New spell: Manifold Assault (L5 Translocations)

Manifold Assault launches melee attacks with against 2-4 random
enemies in LOS, depending on spellpower. It's themed as warping space
so that one attack can, paradoxically, hit many enemies.

This spell is intended to give melee-focused characters more reason to
consider investing in spellcasting, It's fun to try to skill toward a
'hybrid' build, and a spell that mostly scales off your melee attack,
rather than your spellpower, helps encourage that. This being a L5
spell helps avoid it being a truly free 'gimme', and allows it to hit
many enemies at once.

The lack of targeter should hopefully avoid it being annoying to use,
by making it just a single press to cast. It also gives the player
more reason to keep normally hitting things in melee sometimes,
when it's important to kill a specific target.

Cleaving doesn't work with this spell since it seems overly confusing,
and since reach and riposte don't work with it either. (Thus, it's
'fair'.) All stabs are also currently banned, though I do wonder if
we might want to allow non-sleep stabs.

2 months agoDisplay monster to-hit percentages in xv
Nicholas Feinberg [Mon, 15 Feb 2021 04:22:48 +0000]
Display monster to-hit percentages in xv

Accounting for both EV and SH. These calculations are a bit clunky, but
they line up with the underlying rolls and with fsim.

2 months agoPartial refactor of throw_item_no_quiver (12488)
advil [Mon, 15 Feb 2021 16:54:03 +0000]
Partial refactor of throw_item_no_quiver (12488)

The end goal is to have this better integrated with quiver code, but
this commit only moves a bit towards this. The main target of this
commit, convulated though it may seem, is to prevent `F` from updating
the global quiver history and avoid the issue in mantis 12488
altogether. This commit does it by using a custom action_cycler for
throwing via `F`, which indirectly keeps the history from being updated
and minorly improves the interface for `F` targeting (and then most of
the commit is restructuring so that this can be done more easily).

2 months agoRein in some autoswitch logic
advil [Mon, 15 Feb 2021 15:24:56 +0000]
Rein in some autoswitch logic

In particular, don't apply autoswitch logic to ammo gain/loss unless it
is an entire stack of ammo. This partially addresses 12488: what is
happening there is that because firing changes stack size, the
autoswitch code was getting called on any firing event. It's not a
complete fix because `F` should still never affect the fire history for
autoswitch purposes.

2 months agoUpdate qw copy
advil [Mon, 15 Feb 2021 15:20:25 +0000]
Update qw copy

Possibly this should be removed from the repo, or turned into a
submodule, but until that happens, here's a more up-to-date version.

2 months agoAdd another species title
Implojin [Mon, 15 Feb 2021 11:46:30 +0000]
Add another species title

Ashenzari warns you: it is.

2 months agoDistinguish between "1 poisoned" and "all poisoned" in the monster list.
Aliscans [Fri, 12 Feb 2021 21:13:02 +0000]
Distinguish between "1 poisoned" and "all poisoned" in the monster list.

Previously, if there were 6 sheep, the monster list would show:
(poisoned) if 1 had been poisoned;
(2 poisoned) if 2 had; and
(poisoned) if all had.

This changes the first case to (1 poisoned). It displays (poisoned), as now, if only one sheep is left.

This makes it easier to see when (in this case) a sheep needs more poison.

2 months agoKeep "[Y]es or [N]o only, please" messages out of the log.
Aliscans [Thu, 11 Feb 2021 20:00:45 +0000]
Keep "[Y]es or [N]o only, please" messages out of the log.

Move the "[Y]es or [N]o only, please" message from MSGCH_PLAIN to MSGCH_PROMPT in yesno() and yesnoquit(). This has two effects.

1. The message no longer appears in the previous message list. The original yes/no question does not appear here, so this message previously appeared in the log with no context.

2. The message is blue rather than white by default. This could be changed, but it would take more work.

2 months agoMake amulets of reflection actually grant monsters SH
AdamPG [Sun, 14 Feb 2021 22:01:27 +0000]
Make amulets of reflection actually grant monsters SH

Currently the SH returned is negative when a monster has an amulet
of reflection equipped without a shield.

2 months agoRestore old Fedhas piety message
Nicholas Feinberg [Mon, 15 Feb 2021 03:41:19 +0000]
Restore old Fedhas piety message

Purely for flavor, let's appreciate some contributions to the ecosystem.

2 months agoRemove an obsolete autopickup exception (12497)
advil [Sun, 14 Feb 2021 19:43:26 +0000]
Remove an obsolete autopickup exception (12497)

Books are now marked as useless if they wouldn't add any spells, so
there doesn't need to be a custom autopickup rule for them. In addition,
since b8f8a8f698407 and bd089401bb, this rule broke autopickup for ash,
because books are all fully ID'd.

2 months agoFix some typos
Kate [Sun, 14 Feb 2021 09:54:31 +0000]
Fix some typos

Closes #1719

2 months agoPartially compensate VS regen
Nicholas Feinberg [Sun, 14 Feb 2021 00:24:56 +0000]
Partially compensate VS regen

Remove their second level of MUT_REGEN, now that each level gives
1 HP/dAut instead of 0.4. This still makes them strictly stronger than
before - could perhaps shift the first MUT_REGEN a bit later?

Another interesting idea would be to give them another -1 hp, +10% mp,
and super regen (hellmonk), but don't feel strongly.

2 months agoMake trolls more thin-skinned
Nicholas Feinberg [Sun, 14 Feb 2021 00:19:47 +0000]
Make trolls more thin-skinned

In compensation for their extra 0.6 hp/turn, turn their tough skin
mut down from level 3 to level 1.

2 months agoContinue fixing CI
advil [Sat, 13 Feb 2021 22:08:25 +0000]
Continue fixing CI

2 months agoActually update requirements files for the CI error
advil [Sat, 13 Feb 2021 21:48:00 +0000]
Actually update requirements files for the CI error

2 months agoFix more build issues
advil [Sat, 13 Feb 2021 21:38:16 +0000]
Fix more build issues

* one more upgrade issue for the running brand
* disable a flake8 package that seems to have stopped working in py27

2 months agoFix an upgrade build issue for running removal
advil [Sat, 13 Feb 2021 21:23:24 +0000]
Fix an upgrade build issue for running removal

2 months agoBuff regen properties (Lici)
Nicholas Feinberg [Sat, 13 Feb 2021 19:15:15 +0000]
Buff regen properties (Lici)

Items that grant regeneration gave 0.4 HP/turn (0.04/aut), which was
not enough to make them a significant tactical factor. Since the vast
majority of the game doesn't have enough strategic time pressure to
make regen speed outside combat very meaningful, this meant that the
regen property was misleadingly weak.

Increasing the regen rate by 2.5x to 1 HP/turn (0.1/aut) should give it
some chance of being a relevant factor for equipment decisions in a
3-rune game. I don't believe this significantly buffs players overall,
since most sources of regeneration still aren't that strong.