0.23.2 and 0.22.2 bugfix releases

There’s a new bug fix release of the 0.23.2 stable version of DCSS. Source packages and binaries for Windows, OS X, and Linux are available now. We recommend all 0.23 users upgrade to this version. Major bug fixes and updates:

  • Various seed-related bugfixes and improvements:
    • Seed input now supports pasting, and is autofilled from the last game.
    • The seed input box now has an extra digit.
    • The game seed is saved correctly and will no longer show as 0 for games
      started after this fix.
    • Seed stability for floating point calculations: for most configuration the
      main dungeon should remain unchanged, but 32 bit systems (and 32-bit builds)
      should now be much more stable, among others. Slime will likely differ.
    • Seed stability for rc options: certain rc options affected the generation
      of some layouts, leading to divergent seeds.
  • AK starts will no longer crash when exiting the abyss in pregen games.
  • Gozag bribe branch in pregen games now works correctly when entering a
    previously unvisited level.
  • Meatsprint is now difficult again.

Aside from the major fixes listed above, there are scores of smaller bug fixes, vault tweaks, description updates, and the like, so be sure to upgrade! If you’d like to read more about the seeding project, see here.

In addition, there is a new bugfix release of the 0.22.2 previous stable version, that backports a number of fixes. If you are still playing 0.22, we recommend that upgrade, especially if you have a shared save folder with 0.23 versions (common on OS X) — this release will prevent a major incompatibility between the two versions.

Happy Crawling!

Comments Off

Behind the scenes on retrofitting DCSS’ seeding

What is seeding?

The 0.23 release introduced a major and ongoing overhaul in how DCSS approaches random seeding from the player’s perspective. If you’re not familiar with this idea from other games with random procedural generation like Minecraft, Spelunky and brogue, here’s how it’s supposed to work: if you enter a specific code (the “seed”) into the game when starting it, you’ll get a repeatable form of randomness that encompasses dungeon layout, items, and monsters. Any dungeon generated with that seed should be identical. This has many applications: from Spelunky or Brogue (and many others) you might be familiar with the concept of a daily, weekly, or monthly run. In these, all players enter the same seed and over some time interval explore the same dungeon. Here are a few ways crawl community has been experimenting with this since the release:

  • On the CPO server, run by chequers, there is an experimental weekly online challenge with a share dungeon.
  • Ultraviolent4 has started running an offline Game of the Month challenge. (Edit: The next challenge begins on Apr 7, per uv4.)

I’m excited to see what else develops. But what does it take for this to actually work? This post goes into the background on what has been involved in doing this retrofitting for DCSS, where it is at, and what the remaining problems are.

Randomness and procedural generation

Procedural level generation happens via constrained randomness. Some process repeatedly draws on a random number generator according to a fixed, predefined set of constraints and rules, making choices that (ideally) generate a coherent, explorable, locale. At the heart of this is a random number generator, which usually takes the form of a function that the programmer can repeatedly call, generating a sequence of numbers.

Now, “true randomness” is more of an ideal than anything that can be implemented, so RNGs are really only “pseudo-random”. What this means is that they aim to (in addition to matching some overall distribution) be unpredictable, which a viewer or adversary will perceive as random. Unpredictability can be defined in precise mathematical terms that I won’t go into here, but it doesn’t actually mean complicated: some of the best rng algorithms are remarkably simple. They basically all work by initializing the rng state with a “seed”, and repeatedly transforming that state, and the heart of the one we use, PCG, is just 5 lines of code. For cases where there is an adversary, you want this initial seed to itself be unpredictable, and so common strategies are to use some external state of the program (e.g. exact time, external devices) to do this initialization: then, if the adversary doesn’t know the initial state, and the algorithm is unpredictable in the right way, they’re out of luck.

Video games flip this idea on its head. For some kinds of RNGs, if you initialize the generator in the same way, multiple instances will generate the same sequence of numbers in the same order, while still behaving unpredictably and well-distributed as long as the seed is unknown. This means that if the rules and constraints that draw on the RNG are implemented correctly (we’ll come back to this), the behavior given that seed acts random but is completely replicable. You can think of the RNG as, given a seed, providing a “code book” of integers that acts random, but as long as you have the code book and the correct rules/constraints (giving you position in the list), you can decode the behavior of the game.

There are, then, two main ways to make this go wrong: mess up the initial conditions, or cause the rng to get out of sync. This latter case is when two processes are using the same sequence, but make decisions starting from different points in the sequence. Because of unpredicatability, their behavior will diverge extremely rapidly (more on this later). In general, if RNG behavior diverges at all, it tends to diverge thoroughly and quickly.

DCSS has long used the PCG RNG which (like the Mersenne Twister, xorshift, and many others) supports this reproducibility; retired dev bh added this in 2015, replacing a hand-rolled implementation of an algorithm from the 80s that was more predictable. However, using a good RNG algorithm is only one piece of the picture, and turns out to be probably the least complicated part of this project.

Why player-facing seeding was (and is) hard for DCSS

Crawl wasn’t remotely designed with seeding as a player-facing feature in mind; though many roguelikes have used specifiable seeds for testing, the mainstream use as a player feature seems to be quite recent. Actually, I couldn’t find out much of the history of using seeding for completely repeatable procedural generation as a player-oriented feature, but it doesn’t seem to have been very mainstream before games like Minecraft and Spelunky; an earlier example, pointed out to me by Roguelikes discord user esc, is Civ 3. Seed-based pseudo-randomness, internal to the game, is much older, and for example Moria allowed choosing a seed for testing purposes. But getting seeding to work as a player feature is a whole different project.

Here are four challenges that DCSS faced (and still faces) when trying to get player-facing seeding to work well:

  1. Mixing of gameplay / levelgen RNG
  2. Arbitrary interactions in level generation between levels.
  3. Extremely complex level generation with a huge diversity of procedural generation techniques, implemented in a mix of C++ and Lua code.
  4. Diversity of build targets and settings: support for windows, mac, linux, with 32 or 64 bit builds. Builds on non-x86 architectures such as ARM.

When starting the project, I was aware of factors 3-4, but thought 1-2 would be the biggest challenges, and so it was there that I began. In retrospect, 4 is actually the biggest problem.

Before 0.23, generating a level and entering a level were completely intertwined: levels were not generated until you entered them. “Greedy” level generation goes back to Linley’s Dungeon Crawl as far as I’m aware, and on its own terms is a fairly simple and clean approach, spreading the CPU cost of level generation across the game in a way that hides it from the player. However, it can lead to a problem illustrated by the following toy example: suppose that you have a separate RNG for each level, the player is on level 2, and for both levels 3 and 4 Sigmund is poised to generate given the RNG state. If the player takes stairs to level 3, then he’ll generate there; if the player takes a shaft to level 4, then he’ll generate there. Since Sigmund is a unique monster, he cannot then regenerate if the player enters levels 4 and 3 respectively, and so the RNG diverges right away — the builder may place another unique, or do something different altogether, and after that initial decision will tend to be completely different.

Not only that, this first assumption wasn’t made: DCSS before 0.23 used a single RNG for gameplay and levelgen decisions, so any different action the player took might lead to completely different level generation.

Part 1: pregeneration and RNG separation

This problem has long been known, and comes up regularly in discussions of seeding. I adopted two solutions from these discussions: separate out levelgen RNG from gameplay, and allow pregeneration of the dungeon. The latter solves almost all of problems 1-2 on its own, and had several past implementations by community members. The most developed of these was due to tavern user bel in the above linked thread, and just needed some adjustments so that level generation was better separated from level entry. The initial seeding patch can be seen here.

