34 min agoAdd spell damage info to the `I!` menu and morgues master
Nikolai Lavsky [Tue, 2 Mar 2021 11:04:50 +0000]
Add spell damage info to the `I!` menu and morgues

A third of player spells have damage info, but this information is well

This commit adds a quick way to compare spells and to see all the
numbers at once.

55 min agoRemove forxfire
Nicholas Feinberg [Thu, 4 Mar 2021 17:03:39 +0000]
Remove forxfire

61 min agoAbort foxfire if it would obviously have no effect (AdamPG)
Edgar A. Bering IV [Thu, 4 Mar 2021 16:47:04 +0000]
Abort foxfire if it would obviously have no effect (AdamPG)

Check if there's a visibly open space and abort the spell if there isn't
one. This check happens before spell failure; if foxfire fizzles after
this check it reveals an invisible foe, which the player should be
charged for.

Detected invisible foes currently don't count which is an edge case in a
variety of ways in crawl, but a fix out of scope for this small tweak.

Closes #1790

107 min agoStop explore from reporting a level as explored if there is an object on an excluded...
Aliscans [Sun, 28 Feb 2021 23:08:48 +0000]
Stop explore from reporting a level as explored if there is an object on an excluded square.

_explore_find_target_square() now rejects the first pathfind() call if it returns a "hostile" target. check_square_greed() no longer does anything similar. The latter change reverses e99fe26798.

This means that an item in/behind an excluded area triggers a "partly explored" message.
If an item/space is behind a runed door, explore continues to target it.

107 min agoAllow excluded squares in _is_travelsafe_square() if ignore_hostile is set.
Aliscans [Fri, 26 Feb 2021 19:48:44 +0000]
Allow excluded squares in _is_travelsafe_square() if ignore_hostile is set.

This means that explore reports the search as being incomplete if an excluded area blocks off the only access to the explore_horizon.

107 min agoMake _is_reseedable(c, false) return false for walls and trees which are in an exclusion.
Aliscans [Fri, 26 Feb 2021 15:22:27 +0000]
Make _is_reseedable(c, false) return false for walls and trees which are in an exclusion.

This stops the game from incorrectly assessing a level as not being completely explored when an excluded area reaches a wall which has an unexplored square beyond.

2 hours agoNerf the dex meta
hellmonk [Sun, 28 Feb 2021 20:22:51 +0000]
Nerf the dex meta

Feedback has made it clear that it's a bit too easy to reach high levels
of ev.  This commit reduces the dodging*dex factor by 20%. High levels
of dex and dodging should remain rewarding, but a little less so, and
will be worse until the player gets there. To compensate the very early
game, the flat portion of dodge_bonus increases slightly.

