5 hours agoShow that bloodless vampires' bite can heal master
kitchen-ace [Sat, 12 Oct 2019 19:06:14 +0000]
Show that bloodless vampires' bite can heal

It's not obvious that vampires can heal themselves when they bite
something, and that this works only when they're bloodless. Add some
messages to the abilities screens.

5 hours agoFix showing regen amulets as useless for Vampires
kitchen-ace [Sat, 12 Oct 2019 18:33:11 +0000]
Fix showing regen amulets as useless for Vampires

Vampires now heal when bloodless as long as no monsters are in LOS.

22 hours agoUpdate ballistomycete descriptions (kitchen-ace) 0.25-a0
gammafunk [Sun, 13 Oct 2019 01:12:16 +0000]
Update ballistomycete descriptions (kitchen-ace)

Updates the descriptions for ballistomycete and ballistomycete spores to
remove an outdated reference to ballistomycetes growing and to describe
the effect of the spore's explosion. Also add a description for the
Sporulate ability using the same language. Closes #1183.

[skip ci]

2 days agoDon't crash with equip_unequip stone_soup-0.24 0.24-b1
advil [Fri, 11 Oct 2019 16:18:19 +0000]
Don't crash with equip_unequip

I think this case just got missed in b57a41d.

3 days agoAllow putting on jewellery from the floor
Umer Shaikh [Tue, 10 Sep 2019 06:08:27 +0000]
Allow putting on jewellery from the floor

This commit extends previous functionality to work with
puton_ring (which also handles amulets). Amount of time to perform the
action is the same as putting on jewellery from the inventory.