Incidentally, if you’re designing a game from scratch, your life is going to be easier if you take a different strategy for these sorts of non-independent decisions. For example, you could place uniques independently of levelgen (something we do now only for one unique, Boris, who respawns), perhaps deciding where they go at the beginning of the game. However, it’s probably too late for DCSS in this respect.

Part 2: testing and fixing many, many seed stability bugs

This patch, it turns out, was only the beginning, opening things up to a whole world of ways in which a repeatable RNG can get out of sync based on problems 3-4.

To start with, I wrote a lua test that, given a seed, prints the vault list for that seed, re-runs generation, and compares the result. While true seed stability bugs on a single device have been fairly rare, this second part helped identify a tremendous amount of global state that can matter for seeding, scattered all over crawlcode. You can see an example of the output here if you scroll down to “Running test #31: ‘vault_catalog.lua’.”

The real challenge has been seed stability across devices. Here is a sampling of problems that have come up:

  • If you’re drawing randomly from a list, and something permutes the underlying list, it doesn’t matter if your rng draw is the same! For example, if the OS provides a directory listing in a different order.
  • If the order of some calls isn’t determined by the language/library standard, then it will probably be implementation dependent. This is a problem that has come up again and again:
    • C++ (and C) doesn’t define the order of multiple function calls that make up an arithmetic expression, and in practice their order varies. You might think this would go by order of operations, but this would be wrong. They all have to be explicitly sequenced.
    • Lua iteration order, both through the C interface, and via the “pairs” function, is not guaranteed to be stable.
    • Anything in C++ that sorts may have implementation-specific behavior if a comparison operation indicates two objects are equal. This is fine if your comparison operation is fine-grained enough, but sometimes it wasn’t.
  • A large set of bugs that were introduced with the initial pregeneration patch because the level builder (and related code) assumed the player was about to enter the level; something that could be designed around from scratch but was fairly baked into dcss as it stood.
  • DCSS caches parsed maps, and some cases of randomness in the cache were causing divergence.
  • Cases where the builder made use of player state: the most prominent of these were vaults that generated items using the acquirement code. (This still can happen in troves, but only there.)
  • Floating point issues. First, Lua 5.1 uses different Number to int conversion techniques on different build targets, and these have different truncation behavior. Then, even controlling for this it turns out that e.g. SSE2 behavior for non-exactly-represented integers can lead to different ints than x87, for example, (1 / 100 * .7). I doubt all of these have been found yet, and for the 0.23.2 release I still needed to manually force the windows build to not use x87. I’m looking at you layout_delve…
  • Cases where unexpected code was drawn upon by the builder. For example, levelgen tries to ensure connectivity, and it turned out the code that does this was being affected by certain rc options! Another example is that slime connectivity in particular uses a different algorithm (because of the wall damage) that led to an underspecification bug mentioned above.

In effectively all of these examples, the result of the bug was immediate loss of seed synchronization across devices — and many of these were things that wouldn’t be considered bugs at all without the goal of seed stability. Debugging them was uniformly extremely difficult, because it required both replicating the divergence and then finding the exact point of RNG divergence. Without VMs and docker, I would not have been able to do most of this.

Some of these problems can be programmed defensively against, with experience, but I doubt I’ve found all the seed stability bugs in crawlcode. At this point, I’m mostly reliant on people testing seeds on various platforms — Ultraviolent4′s seeded Game of The Month series has so far been invaluable for finding seed/pregen bugs. (Incidentally, the challenge of localizing seed bugs, together with the challenges of developing for seed stability, are why I would strongly recommend fellow roguelike devs against using seed-based save formats…)

Part 3: next steps

There are still many improvements to be made, and I expect a lot of my effort for 0.24 will go towards finding and quashing more seed stability bugs. Here are a few improvements I hope to include in the next version:

  • Incremental pregeneration: generate the dungeon in a predetermined order, but only do as much as you need to do to play catchup on level changes. This will allow hopefully removing the distinction between pregenerated and non-pregenerated games, along with allowing seeded play online. (Right now, the main barrier is that up-front level generation is very hard on a server’s cpu.)
  • More RNG improvements for repeatability: apply various techniques to make rng de-synchronization less impactful. Remove floating point code as much as possible, and improve some of the lua numeric issues further.
  • Non-numeric (readable) seeds, a la cogmind.
  • A seed catalog of some kind.
  • What seed-related features would you like to see?

The DCSS community has been extremely helpful in finding and reporting bugs, and I doubt we are done. Please go play one of the seeding based challenges, and let us know if you find problems!

0.23.1 Bugfix Release

There’s a new bug fix release of the 0.23.1 stable version of DCSS. Source packages and binaries for Windows, OS X, and Linux are available now. We recommend all 0.23 users upgrade to this version. Major bug fixes and updates:

  • Vampiric attacks by the player against allies created from Sticks to Snakes and the Ratskin Cloak no longer restore HP or give vampires satiation.
  • Damage from Ozocubu’s Refrigeration has been increased to the correct amount.
  • Placement for the uniques Aizul, Bai Suzhen, Donald, Jorgrun, and Mara has been fixed so they can place throughout their intended level ranges.
  • The chance of Boris to respawn has been lowered to match previous rates.
  • Yellow draconians now correctly receive their rCorr mutation at XL 7.
  • 45 bugfixes, adjustments, and cleanups in total.

You may have noticed during the tournament that certain uniques were a bit hard to find. Sif Muna intones: ”And with gammafunk’s fateful decision to wrap unique placement statements to an aesthetically pleasing 80 character limit, thus triggering a hitherto unknown vault definition bug, the fates of countless adventurers were altered forever…” Oops! We fixed that, so the uniques listed above should show up more often now. You may also have noticed that old Boris had a bit more life in him than he used to. Due to changing his method of placement to better support the new seeded play mode, Boris was respawning roughly twice as often as he did in previous versions. Congrats to the player Volrath on setting a new record for the number of Boris kills in one game, 10 times! This has also been fixed, so Boris should return to haunt you about as often as he did in 0.22.

Aside from the major fixes listed above, there are scores of smaller bug fixes, vault tweaks, description updates, and the like, so be sure to upgrade!

Happy Crawling!

0.23 Winter Tournament Results

The 0.23 Winter tournament is over. On behalf of the Dev Team, many thanks to all the server admins, outside contributors, bug reporters, and to the many DCSS players who made the 0.23 release and tournament possible! For 16 days, players could compete for tournament points and banners by playing 0.23 games on the public servers. First let’s give  a short summary of player and clan results. To see first through third place winners in all categories, please see the tournament overview page.

The winning player was Yermak, with 8721 points. Yermak won 35 games during the tournament, including the longest streak at 22 games, and won 21 tier-three banners. In second place was MrMan, with 8092 points and 31 wins, including the second-longest streak for 20 wins and 17 tier-three banners. In third place was JiyvaJigglypuff, with 6631 points and 36 wins and 16 tier-three banners. The players ethniccake and watermold were the only ones to win all 24 tier-three tournament banners.

The fastest win by turncount was achieved by Yermak (13586 turns with a DDFi of Makhleb). Yermak also had the highest scoring game of the tournament, a 15 rune GnEE of Chei won in 19994 turns for 71M points. p0werm0de had the fastest realtime win in 25 minutes with a DDFi of Uskayaw, and Yermak had the lowest level win with an XL 15 FeEn of Ashenzari. The first victory of the tournament was claimed by JiyvaJigglypuff, winning a MiFi of Makhleb in just 33 minutes (38 minutes after tournament start). The first 15 rune win of the tournament was by YTcomUltraviolent4, winning a GrGl of The Shining One in 2h 29m (2h 31m after tournament start).

The clan competition was won by Tab and Dab (26578 points), followed by Gozag or Go Home (22637 points), and Big Dispersal (19276 points). There were 126 clans in all with points scored in the tournament.

