15 months agoUpdate changelog 0.23.3
Aidan Holm [Sun, 22 Mar 2020 04:14:58 +0000]
Update changelog

16 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)

16 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)

19 months agoFix a gcc warning
advil [Thu, 24 Oct 2019 14:59:31 +0000]
Fix a gcc warning

(cherry picked from commit 72b0ba0336dcb0a97e399f4966f57fcf973b2a24)

19 months agoFix mummy death curses from ally kills (12104)
advil [Thu, 24 Oct 2019 00:39:07 +0000]
Fix mummy death curses from ally kills (12104)

This has been broken for a while; it was a mid/mindex confusion. I've
also refactored the call so that it will better handle the case where
your summon does before the fineff fires.

(cherry picked from commit c4661985658596db158e4003f4cb197ee34c891d)

22 months agoRemove old 3rd party sdl build from travis
advil [Thu, 4 Jul 2019 01:55:50 +0000]
Remove old 3rd party sdl build from travis

(cherry picked from commit 4a4e93562d0d45c326bc1370fc1160714ce445c9)

22 months agoTravis: Update mingw package names for xenial
advil [Thu, 4 Jul 2019 15:26:09 +0000]
Travis: Update mingw package names for xenial

(cherry picked from commit 47c397e050513d7c26548b9e75d3ba47c2995940)

22 months agoAnother travis dep...
advil [Thu, 4 Jul 2019 13:52:29 +0000]
Another travis dep...

(cherry picked from commit 7d615089e71685322f979a7e641ba68f1eca7f8a)

22 months agoMore travis dependency updates, this time for BUILD_ALL
advil [Thu, 4 Jul 2019 12:54:58 +0000]
More travis dependency updates, this time for BUILD_ALL

(cherry picked from commit 7b9cff83cf45b7958a8811fb77d7bb228926e4e2)

22 months agoTry xenial (travis)
advil [Thu, 4 Jul 2019 02:52:46 +0000]
Try xenial (travis)

This apparently could happen any day now anyways.

(cherry picked from commit 3302cd442e81faa00c26680b9e7ccc0943d431e0)

22 months agoMore travis tweaking for local tiles
advil [Thu, 4 Jul 2019 02:13:21 +0000]
More travis tweaking for local tiles

(cherry picked from commit c1e67f237a3487a0684910313acedafe5db37b8a)

22 months agoFix some non-working code in `your_talents`
advil [Sun, 11 Aug 2019 15:26:06 +0000]
Fix some non-working code in `your_talents`

I'm still not sure under what natural circumstances this code can get
triggered, but it seems to be happening in this megazig character:

This bit of code for doing backup hotkey assignment for abilities has
apparently never worked, but it also is hard to get to, so no one has
noticed before.

(cherry picked from commit 2d01d4ab0a7cd92fbdf502c7aa80bf80fc4145f9)

23 months agoTweak the beast_lair_carwin fix
advil [Tue, 25 Jun 2019 21:29:32 +0000]
Tweak the beast_lair_carwin fix

For vaults that call the `large` monster function unconditionally, let
the tags in the des cache be adjusted. This will keep the behavior of
randomization more like before the first fix.

(cherry picked from commit 263dff2034ed8b9b189f66d8d7583cef5eee241f)

23 months agoMore des cache stability fixes
advil [Tue, 25 Jun 2019 14:28:55 +0000]
More des cache stability fixes

Aiming for completely reproducible des caches, at least relative to a
particular system.

(cherry picked from commit 1dd085888ca359b820f08486262821c3e0db055f)

23 months agoFix a des cache random tag issue
advil [Tue, 25 Jun 2019 14:00:12 +0000]
Fix a des cache random tag issue

See f57072b2d696. I suspect this has been responsible for a whole bunch
of issues where beast_lair_carwin maps have been showing up.

(cherry picked from commit c0fab7842f11dc1db4698ee9e711216b27c615b4)

2 years agoFix the build
advil [Wed, 5 Jun 2019 18:48:18 +0000]
Fix the build

(cherry picked from commit 4df2b1290f6c90cc34ad383aca0ad1a346e6e6e3)

2 years agoSeed explorer: more flexible depth args (ebering)
advil [Wed, 5 Jun 2019 16:20:54 +0000]
Seed explorer: more flexible depth args (ebering)

This doesn't accept a full depth spec, but does accept level or branch
names in short form. There's also now a parameter `-show` that allows
only showing some levels (you provide a list), though of course it still
has to generate everything before the shown levels. For example:

    util/fake_pty ./crawl -script seed_explorer.lua -seed random -count
10 -show Temple -cats features

(cherry picked from commit b853c62f84f0777691330905ec507a2bcde68057)

2 years agoCheckwhite
Chris Campbell [Tue, 4 Jun 2019 21:48:38 +0000]

(cherry picked from commit cc1054c7caed2e2e08b3be996bf1f68d14104f15)

2 years agoClean up some outdated comments
advil [Tue, 4 Jun 2019 20:05:03 +0000]
Clean up some outdated comments

and a few other misc fixes.

(cherry picked from commit f268315891c1cc96f69daa4c8b208891f9b1ea06)

2 years agoAdd a bit more about how to run the seed explorer in comments
advil [Tue, 4 Jun 2019 16:52:56 +0000]
Add a bit more about how to run the seed explorer in comments

(cherry picked from commit 86696efbda7f7c86f43cfae952ec61931c6c7f23)

2 years agoAdd shop items to seed explorer
advil [Tue, 4 Jun 2019 14:38:52 +0000]
Add shop items to seed explorer

This commit also changes &y and &Y to fully (un)identify items in shops;
before they only dealt with items that are identified by type.

(cherry picked from commit 0a26ff3fdf8e5433e45a5011c2e3a980a151aa11)

