{"author_name":"Tulrath","cat":"LD #21","comments":[],"epoch":1315536480,"likes":1,"metadata":{"p_key":"63550","p_author":"Tulrath","p_authorkey":"4703","p_urlkey":"99335","p_title":"Stranded Post-Mortem","p_cat":"LD #21","p_event":"LD21","p_time":"1315536480","p_likes":"1","p_comments":"0","p_status":"UPD5","us_key":"4703","us_name":"Tulrath","us_username":"tulrath","event_start":"1313712000","event_key":"7","event_name":"LD21"},"text":"<p>Since this is my first LD, I&#8217;ve been thinking a lot about my post-mortem, plus I&#8217;ve been working on <a title=\"Stranded Again\" href=\"http:\/\/www.ludumdare.com\/compo\/wp-admin\/post.php?post=73019&amp;action=edit\" target=\"_blank\">&#8220;Stranded Again<\/a>&#8220;, that&#8217;s going be my enhanced version of Stranded with improvements as suggested by the LD community. \u00a0Plus my Twitter Followers count is going up steadily, so I&#8217;ve been keeping up the pace \ud83d\ude00<\/p>\n <h3><strong>WARNING! \u00a0Some minor story spoilers ahead&#8230;<\/strong><\/h3>\n <p>&nbsp;<\/p>\n <h3><strong><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/09\/08\/stranded-post-mortem\/dna1\/\" rel=\"attachment wp-att-73403\"><img class=\"size-full wp-image-73403 alignnone\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/09\/dna1.png\" alt=\"\" width=\"64\" height=\"64\" \/><\/a>The Idea<\/strong><\/h3>\n <p>When the list of theme topics was down to 20 or so, I got out a notebook and came up with single-sentence game ideas for ALL of them. \u00a0My idea for &#8220;Escape&#8221; was:<\/p>\n <p style=\"text-align: center\"><em>Escape: You are tiny brown spider, trying to escape from a research lab.<\/em><\/p>\n <p>After doing this for all 20, I went back and came up with a list of <strong>Actions<\/strong> and <strong>Challenges<\/strong>.<\/p>\n <p>Next, I asked myself, well what exactly do spiders do? \u00a0Thinking about <strong>Actions<\/strong>, I think, \u00a0is a good way to create core game mechanic ideas.<\/p>\n <p>&nbsp;<\/p>\n <ol>\n <li>\n <address>Catch insects for food<\/address>\n <\/li>\n <li>\n <address>Spin webs to stop &#8220;bad guys&#8221; (bad insects?) from fleeing, or from attacking something or someone else<\/address>\n <\/li>\n <li>\n <address>Collect DNA from insects they catch<\/address>\n <\/li>\n <li>\n <address>Catch bad dreams<\/address>\n <\/li>\n <li>\n <address>Collect nanites, grid-bugs, software bugs?<\/address>\n <\/li>\n <\/ol>\n <address>\u00a0<\/address>\n <address>Next, I came up with <strong>Challenges<\/strong> a spider might face. \u00a0I thought that thinking about challenges was \u00a0a good way of coming up with a list of antagonists.<\/address>\n <address>\u00a0<\/address>\n <div>\n <ol>\n <li>\n <address>Web is destroyed by&#8230; fire, rain, people, wind, other insects<\/address>\n <\/li>\n <li>\n <address>Web decays over time<\/address>\n <\/li>\n <li>\n <address>Spider dies from hunger, or runs out of webbing<\/address>\n <\/li>\n <\/ol>\n <address>\u00a0<\/address>\n <address>\u00a0<\/address>\n <address><strong><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/09\/08\/stranded-post-mortem\/spider1-2\/\" rel=\"attachment wp-att-73405\"><img class=\"size-full wp-image-73405 alignnone\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/09\/spider11.png\" alt=\"\" width=\"64\" height=\"64\" \/><\/a>The Story<\/strong><\/address>\n <\/div>\n <p>Then I took all this and wrote a tiny <strong>Story<\/strong>. \u00a0Every game, at its core, must tell a Story &#8211; no matter how simple it is. \u00a0This one I thought was about as simple as I could get. \u00a0I didn&#8217;t know this at the time, but keeping the Story simple made the programming much easier as well.<\/p>\n <p style=\"text-align: center\">Escape: You are a tiny brown spider caught in a research lab. \u00a0You can collect DNA from insects. \u00a0Collecting DNA in the right sequence gives you special, but temporary, abilities. \u00a0There is a girl trapped in the lab too. \u00a0The girl is &#8220;dangerous&#8221; and &#8220;different&#8221;, but you don&#8217;t know why. \u00a0THEY have taken DNA samples from her too.<\/p>\n <p style=\"text-align: center\"><em>&#8220;I can&#8217;t leave here without getting them back &#8212; I can&#8217;t collect them all in time, but I know a little spider who can.&#8221;<\/em><\/p>\n <p>I actually thought, of all my ideas, this one was \u00a0really \u00a0<strong>s-t-r-e-t-c-h-i-n-g<\/strong> \u00a0it to match the theme &#8211; probably the worst match-up of the 20 &#8212; and the LD community echoed these sentiments, but not in a mean way &#8212; the whole community has been awesome.<\/p>\n <h2><strong><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/09\/08\/stranded-post-mortem\/fire1\/\" rel=\"attachment wp-att-73406\"><img class=\"size-full wp-image-73406 alignnone\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/09\/fire1.png\" alt=\"\" width=\"64\" height=\"64\" \/><\/a>The Ruleset<\/strong><\/h2>\n <p>Next I started to think about rulesets. \u00a0Which came up with this list of rules:<\/p>\n <p>These are the ones I was able to implement:<\/p>\n <ol>\n <li>\n <address>You win each level by collecting all the insects before you run out of web strands<\/address>\n <\/li>\n <li>\n <address>Your web strands do not carry-over from level to level, but are refilled when you start a new level<\/address>\n <\/li>\n <li>\n <address>You lose a level if you are unable to catch all the insects with the strand allotment you are given<\/address>\n <\/li>\n <li>\n <address>Levels can be replayed if they are lost<\/address>\n <\/li>\n <li>\n <address>When you lose a level, your strand allotment and all the insects for the level, are reset<\/address>\n <\/li>\n <li>\n <address>You will always have at least 1 more strand than there are enemies, but the ratio of strands to enemies gets smaller as you progress in levels<\/address>\n <\/li>\n <li>\n <address>The story of the game is told through dialog, that is &#8220;unlocked&#8221; as you complete each level<\/address>\n <\/li>\n <\/ol>\n <address>These are the ones that I couldn&#8217;t implement because I ran out of time:<\/address>\n <ol>\n <li>\n <address>Change the ball colors and the fly colors so that you would have to jump from ball Blue to ball Yellow to catch Fly Green<\/address>\n <\/li>\n <li>\n <address>Create bonuses that you could catch that would change color of the ball you are either jumping from or jumping to in combination with 1 above.<\/address>\n <\/li>\n <li>\n <address>Create obstacles that you don&#8217;t want to have your web touch &#8212; like fire. If your web touches fire, the fire goes back and disintegrates the ball you just came from.<\/address>\n <\/li>\n <li>\n <address>Create &#8220;safety&#8221; bonuses that you can catch &#8212; like water. Water and other bonuses could be caught and stored for later use.<\/address>\n <\/li>\n <li>\n <address>More of all of the above, but with other opposites. Might be quite challenging to get the right combinations.<\/address>\n <\/li>\n <li>\n <address>Mutations! Each bug represents a different DNA code, catch the bugs in the right combination and your spider gets a temporary mutation.<\/address>\n <\/li>\n <\/ol>\n <address><strong><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/09\/08\/stranded-post-mortem\/water1\/\" rel=\"attachment wp-att-73414\"><img class=\"alignnone size-full wp-image-73414\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/09\/water1.png\" alt=\"\" width=\"64\" height=\"64\" \/><\/a>What Worked<\/strong><\/address>\n <p>Prioritizing the rule-set from the design above helped tremendously. \u00a0When I initially came up with the list of rules, they weren&#8217;t in the order shown above. \u00a0It took about 2 hours to work out all the inter-dependencies between them all. \u00a0Each time a rule was identified as a prerequisite for another rule, it got a +1 &#8212; the rule that it relied on it got a -2. \u00a0When I sorted this list from highest score to lowest score, I had my to-do list in order of functional dependency. \u00a0This really worked because at each step of the way I had a &#8220;working game&#8221;, so I could stop adding features almost at any point in the list as soon as I ran out of coding time &#8212; which is exactly what happened.<\/p>\n <p>&nbsp;<\/p>\n <p>Creating a schedule in a spreadsheet ahead of time and marking off hours for &#8220;sleeping&#8221;, &#8220;eating&#8221;, &#8220;family time&#8221;, etc&#8230; \u00a0I had one row for every hour of the compo, and for the most part stuck to that schedule. \u00a0My development time went into just a little bit more detail (but not much more) and had rows for &#8220;Game Artwork&#8221;, &#8220;GUI Artwork&#8221;, &#8220;Sound Effects&#8221;, &#8220;Music&#8221;, &#8220;Coding Win\/Lose Conditions&#8221;, etc&#8230; \u00a0I also had two hours each day (one in the afternoon, one in the evening) allocated as &#8220;DO NOTHING&#8221; where I had to get up from my computer and take a break. \u00a0That had a HUGE positive impact on my productivity, my mood, and I think I solved a half-dozen coding issues &#8220;in the back of my head&#8221; each time I did this. \u00a0Also, writing down any &#8220;hairy&#8221; coding issues during the day and then reviewing them before I went to sleep really worked &#8212; I woke up knowing the solution <img src=\"http:\/\/ludumdare.com\/compo\/wp-includes\/images\/smilies\/simple-smile.png\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n <p>&nbsp;<\/p>\n <p>Leaving LOTS of time at the end. \u00a0I left a full 6 hours at the end to run final bug-testing, upload my game, ask friends and family to play to make sure it worked, make any last minute fixes, write my forum post ahead of time, write my entry, announcing via all the social media channels, IMing with people about it, etc&#8230; \u00a0I think those last 6 hours were the most busy and I may actually allow myself more time in future compos.<\/p>\n <p>&nbsp;<\/p>\n <p>Using classes for everything. \u00a0I have a class for &#8220;spider&#8221;, another for &#8220;bug&#8221;, another for &#8220;strand&#8221;, etc&#8230; \u00a0I used my UML\/OOP books as guides and came up with a complete list of objects I&#8217;d need for the game, and then attached all the methods to them as I went along. \u00a0This worked exactly the way it&#8217;s supposed to and it made the actual coding a breeze (which in total I think was only about 8 hours).<\/p>\n <h2><strong><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/09\/08\/stranded-post-mortem\/fly1\/\" rel=\"attachment wp-att-73415\"><img class=\"alignnone size-full wp-image-73415\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/09\/fly1.png\" alt=\"\" width=\"64\" height=\"64\" \/><\/a>What Didn&#8217;t Work<\/strong><\/h2>\n <p>Thinking that GUI programming would be easy. \u00a0It wasn&#8217;t! \u00a0GUI programming ended up taking nearly 4 hours more time than I had initially thought. \u00a0And in the final product you can see that there just aren&#8217;t a lot of GUI controls to help with gameplay. \u00a0There&#8217;s a reason why most AAA game studios have entire teams dedicated to GUI programming (even when using a &#8220;GUI engine&#8221;) &#8212; it&#8217;s very tedious work. \u00a0Unity GUI makes it as easy as it can possibly be, but it still just takes a set amount of time to create all that GUI functionality &#8212; GUI systems are inflexible in their time demands. \u00a0In the future, I&#8217;ll be able to estimate this better I think.<\/p>\n <p>&nbsp;<\/p>\n <p>Using the dialog system as a means to control the game progression. \u00a0Such a bad idea! \u00a0This is where I really fell down in my technical design. \u00a0I should have created dedicated and separate classes for &#8220;game&#8221; (to control the game state) and created instances of a &#8220;human&#8221; class (one for the male scientist and one for the female scientist). \u00a0I realize now that I was so focused on the game mechanics (which mostly involved the spider, the strands, the anchors, and the insects), that I simply forgot about these classes. \u00a0I ran into some problems about mid-way through that I solved with a &#8220;gameManager&#8221; class that contained all the variables and methods to handle the gamestate and dialog&#8230; but it was all mashed up together. \u00a0In the future, I need to be more thorough with my technical design.<\/p>\n <p>&nbsp;<\/p>\n <p>Not leaving enough time for additional levels. \u00a0The final product has 6 playable levels (and then a 7th level that can be replayed as much as the player wants). \u00a0Seven levels might seem like a lot for a Ludum Dare compo entry, but in my case, levels only took 5 to 30 seconds to solve. \u00a0So, all-in-all I had maybe 5 minutes of gameplay &#8212; that is IF the player stopped and read the dialog <img src=\"http:\/\/ludumdare.com\/compo\/wp-includes\/images\/smilies\/simple-smile.png\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> \u00a0 \u00a0I should have done those calculations ahead of time to know how many levels I would need to create. \u00a0Originally I wanted to provide about 30 minutes of solid gameplay. \u00a0So using that calculation, it should have told me that I would have needed 60 or 70 (!!!) levels. \u00a0That, of course, would have been a big Red Flag telling me that the gameplay is too easy and goes by too fast.<\/p>","time":"September 8th, 2011 9:48 pm","title":"Stranded Post-Mortem"}