Here are some basic statistics on the players in this tournament compared with the 0.22 Summer and 0.21 Winter tournaments (in parentheses):

  • Players: 3440 (0.22: 3130, 0.21: 3153)
  • Total player time: 38876 hrs (0.22: 41988 hrs, 0.21: 41283)
  • Avg player time:  11.3 hrs (0.22: 13.41 hrs, 0.21: 13.09)
  • Proportion of players using WebTiles: 95.88% (0.22: 95.39%, 0.21: 94.48%)

It’s nice to see that this tournament had the most players of any we’ve run so far. It looks like the winrate decreased from the high of 2.82% in version 0.22 down to 2.46%, which is similar to version 0.21. We buff players by locking up ghosts, then we nerf players by giving them new traps and Klown pies to the face. Yet you all keep coming back for more! It must be the shiny loot…

We had a lot of fun bringing the 0.23 release together, with multiple devs individually putting in hundreds of commits. We also had lots of great outside contributions ranging from vaults to artwork to bugfixes, including some important feature implementations. Thanks to all those taking the time to contribute to the project! A 0.23.1 bugfix release is imminent, so be on the lookout and be sure to update if you’re playing offline.

In the meantime, we on the Dev Team are excited to start work on the next version. Thanks again, everyone, and happy crawling!

Comments Off

Crawl 0.23 “Nemelex Needs Traps Badly!”

We are pleased to announce the release of Dungeon Crawl: Stone Soup 0.23 “Nemelex Needs Traps Badly!”

DCSS 0.23 features an overhaul of the trap system, a new Gauntlet portal thrown down to replace Labyrinths, a complete revision of Nemelex Xobeh, nine certified-pre-owned refreshed unrandarts plus one new unrandart, and support for seeded dungeon play. This is all in addition to dozens of new fatal vaults, some refreshed monsters, UI improvements, and many more smaller changes. For a full list of significant changes, please see the changelog.

Download DCSS 0.23 here, or play it online on one of many servers across the world! Packages for Windows, OS X, and Linux are all available now.

The tournament starts 20:00 UTC Friday 8 February with all online 0.23 games counting towards your score. See the tournament page for more details, including how to join or set-up a clan.

Many thanks to all those who have contributed to DCSS over the years. A special thanks to the following community members who contributed to DCSS 0.23 and a warm welcome to the first-time contributors, listed in italics.

Brent Adams, AndSDev, Beargit, biasface, bjobae, Matthew Boeh, David Candido, cws, Doesnt, Erich Erstu, Floodkiller, floraline, freepotion, Ge0ff, GenericPseudonym, Aaron Golden, Max ‘Ploomutoo’ Hon-Anderson, ICC, johnstein, Alex Jurkiewicz, Nikolai Lavsky, Jean Martel, Johannes Maier, Jacob Meigs, mgdelmonte, Muffindrake, NormalPerson7, Aaron Olowin, palyth, psywombats, RealzHS, Sandman25, Umer Shaikh, Stenella, WanderingBlade, ximxim

Happy Crawling!

0.23 Release and Tournament Info

Hello fellow Gauntlet runners! I have a quick update about the 0.23 release and tournament. Please bookmark the official 0.23 tournament page and use this page to track your progress throughout the tournament. The tournament is scheduled from 20:00 UTC Friday 8 February through 20:00 UTC Sunday 24 February. The 0.23 release will likely happen beforehand on February 6th or 7th.

The 0.23 branch is available and already installed on CKO, CUE, CXC, and LLD. For other servers, you’ll see the 0.23 game links appear on the server lobby at some point before the tournament starts. Once 0.23 is available on your server, you can follow the instructions on the tournament page to define/join clans via your 0.23 RC file. Clans can be formed and changed until one week into the tournament on 20:00 UTC Friday 15 February. See the Clans section of the tournament page for details.

There are currently no rule changes relative to the 0.22 tournament, but check the tournament page for any final rule changes before the tournament begins. Once the tournament has started, the leaderboard will display the current standings. You may see the leaderboard, player, and clan pages populated with test data from 0.23 games. Don’t worry, the test pages and data will be wiped before the tournament begins. If you’re looking for people to play with, you can find them in the Tavernreddit, or our IRC channel ##crawl on Freenode.

As you may have noticed, we’re now hosting the tournament on crawl.develz.org, also known as CDO. Special thanks to Napkin for making CDO available to run the tournament scripts and database! Due to this change, there may be some issues with scoring updates early on this tournament. So please bear with us; we’ll try minimize any interruptions as best we can. Also many thanks to |amethyst for making dobrazupa.org available for every tournament from versions 0.12 to 0.22!

See you all on Lair:3, making away with the Minotaur’s loot!

Trunk Updates and 0.23 Release and Tournament Info

Hello crawlers, welcome to the last trunk update of the 0.23 cycle. Before we plunge into the abyss of changes, the 0.23 Release will occur tentatively on 6 February, with the accompanying 0.23 Release Tournament running from 20:00 UTC Friday 8 February to 20:00 UTC Sunday 24 February. The tournament website will be brought online soon, watch this space for details.

And now, the latest from the depths of Gehenna.

  • Clear runed doors replaced most runed doors.
  • An experimental seeded dungeon mode has been implemented, allowing for plays through a pre-generated dungeon. See the new manual section “Seeded play” for further information.
  • Tengu now gain permanent flight at XL 5, but no longer apply their flight evasion bonus to evasion from rings and artefacts.
  • Nemelex’s Storm card now unleashes a fearsome blast of wind and electricity, instead of clouds and an elemental.
  • The xv display now shows monster spell ranges.
  • An extra pane has been added to the religion screen for Ashenzari, Beogh, Gozag, Hepliaklqana, Nemelex Xobeh, and Wu Jian; displaying god specific extra information.
  • Spell damage punctuation now reflects the damage done in the same way as melee damage.
  • A new unrandart demon trident has been added, the +8 demon trident “Rift”, distortion branded with a reaching range of 3 and smite-targeted attack. Thanks to aolowin for the concept and first draft!
  • The Singing Sword has been taking voice lessons, and now sings more often and with greater vigor.
  • The circus has come to Zot, with new klown and carnival vaults; watch out for the klown kars!
  • Grate traps have been removed.
  • The traps in the Tomb have been overhauled, toned down in places and toned up in others.
  • High Elves have been removed again.

Space warps horribly around the trunk updates!!!!! The trunk updates disappear!

23 Bugs to fix before 0.23

Hello crawlers! A new version is fast approaching, and the team is getting ready to feature-freeze, as mentioned in the last trunk update. With the freeze comes a focus on fixing bugs and polishing the game to a release state, and that is where you come in. As we’ve mentioned before, crawl can’t be what it is without community contributions. If you’ve been curious about crawl development and want to get your feet wet, fixing bugs is a great place to start. To guide you, here is a list of 23 bugs that seem (to this dev) approachable entry points that would be nice to fix before the 0.23 release and tournament.

