{"id":687,"date":"2013-06-06T15:47:08","date_gmt":"2013-06-06T15:47:08","guid":{"rendered":"http:\/\/www.qcfdesign.com\/?p=687"},"modified":"2013-06-06T15:47:08","modified_gmt":"2013-06-06T15:47:08","slug":"choking-up","status":"publish","type":"post","link":"http:\/\/www.qcfdesign.com\/?p=687","title":{"rendered":"Choking up"},"content":{"rendered":"<p>Back in the days of yore, the Desktop Dungeons alpha had a very simple generation system which more or less did its job \u2013 there was really only one kind of map, and enemies were distributed using a dumb-fire system of random placement.<\/p>\n<p>This caused occasional frustration for players who ran into enemy layouts that veered wildly between extremely generous and literally impossible \u2013 most sorely felt when they arrived in a new dungeon only to be surrounded by level 9 creatures!<\/p>\n<p>Fortunately, due to the low metagame investment and the earliness of the game build, this wasn\u2019t a major problem and we smartened up the algorithm for DD\u2019s beta. Lower-level enemies would generally spawn closer to the player\u2019s starting position, and more challenging beasties would \u2013 on average \u2013 be created further away. Horrific map layouts were basically a thing of the past (with <a href=\"http:\/\/www.qcfdesign.com\/forum\/viewtopic.php?f=3&amp;t=2088\">exceptions<\/a> that we\u2019d work on from time to time!).<\/p>\n<p>As time passed, however, we realised that we needed to put some more fine-tuning into monster positions. New map generators emerged to switch up player expectations and provide variety: open terrain creators, mazes and swamplands all introduced their own sets of opportunities and challenges.<!--more--><\/p>\n<p>Unfortunately, for many of the more \u201copen\u201d maps, enemy placement quickly lost one of its most valuable functions: chokepoint placement. In the alpha, enemies doubled as physical barriers to lock off sections of the map, making conservation of exploration much more important and hiding rewards behind challenging combat encounters. Often, players could arrive at the end of a Desktop Dungeons session without exploring several chunks of the map because that pesky level 9 zombie was just too resource-intensive to take down! The beta lost that for a time, and we responded by making enemies gravitate towards meaningful chokepoints to combat this perceived problem.<\/p>\n<p><a href=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/nochoke.png\" rel=\"shadowbox[sbpost-687];player=img;\"><img loading=\"lazy\" class=\" wp-image-688 alignleft\" alt=\"nochoke\" src=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/nochoke.png\" width=\"236\" height=\"236\" srcset=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/nochoke.png 295w, http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/nochoke-150x150.png 150w\" sizes=\"(max-width: 236px) 100vw, 236px\" \/><\/a> <a href=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke.png\" rel=\"shadowbox[sbpost-687];player=img;\"><img loading=\"lazy\" class=\" wp-image-691 alignright\" alt=\"fullchoke\" src=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke.png\" width=\"236\" height=\"236\" srcset=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke.png 295w, http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke-150x150.png 150w\" sizes=\"(max-width: 236px) 100vw, 236px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>The above is an example of non-choke monster placement (left) versus the full-choke placement (right) in a sample run of Venture Cave. Note how, with choke, creatures level 5 and lower are actually doing their best to bar the few narrow areas that exist. Without this bias, many more monsters just stand uselessly in the middle of nowhere, and it\u2019s far easier for the player to just move around without engaging any of them. They aren&#8217;t forced to stop and make difficult decisions as much.<\/p>\n<p>Choke bias turned out to work reasonably well for open maps, but it caused the playing experience to suffer on tighter maps, especially those which were actively *more* restricted than the classic DD layout. Too many monsters in too many chokepoints, it turned out, were harsh enough to completely shut down a lot of playthroughs. So we got to work on a more granular chokepoint system, which we could use to tweak the monster placement difficulty on individual maps.<\/p>\n<p><a href=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/somechoke_l.png\" rel=\"shadowbox[sbpost-687];player=img;\"><img loading=\"lazy\" class=\"wp-image-689 alignright\" alt=\"somechoke_l\" src=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/somechoke_l.png\" width=\"236\" height=\"236\" srcset=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/somechoke_l.png 295w, http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/somechoke_l-150x150.png 150w\" sizes=\"(max-width: 236px) 100vw, 236px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke_l.png\" rel=\"shadowbox[sbpost-687];player=img;\"><img loading=\"lazy\" class=\" wp-image-690 alignleft\" alt=\"fullchoke_l\" src=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke_l.png\" width=\"236\" height=\"236\" srcset=\"http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke_l.png 295w, http:\/\/www.qcfdesign.com\/wp-content\/uploads\/2013\/06\/fullchoke_l-150x150.png 150w\" sizes=\"(max-width: 236px) 100vw, 236px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Here\u2019s the Labyrinth working on a full-choke algorithm (left) versus the partial choke we implemented recently. Monsters still occasionally block corridors, but they\u2019re not packed quite as insanely and players are thrown more \u201cmercy placements\u201d in case they need to move around a monster they\u2019re not yet ready for.<\/p>\n<p>Several maps have been individually tweaked to get better choke results. Most of the early game is low-choke, while later maps tend to have higher choke values. Open arenas generally retain maximum choke, while labyrinths and special-case monster spawners like Grimm\u2019s Grotto have the algorithm extremely loosened.<\/p>\n<p>Special-case tweaking like this (amidst the other hidden variables that we have for monster placement, not described here) allows us to respond to individual map needs instead of using a one-size-fits-all arrangement for enemy placement.<\/p>\n<p>We think it\u2019s an improvement!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Back in the days of yore, the Desktop Dungeons alpha had a very simple generation system which more or less did its job \u2013 there was really only one kind of map, and enemies were distributed using a dumb-fire system of random placement. This caused occasional frustration for players who ran into enemy layouts that [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[19,18],"_links":{"self":[{"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=\/wp\/v2\/posts\/687"}],"collection":[{"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=687"}],"version-history":[{"count":0,"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=\/wp\/v2\/posts\/687\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=687"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.qcfdesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}