[ Closes #1784. Committer's note: squashed and rebased. ]

2 hours agoNew Trog-themed weapon trove
Skrybe [Thu, 25 Feb 2021 21:52:17 +0000]
New Trog-themed weapon trove

New trove: an abandoned arena once used by reveling Trog worshipers.  Loot is similar to other weapon troves, but some Trog acquirements (lower chance of rare base types, but higher enchantment and increased chance for antimagic) are mixed in with the standard acquirements.  The results are distinct from other weapon troves while still providing some solid loot.  I took 5 weight from both trove_weapon_1 and 2, to keep the overall weight of weapon-only troves the same.

Also noticed that trove_weapons_four_rooms was missing the skill-based veto chance other weapon troves have, which I assumed was an oversight, so I added that as well.

2 hours agoEdit skrybe_vaults_entry_preservation
Skrybe [Thu, 25 Feb 2021 21:30:53 +0000]
Edit skrybe_vaults_entry_preservation

Tweak a Vaults entry of mine to use either stone or metal walls, instead of always metal.  Also remove an unused monster definition.

16 hours agoRefactor some swimming fakemuts
advil [Thu, 4 Mar 2021 01:09:24 +0000]
Refactor some swimming fakemuts

* Standardize printing of an amphibious fakemut based on habitat (each
  of Ba, Op, and Mf took a different strategy for this).
* Add a two-level mutation MUT_NIMBLE_SWIMMER. Level 1 is stealth only
  (Op), and level 2 is stealth + Mf EV/movespeed bonuses. (This packs a
  lot into level 2, but I think this design is a bit cleaner than having
  a distinct mutation for EV/movespeed.)

I've removed some fishtail checks here, in way that I'm *pretty* sure is

18 hours agoDon't make the -Potion light always darkgrey (Yermak)
Neil Moore [Wed, 3 Mar 2021 23:30:05 +0000]
Don't make the -Potion light always darkgrey (Yermak)

If the inability to drink is temporary, it's because of this duration,
so keep the light red in that case.

24 hours agoAdd a monster info bit for susceptibility to vampirism
Edgar A. Bering IV [Wed, 3 Mar 2021 17:13:10 +0000]
Add a monster info bit for susceptibility to vampirism

Closes #1725

24 hours agoTargeter describes if monster is susceptible to Vampiric Draining
Ebonnov [Thu, 4 Feb 2021 16:18:42 +0000]
Targeter describes if monster is susceptible to Vampiric Draining

Now that susceptibility is determined by rN, the targeter can sanely distinguish
if vampiric draining would do nothing to the target or vampiric draining would
gain no HP from the target.

24 hours agoRemove selfench flag from Vampiric Draining
Ebonnov [Wed, 10 Feb 2021 23:04:23 +0000]
Remove selfench flag from Vampiric Draining

This allows the range display to work automatically. _ms_ranged_spell()
gains a special case, if monsters gain many more range-1 spells this
function will need to check spell range.

[ Committer's note: reworded message. ]

24 hours agoMake Vampiric Draining a zap and a beam
Ebonnov [Thu, 4 Feb 2021 21:44:01 +0000]
Make Vampiric Draining a zap and a beam

Creates a zap and an enchantment beam flavor (mimicking Malign Offering
among other damage-dealing enchantment beams) for Vampiric Draining,
replacing existing separate implementation of player version and monster

Coming from the technical conversion are the following gameplay changes:
- monster version can now deal more damage than caster's missing HP
  (i.e. getting player version treatment of 4e331d2).
- damage formula changed from 2d5+1d(pow/7) to 2d(6+pow/14), with
  similar expectation and max, and increased chance to roll close to
  bottom and top ends.

And as an immediate gain:
- monster version shows damage.
- quiver is now enabled only when visible non-susceptible target is
  in range.

One wart:
- casting on non-susceptible target no longer aborts the spell. This
  means that casting with autofight (shift-tab/p) can now fizzle
  (outside living rN+++ monsters). This is consistent with the behavior
  for hexes and pain; a solution to this issue would be a wide-reaching
  improvement to crawl.

[ Committer's note: Reworded commit message. Didn't include all of the
  submitted gameplay changes; the beam only works on vampirism
  susceptible targets. This specific vulnerability gets revealed to
  monster_info in a later commit. ]

26 hours agoMark steam resistance as suppressed by forms
advil [Wed, 3 Mar 2021 15:37:40 +0000]
Mark steam resistance as suppressed by forms

This is for consistency with other draconian types; the breath ability
is already suppressed as well.

26 hours agoReduce explicit species checks: gnoll
advil [Wed, 3 Mar 2021 15:14:22 +0000]
Reduce explicit species checks: gnoll

All that was needed for this is to convert distributed training from a
fakemut to a real mutation. This was fairly straightforward overall.
`_player_is_gnoll` from e00f04a389b562 becomes a direct mutation check;
it looks like this helper function was added to make the code overall
more readable/systematic (probably to avoid bugs when modifying this
code) so I think checking a mutation in a systematic way accomplishes
this goal as well.

27 hours agoMark a vault as transparent
Edgar A. Bering IV [Wed, 3 Mar 2021 14:04:52 +0000]
Mark a vault as transparent

34 hours agoDon't make a note when the player finds an altar for a god the character can't worship.
Aliscans [Tue, 2 Mar 2021 22:36:48 +0000]
Don't make a note when the player finds an altar for a god the character can't worship.

Add a "temp" parameter to player_can_join_god() and player::undead_or_demonic(). If false, the functions ignore temporary effects from mutations and spells, and only consider permanent barriers such as the player's species and Ru sacrifices.

Use this to stop the game from making a note on finding an altar for a god the character will never be able to worship.

36 hours agoReword Forlorn mut
Nicholas Feinberg [Wed, 3 Mar 2021 05:36:02 +0000]
Reword Forlorn mut

I couldn't resist, sorry.

36 hours agoImprove manifold/unrand messaging (dilly)
Nicholas Feinberg [Wed, 3 Mar 2021 05:23:51 +0000]
Improve manifold/unrand messaging (dilly)

Be clearer about why you can't manifold with singsword right now.

39 hours agoGive Wyrmbane a glow up (Wensley)
Nicholas Feinberg [Wed, 3 Mar 2021 02:02:59 +0000]
Give Wyrmbane a glow up (Wensley)

Print a message when a dragon with high enough HD to give Wyrmbane
an upgrade comes into view. (This is a semi-despoiler of HD mechanics.)

40 hours agoFix behavior of `species_mutation_level`
advil [Wed, 3 Mar 2021 01:05:27 +0000]
Fix behavior of `species_mutation_level`

I had misunderstood how level gains were represented when I first wrote
this; fix it to use the total mutation level at an xl rather than the
change at an xl.

41 hours agoReduce explicit species checks: naga
advil [Wed, 3 Mar 2021 00:58:40 +0000]
Reduce explicit species checks: naga

* MUT_CONSTRICTING_TAIL becomes two level, where the first level is mainly
  cosmetic and prevents boots. The old boot fakemut is no longer needed.
* Some tweaks to how walking verbs are used; Naga is standardized on
  "slither" (this was hard-coded in one place, but the yaml used
  "slid"). This will change some lugonu titles.

This commit also slightly generalizes species fixup code to handle
multiple levels of a mutation. There's some flavor code that I didn't
figure out a good way to generalize.

41 hours agoRemove an extraneous function
advil [Wed, 3 Mar 2021 00:58:28 +0000]
Remove an extraneous function

44 hours agoFully unremove forlorn
advil [Tue, 2 Mar 2021 21:52:43 +0000]
Fully unremove forlorn

45 hours agoReduce explicit species checks: demigod
advil [Tue, 2 Mar 2021 20:18:29 +0000]
Reduce explicit species checks: demigod

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

* Repurpose old MUT_FORLORN to indicate Dg's atheist conduct. (I'm not
  sure if the short-form "forlorn" flavor quite works?)
* Abstract/generalize the stat gain stuff into a bit. I'm
  sort of torn about whether it makes sense to even bother doing this
  except for the principle of the thing. I did decide this was good to
  add to the ability screen, but it's implemented as a programmatic
  fakemut based on the stat gain multiplier rather than a realmut.

2 days agoActually add MUT_MULTILIVED to felid
advil [Tue, 2 Mar 2021 17:00:13 +0000]
Actually add MUT_MULTILIVED to felid

... tested save compat but not actually making a new character...

2 days agoReduce explicit species checks: felid part 3
advil [Tue, 2 Mar 2021 16:51:36 +0000]
Reduce explicit species checks: felid part 3

This is the change for felids I'm least sure of (in the sense of, is it
worth being principled to this degree): convert the hard-coded
life-gaining ability to a species mutation. This does get some minor UI
gains in that the ability shows up in the mutation list now.