If you can fix one of these bugs send us a pull request on GitHub, be sure to follow our coding conventions and be aware of the process described in the contribution guide. Happy hacking!

  1. 11706 Little-known and misleading behaviour with polymorph on ugly things,
    shapeshifters, undead
  2. 11782 i_feel_safe despite having monsters in view
  3. 11833 Wand of Digging targeter on Barachi is too short.
  4. 11839 Potion Petition ignores “no potion heal”
  5. 11836 No warning for Demonspawn when reading scroll of Holy Word
  6. 11831 Transmutation spells can show max duration
  7. 11806 Weird interaction between Shadow Step, Nightstalker (?) and dispersal trap
  8. 11792 Issues when initially worshipping Jiyva
  9. 11825 Passwall/Nemelex gifting messaging
  10. 11758 If a mummy is killed by Grand Finale, the wrong character location is passed to death curse handler
  11. 3734 Fast travel down on bottom level gives wrong message
  12. 11705 Monsters who are immune to nets do not display that, when the net is thrown with ‘F’
  13. 11701 Guardian Golem clouds don’t dissipate when leaving LOS
  14. 11649 Put bazaar items on top of shopping list.
  15. 11522 Autoexplore ignores enemies behind traps
  16. 11310 False warning when trying to use lightning rod through mushroom.
  17. 11463 Tengu flight EV bonus is applied after equipment EV bonuses.
  18. 11381 Yellow draconians in forms have rCorr according to % screen but not A screen.
  19. 11374 Petrify should show on death messages in the same way as paralysis.
  20. 11315 No friendly fire warning is displayed while using Damnation with portal projectile
  21. 11306 Trying to put on incompatible armour in forms results in unhelpful message of wrong item type.
  22. 11814 Pain’s message inconsistent against invisible creatures
  23. 11738 Setting a confirm_action for an ability generates a Y/N prompt every time the ability menu is opened

Trunk Updates 14 January 2019

The Killer Klown throws klown pie at you. Rhubarb! You feel that there is a Trunk Update!

Hello fellow Klowns and Krawlers, it’s time for another Trunk Update. First let me mention that the tentative date for the 0.23 Release Tournament is February 8th 2019 at 8pm UTC. We’ll make another post if that changes and also when we have a tournament page available.

Now, on to the update:

  • WebTiles display artifacts reported by many of you have been fixed. The issue was a subtle message ordering bug in our client that became relevant due to recent Chrome changes. Thanks for tracking that down, advil!
  • A few Nemelex Xobeh changes:
    • The Deal Four Ability no longer clears your deck, but now has a piety cost.
    • The Deck of Destruction now has a card limit of 26 instead of 13, and Nemelex gifts Destruction cards more frequently relative to the others.
    • New icons for Nemelex’s abilities, courtesy of ontoclasm!
  • Killer Klowns have been reworked:
    •  They now have a Throw Klown Pie LOS-range ability that deals 3d20 damage and afflicts the player with a temporary debuff.
    • The klown pie debuffs are: -Potions, Silence, Vertigo, Stat Drain, rF-, or (less common) polymorph into bat, pig, or wisp form. Better bring those cancellation and resist potions (if you can still quaff them, LOL)!
    • Klowns now have highly enchanted and branded clubs instead of af_klown melee, and no longer have fast regen.
    • Klowns are a bit more common in the Hall of Zot on Zot:5.
  • Translucent doors have been introduced. You can see through these even when they’re closed! Currently used in Elf and some runed door vaults, but you’ll see more of these in the future. Tiles courtesy of the faerie known as minmay.
  • Net traps have been Zotified. They now try to net the player whenever anything in LOS steps on one.
  • All mechanical traps except net traps have been removed from Tomb and the Hall of Zot on Zot:5. Many such traps have been removed from certain Ossuary vaults as well.
  • A new ghost vault featuring moths of wrath and wrathful warriors that have nice Trog weapon gifts.
  • New axe and polearm statue tiles for Baileys. They commemorate the removal of mostly unreachable decorative Bailey weapons. I say ‘mostly’ because of course Yermak figured out a way to reach them!
  • Unspeakable pet dragon cruelty in an Elf vault has been rectified. The dragons now have a clear runed door, allowing their owners access for feeding and play time.
  • Dispersal traps have a new tile, courtesy of CanOfWorms.
  • You can no longer win by tripping up stairs with the Orb while confused. Nice try, cheaters, but CBRO admin johnstein caught you red-handed!

Thanks for tuning in! Feature freeze will likely happen shortly before the end of the month, so we may have another trunk update before the release.

The trunk update flogs you with a +12 club of flaming!

Trunk Updates 31 December 2018

You draw a card… it is Trunk Update!

Hello Crawlers, and welcome to the last batch of Trunk Updates for the year.

  • Nemelex Xobeh has removed decks from your inventory, placing them into three abstract piles.
    • Deck rarities are removed also. Card power is determined entirely from piety and invocations skill.
    • In the place of deck items Nemelex provides three abilities “Draw Escape”, “Draw Destruction”, and “Draw Summoning”, which pull from abstract decks that Nemelex occasionally adds cards to.
    • Triple Draw works as before, though the piety cost is increased.
    • Deal Four deals four cards from a chosen deck (or all remaining if fewer than four remain), discarding the remainder of the deck, and costs no piety.
    • Stack Five constructs a stack from five cards drawn from a choice of decks, which are then put in order. The stack can then be drawn from later, like a fourth deck. Stacking again discards an existing stack.
    • The Velocity card no longer hastes enemies at low power.
  • Ashenzari now protects followers from exploration-based trap effects
  • Qazlal has extended cloud immunity to the elementals created with Elemental Force
  • Console players can now see cloud duration provided by new display character types; see options_guide.txt for the exact values to customize.
  • The skin of Zhor gains See Invisible and a passive Metabolic Englaciation effect. Chilly!
  • Giant size creatures (monsters and players in dragon form) no longer tear through webs
  • The require function in crawl Lua has been renamed crawl_require to allow local builds to include the Lua package library without conflict.
  • Several spooky new ghost vaults are haunting the dungeon
  • Cozy new 7×7 Gauntlet arenas are available to die in.

The trunk updates glow with a rainbow of weird colours and disappear!

Trunk Updates 9 December 2018

You hear the creaking of ancient gears, and the crawl code shifts around you!

Hello crawlers, it’s my pleasure to bring you another edition of trunk updates. It’s been a busy two weeks in Coc:7 and there are a host of new changes.

  • The ancient gears shift one last time and the Labyrinth transforms into the Gauntlet
    • Gauntlets have the player choose a path through several combat arenas, each of which contains (sometimes exotic) monsters and loot.
    • Arena access is one-way using transporters, and teleports are disabled.
    • All paths lead to the minotaur who guards the exit and a pile of treasure.
    • Gauntlets are found where Labyrinths previously generated.
  • Traps have been overhauled
    • Traps on the floor are always revealed
    • A new trap: the dispersal trap blinks everything in sight when triggered
    • Alarms are now like Zot traps, and always mark the player when triggered
    • The powers of Zot have gained the ability to trap you as you explore: every tile revealed has a chance of causing you to fall down a shaft, set off the alarm, or be teleported to nearby monsters.
  • Elyvilon’s Heal Other targeter now shows the chance of pacification.
  • Blowguns display a chance to affect the target in the targeter.
  • The robe of Clouds has been upgraded, and is now +3 {+Thunder rCloud rElec}, providing evocable thunder clouds.
  • Confused monsters now get a 1 in 3 chance to move normally, just like players.
  • Deep water, lava, and the Temple no longer trigger exploration based effects (piety gain and explore traps).

You fall through a shaft! The trunk updates crumble behind you.

Comments Off

New crawl server CKO and server CJR taken offline

Thanks to floraline, we have a new WebTiles/console server running in New York, USA, with the official acronym CKO:


This server supports crawl 0.21, 0.22, and trunk for both WebTiles and console over SSH with daily trunk updates.

Important Note: The CKO hasn’t yet been added to the CAO scoring pages. Don’t worry, games you play now will retroactively show up on the scoring pages after we’ve added CKO to the CAO database. CKO has been added to the Sequell bot, so game history commands like !lg and !lm already work for CKO. Update: CKO is now in the CAO scoring pages!

This new server has come online at a good time, since ZiBuDo has taken CJR (crawl.jorgrun.rocks) offline. We recommend that any current CJR users register on the new CKO server. Sorry, we can’t transfer any current saved games you have on CJR over to another server.