2 years agoMore seed explorer command line options
advil [Tue, 4 Jun 2019 02:12:35 +0000]
More seed explorer command line options

* add some shortcuts for looking at multiple seeds
* let categories be specified from the command line
* a few special subcases for items and monsters

For example, to look at all artefacts on the ground or held by monsters in seed 1, you can now do:
    util/fake_pty ./crawl -script seed_explorer.lua -seed 1 -cats monsters items -mon-items -artefacts

(caveat, shops are still not implemented)

(cherry picked from commit 65887bbefe61ec2443ec3f85b86c0510fcae2dc7)

2 years agoActually commit the new seed explorer script...
advil [Mon, 3 Jun 2019 19:12:46 +0000]
Actually commit the new seed explorer script...

Partial repeat of the commit message from d7d9f274c4ec:

Pretty basic right now, but you can run it with e.g.:

    util/fake_pty ./crawl -script seed_explorer.lua -seed 1

Supports multiple seeds, which can be random, and lets you pick the
depth. In the future I will add more customization to what exactly is

(cherry picked from commit b57f36d6e0b1ca1ef7e37a16cd19ab8fe44bf4b8)

2 years agoAdd a script interface to the seed explorer
advil [Mon, 3 Jun 2019 19:08:39 +0000]
Add a script interface to the seed explorer

Pretty basic right now, but you can run it with e.g.:

    util/fake_pty ./crawl -script seed_explorer.lua -seed 1

Supports multiple seeds, which can be random, and lets you pick the
depth. In the future I will add more customization to what exactly is

This commit also fixes a bug where scripts got doubled command line
arguments, and changes script behavior so that crawl only outputs what
the script does. (Also a few small cosmetic things.)

(cherry picked from commit d7d9f274c4eced0ba976da1f3acce156187dbd9c)

2 years agoRefactor the vault catalog test to use seed explorer code
advil [Mon, 3 Jun 2019 17:32:29 +0000]
Refactor the vault catalog test to use seed explorer code

The comparison part is still specialized (and maybe could be generalized
too) but otherwise the code for building the vault catalog is
essentially the same as seed explorer code.

(cherry picked from commit 6ad002bb795255f5e31fe3574e95d875bdac92cb)

2 years agoRefactor the seed explorer to do only one dungeon pass
advil [Mon, 3 Jun 2019 16:22:44 +0000]
Refactor the seed explorer to do only one dungeon pass

instead of iterating through the dungeon for each category. This turns
out to only get a negligable speedup (about 2s for a pass through the
entire generation depth) but the code is still probably cleaner this

(cherry picked from commit 8afd68e6110fd1c0252a2074de00dcca0f2a2237)

2 years agoRefactor the seed explorer code into a module in dat/dlua
advil [Mon, 3 Jun 2019 15:59:23 +0000]
Refactor the seed explorer code into a module in dat/dlua

Some minor cosmetic changes to the output while doing this, as well as
some code cleanup, but the behavior shouldn't be majorly changed.

(cherry picked from commit 4b3246705cc55370f779a6f3db4f7f075be1ca26)

2 years agoAdd dungeon features to the seed explorer
advil [Sun, 2 Jun 2019 22:41:01 +0000]
Add dungeon features to the seed explorer

(cherry picked from commit 637bb3806fda9021cf3beb44ccc69658059d2ad6)

2 years agoRemove unused variables in random_picker::probability_at
Alan Malloy [Wed, 29 May 2019 16:57:10 +0000]
Remove unused variables in random_picker::probability_at

(cherry picked from commit 78adf7823c89c138fdce218835c249e8b4584a99)

2 years agoSupport random seeds only in seed explorer (alexjurkiewicz)
advil [Mon, 27 May 2019 22:48:55 +0000]
Support random seeds only in seed explorer (alexjurkiewicz)

(cherry picked from commit 1748d93fb50ed57d02914a911638d99a2e8ec541)

2 years agoSeed explorer improvements
advil [Mon, 27 May 2019 17:21:42 +0000]
Seed explorer improvements

* Estimate OODness based on probability of generation at the relevant
  depth. There's also currently disabled code for indicating builder OOD
  rolls, which I found to be less useful. The supporting lua calls are
  available for player use in moninfo objects.
* Highlight "non-native" monsters, basically things placed by a vault
  that don't usually show up in the branch.
* Handle dancing weapons better.

(cherry picked from commit c1c896e988c1c1615f8e180033dff0a7669ab11d)

2 years agoSome cosmetic fixes for the seed explorer
advil [Sat, 25 May 2019 20:18:03 +0000]
Some cosmetic fixes for the seed explorer

(cherry picked from commit 57161393b2dcdd40fe53907917b5bc6e1686843d)

2 years agoAdd a basic lua seed explorer
advil [Sat, 25 May 2019 19:34:17 +0000]
Add a basic lua seed explorer

This prints out information about vaults, monsters, and items so far; it
is packaged as a test that prints these for the first 5 seeds (replacing
a less interesting test), but is fairly configurable if you're willing
to edit the lua. To run it directly, you'll need to use util/fake_pty
(which may need to be built), e.g.:

    util/fake_pty ./crawl -test seed_explorer.lua

