<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dungeon Crawl Stone Soup &#187; greensnark</title>
	<atom:link href="http://crawl.develz.org/wordpress/author/greensnark/feed" rel="self" type="application/rss+xml" />
	<link>https://crawl.develz.org/wordpress</link>
	<description>Development live!</description>
	<lastBuildDate>Wed, 25 Mar 2026 00:30:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Tournament Sprint map playable on CDO again</title>
		<link>https://crawl.develz.org/wordpress/tournament-sprint-map-playable-on-cdo-again</link>
		<comments>https://crawl.develz.org/wordpress/tournament-sprint-map-playable-on-cdo-again#comments</comments>
		<pubDate>Thu, 19 Aug 2010 12:14:15 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Tournament]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1364</guid>
		<description><![CDATA[When applying a crash bugfix to the crawl.develz.org 0.7 Crawl recently, I accidentally broke the tournament Sprint setup, so Sprint was unavailable on CDO for a couple of days. This is now fixed, and you can play Sprint tournament games on CDO again. Sorry for the inconvenience.]]></description>
			<content:encoded><![CDATA[<p>When applying a crash bugfix to the crawl.develz.org 0.7 Crawl recently, I accidentally broke the tournament Sprint setup, so Sprint was unavailable on CDO for a couple of days. This is now fixed, and you can play Sprint tournament games on CDO again. Sorry for the inconvenience.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/tournament-sprint-map-playable-on-cdo-again/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Stone Soup 0.7.0 &#8220;Pacific Pachyderm&#8221;</title>
		<link>https://crawl.develz.org/wordpress/stone-soup-0-7-0-pacific-pachyderm</link>
		<comments>https://crawl.develz.org/wordpress/stone-soup-0-7-0-pacific-pachyderm#comments</comments>
		<pubDate>Sat, 24 Jul 2010 05:13:31 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1347</guid>
		<description><![CDATA[The 0.7 release of Dungeon Crawl Stone Soup is here, complete with elephants, tile awesomeness, and fully recharged electric eels. Edit: 0.7.1 is now out with a fix for a severe bug affecting ziggurats and other Lua-triggered features such as bazaars. Please update to 0.7.1 if you&#8217;ve already downloaded the 0.7.0 release. All 0.7.1 release [...]]]></description>
			<content:encoded><![CDATA[<p>The 0.7 release of Dungeon Crawl Stone Soup is here, complete with elephants, tile awesomeness, and fully recharged electric eels.</p>
<p><b>Edit:</b> 0.7.1 is now out with a fix for a severe bug affecting ziggurats and other Lua-triggered features such as bazaars. Please update to 0.7.1 if you&#8217;ve already downloaded the 0.7.0 release.</p>
<p>All 0.7.1 release files are available on the <a href="http://crawl.develz.org/wordpress/downloads">Downloads page</a>.</p>
<p>You can also read <a href="http://crawl.develz.org/main/0.7.1.txt">something approximating a changelog</a> for a rough summary of what&#8217;s in the release.</p>
<p>I&#8217;d like to thank the whole team for working to release 0.7 in the short space we have before the <a href="http://crawl.akrasiac.org/tourney10">annual August crawl tournament</a>, and I&#8217;d like to give extra thanks to kilobyte and rob for their help with the release.</p>
<p>Thanks again to Napkin for hosting Crawl development on <a href="http://crawl.develz.org">CDO</a>, and the Crawl player community for their help improving the game.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/stone-soup-0-7-0-pacific-pachyderm/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>RC3 for 0.7.0</title>
		<link>https://crawl.develz.org/wordpress/rc3-for-0-7-0</link>
		<comments>https://crawl.develz.org/wordpress/rc3-for-0-7-0#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:57:34 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Play-Testing]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1342</guid>
		<description><![CDATA[The third release candidate for 0.7.0 is out, addressing issues with piety gain, slime wall damage, and other miscellaneous fixes. Mac and Windows binaries are on the development builds page as usual. When filing bug reports on Mantis, please attach your save games if you have them. Also, please make your bug reports as detailed [...]]]></description>
			<content:encoded><![CDATA[<p>The third release candidate for 0.7.0 is out, addressing issues with piety gain, slime wall damage, and other miscellaneous fixes.</p>
<p>Mac and Windows binaries are on the <a href="http://crawl.develz.org/trunk">development builds</a> page as usual.</p>
<p>When filing bug reports on <a href="http://crawl.develz.org/wordpress/tracker">Mantis</a>, please attach your save games if you have them. Also, please make your bug reports as detailed as possible to help us find and fix bugs before release.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/rc3-for-0-7-0/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Second release candidate for 0.7.0</title>
		<link>https://crawl.develz.org/wordpress/second-release-candidate-for-0-7-0</link>
		<comments>https://crawl.develz.org/wordpress/second-release-candidate-for-0-7-0#comments</comments>
		<pubDate>Sun, 18 Jul 2010 08:45:27 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Play-Testing]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1338</guid>
		<description><![CDATA[0.7.0-rc2 is out, fixing many of the instabilities and other bugs in the first release candidate. Please pick up Mac and Windows builds for 0.7.0-rc2 on the development builds page. The new Windows installer is also available directly from the development builds page now.]]></description>
			<content:encoded><![CDATA[<p>0.7.0-rc2 is out, fixing many of the instabilities and other bugs in the <a href="http://crawl.develz.org/wordpress/first-release-candidate-for-0-7-0">first release candidate</a>.</p>
<p>Please pick up Mac and Windows builds for 0.7.0-rc2 on the <a href="http://crawl.develz.org/trunk">development builds</a> page. The new Windows installer is also available directly from the development builds page now.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/second-release-candidate-for-0-7-0/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>First release candidate for 0.7.0</title>
		<link>https://crawl.develz.org/wordpress/first-release-candidate-for-0-7-0</link>
		<comments>https://crawl.develz.org/wordpress/first-release-candidate-for-0-7-0#comments</comments>
		<pubDate>Thu, 15 Jul 2010 11:35:44 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Play-Testing]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1316</guid>
		<description><![CDATA[The first release candidate for 0.7.0 is here, featuring slick new tiles, a new Sprint map from the strange and terrible Chapayev, Demonspawn with fancy new mutations and chrome wheels, and a new tutorial with Extra Bling (TM). There&#8217;s also a detailed list of changes if you enjoy that kind of thing. Mac and Windows [...]]]></description>
			<content:encoded><![CDATA[<p>The first release candidate for 0.7.0 is here, featuring <a href="http://crawl.develz.org/wordpress/tile-changes-in-0-7">slick new tiles</a>, a new Sprint map from the strange and terrible Chapayev, Demonspawn with fancy new mutations and chrome wheels, and a new tutorial with Extra Bling (TM).</p>
<p>There&#8217;s also a <a href="http://git.develz.org/?p=crawl-ref.git;a=blob;f=crawl-ref/docs/changelog.txt;hb=HEAD">detailed list of changes</a> if you enjoy that kind of thing.</p>
<p>Mac and Windows builds for 0.7.0-rc1 are available from the <a href="http://crawl.develz.org/trunk">development builds page</a> as usual.</p>
<p>We&#8217;re testing <a href="http://crawl.develz.org/trunk/crawl-0.7.0-rc1.setup.exe">a new Windows installer for Crawl</a> from kilobyte, and we&#8217;d appreciate feedback from Windows users.</p>
<p>Please file all bug reports on <a href="http://crawl.develz.org/wordpress/tracker">Mantis</a> as usual.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/first-release-candidate-for-0-7-0/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>A Mac Preview of 0.7 and the Violet Keep of Menkaure</title>
		<link>https://crawl.develz.org/wordpress/a-mac-preview-of-0-7-and-the-violet-keep-of-menkaure</link>
		<comments>https://crawl.develz.org/wordpress/a-mac-preview-of-0-7-and-the-violet-keep-of-menkaure#comments</comments>
		<pubDate>Fri, 09 Jul 2010 19:17:20 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Play-Testing]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1249</guid>
		<description><![CDATA[Mac OSX Binaries of 0.7 alpha: Mac OSX Tiles Build (Last updated 2010-07-09, 0.7.0-a1-136-g6024cb9) Mac OSX Regular Build (Last updated 2010-07-09, 0.7.0-a1-136-g6024cb9) We&#8217;re close to a release candidate for 0.7, but saves will remain compatible with the alpha versions of 0.7. Have fun with Menkaure in the Violet Keep (Sprint), courtesy Chapayev, and please report [...]]]></description>
			<content:encoded><![CDATA[<p>Mac OSX Binaries of 0.7 alpha:</p>
<p><a href="http://crawl.develz.org/trunk/crawl_tiles_osx-0.7.0-a1-136-g6024cb9.zip">Mac OSX Tiles Build</a><br />
<span style="font-size: 85%;">(Last updated 2010-07-09, 0.7.0-a1-136-g6024cb9)</span></p>
<p><a href="http://crawl.develz.org/trunk/crawl_osx-0.7.0-a1-136-g6024cb9.zip">Mac OSX Regular Build</a><br />
<span style="font-size: 85%;">(Last updated 2010-07-09, 0.7.0-a1-136-g6024cb9)</span></p>
<p>We&#8217;re close to a release candidate for 0.7, but saves will remain compatible with the alpha versions of 0.7. Have fun with Menkaure in the Violet Keep (Sprint), courtesy Chapayev, and please report bugs on <a href="http://crawl.develz.org/wordpress/tracker">Mantis</a> as usual.</p>
<p>Windows builds are available on the <a href="http://crawl.develz.org/trunk">Development Builds</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/a-mac-preview-of-0-7-and-the-violet-keep-of-menkaure/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>0.6 Release Candidate 3 Mac Tiles Build</title>
		<link>https://crawl.develz.org/wordpress/0-6-rc3-mac-tiles-build</link>
		<comments>https://crawl.develz.org/wordpress/0-6-rc3-mac-tiles-build#comments</comments>
		<pubDate>Thu, 18 Mar 2010 15:46:24 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Play-Testing]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=1055</guid>
		<description><![CDATA[You can now play-test 0.6.0-rc3 on Mac using this tiles build: Crawl 0.6.0-rc3 Mac Tiles I&#8217;m not the person who usually builds Mac binaries so I may have screwed something up. If you notice problems with the build, please file bug reports on Mantis as usual.]]></description>
			<content:encoded><![CDATA[<p>You can now play-test 0.6.0-rc3 on Mac using this tiles build:</p>
<p><a href="http://sourceforge.net/projects/crawl-ref/files/Stone%20Soup/0.6.1/stone_soup-0.6.1-tiles-macosx-universal.zip/download">Crawl 0.6.0-rc3 Mac Tiles</a></p>
<p>I&#8217;m not the person who usually builds Mac binaries so I may have screwed something up. If you notice problems with the build, please <a href="https://crawl.develz.org/mantis">file bug reports on Mantis</a> as usual.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/0-6-rc3-mac-tiles-build/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>The Dawn of Stone Soup</title>
		<link>https://crawl.develz.org/wordpress/the-dawn-of-stone-soup</link>
		<comments>https://crawl.develz.org/wordpress/the-dawn-of-stone-soup#comments</comments>
		<pubDate>Sat, 06 Feb 2010 18:33:38 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[6. History]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=304</guid>
		<description><![CDATA[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&#8217;d played a lot of NetHack, but I&#8217;d reached a point where the game [...]]]></description>
			<content:encoded><![CDATA[<h2>How I started playing Crawl, and the early history of the Stone Soup project.</h2>
<p>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&#8217;d played a lot of NetHack, but I&#8217;d reached a point where the game was quite easy and boring, and I was looking for a new roguelike to play. It wasn&#8217;t that roguelikes were the only games that interested me, but they possess several features that make them perfect for playing at work.</p>
<p><span id="more-304"></span></p>
<p>Looking for fresh material, I saw a mention of Crawl on Erik Inge Bolsø&#8217;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&#8217;t recall what killed me, but the overall experience quenched my interest in Crawl for a while.</p>
<p>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&#8217;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&#8217; 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.</p>
<p>Still looking for new games, I decided I couldn&#8217;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 (<a href="http://www.dungeoncrawl.org/?l.q">http://www.dungeoncrawl.org/?l.q</a>) had interesting endorsements, and I decided it was time to find out just how accurate they were.</p>
<p>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&#8217;t stop laughing for half an hour.</p>
<p>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&#8217;d have to keep hitting &#8216;X&#8217; 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 &#8216;X&#8217; level map and hit Enter to go there. I&#8217;d already seen travel in NetHack, I&#8217;d found it handy there, and it would obviously be even more useful in Crawl, with its large levels and tiny map display.</p>
<p>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&#8217;s (NetHack uses Dijkstra&#8217;s). This was also the first time I&#8217;d looked at Crawl&#8217;s source, and after cautiously poking at various bits and going &#8220;Ohh, so that&#8217;s what that does!&#8221;, I shoehorned most of the travel code into acr.cc. I wasn&#8217;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.</p>
<p>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&#8217;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.</p>
<p>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&#8217;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:</p>
<p><a href="http://groups.google.com/group/rec.games.roguelike.misc/msg/0433064b9d36786c">http://groups.google.com/group/rec.games.roguelike.misc/msg/0433064b9d36786c</a></p>
<p>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. :-)</p>
<p>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 &#8212; 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 &#8212; you couldn&#8217;t search for items using ^F, you couldn&#8217;t travel to items directly (travel between levels with G wasn&#8217;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&#8217;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. :-)</p>
<p>In all this time, official Crawl development seemed to barely advance at all. I&#8217;d started playing Crawl with 4.0 beta 24, and I&#8217;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&#8217;d changed jobs and my new job kept me a lot busier than the lazy years of 2002/2003. :-)</p>
<p>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&#8217;d written a NetHack patch or two, to general indifference, so being able to actually contribute to Crawl was a huge, pleasant change.</p>
<p>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&#8242;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. :-)</p>
<p>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.</p>
<p>All through the long b26 days, I&#8217;d rarely been troubled by the lack of visible Crawl development, but now with 4.1.2 out there, it was obvious that I&#8217;d been missing out. 4.1 was loaded with good stuff, but the game wasn&#8217;t really playable. I&#8217;d won a fair few Crawl games by then, but I wasn&#8217;t good enough to get far in 4.1.</p>
<p>Since Brent had apparently retired, I decided that I should try my hand at fixing 4.1 to be more playable. I didn&#8217;t trust my judgement of game balance issues much, so I asked Erik Piper &#8212; a very cool person, and the best Crawl player I knew &#8212; 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.</p>
<p>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 &#8220;Stone Soup&#8221;.</p>
<p>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&#8217;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.</p>
<p>Initially, Erik and I worked more or less in secret on Stone Soup, because we weren&#8217;t sure if we&#8217;d be able to make a worthwhile release, and we didn&#8217;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&#8217;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.</p>
<p>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.</p>
<p>And so it began, and Stone Soup was officially launched with Erik&#8217;s announcement:</p>
<p><a href="http://groups.google.com/group/rec.games.roguelike.misc/msg/4d0676b75dea067c">http://groups.google.com/group/rec.games.roguelike.misc/msg/4d0676b75dea067c</a></p>
<p>Players seemed happy with the release, despite the rough edges (I still didn&#8217;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.</p>
<p>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.</p>
<p>On a long weekend&#8217;s Crawl-hacking, I came upon the monstrosity that was b26&#8242;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&#8217;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&#8217;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. :-)</p>
<p>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).</p>
<p>I should mention here that I&#8217;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&#8217;s server (now <a href="http://crawl.akrasiac.org">crawl.akrasiac.org</a>, 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).</p>
<p>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.</p>
<p>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 <a href="http://crawl.develz.org">crawl.develz.org</a> server. Since CDO&#8217;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.</p>
<p>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&#8217;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&#8217;s tiles port for b26) joined the team in 2007, bringing official tiles support to Stone Soup.</p>
<p>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.</p>
<p>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&#8217;m sure DCSS has great days ahead of it, with 0.6 and beyond.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/the-dawn-of-stone-soup/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Shoal Buildin&#8217;</title>
		<link>https://crawl.develz.org/wordpress/shoal-buildin</link>
		<comments>https://crawl.develz.org/wordpress/shoal-buildin#comments</comments>
		<pubDate>Sat, 09 Jan 2010 15:51:16 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[Play-Testing]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=194</guid>
		<description><![CDATA[The Lair is the highway most Crawl characters take to go from the stressful early game (many players attribute later psychosocial problems to D:2 bullying by Sigmund) to the more predictable midgame. Along the way, you pick up lots of relatively safe experience, and up to three runes from the Snake Pit, the Swamp and [...]]]></description>
			<content:encoded><![CDATA[<p>
  The Lair is the highway most Crawl characters take to go from the<br />
  stressful early game (many players attribute later psychosocial<br />
  problems to D:2 bullying by Sigmund) to the more predictable<br />
  midgame. Along the way, you pick up lots of relatively safe<br />
  experience, and up to three runes from the Snake Pit, the Swamp and<br />
  the Slime Pits. Dying on the Lair superhighway is optional, but a<br />
  lot of players seem to enjoy it.
</p>
<p>
For a while now, players have been chafing under the injustice of<br />
having to do the Swamp, since its devilish generosity with rune and<br />
items and shops forces players to brave the menacing terrain to rescue<br />
these poor lost items, in the process running into charming monsters<br />
like swamp worms that get double damage attacks while the character<br />
wades in shallow water. When not being torn apart by suave swamp worms<br />
in shallow water, our heroes are usually demolished by humane hydras,<br />
which can swim much faster in water than most characters can walk on<br />
dry land, and the occasional urbane unique.
</p>
<p>
The Crawl devteam has naturally been eager to improve the situation,<br />
and has turned to a new branch that has an even chance of replacing<br />
the treachery of the Swamp with outright murder &#8212; tasteful, exciting<br />
murder. Murder with turtles in it. A new branch called the Shoals!
</p>
<p>
The Shoals are set near the sea, in a little archipelago of islands<br />
with beaches, tides, mangroves, and the occasional man-eating monster<br />
thrown in for seasoning. It&#8217;s a long, fascinating story (you&#8217;ll never<br />
guess how many useful things harpies can do with human entrails!), but<br />
today we&#8217;re going to talk about how Shoals levels are generated, and<br />
how the tide works in the Shoals.
</p>
<p><span id="more-194"></span></p>
<h2>Shoals Level Generation</h2>
<p>
Shoal levels have two main characteristics:
</p>
<ol>
<li>the islands</li>
<li>the tide</li>
</ol>
<p>
The Shoals level generator creates a 3d heightmap of the level, where<br />
a height of 0 at any given point is assumed to be sea-level, negative<br />
heights being underwater, and positive heights being above water.
</p>
<p>
There are different ways of making reasonably realistic islands on a<br />
heightmap; here&#8217;s the approach we use:
</p>
<ul>
<li>Start with the entire map at a depth that&#8217;s just into deep water.</li>
<li>Pick a random set of points on the map as island centres.</li>
<li>
    For each island center, pick a few more random points near it as<br />
    local high points on the island. i.e. each island can have multiple<br />
    high points or hillocks on it.
  </li>
<li>
<p>
      For each high point C on each island (the island centre and the<br />
      other hillocks), raise the height of points near the high point<br />
      C using this process:
    </p>
<ol>
<li>
        Pick a random point P near C at a distance (randomly chosen<br />
        for each point) of 0 to R from C, where R is a rough radius for<br />
        that high point &#8212; think of it as the radius of a conical<br />
        mountain&#8217;s base.
      </li>
<li>Raise the height at the point P.</li>
<li>Repeat (1) and (2) a few hundred times.</li>
</ol>
<p>
      Most of the random points P will be close to the island centre,<br />
      and the island centre will thus be approximately the highest<br />
      point, with surrounding points at lower heights.
    </p>
</li>
<li>
<p>
      At this point, our heightmap has recognisable islands, but they<br />
      look extremely choppy because of our scattershot island building.<br />
      (Map legend: ^ &#8211; very high point on island, space &#8211; floor, close<br />
      to sea level, = &#8211; shallow water, # &#8211; deep water)
    </p>
<p>
      Note the complete lack of shallow water at this stage.
    </p>
<div>
<font face="monospace"><br />
<font color="#404aea">#######################</font>&nbsp;<font color="#404aea">##############################################</font><br />
<font color="#404aea">####################</font>&nbsp;&nbsp; <font color="#404aea">###############################################</font><br />
<font color="#404aea">#################</font>&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">###############################################</font><br />
<font color="#404aea">####################</font>&nbsp;<font color="#404aea">#################################################</font><br />
<font color="#404aea">##################</font>&nbsp;&nbsp;<font color="#404aea">#</font><font color="#804040">^</font><font color="#404aea">##</font>&nbsp;<font color="#404aea">#############################################</font><br />
<font color="#404aea">#################</font>&nbsp;<font color="#404aea">####</font>&nbsp;&nbsp;<font color="#404aea">##############################################</font><br />
<font color="#404aea">####################</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">############################################</font><br />
<font color="#404aea">##################</font>&nbsp;<font color="#404aea">#####</font>&nbsp;<font color="#404aea">#############################################</font><br />
<font color="#404aea">#####################</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">############################################</font><br />
<font color="#404aea">####################</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">##############################################</font><br />
<font color="#404aea">####################</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">##############################################</font><br />
<font color="#404aea">####################</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">############################################</font><br />
<font color="#404aea">####################</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#############################################</font><br />
<font color="#404aea">######################</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">############################################</font><br />
<font color="#404aea">############</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">######</font>&nbsp;&nbsp; <font color="#404aea">##############################################</font><br />
<font color="#404aea">############</font>&nbsp;<font color="#404aea">##################################</font>&nbsp;<font color="#404aea">######################</font><br />
<font color="#404aea">##########</font>&nbsp;&nbsp; <font color="#404aea">#########################################################</font><br />
<font color="#404aea">###########</font>&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#############################</font>&nbsp;<font color="#404aea">######################</font><br />
<font color="#404aea">##########</font>&nbsp;&nbsp; <font color="#404aea">#######</font>&nbsp;<font color="#404aea">###################</font>&nbsp;<font color="#404aea">#############################</font><br />
<font color="#404aea">##########</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##############################</font>&nbsp;&nbsp; <font color="#404aea">#####################</font><br />
<font color="#404aea">##########</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">###############################</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#####</font>&nbsp;<font color="#404aea">##############</font><br />
<font color="#404aea">##################</font>&nbsp;&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">##############</font>&nbsp;&nbsp; <font color="#404aea">##</font>&nbsp;&nbsp;<font color="#404aea">#####</font>&nbsp;&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">##############</font><br />
<font color="#404aea">#########</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;<font color="#404aea">##############</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">######</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##########</font><br />
<font color="#404aea">#############</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#############</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">###</font><font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">##############</font><br />
<font color="#404aea">##########</font>&nbsp;<font color="#404aea">####</font>&nbsp;&nbsp;<font color="#404aea">#</font><font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#########</font>&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">#########</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^^^</font><font color="#404aea">#</font><font color="#804040">^</font>&nbsp;<font color="#404aea">############</font><br />
<font color="#404aea">#############</font>&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">##################</font>&nbsp;<font color="#404aea">###</font><font color="#804040">^</font><font color="#404aea">##</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">##########</font><br />
<font color="#404aea">###############</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#########</font>&nbsp;<font color="#404aea">#####</font>&nbsp;&nbsp;<font color="#404aea">##</font><font color="#804040">^</font><font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#########</font><br />
<font color="#404aea">##############</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">######</font>&nbsp;&nbsp;<font color="#404aea">#######</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">############</font><br />
<font color="#404aea">###################</font>&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">####</font>&nbsp;&nbsp;<font color="#804040">^</font><font color="#404aea">##</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">######</font>&nbsp;<font color="#404aea">###########</font><br />
<font color="#404aea">############</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">#######</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font><font color="#804040">^</font><font color="#404aea">####</font><font color="#804040">^^^^</font>&nbsp;&nbsp;<font color="#404aea">#################</font><br />
<font color="#404aea">########################</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">###</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">###</font><font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^^^^^^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#################</font><br />
<font color="#404aea">########################</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">##</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#804040">^^^</font>&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;<font color="#404aea">##################</font><br />
<font color="#404aea">############################</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;<font color="#404aea">#</font><font color="#804040">^^</font>&nbsp;<font color="#404aea">###################</font><br />
<font color="#404aea">############################</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font><font color="#404aea">#</font>&nbsp;<font color="#804040">^</font><font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font><font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">##################</font><br />
<font color="#404aea">#########################</font>&nbsp;<font color="#404aea">###</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^</font><font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">##################</font><br />
<font color="#404aea">#######################</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#################</font><br />
<font color="#404aea">########################</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#</font><font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;<font color="#404aea">####################</font><br />
<font color="#404aea">#######################</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;<font color="#404aea">###</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##################</font><br />
<font color="#404aea">#####################</font>&nbsp;&nbsp; <font color="#404aea">######</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#404aea">#</font><font color="#804040">^</font><font color="#404aea">###</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">##################</font><br />
<font color="#404aea">#######################</font>&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#########################</font><br />
<font color="#404aea">######################</font>&nbsp;&nbsp;<font color="#404aea">#</font><font color="#804040">^</font><font color="#404aea">##</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">#</font><font color="#804040">^^^</font>&nbsp;&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#####</font>&nbsp;<font color="#404aea">##################</font><br />
<font color="#404aea">######################</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">##</font><font color="#804040">^</font><font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#######################</font><br />
<font color="#404aea">###############</font>&nbsp;<font color="#404aea">#######</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^</font><font color="#404aea">#</font>&nbsp;<font color="#804040">^</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^^^^^</font><font color="#404aea">########################</font><br />
<font color="#404aea">##############</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">###</font><font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#804040">^</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">########################</font><br />
<font color="#404aea">##############</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">###</font>&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;<font color="#404aea">#</font><font color="#804040">^</font><font color="#404aea">#</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#######################</font><br />
<font color="#404aea">##############</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#404aea">######</font>&nbsp;<font color="#404aea">#####</font>&nbsp;<font color="#404aea">#######################</font><br />
<font color="#404aea">###############</font>&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">#</font><font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font><font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">##</font><font color="#804040">^</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#########################</font><br />
<font color="#404aea">######################</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;<font color="#804040">^</font><font color="#404aea">#</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">######################</font><br />
<font color="#404aea">######################</font><font color="#804040">^</font>&nbsp;<font color="#404aea">#</font><font color="#804040">^</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#804040">^</font><font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font><font color="#804040">^</font><font color="#404aea">##</font>&nbsp;<font color="#404aea">###</font>&nbsp;&nbsp; <font color="#404aea">##</font>&nbsp;<font color="#404aea">#####################</font><br />
<font color="#404aea">####################</font>&nbsp;&nbsp;<font color="#804040">^^^^^^</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">#####</font>&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">#########################</font><br />
<font color="#404aea">######################</font>&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">#####</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">####</font><font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">#######################</font><br />
<font color="#404aea">#######################</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;&nbsp;<font color="#404aea">#########</font>&nbsp;&nbsp; <font color="#404aea">#########################</font><br />
<font color="#404aea">######################</font>&nbsp;<font color="#404aea">###</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">############</font>&nbsp;<font color="#404aea">#########################</font><br />
<font color="#404aea">#####################</font>&nbsp;&nbsp;<font color="#404aea">###</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">#######</font>&nbsp;&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##</font>&nbsp;<font color="#404aea">####################</font><br />
<font color="#404aea">#######################</font><font color="#804040">^</font><font color="#404aea">#</font>&nbsp;<font color="#404aea">####</font>&nbsp;<font color="#404aea">##</font>&nbsp;&nbsp;<font color="#404aea">#######</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">#####################</font><br />
<font color="#404aea">#########################</font>&nbsp;<font color="#404aea">###############</font>&nbsp;<font color="#404aea">#</font>&nbsp;<font color="#404aea">##########################</font><br />
<font color="#404aea">######################################################################</font><br />
<font color="#404aea">######################################################################</font><br />
<font color="#404aea">######################################################################</font><br />
<font color="#404aea">######################################################################</font><br />
</font>
  </div>
<li>
<p>
      To fix this, we run a smoothing pass to average out the heights<br />
      in our heightmap, simulating erosion:
    </p>
<p>
      At each point P on the map, calculate a weighted average of the<br />
      height at P and the heights at all points adjacent to P. The<br />
      height at P is weighted more than the heights at adjacent points,<br />
      and points on the cardinals are weighted higher than points on<br />
      diagonals.
    </p>
<p>
      Et voila, we have a Shoals map!
    </p>
<div>
<font face="monospace"><br />
<font color="#404aea">###################</font><font color="#4363fa">===</font>&nbsp;&nbsp;<font color="#4363fa">=</font><font color="#404aea">#############################################</font><br />
<font color="#404aea">################</font><font color="#4363fa">=====</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#############################################</font><br />
<font color="#404aea">################</font><font color="#4363fa">==</font><font color="#404aea">#</font><font color="#4363fa">======</font><font color="#404aea">#############################################</font><br />
<font color="#404aea">#################</font><font color="#4363fa">===</font>&nbsp;&nbsp; <font color="#4363fa">===</font><font color="#404aea">############################################</font><br />
<font color="#404aea">################</font><font color="#4363fa">====</font>&nbsp;&nbsp; <font color="#4363fa">===</font><font color="#404aea">############################################</font><br />
<font color="#404aea">################</font><font color="#4363fa">====</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">===</font><font color="#404aea">###########################################</font><br />
<font color="#404aea">#################</font><font color="#4363fa">===</font>&nbsp;&nbsp; <font color="#4363fa">====</font><font color="#404aea">###########################################</font><br />
<font color="#404aea">#################</font><font color="#4363fa">======</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">###########################################</font><br />
<font color="#404aea">##################</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">=</font><font color="#404aea">###########################################</font><br />
<font color="#404aea">###################</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">###########################################</font><br />
<font color="#404aea">###################</font>&nbsp;&nbsp; <font color="#804040">^^^</font>&nbsp;<font color="#4363fa">==</font><font color="#404aea">##########################################</font><br />
<font color="#404aea">##################</font><font color="#4363fa">=</font>&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">##########################################</font><br />
<font color="#404aea">##################</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">##########################################</font><br />
<font color="#404aea">###########</font><font color="#4363fa">=====</font><font color="#404aea">###</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">##########################################</font><br />
<font color="#404aea">###########</font><font color="#4363fa">=</font>&nbsp;<font color="#4363fa">===</font><font color="#404aea">####</font><font color="#4363fa">=</font>&nbsp;&nbsp; <font color="#4363fa">====</font><font color="#404aea">##################</font><font color="#4363fa">===</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#########</font><font color="#4363fa">==</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#####</font><font color="#4363fa">=======</font><font color="#404aea">###################</font><font color="#4363fa">===</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#########</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">====</font><font color="#404aea">##</font><font color="#4363fa">====</font><font color="#404aea">#####################</font><font color="#4363fa">===</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#########</font><font color="#4363fa">=</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#4363fa">=======</font><font color="#404aea">#################</font><font color="#4363fa">===</font><font color="#404aea">####</font><font color="#4363fa">===</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#########</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=======</font><font color="#404aea">#################</font><font color="#4363fa">===</font><font color="#404aea">###</font><font color="#4363fa">=</font>&nbsp;&nbsp; <font color="#4363fa">=</font><font color="#404aea">####################</font><br />
<font color="#404aea">#########</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#</font><font color="#4363fa">==</font><font color="#404aea">##################</font><font color="#4363fa">===</font><font color="#404aea">###</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">###</font><font color="#4363fa">===</font><font color="#404aea">#############</font><br />
<font color="#404aea">#########</font><font color="#4363fa">=</font>&nbsp;<font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">========</font><font color="#404aea">############</font><font color="#4363fa">==</font>&nbsp;&nbsp;<font color="#4363fa">==</font>&nbsp;&nbsp;<font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=</font><font color="#404aea">##</font><font color="#4363fa">===</font><font color="#404aea">#############</font><br />
<font color="#404aea">########</font><font color="#4363fa">========</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">=</font>&nbsp;&nbsp;<font color="#4363fa">=</font><font color="#404aea">############</font><font color="#4363fa">=</font>&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=====</font>&nbsp;&nbsp;<font color="#4363fa">====</font>&nbsp;<font color="#4363fa">=====</font><font color="#404aea">#########</font><br />
<font color="#404aea">########</font><font color="#4363fa">=====</font>&nbsp;<font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">###########</font>&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">====</font><font color="#404aea">#########</font><br />
<font color="#404aea">########</font><font color="#4363fa">======</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">#####</font><font color="#4363fa">===</font><font color="#404aea">##</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">##########</font><br />
<font color="#404aea">#########</font><font color="#4363fa">=====</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">===</font><font color="#404aea">#####</font><font color="#4363fa">==</font><font color="#404aea">###</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">#########</font><br />
<font color="#404aea">#########</font><font color="#4363fa">======</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">###</font><font color="#4363fa">===</font><font color="#404aea">###</font><font color="#4363fa">==</font>&nbsp;<font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">########</font><br />
<font color="#404aea">############</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">===</font><font color="#404aea">#</font><font color="#4363fa">=====</font><font color="#404aea">####</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">===</font><font color="#404aea">########</font><br />
<font color="#404aea">#############</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">============</font><font color="#404aea">#</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">===</font>&nbsp;<font color="#4363fa">===</font><font color="#404aea">#########</font><br />
<font color="#404aea">###########</font><font color="#4363fa">=======</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#</font><font color="#4363fa">=====</font>&nbsp;&nbsp; <font color="#4363fa">==</font>&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp; <font color="#4363fa">======</font><font color="#404aea">##########</font><br />
<font color="#404aea">###########</font><font color="#4363fa">==========</font><font color="#404aea">##</font><font color="#4363fa">====</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">=</font>&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^^</font>&nbsp;&nbsp; <font color="#4363fa">=====</font><font color="#404aea">###########</font><br />
<font color="#404aea">###########</font><font color="#4363fa">========</font><font color="#404aea">####</font><font color="#4363fa">=</font>&nbsp;<font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#804040">^^^^^^^</font>&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">###############</font><br />
<font color="#404aea">#######################</font><font color="#4363fa">====</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=</font>&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;<font color="#804040">^^^^^^^^</font>&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">###############</font><br />
<font color="#404aea">#######################</font><font color="#4363fa">=====</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;<font color="#4363fa">===</font><font color="#404aea">###############</font><br />
<font color="#404aea">########################</font><font color="#4363fa">====</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">################</font><br />
<font color="#404aea">######################</font><font color="#4363fa">======</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">################</font><br />
<font color="#404aea">######################</font><font color="#4363fa">====</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">################</font><br />
<font color="#404aea">######################</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">===</font><font color="#404aea">################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">===</font><font color="#404aea">################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">==</font>&nbsp;&nbsp;<font color="#4363fa">====</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">=======</font><font color="#404aea">#################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=======</font><font color="#404aea">#################</font><br />
<font color="#404aea">#####################</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#</font><font color="#4363fa">===</font><font color="#404aea">#################</font><br />
<font color="#404aea">##############</font><font color="#4363fa">===</font><font color="#404aea">####</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#</font><font color="#4363fa">==</font><font color="#404aea">##################</font><br />
<font color="#404aea">#############</font><font color="#4363fa">========</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^^</font>&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#############</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#############</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font>&nbsp;&nbsp; <font color="#804040">^^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#############</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^^^</font>&nbsp;&nbsp;<font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">######################</font><br />
<font color="#404aea">#############</font><font color="#4363fa">==</font>&nbsp;<font color="#4363fa">=====</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=</font>&nbsp;&nbsp; <font color="#4363fa">=====</font><font color="#404aea">#####################</font><br />
<font color="#404aea">#############</font><font color="#4363fa">========</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">====</font>&nbsp;<font color="#4363fa">======</font><font color="#404aea">####################</font><br />
<font color="#404aea">###################</font><font color="#4363fa">==</font>&nbsp;<font color="#804040">^^^^^^</font>&nbsp;&nbsp; <font color="#804040">^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">==</font>&nbsp;<font color="#4363fa">===</font>&nbsp;&nbsp;<font color="#4363fa">=====</font><font color="#404aea">####################</font><br />
<font color="#404aea">###################</font><font color="#4363fa">=</font>&nbsp;&nbsp;<font color="#804040">^^^^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">=========</font>&nbsp;&nbsp; <font color="#4363fa">===</font><font color="#404aea">#####################</font><br />
<font color="#404aea">###################</font><font color="#4363fa">==</font>&nbsp;<font color="#804040">^^^^^^^</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==========</font>&nbsp;&nbsp; <font color="#4363fa">==</font><font color="#404aea">######################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#804040">^^</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=========</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==</font><font color="#404aea">######################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">====</font><font color="#404aea">#####</font><font color="#4363fa">==</font>&nbsp;&nbsp; <font color="#4363fa">======</font><font color="#404aea">###################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">=======</font><font color="#404aea">####</font><font color="#4363fa">=</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#4363fa">=====</font><font color="#404aea">###################</font><br />
<font color="#404aea">####################</font><font color="#4363fa">==</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#4363fa">==========</font><font color="#404aea">####</font><font color="#4363fa">==</font>&nbsp;<font color="#4363fa">=======</font><font color="#404aea">####################</font><br />
<font color="#404aea">#####################</font><font color="#4363fa">====</font>&nbsp;<font color="#4363fa">=========</font><font color="#404aea">#####</font><font color="#4363fa">=========</font><font color="#404aea">#####################</font><br />
<font color="#404aea">######################</font><font color="#4363fa">======</font><font color="#404aea">#############</font><font color="#4363fa">====</font><font color="#404aea">#########################</font><br />
<font color="#404aea">######################################################################</font><br />
<font color="#404aea">######################################################################</font><br />
<font color="#404aea">######################################################################</font><br />
</font>
</div>
<p>
      A point of interest here: you&#8217;ll notice islands often overlap,<br />
      and overlapping islands make for more interesting maps than<br />
      simple isolated islands.
    </p>
</li>
</ul>
<p>
  The Shoals level generator in the current DCSS development branch<br />
  adds some refinements to this vanilla level builder, adding things<br />
  such as cliffs and clusters of plants (mangroves!), but we&#8217;ve<br />
  covered the essentials here.
</p>
<p>
  And here&#8217;s the code (C++).</p>
<pre>
<span style="color: #da70d6;">#include</span> <span style="color: #a60;">&lt;iostream&gt;</span>
<span style="color: #da70d6;">#include</span> <span style="color: #a60;">&lt;cstdlib&gt;</span>
<span style="color: #da70d6;">#include</span> <span style="color: #a60;">&lt;cmath&gt;</span>
<span style="color: #da70d6;">#include</span> <span style="color: #a60;">&lt;algorithm&gt;</span>

<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">N_PERTURB_ISLAND_CENTER</span> = 50;
<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">ISLAND_CENTER_RADIUS_LOW</span> = 3;
<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">ISLAND_CENTER_RADIUS_HIGH</span> = 10;

<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">N_PERTURB_OFFSET_LOW</span>  = 25;
<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">N_PERTURB_OFFSET_HIGH</span> = 45;
<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">PERTURB_OFFSET_RADIUS_LOW</span> = 2;
<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">PERTURB_OFFSET_RADIUS_HIGH</span> = 7;

<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">GXM</span> = 70;
<span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">GYM</span> = 60;

<span style="color: #228b22;">int</span> <span style="color: #b8860b;">nislands</span> = 15;

<span style="color: #a020f0;">struct</span> <span style="color: #228b22;">coord_def</span> {
  <span style="color: #228b22;">int</span> <span style="color: #b8860b;">x</span>, <span style="color: #b8860b;">y</span>;
  <span style="color: #a020f0;">explicit</span> <span style="color: #0000ff;">coord_def</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">_x</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">_y</span>) : x(_x), y(_y) { }
  <span style="color: #0000ff;">coord_def</span>(<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>) : x(c.x), y(c.y) { }
  <span style="color: #228b22;">int</span> <span style="color: #0000ff;">abs</span>() <span style="color: #a020f0;">const</span> { <span style="color: #a020f0;">return</span> x * x + y * y; }
  <span style="color: #228b22;">coord_def</span> <span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">+</span> (<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>) <span style="color: #a020f0;">const</span> {
    <span style="color: #a020f0;">return</span> coord_def(x + c.x, y + c.y);
  }
  <span style="color: #228b22;">coord_def</span> <span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">-</span> (<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>) <span style="color: #a020f0;">const</span> {
    <span style="color: #a020f0;">return</span> coord_def(x - c.x, y - c.y);
  }
  <span style="color: #228b22;">coord_def</span> <span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">*</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">mul</span>) <span style="color: #a020f0;">const</span> {
    <span style="color: #a020f0;">return</span> coord_def(x * mul, y * mul);
  }
  <span style="color: #228b22;">coord_def</span> <span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">/</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">div</span>) <span style="color: #a020f0;">const</span> {
    <span style="color: #a020f0;">return</span> coord_def(x / div, y / div);
  }
  <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">+=</span> (<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>) {
    x += c.x;
    y += c.y;
    <span style="color: #a020f0;">return</span> *<span style="color: #a020f0;">this</span>;
  }
  <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">-=</span> (<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>) {
    x -= c.x;
    y -= c.y;
    <span style="color: #a020f0;">return</span> *<span style="color: #a020f0;">this</span>;
  }
  <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">*=</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">mul</span>) {
    x *= mul;
    y *= mul;
    <span style="color: #a020f0;">return</span> *<span style="color: #a020f0;">this</span>;
  }
  <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #a020f0;">operator</span> <span style="color: #0000ff;">/=</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">div</span>) {
    x /= div;
    y /= div;
    <span style="color: #a020f0;">return</span> *<span style="color: #a020f0;">this</span>;
  }
};

<span style="color: #a020f0;">inline</span> <span style="color: #228b22;">int</span> <span style="color: #0000ff;">dist2</span>(<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">a</span>, <span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">b</span>) {
  <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">delta</span> = a - b;
  <span style="color: #a020f0;">return</span> a.x * a.x + a.y * a.y;
}

<span style="color: #228b22;">int</span> <span style="color: #b8860b;">grid</span>[GYM][GXM];

<span style="color: #228b22;">int</span> <span style="color: #0000ff;">random_max</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">max</span>) {
  <span style="color: #a020f0;">return</span> (max &lt;= 1 ? 0 : random() % max);
}

<span style="color: #228b22;">int</span> <span style="color: #0000ff;">random_range</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">low</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">high</span>) {
  <span style="color: #a020f0;">if</span> (low &gt; high)
    <span style="color: #5f9ea0;">std</span>::swap(low, high);
  <span style="color: #a020f0;">return</span> low + random_max(high - low + 1);
}

<span style="color: #228b22;">int</span> <span style="color: #0000ff;">random_height</span>() {
  <span style="color: #b22222;">// </span><span style="color: #b22222;">This could be skewed toward more water at greater depths.
</span>  <span style="color: #a020f0;">return</span> -17; <span style="color: #b22222;">//</span><span style="color: #b22222;">random_range(-25 - depth * 10, -1);
</span>}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">init_heightmap</span>() {
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">y</span> = 0; y &lt; GYM; ++y) {
    <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">x</span> = 0; x &lt; GXM; ++x) {
      grid[y][x] = random_height();
    }
  }
}

<span style="color: #228b22;">int</span> <span style="color: #0000ff;">height_char</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">height</span>) {
  <span style="color: #a020f0;">return</span> height &gt;= 100? <span style="color: #a60;">'^'</span> :
    height &gt;= 0? <span style="color: #a60;">' '</span> :
    height &gt;= -14? <span style="color: #a60;">'='</span> : <span style="color: #a60;">'#'</span>;
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">dump_map</span>() {
  <span style="color: #228b22;">char</span> <span style="color: #b8860b;">buf</span>[GXM + 1];
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">y</span> = 0; y &lt; GYM; ++y) {
    <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">x</span> = 0; x &lt; GXM; ++x) {
      <span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">height</span> = grid[y][x];
      buf[x] = height_char(height);
    }
    buf[GXM] = 0;
    <span style="color: #5f9ea0;">std</span>::cout &lt;&lt; buf &lt;&lt; <span style="color: #5f9ea0;">std</span>::endl;
  }
}

<span style="color: #228b22;">coord_def</span> <span style="color: #0000ff;">random_point</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">offset</span> = 0) {
  <span style="color: #a020f0;">return</span> coord_def(random_range(offset, GXM - offset - 1),
                   random_range(offset, GYM - offset - 1));
}

<span style="color: #228b22;">bool</span> <span style="color: #0000ff;">in_bounds</span>(<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>) {
  <span style="color: #a020f0;">return</span> c.x &gt;= 0 &amp;&amp; c.x &lt; GXM &amp;&amp; c.y &gt;= 0 &amp;&amp; c.y &lt; GYM;
}

<span style="color: #228b22;">coord_def</span> <span style="color: #0000ff;">random_point_from</span>(<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">radius</span>) {
  <span style="color: #a020f0;">while</span> (<span style="color: #5f9ea0;">true</span>) {
    <span style="color: #a020f0;">const</span> <span style="color: #228b22;">double</span> <span style="color: #b8860b;">angle</span> = random_max(360) * M_PI / 180;
    <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">res</span> = c + coord_def(radius * cos(angle), radius * sin(angle));
    <span style="color: #b22222;">//</span><span style="color: #b22222;">coord_def res = c + coord_def(random_range(0, radius),
</span>    <span style="color: #b22222;">//                              </span><span style="color: #b22222;">random_range(0, radius));
</span>    <span style="color: #a020f0;">if</span> (in_bounds(res))
      <span style="color: #a020f0;">return</span> res;
  }
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">island_center</span>(<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">n_perturb</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">radius</span>,
                   <span style="color: #228b22;">int</span> <span style="color: #b8860b;">bounce_low</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">bounce_high</span>) {
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">i</span> = 0; i &lt; n_perturb; ++i) {
    <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">p</span> = random_point_from(c, random_max(1 + radius));
    grid[p.y][p.x] += random_range(bounce_low, bounce_high);
  }
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">build_island</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">sign</span> = 1) {
  <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">c</span> = random_point(10);
  island_center(c, N_PERTURB_ISLAND_CENTER,
                random_range(ISLAND_CENTER_RADIUS_LOW,
                             ISLAND_CENTER_RADIUS_HIGH),
                40 * sign, 60 * sign);

  <span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">additional_heights</span> = random_max(4);
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">i</span> = 0; i &lt; additional_heights; ++i) {
    <span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">addition_offset</span> = random_range(2, 10);

    <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">offsetC</span> = random_point_from(c, addition_offset);

    island_center(offsetC, random_range(N_PERTURB_OFFSET_LOW,
                                        N_PERTURB_OFFSET_HIGH),
                  random_range(PERTURB_OFFSET_RADIUS_LOW,
                               PERTURB_OFFSET_RADIUS_HIGH),
                  25 * sign, 35 * sign);
  }
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">init_islands</span>() {
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">i</span> = 0; i &lt; nislands; ++i) {
    build_island();
  }
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">smooth_at</span>(<span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> &amp;<span style="color: #b8860b;">c</span>, <span style="color: #228b22;">int</span> <span style="color: #b8860b;">radius</span>) {
  <span style="color: #228b22;">int</span> <span style="color: #b8860b;">max_delta</span> = radius * radius * 2 + 2;
  <span style="color: #228b22;">int</span> <span style="color: #b8860b;">divisor</span> = 0;
  <span style="color: #228b22;">int</span> <span style="color: #b8860b;">total</span> = 0;
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">y</span> = c.y - radius; y &lt;= c.y + radius; ++y) {
    <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">x</span> = c.x - radius; x &lt;= c.x + radius; ++x) {
      <span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">p</span>(x, y);
      <span style="color: #a020f0;">if</span> (!in_bounds(p))
        <span style="color: #a020f0;">continue</span>;
      <span style="color: #a020f0;">const</span> <span style="color: #228b22;">coord_def</span> <span style="color: #b8860b;">off</span> = c - p;
      <span style="color: #228b22;">int</span> <span style="color: #b8860b;">weight</span> = max_delta - off.abs();
      divisor += weight;
      total += grid[p.y][p.x] * weight;
    }
  }
  grid[c.y][c.x] = total / divisor;
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">smooth_level</span>() {
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">y</span> = 0; y &lt; GYM; ++y) {
    <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">x</span> = 0; x &lt; GXM; ++x) {
      smooth_at(coord_def(x, y), 1);
    }
  }
}