Don’t worry about scoring data and morgue files of your past CJR games, as we have those backed up to another long-term location. Your old CJR games will continue to be recorded in Sequell and on the CAO pages. If you need to access your CJR RC files, for now you can find them here, but you’ll need to copy them soon. The server will go completely offline in the next couple of days.

Thanks so much to ZiBuDo for hosting CJR these last few years! Jorgrun will continue to carry the dwarven_lang banner through the great hall of memes!

Trunk Updates 25 November 2018

Hello Crawlers. Since I last wrote for this blog (a long long time ago indeed)
I’ve joined the development team, and I’m happy to be back with a write up of
what’s been popping and shaking over the past few months of trunk development.

Let’s start off with some miscellaneous changes that come from categories that aren’t big enough to merit a separate heading.

  • Wanderers’ starting spell libraries are listed in the
    message log on game start, and logged to the character log. They also
    start with a level 1 spell memorized if they start with exactly one
    such spell.
  • New tiles: monster spell icons, shock serpent, dream sheep,
    mana viper, Azrael, Dispater, Robe of Vines; plus a new splash
  • Confusing touch can now be used with a weapon.


  • A vast and terrible array of new vaults (over two hundred) has been
    added, touching most branches of the dungeon, including new ghost
    vaults, new transporters, vaults that place early manuals, and much more.
  • Many old vaults have been adjusted to prevent unnecessary vetoing,
    allowing them to place with greater frequency.
  • The concentric octagons layout has been added to Snake and Lair,
    and the cave pools layout (with some parameter changes) has been added
    to D.


  • Grasping Roots is now a smite-targeted constriction
  • Jorgrun has learned this new Grasping Roots spell, and can
    spawn in Swamp. Watch out for the Roots/Iron Shot wombo-combo.
  • Orb run spawns are more frequently near the player and more
  • Pandemonium lords’ spell sets and attack brands are revealed
    when you meet them.
  • Monster equipment is identified when you see the monster (including wands).


  • Stash search can now search by handedness.
  • Butchering always leaves a skeleton.
  • Wand charges have been reduced, according to the following
    schedule of average charges per wand:

    Wand Before After
    digging 12.5 5
    enslavement 12.5 8
    paralysis 12.5 8
    polymorph 12.5 8
    flame 24.5 16.5
    random effects 24.5 16.5
  • The following fixed artefacts have been changed:
    • The Singing Sword is now a vorpal double sword, its sonic damage effect triggers on 50% of hits (including ripostes) and is considerably higher.
    • The Spriggan’s Knife now carves into the realm of dreams, and all backstabs are as if the target were asleep.
    • The Robe of Misfortune is no longer an item identification trap, and is now a +5 robe with *Drain *Corrode *Contam Harm *Slow and EV+5.
    • The Sceptre of Torment is now a pain branded eveningstar that torments on 1 in 5 hits but does not torment the wielder. It gains a new tile too!
    • The Arc Blade’s static discharge effect now casts the spell once (instead of using a special custom version) and has had its enchantment bumped to +8.
    • Finisher trades Str+3 for a chance (based on monster toughness) to instantly kill and explode the target.


  • MS Visual Studio can build crawl again.
  • Crawl’s Lua API has been documented, at least the portions available from your options file. Read the docs here.

That’s all for right now, so until next time: happy crawling!

0.22.1 and 0.21.2 bug fix releases

There’s a new bug fix release of the 0.22.1 stable version of DCSS. Source packages and binaries for Windows, OS X, and Linux are available now. We recommend all 0.22 users upgrade to this version. Major bug fixes and updates:

  • Support for distributing player ghosts files with releases. Now local games will have a starting set of ghosts available for ghost vaults.
  • New tiles for Azrael, shock serpents, dream sheep, mana vipers, and the Robe of Vines.
  • An additional set of Gnoll player doll tiles (male and female).
  • Fix WebTiles menus for older versions of Firefox.
  • 81 bug fixes, adjustments, and cleanups in total.

The biggest game-play change in this release is the incorporation of ghost data taken from 0.22 games played on the CAO and CBRO servers for use in offline games. 0.22 introduced “permastore” bones files so that ghost vaults always have an available ghost definition to draw from. If a level has no recently made ghost in the normal bones file, the permastore file provides more long-term data that can be repeatedly drawn upon. The problem was that offline games previously had no initial ghost data, forcing ghost vaults to fall back on making clone ghosts of the player. Thanks to work by advil, crawl can look for pre-existing permastore bones files we ship in the game data, copying these over to use as a player’s starting permastore. advil has curated this ghost data to remove excessive numbers of ghosts from the most popular combos and to filter out any offensive usernames. In the future, we’ll be able to make this release ghost data using more servers and will be improving the way the ghost data is handled and stored in general. If you have previously installed 0.22.0, we recommend that you remove any files named `*.store.*` from the bones subdirectory of your saves folder, in order to get the full effect of this change.

As usual, there are scores of smaller bug fixes, vault tweaks, description updates, and the like, so be sure to upgrade! In the bullet list above, I’ve linked a few new tiles we received for trunk that I’ve also added to 0.22.1. Also, a certain worm tells me that we may have a couple new splash screens coming our way. One will depict the exploits of a Deep Dwarf Artificer and the other the antics of uniques like Asterion and Louise (PlogChamp)! No ETA on these new splash images, but look for them to arrive in trunk when they’re ready.

Finally, we’ve also made a 0.21.2 bug fix release. Many of the bug fixes here are ones that have already been made in 0.22, but see the 0.21 changelog for a more detailed summary. The source packages as well as binary packages for Windows and OS X can be found in the 0.21 release folder. The Linux 0.21 component of the debian repository has also been updated. To install the Linux packages, just follow the Linux instructions on the download page, replacing 0.22 by 0.21 in the instructions.

Happy Crawling!

0.22 Summer Tournament Results

The 0.22 Summer tournament is over. On behalf of the Dev Team, many thanks to all the server admins, outside contributors, bug reporters, and to the many DCSS players, new and centuryplayer alike, who made the 0.22 release and tournament possible! For 16 days, players could compete for tournament points and banners by playing 0.22 games on the public servers. First let’s give  a short summary of player and clan results. To see first through third place winners in all categories, please see the tournament overview page.

The winning player was Yermak, with 8200 points. Yermak won 36 games during the tournament, including the longest streak at 16 games, and won 22 tier-three banners. In second place was ManMan, with 7686 points and 31 wins, including the second-longest streak for 14 wins and 15 tier-three banners. In third place was justnoob, with 6559 points and 30 wins and 16 tier-three banners. igoo was the only player to win all 24 tier-three tournament banners.

The fastest win by turncount was achieved by Yermak (10243 turns with a DDFi of Makhleb). Yermak also had the highest scoring game of the tournament, a 15 rune GnTm of Chei won in 25904 turns for 55M points. p0werm0de had the fastest realtime win at 23m 13s with a DDFi of Makhleb, and Yermak had the lowest level win with an XL 15 SpEn of Ashenzari. The first victory of the tournament was claimed by Dynast, playing a MiFi of Makhleb, just 41 minutes after tournament start. The first 15 rune win of the tournament was by ManMan, playing a GrFi of The Shining One, won in 1 hour and 19 minutes (at 2 hours and 21 minutes after tournament start).

The clan competition was won by ManMan’s clan (27039 points), followed by Dowan’s clan (25073 points), and Ge0ff’s clan (21144 points). There were 141 clans in all with points scored in the tournament.

Here are some basic statistics on the players in this tournament compared with the 0.21 Winter and 0.20 Summer tournaments (in parentheses):

  • Players: 3130 (0.21: 3153, 0.20: 2997)
  • Total player time: 41988 hrs (0.21: 41283 hrs, 0.20: 39530)
  • Avg player time:  13.41 hrs (0.21: 13.09 hrs, 0.20: 13.19)
  • Proportion of players using webtiles: 95.39% (0.21: 94.48%, 0.20: 94.15%)

