{"id":21405,"date":"2013-10-28T06:33:54","date_gmt":"2013-10-28T11:33:54","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21405"},"modified":"2015-07-01T04:48:56","modified_gmt":"2015-07-01T09:48:56","slug":"project-good-robot-27-missiles","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21405","title":{"rendered":"Project Good Robot 27: Missiles!"},"content":{"rendered":"<p>I&#8217;ve added some text damage indicators to show the player how much murder they&#8217;re dishing out. When they shoot a robot, a number pops up to show the resulting damage. On one hand, screen clutter is bad.  On the other hand, if players don&#8217;t understand the mechanics it can lead to frustration and confusion. Oh sure, I could just TELL the player about how laser power, energy drain, and armor interact, but showing the player some math outside of gameplay is going to be a lot harder to understand than just showing them how hard they&#8217;re hitting. <\/p>\n<p>I sent this version out to my testers last week. We&#8217;ll see what they say.<\/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='gr25_damage.jpg' title='gr25_damage.jpg'\/><\/td><\/tr><\/table><\/p>\n<p>My guess? &#8220;Make it an option&#8221;. Everyone says to make things an option.  It&#8217;s often good advice, but making EVERYTHING an option makes for complicated interfaces, complicated debugging, and gutless design.  If possible, the game designer should really just figure out what kind of game they want to make. Telling the user, &#8220;There&#8217;s a good game in here someplace once you get all these sliders and checkboxes sorted out and adjusted&#8221; is probably not the most direct route to fun.  Some things <strong>must<\/strong> be options, some things <strong>should<\/strong> be options, some things <strong>can<\/strong> be options, and some things just waste the user&#8217;s time and fill them with doubt. A simple checkbox at the start of the game for &#8220;permadeath mode&#8221; probably won&#8217;t overwhelm the user. But adding a dozen checkboxes and sliders? That&#8217;s fine for strategy games, but it&#8217;s probably bad form in a simple action game. <\/p>\n<p>But like I said: We&#8217;ll see what testers say.<\/p>\n<p><!--more-->The biggest trouble spot in my game is the missile system. We&#8217;ve done half a dozen builds now, and I don&#8217;t think we&#8217;ve had a single iteration where missiles weren&#8217;t a problem. At first the entire missile skill was useless and a waste of skill points, because there weren&#8217;t enough missile to make use of it and they didn&#8217;t do enough damage. <\/p>\n<p>I sort of assumed that the missiles would work here the way they did in Descent. They would be used to clear out clusters of weak foes, or to soften up something big. I didn&#8217;t intend for them to be used all the time. But this game isn&#8217;t Descent. Good Robot has a faster pace and more foes. You can see all around you, so dogfighting in the middle of a room is a viable and fun approach instead of suicidal.<\/p>\n<p>During testing, one person tried to do a &#8220;missile build&#8221; by ignoring the laser and putting all his points into missiles. He frequently ran out of missiles and found himself unable to fight. The build was broken, but there was nothing to indicate to the player that this wasn&#8217;t a reasonable way to develop their character. You&#8217;ve got two weapons, why is one the &#8220;main&#8221; weapon and not the other?<\/p>\n<p>In response to this, I fiddled with missiles a bit.  I made them more plentiful.  I enlarged the blast radius. I upped the damage. But that only led to a new problem&#8230;<\/p>\n<p>I had a homing missile powerup in the game. If you had it, you could fire a missile into a crowded room and it would blow everyone to bits. You didn&#8217;t need to aim or even expose yourself to enemy fire.  All you had to do was fire a missile into an open space and back away. Once everyone was dead, you could gather up all the dropped XP, shields, and missiles and begin bombing the next room.  It was overpowered, boring, and not the game I was trying to make.<\/p>\n<p>Without the homing powerup, missiles were very, very hard to aim. Even with a mouse. Using a controller, they were almost impossible.  You had to get close, and even if your aim was true the robot was likely to have moved around a bit by the time the missile got where it was going. <\/p>\n<p>This was one of the things I hated about FTL: You were at the mercy of the stuff you found. Only this is WORSE than FTL, since you can LOSE powerups. You could get the homing powerup and yawn your way to victory with missiles. But then you make a mistake, die, and lose the powerup.  Suddenly your build is invalid and the game is ten times harder.  Suddenly the whole game hinges on this one powerup and not on player skill.  The experience becomes very volatile and driven by random chance.<\/p>\n<p>No no no. This is not what I want. <\/p>\n<p>Sure, I could probably salvage the feature if I was willing to spend a ton of time fussing with it.  Maybe foes should drop missiles based on how many you have? Maybe AI should hold still if a missile is heading for it? Maybe speed the missiles up? Maybe take out the homing powerup and just make homing a property of the missile skill? Maybe mess with the blast radius? Maybe try different text to explain missiles to the player?<\/p>\n<p>I could make all these changes in an attempt to make missiles more situationally useful. Maybe if I tweaked the numbers just right, eventually I&#8217;d make missiles useful in situation A, less useful in situation B, and the player would understand the difference. I think this would take a long time and involve a lot of arbitrary rules. The feedback I&#8217;m seeing is telling me the entire premise is flawed and at odds with the game I&#8217;m trying to build. <\/p>\n<p>So let&#8217;s try something else:<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr26_smartbomb.jpg' class='insetimage' width='600' alt='gr26_smartbomb.jpg' title='gr26_smartbomb.jpg'\/><\/td><\/tr><\/table><\/p>\n<p>I wanted missiles to be a special-case problem solver for bosses and clustered foes, so why not just build a system around that assumption? I rip out the whole missile system and replace it with a &#8220;smartbomb&#8221;. Smartbombs automatically home in on foes.  When they destroy a foe it causes an explosion.  If that explosion kills something, it triggers another.  So now the player can chain explosions if they can get foes to bunch up. <\/p>\n<p>(Okay, this does require one slightly arbitrary rule: When a robot fires a missile, the explosion instantly does damage to everything in the blast radius. But a smartbomb has the explosion animate first, and does the damage at the END of the explosion animation instead of at the start. I admit this is kind of bullshit, but without this distinction we&#8217;d either have the player be able escape explosions without taking damage, or chain explosions going off all at once instead of being, you know, a chain. I&#8217;m not too worried abut this discrepancy in behavior. The AI is too dumb to fly out of the blast, so the delayed damage works in the player&#8217;s favor by letting more victims bunch up in the killzone.)<\/p>\n<p>I don&#8217;t want the player to sit around sucking their thumb waiting for the smartbomb to recharge, so it recharges based on kills. Just blast bad robots with the laser and every few minutes you get a &#8220;smartbomb ready!&#8221; message and can start looking for a good opportunity to pull the trigger.<\/p>\n<p>If you can kill a really big group at once then it&#8217;s just barely possible to have the smartbomb recharge instantly. I&#8217;m okay with that.  It&#8217;s really only possible in the huge crowds in the latter stages of the game, and even then it&#8217;s kind of a risky thing to do.<\/p>\n<p>This improves the game right away. I find there&#8217;s a certain tension to smartbomb use.  You want foes to bunch up as much as possible to make a chain nice and big.  This generally involves rounding up a really big and dangerous group of foes.  This creates another incentive for the player to get in the and dogfight instead of trying to hang back and engage foes through a choke point. You can play that way if you want to (and if you&#8217;re playing on hardcore mode, it&#8217;s probably advisable) but your smartbombs will be less satisfying to use.  If players are like me, they&#8217;ll probably be tempted to stick their neck out a bit and try to make the mob larger before they pull the trigger.<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/gr26_homing.jpg' class='insetimage' width='600' alt='gr26_homing.jpg' title='gr26_homing.jpg'\/><\/td><\/tr><\/table><\/p>\n<p>The other change to the game is based entirely on feedback and suggestions from people in the comments.  Earlier in the series I remarked that foes can&#8217;t hurt each other with missiles. Late in the game, you&#8217;ll encounter big crowds of missile-based foes.  If their missiles could hurt each other, then the entire group would detonate instantly as the guys in the back began shooting.  I could have the ones in the back hold fire if an ally was in the way, but this would make it so large groups weren&#8217;t really more dangerous than small ones, because most foes would just patiently sit at the back and wait for the field to open up.  Making the AI smart enough to spread out and not get in each other&#8217;s way would be prohibitively difficult and time-consuming. And even if I did all that work, it wouldn&#8217;t really make the game more fun.  The player is likely looking for a chance to be clever and turn missiles on their enemies, and all this fussing wouldn&#8217;t bring us any closer to that goal.<\/p>\n<p>Some people suggested having missiles act sort of like <acronym title=\"movie torpedoes, actually\">torpedoes<\/acronym>. Missiles are harmless until they get close to the player, at which point they become armed and can hurt anyone. I tried it. It works.<\/p>\n<p>Like smartbombs, this is a feature that encourages reckless behavior in the name of fun.  Blowing up some robots with their own missiles is really fun, but you have to be willing to dance with missiles to pull it off. <\/p>\n<p>This is exactly the sort of thing I was hoping to work on when I started this project. I don&#8217;t know if the final product will be any good, but at least I&#8217;m doing something interesting and different.  Of <a href=\"?page_id=16458\">all the projects<\/a> I&#8217;ve worked on here, this is my favorite. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve added some text damage indicators to show the player how much murder they&#8217;re dishing out. When they shoot a robot, a number pops up to show the resulting damage. On one hand, screen clutter is bad. On the other hand, if players don&#8217;t understand the mechanics it can lead to frustration and confusion. Oh [&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-21405","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\/21405","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=21405"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/21405\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}