2 days agoReduce explicit species checks: felid part 2
advil [Tue, 2 Mar 2021 16:13:41 +0000]
Reduce explicit species checks: felid part 2

This commit covers many things:
* no weapons/ammo is converted from a fakemut to MUT_NO_GRASPING.
* no armour is converted from a fakemut to MUT_NO_ARMOUR (the Ru sac mut
  is renamed).

For these two changes I alternatively considered lumping them into one
mutation, or lumping both of them into MUT_PAWS. However, it seemed
cleanest / most readable to keep them distinct, even though these three
mutations don't ever appear separately.

* Refactor skin flavor some more, add code to get the noun forms, add
  felid to this. I also tweaked a few flavor messages around this.
* A few more misc paw-related tweaks that I had missed.
* Refactor species scream verbs; these get moved into with a
  few tweaks. (e.g. add growling to gnoll directed 0-level shouts.)

2 days agoFix sac drink preconditions
advil [Tue, 2 Mar 2021 14:15:04 +0000]
Fix sac drink preconditions

Flipped in 9b28f76f3da3.

2 days agoReduce explicit species checks: felid part 1
advil [Mon, 1 Mar 2021 19:50:06 +0000]
Reduce explicit species checks: felid part 1

Refactor some remaining paw-related issues (60a0ea410 addressed some of
these already). Mainly: Consolidate MUT_PAWS with the stealth fakemut,
and finish conditioning various felid stealth-related checks on this
mutation instead of the species. This lightly reflavors MUT_PAWS to
mention both stealth and pouncing, and leaves the sharp claw stuff to
the co-existing MUT_CLAWS. The fakemut is gone altogether, and some form
interactions are more standardized, so the mutation screen will more
accurately display with the stealth bonus is suppressed.