This also introduces a few lua support things that were missing that
might be of general interest, especially monster inventory (which is
easy now that all monster items are id'd).

(cherry picked from commit 0dde086dc9d1482ee05b764859ae5c1b569ac519)

2 years agoAdd more monster info to Lua
mgdelmonte [Mon, 28 Jan 2019 15:52:46 +0000]
Add more monster info to Lua

Expose AC, EV, MR, and MaxHP in the CLua class.

Provide an optional "full description" string from desc().

Add a function defeat_mr(spell, evoked) that returns the chance for the
provided spell (from the spells module) to defeat the monster's MR. The
parameter evoked indicates if the spell is fired from a wand.

All of this information is provided to the player, so there are no
information leaks.

[Committer's note: Elaborated in the commit message, Closes #970]

(cherry picked from commit 3a7c41be2ba71c8a4e50c1d4195b2fe1f15b986f)

2 years agoProperly reset tags on vaults rooms
advil [Thu, 30 May 2019 04:42:30 +0000]
Properly reset tags on vaults rooms

The initial tag change here was persisting on vault definitions until
the next time crawl restarted, leading to seed instability in some
cases. In the seed this came up in, serial_ice_m placed in D and
mirrored horizontally. This vault is tagged with vaults_empty, and on
vaults 4 was getting the no_hmirror tag (among others) even though it
didn't ultimately place, and this was sticking around to any future
games in the same crawl session that tried to place serial_ice_m,
leading to the seed diverging after that point.  (The more obvious
divergence from the failure to hmirror in this seed came much later in
_prepare_water, because the deep water positions in the map were
affected by whether this vault mirrored or not.)

(cherry picked from commit 4de66ed42b6e5dd9f00c00d6f9cd9cd40cff3924)

2 years agoFix some missed random call sequencing
advil [Thu, 30 May 2019 12:52:33 +0000]
Fix some missed random call sequencing

resolve_range is just a wrapper on a random call, and so these calls
need sequence points to be stable across compilers. (See cdddf7c89e9)

(cherry picked from commit 3ea9d24d9875e4fb03d23841ceca4826e8735b41)

2 years agoHave fake_pty respond better to SIGINT and SIGTERM
advil [Mon, 27 May 2019 23:18:38 +0000]
Have fake_pty respond better to SIGINT and SIGTERM killing the subprocess. The point of this is to allow ctrl-c at
the command line to work. This is pretty hacky but it's better than
nothing. If someone has any idea why SIGHUP won't work, let me know.

(cherry picked from commit 0e0cebd0f35aafe5dc9093d1b4cca157704995b6)

2 years agoFix another abyss gozag gold detection case
advil [Thu, 23 May 2019 21:17:56 +0000]
Fix another abyss gozag gold detection case

(cherry picked from commit be4061de67c6c816c0a15ed96d44c7efc14637b9)

2 years agoClean up and improve gozag gold detection
advil [Thu, 23 May 2019 20:27:19 +0000]
Clean up and improve gozag gold detection

This consolidates a bunch of gozag code and removes an ASSERT that I
think was over-eager, firing when update_item_at doesn't lead to a gold
pile in the stash tracker. There had previously been two versions of
this code, and only one had the check, but it doesn't seem so obvious to
me that update_item_at should really be expected to make any arbitrary
gold pile visible in the stash.

This commit also makes gold detection work in the abyss beyond the
initial levelgen.

(cherry picked from commit 4488db6de095286baa3c5a4d935bc398f42a52aa)

2 years agoDon't crash on gozag + gold in grunt_nemelex_the_gamble
advil [Thu, 23 May 2019 14:30:59 +0000]
Don't crash on gozag + gold in grunt_nemelex_the_gamble

Unobtainable items don't appear in the stash tracker, and calls that try
to add them to it silently fail.  The only remaining "unobtainable"
items are in grunt_nemelex_the_gamble; these are marked unobtainable so
that if the player rolls the peril room they don't show up in the stash
tracker. However, Gozag's gold detection code didn't take this flag into
account, triggering an ASSERT on the expectation that any gold generated
at all would be trackable.

This isn't the most elegant solution, but it fixes the crash. I think
what would be better is for (i) "unobtainable" to be removed, since it
appears to have been deprecated for everything except this vault some
time ago, and (ii) for this vault to do something like destroy the items
if the player lands in the peril room.

(cherry picked from commit ff863c23c4f263c84d81c8afef9a870c5f0831c6)

2 years agoFix sprint inheriting seed from persistent options
advil [Tue, 7 May 2019 02:20:20 +0000]
Fix sprint inheriting seed from persistent options

After regular game end, sprints were accidentally picking up the seed
from the previous game. This commit still allows their seed to be set
explicitly from an rc file, but otherwise causes them to ignore the seed
UI. Also affects hints mode and tutorial, and will show an rc-set seed
in the menus for sprint ant tutorial.

(cherry picked from commit 3c078ff0d031dc40b5608ea315f4236516c3840c)

2 years agoFix signed casts causing build-specific behavior in random names
advil [Fri, 26 Apr 2019 21:50:56 +0000]
Fix signed casts causing build-specific behavior in random names

Random letter choices in make_name were casting a pseudo-random unsigned
32bit integer to int and then modding it with something of type size_t,
which will usually implicitly cast it back to size_t (which is unsigned
and may vary across platforms; the cast is triggered because it
typically is bigger than the int type so has a higher rank). If the int
value ended up as negative in the first cast, the implicit cast to
size_t was coming out differently on different platforms, leading to
different random names (basically depending on whether it was a 32bit or
64bit build).  This change maintains unsignedness throughout for more
stable behavior.

Because random naming uses its own rng objects, the effect of this was
partitioned off from anything else in levelgen, leading to identical
properties on randarts with different names across platforms in gotm 2
(since windows is a 32bit build).

(cherry picked from commit 6f7e2cb4ba9b7c7c7a69414ee38a02e2b3a7e36b)

2 years agoPrevent messages from impacting non-UI generators
advil [Wed, 17 Apr 2019 21:18:38 +0000]
Prevent messages from impacting non-UI generators

This may be overkill, but a lot of things can happen during messaging in
crawlcode, so this will ensure that none of those things will ever
affect the levelgen (or gameplay) rng.

(cherry picked from commit f493760c106ee6091b4d100717670827876d77d4)

2 years agoDon't use div_rand_round for noise values
advil [Wed, 17 Apr 2019 21:03:11 +0000]
Don't use div_rand_round for noise values

In wizmode, this could have the following effect: in a non-pregen game,
when a noise happened before descending to a new level, as long as
levelgen triggers a more, drawing the wizmode noise bar could cycle the
levelgen rng while rerendering the hud during that more. (I hope there
aren't more things like this, but there might be, as quite a lot of code
gets called on a more. So it may be worth just forcing the ui rng for
doing mores.) Luckily, non-wizmode noise rendering doesn't call this
code path.

(cherry picked from commit 26cb7716be52e652a346b03d8bd6e70913aa581a)

2 years agoInitialize `you.trapped` to false
advil [Sat, 13 Apr 2019 13:58:29 +0000]
Initialize `you.trapped` to false

Previously, this was uninitialized, so on some builds the first
time-taking action after loading the game could roll random trap
effects, regardless of whether a new square was revealed. The exact
behavior would be implementation/compiler-dependent, but on OS X it was
getting a random-ish value presumably determined by whatever was in
memory before, and I suspect this would be the typical behavior.

(cherry picked from commit 6074511092ad270a8202bd6f5d428e3cf35c838b)

2 years agoUpdate debian changelog for 0.23.2 release 0.23.2
advil [Sun, 31 Mar 2019 00:40:33 +0000]
Update debian changelog for 0.23.2 release

2 years agoChangelog tweaks for 0.23.2
advil [Sun, 31 Mar 2019 00:38:11 +0000]
Changelog tweaks for 0.23.2

2 years agoUpdate CREDITS.txt
Edgar A. Bering IV [Fri, 29 Mar 2019 02:54:44 +0000]
Update CREDITS.txt

(cherry picked from commit 1ac5efaa63ecbfec781f565388a398b8cdcbbbab)

2 years agoUpdate sdl2 contrib with mac resize fix (11895)
advil [Sat, 30 Mar 2019 23:09:55 +0000]
Update sdl2 contrib with mac resize fix (11895)

See the SDL2 commit message for details:

(cherry picked from commit ca936617586b19b2135f31ac0f34d63ca918cad4)

2 years agoUpdate
Koen De Groote [Sat, 30 Mar 2019 16:04:26 +0000]


(cherry picked from commit 0b285d475d8059dc9e49e8e210d068f836f83743)

2 years agoLinebreak level annotations in chardumps (11904)
advil [Sat, 30 Mar 2019 13:48:12 +0000]
Linebreak level annotations in chardumps (11904)

This isn't really a complete solution: in general, the chardump doesn't
fully respect 80 chars, this was just the most egregious example. ?# on
tiles is fine with everything else I tested, in that it typically
doesn't expand past the end of the screen, but ?# on console truncates
on the right rather than centering, so still has a bunch of issues. I
think a complete solution needs: (i) on tiles, prevent
formatted_scroller from being wider than the displayable area, (ii)
implement left-right scrolling in formatted_scroller, and (iii) take
another pass to see what can be truncated at 80 characters. (For
some things, like the action table, this probably isn't possible, but
long equipment names for example could be better managed.) I did
consider truncating the entire main chardump at 80 characters but this
tends to look kind of bad in a lot of cases.

This commit also tweaks some wizmode formatting for vault lits so it's
readable in console in ?#.

(cherry picked from commit 0142750c7a98e56101ca5f8cda0daba373f317b3)

2 years agoDon't try to generate any removed branches in mapstat
Nikolai Lavsky [Fri, 29 Mar 2019 11:50:41 +0000]
Don't try to generate any removed branches in mapstat

As a followup to 17bec22d, this commit prevents mapstat from generating
the other removed branches: the Dwarven Hall and Hall of Blades.

It affects only the latter though, because the Dwarven Hall doesn't have
any maps and cannot be generated anyway.

(cherry picked from commit 9656df7c86a9ee6ebac250dc318522470836fc26)

2 years agoPlace transporters consistently in abyss
advil [Sat, 30 Mar 2019 00:07:14 +0000]
Place transporters consistently in abyss

Before, they were placing correctly when first entering an abyss level,
because that code used the builder; they were also shifting correctly.
But when a transporter vault placed as part of tele/movement-based
generation, transporters were not being placed on the markers correctly
because this code path *doesn't* use the builder. So, call the
transporter conversion function directly after placing new vaults.

(cherry picked from commit a595e75330f5ac5d13da7a2a0293c268cc7491de)

2 years agoDon't try to generate Labyrinths in mapstat (vt)
gammafunk [Thu, 28 Mar 2019 21:20:51 +0000]
Don't try to generate Labyrinths in mapstat (vt)

When running mapstat without any level specification, which implicitly
means "all dungeon levels", don't include Labs. Labs no longer have a
layout, so trying to generate the branch will crash.

(cherry picked from commit 17bec22d17066b0ea76488563c2e03f0d7c4404c)

2 years agoDon't place shafts in ebering_ghost_disaster_area (11926)
NormalPerson7 [Mon, 25 Mar 2019 14:32:24 +0000]
Don't place shafts in ebering_ghost_disaster_area (11926)

This commit prevents the vaults ebering_ghost_disaster_area and
ebering_vaults_ghost_disaster_area from placing shaft traps, instead
placing only water and lava tiles, implementing option 2 in 11926.
This change is to prevent ghosts in these vaults from being shafted
immediately when they enter line of sight of the player, before the
player can do anything to stop this.

These vaults were introduced by commits bb431e2 and a6a7277
respectively, and appear to have been introduced with the idea that
ghosts cannot be shafted. Ghosts can now be shafted, as of 8c2e593, and
this means that these vaults in particular could cause ghosts to be
shafted to lower floors, leaving behind an empty (or mostly empty) ghost
vault for the player to raid, and allowing the ghost to be encountered
outside of its vault on a lower floor, with the player then unable to
choose whether to fight the ghost.

(cherry picked from commit 696e1f2bf7e3024675cc207daec8b63bb9c06ffc)

2 years agoRemove a digging Trove
gammafunk [Thu, 28 Mar 2019 03:48:39 +0000]
Remove a digging Trove

The map trove_dig had the player individually dig out 20 items with dig
wands, but this is very tedious. The items in this trove are just
typical trove items, so the map isn't otherwise bringing anything
interesting to the portal.

(cherry picked from commit 1d96822bd8ed83a27943f686bd6f35a3e0664069)

2 years agoChangelog updates for a 0.23.2 release
advil [Thu, 28 Mar 2019 03:24:58 +0000]
Changelog updates for a 0.23.2 release

Not time for the release yet, just getting things in order...

2 years agoBetter newgame messaging when a game already exists
advil [Mon, 18 Mar 2019 22:20:05 +0000]
Better newgame messaging when a game already exists

Before, if a game already existed under the name, any menu option that
would start a game with that name prefilled (from prefs) would just load
the existing game, regardless of game type. Before seeded games, this
only affected tutorial vs. regular games, but it's now even more
confusing with seeded games. These menus are still a bit of a mess, so
this could use some more work (it might be better to prompt for a
different name from the seed menu, or do the check before opening that

(cherry picked from commit f2055891f03d71e7da4261c832e1d593d7ba4fe8)

2 years agoAdd version number to seed selection menu
advil [Mon, 18 Mar 2019 21:43:19 +0000]
Add version number to seed selection menu

To try to more clearly cue that this is version-specific.

(cherry picked from commit aac6ce03dcdc324daee1b5a86a99afc5585766f8)

2 years agoFix meatsprint (11834)
advil [Mon, 18 Mar 2019 16:00:39 +0000]
Fix meatsprint (11834)

Meatsprint distributed monsters by placing them in a secret room, and
then letting them walk into permanent teleport traps. The trap changes
in 0.23 broke I think several of the assumptions this strategy made,
most importantly that tele traps work out of player los (66906bf02876).
This commit uses fundamentally the same approach, but instead of
teleport traps, uses a dlua call to teleport monsters immediately on
placement. It might be even simpler to do some kind of random placement
off the bat, but using the teleport code has various nice consequences
in terms of finding free spaces, etc. I also didn't put much effort into
seeing if there's a simple way to do this without the secret room.

It turns out that the previous implementation was letting some degree of
rate-limiting via monster random movement happen (I believe placement
could fail in cases where a monster didn't move off the spawn point). I
have done a rough rebalancing accordingly. With two spawn points instead
of 4, the overall spawn numbers are very closely matched; I would guess
that there's a slight increase in some of the higher-xp categories on
average, but there's plenty of variance so I'm not sure. This may need
more rebalancing based on feedback from people who have more experience
playing this sprint.

Here are some representative spawn numbers at turn 150:

0.23 with 2 spawn points:
Monsters: The Meatlord, 25 meat beasts, The Captor, The Defiler, The
Servant, 20 eight-headed meat hydras, 23 observers, 13 tyrants, 16
accurseds, 67 meat berserkers, 17 large bags of meat, 16 scourges, 33
destroyers, 13 wretched souls, 20 dreads, 161 bags of meat, 36
fleshlords, and 16 sculptors of flesh.
480 monsters, 35685031 total exp value (33124737 non-uniq)

(with 4 spawn points in 0.23 you hit the monster limit so it's more
annoying to compile the numbers, but they are unsurprisingly about
double this.)

0.22, with 4 spawn points:
Monsters: The Meatlord, 21 meat beasts, The Captor, The Defiler, The
Servant, 21 eight-headed meat hydras, 14 observers, 18 tyrants, 17
accurseds, 70 meat berserkers, 14 large bags of meat, 18 scourges, 37
destroyers, 21 wretched souls, 16 dreads, 170 bags of meat, 31
fleshlords, and 15 sculptors of flesh.
487 monsters, 32820392 total exp value (30260098 non-uniq)

(cherry picked from commit 62cde1d77f5068e375109bb98cd6c28594429ca7)

2 years agoDon't save seed pref for sprint, tutorial
advil [Mon, 18 Mar 2019 14:05:10 +0000]
Don't save seed pref for sprint, tutorial

(cherry picked from commit 3dc15b603402f012e0c7c2ed0d809d3268c19ef9)

2 years agoDisable seed .pref saving for DGL builds (11928 / kitchen_ace)
advil [Mon, 18 Mar 2019 13:13:33 +0000]
Disable seed .pref saving for DGL builds (11928 / kitchen_ace)

I didn't do this before because it doesn't actually affect anything
about starting a game, but I forgot that .pref reading uses regular
options reading, which will trigger an error for dgl builds if game_seed
is set. (There may be some harmless instances of this error remaining
that will only be visible to server admins until .pref files get

(cherry picked from commit 6c5f6a5ba46661cd51afd32cbf3a097ae18cc0af)

2 years agoSave seed number in startup prefs on game end
advil [Mon, 18 Mar 2019 01:07:06 +0000]
Save seed number in startup prefs on game end

The effect of this change is to autofill the seed selection box with the
seed from the last ended game. This saves only the seed in a kind of ad
hoc way. However, the alternate behavior, which would be to repopulate
the entire prefs file from the ended game, isn't trivial -- since it
doesn't seem that all startup prefs are actually recoverable from a game
save. (That ultimately still may be the most sensible behavior though.)

(cherry picked from commit 9bee6ebae348acf1dfbde8e7ff7c774eeff37214)

2 years agoRun dactions on entering any level, fixing gozag+pregen (Goratrix)
advil [Sun, 17 Mar 2019 17:45:54 +0000]
Run dactions on entering any level, fixing gozag+pregen (Goratrix)

Previously, dactions run only on re-entering a level, and not on
entering a generated level. For bribe branch, this was dealt with by
having the builder set the relevant monster flags when generating a new
level. For pregen, this needs to be done on entering the level, and the
simplest way was to just run dactions when entering any level; this
seems like a cleaner approach they way dactions are thought of anyways.
There might actually be a few wrath-related actions that weren't being
run as well. I don't *think* there will be unexpected consequences of
this, and most dactions won't do anything on a new level. But, it's not
impossible that this won't have some strange side effect I missed.

(cherry picked from commit 063869c3723ef6c111b1614b3be7ad74e54fba85)

2 years agoPrevent allied Shambling Mangroves from constricting themselves (11877)
Nikolai Lavsky [Fri, 1 Mar 2019 11:01:26 +0000]
Prevent allied Shambling Mangroves from constricting themselves (11877)

(cherry picked from commit 5d897e9104ac90bf7eeade97a9fd707dc081109f)

2 years agoCorrect a comment
Umer Shaikh [Sat, 9 Mar 2019 03:14:59 +0000]
Correct a comment

Lua function you.contaminated returns a number, not a boolean.

(cherry picked from commit 395302c1d307d6f21c25350a793495b8bc80dba7)

2 years agoCorrect a comment
Umer Shaikh [Thu, 7 Mar 2019 17:13:41 +0000]
Correct a comment

The comment misdescribes when the parameter auto_wield is true or false;
this commit brings it in line with the code.

(cherry picked from commit 2784ca5e572ec5611a9b61ed68e711ab1316d7f9)

2 years agoFix splash noises when dropping item into water
Joshua Gelbard [Sat, 9 Mar 2019 08:17:25 +0000]
Fix splash noises when dropping item into water

Added a missing `!`. Behavior was reverse of intended: instead of
swimming characters being the only ones exempt from item splash sounds,
they were the only ones making them.

(cherry picked from commit 40992d5efd893f74808a4c55009a1f7dc1491580)

2 years agoFix cut-off ability cost description (11893)
NormalPerson7 [Thu, 7 Mar 2019 20:52:59 +0000]
Fix cut-off ability cost description (11893)

When the Sacrifice Purity ability is granted to the player with the
inhibited regeneration mutation, the ability's cost description is
  Purity (inhibited regeneration)
which is 31 characters, however the cost string was only allocated 30
characters, so the last parenthesis was being cut off.

Hence, extend the string length for the ability cost description to 32
characters, and adjust the ability screen's title line accordingly.

(cherry picked from commit c02bd79eda024b4fd058c66282735797166840f0)

2 years agoStart new wanderers with weapon in slot 'a' (#1006)
Josh Gelbard [Fri, 15 Mar 2019 07:05:16 +0000]
Start new wanderers with weapon in slot 'a' (#1006)

All new characters who start with a weapon wielded will now
find that weapon in slot 'a'. This was already true for all
backgrounds except wanderer.

(cherry picked from commit cb5ae2cd75adb176013844d9e8642b1698213d6f)

2 years agoUse & instead of equal for holiness check (11909) (#1001)
Josh Braden [Fri, 15 Mar 2019 02:24:02 +0000]
Use & instead of equal for holiness check (11909) (#1001)

(cherry picked from commit 890246250bbc7f239d24a39d98b4fd8b4430f663)

2 years agoImprovements to the seed selection ui
advil [Thu, 14 Mar 2019 19:20:27 +0000]
Improvements to the seed selection ui

* make game_seed a sticky preference. This won't override rc preferences
  or CLI seed selection, but makes it a lot more convenient to dispense
  with ever setting it in an rc. The main effect is that this autofills
  the text box in the seed selection sub-menu; it doesn't affect
  the regular game start button (in contrast to selecting a seed in the
  regular rc).
* Fix a bug where a non-seeded game type could be started with a custom
  seed, if the game restarted after ending a seeded game started in the
  same session.
* add - as a shortcut to clear the seed input

(cherry picked from commit c7eaa0789552f2bd8694c2a2d9db22e00f74e243)

2 years agoMake search_astar more stable across platforms
advil [Wed, 13 Mar 2019 18:11:38 +0000]
Make search_astar more stable across platforms

This function is used by slime levelgen in order to ensure level
connectivity that doesn't require touching slime walls, and because of
this use matters for seeding in slime (both because its behavior impacts
what wall squares get removed, and because this astar implementation
draws heavily on the rng. The implementation was behaving differently
across platforms.  Because slime is pretty independent of other
branches, the instability was localized to that branch, but usually
affected the entire thing.

The basic problem is that the search fringe was sorted only by distance
in the priority queue, so if two coordinates were the same distance,
their ordering in the queue was implementation-dependent (and was
differing on mac vs linux builds at least). This fix makes the sort
stable in such cases by comparing coordinates as well. This won't
necessarily do anything for the speed of the search (perhaps LIFO
behavior would be better)...

I wonder if this overall approach is really the best way to ensure
connectivity in slime? And why does this algorithm need randomization
(classic a-star doesn't)? But this code is complicated enough that I'm
not going to mess with it further right now.

(cherry picked from commit d121a6d4c08e280d8ccc9d3a319aead044c9f153)

2 years agoNew transporter and Golubria tiles (CanOfWorms)
gammafunk [Wed, 13 Mar 2019 04:37:17 +0000]
New transporter and Golubria tiles (CanOfWorms)

Transporters, transporter landing sites, and Golubria passages get tiles
that better communicate how they are portals that take you to another

(cherry picked from commit 654ca03102e98d616b074263110b987b04df3162)

2 years agoAdd a debugging rng call
advil [Wed, 13 Mar 2019 01:12:50 +0000]
Add a debugging rng call

Lets you look one step ahead.

(cherry picked from commit 7a2c91a3c8db3573e3bf56250be95b5c69f4af86)

2 years agoConvert some floating point math to better fixed point math
advil [Tue, 12 Mar 2019 23:11:27 +0000]
Convert some floating point math to better fixed point math

This math was leading to instability across seeds depending on the
particular way in which floating point math was done on a build and

This uses a suggestion from |amethyst - since callers always use
`percent` values that are divisible by 10, can just do the math with a
single decimal point rather than two, which takes up a lot less space.
This makes the calculation more accurate than what it replaces (though
it still truncates, rather than rounds).  For that reason, I have put in
a temporary stopgap with the quirks of the previous implementation when
run using the SSE version of the old floating point calculation. I will
remove this at some point after 0.23.2 is tagged.  (But for now, this
keeps the gotm stable.)

(cherry picked from commit 5963e8c6b7bb67c410ff78b59e3e9c53de4a04b7)

2 years agoFix build try 2
advil [Tue, 12 Mar 2019 13:17:31 +0000]
Fix build try 2

(cherry picked from commit 4d902318472b732ae930f8d934103d35724b2abd)

2 years agomaybe fix the build
advil [Tue, 12 Mar 2019 01:32:55 +0000]
maybe fix the build

(cherry picked from commit c3651c4c44431f1d7700df2d1515f9807738aa1c)

2 years agoUn-revert a Makefile fix
advil [Mon, 11 Mar 2019 20:50:13 +0000]
Un-revert a Makefile fix

This was lumped in with the sse change, doesn't need to be reverted.

(cherry picked from commit e201941ac7c4b1fc96657424a5e2d94e01646e13)

2 years agoDon't return NaN from prompt_for_float
Alan Malloy [Mon, 11 Mar 2019 23:02:22 +0000]
Don't return NaN from prompt_for_float

(cherry picked from commit 1e706217e8ff188799de57579b205fcb313cd36d)

2 years agoRevert "Build for SSE2 on all systems, including 32bit targets"
advil [Mon, 11 Mar 2019 20:32:50 +0000]
Revert "Build for SSE2 on all systems, including 32bit targets"

No longer necessary. Results #996 (and #992 in a different way).

This reverts commit 3d66cf40a65a3843061e5a6d1106f9fa5d2b0bdb.

(cherry picked from commit c15b636e9cf1c4702c907fe319bafe0722352ffc)

2 years agoRevert "Add a build option to not use SSE"
advil [Mon, 11 Mar 2019 20:32:23 +0000]
Revert "Add a build option to not use SSE"

No longer necessary.

This reverts commit fc1eed5d34c6ec5942309776f806e12eb0ccc867.

(cherry picked from commit c07d39d5f47b3c974ec2696502d8203c1820d108)

2 years agoFix cross-platform lua number->int conversion the hard way
advil [Mon, 11 Mar 2019 20:17:44 +0000]
Fix cross-platform lua number->int conversion the hard way

Lua 5.1 doesn't distinguish integers from numbers generally, and stores
numbers as doubles, but on the c++ side we very often want ints. In
3d66cf40a65a384 I discovered that, depending on where the lua library is
compiled, it may use different conversion methods in its conversion
calls, which have different truncation behavior, leading to seed
instability across systems (where it uses a specific hack on 32bit
non-sse builds, a different one in msvc, and a regular cast otherwise).
This behavior is determined at compile-time in luaconf.h, and the first
attempt at a fix tried to prevent contrib lua from being built with the
alternate behavior, always using a cast. This didn't generalize for at
least two reasons: it creates problems trying to compile on other archs
(see #992, #996), and it doesn't even cover all the problem situations:
linux will typically build with system lua, and then we are at the mercy
of whatever arch the system lua was built on anyways. (I have replicated
the problem in a 32 bit ubuntu container, for example, even with the
compilation fix.)

This commit moves away from using lua's default calls for converting to
ints, to conversion functions that we control in crawlcode. It's overkill
to convert everything, only the dungeon and related calls are really
needed, but converting everything was the most robust way to do it. Note
that this *doesn't* address any instances of this call in the lua lib,
with the hope that they won't matter.

The only alternative that I can think of to a change like this would be
to require building with contrib lua, and then fix the problem there,
but this would seem to go against the spirit of our current build

(cherry picked from commit 9dfec575989f23c8c21e07fbc01c7facf7f6615a)

2 years agoAdd a warning for setting `game_seed` online
advil [Thu, 7 Mar 2019 14:17:39 +0000]
Add a warning for setting `game_seed` online

Before, this failed silently, which in at least one case seems to have
confused a player into thinking that they succesfully set the seed.

(cherry picked from commit d8427f5388a232a78fd1a3a47c897e7e7b166a3a)

2 years agoDon't change game chapter on a level excursion from abyss (11922)
advil [Wed, 6 Mar 2019 21:32:48 +0000]
Don't change game chapter on a level excursion from abyss (11922)

Level excursions can be used in the abyss to pull in ruined versions of
terrain from regular connected levels. This bug didn't come up before,
because if no levels have been explored (as is the case for an AK
start), there is no level excursion. But with pregen, the builder can
use terrain from levels the player hasn't seen yet, and if it chose to
do this, the level excursion was resetting the chapter for an AK start
to CHAPTER_ORB_HUNTING (for some seeds on turn 0). This generates an
error message when leaving the abyss for wizards, a crash for
non-wizards, and also would impact item/monster generation, because an
AK character is no longer in the pocket abyss, for seeds that are
affected. (But since AK starts that trigger this bug are just broken,
that last part is not too big a deal.)

This commit doesn't include save compat, because as far as I know this
is rare, but save compat could be added if I'm wrong about this.

(cherry picked from commit 029c7ce0acf44150939d4d2818de5a2e28a6b4a9)

2 years 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.

(if you want to cherry-pick this to a past version, it is probably
easier to use b7382820b72 from 0.22.)

(cherry picked from commit b7382820b7259ae5d2ffec6fa48112b66c2509ab)
(cherry picked from commit 1b465fed6c1aab4eebd53f2cbc4093a4104187ba)

2 years agoDon't let explore options impact connectivity checks
advil [Wed, 6 Mar 2019 02:36:37 +0000]
Don't let explore options impact connectivity checks

This was impacting seed stability: this code is called in various
contexts, including stair checks / vault exit checks, plus from some lua
code. The returned coordinate could be different depending on these
options. The options that could potentially matter are
`explore_wall_bias` and `explore_item_greed`, though I suspect the
latter won't. The former I have verified to matter on seed
18127138284784505733 (UV4's game of the month seed right now), where
setting it to 1 prior to this commit produces a different dungeon than
the default value of 0.  Thanks to u/kitchen_ace for noticing that
deleting their rc file changed the dungeon, otherwise I'm not sure I
would have ever found this bug.

(cherry picked from commit 56e1b8fd0ee2b8544c10cc44545a6ac9b36759c4)

2 years agoDon't feel safe while emergency-flying (/u/StairDancer)
Alan Malloy [Tue, 5 Mar 2019 22:26:30 +0000]
Don't feel safe while emergency-flying (/u/StairDancer)

(cherry picked from commit 64c5a76fe24c2fd57ffc53d9492c4e4f103fc1d9)

2 years agoSave game seed properly
advil [Tue, 5 Mar 2019 05:14:06 +0000]
Save game seed properly

This was broken in 372e6d594387f, which caused the seed to save as 0
because of the timing of the call to the `player` constructor.  After
initial rng setup this value isn't used for anything meaningful (since
what matters is the rng state itself), so its disappearance was entirely
cosmetic -- but also very confusing to players.

(cherry picked from commit 3f7990ae4ddb0e234c85aa0565bf6a2d59b45c24)

2 years agoAdd a paste option to the seed ui for local tiles
advil [Tue, 5 Mar 2019 04:30:10 +0000]
Add a paste option to the seed ui for local tiles

This is very ad-hoc and specific to the seed menu, but it'll do for now.
Needs testing on windows/linux, but it's relying on SDL code so should
work if that does.

Also restrict text input for the seed text box to digits.

(cherry picked from commit fa3a8d60dbc7cd9abb3a193bce499daf431a0d5f)

2 years agoAllow debug.reset_rng to take a string for 128 bit seeds
advil [Mon, 4 Mar 2019 22:24:35 +0000]
Allow debug.reset_rng to take a string for 128 bit seeds

This isn't very elegant, but it gets around lua big number handling
issues that I was otherwise having.

(cherry picked from commit f1ee1cdb4ee716c3e4f37ac1818bb71ac7e23339)

2 years agoAdd an extra digit to the seed choice input box (Siegurt)
advil [Mon, 4 Mar 2019 14:29:46 +0000]
Add an extra digit to the seed choice input box (Siegurt)

Until this is in stable, use the rc option `game_seed` or the command
line option `-seed` to select a seed that needs the extra digit.

(cherry picked from commit 7c828743320302dce5962c2c96ff8e1f685472f6)

2 years agoLet barachim use grand finale at range 8 (11917)
NormalPerson7 [Sun, 3 Mar 2019 17:37:44 +0000]
Let barachim use grand finale at range 8 (11917)

The range of grand finale was hardcoded as 7 rather than using
LOS_RADIUS, so when barachim were added, this wasn't updated.
This commit changes the grand finale targeter to use targeter_smite's
default parameters, which include range = LOS_RADIUS.

(cherry picked from commit caa6c10b7c1b3c1329dc47b88e9fe829e23ebe61)

2 years agoQuiet some gcc warnings
advil [Fri, 1 Mar 2019 03:22:17 +0000]
Quiet some gcc warnings

(cherry picked from commit eb6712d24a62ed29fb56cde67feab460f5708b8e)

2 years agoFinal 0.23.1 changelog tweak 0.23.1
gammafunk [Thu, 28 Feb 2019 23:45:55 +0000]
Final 0.23.1 changelog tweak

2 years agoAdd Debian changelog entries for past releases
gammafunk [Thu, 28 Feb 2019 01:41:00 +0000]
Add Debian changelog entries for past releases

Entries for bugfix releases from 0.22, 0.21, and 0.20 that are missing
from the current Debian changelog.

(cherry picked from commit ad582e563c65d8b1b5cab1dd416d1ef4dab11250)

2 years agoAdd the changelog for 0.22.1
gammafunk [Thu, 28 Feb 2019 01:35:56 +0000]
Add the changelog for 0.22.1

(cherry picked from commit ff85673007d8a9edc3f113a819d6506a8c76e704)

2 years agoFix dancing weapon description on hover (11887)
NormalPerson7 [Tue, 19 Feb 2019 20:25:12 +0000]
Fix dancing weapon description on hover (11887)

Previously the dancing weapon's name was being duplicated because there
weren't proper checks for dancing weapons in the second half of
get_monster_equipment_desc. This was broken in f44d0c5.

(cherry picked from commit d96d3d62bdec8cb52410f53fa3e9d706723a3735)

2 years agoUpdate changelogs for 0.23.1
gammafunk [Thu, 28 Feb 2019 01:34:05 +0000]
Update changelogs for 0.23.1

2 years agoCorrect a comment
gammafunk [Mon, 18 Feb 2019 05:41:51 +0000]
Correct a comment

(cherry picked from commit d0b080c8eba84a7dfee05b3d85595fd5ce64472d)