{"assets":[],"author_link":"author\/netguy204\/","author_name":"netguy204","cat":"LD #23","categories":["LD #23"],"comments":[],"epoch":1335415440,"event":"LD23","likes":7,"metadata":{"p_key":"78143","p_author":"netguy204","p_authorkey":"0","p_urlkey":"287152","p_title":"Little Mischief Makers: The Post-Mortem","p_cat":"LD #23","p_event":"LD23","p_time":"1335415440","p_likes":"7","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1334880000","event_key":"10","event_name":"LD23"},"source_url":"2012\/04\/26\/little-mischief-makers-the-post-mortem\/","text":"<p>I made a game in 48 hours! And I even like it!<\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-23\/?action=preview&amp;uid=5044\" target=\"_blank\" title=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-23\/?action=preview&amp;uid=5044\">http:\/\/www.ludumdare.com\/compo\/ludum-dare-23\/?action=preview&amp;uid=5044<\/a><\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/screen-shot-2012-04-25-at-10-02-01-pm\/\" rel=\"attachment wp-att-140372\"><img alt=\"\" class=\"alignnone size-full wp-image-140372\" height=\"485\" sizes=\"(max-width: 648px) 100vw, 648px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-10.02.01-PM.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-10.02.01-PM-300x224.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-10.02.01-PM-550x411.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-10.02.01-PM.png 648w\" width=\"648\"\/><\/a><\/p>\n<p>I started preparing for this LD with the release of @mcfunkypant\u2019s\u00a0book \u201cThe Game Jam Survival Guide.\u201d I had been wanting to enter the\u00a0LD48 contest ever since I first heard about it 2 years ago, but the\u00a0survival guide is what finally gave me the confidence to try.<\/p>\n<p>Code preparations began a week before with the warmup contest. The 1 week deadline helped keep me motivated as I put together the\u00a0library of important basic functions that I knew I would need. I had\u00a0decided by this point to do a pixelated platformer because I felt like\u00a0that was comfortably within my skill level to accomplish in the\u00a0time. I used the warmup time to hash out rect-vs-rect collisions,\u00a0some really basic spring\/damper physics, and a set of map loading and\u00a0rendering utilities. This brings us to <em>the first major thing that went\u00a0right<\/em>\u2026<\/p>\n<p><strong>What went right<\/strong><\/p>\n<p><span style=\"text-decoration: underline\">Using Bitmaps as Levels<\/span><\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/photoshop_maps\/\" rel=\"attachment wp-att-140376\"><img alt=\"\" class=\"alignnone size-full wp-image-140376\" height=\"480\" sizes=\"(max-width: 640px) 100vw, 640px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/photoshop_maps.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/photoshop_maps-300x225.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/photoshop_maps-550x412.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/photoshop_maps.png 640w\" width=\"640\"\/><\/a><\/p>\n<p>In previous projects I\u2019ve lost many hours of game coding because I attempted to create \u201cthe perfect level editor.\u201d Inevitably the process takes longer than I had expected, and my final product does far less than I had hoped. This\u00a0time, I was inspired by a friend of mine (who was inspired by Notch)\u00a0to just use the pixel data in an image as the map. Brilliant! This\u00a0means that I can take full advantage of my graphics software to make\u00a0rectangles and circles and rotations and flood fills\u2026 all those\u00a0things that I\u2019d never have time to implement in a homebrew map\u00a0editor. Then my game loads this image and translates each pixel of the\u00a0image into a tile in the world. It recognizes certain colors as being\u00a0tiles with certain properties (non-destructable, collidable,\u00a0non-collidable) and, if it reads a pixel it doesn\u2019t recognize as a\u00a0particular kind of block, it generates a slightly noised-up tile of the\u00a0same color and gives it some default properties. This technique slayed\u00a0the level-editing-dragon that has conquered me many times before.<\/p>\n<p><span style=\"text-decoration: underline\">Choosing an Art and Game Style in Advance<\/span><\/p>\n<p>Two weeks in advance of the theme being announced I knew that I would\u00a0be creating a pixelated platformer. Having those additional\u00a0constraints in place really helped focus my thinking once the theme\u00a0\u201cTiny World\u201d was announced. Making the decision to make a platformer\u00a0style game early also let me write the necessary collision, spriting,\u00a0and map loading\/drawing code before the contest began.<\/p>\n<p><span style=\"text-decoration: underline\">Being Ready with my Tools<\/span><\/p>\n<p>I devoted some pre-compo time to setting up a reasonably efficient\u00a0Clojurescript development workflow. I used cljs-build to monitor and\u00a0continuously re-compile my source as I changed it so I could very\u00a0quickly hop back and forth between emacs and the browser to see the\u00a0effects of my changes. I hacked my resource fetching code so that it\u00a0would keep the browser from caching anything while I was coding. I\u00a0even decided in advance that my nominal sprite\/tile size would be\u00a016\u00d716 pixels, and I figured out an appropriate scale to apply so that\u00a0the game would have the retro-pixelated look I was going for.<\/p>\n<p><span style=\"text-decoration: underline\">Throwing Away My Early Ideas<\/span><\/p>\n<p>To quote Chevy Ray Johnston in \u201cThe Game Jam Survival Guide\u201d: \u201cA\u00a0great way to come up with an idea to fit the theme is to write down\u00a0the first five things that come to mind, then toss \u2019em. Those are the\u00a0ideas everybody else is already thinking of and\/or making.\u201d<\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/life_of_a_cell\/\" rel=\"attachment wp-att-140377\"><img alt=\"\" class=\"alignnone size-large wp-image-140377\" height=\"419\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/life_of_a_cell-550x419.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/life_of_a_cell-300x228.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/life_of_a_cell-550x419.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/life_of_a_cell.png 640w\" width=\"550\"\/><\/a><\/p>\n<p>When the theme was announced I immediately starting doodling gameplay\u00a0ideas on my handy pile of scratch-paper. My first idea was a game centered around some kind\u00a0of proto-plasmic hero that collects nutrients and waste and\u00a0transports them around a human body. I\u2019ve now seen a few game entries that are similar to this idea, and I would have been pretty disappointed to write a duplicate game.<\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/cell_rts\/\" rel=\"attachment wp-att-140383\"><img alt=\"\" class=\"alignnone size-medium wp-image-140383\" height=\"261\" sizes=\"(max-width: 300px) 100vw, 300px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/cell_rts-300x261.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/cell_rts-300x261.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/cell_rts-550x479.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/cell_rts.png 640w\" width=\"300\"\/><\/a><\/p>\n<p>My next idea was some kind of RTS \/ resource management game where you\u00a0lay out the major components and the transport systems within a\u00a0cell. I wasn\u2019t able to find the spark in that idea that would make me\u00a0confident that the game would be fun. After this idea, I also rejected another idea due to its\u00a0potential art scope.<\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/little_people\/\" rel=\"attachment wp-att-140378\"><img alt=\"\" class=\"alignnone size-large wp-image-140378\" height=\"339\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/little_people-550x339.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/little_people-300x185.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/little_people-550x339.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/little_people.png 640w\" width=\"550\"\/><\/a><\/p>\n<p>After looking up \u201ctiny\u201d in a thesaurus, I came across the word\u00a0\u201celfin\u201d and its synonyms: \u201csprightly, playful, rascally.\u201d Thus was born\u00a0the idea for a game about the little people who are always stealing my\u00a0keys. As I was telling my wife about the idea, she suggested the\u00a0collecting-and-stacking mechanic that ended up being central to the\u00a0game.<\/p>\n<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/screen-shot-2012-04-25-at-8-40-59-pm\/\" rel=\"attachment wp-att-140382\"><img alt=\"\" class=\"alignnone size-full wp-image-140382\" height=\"260\" sizes=\"(max-width: 322px) 100vw, 322px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-8.40.59-PM.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-8.40.59-PM-300x242.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-25-at-8.40.59-PM.png 322w\" width=\"322\"\/><\/a><\/p>\n<p><strong>What went wrong<\/strong><\/p>\n<p><span style=\"text-decoration: underline\">Insisting on \u201crealistic\u201d physics<\/span><\/p>\n<p>The number one complaint I\u2019ve received from players is the\u00a0sluggishness of the controls. You see, I fell for the classic blunder of having the keyboard apply forces instead of velocities to the\u00a0character. It\u2019s my own fault. I even got that feedback from friends that I\u00a0asked to play the game after the first day of the contest. I responded to their feedback by\u00a0increasing gravity, increasing drag, and applying stronger\u00a0forces due to keypresses. This improved the feel, but it seems that any\u00a0perceptible\u00a0acceleration time translates to the player\u2019s mind as\u00a0\u201csloshy, unresponsive controls.\u201d Never-mind that that is the way it\u00a0works in real life\u2026 sometimes reality just isn\u2019t real enough for\u00a0video games.<\/p>\n<p><span style=\"text-decoration: underline\">Not fully rewarding the player<\/span><\/p>\n<p>In my game, you race a timer and collect keys (while doing general\u00a0damage to some poor sap\u2019s house). I scored the player both on keys\u00a0collected and damage done but emphasized the importance of keys by\u00a0giving the player an implicit goal (e.g., \u201cYou found 8 of 12!\u201d) However, I\u00a0failed to reward the player for achieving my implicit goal! Sadly, it\u00a0never crossed my mind that players would want some gratification\u00a0for getting all 12 keys. It\u2019s obvious now. It should be one of the\u00a0commandments of game-creation\u2013look for ways to reward the\u00a0player. You can never reward them too much.<\/p>\n<p><span style=\"text-decoration: underline\">Unclear instructions<\/span><\/p>\n<p>I had to watch new testers play my game in person before I realized\u00a0how unintuitive my animated instruction screen was. The problems are clear to me now: I have arrows representing arrow keys, but they don\u2019t really look\u00a0like keys; \u00a0I have \u201cSPACE\u201d written on a horizontal blob with the player\u2019s character sitting next to a tool, but that doesn\u2019t really\u00a0communicate \u201chit space to use your active tool\u201d like I had hoped. The instruction screen came late in my development process and after I had already\u00a0used up my available fresh-to-the-game testers. I should have opted\u00a0for simple text to explain the controls instead.<\/p>\n<p><strong>Concluding Remarks<\/strong><\/p>\n<p><span style=\"text-decoration: underline\">My final tool stack was:<\/span><\/p>\n<ul>\n<li>Clojurescript: [https:\/\/github.com\/clojure\/clojurescript]<\/li>\n<li>cljs-build: [https:\/\/github.com\/emezeske\/lein-cljsbuild]<\/li>\n<li>zynga\/jukebox: [https:\/\/github.com\/zynga\/jukebox]<\/li>\n<li>Photoshop<\/li>\n<li>Garage Band (iPad)<\/li>\n<li>Audacity<\/li>\n<li>Paper and a blue ball point pen<\/li>\n<li>Trello (to organize my thoughts): [http:\/\/www.trello.com]<\/li>\n<li>A very reasonable amount of sleep<\/li>\n<\/ul>\n<p><span style=\"text-decoration: underline\">Things I produced:<\/span><\/p>\n<ul>\n<li>My Game: <a href=\"http:\/\/50ply.com\/ld23\/\" target=\"_blank\" title=\"http:\/\/50ply.com\/ld23\/\">http:\/\/50ply.com\/ld23\/<\/a><\/li>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=YFzSotgng\\_I&amp;feature=youtu.be\" target=\"_blank\" title=\"My Timelapse\">My Timelapse<\/a><\/li>\n<li>This postmortem<\/li>\n<li>A new personal confidence that I can actually create fun games!<\/li>\n<\/ul>\n<p>Ludum Dare 23 was a fantastic experience. I\u2019m proud to say that I\u00a0succeeded in my ultimate goal of making a game that I actually\u00a0enjoy playing. Now I\u2019m continuing to learn as the very talented LD community\u00a0members evaluate my game and offer suggestions.<\/p>\n<div class=\"wp-caption alignnone\" id=\"attachment_140385\" style=\"width: 310px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/26\/little-mischief-makers-the-post-mortem\/screen-shot-2012-04-22-at-8-05-14-pm\/\" rel=\"attachment wp-att-140385\"><img alt=\"\" class=\"size-medium wp-image-140385\" height=\"227\" sizes=\"(max-width: 300px) 100vw, 300px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-22-at-8.05.14-PM-300x227.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-22-at-8.05.14-PM-300x227.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-22-at-8.05.14-PM-550x416.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/Screen-Shot-2012-04-22-at-8.05.14-PM.png 649w\" width=\"300\"\/><\/a><p class=\"wp-caption-text\">It's a truck full of keys! Really!<\/p><\/div>\n<p>\u00a0<\/p>\n<p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/2d\/\" rel=\"tag\">2D<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/ld23\/\" rel=\"tag\">ld23<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/postmortem\/\" rel=\"tag\">postmortem<\/a><\/p>","time":"April 26th, 2012 4:44 am","title":"Little Mischief Makers: The Post-Mortem","title_was_empty":false}