7 months ago0.25.1 changelog editing 0.25.1
advil [Fri, 17 Jul 2020 12:52:24 +0000]
0.25.1 changelog editing

7 months agoFix foxfire attacking out of LoS
Byrel Mitchell [Thu, 4 Jun 2020 05:15:03 +0000]
Fix foxfire attacking out of LoS

Currently a foxfire will attack a monster it's aggroed to that is just outside LoS (while the foxfire is in LoS.) Since a foxfire attacks 5 times per turn for 1 damage, this is actually somewhat usefully abusable in the early game vs 0 AC monsters (you can get 3-4 extra damage out of a foxfire by manipulating this.)

This change makes it follow the rules of normal summons and refuse to attack monsters out of player LoS.

(cherry picked from commit af969148604becd10060816720894fcfec79d152)

7 months agoRevert "Prevent training summoning under Sacrifice Love"
advil [Fri, 17 Jul 2020 01:49:20 +0000]
Revert "Prevent training summoning under Sacrifice Love"

Missed that this was not a pure bugfix commit -- reverting.

This reverts commit f0d6da04370a6163dbe00d54c7ce539439dbc313.

7 months agoRevert "Don't offer sacrifice summoning after sacrificing love"
advil [Fri, 17 Jul 2020 01:48:51 +0000]
Revert "Don't offer sacrifice summoning after sacrificing love"

Missed that this was not a pure bugfix commit - reverting.

This reverts commit 8aa59fa4e09f5d78c8aeeb1ec9dfe66bbea53723.

7 months agoDisable cursor validity checks on windows
advil [Fri, 17 Jul 2020 00:29:32 +0000]
Disable cursor validity checks on windows

This obviously isn't ideal, but I can't figure this out with the limited
tools / speed I have in my VM. Probably what is going on is that one of
the lower-level windows-specific drawing calls is leaving the cursor in
an odd state before a viewwindow call.

This change should be basically safe in that the problem isn't in the
higher level code, which at this point is quite heavily exercised on

(cherry picked from commit b0d7edea472d90493853c1981a6d6705062f5f19)

7 months agoFix actions retries (alexjurkiewicz)
advil [Fri, 17 Jul 2020 00:18:40 +0000]
Fix actions retries (alexjurkiewicz)

(cherry picked from commit 19ad4210821fb249151df70518189493f6084c76)

7 months agoTweak windows console code
advil [Thu, 16 Jul 2020 19:31:23 +0000]
Tweak windows console code

Includes a refactor of clrscr into a _sys version and a generic version.

(cherry picked from commit a50eacd245b0c265c2b238a169e8a08fa70e4b57)

7 months agoRename MainiacJoe in the CREDITS
Edgar A. Bering IV [Thu, 16 Jul 2020 00:30:37 +0000]
Rename MainiacJoe in the CREDITS

(cherry picked from commit ee15e7bf9339b9c74143827e059819c43b87de5d)

7 months agoExclude from lint
advil [Wed, 15 Jul 2020 18:23:13 +0000]
Exclude from lint

Sort of too bad because this is one of the few files that was passing,
but something weird is happening with flake8-isort -- it seems to be
producing an error for a missing blank line, but when I add the blank
line running `isort` removes that line. Some day someone should do a
real lint pass sorting out this stuff but it is not me, today. (In this
case the solution may be not to use flake8-isort?)

(cherry picked from commit e2f3d4a7ca955ff130fda8b6440f5ff436b3dbdb)

7 months agoDon't leak information about lig potions (#12317, andrew)
Alan Malloy [Wed, 15 Jul 2020 18:06:20 +0000]
Don't leak information about lig potions (#12317, andrew)

(cherry picked from commit 2e2437650718bc90e2daef18a7e816be73b458a2)

7 months agoFix a bad vector index in apportion (Nasst / 12316)
advil [Wed, 15 Jul 2020 14:48:50 +0000]
Fix a bad vector index in apportion (Nasst / 12316)

The actual fix is moving the final terrain check inside the while loop,
but I added a whole bunch of comments and some minor restructuring to
this code in the process. (This fix is somewhat different than the patch
in 12316, because I do in the end think using the pop_back step better
reflects apportion logic -- I have changed some comments based on this.)

(cherry picked from commit 6a4b283d6720b27e91fc87278fed69da97257ffa)

7 months agoRemove old death by lava/water code
advil [Tue, 14 Jul 2020 21:32:15 +0000]
Remove old death by lava/water code

This code is mostly preempted by other checks elsewhere (e.g.
untransforming over dangerous terrain is handled directly), but in very
rare occasions, usually because of a bug, something allows this code to
run and then there's an instadeath. Just replace it with an emergency
flight activation.

(cherry picked from commit 4e7fcc93f05cb2b249772734a97f1de15c92022f)

7 months agoUpdate Makefile for cmd-name.h
advil [Tue, 14 Jul 2020 13:21:26 +0000]
Update Makefile for cmd-name.h

Unchanged since enum dispersal, looks like.

(cherry picked from commit f84a5881625e300a3a47d6924ddf2cc0aad31e4b)

7 months agoDon't offer sacrifice summoning after sacrificing love
Kate [Sat, 4 Jul 2020 03:01:11 +0000]
Don't offer sacrifice summoning after sacrificing love

(cherry picked from commit 602cf09890b685f0e2c0bdc552676f80f8dbd8db)

7 months agoPrevent training summoning under Sacrifice Love
Kate [Sat, 4 Jul 2020 03:19:42 +0000]
Prevent training summoning under Sacrifice Love

Also lets it give extra piety in cases where summoning skill had already
been trained.

(cherry picked from commit 2ad3f57c505cca1715a6479785b7d3abb2fbc455)

7 months agoDon't let Xom add to weight 0 innate mutations (Lightli)
advil [Sat, 11 Jul 2020 23:25:10 +0000]
Don't let Xom add to weight 0 innate mutations (Lightli)

Other code paths check weight differently than this but Xom uses the
weight calculations in _accept_mutation, and they provide a small chance
of adding on to any innate mutations that are weight 0. One could
imagine that this might have once been intended (because Xom) but it's
not written in such a way that makes me think this is likely; I'm also
pretty sure Xom can't remove such mutations.

