11 months agoUpdate changelog 0.21.3
Aidan Holm [Sun, 22 Mar 2020 04:15:44 +0000]
Update changelog

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

(cherry picked from commit fc522ff6eb1bbb85e3de60c60a45762571e48c28)

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

(cherry picked from commit 768f60da87a3fa0b5561da5ade9309577c176d04)
(cherry picked from commit 2791043dd8ecdf641e8b1b542d00dea30014df52)

23 months agoDon't crash when there are game types from the future
advil [Wed, 6 Mar 2019 05:07:39 +0000]
Don't crash when there are game types from the future

The save browser was crashing immediately on starting up in this case,
which is triggered by the presence of seeded games from 0.23. This
future-proofs a bunch of calls used by the save browser so that these
games behave just like any other incompatible future-versioned save game
in the main menu.

(cherry picked from commit b7382820b7259ae5d2ffec6fa48112b66c2509ab)

2 years agoUpdate the Debian changelog for 0.21.2 0.21.2
gammafunk [Sun, 16 Sep 2018 21:38:50 +0000]
Update the Debian changelog for 0.21.2

2 years agoFinal changelog update for 0.21.2
gammafunk [Sun, 16 Sep 2018 21:37:07 +0000]
Final changelog update for 0.21.2

2 years agoProperly disable Scrying when abandoning Ashenzari (guyde, salmon)
gammafunk [Sat, 15 Sep 2018 06:51:00 +0000]
Properly disable Scrying when abandoning Ashenzari (guyde, salmon)

(cherry picked from commit 8f6560338e7faf9780e36f5a070aafd138e0fb58)

2 years agoMore description updates
CanOfWorms [Wed, 12 Sep 2018 03:35:06 +0000]
More description updates

Mention a (sometimes important) uncommon interaction
of teleportation scrolls. This is already in the status
description section (?/T), but there's no harm in making
it more visible.

(cherry picked from commit 5ae17c6e8908ca86245ec589a219a32134790ed4)

2 years agoUpdate some scroll descriptions
CanOfWorms [Wed, 12 Sep 2018 00:07:57 +0000]
Update some scroll descriptions