2 days agoChangelog through 0.27-a0-498
Edgar Bering [Tue, 2 Mar 2021 12:40:59 +0000]
Changelog through 0.27-a0-498

2 days agoMake *slow stack in the same way as *corrode.
hellmonk [Sun, 28 Feb 2021 20:59:56 +0000]
Make *slow stack in the same way as *corrode.

Instead of being slightly different for no reason.

Closes #1785.

2 days agoRename local variables in spectral_weapon_fineff::fire().
Aliscans [Mon, 1 Mar 2021 11:13:08 +0000]
Rename local variables in spectral_weapon_fineff::fire().

The following compiler warning was given by gcc 10.2.0. Renaming def removes the warning. I also renamed atk, but only for consistency. In member function ?virtual void spectral_weapon_fineff::fire()?: warning: declaration of ?def? shadows a member of ?spectral_weapon_fineff? [-Wshadow]
  721 |     actor *def = defender();
      |            ^~~
In file included from
fineff.h:30:16: note: shadowed declaration is here
   30 |     mid_t att, def;

Closes #1792.

2 days agoDon't make monster refrig affect the caster
Nicholas Feinberg [Tue, 2 Mar 2021 03:31:16 +0000]
Don't make monster refrig affect the caster

Symmetry with the player version.

2 days agoDescribe Ozocubu's Refrigeration and Drain Life in monster
Nikolai Lavsky [Thu, 18 Feb 2021 10:58:50 +0000]
Describe Ozocubu's Refrigeration and Drain Life in monster

The spells weren't handled by ``mons_spell_beam()``, so the monster
utility wasn't showing their damage.

Unlike monster, xv can already show the damage for these spells, since
it gets the numbers in a different way.