<span style="color: #228b22;">void</span> <span style="color: #0000ff;">smooth_bumps</span>() {
  <span style="color: #a020f0;">const</span> <span style="color: #228b22;">int</span> <span style="color: #b8860b;">nsmooth</span> = 1;
  <span style="color: #a020f0;">for</span> (<span style="color: #228b22;">int</span> <span style="color: #b8860b;">i</span> = 0; i &lt; nsmooth; ++i)
    smooth_level();
}

<span style="color: #228b22;">int</span> <span style="color: #0000ff;">main</span>(<span style="color: #228b22;">int</span> <span style="color: #b8860b;">argc</span>, <span style="color: #228b22;">char</span> **<span style="color: #b8860b;">argv</span>) {
  <span style="color: #a020f0;">if</span> (argc &gt; 1) {
    nislands = atoi(argv[1]);
    <span style="color: #a020f0;">if</span> (nislands &lt; 1)
      nislands = 1;
  }
  srandom(5);
  init_heightmap();
  init_islands();
  smooth_bumps();
  dump_map();
  <span style="color: #a020f0;">return</span> 0;
}
</pre>
</p>
<h2>Shoals Tides</h2>
<p>
  Once we have a heightmap from level generation, tides are trivial to<br />
  implement. If the current height of the tide is tracked as &#8216;t&#8217;, and<br />
  the height of a given point is &#8216;h&#8217;, then the effective height of the<br />
  point with respect to the tide is (h &#8211; t). Thus if you have a point<br />
  with height 3, and the tide is at height 10, the effective height of<br />
  the point is -7, which places it underwater.
</p>
<p>
  There are some subtleties to handling the tide, such as propagating<br />
  the tide inward only from the open sea &#8212; isolated pools of water<br />
  which are surrounded by land should not grow and shrink with the tide,<br />
  but these are minor details.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/shoal-buildin/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>We&#8217;re doing a Survey!</title>
		<link>https://crawl.develz.org/wordpress/were-doing-a-survey</link>
		<comments>https://crawl.develz.org/wordpress/were-doing-a-survey#comments</comments>
		<pubDate>Thu, 20 Aug 2009 18:00:13 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=852</guid>
		<description><![CDATA[Out of a whim we started a poll on the IRC channel ##crawl. Lots of players already replied and it would be nice to have input from other channels as well. 12 questions, please send replies to crawlpoll@gmail.com. Evaluation will be anonymous and statistics will be posted here. Thank you!]]></description>
			<content:encoded><![CDATA[<p>Out of a whim we started a poll on the IRC channel ##crawl. Lots             of players already replied and it would be nice to have input             from other channels as well. <a href="http://crawl.develz.org/main/survey.txt">12 questions</a>, please send replies to             crawlpoll@gmail.com. Evaluation will be anonymous and statistics             will be posted here.</p>
<p>Thank you!</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/were-doing-a-survey/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dungeon Crawl Stone Soup 0.4.4 released!</title>
		<link>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-4-4-released</link>
		<comments>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-4-4-released#comments</comments>
		<pubDate>Sat, 20 Dec 2008 18:00:32 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=846</guid>
		<description><![CDATA[Stone Soup 0.4.4 has been released, finally officially fixing bugs that have long since been put to rest on CAO and CDO. For a list of changes, click here.]]></description>
			<content:encoded><![CDATA[<p>Stone Soup 0.4.4 has been released, finally officially fixing                bugs that have long since been put to rest on CAO and CDO.</p>
<p>For a list of changes, <a href="http://crawl.develz.org/main/0.4.4.txt">click here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-4-4-released/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dungeon Crawl Stone Soup 0.4.2 released!</title>
		<link>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-4-2-released</link>
		<comments>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-4-2-released#comments</comments>
		<pubDate>Wed, 30 Jul 2008 18:00:06 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=841</guid>
		<description><![CDATA[Stone Soup 0.4.2 is out, fixing a number of bugs in time for the tournament.]]></description>
			<content:encoded><![CDATA[<p>Stone Soup 0.4.2 is out, fixing                <a href="http://crawl.develz.org/main/0.4.2.txt">a number of bugs</a> in time for the                tournament.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-4-2-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dungeon Crawl Stone Soup 0.3.3 released!</title>
		<link>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-3-released</link>
		<comments>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-3-released#comments</comments>
		<pubDate>Sun, 02 Dec 2007 18:00:50 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=817</guid>
		<description><![CDATA[Stone Soup 0.3.3 is released with fixes for several crash bugs, balance issues, and squeaky hinges. See the list of fixes. Mac and tile ports are not available yet, but this deplorable state of affairs should be corrected shortly, so hang in there. Edit: Mac binary and tiles port now available &#8211; Happy day!]]></description>
			<content:encoded><![CDATA[<p>Stone Soup 0.3.3 is released with fixes for several crash bugs,             balance issues, and squeaky hinges. See             <a href="http://crawl.develz.org/main/0.3.3.txt">the list of fixes</a>. Mac and tile ports             are not available yet, but this deplorable state of affairs             should be corrected shortly, so hang in there.</p>
<p><strong>Edit:</strong> Mac binary and tiles port now available &#8211; Happy day!</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-3-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dungeon Crawl Stone Soup 0.3.2 released!</title>
		<link>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-2-released</link>
		<comments>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-2-released#comments</comments>
		<pubDate>Sat, 10 Nov 2007 18:00:14 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=815</guid>
		<description><![CDATA[Stone Soup 0.3.2 is out with a fix for a crash bug (tiles) and balance fixes.]]></description>
			<content:encoded><![CDATA[<p>Stone Soup 0.3.2 is out with a <a href="http://crawl.develz.org/main/0.3.2.txt">fix for a             crash bug (tiles)             and balance fixes</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-2-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dungeon Crawl Stone Soup 0.3 released!</title>
		<link>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-released</link>
		<comments>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-released#comments</comments>
		<pubDate>Wed, 31 Oct 2007 18:00:53 +0000</pubDate>
		<dc:creator>greensnark</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://crawl.develz.org/wordpress/?p=805</guid>
		<description><![CDATA[Stone Soup 0.3 is released! Read the list of changes.]]></description>
			<content:encoded><![CDATA[<p><strong>Stone Soup 0.3 is released!</strong> Read the <a href="http://crawl.develz.org/main/0.3.txt">list of changes</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://crawl.develz.org/wordpress/dungeon-crawl-stone-soup-0-3-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