A graph made by johnstein shows how various statistics progressed over the course of the tournament. Additional graphs show comparisons of these stats to the 0.21 and 0.20 tournaments.

We hope you all enjoyed playing in the tournament! We had a lot of fun bringing the 0.22 release together, and have 0.22.1 and 0.21.2 point releases planned. We also hope to rework the tournament format so that players won’t be required to put in so many hours in order to be competitive. Details on this aren’t finalized, but of course we’ll communicate those changes before the next tournament. In the meantime, we on the Dev Team are excited to start work on the next version. Thanks again, everyone, and happy crawling!

Crawl 0.22 “Ghost in a Cell”

We’re pleased to announce the release of Dungeon Crawl Stone Soup 0.22: “Ghost in a Cell”

DCSS 0.22 features ghosts being sealed in thematic vaults, a new spell library for managing spells, a major UI rework that paves the way for future UI improvements, and many updates and general improvements. For a full list of significant changes, please see the changelog.

Download DCSS 0.22 here, or play it online on one of many servers across the world! Packages for Windows, OS X, and Linux are all available now.

The tournament starts today at 20:00 UTC, with all online 0.22 games counting towards your score. See the tournament website for more details, including how to set up or join a clan.

Many thanks to all those who have contributed to Dungeon Crawl Stone Soup. We hope you enjoy playing DCSS 0.22!

0.22 Release and Tournament Info

Hello fellow player-ghost purgers, I have a quick update about the 0.22 release and tournament. Please bookmark the official 0.22 tournament page and use this page to track your progress throughout the tournament. The tournament is scheduled from 20:00 UTC Friday 10 August through 20:00 UTC Sunday 26 August. The 0.22 release will likely happen beforehand on August 9th or 8th.

The 0.22 branch won’t be available on official servers for two or three weeks, so you can’t define your clans just yet. You’ll see the 0.22 game links appear on your server’s lobby at some point a week or two before the tournament starts. At that point, you can follow the instructions on the tournament page to define/join clans by editing your 0.22 RC file. Clans can be formed and changed until one week into the tournament on 20:00 UTC Friday 17 August. See the Clans section of the tournament page for details.

There are currently no rule changes relative to the 0.21 tournament, but check the tournament page for any final rule changes before the tournament begins. Once the tournament has started, the leaderboard will display the current standings. At some point before Aug 10th, you may see the leaderboard, player, and clan pages populated with test data from trunk games. Don’t worry, the test pages and data will be wiped before the tournament begins.

If you’re looking for people to play with, you can find them in the Tavernreddit, or our IRC channel ##crawl on Freenode.

See you all on D:3, opening a runed door to 5 ghosts!

Trunk Updates and 0.22 Release and Tournament Info

The iron giant points at the changelog and mumbles some strange words. The harpoon shot hits the changelog! The changelog is yanked forward by the harpoon shot.

Dungeon spelunkers, I’m back from Dis:7 with another Trunk Update. It’s looking like the 0.22 Release and Tournament will be during mid August. We’ll have a specific date and a preliminary tournament page in a future post, so stay tuned. Also, please try out trunk on your favorite server or play a downloadable trunk build in order to help us find bugs and play-test recent changes.

Let’s first talk about a couple major changes this release, starting with player ghost vaults. Player ghosts are a beloved yet infamous community feature. It’s amusing to run into a friend’s ghost, but sometimes you’re just not in the mood to fight another one of xXx420BlazeItxXx’s unkillable MiBe ghosts, you know? To help make fighting ghost monsters more of a fun risk/reward decision rather than a constant chore, all player ghosts have been locked up behind special loot vaults:

  • Ghosts are always sealed in vaults that have runed doors or transporters.
  • The ghost is always visible from outside the vault through clear walls. You can x-v the ghost beforehand to see what you’ll be going up against.
  • Each level from Dungeon:3 onward has a fixed chance of placing a ghost vault in most connected branches. This chance is only 10% for each level, and you’ll only ever get one ghost vault per level. But beware that some vaults place multiple ghosts; one vault can even place up to 5 of them!
  • Ghosts can now follow you through stairs. You knew we couldn’t resist buffing ghosts, right? Sorry, but if you open that runed door, the old ghost stair dance routine won’t save you any more.
  • Dozens of new ghost vaults with a variety of themes. All contain loot, and many place other monsters with extra loot. We have a large and growing list of these made by devs and contributors alike. Here’s a sample of the more thematic ones:
    • Gozag Ghost: A Gozag-themed vault that places heaps of gold, possibly some shops or potions, and some nasty monsters to help the ghost prevent anyone from making a heist.
    • Hydra Chop: A vault showing what happens when you fight hydra with edged weapons. You’ll find a ghost and a nice, non-flaming edged weapon next to some hydra with more heads than usual. Kill the ghost and any 11(or 16)-headed hydra, and you might get that treasure the player was after.
    • Orc Armoury: A vault that lets you try to raid an orc armory that’s filled with well-armed and determined orcs. The player ghost you’ll find inside apparently didn’t employ a good strategy. Beware, this vault is the top killer in trunk right now!
    • Fury of Okawaru: A vault showing what happens when you abandon Oka but aren’t good enough to handle the fury of Okawaru’s wrath. Oka’s warrior monsters and a player ghost will do their utmost to keep you away from that pile of treasure.
    • Potion Laboratory: A vault filled with eldritch and shapeshifting horrors made from a now-ghostly player’s failed experiments with potions. You’ll find some nice potions and equipment, but the mutagenic stuff inside might leave you a little…changed.
    • Labyrinth Escape: A vault depicting a scene where a player tried to loot a labyrinth and escaped with the minotaur close behind. Sadly they ran right back into a bunch of monsters they juked to get into the lab in the first place. Now you get to fight the player’s ghost, those monsters, and the minotaur if you want any of that loot.

There are lots more ghost vaults for you to die to that I haven’t described here, and we’ll be adding more in coming weeks. We’ll also be tweaking the vault balance and possibly changing the way ghost stores are seeded for offline players.

Next up is the new spell library interface, a nice UI feature that also has some game-play ramifications. Tired of lugging around spell books or returning to a stash just to memorize a spell? Well, we’ve got some good news for you:

  • Players have a global spell library. Spells from books are automatically added to the library when you pick up the book. The book is destroyed after you pick it up. Don’t worry, you got what you needed from it!
  • Library spells can be memorized from anywhere through the ‘M’ screen. You can also use search filters on this screen, since those spell lists can get pretty long.
  • Vehumet won’t offer you a spell you already have in your library. Seems obvious, but it’s nice when you consider how Veh was previously happy to waste those precious gifts on spells you already had lying around in a book somewhere.
  • Trog no longer has a Burn Spellbook ability. It’s not really viable to make spellbooks as items for one god with this UI and….you know what, I’m going to drop a book bomb here….Trog is strong enough to take a nerf!
  • Morgue and char dump files now show your entire spell library. Now you don’t have to guess what spells you had available when looking at those.

The spell library is part of a larger set of UI improvements that we’ve been rolling out over recent releases; there’s also an update for WebTiles chat described below. We have a revamp of the UI internals as well as some visual updates planned to roll out partly in this release and partly in 0.23. The UI revamp is mostly the work of our newest dev and UI guru, aidanholm. There’s a playable branch you can try out on CBRO if you’d like to help find any bugs.