Clarify exactly what can (or more specifically, can't) be affected by fear.
Unfortunately, this is not a perfect solution as holiness is hidden to the
player, but the holiness of most monsters (especially in the early
dungeon) is usually clear so it should help newer players.

The Cause Fear spell should also have an updated description,
but it currently uses the monster spell description, so that needs
to be adjusted first.

Also remove a very outdated reference to hides in the enchant
armour scroll description.

(cherry picked from commit 07fecf47cd8b463e61f20e6d8ad6e2b7ed28c4ed)

2 years agoAdd cross-compiling to travis
advil [Thu, 6 Sep 2018 18:56:01 +0000]
Add cross-compiling to travis

Would be nice to consistently test if the windows build is broken.  This
actually builds the packages, so we could consider replacing the CAO
unstable builds with something like this.

(cherry picked from commit f6d1ed2717bd1ff991493f41baac88e42e8812dd)

2 years agoFix announcements for collecting runes in Sprints (hayenne, #11655)
Alan Malloy [Wed, 29 Aug 2018 18:08:26 +0000]
Fix announcements for collecting runes in Sprints (hayenne, #11655)

(cherry picked from commit a22e90c45fa23599fadb9e0459553d747002dbcd)

2 years agoFix a grammar issue with flying corrosive monster bits
advil [Mon, 27 Aug 2018 15:02:52 +0000]
Fix a grammar issue with flying corrosive monster bits

(cherry picked from commit 23b030f93548f03590dd2c09dddbefd1f973f5e4)

2 years agoFix double-space in Ash dancing weapon warning (Pekkekke, #11603)
Aidan Holm [Sat, 25 Aug 2018 17:34:12 +0000]
Fix double-space in Ash dancing weapon warning (Pekkekke, #11603)

Not sure why Ash feels the need to warn about these..

(cherry picked from commit ecc7f9df0be12e6798a2cbfde86ebd80fbdf7961)

2 years agoFix X> leaking location of portals (silenth. #11629)
Aidan Holm [Sat, 25 Aug 2018 17:06:58 +0000]
Fix X> leaking location of portals (silenth. #11629)

As far as I can see, is_feature() checks against the known feature in a
location; this commit changes that function to return true for portal
entrances and exits, allowing them to still function with > and < if
they are known to be entrances/exits. _is_feature_fudged() calls
is_feature(), and then checks some extra special cases; we remove checks
for portal entrances/exits here, since these are checks against the
actual feature, rather than the player-known feature.

(cherry picked from commit b1aafca977ad35bb7be1d3c5acfa3039e4af25dd)

2 years agoAvoid dith "unlinked items" for clumsy bashes (RoGGa, 11413)
advil [Tue, 21 Aug 2018 00:18:44 +0000]
Avoid dith "unlinked items" for clumsy bashes (RoGGa, 11413)

RoGGa noticed in 11630 that this seems to happen when your shadow mimics
a clumsy bash with a ranged weapon. What is happening is that your
shadow unwields the range weapon and then attacks unarmed -- I'm not
even sure if clumsy attacks with a ranged weapon are implemented for
monsters. This was moving the mimicked weapon into the alt slot, and it
wasn't getting cleaned up.

(cherry picked from commit 46bba9cb966800e9a55487e552c162f3b1b98fe5)

2 years agoFix at least some Beogh unlinked item bugs (8187)
advil [Sat, 18 Aug 2018 01:59:30 +0000]
Fix at least some Beogh unlinked item bugs (8187)

The problem was with named followers who had been gifted items.  What
was happening was that both drop_item and take_item could fail, but
beogh_gift_item() didn't check for these fail conditions and forced the
gift on the follower regardless. If the follower had an old item in the
relevant slot, this left the old item still associated with the follower
but unlinked, and errors started showing up when the follower died and
the item didn't get properly converted to a floor item. The main case
where this came up was if you gifted a follower an item and the item
they already had in that slot was cursed, causing drop_item to fail. The
key symptom (which is rather hard to notice) is that the follower
wouldn't generate a drop message for the old item. I have changed things
so that Beogh removes the curse in these cases, so that the follower can
drop their cursed item.  Alternatively, the gift could just fail, but
this harsher behavior didn't seem to me to contribute anything
interesting to gameplay.

I've also ensured that take_item respects drop_item's fail conditions,
and that beogh_gift_item respects take_item's fail conditions with an
error message.

There are many variants of this out there so I can't promise this fixes
all of them, but I think this will probably fix the Beogh version; all
the saves I have access to are consistent with the case I have
replicated and fixed here, though for many of them the only real
evidence is that a named follower previously died on the level in

To figure this out, it was crucial to get access to a tv that included
the whole sequence of events; thanks to Defined for having a fairly
precise description of their instance of the bug that allowed me to
do this (the tv: `!lg
defined game_key=Defined:cxc:20180717045212S -tv:<T52500:channel=debug`).

(cherry picked from commit 33897af1d260825734cef3f5d158a3cc15d98e35)

2 years agoRecord the first command of a lua do_commands sequence
advil [Fri, 17 Aug 2018 15:07:35 +0000]
Record the first command of a lua do_commands sequence

The first command was directly processed via process_command, which
didn't send it to the key recorders, but any later commands in the
sequence were recorded. This was causing errors when ` was hit after an
autofight command, because the first command was needed to set the
context properly. Probably a further consequence of various autofight
changes in 0.22.

N.b. repeating autofight leads to (maybe?) an odd result: it doesn't
repeat tab, but rather the key sequence calculated by the first instance
of tab. I'm not sure this really comes up much, but I think you'd expect
TAB+` to be the same as TAB+TAB. It's a bit tricky to get this other
behavior, though, and I think autofight has always worked like this, so
I'm leaving it as-is for now.

(cherry picked from commit 3e8b815e1c2b20e289b453b5e8cfc23cfe34006f)

2 years agoUpdate changelog for 0.21
advil [Sun, 5 Aug 2018 18:56:02 +0000]
Update changelog for 0.21

2 years agoDon't try shortcuts through hell when autotraveling
advil [Fri, 3 Aug 2018 15:38:25 +0000]
Don't try shortcuts through hell when autotraveling

When you actually enter the vestibule, the branch entry point is set to
the portal you entered from, and exiting from any portal uses that entry
point rather than the actual destination of the portal in the vestibule.
However, each portal does have a particular destination scattered
throughout depths (and perhaps orc end), and autotravel was looking at
these destinations when trying to find cross-level routes. This
workaround simply doesn't consider routes through hell unless there is
explicitly a target in hell, or you are already in hell.

I also added some (disabled-by-default) debugging code that will
probably be useful in the future.

(cherry picked from commit cb77f54b9cb69238610903506e308adb19acca19)

2 years agoGenerate Akashic Record in Golubria (gammafunk)
advil [Thu, 2 Aug 2018 16:30:33 +0000]
Generate Akashic Record in Golubria (gammafunk)

Replaces "plane papyrus" in  54af7f11.

(cherry picked from commit 71d24adf63b9a370e0b2bf4076222af58c79caea)

2 years agoA laundry list of .des fixes
advil [Thu, 2 Aug 2018 16:21:50 +0000]
A laundry list of .des fixes

Mostly parsing errors for items that don't actually prevent game load
and didn't use to be visible anywhere.  All of these were revealed by
the recent changes to early-game logging.

(cherry picked from commit 54af7f118b1f2193b1b3ecd9720a3761f37c8641)

2 years agoFix an orphan in tutorial 1
advil [Thu, 2 Aug 2018 15:11:00 +0000]
Fix an orphan in tutorial 1

This was causing a linebreak at 80x24 that put a more in the middle of
the keys diagram.

(cherry picked from commit 99b7a448db75abcd5d222d321513bd22815a65e6)

2 years agoDo messaging for aux attacks that kill (G-Flex)
advil [Wed, 1 Aug 2018 21:59:16 +0000]
Do messaging for aux attacks that kill (G-Flex)

I think this call should be safe, but if it starts generating
DEAD_MONSTER messages, the string probably needs to be built before

(cherry picked from commit 8c9a20f50e07794e238f9faa50984bf1e009fef9)

2 years agoUpdate changelog for 0.21.2
advil [Tue, 31 Jul 2018 21:04:37 +0000]
Update changelog for 0.21.2

2 years agoUpdate submodules for 0.21 stable branch
advil [Tue, 31 Jul 2018 20:47:20 +0000]
Update submodules for 0.21 stable branch

This brings in the latest take on the XINPUT errors, and should build
painlessly on windows MSYS2.

2 years agoFix some unused func/var warnings on console
Aidan Holm [Tue, 9 Jan 2018 23:35:23 +0000]
Fix some unused func/var warnings on console

Cherry-picking note: partial commit of f3416

(cherry picked from commit f34168a85931216433da9edc38d0cdcd7eb5f89a)

2 years agoAdd command sequences to the front of the buffer for crawl.do_commands
advil [Fri, 8 Jun 2018 19:50:44 +0000]
Add command sequences to the front of the buffer for crawl.do_commands

I think this will finally fix 11489 and related bugs. The basic problem
here is that in all attempts at dealing with this before,
crawl.do_commands has potentially separated the first element of the
sequence from the remainder by pushing the remainder of the sequence to
the back of the macro buffer (either the sendkeys buffer in the original
version and 3f858e37d316, or the regular buffer in d5c8bedc332) and
triggering the first command immediately. If multiple input keys happen
very fast, there could be intervening keys at the front of the buffer
when the first command is triggered. For autofight, the primary (only?)
use of crawl.do_commands, this sometimes resulted in targeting commands
in the wrong context, depending on the key.

This behavior could happen in online play with lag or network
randomness, and I recently discovered it could also be triggered in
offline play by e.g. binding the macro sequence `\{9}\{27}` to a key.

This change pushes the remainder of the sequence to the front of the
regular macro buffer, which guarantees that they won't be separated. The
problem that was causing in crashes in d5c8bedc332 won't apply, since it
was an ASSERT that only triggers on pushing to the back of the regular
macro buffer.  This fixes some other weird behavior introduced in
461d14e83c155adf, such as making it impossible to put tab in a macro
with other keys; that commit in general probably produced errors in more
places than the previous versions.

I did not yet change crawl.process_keys similarly, but this maybe should
be done.

(cherry picked from commit 49b1da7e92bddbe312d3a7ad3ed3277f7ba9cfc0)

2 years agoUse the sendkeys buffer for local tiles clicking
advil [Fri, 4 May 2018 02:19:08 +0000]
Use the sendkeys buffer for local tiles clicking

Since this seems to be safer for CMD_... sequences that might be mixed
in with other keystrokes.

(cherry picked from commit d0aace3bf03766d516e66f6f20f13aee59a57763)

2 years agoGo back to adding autofight commands to the secondary buffer
advil [Thu, 3 May 2018 12:25:09 +0000]
Go back to adding autofight commands to the secondary buffer

Adding them to the main buffer is causing some occasional crashes that I
can't replicate, probably about the interaction of tab with other keys;
going back to doing this should avoid triggering the relevant ASSERT.

(cherry picked from commit 3f858e37d316ea5679bf99a8050bc93e5da41647)

2 years agoDon't convert lua do_commands to keys and back (11095)
advil [Thu, 3 May 2018 00:50:19 +0000]
Don't convert lua do_commands to keys and back (11095)

An actual command_type should be handled ok by anything on the other end
of this, so converting to keys immediately is overkill. This was causing
problems with keybindings in targeting mode that remapped numbers to the
direction commands in unusual ways: the first call converted the
commands to keys, and the keys got converted (incorrectly) to vikeys by
`unmangle_direction_keys`; they then got converted back to commands,
preserving the incorrect mapping. So the exact bug in 11095 is really
that unmangle shouldn't be called on the output of command_to_key, since
it isn't aware of keybindings.

The bug required a somewhat unusual key mapping to surface; in this
particular report 6 and 8 were (maybe by accident) swapped relative to
their normal position on a keypad, and this is why unmangling went

Only autofight even uses this lua call, so hopefully there are no
other consequences to this simplification, but if tab starts acting
weirdly, this commit was probably why.

(cherry picked from commit d5c8bedc332191fa7734e83a4d3992850e07c947)

2 years agoFix a type in an integer comparison
gammafunk [Mon, 30 Jul 2018 18:42:05 +0000]
Fix a type in an integer comparison

(cherry picked from commit 68665ccbd9b6786c05f4e58ad1d97b9740764376)

2 years agoRework xp_to_level_diff further
advil [Mon, 30 Jul 2018 18:29:03 +0000]
Rework xp_to_level_diff further

This better handles a few cases:
 * cases where there is less than one level to go
 * cases where the player is >xl 27

It is also much cleaner and more obvious about what it is doing.

Resolves #786

(cherry picked from commit e275911903e8808ca4bc194f1abf0b7e57feaa25)

2 years agoMake the estimate of XLs to mindelay more accurate (11490)
shieldal [Sun, 10 Jun 2018 06:19:50 +0000]
Make the estimate of XLs to mindelay more accurate (11490)

When a player is not at a whole number xp level, the previous code
didn't properly handle the fractional level already attained.

(cherry picked from commit 5786b86ef4daf882a74f20480e25456a0a7dc8a4)

2 years agoFix messaging with cloud of scarf and qazlal (11500)
advil [Mon, 30 Jul 2018 16:15:47 +0000]
Fix messaging with cloud of scarf and qazlal (11500)

This incorporates elements of both #799 and #804. Though apparently both
MarvinPA and amalloy were against it for reasons I don't fully
understand (see note in #804), I think it is preferable to show a
message when you wear this scarf when it is completely useless. It's not
exactly a lot of message spam, since this is an uncommon item, and this
kind of information is useful to new players.

Resolves #799, resolves #804

(cherry picked from commit 33a98d2e1466f8a59b2e55a690287a62298a17b7)

2 years agoFix some autoexplore logic (RoGGa / elliptic)
advil [Wed, 25 Jul 2018 20:48:28 +0000]
Fix some autoexplore logic (RoGGa / elliptic)

(cherry picked from commit 8bfc27d4066fbcf2a279e0201afc4adf600bc423)

2 years agoDon't re-check forgotten map squares (10461)
Edgar A. Bering IV [Fri, 8 Jun 2018 17:01:12 +0000]
Don't re-check forgotten map squares (10461)

Prevents annotations for runed doors and transporters from stacking up.

(cherry picked from commit b582571b5a0e61154a6816aad976902b708892be)

2 years agoAvoid "mid cache bogosity" for unhandled divine clone bugs
advil [Wed, 18 Jul 2018 16:18:20 +0000]
Avoid "mid cache bogosity" for unhandled divine clone bugs

Companion clone bugs lead to "mid cache bogosity" under the following

1. there is a level saved with a copy of the companion that gets false
for is_divine_companion() (e.g. it lost its god, as in e6d7efa92cb0).
2. that level also has a properly saved copy of the companion; they
both share the same mid.
3. the mindex of the corrupted copy is lower than the correct copy.

If all three conditions are met, the elsewhere companion code would
clear the mid cache for the corrupted copy, but the corrupted copy would
still be alive and kicking in the monster list. This would lead to a
crash when entering the level, resulting in an unplayable save.

This commit avoids this situation by fixing up the mid cache after
deleting the elsewhere companion. This fix will still result in errors
under various circumstances, but hopefully not unplayable saves. An
alternative might be to always delete both copies, but doing so will
hide whatever the underlying bug is that is leading to a clone so IMO
it's better to print lots of errors when these things happen, and delete
only corrupted copies where we know what the bug was.

As a side note, if there are multiple copies but they satisfy
is_divine_companion, they'll still be silently deleted -- this is the
status quo from before this commit. If condition 3 above isn't met,
there will also be no error, on load at least.

(cherry picked from commit 6f83d72c62e96620d851c45037cc65da9290b0da)

2 years agoSave compat for the Beogh/priest polymorph bug
advil [Wed, 18 Jul 2018 16:07:20 +0000]
Save compat for the Beogh/priest polymorph bug

See e6d7efa92cb0cd for the bug itself.

This cleans up duplicate mid monsters for various cases that match the
conditions of this bug. Possibly this should have a minor version tag
bump, but as of right now that will mess up the ghost permastores and I
don't want to do that this close to a release.

(cherry picked from commit eb4a410db309ce16f33c43601209d6314fc8aed3)

2 years agoPreserve insanity on polymorph (11504)
advil [Wed, 18 Jul 2018 13:28:01 +0000]
Preserve insanity on polymorph (11504)

Because insanity involves an attitude change, polymorph was removing the
enchantment and not returning the attitude to normal. This changes
leaves the monster insane after a polymorph, and the enchantment goes
away as normal, returning the attitude to its correct state at that

(cherry picked from commit 337e1da0210d9ee37bb51596f28be351124fbf21)

2 years agoDon't overwrite god with GOD_NAMELESS on poly to a priest (11536)
advil [Wed, 18 Jul 2018 02:03:45 +0000]
Don't overwrite god with GOD_NAMELESS on poly to a priest (11536)

This was creating duplicate monsters under the same mid in the following
way for beogh worshippers: 1. an orc follower gets turned into a
shapeshifter via chaos effects (e.g. an apocalypse crab). 2. the monster
shapeshifts into a priest monster, such as a meliai, setting the
monster's god to GOD_NAMELESS. 3. The player exits the level, and
recalls allies on a new level. A copy of the follower is generated at
this point. 4. They reenter the level of step 2. Because the monster
copy on that level no longer worships Beogh, is_divine_companion returns
false, and the follower copy is not appropriately cleaned up when
re-entering that level (see `tag_read_level_monsters`). Now there are
two. (Probably other variants of this procedure could work.)

This state doesn't crash, but the situation can eventually lead to the
infamous "mid cache bogosity" message in various ways, such as if one of
the copies dies while both are on the level, removing it from the mid

The fix might give priest monsters some weird gods at times, but it
doesn't mess up orc followers.

(cherry picked from commit e6d7efa92cb0cdb5cff2164c569bc0c2efffad87)

2 years agoMake sure Jiyva opens Slime:$ for you if you reach ****** while there (Pekkekke)
Alan Malloy [Mon, 16 Jul 2018 21:20:12 +0000]
Make sure Jiyva opens Slime:$ for you if you reach ****** while there (Pekkekke)

It was never updated when we shortened Slime from 6 to 5.

Fixes #819.

(cherry picked from commit 178e55541d7c3f37648a7fa5f0d8e7e2a7b5dcf9)

2 years agoHandle sealed runed doors properly (11508)
advil [Mon, 9 Jul 2018 14:41:54 +0000]
Handle sealed runed doors properly (11508)

Monsters could open runed doors while they were sealed, leading to
escaping player ghosts. This checks the original terrain for the seal. I
lightly refactored some closed door checks in monster AI to be clearer
and a bit more general.

Cherry-picking note: this bug applied to any instances of runed doors in
vaults, not just ghost vaults; they were a bit rare before ghost vaults
but not entirely non-existent (I think).

(cherry picked from commit fedc9ff77b0abdeb4f55968092a0b12ca63803fe)

2 years agoDon't dissipate clouds when testing door sealing for tension (11506)
advil [Sun, 8 Jul 2018 13:49:36 +0000]
Don't dissipate clouds when testing door sealing for tension (11506)

As |amethyst suggested, this is happening because clouds will be
instantly deleted on terrain changes that leave them out of los (as of
7e89378e288a). The door sealing code tests various door closing options
to see which maximizes tension, and these would delete the clouds even
if none of them for used, because their los effect is still calculated.
This solution simply backs up a copy of, since in principle
the cloud changes might impact tension.

(cherry picked from commit acb6733a4425a3cb941e387e420bd0349c60805c)

2 years agoMake items for the cloak slot be equally common as other aux slots again
NormalPerson7 [Sat, 30 Jun 2018 13:22:29 +0000]
Make items for the cloak slot be equally common as other aux slots again

In commit 651d724, scarves were increased from being 1/6 to 1/4 of items
generated for the cloak slot, however the actual increase in spawn rate
for scarves was minimal, from 1/30 to 1/28 of all auxiliary slot armours
generated, because what this commit actually did was reduce the spawn
rate of cloaks from 5/30 to 3/28 by reducing the weight of cloaks.

It seems like an accident that this meant the total weight for this
random_choose_weighted was not the 30 that a comment implied, and that
the cloak slot items (cloaks and scarves combined) were made 2/3 as
common as other auxiliary slot armours.

As a result, this commit buffs the spawn rate of cloaks and scarves to
bring the overall spawn rate in line with that of other auxiliary
armours, whilst maintaining the same 3:1 ratio of cloaks:scarves.

(cherry picked from commit 0116f15b0b1d7295a5550dbac45db4e1b6a99dc5)

2 years agoFix Ru sacrifices not giving full piety (Xenobreeder, #11503)
Aidan Holm [Sat, 30 Jun 2018 11:14:16 +0000]
Fix Ru sacrifices not giving full piety (Xenobreeder, #11503)

For skill sacrifices specifically, the amount of piety gained was
recalculated after the sacrifice was performed, i.e. after the skill in
question had been dropped to level zero. In testing, sacrificing 27
stealth promised full piety, but granted none.

(cherry picked from commit 4a923d4b9ef91536b6107f46e69f560636265aab)

2 years agoFix zot traps casting friendly malign gateways
shieldal [Fri, 29 Jun 2018 05:47:11 +0000]
Fix zot traps casting friendly malign gateways

(cherry picked from commit e1900bcf9a982acdfbd00d0019818391246a354b)

2 years agoDon't make ancient zymes sicken friendlies (#10769)
Chris Campbell [Mon, 25 Jun 2018 21:39:14 +0000]
Don't make ancient zymes sicken friendlies (#10769)

Neutral zymes (from Corruption for example) will still sicken the player, but
friendly ones won't sicken the player and hostile ones won't sicken other

(cherry picked from commit c2241811a9d177ce7b745e7c3b1b8e096fed1b7c)

2 years agoFix bug 11478: Movement-key actions and Wu Jian
Edgar A. Bering IV [Fri, 8 Jun 2018 14:49:06 +0000]
Fix bug 11478: Movement-key actions and Wu Jian

In _move_player, the easy-open door let control flow continue through
the function to behaviors that should only trigger upon moving. The most
noticable is the Wu Jian processing, leading to the bug.

The function could use some further simplifications, it's a bit

Closes #778.

(cherry picked from commit b306ea240a012dd66efd0c049ce1f1577385bee0)

2 years agoFix a crash when blinking away a cleaving attacker (amalloy, #718)
jnooner [Sat, 23 Jun 2018 21:57:00 +0000]
Fix a crash when blinking away a cleaving attacker (amalloy, #718)

When working through the list of enemies to cleave, we now check that each
enemy is still adjacent.

(cherry picked from commit fbd9004e3fb3aaf56188b8c96ac995c9e82b3776)

2 years agoSet player as summoner for elemental force
advil [Wed, 13 Jun 2018 15:29:38 +0000]
Set player as summoner for elemental force

I'm not sure why this wasn't done in the first place, and there may be
some reason I'm not thinking about. But the immediate impact of this
commit is to prevent elemental force from placing tloc clouds when used
in abyss, since this is the wrong flavor.

(cherry picked from commit bd48a76f0c6235f2f97ac7c6b5d9738babbda366)

2 years agoDon't overwrite opaque clouds with non-opaque clouds
advil [Wed, 13 Jun 2018 15:08:55 +0000]
Don't overwrite opaque clouds with non-opaque clouds

This will come up mostly for tloc clouds, I think.

(cherry picked from commit 632a1ea6316089119470b546f0f24f5a12d67856)

2 years agoDon't assume elemental force placement doesn't change clouds
advil [Wed, 13 Jun 2018 15:23:48 +0000]
Don't assume elemental force placement doesn't change clouds

This code assumed that the values returned by `cloud_at` were unchanged
from the first pass to all points of the second pass. However, in the
abyss, placement of elementals was also adding tloc clouds, which are
not in the map, and therefore `*map_find` was not safe. This could cause
crashes, which were relatively reliably triggered by reading summoning,
fog, and triggering elemental force in succession. (I think the impact
of summoning was just to get a crowd of already placed monsters around,
though I didn't test carefully why this mattered.)

(cherry picked from commit e4f624a966036019935affbd8d96a617447dbf19)

2 years agoLet ArmourOffDelay be invalidated for undefined items (11494)
advil [Sat, 9 Jun 2018 20:10:30 +0000]
Let ArmourOffDelay be invalidated for undefined items (11494)

This can apparently happen (rarely) in local tiles if mouse clicks pile
up extremely fast, leading to an ArmourOffDely -> DropItemDelay ->
ArmourOffDelay -> DropItemDelay sequence for the same item. Since the
item starts off as an inventory item, they all use the same reference
for the item, but dropping invalidates the item (see
``), it is no longer a reference to a
valid item after the first drop, leading to a crash.  DropItemDelay
already handled invalid items.

It might also be good to have drop_item just abort if there's already a
DropItemDelay scheduled for the item in question, but that's somewhat
tricky to do technically, since both item drop delays actually call
drop_item. This safety check for ArmourOffDelay still seems reasonable

(cherry picked from commit 5c5de1cb09db86abf1a912b9c7c76d1c44faf83f)

2 years agoMake Iron Giants and other Throw Ally users obey Sanctuary
Nikolai Lavsky [Fri, 8 Jun 2018 10:45:48 +0000]
Make Iron Giants and other Throw Ally users obey Sanctuary

Iron Giants can throw monsters at the player protected by Sanctuary.
They can do up to 35 damage (random2(HD*2)) per throw without angering
Zin. Originally Throw Ally was a Robin-exclusive ability, so this was
not a problem.

Normally monsters don't use abilities that can harm the player, if the
player is in sanctuary. These checks are done in But for spell_harms_target()
Throw Ally is not a harmful ability. This is because the ability
or SPFLAG_TARGET). Since Throw Ally is a smite-targeted ability, the
appropriate flag for it is SPFLAG_TARGET.

(cherry picked from commit c254099d7c5fc7702a0c93c01f75778f695d4506)

2 years agoFix (un)woken_rest.rc
advil [Thu, 7 Jun 2018 21:49:45 +0000]
Fix (un)woken_rest.rc

This entomb function didn't work right because it changed the player's
location to a metal wall, which teleported them away.

(cherry picked from commit b446440d2e2b71e9766fddcc37eeb240b1c07577)

2 years agoFix Injury Bond description
Nikolai Lavsky [Thu, 7 Jun 2018 19:01:03 +0000]
Fix Injury Bond description

Injury Bond affects all allies in LOS, not just one.

(cherry picked from commit 49d386fb44538728db77d91e3b1cde7d451912f0)

2 years agoAutomatically retract mandibles if wall jump is triggered as an ability
advil [Thu, 24 May 2018 20:31:03 +0000]
Automatically retract mandibles if wall jump is triggered as an ability

(cherry picked from commit e766b1ce6f9c29191518c77541c875907a74c674)

2 years agoDon't leak information about passwall landing site via exclusions
advil [Tue, 22 May 2018 22:25:35 +0000]
Don't leak information about passwall landing site via exclusions

Discovered by u/top_koala,

Basically, exclusions on unseen spaces could be used to avoid stopping
earlier than desired if the earlier space is floor. This change will
prompt on intermediate exclusions on unseen tiles that would undershoot
the actual destination. There is probably still a similar overshoot
leak, but I'm less clear on what exactly the check is or whether such a
leak is as useful in practice.

(cherry picked from commit 4197694d79069709c80fc2c21aab0c2faa7ecded)

2 years agoProperly handle previous offlevel travel targets in map view (11466)
advil [Mon, 14 May 2018 00:12:55 +0000]
Properly handle previous offlevel travel targets in map view (11466)

Before, this would go to the coordinates of the previous travel target,
but without changing levels.

(cherry picked from commit e82b8a919a24be982486b7286c5d237cdddbe024)

2 years agoFix messaging for oods that have just been created (11469)
advil [Fri, 11 May 2018 01:49:46 +0000]
Fix messaging for oods that have just been created (11469)

OODs are created at (0,0) and then get a placement somewhere in the
first call of iood_act. If they were to hit a wall immediately (for
example if fired point blank into the wall with Z), a check for ood
visibility that determined whether to print the crash message was
failing, because the player can't see (0,0). This change uses the IOOD's
actual starting position after fuzzing for the visibility check and
cloud placement. N.b. I think that this position might sometimes be the
caster's position or a solid feature in tight quarters, which is
presumably why the ood isn't placed immediately; the cloud still doesn't
usually show up in these cases for this reason.

(cherry picked from commit 97be04f903ededbd3db3c164945cb4063032cd22)

2 years agoPrevent shafts/teleports into an early cloud vault (MainiacJoe, #11449)
gammafunk [Wed, 9 May 2018 21:28:33 +0000]
Prevent shafts/teleports into an early cloud vault (MainiacJoe, #11449)

That vault places large numbers of cloud generators in a long corridor.
Players shafted or teleported into it from early dungeon levels are very
likely to have no means of escape depending on where they land. Mark the
vault with no_tele_into and clean up DES syntax.

(cherry picked from commit b855193d7811845cb84276c0dd02a2dc4c2c485f)

2 years agoAdd a necessary emptiness check (11467?)
advil [Wed, 9 May 2018 13:46:03 +0000]
Add a necessary emptiness check (11467?)

Possibly was causing crashes with -D_GLIBCXX_ASSERTIONS on gcc.

(cherry picked from commit 0c774a7e83d71374d5a59c75aa64c385ff512c4a)

2 years agoFix a crash in game startup
Alan Malloy [Mon, 7 May 2018 20:52:03 +0000]
Fix a crash in game startup

It was possible (but not guaranteed) to cause a crash by starting a
new game after quitting to the menu from a previous game, because we
didn't clean up the existing shopping_list, leaving us in an inconsistent

(cherry picked from commit 35e51767bf188cdad3243a848b4bfc02f88c8d47)

2 years agoAdd the ultimate enemy
advil [Thu, 3 May 2018 02:19:27 +0000]
Add the ultimate enemy

I got tired of wizmode test monsters inconveniently moving around and
dying. (How did we not have one of these before?)

(cherry picked from commit fed312b5ef82dbbf8772cabfc4421e7354ce17e3)

2 years agoFix some abyss features having wrong destination
Aidan Holm [Sat, 28 Apr 2018 10:06:04 +0000]
Fix some abyss features having wrong destination

Abyssal stairs and exit-via-abyss didn't set their destinations
correctly, which broke autotravel.

(cherry picked from commit 6e0a438587fce25b5cf7a56ab7c1ab3320e7fa7e)

2 years agoFix teleport/hatch closets in erik_orc_3 (Leszczynek, #11460)
Alan Malloy [Fri, 27 Apr 2018 19:36:41 +0000]
Fix teleport/hatch closets in erik_orc_3 (Leszczynek, #11460)

Rather than marking the closets as no-tele, I've simply made sure each
tile is reachable by removing some of the maybe-wall tiles.

(cherry picked from commit 2a24f123e0cafd819eb963cd67a7448aff7c7746)

2 years agoFix abyss_short_run.rc (aidanh)
advil [Thu, 26 Apr 2018 16:44:51 +0000]
Fix abyss_short_run.rc (aidanh)

This is doubly-broken: Since 1f733d267d2fff9e920c items of flying start
flight when worn, and at some point (not sure when) the default key for
starting flight seesm to have become `g` anyways. So this test got a
silent error on sendkeys('ah'), and failed to ever enter the abyss.

(cherry picked from commit 15e00174aab247bba1f485c90a16fb94433be0d9)

2 years agoEnsure that close_all_menus syncs with webtiles clients
advil [Mon, 23 Apr 2018 01:43:38 +0000]
Ensure that close_all_menus syncs with webtiles clients

This is one possible explanation for 11387, that somehow the javascript
menu_stack gets out of sync with m_menu_stack on the client side. I
haven't managed to reproduce this bug at all, but the two stacks getting
out of sync via an extra open_menu immediately following init_menus
would lead to the observed behavior, and explain why further menus act
as submenus. This change ensures that the javascript stack is entirely
empty when client-side close_all_menus is called, which is triggered on
redraw. If this fix doesn't work, back to the drawing board.

(cherry picked from commit 870eee8612f8d928075021237457b4d64c89ad92)

2 years agoDisable the poison effect in fsim
advil [Wed, 18 Apr 2018 20:52:56 +0000]
Disable the poison effect in fsim

This doesn't impact damage calculations (I think).

(cherry picked from commit 76f67b38c3800b4f44aa698c8674cfb64dd64888)

2 years agoMake statue descriptions accurate about no-regen (#11448)
NormalPerson7 [Thu, 12 Apr 2018 20:30:56 +0000]
Make statue descriptions accurate about no-regen (#11448)

This commit gives statues the M_NO_REGEN flag, which will show up in
their description as "It cannot regenerate".

This wasn't there before because statues cannot regenerate by any means,
as seen in the check in monster::heal, whereas other monsters with this
flag will still regenerate if given the regeneration status. The check
in monster::heal is still checked with this flag on, however, so there
is no reason this should change any behaviour.

(cherry picked from commit c608dd7fdd4d9672bb813a83da182dace5d7d814)

2 years agoMake the behavior of DEBUG_ITEM_SCAN more consistent
advil [Thu, 12 Apr 2018 01:40:47 +0000]
Make the behavior of DEBUG_ITEM_SCAN more consistent

In particular, this will fix up unlinked temporary items on level load
consistently on all builds, not just FULLDEBUG builds. What was
happening is that DEBUG_ITEM_SCAN is #defined on all builds, but for
everything except FULLDEBUG builds, it got #defined in,
which of course interacts with compilation order; the result being that
it was *not* defined at the time where was built, and the fixup
code wouldn't get called. This moves the #define to AppHdr.h (sorry) and
does a bunch of other cleanup. It also prints an explicit error when
loading the level, though now this will only get printed once; before
these errors would get silently fixed up on FULLDEBUG builds only,
leading to confusion.

It may be that we *don't* want the fixup, since we'll get more saves
that way that actually instantiate bugs that trigger this error, but for
the moment I am just restoring the intended behavior from
dc59d2025591002a2. Players seem to find it disconcerting when this
message keeps repeating (e.g. so
this makes it a bit easier on them.

There's some worry in the comments about DEBUG_ITEM_SCAN being slow, but
I think we do want it on always and it's been on for all builds for like
10 years, so I think it's fine.

This doesn't interact with unlinked items held by dead monsters, which
don't get fixed up by this code (though they could if we want that).

(cherry picked from commit 29664b41f07dc6fa7a76fa778ef6a675f9a8a08d)

2 years agoFix a possible disconnected region in minmay_the_grid_ultimate (11444)
advil [Wed, 11 Apr 2018 22:19:05 +0000]
Fix a possible disconnected region in minmay_the_grid_ultimate (11444)

If all three of these "s go to x (plus a few others), this region
becomes cut off. By symmetry around the diagonal (noticed by aidanh) it
seems that the fix is to change these particular "s to `.`. Minmay let
us know if we're wrong...

(cherry picked from commit 873ca8c3a950ddbea33bdc38c9c590ea5285604b)

2 years agoDon't crash after stash search help with messages_at_top=true
advil [Wed, 28 Mar 2018 02:28:22 +0000]
Don't crash after stash search help with messages_at_top=true

This probably fixes some other obscure crash possibilities; basically,
redraw_screen would leave the cursor region as GOTO_MLIST if
`messages_on_top` was set to true, but GOTO_MSG if false (the default).
Code that relied on the default behavior would likely crash on a screen
write out of bounds, because GOTO_MLIST isn't very big. Exiting out of
help screens to a prompt is a likely candidate in general.

Probably redraw_screen shouldn't even be able to change region, because
side-effects are bad (and probably region shouldn't be bad global state,
for that matter), but I have no doubt that there is code that implicitly
relies on this.

(cherry picked from commit d21a89c53800180599d95a23b7e368a33c83523c)

2 years agoFix prefix behavior for FONTDIR (11430 / sterilizedmilk)
advil [Mon, 26 Mar 2018 14:00:36 +0000]
Fix prefix behavior for FONTDIR (11430 / sterilizedmilk)

(cherry picked from commit 4c9dbd0d6bffa61fe7c562d686a55b7c23301f45)

2 years agoFix door exclusion info leak (Etesian, #10966)
Aidan Holm [Fri, 23 Mar 2018 15:16:20 +0000]
Fix door exclusion info leak (Etesian, #10966)

(cherry picked from commit 43f9854a4f5805f1ba330133c04d18b1fcd5bcbe)

2 years agoFix the ash autotravel/autoexplore bug (6503 etc)
advil [Sat, 24 Mar 2018 16:52:53 +0000]
Fix the ash autotravel/autoexplore bug (6503 etc)

The problem was that sensed monsters would be immediately marked as
MTRAV_KNOWN_UNREACHABLE, but in _mons_has_path_to_player this value was
effectively used as a cache to decide whether to recalculate the path to
the player. If set, the path would never be recalculated for a sleeping
monster, and this function would always return false. There were a bunch
of special cases that avoided this issue making it harder to diagnose
(there's a hard check for a 1 tile distance that skips pathfinding
altogether, if the monster wakes the path gets recalculated, and
monsters with known ranged attacks that are visible ignore the
pathfinding result, maybe others). This bug also impacted boots of the
assassin (e.g. 11322).

(cherry picked from commit 822b61bbc798d17a09b759e777a3d0ed73d4fdac)

2 years agoDon't Gozag bribe summons (#11149)
Chris Campbell [Thu, 22 Mar 2018 22:14:02 +0000]
Don't Gozag bribe summons (#11149)

(cherry picked from commit 0df9d5f48d78cb7458799c04a52a7648c4f909d4)

2 years agoFix Sap Magic not properly expiring on Felid death (#11354)
Chris Campbell [Thu, 22 Mar 2018 20:30:17 +0000]
Fix Sap Magic not properly expiring on Felid death (#11354)

Along with a couple of WJC attributes that shouldn't persist through death.

(cherry picked from commit 09c32aa9e5294d20940aebf9140a402b01e917b8)

2 years agoAllow training evocations with the ratskin cloak
Chris Campbell [Thu, 22 Mar 2018 20:02:03 +0000]
Allow training evocations with the ratskin cloak

Since it has an active ability like the cloak of the Thief.

(cherry picked from commit 3d944cd7a11e541c15b17768956899c902b265d3)

2 years agoAdd no_tele_into to some closets in grated_community_mu (#11423)
Chris Campbell [Thu, 22 Mar 2018 19:36:42 +0000]
Add no_tele_into to some closets in grated_community_mu (#11423)

(cherry picked from commit 9b9f04da3874273e56c54f0344f6063f855a3e8b)

2 years agoPrevent monsters from picking up a loot item in a vault
gammafunk [Mon, 12 Mar 2018 08:39:32 +0000]
Prevent monsters from picking up a loot item in a vault

The merfolk impaler would sometimes pick up a weapon loot item and thus
lose its ability to reach attack the player across the lava square. Make
the item into a superb_item so we can mark the item as no_pickup to
prevent this. Previously it used an "acquire any" item, which currently
can't take the "no_pickup" tag, and we'd like to avoid using these loot
items outside of troves in the first place.

(cherry picked from commit 3d7ae589ec46058afb62cfa8412dad5d1ff4a81a)

2 years agoMark PoG only temporarily useless when in Zot but without the orb (|amethyst)
Chris Campbell [Tue, 20 Feb 2018 15:36:55 +0000]
Mark PoG only temporarily useless when in Zot but without the orb (|amethyst)

Since you could still leave and go elsewhere, so it should still be possible
to memorise the spell.

(cherry picked from commit 4386d7c10379cb1bdda37193e3f80c7d5eb57a65)

2 years agoDon't mark cloud spells as permanently useless under Still Winds
Chris Campbell [Tue, 20 Feb 2018 15:30:37 +0000]
Don't mark cloud spells as permanently useless under Still Winds

(cherry picked from commit 6ad8dc3c0fe8ba660248f74460de116e3ecf16d0)

2 years agoNote the effect of Invo skill in Nemelex description (#11393)
Chris Campbell [Tue, 20 Feb 2018 13:54:44 +0000]
Note the effect of Invo skill in Nemelex description (#11393)

(cherry picked from commit 362d6f471266c281f5a070ff6327ce5daf878ca9)

2 years agoFix bloodless Vampires having their accuracy penalised
Chris Campbell [Sat, 17 Feb 2018 14:49:28 +0000]
Fix bloodless Vampires having their accuracy penalised

(cherry picked from commit 5403bb0386644fdbebcce62bf1460abef244b796)

2 years agoFix Dowan's reaction to Duvessa dying far away (minmay)
Alan Malloy [Tue, 13 Feb 2018 00:50:05 +0000]
Fix Dowan's reaction to Duvessa dying far away (minmay)

Dowan is really more of a moper than a rager.

(I accidentally made too broad a change in bf6022e)

(cherry picked from commit 535122322dc19638d868d65b7fd6f0473e2a4128)

2 years agoMake Duvessa and Dowan react the same to killing each other
Alan Malloy [Tue, 9 Jan 2018 21:11:22 +0000]
Make Duvessa and Dowan react the same to killing each other

(cherry picked from commit bf6022e027605527a59a441ce58d0061986674f7)

2 years agoHave shock serpent retaliation check rElec
advil [Sun, 11 Feb 2018 19:25:15 +0000]
Have shock serpent retaliation check rElec

rElec for the retaliation fineff has apparently not been checked, at
all, either for monster or player attackers, since 494c5fece274. For
player attackers, this change is a major nerf to shock serpents if you
have rElec, so given that they have always been this way, they may need
some further balance adjustments to make them not completely trivialized
by rElec.  This change also prevents shock serpent recursion (pointed
out as a bug by u/eazyirl,,
since shock serpents have rElec+++.)

I also added an expose_to_element call to ensure that retaliation
triggers qazlal elemental adaptation (also wasn't happening).

(cherry picked from commit 33bf1272b01ddfc67f6b2db2813ee81f0abad604)

2 years agoShow >0 skill message (if needed) when entering skill menu (dds1)
advil [Thu, 8 Feb 2018 16:10:36 +0000]
Show >0 skill message (if needed) when entering skill menu (dds1)

Before this would only show when you try to exit the menu without any
skills enabled; this will also show it if you enter the menu with 0
skills enabled (e.g. after reaching a skill target with just that skill

It might make sense to remove the more() before entering the skill menu
with 0 skills trained, with this change.

(cherry picked from commit f028f7a83dec3d851013ef026aa3bab2ba0a6621)

2 years agoIf there's no assert message on crash, put signal into the noun
advil [Thu, 25 Jan 2018 16:50:03 +0000]
If there's no assert message on crash, put signal into the noun

This includes the signal information in the crash milestone if there's
no assert message; before, the milestone would just be empty (which I
guess translates to "?"). It also will give the signal info on the first
line of the crash dump in these circumstances so that any non-windows
crash dump always has a cause on the first line.

(cherry picked from commit da3306adca849bba8adeb3f631b94cb0a967a8c1)

3 years agoDon't crash if Duvessa dies when Dowan is polymorphed
advil [Sun, 4 Feb 2018 18:01:16 +0000]
Don't crash if Duvessa dies when Dowan is polymorphed

If the new form is non-casting, mons->spells would be empty, leading to
a segfault. This commit simply prevents him from getting spells in these
cases (which are usually something like a worm). There are also rare
cases where this code probably would've worked, overwriting some spells,
but these are things like a boggart where we probably want him to keep
the poly'd spells.

(cherry picked from commit 91cc6d715c65519b7080c3bd1c6899c679b0b945)

3 years agoUpdate the debian changelog for 0.21.1 0.21.1
gammafunk [Thu, 1 Feb 2018 07:54:56 +0000]
Update the debian changelog for 0.21.1

3 years agoUpdate the changelog for 0.21.1
gammafunk [Thu, 1 Feb 2018 05:30:36 +0000]
Update the changelog for 0.21.1

3 years agoFix local tiles minimap not properly showing transporters.
wheals [Tue, 30 Jan 2018 02:59:37 +0000]
Fix local tiles minimap not properly showing transporters.

3 years agoAdd icon for possessable status (Ultraviolent4, #11239)
Aidan Holm [Sat, 27 Jan 2018 20:13:31 +0000]
Add icon for possessable status (Ultraviolent4, #11239)

(cherry picked from commit dd6f4a9394f9b7979a1f9111661726b16a959c3f)

3 years agoDisplay zombie hands icon for offline tiles users
cut1less [Wed, 24 Jan 2018 16:23:18 +0000]
Display zombie hands icon for offline tiles users

(cherry picked from commit a32820bc895e52e9ddeec9c2614fb4ecc5b51042)

3 years agoFix crash when resizing window while targeting (#11356)
Aidan Holm [Sat, 27 Jan 2018 19:46:07 +0000]
Fix crash when resizing window while targeting (#11356)

(cherry picked from commit bb09730ba0a20baa68257f3f6607032f8b6dd849)

3 years agoDo not force more prompts for (most) of desolation of salt messages. (#707)
Elan Morin Tedronai [Sun, 28 Jan 2018 16:16:20 +0000]
Do not force more prompts for (most) of desolation of salt messages. (#707)

Timed portals have a default force more prompt for their initial
announcement message. The following messages do not cause additional
more prompts by default.

This commit makes the Desolation of Salt messages also behave like that.
Before this commit, the force_more was defined just as "distant wind".
Since "distant" is also used in many of the followup messages to
describe how far away the player is from the portal, this caused a lot
of additional "more" prompts for the player.
(cherry picked from commit 70bfd0b6028c7c70b394f1b053e86a2d107f8356)

3 years agoRestrict the "treat monster under you as the source" code to Dith shadows.
wheals [Sun, 28 Jan 2018 20:07:11 +0000]
Restrict the "treat monster under you as the source" code to Dith shadows.

(cherry picked from commit 8341686a52cbb280ad83346bf098fc53aef85c75)

3 years agoMake Dith Shadow Mimic launchers normal (Valarioth, ebering, advil, Snack)
Corin Buchanan-Howland [Sun, 28 Jan 2018 19:54:11 +0000]
Make Dith Shadow Mimic launchers normal (Valarioth, ebering, advil, Snack)

Dith now correctly sets shadow mimic launchers to be unbranded and +0 as
intended. Thanks to ebering for determining the root cause and advil for
writing this code.

(cherry picked from commit 1c85753056f30765d8517bd0e8f195705b29da06)