{"id":21397,"date":"2013-10-21T05:52:28","date_gmt":"2013-10-21T10:52:28","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21397"},"modified":"2015-07-01T04:48:23","modified_gmt":"2015-07-01T09:48:23","slug":"project-good-robot-25","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21397","title":{"rendered":"Project Good Robot 25: Reader Questions"},"content":{"rendered":"<p>I&#8217;ll never be able to do this. I&#8217;m wasting my time. It was stupid to even begin this project. It&#8217;s too big for me. It&#8217;s too hard. What if people don&#8217;t like it? What if nobody buys it? What if I can&#8217;t even finish it? What if the game just erases people&#8217;s hard drives? <\/p>\n<p><em>Hey Shamus, you could always finish that book you started!<\/em><\/p>\n<p>Ok, so let&#8217;s make a videogame. <\/p>\n<p>At this point in the project, there&#8217;s not a lot to talk about. Sure, I&#8217;m DOING a lot of things, but it&#8217;s all fussy polishing, balancing, debugging, and code-cleaning.  My change list looks like this:<\/p>\n<p><!--more--><\/p>\n<pre lang=\"ini\">\r\nMade the placeholder graphic do the same job in 1\/10th the lines of code. 2 hours ago\r\nNew game begins with smartbomb NOT ready. 2 hours ago\r\nAdjusted the level file to put the new story points in their proper place. 2 hours ago\r\nUpdated the upgrade menu to reflect the change from missiles to smartbombs. 2 hours ago\r\nAjdusted vertical text display to be less cramped. 4 hours ago\r\nMake smartbombs explosion larger, more benefit from leveling the skill. 4 hours ago\r\nVersion 0.4.0 - Code cleanup. 4 hours ago\r\nHud message for when smartbomb is ready to fire. 5 hours ago\r\nMany small balance changes to how smartbombs perform. 5 hours ago\r\nMoved the level up tooltips to the message file. 9 hours ago\r\nAdded frame counter to hud. 9 hours ago\r\nActivate key will skip story text, and if pressed again will close dialog. 10 hours ago\r\nParticles drawn behind level geometry. Looks much nicer. 10 hours ago\r\nRobots will shoot player if they are visible on-screen. 10 hours ago\r\nEnergy no longer replenishes while charging a shot. 10 hours ago\r\nAdded new control module to unify inputs and simplify code. 10 hours ago\r\nRestored storybox functionality and added Rutskarn's text. 11 hours ago\r\nFixed size & positioning of graphic window in storybox. 13 hours ago\r\nRe-enabled story boxes. Made the teletype printing compatible with GCC. 13 hours ago\r\nAdded message system to load player-facing text from an external file. 13 hours ago\r\nAdded env variable to scale player explosions. 3 days ago\r\n<\/pre>\n<p>For the curious, these are specific changes submitted to source control. The idea is that the programmer has a whole bunch of files that hold all the source code. (Over 100, in my case.) You can, if you&#8217;re crazy, just make changes all over the place without tracking or documenting your changes, but this eventually leads to chaos and confusion. You have no way of tracking what you&#8217;ve done or when, and if you&#8217;re trying to work on the same project with another programmer it&#8217;s going to be madness. <\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr25_damage.jpg' class='insetimage' width='600' alt='Have you ever wanted to be trapped in a dark tunnel with hundreds of robots who are trying to kill you? Me neither!' title='Have you ever wanted to be trapped in a dark tunnel with hundreds of robots who are trying to kill you? Me neither!'\/><\/td><\/tr><\/table><\/p>\n<p>When you&#8217;re using source control, you&#8217;re usually expected (or at least, advised) to make discrete periodic changes instead of continuous tiny ones. So I&#8217;ll add a feature where the Doom marine can shoot a barrel to make it explode. Then I submit that change with a brief description of what I did, and source control notes the difference between the old files and the new ones. When another programmer comes along in the morning, they can see a list of the files I changed, what lines of code where changed, my description, and when I submitted the changes. <\/p>\n<p>The changes I listed above are all gradual and evolutionary, not radical and transformative. No major technology headaches. No misadventures. No stories of strange crash bugs. I&#8217;m releasing builds to my testers about once a week-ish, gathering up their feedback, and then making changes to the game based on that feedback. Once in a while I have a little freak-out of self doubt, but other than that it all feels very steady and predictable.  This is the closest I&#8217;ve been to having a day-job routine since I went &#8220;indie&#8221; a few years ago. <\/p>\n<p>So to keep this series going, let&#8217;s go back to <a href=\"?p=21226\">part 19<\/a> when I asked everyone what they wanted to know about the game.<\/p>\n<p><a href=\"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21226&#038;cpage=1#comment-351250\">Karthik asks<\/a>:<\/p>\n<blockquote><p>Shamus, how do you intend to structure the game? Are subsequent levels meant to be geographically linked? I mean either depth-wise spelunking, like in roguelikes, or &#8220;laterally&#8221; linked areas, like in many shmups. Or are they areas linked only by some thin narrative thread, like in many platformers? (&#8220;Here&#39;s your lava level!&#8221;)<\/p>\n<p>Or do you a hub-and-spoke structure in mind, like in some metroidvania games?<\/p>\n<p>Also, you&#39;ve written about providing some narrative context to the levels. I&#39;m eager to see how you go about it.\n<\/p><\/blockquote>\n<p>For those who joined recently, I answered the first part of this question in <a href=\"?p=21242\">part 20<\/a>. But the short version is that the world is basically a long tunnel running from the entry screen to the final boss fight. Most travel is horizontal, with the occasional downward shaft. Yes, the game does the bog-standard ice\/jungle\/lava level thing. <\/p>\n<p>I&#8217;d LOVE to do some kind of Metroidvania game. That sort of thing is where my heart is, gameplay-wise. But I kind of want to try something less ambitious before I reach for the stars like that. Even working in 2D, a game like that could take a lot of time to prototype and balance, and I don&#8217;t think I want to take on a challenge like that for my first commercial project. If this game yields some kind of reasonable return, then I can look to doing something more complex.<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr25_story.jpg' class='insetimage' width='600' alt='AT LONG LAST WE HAVE THE CITIZEN KANE OF THE PLAN 9 FROM OUTER SPACE OF GAMES.' title='AT LONG LAST WE HAVE THE CITIZEN KANE OF THE PLAN 9 FROM OUTER SPACE OF GAMES.'\/><\/td><\/tr><\/table><\/p>\n<p>The narrative will, basically, be provided via little text popups. Click on a thing, get a dialog that gives you some sort of context and also makes jokes about the crazed robots you&#8217;re fighting. <a href=\"http:\/\/www.chocolatehammer.org\/\">Rutskarn<\/a> is doing most of the heavy lifting when it comes to writing, and I&#8217;m just sneaking in the occasional joke here and there. If the player doesn&#8217;t care, they can click past the text and get back to the shooting without hassle. I want to allow the player to enjoy the boxes, but I don&#8217;t want them to see them as an unwelcome break in flow. <\/p>\n<p>HiEv (and a lot of other peopled) asked: <\/p>\n<blockquote><p>Have you considered limiting the number of powerups you can have at one time?<\/p><\/blockquote>\n<p>I&#8217;ve thought about it. The problem is: What happens when you hit the limit? <\/p>\n<p>The player is going to be really pissed if they can&#8217;t pick up a favorite powerup because they have a crappy (to them) one. Then players will treat unpopular powerups like a punishment. &#8220;Nooo! I accidentally picked up the Air Freshener and now if I  find the Nuclear Minigun I won&#8217;t be able to pick it up. Shit!&#8221; <\/p>\n<p>That&#8217;s no good. <\/p>\n<p>We could make the player drop the oldest powerup when they pick up a new one, but then if they accidentally bump into an unwanted powerup they will have to fuss around, picking up the most recently dropped until they get rid of the one they don&#8217;t want. That sounds&#8230; tedious. <\/p>\n<p>Or we can add some stupid interface screen to let the player pick which ones to equip, and which ones to drop. (Or carry?) <\/p>\n<p>Except, that&#8217;s a massive, massive job. We&#8217;re talking about an inventory screen that lets you click-and-drag, select things, will show you tooltips so you can see what all this stuff is, and is useful and usable using both a mouse and a controller. You could spend days on something like that. <\/p>\n<p>And when it&#8217;s over, the player will have some fussy little inventory juggling to do.  It will break the flow of the game and I don&#8217;t think it would make the game more fun to play.  At least, I don&#8217;t think it will justify the time cost. <\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr25_chaos.jpg' class='insetimage' width='600' alt='I&#8217;m not sure what was going on here but I&#8217;m pretty sure I wasn&#8217;t about to win the game.' title='I&#8217;m not sure what was going on here but I&#8217;m pretty sure I wasn&#8217;t about to win the game.'\/><\/td><\/tr><\/table><\/p>\n<p>If this was a game where you had Borderlands-style drops of randomized loot to equip, then an equipment screen would be worth it.  But I think equipping powerups would be this worst-of-both-worlds thing where the inventory is complicated enough to break the flow of the gameplay but not interesting enough to be fun in itself. <\/p>\n<p>I could be wrong, but that&#8217;s what my instincts are telling me.<\/p>\n<p>I can&#8217;t remember who asked, or where, but I&#8217;ve seen the question asked a few times:<\/p>\n<blockquote><p>Have you considered making the game &#8220;roguelike&#8221;, with perma-death?<\/p><\/blockquote>\n<p>I think an optional perma-death mode is going in for sure.  The game seems to lend itself well to this sort of thing. When complete, a full play-through of the game ought to take less than three hours. There&#8217;s an &#8220;emergency teleport&#8221; powerup in the game that will teleport you to safety if you&#8217;re about to die. (It&#8217;s single-use, like the <a href=\"http:\/\/nethack.wikia.com\/wiki\/Amulet_of_life_saving\">amulet of life-saving<\/a> in Nethack.) The game is designed to be played a few times and experiment with different builds and powerup combinations, and a perma-death mode seems like a natural way to offer some additional challenge for people who are  into that. <\/p>\n<p>So that&#8217;s where the project is right now. <\/p>\n<p>Ask more questions! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ll never be able to do this. I&#8217;m wasting my time. It was stupid to even begin this project. It&#8217;s too big for me. It&#8217;s too hard. What if people don&#8217;t like it? What if nobody buys it? What if I can&#8217;t even finish it? What if the game just erases people&#8217;s hard drives? Hey [&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-21397","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\/21397","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=21397"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/21397\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}