Now let’s talk about the rest of the changes large and small that we’ve been hoarding like a pile of gozag gold:

  • Dithmenos revamp:
    • The Shadow Step ability no longer requires the target monster to be ‘still’ and has an HP cost of 8% max HP. Now you don’t have to be a stabber to appreciate shadow steppin’, but you do have to watch that HP.
    • The anti-fire conduct is no more. Dith now allows use of fire-themed spells, items, and abilities. We didn’t enjoy that arbitrary fire restriction, and besides, Dith understands that your fires will go out eventually.
    • Dithmenos is now an evil god, hence is hated by the good gods and holy monsters.
  • New Amulet: the Amulet of the Acrobat, which boosts the wearer’s EV by 15 for non-attacking movement and rest actions. It lets you tumble and roll your way to a successful retreat.
  • The Mace of Variability is reworked to sometimes create arcs of chaos that harm nearby monsters, but not the wielder. The enchantment is now a fixed +7. I could just say “blame ebering” here, but sadly I’m also responsible. Xom is also responsible, of course.
  • Harpoon Shot, a range 6 ability for swamp worms and iron giants that fires a shot which pulls the player adjacent. If something like deep water or lava blocks your path to the monster, we throw in free collision damage! And for the love of Xom do not shout any Mortal Kombat references when you see monsters using this!
  • The Abyss pulls you a level deeper sometimes upon level shift on Abyss:1-4. The chance increases based on XL and decreases based on current depth. Don’t worry, low XL characters have a quite small chance of this happening. If you want to see some numbers, check out this commit.
  • Borgnjor’s Vile Clutch constriction damage is reduced by 25% and the spell is no longer in the Necromancer starting book (the Book of Necromancy). The spell’s damage was a bit high in 0.21, since I went for a higher value to avoid people passing up a weird new spell in two formerly unrelated schools. For the Ne book it was a really general damage spell in a book that already has Animate Dead spell. Monsters have terrible levels zombie resistance! We like the idea that Necromancers don’t have things quite so straightforward early on, so you’ll have to find BVC on your own.
  • Lee’s Rapid Deconstruction can no longer destroy walls. If there’s three things crawl devs don’t like, it’s infinite digging, damage spells with too many interactions, and easily breaking level layouts. There are more than three things crawl devs don’t like, but this spell had all of those! It’s still a pretty complex spell, and now it’s more fun to use for actually killing monsters. Plus there’s always Shatter if you need to get that spell-based dungeon destruction going on.
  • Ozocubu’s Armour now expires immediately upon movement. You have to position more carefully if you want to use this spell now, and no more encouragement to slow-walk around with it always up.
  • All fog types spread the same way from Scrolls of Fog. Hopefully that fog scroll will save you now…
  • Minotaur monsters have increased health, defenses, and HD. They also spawn with armour and either tomahawks or javelins. Additionally Labs have slightly reduced loot to make the risk vs reward decision a little less obvious. You’ll probably keep going in nearly every lab because you players make poor decisions. I know, I’ve watched the ttyrecs!
  • Ilsuiw spawns on Shoals:2-4 with chances similar to other branch-specific uniques instead of nearly always spawning on Shoals:4. We all got tired of fighting Ilsuiw every. single. time. on Shoals:4, didn’t we?
  • The Hall of the Hellbinder WizLab has fewer higher-tier demons. Look, i’ll be honest: I put too many demons in there. I blame the demons for encouraging me. Hopefully you don’t get so much damnation and torment now.
  • The MP-powered wand mutation allows use of wands at 0 MP and is now considered a good mutation.
  • Makhleb’s Major Destruction has its range increased to 7 and Minor Destruction has its range reduced to 5. Hopefully Major Destruction gets a bit more love now. And don’t worry, Minor Destruction is still really good.
  • Yredelemnul’s Enslave Soul ability is now smite-targeted. Smite targeted soul enslavement? Sign me up.
  • Engulf status from Water Elementals now blocks god abilities but no longer slows movement.
  • The Barb status from manticore barbs now counts any non-movement actions towards removing the status.
  • Sojobo, air elementals, ball lightnings, and twisters have resistance to Tornado instead of resistance to all wind attacks. Now you can airstrike Sojobo, air elementals, and your ball lightnings (boom). You could airstrike a twister, but if you ever have one in range of airstrike, you probably messed up real good. Oh, and it has over 9000 HP, so good luck.
  • Shock serpent retaliation now properly checks rElec. Oops! Our mistake, tee hee!
  • Passwall now has better range scaling, a lower max spellpower, and a targeter to show its range.
  • Wands of digging now have a targeter showing the dig range.
  • The exploration horizon In the Tiles minimap now has a distinct color. This is cool: you can more easily see where you haven’t explored by a glance at the minimap.
  • WebTiles chat improvements:
    • The player can use `/mute’ and `/unmute’ commands on chatters. Be silent, trolls!
    • The `/mutelist’ command shows the current mute list.
    • The chat window has a minimize button that removes message notification.
    • The `/hide’ and `/hide forever` commands minimize/remove the chat window.

There have been lots of smaller bugfixes and tweaks that don’t get a changelog entry or a mention here, and there will undoubtedly be more significant changes in the next month. You can check out the commit list to see the most recent updates, and please file a bug report if you see any bugs in your trunk games.

Until next time, fellow crawlers, Dithmenos kindly asks you to Spread the eternal night!

0.21.1 Bugfix Release

There’s a new bugfix release of the stable version of DCSS. Source packages and binaries for Windows and Linux are available now, and OS X packages will be uploaded as soon as those are available. We recommend all 0.21 users upgrade to this version. Major bugfixes and updates:

  • Dith shadow mimic of launcher attacks no longer copies the enchant and ego of the launcher.
  • Monsters lose constriction by Borgnjor’s Vile Clutch when they are moved by any means.
  • Formicids can now manually cancel Dig status, allowing them to use Wu Jian’s Wall Jump ability after digging.
  • Wu Jian’s Wall Jump ability now works under silence.
  • New splash screen art by froggy.
  • Numlock on Windows systems no longer causes unpredictable repeating movement.
  • Alt-F4 no longer causes freezing in Tiles on Windows systems.
  • Resizing the local Tiles window during prompts no longer causes crashes.
  • SDL 2 contrib updated to 2.0.7, which fixes compilation under Msys2.

Dith shadow mimics of launcher attacks were giving you all free enchantment and ego damage. That’s simply unfair to those poor dungeon monsters, so we had to fix it! The numlock key causing repeating movement was reported by users far and wide, so many thanks to advil for tracking down and fixing that rather difficult bug. Hopefully you enjoy the new splash art by South Korean artist froggy, whose inspirational depiction of Boris and Natasha is a personal favorite.

Happy Crawling!

0.21 Tournament Results

The 0.21 tournament has concluded! Many thanks to everyone for coming together and participating in our community. And thanks especially to all our server administrators, developers, organizers, and contributors for putting in their work, time, and passion to make this tournament possible.

Despite a longer release cycle and later tournament start date, participation this tournament was high and competition among players and clans continued to be fierce. Read on for a chronicle of the many and amazing achievements players managed in this competition.

Individual Winners

The champion this year is Yermak with 7751 tournament points, 36 wins, and a 51% win-rate. Yermak is widely known for his tournament victories, having won the 0.19 and 0.18 tournaments, and was solidly in first place nearly the entire time. In typical Yermak style, he pulled off the lowest turncount victory in 12323 turns and had the highest scoring victory, a 15-rune win in 22898 turns. He additionally had an 11 win streak (ended when his Demonspawn Abyssal Knight failed to pillar dance a kobold with a short sword on D:1) held 11 combo high scores, and won 21 out of 23 possible Tier 3 banners! In other categories, Yermak had the 3rd 15-rune win of the tournament, a GrFi won 3 and a half hours in, and was the 3rd player to kill all 76 uniques. An unstoppable force this time, Yermak put in over 7 and a half days of play-time with 71 games played, averaging 10 hours 42 minutes per day!