[ Closes #1136 ]

3 days agoAllow wielding and wearing from the floor
Umer Shaikh [Mon, 1 Jul 2019 01:43:25 +0000]
Allow wielding and wearing from the floor

This commit changes wield_weapon and wear_armour to use use_an_item so
the player can wield and wear from the floor. It also changes
use_an_item so * and - options are allowed to, respectively, view and
choose from all items and (if selecting weapons) swap to bare hands.
This means * is now available for quaffing and reading as well.

The wield weapon menu can now be brought up even if there are no weapons
around---indeed, even if there is nothing at all around. The first is
because you can wield non-weapons with *. The second is because you
always have your bare hands, and I am anticipating a menu where basic
stats for weapons are displayed alongside the options (a long-standing
feature request).

This commit implements * to show all items. This preserves the current
ability to wield non-weapons and fulfills a TODO marked in the existing
use_an_item code, so that * can be used for reading scrolls and quaffing
as well. However, my own feeling is that this is not a usefull bit of UI
complexity from the player's side. You cannot quaff non-potions, read
non-scrolls, or wear non-wearables anyway. And as far as I know the only
practical use for wielding non-weapons is breadswinging, a niche
speedrunning tactic. I suggest cutting this and cutting the ability to
wield non-weapons.

This commit makes wielding or wearing from the floor take the same
amount of time as wielding or wearing from your inventory. I think this
is the least surprising UI and is consistent with the current behaviour
for quaffing and reading from the floor (10 aut). I anticipate this
means speedrunners and the hyper-optimal will want to sometimes pick
items up by wielding them from the floor (e.g., wielding arrows to pick
them up).

[ Committer's note: Wielding arrows from the floor to pick them up then
  switching back to the previously wielded item costs 15 aut and 2 turns.
  Just picking up the arrows costs 10. Whether turns or aut are used for
  scoring, just picking up arrows is faster. ]

3 days agoFixed bug in OTR variance reduction commit
Byrel Mitchell [Thu, 10 Oct 2019 19:03:40 +0000]
Fixed bug in OTR variance reduction commit

This makes it impossible to gain extra OTR duration by breadswinging during
the final turn of duration.

[Closes #1177]

3 days agoFix crash when repeating menu evocations (gammafunk)
Aidan Holm [Thu, 10 Oct 2019 18:41:39 +0000]
Fix crash when repeating menu evocations (gammafunk)

When repeating the previous command via the ` key, the UI is not fully
laid out. The current implementation depends on having the menu more
text default to not being visible for the UI to layout correctly.

On local tiles this isn't an issue, since scrollers render their own
scrollbars, but on console the scroll position is rendered to the more,
and the layout error was causing a division by zero in the position

3 days agoAdjust OTR to be more turn length invariant.
Byrel Mitchell [Thu, 10 Oct 2019 18:18:07 +0000]
Adjust OTR to be more turn length invariant.

Changed direct damage to use turn length in auts (instead of 10s of auts) for direct damage, and to scale odds of adding a poison stack linearly between 1 and 20 aut turn lengths (instead of 50% odds regardless of turn length.) This has the same results as previous calculation at 10 aut turns, but eliminates the incentive to 'quick-blade-swing' to add poison stacks rapidly.

3 days agoDon't scale when rendering lines (Goratrix, 12085)
Aidan Holm [Thu, 10 Oct 2019 16:29:16 +0000]
Don't scale when rendering lines (Goratrix, 12085)

This bug was caused by line buffer rendering correctness depending on
the GL scale being the same when buffer packing and when rendering,
which was only required due to the way the local tiles minimap worked.

The local tiles minimap has been changed to render the boundary box with
no scaling, fixing this weird quirk.

3 days agoIndicate damage done by Ignite Poison
Nikolai Lavsky [Mon, 7 Oct 2019 23:02:23 +0000]
Indicate damage done by Ignite Poison

This commit brings Ignite Poison in line with other damaging spells
that use exclamation marks to show the amount of damage done.

It is a followup for PR #952 and commits 4a3ee908 and 1f260a4b.

3 days agoRevert "Remove UI_CRT and other UI gunk"
Aidan Holm [Thu, 10 Oct 2019 16:48:47 +0000]
Revert "Remove UI_CRT and other UI gunk"

Reverted due to

This reverts commit ad5c9ccc1d3bb7aae20c7d970926c877ea0f62fe.

3 days agoFix minimap stretching on local tiles
Aidan Holm [Thu, 10 Oct 2019 16:02:05 +0000]
Fix minimap stretching on local tiles

3 days agoRemove ui_ prefix from namespaced functions
Aidan Holm [Thu, 10 Oct 2019 09:56:24 +0000]
Remove ui_ prefix from namespaced functions

3 days agoRemove UI_CRT and other UI gunk
Aidan Holm [Tue, 8 Oct 2019 18:43:36 +0000]
Remove UI_CRT and other UI gunk

tiles_crt_popup() shouldn't be necessary, since these UIs don't use any
cgotoxy/cprintf calls themselves. I'm not exactly sure of the purpose of
the set_ui_state() calls here, but they shouldn't be required either for
those UIs to work correctly.

In general, we're trying to remove tiles_crt_popup() entirely, as it was
an temporary hack used to wrap old-style UIs. As of this commit, the
last remaining such UI is the skill menu UI.

3 days agoMake text widget members private
Aidan Holm [Tue, 8 Oct 2019 17:33:12 +0000]
Make text widget members private

We also add size request invalidation, just in case someone is doing
something interesting...

3 days agoRemove ui::Widget align_self property
Aidan Holm [Tue, 8 Oct 2019 17:19:36 +0000]
Remove ui::Widget align_self property

This only did anything inside a box widget, and was confusingly named
(does it refer to main- or cross-axis alignment?). It seems to be
unnecessary, although relying on the parent stretch property is probably
slightly brittle.

IIRC Flutter allows the parent to store a small amount of data on child
widgets; perhaps adding a Box::set_child_cross_alignment() that utilizes
this method will work well.

3 days agoMake ui::Box member private
Aidan Holm [Tue, 8 Oct 2019 17:10:45 +0000]
Make ui::Box member private

3 days agoImprove Box widget alignment property names
Aidan Holm [Tue, 8 Oct 2019 16:58:08 +0000]
Improve Box widget alignment property names

"main" means alignment along the main axis, while "cross" means alignment
along the cross axis. E.g. for a horizontal box, the main axis is
horizontal and the cross axis is vertical.

3 days agoMake RestartAllocation private to
Aidan Holm [Tue, 8 Oct 2019 16:41:13 +0000]
Make RestartAllocation private to

3 days agoRemove ui::vec utility array
Aidan Holm [Tue, 8 Oct 2019 16:36:10 +0000]
Remove ui::vec utility array

3 days agoRemove use of ui::i2
Aidan Holm [Tue, 8 Oct 2019 16:35:56 +0000]
Remove use of ui::i2

3 days agoClean up headers
Aidan Holm [Tue, 8 Oct 2019 16:32:21 +0000]
Clean up headers

3 days agoAdd ui::Region helper class
Aidan Holm [Tue, 8 Oct 2019 16:22:22 +0000]
Add ui::Region helper class

3 days agoAdd ui::Margin helper class
Aidan Holm [Tue, 8 Oct 2019 15:25:58 +0000]
Add ui::Margin helper class

This makes margin member accesses clearer, by allowing/forcing the use
of symbolic names (top/left/etc) rather than array<int> indices.

Also adds several Margin() constructors, based on CSS notation;
parameters are now forwarded by the set_margin_for_* helpers. Those
helpers also now invalidate their size request, so updating margins live
should also work.

3 days agoAdd ui::Size helper class
Aidan Holm [Tue, 8 Oct 2019 14:10:53 +0000]
Add ui::Size helper class

3 days agoAdd widget visibility
Aidan Holm [Tue, 8 Oct 2019 12:55:50 +0000]
Add widget visibility

Non-visible widgets don't get rendered or allocated and have a size
request of zero.

4 days agoDon't let overgrow target out of bounds
advil [Wed, 9 Oct 2019 14:58:42 +0000]
Don't let overgrow target out of bounds

This directly provides bounds information, but that is the same as the
dig and passwall targeters. The alternative (to avoid a crash) would be
letting the targeter work, but the spell fail, which seems worse.

4 days agoFix use of Slimify on derived undead (CanOfWorms)
gammafunk [Wed, 9 Oct 2019 06:10:18 +0000]
Fix use of Slimify on derived undead (CanOfWorms)

The monster polymorph code had a special consideration (i.e. a hack) for
derived undead that have the shapeshifter enchantment. This hack
involved having the polymorph target check look at the monster type of
the original type the undead monster derived from instead of the current
type. A byproduct of this hack was that derived undead that got
Slimified wouldn't polymorph into a death ooze yet would be converted to
a neutral monster.

Derived undead with the shapeshifter enchant shouldn't exist since
undead are not normally able to polymorph. Hence this commit removes the
hack to allow Slimify to work properly. Any derived undead that attempts
to shift simply generate the "...looks momentarily different" message.

4 days agoAdd new airstrike formula to monster (minmay)
Edgar A. Bering IV [Wed, 9 Oct 2019 02:51:48 +0000]
Add new airstrike formula to monster (minmay)

4 days agoAdd attack strength punctuation to waterstrike and airstrike
Edgar A. Bering IV [Wed, 9 Oct 2019 02:27:54 +0000]
Add attack strength punctuation to waterstrike and airstrike

These (and everything else in that does damage in instead of via were missed when attack strength
punctuation was added to spells.

4 days agoGive monsters the player airstrike damage formula
Edgar A. Bering IV [Wed, 9 Oct 2019 02:17:46 +0000]
Give monsters the player airstrike damage formula

Commit a0cb8612 simplified airstrike damage for players; monster
airstrike damage was previously a hack that gave a simplified
damage formula and also reduced variance to work around the old
formula's long tail.

The new airstrike damage formula does not have the high-variance long
tail and is appropriate for monsters to use.

5 days agoUse felid blade hands tile with mons:natasha
kitchen-ace [Tue, 8 Oct 2019 11:22:39 +0000]
Use felid blade hands tile with mons:natasha

If the player has tile_player_tile = mons:natasha, show the felid
version of blade hands. It's still not perfect (and doesn't match
with many of the other felid tiles) but looks much better than the
human blade hands tile.

5 days agoFix grow oklob tile colour space reduction
Aidan Holm [Tue, 8 Oct 2019 06:00:12 +0000]
Fix grow oklob tile colour space reduction

Unfortunately the previous iteration of the grow oklob ability tile had
been saved with an unintentionally reduced colour set, due to the PNG
being in indexed mode.

5 days agoAdd tile for sprint monster spell
Aidan Holm [Mon, 7 Oct 2019 12:59:35 +0000]
Add tile for sprint monster spell

5 days agoPut an oklob in the tile for Fedhas's oklob ability (#1173)
John Stilley [Tue, 8 Oct 2019 01:15:48 +0000]
Put an oklob in the tile for Fedhas's oklob ability (#1173)

5 days agoImproving redundant working on flight dangers (#1174)
John Stilley [Tue, 8 Oct 2019 01:12:56 +0000]
Improving redundant working on flight dangers (#1174)

6 days agoRemove ill-fitting confusion text (1583) pull/1168 1168/head
theJollySin [Sat, 5 Oct 2019 23:56:05 +0000]
Remove ill-fitting confusion text (1583)

This visual doesn't work for monsters with 0 or 1 eyes

[skip ci]

7 days agoUpdate mailmap.
S. Mark [Sun, 6 Oct 2019 21:51:03 +0000]
Update mailmap.

[skip ci]

7 days agoFix typo.
S. Mark [Sun, 6 Oct 2019 21:49:23 +0000]
Fix typo.

7 days agoAdd an explicit bounds check to crawl_view_buffer ()
advil [Sun, 6 Oct 2019 21:35:14 +0000]
Add an explicit bounds check to crawl_view_buffer ()

This is what was crashing in #1166 / mantis 12069, but because it was
triggered by an invalid memory access, whether there was a crash was
very system/build-specific. This makes a similar out of bounds error
explicit in the future.

7 days agoRemove an ifdef related to seed selection
advil [Thu, 3 Oct 2019 20:10:57 +0000]
Remove an ifdef related to seed selection

This never really worked right anyways, and gave errors on CPO

7 days agoFix dungeon feature quotes not visible (Vaamat, 12032)
Aidan Holm [Sun, 6 Oct 2019 21:05:29 +0000]
Fix dungeon feature quotes not visible (Vaamat, 12032)

7 days agoAdd keybind to clear player name (kitchen_ace, 12084)
Aidan Holm [Sun, 6 Oct 2019 19:52:53 +0000]
Add keybind to clear player name (kitchen_ace, 12084)

Using backspace to clear is not the best choice because a) it's kind of
weird for backspace to delete everything, and b) difficult to determine
when to delete everything and when to delete just one letter.

7 days agoFix invalid read causing map-view crash (jackofblades, 12069)
Aidan Holm [Sun, 6 Oct 2019 19:37:01 +0000]
Fix invalid read causing map-view crash (jackofblades, 12069)

7 days agoFix main menus not handling app quit (Goratrix, 12080)
Aidan Holm [Sun, 6 Oct 2019 18:23:58 +0000]
Fix main menus not handling app quit (Goratrix, 12080)

7 days agoFix empty high scores menu (Goratrix, 12080)
Aidan Holm [Sun, 6 Oct 2019 18:15:13 +0000]
Fix empty high scores menu (Goratrix, 12080)

The reported bug was caused by there being no focused UI widget, so the
escape key was never handled. I really need to revisit that whole focus

I also added in a placeholder text label for when there are no
highscores, explicitly stating the fact.

10 days agoClean up a function
Umer Shaikh [Thu, 3 Oct 2019 18:04:11 +0000]
Clean up a function

Change the function is_habitable_feat to an equivalent formulation which is
simpler and idiomatic.

10 days agoRefactor and improve UI widget iterators
Aidan Holm [Tue, 1 Oct 2019 17:36:32 +0000]
Refactor and improve UI widget iterators

This removes the honestly quite hacky container iterator implementation
which deferred at runtime to a heap-allocated implementation class.
Instead, each container type gets their own iterator. If you have a base
class pointer and you want to iterate over it, the new foreach() helper
function does that. It's a little ugly, but much better than before,
especially since iterating over a derived type is the common case.

10 days agoDon't include debug drawing in release builds
Aidan Holm [Thu, 3 Oct 2019 14:45:37 +0000]
Don't include debug drawing in release builds

10 days agoAdd widget margin debug drawing
Aidan Holm [Thu, 3 Oct 2019 11:53:41 +0000]
Add widget margin debug drawing

10 days agoFix off-by-one error in mouse hover handling
Aidan Holm [Thu, 3 Oct 2019 11:53:25 +0000]
Fix off-by-one error in mouse hover handling

10 days agoSimplify code
Aidan Holm [Thu, 3 Oct 2019 11:29:35 +0000]
Simplify code

10 days agoFix startup menu spacing issues
Aidan Holm [Thu, 3 Oct 2019 11:26:32 +0000]
Fix startup menu spacing issues

This fixes a bug where there was no margin between the header text and
the name entry row. This also replaces some conditional minimum heights
with proper margins.

11 days agoUpdate descriptions for Fedhas (Snack ⑨)
gammafunk [Wed, 2 Oct 2019 19:40:21 +0000]
Update descriptions for Fedhas (Snack ⑨)

Update descriptions for the god and the general description of its
powers, and update the descriptions for all ability to mention the
affects of Invocations training.

[skip ci]

11 days agoUpdate the descriptions for Sif Muna (Goratrix)
gammafunk [Wed, 2 Oct 2019 19:38:40 +0000]
Update the descriptions for Sif Muna (Goratrix)

The god and god power descriptions were still based on the previous
iteration of Sif.

[skip ci]

11 days agoFix display of detected gold on the minimap (11950)
Nikolai Lavsky [Fri, 14 Jun 2019 11:09:14 +0000]
Fix display of detected gold on the minimap (11950)

Currently, there are several Gold Sense-related bugs:
* on webtiles, detected gold is not displayed on the minimap;
* on local tiles, it disappears from the minimap after reloading the
  game and after reentering a floor;
* on console, it's not possible to scroll the map in the X mode to see
  all detected piles of gold on a new level.

This happens because now update_item_at() runs more than once for each
pile of gold.

Prior to 063869c, the gold detection code from,
which contains update_item_at(), run only once for each new level.
After that commit and after 4488db6, the gold detection code, which is
now in, runs twice when the
player enters a new floor. First, it runs as a delayed action, then it
runs for counting the generated gold (both calls come from

When it's called the first time, gozag_detect_level_gold() sets the
MAP_DETECTED_ITEM flag for each pile of gold, so they would appear on
the minimap. When gozag_detect_level_gold() called after that,
clear_item() removes this flag from the piles, and, since
env.map_knowledge() already knows about those piles,
gozag_detect_level_gold() won't set the flag again.

The code path is -> -> map-cell.h:set_item() ->

Unlike webtiles, local tiles update the minimap only after the first
call, so detected gold appears on the minimap, but only until a current
level is reloaded.

This commit makes it safe to call gozag_detect_level_gold() multiple
times: update_item_at() will be called only for undetected piles of

Also, force update of the minimap so piles of gold generated in new
Abyss regions are displayed too.

11 days agoFix wizdump loading when rotted or Gozag follower.
EC2 Default User [Mon, 15 Jul 2019 05:29:54 +0000]
Fix wizdump loading when rotted or Gozag follower.

Recognize "HP:" and "MP:" as mourge line starts.
Recognize Gozag which doesn't have a piety meter, causing the God line
to only have 8 fields.

11 days agoRemove an unused function for Dithmenos conducts
gammafunk [Tue, 1 Oct 2019 23:10:20 +0000]
Remove an unused function for Dithmenos conducts

Since Dith no longer cares about sources of fire, this function is
unused. A similar function that tests for fiery monsters by monster
class is still necessary for resistance checks.

11 days agoRework damage of ballistomycete spores
gammafunk [Fri, 20 Sep 2019 17:24:12 +0000]
Rework damage of ballistomycete spores

Currently the spore damage is fixed at 3d15, which is pretty high when
the 3* Grow Ballistomycete becomes available. This commit incorporates
Invocations skill into the spore explosion damage and decreases the
initial damage.

The new explosion damage is 3d(5 + spore HD), with spore HD ranging from
1 at 0 Invocations to 28 at Invocations 27. Hence the max damage at 27
Invocations is 3d33, which is very similar to max spell-power Fireball.

11 days agoFedhas rework part 11: simplify conducts
gammafunk [Wed, 11 Sep 2019 18:53:18 +0000]
Fedhas rework part 11: simplify conducts

Fedhas used to care about corpse-violating spells or items, a minor
conduct thematically connected to how piety was gained for this god. Now
that Fedhas appreciates kills, this conduct doesn't make thematic sense.
It was also too minor a conduct, so the two best options are removing it
or expanding it to a more significant set of conducts thematically
connected to the current god.

One option is making Fedhas hate all of necromancy. This is similar to
the removed no-fire-magic conduct for Dith, but it affects a much larger
number of spells in a school that's one of the strongest.
Unfortunately, the reasons for current Fedhas hating necromancy are a
bit tough to justify. Something about necromancy disrupting the natural
cycle of life and death in nature is a bit sketchy when so many other
things could do this.

Another option is to make Fedhas a good god, which introduces some
gameplay changes as well as an even more pervasive set of conducts.
Unfortunately, Fedhas is a god that's significantly stronger early on
relative to how strong they are later in the game. Since being a good
god would remove any wrath effects at all for most god swaps and even
allow retaining piety for switches to the good gods that are stronger
than Fedhas later on, this opens up a lot of no-brainer god switches.

In the end, I wasn't satisfied with either option, so for now I'm simply
removing Fedhas' conducts related to undead worhsipers and corpse
violation without replacement. This means that ghouls, mummies, vampires
and those unblessed with the mighty lich form can now worship Fedhas.
I'm open to re-adding something like the no-necromancy/undead conduct or
another interesting conduct if details can be properly hashed out.

Fedhas also had a minor conduct related to letting a permanent ally die
which I've also removed. Fedhas no longer makes permanent allies, so
this conduct no longer makes sense. Fedhas still gives penance if you
kill an actual plant or a summoned ally, of course.

11 days agoFedhas rework part 10: Grow Oklob ability
gammafunk [Wed, 11 Sep 2019 18:52:48 +0000]
Fedhas rework part 10: Grow Oklob ability

A 5* ability to summon an oklob plant at a smite-targeted location
within radius 2 for a cost of 6 piety. The HD of the oklob is increased
by 1 for each level of Invocations skill, which increases its summon
duration, its HP, the damage from its Spit Acid ability, as well as the
frequency with which it uses Spit Acid. These aspects are all done in
the same way as Fedhas' previous Evolution ability had Invocations
influence oklobs.

This is not an especially creative ability, but it's fun to play with
strong stationary allies. At a cost of 6 piety, a player at 6* could
make quite a few oklobs, so it's still possible to make a large group
for a single fight on e.g. Zot:5.

11 days agoFedhas rework part 9: Overgrow ability
gammafunk [Wed, 11 Sep 2019 18:51:00 +0000]
Fedhas rework part 9: Overgrow ability

A 4* ability that transforms any (non-permarock) walls, trees, doors, or
diggable solid features in a 3x3 smite-targeted area into plant allies
at a cost of 12 piety. The created monster is a summon, but the wall is
permanently destroyed.

This commit implements a targeter UI that only shows cells as affected
if they contain a wall that's a valid target for Overgrow. To be
affected, a wall must be in LOS and not blocked by a feature that blocks
translocations (e.g. clear walls). Open doors won't be affect if they
contain a monster, and if it turns out there was an invisible monster in
the open door, the ability will fail but still use piety.

Currently the set of possible plant allies is weighted towards oklob
saplings, wandering mushrooms, and burning bushes, with lower chances
for ballistomycetes and oklob plants. The plant HD is increased by 1
with each level of Invocations, which for oklob saplings, burning
bushes, and oklob plants will give more damage per use of their
abilities, and oklob plants will get an increase in their "spit" rate.
All monsters will get increased HP and summon duration with Invocations.

11 days agoFedhas rework part 8: remove Rain
gammafunk [Wed, 11 Sep 2019 10:25:11 +0000]
Fedhas rework part 8: remove Rain

Part of what Rain does is allow creation of plants, but this is no
longer relevant, since the other Fedhas ally creation abilities don't
need plant intermediaries. The other prominent aspect of Rain is
permanent creation of deep water, but this leads to a lot of luring. The
new Wall of Briars ability provides some instantaneous limitation of
monster movement, but in a way that doesn't make permanent terrain
changes and hence less encourages luring.

11 days agoFedhas rework part 7: rework Reproduction
gammafunk [Wed, 11 Sep 2019 09:24:18 +0000]
Fedhas rework part 7: rework Reproduction

This commit replaces Fedhas' Reproduction with Grow Ballistomycete, an
ability that creates a summoned ballistomycete at any smite-targeted
location within radius 2 at a cost of 5 piety. Ballistomycetes have been
simplified in the previous commit and now use their Sporulate ability to
create spores that try to reach their target in order to explode.

The explosion radius has been reduced to 1, so this combined with more
flexibility in positioning will make it easier for players to avoid the
explosion. If explosion avoidance ends up still being too big an issue,
we could have a Fedhas passively protect players from the explosion to
some degree.

Ballistomycetes get increased HD and duration with Invocations, gaining
1 HD per level of the skill. The only effect of this HD increase at
present is more HP. We probably don't want to increase the usage rate of
Sporulat like we do for Oklob Plant's spit acid, since rapidly creating
too many spores will create...a lot of explosions.

Fedhas wrath places spores around corpses using some of the same
functions that were previously used for Reproduction. Hence these have
been moved to It would probably be best to simplify this
wrath by creating durably summoned ballistomycetes instead, but I'm not
doing that for now.

11 days agoFedhas rework part 6: simplify ballistomycetes
gammafunk [Tue, 10 Sep 2019 06:23:24 +0000]
Fedhas rework part 6: simplify ballistomycetes

Ballistomycetes (ballistos) are complicated monsters that grow based on interactions
with the spore monsters. Spores leave mold as they move, which can give
rise to the production of new ballistos. This set of behaviors
fell into the realm of "complexity for the sake of complexity". One had
to wait a while for this "reproduction" to play out, only to get a few
more ballisto spores. Now that we're putting stronger limits on
ally usage through use of summons, it's a good time to simplify the way
ballistos and their spores work.

This commit removes the reproduction aspect of ballistos, removes mold
itself, and simplifies ballistos down to one type of monster.
Additionally, ballistos now have a Sporulate natural ability they
occasionally use to create a single spore as a short-lived summon. The
spore will seek after the ballisto's target and explode upon hit, still
producing the damaging explosion that applies confusion to living

A subsequent commit will make a Fedhas active ability to let the player
to create a ballisto summon, and this will replace Fedhas' Reproduction.

11 days agoFedhas rework part 5: remove Evolution
gammafunk [Tue, 10 Sep 2019 04:27:31 +0000]
Fedhas rework part 5: remove Evolution

As per the Fungal Bloom and Growth ability removals, we don't use plants
as intermediaries for creating allies. New abilities to create some of
these monsters as summons directly will be added in future commits.

11 days agoFedhas rework part 4: remove Growth
gammafunk [Tue, 10 Sep 2019 02:49:15 +0000]
Fedhas rework part 4: remove Growth

Fedhas will use summons to create all allies instead of creating
permanent ones using actual plant monsters as intermediaries. Hence
Growth, also referred to as using the descriptor `RING_OF_PLANTS` in the
source, is no longer necessary.

11 days agoFedhas rework part 3: remove Sunlight
gammafunk [Mon, 9 Sep 2019 06:05:46 +0000]
Fedhas rework part 3: remove Sunlight

Sunlight is a pretty tedious to use ability that strongly overlaps with
TSO. Removing shallow and deep water when flight is extensively
available is also not especially interesting.

This adds a minor version tag to handle save compatibility, since we're
removing a member of the global env that maps sunlight-affected squares.

11 days agoFedhas rework part 2: Wall of Briars ability
gammafunk [Mon, 9 Sep 2019 05:30:55 +0000]
Fedhas rework part 2: Wall of Briars ability

A 2* ability that encircles the player with summoned briar patches. The
player can fire through these plants, and the briars damage monsters
that attack them. Monster AI is changed so that hostile monsters always
try to attack briars that are friendly to the player.

Only floor or shallow water tiles that have no monsters are viable
summon locations. The briar patches' HP scale with Invocations by adding
1 HD with each level of this skill.

11 days agoFedhas rework part 1: piety gain
gammafunk [Mon, 9 Sep 2019 04:48:54 +0000]
Fedhas rework part 1: piety gain

Fedhas is a plant-themed god originally intended to support range
combat. The god gives you plant allies that you can move and fire
through allows you to create water to impede monster movement.
Unfortunately the current design gives access to too many allies that
are strong enough to carry the player through much of the game. These
are either permanent or long-lived yet are stationary or have movement
limitations, things that together encourage the player to lure monsters
to specific locations. As a result, Fedhas has a tedious play-style, and
this is reflected in the god's usage rate among players.

This commit is the first in a set that rework the god but in a way that
retains some of idea of supporting ranged combat. New Fedhas will use
only summoned allies and will allow less unfettered use of allies in
general. A github wiki page describing remaining and potential issues
with the rework is available here:

Part 1 removes Fedhas' appreciation of corpse decay as well as the
Fungal Bloom ability. I haven't touched the corpse violation, necromancy
conducts, and species restrictions for now, although those all need

11 days agoFix being able to pick out barbs while incapacitated (12065)
Richard Wardin [Tue, 1 Oct 2019 23:30:23 +0000]
Fix being able to pick out barbs while incapacitated (12065)

Carefully pulling out barbs now requires that
you can move (not paralyzed or petrified), aren't confused,
and aren't asleep.

[Committer's note: Closes #1162. Tweaked berserk message.]

11 days agoDe-randomize Golden Eye confusion spellpower
Edgar A. Bering IV [Wed, 2 Oct 2019 01:14:57 +0000]
De-randomize Golden Eye confusion spellpower

This random power is a legacy dating back to their creation. The commit
log doesn't describe why Confusion Gaze should work this way instead of
with a normal confuse spellpower and a normal MR check. Now that
monster spell success chance is displayed, this randomization had the
side effect of making the success chance display wrong.

Confusion Gaze was the last monster spell with monster spellpower
randomization; this commit cleans up some of the code, but there is a
larger refactor possible that is left undone.

Closes #1160

11 days agoRemove troves asking for scrolls of identify
NormalPerson7 [Sat, 26 Jan 2019 21:55:07 +0000]
Remove troves asking for scrolls of identify

Beyond the early game, once almost all the potions and scrolls in the
game are identified, scrolls of identify become a convenience tool more
than anything else; it is simply easier and faster for the player to
identify this unknown ring on the floor using a scroll than to find
something to drop, pick the ring up, put it on, decide it's useless,
drop it, and pick up the other thing. This especially applies when the
player has 5+ spare identify scrolls in their inventory, which is fairly
common around the time of Vaults and Depths.

Troves asking for identify scrolls encourages players to employ the
tedious second behaviour, and to some extent take risks with
wear-identifying artefacts, in order to horde the scrolls and eventually
enter the trove. Additionally, being reduced to 0 identify scrolls by a
trove hardly makes a significant difference to the strength of a
character - rather it simply means once again that the tedious
wear-identification process is required.

Note that the wear-identification of artefacts that is encouraged by
this isn't particularly dangerous beyond the early game anyway. The only
bad effects are *Drain and *Contam, where *Drain is unlikely to have a
significant impact, and *Contam may cause 1 malmutate before wearing
off that the player can probably eliminate by using a mutation potion.

Hence, remove troves asking for scrolls of identify, because they
encouraged tedious behaviour instead of meaningful decision making.

11 days agoAdd more flavour to the Halloween welcome spam
theJollySin [Wed, 2 Oct 2019 00:07:38 +0000]
Add more flavour to the Halloween welcome spam

11 days agoVary orb descriptors in the welcome text
theJollySin [Wed, 2 Oct 2019 00:07:02 +0000]
Vary orb descriptors in the welcome text

11 days agoAdd more random uselessness messages
theJollySin [Wed, 2 Oct 2019 00:22:40 +0000]
Add more random uselessness messages

[Committer's note: Closes #1161. Removed messages that suggested some in-game
 happening or portal vault. Random uselessness is for flavor, we don't
 want it to intentionally confuse. Squashed and re-organized the PR into
 this and the next two commits.]

11 days agoClean up Paradise Lost quote citations
theJollySin [Sat, 21 Sep 2019 20:41:59 +0000]
Clean up Paradise Lost quote citations

11 days agoAn assortment of item and location quotations
theJollySin [Fri, 20 Sep 2019 00:40:20 +0000]
An assortment of item and location quotations

[Committer's note: Closes #1153. Squashed and revised the PR.]

12 days agoRephrase MP-powered wands player alert (#984)
srvanmeter87 [Mon, 12 Aug 2019 11:12:10 +0000]
Rephrase MP-powered wands player alert (#984)

[Committer's note: Closes #984, #1133, #1143]

12 days agoFix sealed-off sensed monsters stopping travel (gammafunk)
Aidan Holm [Tue, 1 Oct 2019 19:53:01 +0000]
Fix sealed-off sensed monsters stopping travel (gammafunk)

Sensed monsters were handled with a separate check that did not take
into account whether they were reachable. The new way uses the list of
monsters returned by get_nearby_monsters, which does test reachability.

12 days agoFix clinging monsters breaking autoexplore (shalmezad, 11924)
Aidan Holm [Tue, 1 Oct 2019 18:55:26 +0000]
Fix clinging monsters breaking autoexplore (shalmezad, 11924)

Clinging monsters in vaults could pathfind their way through the runed
door, and were therefore marked as not safe, preventing autoexplore.
This was caused by mons_traversable() sidestepping checks for runed
cells and uninhabitable cells in mons_can_traverse() if the monster can
cling. I've just hoisted them out here.

In addition, cell_can_cling_to() only checks physical location,
and so couldn't check whether a feature is passable by a given monster.

Last but not least, the call to cell_is_clingable() previously passed
the wrong parameter.

12 days agoUse quads for line drawing (advil)
Aidan Holm [Tue, 1 Oct 2019 08:41:08 +0000]
Use quads for line drawing (advil)

Line drawing with GL_LINES seems to be subject to a number of rendering
bugs and limitations that vary by OS and driver. This commit renders all
lines with a single quad. This removes support for arbitrary lines that
are not horizontal or vertical, but we don't currently draw any such

12 days agoTidy up some duplication and incorrect naming
Aidan Holm [Tue, 1 Oct 2019 05:19:57 +0000]
Tidy up some duplication and incorrect naming

12 days agoFix difficult-to-read main menu labels on console (advil)
Aidan Holm [Mon, 30 Sep 2019 18:57:31 +0000]
Fix difficult-to-read main menu labels on console (advil)

Menu labels previously relied on's adjustment of identical
foreground and background colours, which didn't work properly with
allow_extended_colours = true, since white and lightgrey are not

This commit manually adjusts all button label colours on focus change,
both foreground and background. This fixes a bug on the weapon selection
menu on console where the background did not extend under the listed
aptitudes, due to them being in a separate text widget. It also cleans
up the hacky code that was previously used to recolour the buttons.

You can specify the foreground colour to use when focused; the default
is black. This code assumes that all text widgets have a single colour,
and will not correctly restore multi-coloured text on unfocus.

12 days agoRefactor curses colour and attr munging
Aidan Holm [Mon, 30 Sep 2019 17:23:07 +0000]
Refactor curses colour and attr munging

12 days agoLet Trog and Okawaru gift regular boomerangs and javelins
NormalPerson7 [Sat, 10 Aug 2019 18:36:11 +0000]
Let Trog and Okawaru gift regular boomerangs and javelins

Previously, when tomahawks and javelins had no innate special
properties and each had about 5 different brands, it made sense that
Trog and Okawaru should always gift branded tomahawks and javelins.

However, there are now only two different types of javelin: plain and
silver; and three different types of boomerang: plain, silver and
dispersal. This behaviour led to all such ammo gifts being silver
javelins, or silver or dispersal boomerangs, which seems a little
unbalanced. Additionally, new javelins are equivalent to branded
penetration javelins previously, and likewise with boomerangs and
tomahawks of returning, so this behaviour no longer makes sense.

As such, Trog and Okawaru now gift regular boomerangs and javelins, with
these having weight 120. This means the chance of a javelin gift giving
silver javelins is reduced from 100% to 43%, and the chance of a
boomerang gift being branded is reduced from 100% to 33%.

This commit preserves Trog and Okawaru only gifting
curare/datura/atropa-tipped darts and not poisoned darts, and also
preserves the behaviour of ISPEC_GOOD_ITEM always producing branded
missiles, so as to not affect dungeon generation in any way.

[Closes #1131]

12 days agoAdd descriptions for awoken autumnal and dead trees
Nikolai Lavsky [Thu, 26 Sep 2019 18:46:36 +0000]
Add descriptions for awoken autumnal and dead trees

Use the same description as for regular awoken trees.

12 days agoDistinguish flammable and non-flammable trees
Nikolai Lavsky [Thu, 18 Jul 2019 19:06:29 +0000]
Distinguish flammable and non-flammable trees

Even though Summon Forest's trees cannot be burned since 0a4d0e94, their
description still mentioned that mechanic. Fix this and add a way to
distinguish summoned trees from regular ones in the x-mode.

Also, update a comment: trees cannot be disintegrated since 85f13f00.

12 days agoTiles for the staff of Battle (CanOfWorms)
Edgar A. Bering IV [Tue, 1 Oct 2019 04:33:41 +0000]
Tiles for the staff of Battle (CanOfWorms)

12 days agoThe unrand staff of Battle
olowin [Tue, 16 Apr 2019 21:18:55 +0000]
The unrand staff of Battle

A staff of conjuration with. It will automatically spawn a battlesphere
when monsters are in sight and automatically dismisses the battlesphere
on unwield. Trog hates it; using it to spawn a battlesphere is as bad as
casting a spell in Trog's eyes. Unlike an evokable this is real magic.

[Committer's note: Squashed and rebased; made the staff battlesphere
 have the same spellpower as the player's (to avoid weird re-casting
 incentives); removed +4 SH, it is one-handed on normal species.

 Closes #1040]

13 days agoDon't pull abyss terrain from the vestibule
advil [Mon, 30 Sep 2019 19:37:26 +0000]
Don't pull abyss terrain from the vestibule

The issue is that if the player hasn't visited the vestibule, a level
excursion there will trigger asserts regarding the up stairs, which
haven't been set up yet. This could be made conditional on having
visited the vestibule, but even for the abyss I'd rather avoid
dependencies on level traversal order.

13 days agoUse no_tele_into in a Bazaar map (wizard44)
gammafunk [Mon, 30 Sep 2019 19:21:07 +0000]
Use no_tele_into in a Bazaar map (wizard44)

The water (or lava) areas outside of the central area with shops needs
`no_tele_into` in order to prevent teleports from stranding players who
are amphibious or flying.

13 days agoRemove full_name logic from main menu
advil [Mon, 30 Sep 2019 16:59:04 +0000]
Remove full_name logic from main menu

These features were supposed to make typing the player name easier, but
they're very hard to predict from standard text box behavior, and also
buggy with names that are a partial match to another name. In addition,
the behavior pre-0.24 that this logic is based on seems to have been
fairly broken; at least I can't figure out the pattern from the UI in
older versions for when `full_name` is set to true.

Should replace this with some more of the standard text editing
shortcuts, e.g. ctrl-u.

13 days agoMain menu improvements and streamlining
advil [Mon, 30 Sep 2019 16:32:32 +0000]
Main menu improvements and streamlining

* move info about rc file off main screen -- without linewrapping this
  doesn't work well on either console or tiles.
* don't explain arrow keys and enter
* use some of the reclaimed space to improve description of [tab], add
  description of [ctrl-p]. This latter is mainly just so players know
  where to find the rc file info.

Eventually the canonical place to find the rc file should be an about
screen, not the startup log.

13 days agoReduce popup padding on small screens (alexjurkiewicz)
Aidan Holm [Mon, 30 Sep 2019 13:45:43 +0000]
Reduce popup padding on small screens (alexjurkiewicz)

13 days agoFix newgame menu highlight width on remote console
Aidan Holm [Mon, 30 Sep 2019 06:20:08 +0000]
Fix newgame menu highlight width on remote console

On TILEWEB=y console games, the text widget was not expanding to take
the full width of the box it was contained in. When its background
colour was changed, only the section of the menu button with letters
changed colour.

This isn't a problem in pure console builds because in that case the
text widget is the direct child of the MenuButton widget and so takes
its full size.

13 days agoFix memorise menu entry letter colour
Aidan Holm [Mon, 30 Sep 2019 05:16:28 +0000]
Fix memorise menu entry letter colour

Previously, the entry letter was always lightgrey; now it is darkgrey if
the spell is not castable, etc.

13 days agoRefactor memorise menu entry colour code
Aidan Holm [Mon, 30 Sep 2019 05:16:05 +0000]
Refactor memorise menu entry colour code

13 days agoRemove debug logging
Aidan Holm [Mon, 30 Sep 2019 05:10:21 +0000]
Remove debug logging