(cherry picked from commit db952e5dbcaf5b97ed4ffa72fcb6239da759f48f)

7 months agoDon't write .prf files for tests
advil [Sat, 11 Jul 2020 20:09:20 +0000]
Don't write .prf files for tests

It's super annoying to have this overwrite whatever you last actually
did with "test the Mummy" or whatever.

(cherry picked from commit 3b0d5afba56082e59f687fd0f113e583c5b1ebe7)

7 months agoDon't recursively crash during tests
advil [Sat, 11 Jul 2020 20:01:02 +0000]
Don't recursively crash during tests

This does actually get called even with Options.no_save set, something I
would not have imagined.

(cherry picked from commit db804b0e95b89fc6567e44bc148a0789296dd622)

7 months agoImprove descriptions of Ash's passive abilities (#12245)
Kate [Sat, 11 Jul 2020 19:49:42 +0000]
Improve descriptions of Ash's passive abilities (#12245)

(cherry picked from commit 21ffff02790fbb9ee35db7431a0a39fb5dabf1c4)

7 months agoFix a monster equipment DES error
gammafunk [Sat, 11 Jul 2020 14:41:30 +0000]
Fix a monster equipment DES error

(cherry picked from commit 3af348c12c07f5acf1a4a754154ffea9c31079a5)

7 months agoIncrease size of zig permastore the easy way
advil [Fri, 10 Jul 2020 18:37:53 +0000]
Increase size of zig permastore the easy way

With zig ghost floors, the game often needs to pull a lot of ghosts at
once. This commit increases the backup permastore size to the max (127)
by simply copying existing permastore ghosts from pan, tomb, and depths.
This is in lieu of a more involved ghost update which will take longer.