(Committer's note: moved this into the nicer struct.)

2 days agoCancellation descr improvements (12531, Yermak)
Nicholas Feinberg [Tue, 2 Mar 2021 02:43:31 +0000]
Cancellation descr improvements (12531, Yermak)

- Don't print empty statuses
- Don't print (expiring)
- Further clarify when it'll have no effect

2 days agoFix a vault randart
Kate [Tue, 2 Mar 2021 02:23:34 +0000]
Fix a vault randart

Randart armour isn't supposed to be given egos, and doing so can generate
buggy items (like boots with double rampaging in this case).

2 days agoAllow Ash boosts to adjust max hp, mp and spell levels
Edgar A. Bering IV [Mon, 1 Mar 2021 17:51:40 +0000]
Allow Ash boosts to adjust max hp, mp and spell levels

Ashenzari boosts are long-lived and intended to be functionally
equivalent to having the extra skill levels. Heroism still does not give
a boost to maxhp, partly because it seems like a technical headache
because of how heroism is implemented.

2 days agoDon't grant curse skill boosts for melded equipment (PleasingFungus)
Edgar A. Bering IV [Mon, 1 Mar 2021 16:38:14 +0000]
Don't grant curse skill boosts for melded equipment (PleasingFungus)

Since the curse boost is an equipment property and the rest of those are
suppressed by transmutation, let's be consistent and withdraw
transformed bonuses.

So players can see what has happened this is reflected in the ^ screen.

3 days agoReduce explicit species checks: draconian
advil [Mon, 1 Mar 2021 16:36:15 +0000]
Reduce explicit species checks: draconian

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

Red draconians: fix up a manual zap conversion.

Pale draconians: convert steam resistance to a real mut (before it
wasn't shown at all, perhaps because it seems not-very-important?)

Grey draconians:
 * There's still a hard-coded ac bonus in player::racial_ac, wasn't
   obvious to me that there is a clean way to abstract this one.
 * Their relationship to water was very confused; I have (maybe) cleaned
   this up a bit. Previously, they had MUT_UNBREATHING, a fakemut about
   walking through water, can_swim=True, and a hard-coded check in
   player::extra_balanced. The latter, I'm pretty sure, is currently
   redundant with swimming (it probably wasn't in the past). I have
   consolidated these by making MUT_UNBREATHING two levels, where the
   second level is flavored like the old fakemut. The fakemut is gone,
   they aren't specified as swimming (though the mut is still checked in
   swimming code), and extra_balanced has been refactored, including
   some unrelated cleanups.

3 days agoNerf new Ashenzari skill boost
Edgar A. Bering IV [Mon, 1 Mar 2021 06:02:01 +0000]
Nerf new Ashenzari skill boost

Making it easier to get multiple of the same curse and also doubling the
boost formula was effective in making it more powerful. Too powerful.

Two curses of the same type still give a multiplier equal to the "fully
bound" level of old Ashenzari, so hopefully this lands on a good power

3 days agoPreview !cancel in its description
Nicholas Feinberg [Mon, 1 Mar 2021 05:11:13 +0000]
Preview !cancel in its description

List the effects that will be removed.

3 days agoMake duration data short text consistent
Nicholas Feinberg [Mon, 1 Mar 2021 05:01:22 +0000]
Make duration data short text consistent

If my next commit is going to work, all of these have to be in
adjective form, not just some!

3 days agoMark !cancel useless when appropriate
Nicholas Feinberg [Mon, 1 Mar 2021 04:22:43 +0000]
Mark !cancel useless when appropriate

(If neither contaminated nor buffed.)

3 days agoDeduplicate animals
Nicholas Feinberg [Mon, 1 Mar 2021 03:40:13 +0000]
Deduplicate animals

Now that our favourite +8 unrand rings have been renamed.

3 days agoPrevent entering pre-existing piety troves under Ashenzari
Kate [Mon, 1 Mar 2021 02:34:52 +0000]
Prevent entering pre-existing piety troves under Ashenzari

In the weird edge case where you find a piety trove and then convert to
Ashenzari, don't allow entry at all, since reducing piety is tied to
shattering cursed items (and causes buggy behaviour if reduced normally).

3 days agoReduce Ash join spam
Nicholas Feinberg [Mon, 1 Mar 2021 01:31:16 +0000]
Reduce Ash join spam

Don't ID things you've already ID'd!

3 days agoBan piety troves under New Ash
Nicholas Feinberg [Mon, 1 Mar 2021 01:23:13 +0000]
Ban piety troves under New Ash

They don't work properly (your piety resets once you reload or curse
another item) and it's not very clear what making them work properly
would even mean.

3 days agoSimplify spellforged servitor energy (hellmonk)
Nicholas Feinberg [Mon, 1 Mar 2021 01:03:50 +0000]
Simplify spellforged servitor energy (hellmonk)

De-randomize them: instead of taking 10-25 energy to cast a spell,
take 18 consistently. This appears on their xv, which is nice.

Further context:

3 days agoReduce explicit species checks: palentonga
advil [Mon, 1 Mar 2021 01:02:50 +0000]
Reduce explicit species checks: palentonga

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

Only minor things here:
* condition MUT_ROLL upgrades on having the mutation innately
* refactor/simplify some tail code (no changes to behavior)
* move the barding code to, perhaps for later dataification

3 days agoDon't trigger spectral weapon on all attacks (particleface)
Nicholas Feinberg [Mon, 1 Mar 2021 00:10:21 +0000]
Don't trigger spectral weapon on all attacks (particleface)


3 days agoReduce explicit species checks: minotaur
advil [Sun, 28 Feb 2021 23:58:46 +0000]
Reduce explicit species checks: minotaur

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

Minotaurs were in reasonable shape, only two tweaks:
* Convert retaliatory headbutt to a real mutation. This allows removing
  some custom mutation suppression code.
* Tweak some hints mode tips to talk about horns, rather than species.

(Also, one hopefully cosmetic fix for the mutation data structure..)

3 days agoTrigger spectral weapon on all attacks
Nicholas Feinberg [Sun, 28 Feb 2021 23:44:08 +0000]
Trigger spectral weapon on all attacks

Including misses & blocked attacks. This should bring it closer to
the design goals/tradeoffs described in e6bb7ee78e63.

3 days agoDrop Depths monsters count again
Nicholas Feinberg [Sun, 28 Feb 2021 23:34:08 +0000]
Drop Depths monsters count again

XP down 4% from 0.26, which seems a-ok. Goal is to make overall
difficulty closer to what it was before the removal of chaff.

3 days agoDon't allow shattering melded items (12528)
Edgar A. Bering IV [Sun, 28 Feb 2021 19:12:12 +0000]
Don't allow shattering melded items (12528)

3 days agoDon't offer Ash monks the second curse too fast
Edgar A. Bering IV [Sun, 28 Feb 2021 19:06:00 +0000]
Don't offer Ash monks the second curse too fast

Give them a chance to apply the first curse, and just set the progress
timer to most of the way to the second curse so it will appear quickly.

Closes #1782

3 days agoReduce explicit species checks: vinestalker
advil [Sun, 28 Feb 2021 19:15:04 +0000]
Reduce explicit species checks: vinestalker

Vinstalkers are in good shape, this is the only obvious change I found.

3 days agoReduce explicit species checks: mummy
advil [Sun, 28 Feb 2021 19:06:45 +0000]
Reduce explicit species checks: mummy

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

For mummies:
 * convert a hardcoded adjustment to rF + fakemut to use
   MUT_HEAT_VULNERABILITY. I can't find any reason this wasn't done in
   the past except that it was very old code. There is a minor flavor
   difference in the wording of the mutation.
 * add a real mutation for non-drinking. I also did a bunch of cleanup
   and refactoring of the drinklessness checks (you_drinklessness ->
 * for some flavor stuff, use the skin adjective string added in a
   previous commit. Not sure if this is ultimately the best way, but it
   seems to me to still be an improvement in that this flavor logic is
   better consolidated.
 * clean up player::can_bleed; should have no behavior changes.
 * Generalize player::can_smell (which is for flavor only): no lifeless
   undead can smell after this commit.

3 days agoRename (internally) two Ru mutations
advil [Sun, 28 Feb 2021 17:30:43 +0000]
Rename (internally) two Ru mutations

No user-facing changes, but the mut names were somewhat misleading.

3 days agoReduce explicit species checks: tengu
advil [Sat, 27 Feb 2021 23:38:17 +0000]
Reduce explicit species checks: tengu

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

Tengu are easy. A previous commit cleaned up some superficial code, and
this one uses the tengu flight mutation for a bunch of cases rather than
checking the species directly.

3 days agoConvert hands to fists for UC forms name
advil [Sat, 27 Feb 2021 23:36:57 +0000]
Convert hands to fists for UC forms name

Separating this bit out because it is kind of hacky...

3 days agoConsolidate and clean up some body part name code
advil [Sat, 27 Feb 2021 23:20:25 +0000]
Consolidate and clean up some body part name code

This tries to reduce a bunch of code duplication while making some body
part name cases more consistent, and also reduce reliance on
species-specific checks.

Biggest changes to blade hands code, which is/was fairly involved, but
hopefully all changes are improvements. The commit removes the general
blade hands name ("scythe-like blade") that was used in various cases,
awkwardly, and uses a clean version of the regular hand name. For ice
form, we use "Ice paws" (instead of "Ice fists") in the UI -- the form
data already used "paws" as the hand name (for e.g. ring wearing), so
this improves consistency. For statue form, I used the regular hand name
instead of "fists"; maybe this should still be customized for the "hand"
case (but it reduces duplication of similar code).

This stuff was all complex enough that there may well be corner cases
that this commit breaks...

3 days agoReduce explicit species checks: formicid
advil [Sat, 27 Feb 2021 18:50:05 +0000]
Reduce explicit species checks: formicid

This commit is part of a series that attempts to more cleanly treat
species as bundles of traits/behaviors that have their own well-defined
semantics, and minimize the use of explicit species checks in the code.

For formicids:
* use you.stasis() instead of a species check. This might be even better
  converted from a fakemut to a realmut, but since this call already
  existed (for actor even) I repurposed it. If anyone ever adds back in
  non-perma-stasis, that would be a good time to turn this into a mut.
* Lump formicid dig in with monster burrowing (since they have the same
  behavior) and add an actor call. Again, for players this could be
  turned into a realmut eventually, similar to the monster bit. This
  ties player self-shaft in with this check too.
* Convert four-handedness from a fakemut to a real mutation
* Use innate_sinv() instead of species checks; this may change some
  semantics for physiology conflicts (but probably in a good way).
* For cosmetic reasons add a minor species check for bonelessness (Op
  and Fo).

3 days agoMore Ash randnames (nicolae)
Edgar A. Bering IV [Sun, 28 Feb 2021 18:47:07 +0000]
More Ash randnames (nicolae)

3 days agoReword some Ashenzari curse names
Kate [Sun, 28 Feb 2021 17:52:21 +0000]
Reword some Ashenzari curse names

4 days agoAssign Ashenzari abilities to uppercase letters
Kate [Sun, 28 Feb 2021 17:46:43 +0000]
Assign Ashenzari abilities to uppercase letters

As with Ru sacrifices. They could also potentially just be assigned to 'a'
and 'b' like other god invocations, but either way shouldn't use the current
assignments of 'f' and 'g' which are for non-invocation abilities.

4 days agoStaticalise a function
Neil Moore [Sun, 28 Feb 2021 06:27:53 +0000]
Staticalise a function

4 days agoRefactor into set_artefact_brand()
Neil Moore [Sun, 28 Feb 2021 06:25:53 +0000]
Refactor into set_artefact_brand()

4 days agoPreserve brands when Ash-cursing items (#12527)
Neil Moore [Sun, 28 Feb 2021 06:09:14 +0000]
Preserve brands when Ash-cursing items (#12527)

4 days agoNew Nemelex skill titles (hellmonk)
Nicholas Feinberg [Sun, 28 Feb 2021 02:15:50 +0000]
New Nemelex skill titles (hellmonk)

Very cute.

4 days agoFinish removing Depths chaff
Nicholas Feinberg [Sun, 28 Feb 2021 01:20:54 +0000]
Finish removing Depths chaff

As the prelude to Vaults changes, remove some weak monsters present
in both Depths and Vaults. Reduce total Depths spawns by roughly 8%
to compensate. Total XP remains unchanged.

The first part of this commit was inadvertently included in fdd91fc31 .

4 days agoTemporarily tweak Tengu Reaver's spells
Nicholas Feinberg [Sun, 28 Feb 2021 00:57:21 +0000]
Temporarily tweak Tengu Reaver's spells

Lightning Spire doesn't quite work yet as a monster spell. I like the idea of
it, but don't currently have the time to fix it up.

Instead, give reavers a pile of elemental bolt spells to really simulate the
classic cj experience. Total spell weight equal to the old MST_TENGU_REAVER_III.

5 days agoFix a crash
Edgar A. Bering IV [Sat, 27 Feb 2021 17:39:17 +0000]
Fix a crash

5 days agoMore Ashenzari artefact names (nicolae)
Edgar A. Bering IV [Sat, 27 Feb 2021 16:42:53 +0000]
More Ashenzari artefact names (nicolae)

5 days agoIncrease the skill boost contribution of piety
Edgar A. Bering IV [Sat, 27 Feb 2021 16:19:34 +0000]
Increase the skill boost contribution of piety

Even after consolidating curses into bins, getting three curses of the
same type is rare (less than 8% of 10-curse rolls will have any triple
at all; less than 1% of 10-curse rolls will have a chosen triple). Over
the longer run, if the player is willing to make gear sacrifices or wait
for more curse re-rolls these odds can be increased, of course, but at a

New skill boosts scale with the number of curses, so it's hard to get
the multiplier up to the range of old skill boosts without luck. This
commit increases the contribution from piety, which should both make
foregoing curses more noticable and the impact of adding "irrelevant"

5 days agoReforge the Chains VII: Grouped skill bonuses ashenzaru-skillbins
Edgar A. Bering IV [Sat, 27 Feb 2021 10:45:27 +0000]
Reforge the Chains VII: Grouped skill bonuses

After initial playtesting feedback, completely random skills had some
interesting upsides (when the stars aligned and a triply-cursed skill
could also be utlized it was a good moment) they were also frustrating
and had bad gamefeel:

- multiple melee skills when a player is probably only using one (maybe
- hard to roll relevant magic skills
- occasionally taking a "useless" or "not that useful" curse was fun but
  it was happening too often.

This commit changes the skill bonuses to be granted in the following
skill groupings, more fine grained than the old ash skill categories but
not as broad as totally random skilling:

Melee: all melee combat skills
Ranged: all ranged combat skills
Fortitude: Armour and Shields
Cunning: Dodging and Stealth
Elements: Air, Earth, Fire, and Ice Magic
Alchemy: Transmutations and Poison Magic
Beguiling: Conjurations, Hexes, and Translocations
Companions: Necromancy and Summonings
Self: Fighting and Spellcasting
Evocations: Evocations.

Each curse offers two out of these ten categories chosen at random and
without weight. This will hopefully allieviate some of the bad feelings
from totally random skill boosts while retaining the character shaping
aspects of the narrower bonus granting.

In lieu of save compatibility, since this has only been live on trunk
briefly, this commit just switches to a new prop key for the new curses.

5 days agoRemove a now-unused enum type
Edgar A. Bering IV [Sat, 27 Feb 2021 10:06:56 +0000]
Remove a now-unused enum type

5 days agoChange weapon abbreviations to match aptitudes.txt
Edgar A. Bering IV [Sat, 27 Feb 2021 09:46:48 +0000]
Change weapon abbreviations to match aptitudes.txt

5 days agoAlways reset curse progress when shattering
Edgar A. Bering IV [Sat, 27 Feb 2021 09:11:24 +0000]
Always reset curse progress when shattering

Otherwise, the player is incentivized to shatter "just before" the curse
timer times out, which means tracking the timer, to minimize the time
spent at lower piety.

5 days agoTweak some Ash god power messaging
Edgar A. Bering IV [Sat, 27 Feb 2021 09:03:24 +0000]
Tweak some Ash god power messaging

5 days agoIncrease curse frequency in various ways
Edgar A. Bering IV [Sat, 27 Feb 2021 07:14:33 +0000]
Increase curse frequency in various ways

This decreases the curse delay from 50 to 20, making curses more
plentiful. The curse delay was copied from Ru, but Ru sacrifices offer
far more benefit than a single curse. The delay was also re-set upon
accepting a curse, this behavior was somewhat opaque; curses now come at
the same rate regardless of whether they're accepted or ignored.

This commit also arranges for monks to be offered two curses shortly
after joining, instead of one.

5 days agoDon't offer to shatter the chains uncursed (12524)
Edgar A. Bering IV [Sat, 27 Feb 2021 00:01:24 +0000]
Don't offer to shatter the chains uncursed (12524)

5 days agoTweak Ash curse randart names (nicolae)
Edgar A. Bering IV [Fri, 26 Feb 2021 23:51:14 +0000]
Tweak Ash curse randart names (nicolae)

5 days agoFix save compatibility props initialization
Edgar A. Bering IV [Fri, 26 Feb 2021 23:50:09 +0000]
Fix save compatibility props initialization

5 days agoFix a db lookup regression (PleasingFungus)
Edgar A. Bering IV [Fri, 26 Feb 2021 21:03:44 +0000]
Fix a db lookup regression (PleasingFungus)

5 days agoAdd the AK splash screen to webtiles
Goratrix [Fri, 26 Feb 2021 11:45:06 +0000]
Add the AK splash screen to webtiles

File was added with 7ddf969 but needs to be added here to appear in

5 days agoFix a typo in geoelf_rooms.lua
AdamPG [Wed, 24 Feb 2021 17:06:14 +0000]
Fix a typo in geoelf_rooms.lua

5 days agoRefactor a conditional in `spell_uselessness_reason`
Nikolai Lavsky [Wed, 24 Feb 2021 19:31:11 +0000]
Refactor a conditional in `spell_uselessness_reason`

Also, fix a colour tag in `_player_spell_desc`.

5 days agoDon't waste time casting Sublimation of Blood when at max MP
Nikolai Lavsky [Wed, 24 Feb 2021 19:28:59 +0000]
Don't waste time casting Sublimation of Blood when at max MP

After 4502bb1e, the player can cast Sublimation when at max MP. The
description still has the "This spell would have no effect right now"
warning, and the spell is correctly greyed out on the quiver in this
situation, though.

Fix this by moving Sublimation's MP check into a function that is
called before subtracting the MP cost. This adds a spell-specific
check to casting-specific ones, but it's good to have all MP-related
checks in one place. Also, it's clearer than temporarily refunding
the spell cost, as it was before 4502bb1e.

5 days agoTweak Ashenzari piety gain
Edgar A. Bering IV [Fri, 26 Feb 2021 20:40:52 +0000]
Tweak Ashenzari piety gain

Ensure all species get to 1* piety with at most two curses. Save poor
little octopus.

5 days agoActivate Ash skill boost from 0* (mdonais)
Edgar A. Bering IV [Fri, 26 Feb 2021 20:18:31 +0000]
Activate Ash skill boost from 0* (mdonais)

The skill boost requires curses to take advantage of; at 0* and only one
curse the skill point multiplier is 4. Compared to 24 for one curse at
6* this isn't that noticable.

In exchange, the play experience is clearer: all of the messages about
curses being tied to skills don't have to have caveats, and a Monk
actually gets something immeidate out of using their first curse.

5 days agoMark ?id useless for ash followers (mdonais)
Edgar A. Bering IV [Fri, 26 Feb 2021 20:17:41 +0000]
Mark ?id useless for ash followers (mdonais)

5 days agoDefault force_more for curse offering (mdonais)
Edgar A. Bering IV [Fri, 26 Feb 2021 20:10:09 +0000]
Default force_more for curse offering (mdonais)

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

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

6 days 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

6 days 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).

6 days 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.