{"id":194,"date":"2010-01-09T17:51:16","date_gmt":"2010-01-09T15:51:16","guid":{"rendered":"http:\/\/crawl.develz.org\/wordpress\/?p=194"},"modified":"2011-05-09T13:13:58","modified_gmt":"2011-05-09T11:13:58","slug":"shoal-buildin","status":"publish","type":"post","link":"https:\/\/crawl.develz.org\/wordpress\/shoal-buildin","title":{"rendered":"Shoal Buildin&#8217;"},"content":{"rendered":"<p>\n  The Lair is the highway most Crawl characters take to go from the<br \/>\n  stressful early game (many players attribute later psychosocial<br \/>\n  problems to D:2 bullying by Sigmund) to the more predictable<br \/>\n  midgame. Along the way, you pick up lots of relatively safe<br \/>\n  experience, and up to three runes from the Snake Pit, the Swamp and<br \/>\n  the Slime Pits. Dying on the Lair superhighway is optional, but a<br \/>\n  lot of players seem to enjoy it.\n<\/p>\n<p>\nFor a while now, players have been chafing under the injustice of<br \/>\nhaving to do the Swamp, since its devilish generosity with rune and<br \/>\nitems and shops forces players to brave the menacing terrain to rescue<br \/>\nthese poor lost items, in the process running into charming monsters<br \/>\nlike swamp worms that get double damage attacks while the character<br \/>\nwades in shallow water. When not being torn apart by suave swamp worms<br \/>\nin shallow water, our heroes are usually demolished by humane hydras,<br \/>\nwhich can swim much faster in water than most characters can walk on<br \/>\ndry land, and the occasional urbane unique.\n<\/p>\n<p>\nThe Crawl devteam has naturally been eager to improve the situation,<br \/>\nand has turned to a new branch that has an even chance of replacing<br \/>\nthe treachery of the Swamp with outright murder &#8212; tasteful, exciting<br \/>\nmurder. Murder with turtles in it. A new branch called the Shoals!\n<\/p>\n<p>\nThe Shoals are set near the sea, in a little archipelago of islands<br \/>\nwith beaches, tides, mangroves, and the occasional man-eating monster<br \/>\nthrown in for seasoning. It&#8217;s a long, fascinating story (you&#8217;ll never<br \/>\nguess how many useful things harpies can do with human entrails!), but<br \/>\ntoday we&#8217;re going to talk about how Shoals levels are generated, and<br \/>\nhow the tide works in the Shoals.\n<\/p>\n<p><!--more--><\/p>\n<h2>Shoals Level Generation<\/h2>\n<p>\nShoal levels have two main characteristics:\n<\/p>\n<ol>\n<li>the islands<\/li>\n<li>the tide<\/li>\n<\/ol>\n<p>\nThe Shoals level generator creates a 3d heightmap of the level, where<br \/>\na height of 0 at any given point is assumed to be sea-level, negative<br \/>\nheights being underwater, and positive heights being above water.\n<\/p>\n<p>\nThere are different ways of making reasonably realistic islands on a<br \/>\nheightmap; here&#8217;s the approach we use:\n<\/p>\n<ul>\n<li>Start with the entire map at a depth that&#8217;s just into deep water.<\/li>\n<li>Pick a random set of points on the map as island centres.<\/li>\n<li>\n    For each island center, pick a few more random points near it as<br \/>\n    local high points on the island. i.e. each island can have multiple<br \/>\n    high points or hillocks on it.\n  <\/li>\n<li>\n<p>\n      For each high point C on each island (the island centre and the<br \/>\n      other hillocks), raise the height of points near the high point<br \/>\n      C using this process:\n    <\/p>\n<ol>\n<li>\n        Pick a random point P near C at a distance (randomly chosen<br \/>\n        for each point) of 0 to R from C, where R is a rough radius for<br \/>\n        that high point &#8212; think of it as the radius of a conical<br \/>\n        mountain&#8217;s base.\n      <\/li>\n<li>Raise the height at the point P.<\/li>\n<li>Repeat (1) and (2) a few hundred times.<\/li>\n<\/ol>\n<p>\n      Most of the random points P will be close to the island centre,<br \/>\n      and the island centre will thus be approximately the highest<br \/>\n      point, with surrounding points at lower heights.\n    <\/p>\n<\/li>\n<li>\n<p>\n      At this point, our heightmap has recognisable islands, but they<br \/>\n      look extremely choppy because of our scattershot island building.<br \/>\n      (Map legend: ^ &#8211; very high point on island, space &#8211; floor, close<br \/>\n      to sea level, = &#8211; shallow water, # &#8211; deep water)\n    <\/p>\n<p>\n      Note the complete lack of shallow water at this stage.\n    <\/p>\n<div>\n<font face=\"monospace\"><br \/>\n<font color=\"#404aea\">#######################<\/font>&nbsp;<font color=\"#404aea\">##############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;&nbsp; <font color=\"#404aea\">###############################################<\/font><br \/>\n<font color=\"#404aea\">#################<\/font>&nbsp;<font color=\"#404aea\">####<\/font>&nbsp;<font color=\"#404aea\">###############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;<font color=\"#404aea\">#################################################<\/font><br \/>\n<font color=\"#404aea\">##################<\/font>&nbsp;&nbsp;<font color=\"#404aea\">#<\/font><font color=\"#804040\">^<\/font><font color=\"#404aea\">##<\/font>&nbsp;<font color=\"#404aea\">#############################################<\/font><br \/>\n<font color=\"#404aea\">#################<\/font>&nbsp;<font color=\"#404aea\">####<\/font>&nbsp;&nbsp;<font color=\"#404aea\">##############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;<font color=\"#404aea\">##<\/font>&nbsp;<font color=\"#404aea\">############################################<\/font><br \/>\n<font color=\"#404aea\">##################<\/font>&nbsp;<font color=\"#404aea\">#####<\/font>&nbsp;<font color=\"#404aea\">#############################################<\/font><br \/>\n<font color=\"#404aea\">#####################<\/font>&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;<font color=\"#404aea\">############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#404aea\">##############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;&nbsp;<font color=\"#404aea\">##############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;&nbsp; <font color=\"#804040\">^<\/font>&nbsp;&nbsp;<font color=\"#404aea\">############################################<\/font><br \/>\n<font color=\"#404aea\">####################<\/font>&nbsp;&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;&nbsp;<font color=\"#404aea\">#############################################<\/font><br \/>\n<font color=\"#404aea\">######################<\/font>&nbsp;&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;<font color=\"#404aea\">############################################<\/font><br \/>\n<font color=\"#404aea\">############<\/font>&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;<font color=\"#404aea\">######<\/font>&nbsp;&nbsp; <font color=\"#404aea\">##############################################<\/font><br \/>\n<font color=\"#404aea\">############<\/font>&nbsp;<font color=\"#404aea\">##################################<\/font>&nbsp;<font color=\"#404aea\">######################<\/font><br \/>\n<font color=\"#404aea\">##########<\/font>&nbsp;&nbsp; <font color=\"#404aea\">#########################################################<\/font><br \/>\n<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 \/>\n<font color=\"#404aea\">##########<\/font>&nbsp;&nbsp; <font color=\"#404aea\">#######<\/font>&nbsp;<font color=\"#404aea\">###################<\/font>&nbsp;<font color=\"#404aea\">#############################<\/font><br \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<font color=\"#404aea\">#########################<\/font>&nbsp;<font color=\"#404aea\">###############<\/font>&nbsp;<font color=\"#404aea\">#<\/font>&nbsp;<font color=\"#404aea\">##########################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<\/font>\n  <\/div>\n<li>\n<p>\n      To fix this, we run a smoothing pass to average out the heights<br \/>\n      in our heightmap, simulating erosion:\n    <\/p>\n<p>\n      At each point P on the map, calculate a weighted average of the<br \/>\n      height at P and the heights at all points adjacent to P. The<br \/>\n      height at P is weighted more than the heights at adjacent points,<br \/>\n      and points on the cardinals are weighted higher than points on<br \/>\n      diagonals.\n    <\/p>\n<p>\n      Et voila, we have a Shoals map!\n    <\/p>\n<div>\n<font face=\"monospace\"><br \/>\n<font color=\"#404aea\">###################<\/font><font color=\"#4363fa\">===<\/font>&nbsp;&nbsp;<font color=\"#4363fa\">=<\/font><font color=\"#404aea\">#############################################<\/font><br \/>\n<font color=\"#404aea\">################<\/font><font color=\"#4363fa\">=====<\/font>&nbsp;&nbsp;<font color=\"#4363fa\">==<\/font><font color=\"#404aea\">#############################################<\/font><br \/>\n<font color=\"#404aea\">################<\/font><font color=\"#4363fa\">==<\/font><font color=\"#404aea\">#<\/font><font color=\"#4363fa\">======<\/font><font color=\"#404aea\">#############################################<\/font><br \/>\n<font color=\"#404aea\">#################<\/font><font color=\"#4363fa\">===<\/font>&nbsp;&nbsp; <font color=\"#4363fa\">===<\/font><font color=\"#404aea\">############################################<\/font><br \/>\n<font color=\"#404aea\">################<\/font><font color=\"#4363fa\">====<\/font>&nbsp;&nbsp; <font color=\"#4363fa\">===<\/font><font color=\"#404aea\">############################################<\/font><br \/>\n<font color=\"#404aea\">################<\/font><font color=\"#4363fa\">====<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#4363fa\">===<\/font><font color=\"#404aea\">###########################################<\/font><br \/>\n<font color=\"#404aea\">#################<\/font><font color=\"#4363fa\">===<\/font>&nbsp;&nbsp; <font color=\"#4363fa\">====<\/font><font color=\"#404aea\">###########################################<\/font><br \/>\n<font color=\"#404aea\">#################<\/font><font color=\"#4363fa\">======<\/font>&nbsp;&nbsp;<font color=\"#4363fa\">==<\/font><font color=\"#404aea\">###########################################<\/font><br \/>\n<font color=\"#404aea\">##################<\/font><font color=\"#4363fa\">==<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#4363fa\">=<\/font><font color=\"#404aea\">###########################################<\/font><br \/>\n<font color=\"#404aea\">###################<\/font><font color=\"#4363fa\">=<\/font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"#4363fa\">==<\/font><font color=\"#404aea\">###########################################<\/font><br \/>\n<font color=\"#404aea\">###################<\/font>&nbsp;&nbsp; <font color=\"#804040\">^^^<\/font>&nbsp;<font color=\"#4363fa\">==<\/font><font color=\"#404aea\">##########################################<\/font><br \/>\n<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 \/>\n<font color=\"#404aea\">##################<\/font><font color=\"#4363fa\">==<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#4363fa\">==<\/font><font color=\"#404aea\">##########################################<\/font><br \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<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 \/>\n<font color=\"#404aea\">######################<\/font><font color=\"#4363fa\">======<\/font><font color=\"#404aea\">#############<\/font><font color=\"#4363fa\">====<\/font><font color=\"#404aea\">#########################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<font color=\"#404aea\">######################################################################<\/font><br \/>\n<\/font>\n<\/div>\n<p>\n      A point of interest here: you&#8217;ll notice islands often overlap,<br \/>\n      and overlapping islands make for more interesting maps than<br \/>\n      simple isolated islands.\n    <\/p>\n<\/li>\n<\/ul>\n<p>\n  The Shoals level generator in the current DCSS development branch<br \/>\n  adds some refinements to this vanilla level builder, adding things<br \/>\n  such as cliffs and clusters of plants (mangroves!), but we&#8217;ve<br \/>\n  covered the essentials here.\n<\/p>\n<p>\n  And here&#8217;s the code (C++).<\/p>\n<pre>\r\n<span style=\"color: #da70d6;\">#include<\/span> <span style=\"color: #a60;\">&lt;iostream&gt;<\/span>\r\n<span style=\"color: #da70d6;\">#include<\/span> <span style=\"color: #a60;\">&lt;cstdlib&gt;<\/span>\r\n<span style=\"color: #da70d6;\">#include<\/span> <span style=\"color: #a60;\">&lt;cmath&gt;<\/span>\r\n<span style=\"color: #da70d6;\">#include<\/span> <span style=\"color: #a60;\">&lt;algorithm&gt;<\/span>\r\n\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">N_PERTURB_ISLAND_CENTER<\/span> = 50;\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">ISLAND_CENTER_RADIUS_LOW<\/span> = 3;\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">ISLAND_CENTER_RADIUS_HIGH<\/span> = 10;\r\n\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">N_PERTURB_OFFSET_LOW<\/span>  = 25;\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">N_PERTURB_OFFSET_HIGH<\/span> = 45;\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">PERTURB_OFFSET_RADIUS_LOW<\/span> = 2;\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">PERTURB_OFFSET_RADIUS_HIGH<\/span> = 7;\r\n\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">GXM<\/span> = 70;\r\n<span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">GYM<\/span> = 60;\r\n\r\n<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">nislands<\/span> = 15;\r\n\r\n<span style=\"color: #a020f0;\">struct<\/span> <span style=\"color: #228b22;\">coord_def<\/span> {\r\n  <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">x<\/span>, <span style=\"color: #b8860b;\">y<\/span>;\r\n  <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) { }\r\n  <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) { }\r\n  <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; }\r\n  <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> {\r\n    <span style=\"color: #a020f0;\">return<\/span> coord_def(x + c.x, y + c.y);\r\n  }\r\n  <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> {\r\n    <span style=\"color: #a020f0;\">return<\/span> coord_def(x - c.x, y - c.y);\r\n  }\r\n  <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> {\r\n    <span style=\"color: #a020f0;\">return<\/span> coord_def(x * mul, y * mul);\r\n  }\r\n  <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> {\r\n    <span style=\"color: #a020f0;\">return<\/span> coord_def(x \/ div, y \/ div);\r\n  }\r\n  <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>) {\r\n    x += c.x;\r\n    y += c.y;\r\n    <span style=\"color: #a020f0;\">return<\/span> *<span style=\"color: #a020f0;\">this<\/span>;\r\n  }\r\n  <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>) {\r\n    x -= c.x;\r\n    y -= c.y;\r\n    <span style=\"color: #a020f0;\">return<\/span> *<span style=\"color: #a020f0;\">this<\/span>;\r\n  }\r\n  <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>) {\r\n    x *= mul;\r\n    y *= mul;\r\n    <span style=\"color: #a020f0;\">return<\/span> *<span style=\"color: #a020f0;\">this<\/span>;\r\n  }\r\n  <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>) {\r\n    x \/= div;\r\n    y \/= div;\r\n    <span style=\"color: #a020f0;\">return<\/span> *<span style=\"color: #a020f0;\">this<\/span>;\r\n  }\r\n};\r\n\r\n<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>) {\r\n  <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">delta<\/span> = a - b;\r\n  <span style=\"color: #a020f0;\">return<\/span> a.x * a.x + a.y * a.y;\r\n}\r\n\r\n<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">grid<\/span>[GYM][GXM];\r\n\r\n<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>) {\r\n  <span style=\"color: #a020f0;\">return<\/span> (max &lt;= 1 ? 0 : random() % max);\r\n}\r\n\r\n<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>) {\r\n  <span style=\"color: #a020f0;\">if<\/span> (low &gt; high)\r\n    <span style=\"color: #5f9ea0;\">std<\/span>::swap(low, high);\r\n  <span style=\"color: #a020f0;\">return<\/span> low + random_max(high - low + 1);\r\n}\r\n\r\n<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #0000ff;\">random_height<\/span>() {\r\n  <span style=\"color: #b22222;\">\/\/ <\/span><span style=\"color: #b22222;\">This could be skewed toward more water at greater depths.\r\n<\/span>  <span style=\"color: #a020f0;\">return<\/span> -17; <span style=\"color: #b22222;\">\/\/<\/span><span style=\"color: #b22222;\">random_range(-25 - depth * 10, -1);\r\n<\/span>}\r\n\r\n<span style=\"color: #228b22;\">void<\/span> <span style=\"color: #0000ff;\">init_heightmap<\/span>() {\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">y<\/span> = 0; y &lt; GYM; ++y) {\r\n    <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">x<\/span> = 0; x &lt; GXM; ++x) {\r\n      grid[y][x] = random_height();\r\n    }\r\n  }\r\n}\r\n\r\n<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>) {\r\n  <span style=\"color: #a020f0;\">return<\/span> height &gt;= 100? <span style=\"color: #a60;\">'^'<\/span> :\r\n    height &gt;= 0? <span style=\"color: #a60;\">' '<\/span> :\r\n    height &gt;= -14? <span style=\"color: #a60;\">'='<\/span> : <span style=\"color: #a60;\">'#'<\/span>;\r\n}\r\n\r\n<span style=\"color: #228b22;\">void<\/span> <span style=\"color: #0000ff;\">dump_map<\/span>() {\r\n  <span style=\"color: #228b22;\">char<\/span> <span style=\"color: #b8860b;\">buf<\/span>[GXM + 1];\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">y<\/span> = 0; y &lt; GYM; ++y) {\r\n    <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">x<\/span> = 0; x &lt; GXM; ++x) {\r\n      <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">height<\/span> = grid[y][x];\r\n      buf[x] = height_char(height);\r\n    }\r\n    buf[GXM] = 0;\r\n    <span style=\"color: #5f9ea0;\">std<\/span>::cout &lt;&lt; buf &lt;&lt; <span style=\"color: #5f9ea0;\">std<\/span>::endl;\r\n  }\r\n}\r\n\r\n<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) {\r\n  <span style=\"color: #a020f0;\">return<\/span> coord_def(random_range(offset, GXM - offset - 1),\r\n                   random_range(offset, GYM - offset - 1));\r\n}\r\n\r\n<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>) {\r\n  <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;\r\n}\r\n\r\n<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>) {\r\n  <span style=\"color: #a020f0;\">while<\/span> (<span style=\"color: #5f9ea0;\">true<\/span>) {\r\n    <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">double<\/span> <span style=\"color: #b8860b;\">angle<\/span> = random_max(360) * M_PI \/ 180;\r\n    <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">res<\/span> = c + coord_def(radius * cos(angle), radius * sin(angle));\r\n    <span style=\"color: #b22222;\">\/\/<\/span><span style=\"color: #b22222;\">coord_def res = c + coord_def(random_range(0, radius),\r\n<\/span>    <span style=\"color: #b22222;\">\/\/                              <\/span><span style=\"color: #b22222;\">random_range(0, radius));\r\n<\/span>    <span style=\"color: #a020f0;\">if<\/span> (in_bounds(res))\r\n      <span style=\"color: #a020f0;\">return<\/span> res;\r\n  }\r\n}\r\n\r\n<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>,\r\n                   <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>) {\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">i<\/span> = 0; i &lt; n_perturb; ++i) {\r\n    <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">p<\/span> = random_point_from(c, random_max(1 + radius));\r\n    grid[p.y][p.x] += random_range(bounce_low, bounce_high);\r\n  }\r\n}\r\n\r\n<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) {\r\n  <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">c<\/span> = random_point(10);\r\n  island_center(c, N_PERTURB_ISLAND_CENTER,\r\n                random_range(ISLAND_CENTER_RADIUS_LOW,\r\n                             ISLAND_CENTER_RADIUS_HIGH),\r\n                40 * sign, 60 * sign);\r\n\r\n  <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">additional_heights<\/span> = random_max(4);\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">i<\/span> = 0; i &lt; additional_heights; ++i) {\r\n    <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">addition_offset<\/span> = random_range(2, 10);\r\n\r\n    <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">offsetC<\/span> = random_point_from(c, addition_offset);\r\n\r\n    island_center(offsetC, random_range(N_PERTURB_OFFSET_LOW,\r\n                                        N_PERTURB_OFFSET_HIGH),\r\n                  random_range(PERTURB_OFFSET_RADIUS_LOW,\r\n                               PERTURB_OFFSET_RADIUS_HIGH),\r\n                  25 * sign, 35 * sign);\r\n  }\r\n}\r\n\r\n<span style=\"color: #228b22;\">void<\/span> <span style=\"color: #0000ff;\">init_islands<\/span>() {\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">i<\/span> = 0; i &lt; nislands; ++i) {\r\n    build_island();\r\n  }\r\n}\r\n\r\n<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>) {\r\n  <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">max_delta<\/span> = radius * radius * 2 + 2;\r\n  <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">divisor<\/span> = 0;\r\n  <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">total<\/span> = 0;\r\n  <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) {\r\n    <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) {\r\n      <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">p<\/span>(x, y);\r\n      <span style=\"color: #a020f0;\">if<\/span> (!in_bounds(p))\r\n        <span style=\"color: #a020f0;\">continue<\/span>;\r\n      <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">coord_def<\/span> <span style=\"color: #b8860b;\">off<\/span> = c - p;\r\n      <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">weight<\/span> = max_delta - off.abs();\r\n      divisor += weight;\r\n      total += grid[p.y][p.x] * weight;\r\n    }\r\n  }\r\n  grid[c.y][c.x] = total \/ divisor;\r\n}\r\n\r\n<span style=\"color: #228b22;\">void<\/span> <span style=\"color: #0000ff;\">smooth_level<\/span>() {\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">y<\/span> = 0; y &lt; GYM; ++y) {\r\n    <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">x<\/span> = 0; x &lt; GXM; ++x) {\r\n      smooth_at(coord_def(x, y), 1);\r\n    }\r\n  }\r\n}\r\n\r\n<span style=\"color: #228b22;\">void<\/span> <span style=\"color: #0000ff;\">smooth_bumps<\/span>() {\r\n  <span style=\"color: #a020f0;\">const<\/span> <span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">nsmooth<\/span> = 1;\r\n  <span style=\"color: #a020f0;\">for<\/span> (<span style=\"color: #228b22;\">int<\/span> <span style=\"color: #b8860b;\">i<\/span> = 0; i &lt; nsmooth; ++i)\r\n    smooth_level();\r\n}\r\n\r\n<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>) {\r\n  <span style=\"color: #a020f0;\">if<\/span> (argc &gt; 1) {\r\n    nislands = atoi(argv[1]);\r\n    <span style=\"color: #a020f0;\">if<\/span> (nislands &lt; 1)\r\n      nislands = 1;\r\n  }\r\n  srandom(5);\r\n  init_heightmap();\r\n  init_islands();\r\n  smooth_bumps();\r\n  dump_map();\r\n  <span style=\"color: #a020f0;\">return<\/span> 0;\r\n}\r\n<\/pre>\n<\/p>\n<h2>Shoals Tides<\/h2>\n<p>\n  Once we have a heightmap from level generation, tides are trivial to<br \/>\n  implement. If the current height of the tide is tracked as &#8216;t&#8217;, and<br \/>\n  the height of a given point is &#8216;h&#8217;, then the effective height of the<br \/>\n  point with respect to the tide is (h &#8211; t). Thus if you have a point<br \/>\n  with height 3, and the tide is at height 10, the effective height of<br \/>\n  the point is -7, which places it underwater.\n<\/p>\n<p>\n  There are some subtleties to handling the tide, such as propagating<br \/>\n  the tide inward only from the open sea &#8212; isolated pools of water<br \/>\n  which are surrounded by land should not grow and shrink with the tide,<br \/>\n  but these are minor details.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/posts\/194"}],"collection":[{"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/comments?post=194"}],"version-history":[{"count":12,"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/posts\/194\/revisions"}],"predecessor-version":[{"id":1836,"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/posts\/194\/revisions\/1836"}],"wp:attachment":[{"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/media?parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/categories?post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crawl.develz.org\/wordpress\/wp-json\/wp\/v2\/tags?post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}