The silver medalist is Manman with 6862 points, 22 wins, and a 39% win-rate. Manman is the previous 0.20 tournament champion and won a closely fought battle for 2nd place this time around. He was the first player to get a 15-rune victory a mere 2 hours and 20 minutes in and most notably was tied with 3rd-place finisher mibe for the longest streak of the tournament. Their 20-win streaks broke the 18-win tournament streak record set by theglow all the way back in the 0.11 tournament of November 2012! Manman’s streak was ended by a lowly rat on D:1 as his Human Wizard tried to shout from the arrival vault and lure monsters over one at a time. The monsters refused to cooperate, as monsters often do. As mentioned, the battle for 2nd place with mibe was pitched, and Manman didn’t take the lead until the final days of the tournament, with the 200 points from that first 15-rune victory proving decisive. In the non-point-awarding categories, Manman’s GrFi had the second-highest AC+EV of the tournament with 82/46 AC/EV, aided by the Cloak of Starlight, the Ring of Robustness, and a +6 protection ring.

Third place goes to mibe with 6785 points, 25 wins, and a 28% win-rate. mibe has played in many previous tournaments, including an 8th place finish in the 0.20 tournament. This time his aims were to captain the winning clan, which he did, and to break the tournament streak record with a 20 game or higher streak, which he also did! His 20 streak was the first ever to break theglow’s record, with the streak ending with the death of his Formicid Wizard to a sixfirhy summoned by an obsidian statue in a Volcano. Dying to a stationary monster on a record-breaking streak is almost unforgivable, but you helped the Dev Team find bugs in 0.21, so we forgive you, mibe. mibe also made a strong attempt for last win of the tournament, playing what we must assume is his signature combo of MiBe, getting the third-to-last win in one hour 17 minutes, just 5 minutes before the end.

Clan Winners

The first place clan was Knee Deep In The Bread, with mibe (captain, #3), Charly (#6), hellmonk (playing as dying5ever, #7), Sharkman1231 (#20), RBrandon, and Surr, scoring 22873 points and 83 wins. This clan had 3 top 10 players, 22 high scores (3rd most among clans), and maintained a solid lead from early into the tournament. They had a lock on streak points with both mibe’s aforementioned 20-win streak as well as hellmonk’s 15-win streak. Hellmonk’s streak was 3rd longest, is still ongoing, and had a different skill title for every win! Finally hellmonk had the 3rd-lowest XL win of the tournament, a SpAE won at XL 18. Clan member Charly contributed a 7-win streak, had the third-fastest turncount win, a DDCK of Makhleb won in 15497 turns, and was the second player with a 15-rune victory just 3 hours in.

Coming in at second place was Gozag or Go Home, with Ge0ff (captain), Beargit (#4), Faldahar, Chobophobe, ranchugoldfish, and ToastedZergling, scoring 21509 points and 80 wins, and had 30 combo high scores, the most of any clan. This clan continued from the previous tournament, where it took 3rd place, with 4 of its 6 players returning. Beargit snagged the final win of the tournament for 100 points with a speedy 56 minute MiBe that ascended only 35 seconds before the end of the tournament! Beargit also got a 12-win streak (ended when his Merfolk Abyssal Knight took a Crystal Spear from an Ogre Mage in Vaults) and ranchugoldfish contributed a 9-win streak.

Third place is awarded to Make Aus Servers pls, with Demise (captain), Manman (#2), Ultraviolent4 (#5), gorglomux (#12), Alcopop, and Doesnt scoring 19584 points and 70 wins. The Australian CPO server owner and admin Alex was away on extended travel at the start of tournament, but was able to set up 0.21 on that server by the second day, so many thanks to him for doing this. The initial lack of CPO meant some loss of points at the start of tournament for this clan, but they made a strong showing in the end. Ultraviolent4 had the second-fastest turncount win, a GnNe won in 14682 turns, as well as a 13-win streak (ended when his Naga Berserker got outdone by a D:1 Kobold armed with a mere short sword). gorglomux had the fastest real-time win of the tournament, a Deep Dwarf Fighter won in about 37 minutes (about 4 minutes off WR), and was the second tournament player to finish a Ziggurat.

Other Notables

tidbits had the 2nd-highest scoring win of the tournament, a 15-rune GnAE won in only 23820 turnsp0werm0de followed close behind in 3rd place with a 15-rune VSNe won in 25781 turns. p0werm0de also had the 2nd and 3rd fastest wins of the tournaments, both Deep Dwarf Fighters, with his best won in 40 minutes. Additionally p0werm0de had the game with the 2nd-lowest XL for fetching a rune that wasn’t Abyssal or Slimy with an XL 14 OpTm of Jiyva that nabbed the Decaying Rune and later ascended. First place in that category was Sukerboh, who’s XL 12 SpEn picked up the Serpentine Rune with 1 HP and lived only 26 turns before being taken down by a Naga Sharpshooter. Third place in this category was SriBri whose XL 14 MiBe picked up the Barnacled Rune only to be sniped by a Satyr less than 500 turns later. Finally, p0werm0de was the first player to complete all 27 levels of a Ziggurat just 3 hours into the tournament, followed by gorglomux and Anonymous1 the next day.

tself55 had the first win of the tournament, a MiBe won just 1 hour, 24 minutes in, followed less than 4 minutes later by Likado‘s DDFi and a minute after that by NormalPerson7‘s MiBe. For combo high scores, Monsterracer had the most with 15 (only one of which was a victory!), followed by stickyfingers and Rubinko, who both had twelve. Rubinko was also the second player to kill all 76 unique monsters, followed by Yermak. Lasty was the first to achieving this milestone 7 days into the tournament. Finally, inmateoo had the game with highest AC+EV of the tournament, a GrFi with 82/49 AC, aided by +12 crystal plate armour, the ring of Phasing, and even a molten scales mutation.

The most commonly achieved banner was once again The Shining One’s Vow of Courage I, to kill Sigmund before entering the Depths, earned by a whopping 1747 players! The most rarely achieved banner was Beogh’s Heretic III, earned by no one (it was earned by two players in the previous 0.20 tournament).

The most dangerous ghost was isock, who claimed the lives of 52 players, easily eclipsing slep in 2nd place with 28 kills. isock was also competitive in the “most deaths to uniques” category. Both isock and p0werm0de died to 23 distinct uniques, behind komo4ek, who managed to die to 26.

The most lethal monster in this tournament was again the unstoppable gnoll, ending the hopes and dreams of 4104 characters and taking over 5% of all kills. The most lethal unique was again Sigmund, reaping 1640 characters with a kill ratio of 15.6%.

Statistics and Final Thoughts

Over 3,100 players participated this year! See here for a comparison of this tournament to the 0.20 summer tournament, here for a comparison to the previous winter tournament for 0.19, and here for an album of all past tournament stats images made by johnstein. The win-rate increased to 2.41% from 2.3% last year, which is in-line with the typical win-rate increases we tend to see every release as the player-base gets better at the game. We were a bit worried that tournament participation would be down due to the far later start time, but participation was instead very strong. Over 16 days, you all played nearly 78,000 games, collected over 17,700 runes, won 1,877 games and racked up 4 years, 261 days of total play-time!

We on the Dev Team had fun making all the new content and quality-of-life improvements in 0.21, and I personally have enjoyed making the most commits I’ve done in a release so far. Additionally we’ve had some major features merged after collaboration between Dev Team members and outside contributors. We’ve also had lots of good feedback and bug reports from play-testers. Once again, thanks to everyone participating in the tournament! We hope to post a bugfix 0.21.1 release soon that contains all the fixes we made after the release.

Happy crawling!