{"id":21089,"date":"2013-09-16T10:31:03","date_gmt":"2013-09-16T15:31:03","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21089"},"modified":"2015-07-01T04:46:07","modified_gmt":"2015-07-01T09:46:07","slug":"project-good-robot-14-outtakes","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21089","title":{"rendered":"Project Good Robot 14: Outtakes"},"content":{"rendered":"<p>At the beginning of a project there&#8217;s always a big burst of progress. Every ten minutes you&#8217;ve got another feature or another improvement, and it&#8217;s easy to delude yourself into thinking you&#8217;re John Carmack. But then you enter the middle phase of the project and suddenly it&#8217;s time to tidy things up, get your interfaces in order, and work on some of the boring, non-sexy stuff.<\/p>\n<p>So that&#8217;s where I am right now. Sooner or later I need to do the <em>Great Big Post About Gameplay Mechanics<\/em>, but I keep putting that one off. Up until now this game has been all things to all people.  Everyone can look at these screenshots and fantasize about all the ways it could be exactly what they wish. Everyone can look at it an scream, &#8220;Shut up and take my money!&#8221; because so far they haven&#8217;t seen anything that indicates it&#8217;s <em>not<\/em> something they would like. When I finally get around to nailing things down I&#8217;ll end up breaking some hearts, and I&#8217;m not quite ready for that trial yet.<\/p>\n<p>So let&#8217;s dig through funny screenshots. <\/p>\n<p><!--more--><\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot1.jpg' class='insetimage' width='600' alt='I LOVE being the center of attention!' title='I LOVE being the center of attention!'\/><\/td><\/tr><\/table><\/p>\n<p>This one was from last week when I was trying to get a sense of just how many objects were in play. How many robots were usually active? How many bullets? How many particles?  So I set up a few tests.  <\/p>\n<p>What I learned was that I was greatly over-estimating the number of bullets in play. Even in this extreme scenario, we&#8217;re looking at less than 200 bullets. At the same time, I&#8217;ve been under-estimating the number of particles I was using.  This scene has over 4,000 active particles. <\/p>\n<p>It&#8217;s not really time to optimize just yet, but having a clear picture of which systems are doing the most work can help guide my decisions about how I ought to design things. <\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot2.jpg' class='insetimage' width='600' alt='No really, I LOVE being the center of attention.' title='No really, I LOVE being the center of attention.'\/><\/td><\/tr><\/table><\/p>\n<p>This one is technically a re-enactment. Way back in the first few days of the project (long before I designed the main character or settled on lumpy cave walls) I was working on making homing missiles.  I wanted missiles that could be avoided with quick lateral cuts, or shot down with gunfire.  I wanted just the right mix of speed and turning radius.  If they moved too fast, then the player wouldn&#8217;t have time to react.  If they moved too slow, they wouldn&#8217;t feel dangerous.  If they turned too fast, the player wouldn&#8217;t be able to dodge them.  If they turned too slow they wouldn&#8217;t be enough of a threat. <\/p>\n<p>Rather than having robots shoot missiles at me, I just made my own missiles home in on me. When I shot one, it immediately began turning to come back around. Because they are my own missiles, they can&#8217;t actually hit the avatar. They sail right through me. So these poor missiles live a doomed existence, forever pursuing the player but never catching them.  They form this great spinning, undulating cloud that changes shape as I move.<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot3.jpg' class='insetimage' width='600' alt='So THAT&#8217;S how you leg!' title='So THAT&#8217;S how you leg!'\/><\/td><\/tr><\/table><\/p>\n<p>As with testing missiles, it&#8217;s way easier to test things if they&#8217;re attached to my avatar as opposed to being part of some capricious AI.  Otherwise you end up doing this:<\/p>\n<p><em>Hm. Looks like the legs move a little funny when moving left. Or was that my imagination? Get back here you little bastard, I need to see you walk left. Arg. Now it&#8217;s holding still to attack. Or is it? Is this a bug in the AI, or is it supposed to be doing that? Should I stop working on these legs and crawl down into the guts of the AI to see what&#8217;s what?<\/em><\/p>\n<p>It&#8217;s just better to have direct control of the thing I&#8217;m testing.  Once I&#8217;m sure the legs work just right, THEN I can attach them to an enemy robot and let it run wild.<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot5.jpg' class='insetimage' width='600' alt='This is more fun that it has any right to be.' title='This is more fun that it has any right to be.'\/><\/td><\/tr><\/table><\/p>\n<p>Halfway through designing the legs I realized they felt really, really cool. (For the record, the legs aren&#8217;t actually involved in locomotion.  I&#8217;m just flying around and the legs automatically span the distance from where I am to the floor.) I wanted to jump, climb walls, and hang from the ceiling. I wanted to drop everything and start making a game built around spider-type activity. <\/p>\n<p>Apparently making one videogame means passing up the chance to make a dozen others.<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot4.jpg' class='insetimage' width='600' alt='Hey baby, do those legs go all the way up? They do? I guess that makes sense.' title='Hey baby, do those legs go all the way up? They do? I guess that makes sense.'\/><\/td><\/tr><\/table><\/p>\n<p>When giving the spider-legs to the robots, I mistakenly gave legs to ALL robots, even ones that fly. <\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot6.jpg' class='insetimage' width='600' alt='Wow. I know I&#8217;m a hack artist, but this was bad even by my own standards.' title='Wow. I know I&#8217;m a hack artist, but this was bad even by my own standards.'\/><\/td><\/tr><\/table><\/p>\n<p>While writing this post I randomly found this screenshot in my archives. This must be from really early in the project. Don&#8217;t know why I took a picture of this, but it&#8217;s kind of interesting. I&#8217;d totally forgotten about the phase where the avatar had one eye and one really clunky arm.<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot7.jpg' class='insetimage' width='600' alt='I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;M THE MAP!' title='I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;m the map, I&#8217;M THE MAP!'\/><\/td><\/tr><\/table><\/p>\n<p>My first maze designs were really complex and disorienting. But playtesting revealed that being lost and confused was directly at odds with the fast-paced nature of the game I&#8217;m trying to make. It&#8217;s a complete killjoy to run down a passge, hit a dead-end, and have to backtrack and try again. It&#8217;s also no fun to accidentally loop back to where you were a few minutes ago. <\/p>\n<p>Maps that look a little complicated at a distance are bewildering up close, and maps that are confusing at a distance are unplayable up close. It only takes an occasional split or twist in the passage to make it feel like the space is really big and convoluted. A little complexity goes a long way.<\/p>\n<p>Most of my work has been simplifying and streamlining the passage design to give the player a clear sense of progression. As the game goes on, it adds more blinds and side-tunnels for ambushes, but an attentive player should (ideally) always have a sense of which way to go to reach their goal.<\/p>\n<p>Here is yet another of the many, many directions the game COULD have gone:<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr14_shot8.jpg' class='insetimage' width='600' alt='It&#8217;s like a rave for robots.' title='It&#8217;s like a rave for robots.'\/><\/td><\/tr><\/table><\/p>\n<p>It is really hard to stay focused on a single design and not get dragged into all these other possibilities. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>At the beginning of a project there&#8217;s always a big burst of progress. Every ten minutes you&#8217;ve got another feature or another improvement, and it&#8217;s easy to delude yourself into thinking you&#8217;re John Carmack. But then you enter the middle phase of the project and suddenly it&#8217;s time to tidy things up, get your interfaces [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[498],"tags":[],"class_list":["post-21089","post","type-post","status-publish","format-standard","hentry","category-good-robot"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/21089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=21089"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/21089\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}