I chose to include some depths bones (about 15) to give a tiny bit more
level spread. It's still very high but this gives a small chance to have
an xl 15-25 ghost from time to time, if the floor is built drawing on
the permastore. (The average death xl for recent is 26.64 so it's
possible I've lowered this too much, but the average will still be quite

(cherry picked from commit 3a471323bd44f40093d6f6b03562599fb37dbc3c)

7 months agoLet `--bones merge` respect MAX_GHOSTS
advil [Fri, 10 Jul 2020 18:37:03 +0000]
Let `--bones merge` respect MAX_GHOSTS

The file size unfortunately uses a short, so this is meaningful when
trying to generate relatively large bones files.

(cherry picked from commit a5a89cf34b9303f6f5a57582c09c3f798f7c8805)

7 months agoDon't let level excursions affect env.old_player_pos
advil [Fri, 10 Jul 2020 16:10:06 +0000]
Don't let level excursions affect env.old_player_pos

Independent of the related bug fixed in 012bc58e2 (which had the same
practical impact), this let you use a level excursion to force a monster
to forget you, because it saved the wrong position after the level
excursion. A bit hard to use effectively, but would have an effect on
any out-of-los monsters when stairdancing on a single stairs, for

(cherry picked from commit 8d1dacec00770142f5d0f388238e70f48d3b8009)

7 months agoDon't detect gozag gold on level excursions
advil [Fri, 10 Jul 2020 15:41:00 +0000]
Don't detect gozag gold on level excursions

This commit is targeting a bug where a level excursion to an unvisited
level can trigger gold detection, which can happen via abyss excursions.
While fixing this I noticed a similar potential issue with the
shake_off_monsters call.  I still think collapsing all of these modes
into this call is more trouble than gain, needs some larger refactoring

Resolves #1461

(cherry picked from commit 012bc58e2d2b8c2286435bec4792dc833c9b613d)

7 months agoUpdate credits
advil [Thu, 9 Jul 2020 17:27:33 +0000]
Update credits

(cherry picked from commit 47e9e6152504b57bc3c7af0878137b7b9ef9fc6a)

7 months agoDraft changelog for a 0.25.1 release
advil [Thu, 9 Jul 2020 14:56:47 +0000]
Draft changelog for a 0.25.1 release

7 months agoAdjust Sprint III cloud generators
Eugene Abramchuk [Mon, 6 Jul 2020 20:58:08 +0000]
Adjust Sprint III cloud generators

Fixes issue 12302. Existing cloud generators kill sleeping monsters in several places across the map within the first few hundred turns. This tones down aggressive cloud spawn, while keeping the danger in the affected rooms.

(cherry picked from commit 6423518015f9be713d24bdbe784751519045bac4)

7 months agoFix some outdated wording in hints mode
advil [Thu, 9 Jul 2020 12:47:26 +0000]
Fix some outdated wording in hints mode

This is probably going to be fixed as part of a more involved commit in
trunk, so nothing to cherry-pick.

8 months agoFix a leftover scarf of cloud immunity (Yermak)
Nikolai Lavsky [Tue, 7 Jul 2020 09:52:27 +0000]
Fix a leftover scarf of cloud immunity (Yermak)

As a followup to f75c35ca, this commit replaces a scarf of cloud
immunity with a scarf of repulsion in the Cloud Mage wizlab.

(cherry picked from commit f801a5604658bdd96471b34bde549a9ab13903c6)

8 months agoAdd a note when acquiring items.
wheals [Tue, 7 Jul 2020 11:06:57 +0000]
Add a note when acquiring items.

Now that the items are pre-identified, it's some nice information to put
in the chardump.

(cherry picked from commit 1848e9ed2a901c645a010498778d0ac9d5f1e0ff)

8 months agoConditionalize you.on_current_level in load_level
advil [Mon, 6 Jul 2020 02:34:09 +0000]
Conditionalize you.on_current_level in load_level

Previous commit will mess up excursions

(cherry picked from commit 2964c8cf50809e18ec200cf85efae36a8343af79)

8 months agoFix full pregeneration (alexjurkiewicz)
advil [Mon, 6 Jul 2020 02:29:53 +0000]
Fix full pregeneration (alexjurkiewicz)

This was actually broken in 1937b064fbca (in more subtle ways than a
crash), and the ASSERT in 93d59993c00 revealed that it was broken.

(cherry picked from commit a02c8d4030736720d95a5b837e1d8394bebe28e2)

8 months agoRemove a dubious string::reserve call in websockets
advil [Sun, 5 Jul 2020 17:53:22 +0000]
Remove a dubious string::reserve call in websockets

In my profiling this is doing *way* more harm than good in the context
of _send_map and _send_everything, and a very large map send drops from
4-500ms to under 100ms when I remove it. This is obviously very
dependent on stdlib implementation but my guess is that trying to
micromanage memory allocation in fairly small increments like this is
always going to be a bad idea. It's possible that a larger reserve call
would do some good before sending the whole map, or before

Also, a minor simplification for appending a single character.

(cherry picked from commit 55556182f22939a71ff4d840450d56b6c931d976)

8 months agoExplicitly set the cursor region to GOTO_CRT for map view
advil [Fri, 3 Jul 2020 15:33:19 +0000]
Explicitly set the cursor region to GOTO_CRT for map view

I think this is a better general fix than 899df634c; it's just that
right now only webtiles (that I know of) happens to trigger a
`viewwindow` call during map view while the map is up. But since it
happens as a side effect often, it may be best to be prepared.

(cherry picked from commit a22346179c50a2660a224e21f1a48a3d3deb061a)

8 months agoSave cursor position before clrscr
advil [Fri, 3 Jul 2020 15:32:26 +0000]
Save cursor position before clrscr

This is yet another thing that can potentially leave the cursor
somewhere very odd

(cherry picked from commit 5bf1febfd2f7481d4b65214320e091293f6731bd)

8 months agoQuick fix for crashing map view in webtiles
advil [Fri, 3 Jul 2020 14:51:33 +0000]
Quick fix for crashing map view in webtiles

This may not be exactly right, but it stops the crashing for now.

(cherry picked from commit 899df634c59856130eb63198b7a13a6b29fc0a73)

8 months agoUse a smarter cprintf in
advil [Thu, 2 Jul 2020 03:18:06 +0000]
Use a smarter cprintf in

cprintf is not region aware, and so can easily leave the cursor outside
of the region it is writing to. One way it can do this is because if it
prints right up to the edge of the screen, it will wrap to the very
beginning of the next line. If the starting region is the mlist, this is
guaranteed to happen and leave the cursor in an invalid position. This
commit switches out cprintf for a region-aware version that will wrap
relative to the current region. (This existed but wasn't widely used and
needed some sprucing up.)

This commit also adds a bunch more ASSERTs, and minorly fixes up some of
the monster pane logic.

(cherry picked from commit 5c87645ba0722f6b9ca4a98618dccb5fb310580e)

8 months agoSet cursor region on fakecursorxy
advil [Wed, 1 Jul 2020 13:49:32 +0000]
Set cursor region on fakecursorxy

This was apparently a major factor in "invalid" cursor positions.
Basically, as far as I can tell, write_char_at leads to changes in
wherex() and wherey(), even without a cgotoxy call, and so all the other
checks will flag the results as invalid unless the region is updated.
This also makes the region value consistent after cursorxy regardless of

(cherry picked from commit 6b68d4d4d6cf2975e206260a11cde1d0a02882bc)

8 months agoTry to fix flash + input interactions once and for all (12292)
advil [Wed, 1 Jul 2020 01:00:43 +0000]
Try to fix flash + input interactions once and for all (12292)

I've tried previously to do some variant of this (RAII cursor state
restoring) in the past and it's always led to inexplicable crashes, but
this time maybe I've gotten it right. Basically, what was happening in
various ways is that redraw calls would lead to moving the cursor out
from under the input code when it goes to draw the current input string,
and it would try to draw at coordinates that are invalid for the current
region. One way this could happen is by setting a flash on the strong
`warning` which always appears in the annotate prompt (found in
Sentinel's rc file, see discussion in
Flashing calls viewwindow, which tends to leave the cursor in the mlist.
This commit ensures that viewwindow, flash, and a few other things will
always restore the cursor, and it also slightly improves the cursor
position sanity checking. It addresses several past related crashes,
such as d21a89c53800 (where now I've concluded that setting the cursor
region without moving the cursor is a bad idea, and probably led to
different out of bounds errors down the line).

Also, prevent flashing at the main menu.

(cherry picked from commit 9d1cb7d7011c624748e61eb606f54aeb9850ea8d)

8 months agoDon't let hints global state persist across restarts
advil [Tue, 30 Jun 2020 01:35:13 +0000]
Don't let hints global state persist across restarts

If you end a game in hints mode with a restart option in place, and then
load a game that would trigger certain unseen events (first item is a
good one), then the global state in `Hints` would lead to the hint
message being shown in the loaded game regardless of game type.

(While doing this fix I also notice that `Hints` has a bunch of
uninitialized state outside of hints mode...seems to be benign but this
could use some future cleanup.)

(cherry picked from commit 3d63440f564c44a29390fa42c97299253779a905)

8 months agoUse last game type for startup menu, cleanup
advil [Tue, 30 Jun 2020 01:17:18 +0000]
Use last game type for startup menu, cleanup

This is aimed at fixing a specific bug: with `restart_after_save`, if
you start a new game and then save, the name is (unexpectedly) cleared.
This is because of the static variable used here. However, this change
generally does a better job of selecting the default main menu for a
number of restart cases. The one thing I'm not sure about is that if a
sprint or tutorial game ends, it returns you to the submenu instead of
the main menu.

This commit also refactors a lingering static variable as a member

(cherry picked from commit dbaac098b9f9a9b6b9b197f409c2de90fdae96fc)

8 months agoFix epilogue reloading
advil [Mon, 29 Jun 2020 21:10:59 +0000]
Fix epilogue reloading

I still don't fully understand this bug, but under some circumstances,
despite the changes to caching in 50bb873abc7, vdefs contained mapdefs
that did not have the epilogue. (The easiest way to reproduce was to
save after a level with an epilogue is generated but before entiring,
fully quit crawl, reload the game, and enter the level. Restarting to
the main menu after saving wasn't enough.) This fixes the issue by fully
loading the vault to fill in the epilogue, which seems non-ideal, but I
infer that it may be expected from other cases where load() is called.
It may be worth revisiting just serializing the epilogue...

This was leading to a lack of milestones/entry announcements for wizlabs
when the epilogue reload failed.

(cherry picked from commit 4a859bdc29e1467350147016b25e0ca2efb97600)

8 months agoMark !stab useless under TSO (Yermak)
Nicholas Feinberg [Sat, 20 Jun 2020 04:48:20 +0000]
Mark !stab useless under TSO (Yermak)

(cherry picked from commit 01bf09ea8262ba59eb4ef9e4c5b6fd31e0790726)

8 months agoOptimizations for drawing many gold piles
advil [Sun, 28 Jun 2020 15:45:49 +0000]
Optimizations for drawing many gold piles

These optimizations hit points that are the heaviest special cases (as
revealed by profiling) for gozag characters in situations with lots of
enemies, e.g. megazigging.  They lead to measurable improvements but
things are still not exactly fast.

This commit is treating the symptoms, not the problem; the problem is
that viewwindow is called many, many times and each time it is called
rebuilds just about everything that is displayed, leading to some kind
of fairly bad polynomial penalty. For example, on a test gozag char that
is on a megazig 13, with ~130 items in view and only about 10 cells
stepped on, `stash_annotate_item` alone gets called 145000 times via
several different code paths when doing a full autoexplore to pick up
items; when just standing still and hitting esc there are still hundreds
to thousands of viewwindow calls. (So the reason special casing gold in
that function helps is because a big proportion of these items are gold
piles.) The real solution therefore should be to figure out how to not
rebuild this information on every single viewwindow call, and/or to call
viewwindow less. One starting point might be moving the show_init call
elsewhere (this entirely tears down and rebuilds map knowledge every
time). However, getting such a change right across all build targets is
not easy.

This commit may look like yak shaving, since gozag megazigging is not
extremely common, but the reason I'm focusing on it is that when someone
is megazigging on a server, the resulting cpu impact is quite noticeable
across everyone else currently playing to the point of causing mass
timeouts occasionally on a busy server. In my testing, which is not
representative of server scenarios, there is a 20% absolute speedup with
this commit (on a debug build) but cpu usage also suggests that the
resulting rendering code paths become more io-bound, so hopefully this
will lead to better sharing.

(cherry picked from commit 099a46c2171422d6735518827136cdc720fbe292)

8 months agoFix segfaults when casting spells from wizmode (11889)
Elliot Dronebarger [Fri, 29 May 2020 14:14:07 +0000]
Fix segfaults when casting spells from wizmode (11889)

In wizmode, attempting to cast summon mushrooms (a monster-only spell)
causes a segfault. This is because it's targeted on a foe, which is a
nullptr for wizmode monster casts.

(cherry picked from commit b94faee71778a1b2e47dc3e3e58120e268d1593d)

8 months agoShow full name for orc resurrection prompt
Gittourarmy [Sat, 30 May 2020 09:38:27 +0000]
Show full name for orc resurrection prompt

Previously, the players don't know the role of the dead orc if the one
is blessed, when they use resurrect.

For example, if you tried to resurrect Borug the orc warlord, then you
will see only Borug. The point is, if there is another orc corpse that
you don't know the role (possibly, just orc) and has its own name, then
player can make mistakes.

This fix may help Beogh players to use their ability in intended way.

(cherry picked from commit 33945c58c8954d6a2cb5596713832016b5022c10)

8 months agoFix scarf of harm not working
Goratrix [Mon, 22 Jun 2020 14:59:32 +0000]
Fix scarf of harm not working

Commit 19c8d55 added harm to scarves, but used the 'wearing' function,
which is only valid for getting jewellery subtypes. Need to use
'wearing_ego' to get the scarf ego instead.

(cherry picked from commit ea8168b82ca800ed68677786aa9987e05db3d308)

8 months agoOptimize some default autopickup lua code
advil [Sat, 27 Jun 2020 22:48:43 +0000]
Optimize some default autopickup lua code

Currently these functions are called a *lot* if there are many items on
the screen (potentially multiple times per item on the screen every
step), and so some of the heavier calls here (mutation check, item name)
ended up being hotspots in profiling.

(cherry picked from commit 49ad78631c29e0c5a001ce6dc963c36a4ed47273)

8 months agoFix loot in nicolae_gauntlet_exit_dead_adventurers
gammafunk [Mon, 29 Jun 2020 18:03:18 +0000]
Fix loot in nicolae_gauntlet_exit_dead_adventurers

These DES item definition errors were introduced when I reworked this
map's loot after it was adapted for the Gauntlet. They unfortunately
didn't cause fatal loading errors, otherwise they'd have been caught
sooner. The map has been working, but only when none of the dead
adventurer sets containing errors were chosen.

(cherry picked from commit 49b1be5409eab18a7e1912f37508a23abe640a39)

8 months ago0.25-specific seed fix for heliophobic_arrival_battle_scene
advil [Mon, 29 Jun 2020 14:21:12 +0000]
0.25-specific seed fix for heliophobic_arrival_battle_scene

This vault had two issues: (i) in the vault code, the number of rng
calls depended on player species (so could affect the seed differently
depending on whether the player is a corpse species). (ii) the corpse
generation code actually generates, places, and kills a monster, which
does all sorts of stuff; but the main impact is that it will along the
way generate weapons depending on species, which leads to substantial
differences in rng rolls per species.

In trunk I have fixed this in a general way; see 644bcb52. However, I
noticed that Yermak's recent turncount record during the tournament
(seed 10834663189915259185, see [1]) places this vault, and I wanted to
allow players to try out replaying this seed in the 0.25 branch (without
having to play 0.25.0). I have therefore chosen to stabilize seeds with
this arrival vault to always match the DD start in 0.25.0. (I looked for
more elegant ways of accomplishing the goal, but because of the
complexities of how corpses are placed this is the best I came up with.)
This will obviously affect other seeds as well, but 0.25.0 is still
available if people do want to go back and replay other species variants
of seeds with this vault.


8 months agoFixup in case a bug leaves a player in a wall
advil [Sat, 27 Jun 2020 18:11:19 +0000]
Fixup in case a bug leaves a player in a wall

Obviously this shouldn't happen in the first place, but when it does,
the game is pretty much stuck without manual save file repair (needing
both admin and dev work) because of an ASSERT in This
commit fixes up such games on load, by moving them preferentially to
seen stairs. (The reasoning is that when this happens, the crash is
likely to have put the player at an arbitrary position).  By doing this
on load, we should still get crashes that lead to this.

This is specifically aimed at this game:
where a crash during a level excursion stuck the player kind of randomly
(based on actual pos) on the level being viewed. The crash and setup for
this are addressed in other commits. I'm doing this generally because I
have manually fixed several games that get into this state somehow or
other in the past.

(cherry picked from commit 2bcdb004479263eae0a2acee5312cce703015e0c)

8 months agoAdd some sanity checks for flashes/more
advil [Sat, 27 Jun 2020 18:02:27 +0000]
Add some sanity checks for flashes/more

Right now, if a flash happens during a level excursion, it can trigger a
screen write out of bounds error. This is a low-level check to prevent
this from ever happening, though I think the bug is probably in how
viewwindow is called during map view excursions. (To replicate, set a
message flash color for `warning` and write an annotation with `!` while
off-level in map view.)

(cherry picked from commit 4fa7a6a69243c801105e7cc37877a793bf0b8c47)

8 months agoFix a case where certain crashes could save during an excursion
advil [Sat, 27 Jun 2020 17:14:07 +0000]
Fix a case where certain crashes could save during an excursion

"should be safe" eh

(cherry picked from commit c8bb81158d08ddc2cb92cb05a30dca08360115f8)

8 months agoCrash when trying to save the game during a level excursion
advil [Sat, 27 Jun 2020 17:11:10 +0000]
Crash when trying to save the game during a level excursion

Doing this is really, really bad because you.pos is affected by the
excursion (among other things). However, this is a standalone commit in
case it needs to be quickly reverted for some reason I hadn't
anticipated. (An alternative would be to just returnin this case.)

(cherry picked from commit 93d59993c006efd640d0d788809080720d221272)

8 months agoDon't allow stacking from empty decks
advil [Tue, 23 Jun 2020 19:29:27 +0000]
Don't allow stacking from empty decks

This leads to negative deck sizes and easily triggerable crashes, aside
from stacking in ways that should be impossible.

(cherry picked from commit 8f6dc4e0a50b8aff832d38d8aa4e0b1e8f9234fa)

8 months agoRemove an ASSERT for unlinked temporary items
advil [Sun, 21 Jun 2020 18:52:24 +0000]
Remove an ASSERT for unlinked temporary items

This was added in 0de8e755f4 as a diagnostic for hep abyss issues. It
didn't get immediate results, but a crash for this case has finally
shown up:

What seems to be happening is that that the player got pulled into the
abyss away from their ancestor, and the ancestor died ("Matia has
departed this plane of existence.") Somehow, at this point, cleanup
didn't happen.

I'm removing the ASSERT for now because apparently once a game gets into
this state it keeps crashing. I *think* that without this check, the
game will work but print unlinked temp item errors.

(cherry picked from commit ef3e9dd61fece40c4a42f6cfd570772e2c6388e1)

8 months agoUpdate the Debian dependency list
gammafunk [Tue, 16 Jun 2020 06:02:59 +0000]
Update the Debian dependency list

Python 2 is no longer installed by default on Debian systems, so we
either need to require the python package (and hence Python 2) or
install the Python 3 yaml package. Seems more prudent to do the latter
as Python 2 has reach EOL. Add python3-yaml to the dependencies for the
crawl package.

(cherry picked from commit 8c1842921107eca071087537e6b8ea6bd4c9126a)

8 months agoDon't call show_init from viewwindow off-level
advil [Mon, 15 Jun 2020 14:35:03 +0000]
Don't call show_init from viewwindow off-level

The easiest way to trigger this was fixed in 726680df4ae, but
`viewwindow` is still needed to handle local tiles resizing in map mode.
This is a quick fix to just prevent `show_init` altogether while on a
level excursion, but the real fix probably involves better refactoring
as described in the comment.

(cherry picked from commit 012c83cef6adfd639d5213b593ba79b9248617d4)

8 months agoFix a crash for elemental staff fallbacks
advil [Mon, 15 Jun 2020 13:28:40 +0000]
Fix a crash for elemental staff fallbacks

This is the flip-side of 64415b183b0; if items roles an enhancer staff,
and upgrades to the elemental staff, it then tried to generate a
lajatang as a fallback. This is the simplest patch for this code path;
it just overrides this and generates an enhancer staff. (Via other code
paths, a lajatang would still place.) These staff/weapon issues suggest
a bigger refactor but I will leave that for later.

(cherry picked from commit 07d15928674ec3fa86c107f4450579a840d49865)

8 months agoAdjust some catch2 tests
advil [Mon, 15 Jun 2020 03:43:42 +0000]
Adjust some catch2 tests

After be553b73, process_map_command no longer clamps the coordinates,
because this function uses a return of -1,-1 to indicate that the
coordinates need to be recalculated. The clamping now happens as part of
the map logic itself. This commit does the clamping explicitly, which is
a bit more trivial but at least exercises known_map_bounds.

(cherry picked from commit 47e9afce7f96b02c3afa7754412334b55c760455)

8 months agoDon't call redraw_screen while off-level
advil [Mon, 15 Jun 2020 03:06:17 +0000]
Don't call redraw_screen while off-level

This call was happening any time the level map was exited, and it is
triggering viewwindow, which triggers show_init, which updates map
knowledge at the player position. A dedicated player could use this to
fully map any visited level by exiting map view on the level to be
mapped while moving around a fully mapped level. This bug was introduced
in e98a5be7b87 which removed the scope protecting the level excursion
object; the immediate fix here is to restore the scope. I'm not sure
that this fix eliminates all ways of causing this...

Resolves #1433

(cherry picked from commit 726680df4ae09689c9d2fdde5337a0a63114aa5c)

8 months agoFix timing for map view cursor clamping
advil [Sun, 14 Jun 2020 23:20:59 +0000]
Fix timing for map view cursor clamping

Because `process_map_command` uses -1,-1 to signal that the cursor
position should be calculated from map bounds, it is wrong to clamp the
cursor to map bounds at the end of this call. (Even worse, when the
command is a level change, it uses the bounds for the current level.)
This fixes the issue with stair destinations not working right with []
in map view.

Resolves #1452

(cherry picked from commit be553b73f1881e9dc65462aeb86542675ae9c9b4)

8 months agoFix some crashes with fallback randarts for staff of battle
advil [Sun, 14 Jun 2020 20:42:51 +0000]
Fix some crashes with fallback randarts for staff of battle

A weapon can be upgraded to an unrand enhancer staff (e.g. staff of
battle), changing object type. In the case where this unrand had already
generated, the code for finding a fallback randart wasn't handling this
case correctly (setting OBJ_STAVES as the base type, but a weapon sub
type), and crashing. This commit fixes a few other issues with fallback
randarts for enhancer staves as well, and does a bit of code cleanup.

Example crash:

(cherry picked from commit 64415b183b01cd5c88699bc8ac78011ae707601a)

8 months agoFix cloud gen triggers on load (WindshieldViper)
Nicholas Feinberg [Sun, 14 Jun 2020 19:37:02 +0000]
Fix cloud gen triggers on load (WindshieldViper)

Cloud generators are set to trigger when entering a level (so we
can start with some initial fog), but the same event was also fired
when we loaded a save. Disable that.

Trivia: this bug is nearly 13 years old, probably!

(cherry picked from commit abc7bfb7dccbe806990ec96ea89ab2aab8d9e9df)

8 months agoMore credits for 0.25 (oops)
Edgar A. Bering IV [Fri, 12 Jun 2020 16:41:29 +0000]
More credits for 0.25 (oops)

(cherry picked from commit 0742823d3978e0746ba772c2fbf59319e896dacc)

8 months agoChangelog updates for 0.25 release 0.25.0
gammafunk [Fri, 12 Jun 2020 07:43:07 +0000]
Changelog updates for 0.25 release

First attempt at finalizing release highlights and update the debian

(cherry picked from commit 35acc811ca793aae16c45c385c440107c0939756)

8 months agoFix an interaction of fallback randarts and acquirement (12277)
advil [Thu, 11 Jun 2020 19:03:48 +0000]
Fix an interaction of fallback randarts and acquirement (12277)

I hadn't fully understood one of the ways in which acquired objects
could interfere with unrand generation. After this commit, unrands that
place outside of levelgen (acquirement) or in the abyss or a trove
should always cause later instances of that unrand to simply be replaced
with a fallback randart, and have no other effect on item generation
during levelgen. Before this commit, unrands that were forced by vaults
would be correctly replaced with a fallback if they had already been
acquired, but unrands that were placed randomly (e.g. by | in a vault;
Slime:5 was a good place to check) could be affected by previous
acquirements in a way that had unpredictable results for those items.
I'm pretty sure that this bug had no impact on item generation (or
levelgen more broadly) outside of those specific grids.

This commit may change some seeds as I'm adding a subgenerator the will
impact certain rare cases of unrand placement (mainly for uniques who
can come with a special unrand). These uniques may need further testing.

No save compat for this, so upgrading will lead to the same behavior as
games from before this commit would have.

(cherry picked from commit 850bfe61e39c27fcdc3dcf3f7b28b0b55a6c1371)

8 months agoFix pregeneration for upgrades where branch size changes
advil [Tue, 9 Jun 2020 19:19:21 +0000]
Fix pregeneration for upgrades where branch size changes

Pregeneration was using the current branch depth, rather than branch
depth from the save. (It's possible that saves this old should be
automatically treated as `classic` levelgen mode, too.)

(cherry picked from commit 18c3a0dd01f83f30f4c71fb6e24ffc45e25cc65c)

8 months agoDon't warn about blocked LOF for Starburst
gammafunk [Thu, 11 Jun 2020 13:12:42 +0000]
Don't warn about blocked LOF for Starburst

Starburst is essentially untargeted, but its tracer beams were
generating line of fire warnings whenever any of its 8 tracer beams had
line of fire blocked from player to a location at spell radius away.
Some beams might hit a monster even if others have LOF blocked. The
tracer beam target locations aren't important in any way as they just
exist to let the tracers hit the entire spell radius.

It might be nice to give the LOF prompt if all beams that might hit a
monster have blocked LOF. That would require some significant
refactoring, so for release, this commit removes the warnings
specifically for Starburst.

8 months agoFix some target prompts under Fedhas
gammafunk [Thu, 11 Jun 2020 07:26:04 +0000]
Fix some target prompts under Fedhas

Fedhas completely protects allied plants from the effects of Airstrike,
Shatter, and tin of tremorstones, but players currently receive
incorrect penance warnings when using these effects. Add the relevant
Fedhas ally checks so that the attack prompt won't be triggered for
these cases.

Fedhas currently doesn't protect allied plants from player Freeze, but
the prompt correctly warns them in this case. Freeze and intentional
melee attacks are the remaining exception where we do apply Fedhas
penance, but there's no reason for these exceptions to exist that I'm
aware of. It would easier to centralize the prompting logic in
bad_attack() if all attempts at harming a Fedhas ally by the player were
prevented. This can be addressed in a future commit, but the fixes in
this commit will be enough for release.

8 months agoChange = to == in checking crawl_state.type
shummie [Mon, 8 Jun 2020 19:53:46 +0000]
Change = to == in checking crawl_state.type

Every game is displaying the seed, whether or not it's a custom game since the statement evaluates as true.

(cherry picked from commit 6c07f0ee8d465e3e9ea0214c88ad614b59fecd43)

8 months agoFix viewmap catch2 even more
advil [Sun, 7 Jun 2020 17:22:15 +0000]
Fix viewmap catch2 even more

(cherry picked from commit 79b31b866221e7ae4d7b6055fa5c36dd7884a028)

8 months agoFix catch2 tests for map panning / clamping
advil [Sun, 7 Jun 2020 16:52:16 +0000]
Fix catch2 tests for map panning / clamping

(cherry picked from commit eb7e7872c213f5cef4e0adbd47b661165b4c4ea2)

8 months agoShow seed for seeded play with welcome message
advil [Mon, 8 Jun 2020 17:57:00 +0000]
Show seed for seeded play with welcome message

This is because of reports of players forgetting that they had a seed
set in their rc file. This also prints it on the "welcome back" message,
not sure if that's too repetitive.

Also, tweak this message a bit.

(cherry picked from commit 00fb324cd09f9518cf33ae1896d3cc5e93489a07)

8 months agoTweak how seed games are displayed in ?v and chardump
advil [Mon, 8 Jun 2020 17:46:28 +0000]
Tweak how seed games are displayed in ?v and chardump

Consolidated code between these two. This doesn't matter so much for
chardump, where the first line also says "Seeded", but it's a good
reminder for players looking at their seed in ?v. I've heard of players
forgetting they were starting a game in seeded mode (e.g. when setting
it via the rc) so there's maybe more telegraphing of this mode that
could be done somewhere.

(cherry picked from commit d69c119aaa7d7331e97fc7827915a25bf11017d5)

9 months agosemicolon
advil [Sun, 7 Jun 2020 14:40:24 +0000]

(cherry picked from commit 5c1c449dd35ea1ef4cac4c5314d922873a168062)

9 months agoRestore map view clamping behavior (elliptic)
advil [Sun, 7 Jun 2020 14:27:47 +0000]
Restore map view clamping behavior (elliptic)

ca36f614e438 conditioned clamping on `map_bounds` instead of
`known_map_bounds`, the behavior before this commit. I think this was
unintentional, and it leads to weird behavior on unexplored levels in
console (e.g. lets you move the cursor outside of the screen, restores
to known_map_bounds when you move outside of regular map_bounds). This
commit restores the previous behavior for `X` where you can't scroll
beyond known map bounds. As a side note, this is inconsistent with `x`,
where you can, which is kind of messy.

TBD how this commit interacts with the test in bd17af9.

9 months agoUse correct DES syntax for wand charges
gammafunk [Sun, 7 Jun 2020 04:44:54 +0000]
Use correct DES syntax for wand charges

The correct field to set is "charges", not "plus". Fix this in
gammafunk_dig_for_victory. Also remove a reference to max wand charges
in the DES documentation.

(cherry picked from commit 15ccc7ae601939c08280535bd7162a7da788072c)

9 months agoChangelog tweaks
advil [Sat, 6 Jun 2020 16:23:29 +0000]
Changelog tweaks

(cherry picked from commit 45f243fec86c0523a2c7a296ca31fef7a4fcc11c)

9 months agoDon't pick up duplicate tins of tremorstones
Nikolai Lavsky [Thu, 28 May 2020 19:05:01 +0000]
Don't pick up duplicate tins of tremorstones

By default, autopickup ignores tins as all other misc and dangerous
items. But in case the player has `autopickup_exceptions` for them,
duplicate tins should be ignored.

(cherry picked from commit 0e6732e0a6af59df83ec7a023fcf1cbf5057c33f)

9 months agoRemove a stray bolt of fire
advil [Wed, 3 Jun 2020 19:26:12 +0000]
Remove a stray bolt of fire

This really should come with some sanity checking for vault-placed
spellbooks, but I'm just doing the quick fix for now.

Resolves #1442

(cherry picked from commit 98f9fe671ce0708bee87b5ea4978a1763ab68aef)

9 months agoConsolidate code for applying game_scale
advil [Sun, 31 May 2020 17:07:59 +0000]
Consolidate code for applying game_scale

This moves the state out of Options (except for initial setup) and does
the scale calculation in one place; I lumped this in with other
density-related code.

As a side effect, this commit tweaks the timing of when game_scale is
initially applied: it will take effect after the initial loading screen
is displayed. This heads off a bunch of opengl errors that (I think)
were caused by game_scale being applied before device_density is fully

Also, improve some opengl error messaging for debug builds,
constexpr-ify HiDPIState.

(cherry picked from commit 55d99e38fcdaf201cfef3d3b912917da5ba33330)

9 months agoLet tile_filter_scaling=false work on mipmapped textures
advil [Sat, 30 May 2020 20:50:41 +0000]
Let tile_filter_scaling=false work on mipmapped textures

Did you ever get the sense that this setting didn't do much? That's
because it didn't. (All dungeon textures, UI textures, probably more are

This makes high scale values lead to pixellated graphics.

(cherry picked from commit edd8c26f918388319369c116790f55e9084ebf2b)

9 months agoFix font glitches at very high device density
advil [Sat, 30 May 2020 20:10:23 +0000]
Fix font glitches at very high device density

The code that loads in the glyphs was relying on face->bbox to give the
max glyph sizes. Which it does, but insensitive to device pixel scaling.
Coincidentally, the values worked up through 4x scaling, but no further.
This uses the actual correct advances in pixels. One open question: does
this affect font rendering at lower scale values? I'm pretty sure the
answer is no -- that it just affects how efficiently glyphs are packed
at more typical scale values.

(cherry picked from commit a07a990f657920bdbb40fa3395d38db5798f4a84)

9 months agoAdd a global scaling option for local tiles
advil [Sat, 30 May 2020 16:36:00 +0000]
Add a global scaling option for local tiles

OS support for high-dpi rendering varies widely, but the sizes of UI
elements are very hard to adjust for higher-resolution displays where
high-dpi is not supported. This commit adds a coarse global scaling
parameter that mimics high-dpi behavior, scaling by a value from 1-8.
I'm not sure if there's any current devices out there that would need 8,
but 2 and 3 work reasonably well for my 2k ultrawide monitor, so I
expect that even 4 will be usable for a 4k monitor without high-dpi

This is mostly implemented at a very low level by exploiting existing
high-dpi code; it would be nice if this could be consolidated to be done
entirely at the `WindowManager` level.

(cherry picked from commit c699729d39af1c70ebb246fe7f1192c56898b471)

9 months agoRestore note about pasting to local tiles seed selection
advil [Mon, 1 Jun 2020 00:32:27 +0000]
Restore note about pasting to local tiles seed selection

This was lost in 04990682366a as part of improvements to the seed
selection menu (since no button corresponds to [p] and pasting is more
generally possible in local tiles text input). However, I think it's
still useful for players to have a reminder that pasting is possible at
this screen, and describe the way in which it may not behave as

(cherry picked from commit 4f279345d96b1c64467ac45b33d21b7bd5263c16)

9 months agoDon't print "levelgen mode: deterministic"
advil [Sun, 31 May 2020 23:28:41 +0000]
Don't print "levelgen mode: deterministic"

This is the default now and present in basically all morgues on all
servers, no need to mark it explicitly.

(cherry picked from commit b98801ac91897bf1cf898b1e98e55e93e3965249)

9 months agoFix some no_tele_into shops (minmay)
Nicholas Feinberg [Fri, 29 May 2020 22:15:03 +0000]
Fix some no_tele_into shops (minmay)

It was still possible to blink into them and get soft-locked.

Instead, add a helpful escape hatch!

(cherry picked from commit 50178cf780ef9f5f3f59026321a48792b778c185)

9 months agoFix up some typos in the docs folder. (#1434)
aaronegolden [Fri, 29 May 2020 13:39:16 +0000]
Fix up some typos in the docs folder. (#1434)

* Fix some typos in god_creation.txt.

* Fix a typo in the quickstart guide.

* Fix typo in monster_creation.txt.

* Fix some typos in mutation_creation.txt.

* Fix some typos in patch_guide.txt.

* Fix a typo in tiles_creation.txt.

* Fix a typo in translation.txt.

Co-authored-by: Aaron Golden <>
(cherry picked from commit 11e0b32562862e76f4207709cc9a1acbd337767c)

9 months agoTweak dispreferred newgame colors on local tiles
advil [Fri, 29 May 2020 12:50:07 +0000]
Tweak dispreferred newgame colors on local tiles

At darkgray, these read to newer players as unselectable, I think due to
standard UI conventions (noticed this here:

Adjust them to be only slightly darker than the preferred colors. This
may now be too subtle? What might be better is to provide a key with
these menus.

(cherry picked from commit 58eb27aebac64d331345a585a9c4407b37352257)

9 months agoFix an unused param warning
advil [Thu, 28 May 2020 21:48:56 +0000]
Fix an unused param warning

(cherry picked from commit 9e0bf0358992db7f44c769a99012996eaaf19171)

9 months agoFix a signed/unsigned warning
advil [Thu, 28 May 2020 19:23:50 +0000]
Fix a signed/unsigned warning

(cherry picked from commit c8e6c4a4156af2025b822699c73fe445b003f88e)

9 months agoRemove ability to memorize spells from their description
Aidan Holm [Thu, 28 May 2020 16:10:26 +0000]
Remove ability to memorize spells from their description

With the introduction of the spell library, this was only ever possible
by disabling autopickup and then examining a book you were standing on.

(cherry picked from commit c29e872307671ae0c30153365dbb077af791f614)

9 months agoUpdate the changelog
gammafunk [Thu, 28 May 2020 07:15:38 +0000]
Update the changelog

(cherry picked from commit 56b8cd3df03db7992e354d2de7054f731ae50274)

9 months agoA tile for tin of tremorstones (CanOfWorms)
gammafunk [Thu, 28 May 2020 03:09:18 +0000]
A tile for tin of tremorstones (CanOfWorms)

(cherry picked from commit b080af96c6623553fa1add822c0cf60b7dc343bc)

9 months agoDon't have allies avoid player line of fire
gammafunk [Wed, 27 May 2020 06:13:21 +0000]
Don't have allies avoid player line of fire

In 340c9e81, monster AI was improved to avoid LOF between a monster's
allies and their targets. This change had the player considered as an
ally, hence summons in front of a player would try to move out of the
path between the player and a hostile. This is convenient when the
player wants to use a ranged attack, but doesn't work well in the more
common case were allies are used for cover. This commit has the player
not be considered a ranged ally by allied monsters, hence they won't
avoid player LOF, but continues to allow that consideration for fellow
allied monsters.

There's probably no good way to predict when the player wants to make a
ranged attack behind allies, so it's possible that a new 't' command is
the best solution. A way to toggle this LOF-avoidance behaviour through
other 't' commands might need some consideration, if something like this
is implemented.

(cherry picked from commit c929df558523a23e63c82ce3060a57a1adc2bc26)

9 months agoFix a randart name class (12270 / Flugkiller)
advil [Mon, 25 May 2020 20:53:42 +0000]
Fix a randart name class (12270 / Flugkiller)

(cherry picked from commit f97e55dc39afe998812bc2345bd20b6602f9d198)

9 months agoRemove Lightli...
gammafunk [Mon, 25 May 2020 02:09:21 +0000]
Remove Lightli...

...'s lack of credit in CREDITS.txt. Thanks for your submissions!

(cherry picked from commit 5f92b90fa0c7481cd3aeafe41d74871641299f0b)

9 months agoUpdate CREDITS.txt
Edgar A. Bering IV [Mon, 25 May 2020 01:34:26 +0000]
Update CREDITS.txt

(cherry picked from commit 5d2c98bf94f40ca7f773692c66e5d733e898998b)

9 months agoStimulate Xom on worship from a faded altar
Edgar A. Bering IV [Sun, 24 May 2020 20:54:55 +0000]
Stimulate Xom on worship from a faded altar

Closes #1413

Xom doesn't use normal piety, but thinks its hilarious when you end up
worshipping from a faded altar.

(cherry picked from commit e6218251f0ce7c4ecea0b0d2f3e18f30be1eb5ef)