How I started playing Crawl, and the early history of the Stone Soup project.
In the winter of 2002, I had large amounts of free time at my job, and I spent it in two ways: reading books and playing roguelikes. I’d played a lot of NetHack, but I’d reached a point where the game was quite easy and boring, and I was looking for a new roguelike to play. It wasn’t that roguelikes were the only games that interested me, but they possess several features that make them perfect for playing at work.
Looking for fresh material, I saw a mention of Crawl on Erik Inge Bolsø’s site Balrog. The description looked interesting, so I downloaded Crawl b24 and took it for a spin. My first game started with a kobold shouting at me, which I found odd. The tiny map display made me feel claustrophobic, and the constant scrolling of the map was disorienting. The game ended rather abruptly soon after it started. I don’t recall what killed me, but the overall experience quenched my interest in Crawl for a while.
I tried Adom and played enough to score a bug-temple-abused win or two, but it was a little too story-heavy to hold my interest for long. I’m all in favour of rescuing mad carpenters in moderate quantities for humanitarian reasons, but starting every game by rescuing eccentric carpenters palled on me quickly. There was also a regrettable incident when I read a description on herb farming in the bigroom in Andy Williams’ Guidebook, and spent the next several hours of my life in a glazed zombie-like trance accumulating absurd stockpiles of stomafillia herbs. Adom has numerous fine qualities, notably its beautiful locations, but my lack of self-control in the face of its numerous encouragements to farm meant that playing it involved terrifying amounts of self-inflicted brain damage.
Still looking for new games, I decided I couldn’t get into Angband or Tome (I kept getting beaten up by things in town, and the non-persistent levels bothered me strangely), and after dabbling in some of the lesser known roguelikes, I came back to Crawl. The quotes page (http://www.dungeoncrawl.org/?l.q) had interesting endorsements, and I decided it was time to find out just how accurate they were.
I bit the bullet, endured the constant scrolling and the postage-stamp-sized map display, and discovered a wonderful game. I played summoners and was thrilled that my friendly white imps could use their frost spell, unlike NetHack where pets are dumb things that magically lose all their fun abilities when tamed. I played enchanters, and the first time I used enslavement on an orc sorcerer in the Mines, I couldn’t stop laughing for half an hour.
One thing did niggle at me a lot, though. When moving around on a level, I kept getting lost in the winding corridors. If I wanted to go downstairs after clearing a level, I’d have to keep hitting ‘X’ to look at the level map, figure out my next few moves towards the stairs, then go back to the main screen and trace the steps I remembered from the map. It seemed like it would be so much more convenient if I could just move the cursor to the place I wanted to go on the ‘X’ level map and hit Enter to go there. I’d already seen travel in NetHack, I’d found it handy there, and it would obviously be even more useful in Crawl, with its large levels and tiny map display.
So one evening after work I decided to hack a travel command into Crawl. I was happily ignorant of pathfinding algorithms at the time, and I decided to use NetHack’s (NetHack uses Dijkstra’s). This was also the first time I’d looked at Crawl’s source, and after cautiously poking at various bits and going “Ohh, so that’s what that does!”, I shoehorned most of the travel code into acr.cc. I wasn’t very proud of shoveling the travel code into acr.cc, which had apparently suffered much punishment over the years and looked like a sad, whipped, source file, but I thought it would serve as a starting point.
It was amazing how much that one small change (travel) improved the playability of the game. I also made some minor tweaks to other settings, including an implementation of Roderick Schertler’s pickup_thrown patch for NetHack, and a change in similar vein to autopickup to ignore items that the player had previously dropped, and decided to share these patches with the Crawl community.
At the time (2003), most Crawl players hung out on the Usenet newsgroup rec.games.roguelike.misc. I believe there was IRC discussion even at this point, but it was minor; I’d certainly never heard of IRC discussion. The Crawl devteam apparently collaborated by email and on Yahoo groups mailing lists, but i was unaware of this at the time, so I announced my patch only on rgrmisc:
http://groups.google.com/group/rec.games.roguelike.misc/msg/0433064b9d36786c
The patch proved popular, so I asked the NetHack team for permission to use the travel code under the terms of the Crawl license, which was almost, but not quite, identical to the NetHack license, and Warwick Allison graciously agreed. Players suggested new features, and I experimented with a minor riff on travel to create autoexplore. For a while I was unsure that I actually liked autoexplore, but other players seemed to enjoy it, and then I got used to it too. :-)
I was discussing Crawl in email with another ex-NetHacker, Tina Hall, when she mentioned how tedious it was to keep track of items in stashes — she actually took notes outside the game. After a few discussions on how this could be improved, I added a first cut at a feature to track stashed items to the patch. The early stash-tracker looked almost nothing like its modern self — you couldn’t search for items using ^F, you couldn’t travel to items directly (travel between levels with G wasn’t around yet). The only way to use the stash-tracker in its first incarnation was to make a character dump and grovel around in the .lst file it created to find items you wanted. For a while I wasn’t sure if the stash-tracker was worth keeping, and toyed with throwing it out entirely, but Tina insisted that it was useful and convinced me to keep it around. :-)
In all this time, official Crawl development seemed to barely advance at all. I’d started playing Crawl with 4.0 beta 24, and I’d seen beta 25 and 26 soon after, but nothing beyond b26. In the meantime, I kept working on the Patch (which players dubbed the Travel patch, after its signature feature), improving it based on player suggestions. Real interlevel travel (^G) made it into the patch in May 2004. It took me a while longer to make the stash tracker searchable and integrate it with interlevel travel (Oct 2005), but in my defense I’d changed jobs and my new job kept me a lot busier than the lazy years of 2002/2003. :-)
After the long, slumbrous reign of 4.0 b26, Crawl maintainer Brent Ross announced that an alpha version of the next Crawl release (4.1) was available for players to look at in Jul 2005. 4.1 was new and excitingly different from b26. I spent a feverish couple of days porting the Travel patch (by now a massive beast) to work with 4.1. Brent accepted the travel patch and merged it into the Crawl 4.1 svn repository, which thrilled me to bits. Back in 2001 and 2002, when I was playing NetHack, I’d written a NetHack patch or two, to general indifference, so being able to actually contribute to Crawl was a huge, pleasant change.
Brent had made a lot of improvements to 4.1. The old, nightmarishly ugly view code that gave me such trouble writing the initial travel patch was gone, replaced with a much cleaner view layer. Brent also repaired the mutation system and overhauled all the crufty layers of combat code. Where Crawl 4.0 was ugly, 4.1 was beautiful. There was just one problem: 4.1′s gameplay and balance was nothing like 4.0. The early game was too easy for fighters, too hard for spellcasters. The mid-game was brutally hard for all characters, and the sight of a monster wearing a shield in 4.1 was enough to make the best Crawl player cringe, because you knew almost *nothing* was going to get past that shield. :-)
Brent fixed some of the balance problems in 4.1, but he was also very busy and had little time to work on Crawl, so development languished after he released the 4.1.2 alpha. Months passed, it began to look as if Brent might never get back to Crawl development, and it was obvious nobody else was working on it.
All through the long b26 days, I’d rarely been troubled by the lack of visible Crawl development, but now with 4.1.2 out there, it was obvious that I’d been missing out. 4.1 was loaded with good stuff, but the game wasn’t really playable. I’d won a fair few Crawl games by then, but I wasn’t good enough to get far in 4.1.
Since Brent had apparently retired, I decided that I should try my hand at fixing 4.1 to be more playable. I didn’t trust my judgement of game balance issues much, so I asked Erik Piper — a very cool person, and the best Crawl player I knew — whether he could help me to analyse and rebalance 4.1. Erik agreed, and we got together and worked on 4.1 for a while. After a couple of weeks wrestling with 4.1, it was obvious to us that too many things had changed in 4.1 for it to be easy to rebalance. We began to reconsider whether fixing 4.1 was the best approach. At this point, Martin Read suggested on rgrmisc that it might be better to start with 4.0 b26 and gradually add new features from 4.1, instead of trying to fix 4.1 outright, and Erik and I agreed that this was the way to go.
So back we went, Erik and I, in the summer of 2006, to 4.0 b26 as the basis for development. Erik thought we needed a codename for the project, and he proposed we call it “Stone Soup”.
Stone Soup progressed quickly, since we had a rich larder of good ideas in the 4.1 alphas. Erik picked the things we should lift, and I hacked them into the b26 codebase, cleaning up code where possible. Since I’d mainly focussed on user interface changes up to that point, I was not familiar with the core gameplay code such as combat and spellcasting, which meant that I made several amusing mistakes in the 4.1 imports.
Initially, Erik and I worked more or less in secret on Stone Soup, because we weren’t sure if we’d be able to make a worthwhile release, and we didn’t want to announce ambitious plans on rgrmisc and disappoint everyone later. I was pretty hopeful that once we had a decent first release, we’d be able to find more players to help us out, because there were other people on rgrmisc who looked interested in contributing to Crawl, including Haran Pilpel, who had written an excellent patch adding Angband-style inscriptions to Crawl. I also exchanged a few emails with David P., who I knew from rgrn, and who was enthusiastic for Crawl development to keep moving.
Eventually, Erik and I decided that we had enough material to make a first release of Stone Soup and see how it was received. A little before the 4.1 alpha release discussion, two gentlemen (Nat Lanza and Peter Berger) had started a Sourceforge project (crawl-ref) to revive Crawl development. It seemed logical to join forces with them and host Stone Soup on the crawl-ref Sourceforge project instead of starting a brand new Sourceforge project. We asked Nat and Peter if they wanted to collaborate on DCSS, and they agreed.
And so it began, and Stone Soup was officially launched with Erik’s announcement:
http://groups.google.com/group/rec.games.roguelike.misc/msg/4d0676b75dea067c
Players seemed happy with the release, despite the rough edges (I still didn’t know much about the code :P). I was delighted at how well DCSS was received, but at that point Erik and I were spending unsustainable amounts of time working on Crawl, and we desperately needed more developers to lighten the load. I asked Haran Pilpel if he would be interested in joining the team, and to my delight, he accepted. Haran integrated the inscription patch and cleaned up a lot of the uglier stretches of code.
Stone Soup kept growing, and Crawl players kept contributing to development. We soon invited David P. to join the team and he did a lot of good work organising and rewriting the documentation and simplifying the knotted mess of .crawlrc options.
On a long weekend’s Crawl-hacking, I came upon the monstrosity that was b26′s maps.cc. All the special levels in Crawl were scrunched up in maps.cc, each in a function, described as arrays of string constants, a perfectly horrific mess to edit. I’d seen how NetHack handled special levels, with a special .des file format and a compiler that translated those into maps that the game could use, so I tried my hand at implementing something similar for Crawl. I was handicapped by not knowing anything about lex and yacc, but eventually I beat them into submission and Crawl’s level compiler was born. I liked the existing vaults and special levels and wanted more, but after a few pathetic attempts at creating new levels, I gave up and asked the team if they would like to try. Happily David and Erik were good at the vault-design thing. :-)
By December 2006, Stone Soup development was warming up, and it looked like Stone Soup might actually be self-sustaining. I was much prone to vanity Googling at this time, looking for kind mentions of Stone Soup on the internet that I could revel in. One such search turned up a public telnet server for Stone Soup 0.1.5, run by Rachel Elizabeth Dillon (raxvulpine/rax on IRC).
I should mention here that I’d never actually played a game on a public telnet server before. Back in my NetHack days, I was aware of the existence of public telnet servers, but the average ping time to US servers from India in 2001 was around 800ms, which made it impossibly painful to play games online. 5 years later, in 2006, my ping time to rax’s server (now crawl.akrasiac.org, at that time yiff.mit.edu) was a very playable 300ms. I let out a whoop of joy and dived in. Telnet play was intoxicating. I could meet interesting ghosts, compete for high scores and watch other games. I loved it and pretty soon, I could not play games offline at all. (I have not played a non-wizmode Crawl game offline since akrasiac was launched).
CAO was the best technical change to happen to Stone Soup development. It gave us great playtesting feedback, we could diagnose bugs easily by looking at ttyrecs, and Rachel gave us a lot of feedback on making Crawl play well with dgamelaunch.
One problem we still had, though, was testing Crawl before official releases. The second major Stone Soup release (0.2) was a buggy disaster (I was *really* not familiar with some of the code I messed with :P) that needed several emergency point releases to fix bad crashes. Happily, Marc Thoben expressed interest in running another public server to host development releases, and started the crawl.develz.org server. Since CDO’s arrival, new Crawl releases are much better tested, since CDO always runs the latest development code and players can find bugs much earlier in the development cycle.
Stone Soup has gone from strength to strength since its early days. After the 0.3 release (late 2007), I joined a startup that gave me much less free time to spend on Crawl, and David P. aka dpeg took the helm. Crawl has progressed hugely under dpeg’s guidance, lots of good new developers have joined the team, and every new release has greatly improved on its predecessors. Enne Walker, the author of the tiles port (building on Mitsuhiro Itakura’s tiles port for b26) joined the team in 2007, bringing official tiles support to Stone Soup.
Now, in 2010, I think Stone Soup is one of the best roguelikes available, and one of the all-round best games to play, period. I still really enjoy my games of Crawl, nearly eight years after I started playing the game, and there are DCSS developers who started playing Crawl even before I did.
We have a great game in Stone Soup, probably the best development team and the most enthusiastic and involved player community in the roguelike world, and I’m sure DCSS has great days ahead of it, with 0.6 and beyond.
1. Comment by Rz.berry
6/Feb/2010 at 19:54
Love it, you’ve done great work. My favorite roguelike by far.
2. Comment by LoginError
6/Feb/2010 at 20:42
I was originally a big fan of nethack, but the interface frustrated me. At first it was funny, randomly being killed by falling down a staircase, or kicking a cockatrice or many other YASD’s. But eventually I was simply frustrated by having to fight the game engine its self, instead of the dungeon. There were also so many special cases: dipping things in potions,blessed/cursed potions/scrolls, sinks, weapons with hidden values,tins etc. I usually had the spoiler files open in a browser window, simply so i could tell exactly how strong the weapons and items were in comparison to each other.
I was pleasantly surprised then when I discovered stone soup and found that it fixed everything I hated about nethack. I could use the mouse for inventory management, items were explained in game, and the game protected you from things you should know better than to do, such as targeting yourself with dangerous spells. Most of my stupid deaths are now from things like “got-surrounded-by-4-yaks” instead of “pressed-the-wrong-button-and-zapped-myself”.
I also applaud the devs for being open and transparent about the development process, and being nice to noobs wishing to contribute.
Anyway, just wanted to say “good job!”. Crawl has been a wonderfully counterproductive distraction for me for this last month, and I see it continuing to be so for a long time.
3. Comment by bookofjude
7/Feb/2010 at 04:14
Excellent history! I wish I’d found crawl earlier, but I’m glad that I’ve joined the project at such an awesome and active point in time.
4. Comment by Napkin
7/Feb/2010 at 13:24
Awesome article! Thank you very much :)
One thing left me curious: Did Linley or Brent ever show up again and try Stone Soup?
5. Comment by greensnark
7/Feb/2010 at 14:47
Linley and Brent are aware of Stone Soup. Linley visited ##crawl back in 2008 with the nick Yredelemnul. I wasn’t on chat at the time, but Eino mentioned that he was pretty happy with the direction DCSS was going.
6. Comment by evktalo
7/Feb/2010 at 15:05
What a great read. Thank you!
I wonder if I (or someone else?) thought of making a log out of Linley’s visit. Might be around somewhere.
Interesting that you were curious about the kobold shouting at you. I watched a first play last Friday and the player wondered about all the shouting too.
–Eino
7. Comment by jpeg
7/Feb/2010 at 18:08
And here I thought explaining monster shouts in the tutorial was overkill…
Loved the article, very exciting!
8. Comment by greensnark
7/Feb/2010 at 22:55
Yes, my first impression of the game was: “Why is everything shouting at me?” :-)
Apparently jarpiain (wasp) kept a log of Linley’s visit to IRC, available here:
http://crawl.develz.org/main/linley-at-%23%23crawl.txt
In response to the thanks: the whole team and the player community deserves the thanks; they’ve been doing a great job on Crawl, and I’m really looking forward to the upcoming 0.6 release.
The number of excellent contributions from outside the devteam proper — vaults, tiles, patches and useful playtesting feedback — is awesome, and I think the development scene for Crawl has never looked better.
9. Comment by Simon
8/Feb/2010 at 12:58
But why’s it called “Stone Soup”?
10. Comment by fnwc
8/Feb/2010 at 21:00
I think the stone soup comment has something to do with this fable: http://en.wikipedia.org/wiki/Stone_soup.
However, this is pure speculation on my part, but makes sense (in the community participation point of view).
At any rate, this was a very cool writeup on the history, thanks for sharing.
11. Comment by Reaven
9/Feb/2010 at 01:02
I’ve been a fan of Dungeon Crawl since the original, and I think this is the best RogueLike I have played and I’ve tried 90% of them.