{"author_name":"pansapiens","cat":"LD #29","comments":[],"epoch":1400492280,"likes":0,"metadata":{"p_key":"29806","p_author":"pansapiens","p_authorkey":"198","p_urlkey":"65272","p_title":"Deep Dome postmortem","p_cat":"LD #29","p_event":"LD29","p_time":"1400492280","p_likes":"0","p_comments":"0","p_status":"UPD5","us_key":"198","us_name":"pansapiens","us_username":"pansapiens","event_start":"1398384000","event_key":"22","event_name":"LD29"},"text":"<p>Early in the jam I had a bunch of different ideas. This is pretty normal. I liked the theme, so much so that it almost gave me too many options for achievable small games I would have enjoyed making. In the end I went for my \u2018fallback idea\u2019 &#8211; something I\u2019d wanted to try if I could tweak it to fit the theme: a Descent-like game with visuals similar to Zombie Gunship.<\/p>\n <p><strong>What I wanted to achieve was:<\/strong><br \/>\n 1) Set up 6DOF ship controls that felt good. Not necessarily identical to the original Descent, but along those lines.<br \/>\n 2) Recreate visuals similar to Zombie Gunship (essentially inverted greyscale, with object highlighting)<br \/>\n 3) Incorporate this into a small prototype game, as a sandbox for something bigger.<\/p>\n <div id=\"attachment_363548\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/original.png\"><img class=\"wp-image-363548 size-large\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/original-550x309.png\" alt=\"original\" width=\"550\" height=\"309\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/original-300x168.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/original-550x309.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/original.png 1280w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><p class=\"wp-caption-text\">All image effects\u00a0applied<\/p><\/div>\n <p>I&#8217;m happy since I feel like I largely met goals (1) and (2), with some detours, while the gameplay component of (3) isn&#8217;t nearly refined enough.<\/p>\n <p><span id=\"more-363544\"><\/span><\/p>\n <p>For (1), I created a ship controller based on applying appropriate impulse forces each frame to a Unity rigidbody. Compared with a kinematic (non-Newtonian) object where you just move the position of the transform directly, using forces had the advantage of having proper rebound physics for collisions with terrain, obstacles and enemies. The key parameter to tweak here was \u201cDrag\u201d and \u201cAngular Drag\u201d on the rigidbodies, so that when you stop pressing a direction the ship glides to a halt as if it\u2019s in a viscous liquid or dense atmosphere. I think I managed to get the feel of the controls working reasonably here, but they aren&#8217;t yet perfect. Also, as noted by a one commenter, colliding and rebounding with the rings can be annoying. Ignoring these collision will be something to experiment with in play testing to see if it reduces unnecessary frustration without spoiling the challenge.<\/p>\n <p>For (2), I started with standard Unity Pro Image Effects. I quickly discovered there was no &#8220;invert colours&#8221; effect in the standard set. While this should be one of the simplest effects to make, I\u2019m no shader jockey, so rather than going down the rabbit hole of creating this shader, I decided I\u2019ve have to just go for visuals that were similar but not the same using what I had on hand. After a whole lot of playing around, I found a combination of Screen Space Ambient Obscurance (similar to SSA Occulsion) interacting with grey fog, plus Contrast Enhance and some noise gave an interesting grainy greyscale effect. This appears to be exploiting some artefacts many games would try to avoid &#8211; for instance, the Ambient Obscurance modifies the fog so that distant objects can all be seen, but still become coloured by the fog. By adding a local point light to the ship, and some nice splashes of colour to the terrain, the result was a grey noisy world with local \u201crainbows\u201d on the terrain. I also added some Sun Shafts to enhance the \u2018dusty\u2019 feel of the environment.<\/p>\n <div id=\"attachment_363549\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-fog.png\"><img class=\"wp-image-363549 size-large\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-fog-550x309.png\" alt=\"Deep Dome - no fog\" width=\"550\" height=\"309\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-fog-300x168.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-fog-550x309.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-fog.png 1280w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><p class=\"wp-caption-text\">Example of SSAO+fog interaction: Fog turned off<\/p><\/div>\n <div id=\"attachment_363550\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-ssao.png\"><img class=\"wp-image-363550 size-large\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-ssao-550x309.png\" alt=\"Deep Dome, no SSAO\" width=\"550\" height=\"309\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-ssao-300x168.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-ssao-550x309.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-ssao.png 1280w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><p class=\"wp-caption-text\">Example of SSAO+fog interaction: SSAO turned off<\/p><\/div>\n <p>During initial play testing trying to shoot stuff and navigate rings, it became apparent that the objects of interest were not visible enough in the grey grainy world. I needed a way to highlight them. I made a second camera higher in the stack and added the rings and enemies to a Unity layer that only that camera could see. The \u2018Right Way(tm)\u2019 to do this is probably using a \u201creplacement shader\u201d on the camera, but instead I made a cyan-tinted transparent RenderTexture showing the output of the second camera rendered to a billboard and positioned it in front of the main camera. Even though this second camera was set to Depth Only, the alpha transparency channel didn&#8217;t work as I expected, so the main camera beneath it couldn&#8217;t initially be seen. I fixed this by calling <code>GL.Clear(true, true, Color.clear)<\/code> in <code>OnPreRender()<\/code> &#8211; not really sure why setting the initial buffer to transparent pixels was required, but it worked. This camera setup has the cool side effect of enemies and rings being visible through the terrain (which is invisible to this second camera). Since the texture and it\u2019s billboard are square, it doesn\u2019t cover the whole screen &#8211; this isn\u2019t actually what I wanted, but it has the interesting effect of keeping enemies and rings greyscale when they are in peripheral vision. It looks better with a vignette filter applied to it, but I didn\u2019t remember to add that until after the compo.<\/p>\n <div id=\"attachment_363551\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-overlay-camera.png\"><img class=\"wp-image-363551 size-large\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-overlay-camera-550x309.png\" alt=\"Deep Dome - no overlay camera\" width=\"550\" height=\"309\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-overlay-camera-300x168.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-overlay-camera-550x309.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2014\/05\/no-overlay-camera.png 1280w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><p class=\"wp-caption-text\">Here&#8217;s what it looks like without the second overlay camera highlighting rings and enemies &#8230; compared to the original above that Mech enemy just right of the nearest ring is almost impossible to spot<\/p><\/div>\n <p>Goal (3) is really gameplay, and I\u2019ll be first to admit it\u2019s a little uninspired and a bit \u201cmeh\u201d. My initial goal was really to just a \u201cshoot stuff\u201d game, but having done various styles of space shooter before, I knew there was a lot of work required both on the AI, wave design and scoring side of this to make it interesting. After spending time on (1) and (2), and making terrain, textures and enemy models, I felt like I didn\u2019t have time to make the original gameplay goal fun or engaging. Ideas of a 3 stage, race, then shoot, then race+shoot structure were quickly discarded as too large in scope. I instead decided that a quick 3 lap time trial where people could compare scores would be a better \u2018minimum viable product\u2019 for a 48 hour game. I left the enemies in as an extra challenge and for some flavour, tuning the behaviour a little to try and suit the new gameplay, however as others have noted, it seems a little confused as to whether it wants to be a racing game or a shooting game. Actually, I think there are examples where both can work in some form (Wipeout, Death Race, the run for the exit in Descent, or even Mario Kart) but the enemy AI isn\u2019t good enough in &#8220;Deep Dome&#8221; to make it work.<\/p>\n <p>Instead of going down the rabbit hole of improving the enemy AI, I chose to stay up late putting together a simple background track in <a href=\"http:\/\/www.singlecellsoftware.com\/caustic\">Caustic<\/a>. I hadn\u2019t used this software much, especially version 2, but it\u2019s fairly intuitive if you\u2019ve used and tracker &amp; soft synth before so I was able to come up with a very simple techno track with a bit of an EBM \/ cyberpunk feel. Not amazing\u00a0music, but I think it works to set the tone. As a result for spending time on music, the enemy AI remained quite brain dead (face and follow), but it was enough to cause the player a nuisance (sometimes too much of a nuisance) while navigating the track. I also spent far too much time trying to make random procedural terrain with Terrain Composer &#8211; powerful software with a horrible UI that I can never remember how to use properly.<\/p>\n <p>This is the first time I\u2019ve ever made and animated skinned mesh character. Common sense says I shouldn\u2019t have even tried this during a 48 hour game jam if I&#8217;d never successfully done it before, but after many years of tutorials and attempting to use Blender, something just clicked. I suppose this is a result of perseverance, along with improvements to the Blender UI and documentation. The &#8220;Mech&#8221; walking animation is really bad, and uses the old legacy Unity animation system rather that Mechanim, but it\u2019s still a significant personal milestone.<\/p>\n <p>I need to put more time into learning how the nuts\u2019n\u2019bolts of how Unity image effects, and shaders in general, work. It\u2019s a testament to Unity\u2019s success in &#8220;democratising game development&#8221; that someone like myself who is not a hardcore graphics programmer can throw something like this together in 48 hours &#8211; however you can always do more by learning more, and I need to learn more. Maybe some naivety is an advantage, since you try crazy things, but I can\u2019t imagine what I would have been able to come up with if I\u2019d understood more of the details.<\/p>\n <p>I&#8217;ve done a bunch of game jams now, some have worked out okay and some didn&#8217;t. I think next game jam I need to have a timer every 3 or 6 hours, where I must stop and prioritise what is important for the &#8220;minimum viable product&#8221; game. Throw out what&#8217;s not essential for gameplay and work on the most critical task or feature first. I generally try to do this anyway, but a more structured method would prevent me losing track of time while engrossed in implementing features that aren&#8217;t actually very important (e.g. terrain details). For this game, I did maintain a list of features and assets, but failed to effectively triage them. Also, the &#8216;improve gameplay&#8217; task wasn&#8217;t given enough priority, partially since it&#8217;s a difficult thing to break down into micro-tasks &#8211; I&#8217;ll have to investigate techniques for doing this and work on it.<\/p>\n <p><strong><em>General responses to comments on the entry:<\/em><\/strong><\/p>\n <p>First &#8211; thanks for checking out my game and commenting ! On the whole we agree about the gameplay deficiencies &#8211; shooting or racing but not both would probably have worked best.<\/p>\n <p>Yes, the system requirements are a little high, and it&#8217;s probably not very efficient. I recently upgraded my graphics card after many years with a Geforce7, so I didn&#8217;t notice how poorly it ran on &#8220;lower spec&#8221; machines until some more testing after submissions closed. It will run at acceptable frame rates on OUYA at 640&#215;360 though !<\/p>\n <p>Sorry if the controls seemed a bit much (I&#8217;m looking at you <a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-29\/?action=preview&amp;uid=12805\">orangepascal<\/a> <img src=\"http:\/\/ludumdare.com\/compo\/wp-includes\/images\/smilies\/simple-smile.png\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> ). I tried to keep the controls as FPS-like as possible, since this is what many people are used to. Of course, if you don&#8217;t play those types of games, the controls could be a little unfamiliar and overwhelming. The barrel roll was just for fun and could be ignored. I also left out strafe up\/down for simplicity, but in a bigger game the option would be there to use it.<\/p>\n <p>Maybe this will be the foundation of a bigger better game in the future, but for now I&#8217;ve got several <a href=\"http:\/\/omgwtfgames.com\/games\/def\">other projects<\/a> that have to be pushed out the door first.<\/p>\n \n <p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/postmortem\/\" rel=\"tag\">postmortem<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/unity\/\" rel=\"tag\">unity<\/a><\/p>","time":"May 19th, 2014 4:38 am","title":"Deep Dome postmortem"}