{"author_name":"randomnine","cat":"LD #19 - Discovery - 2010","comments":[{"author_name":"","time":"January 5, 2011 6:55 pm","epoch":1294271700,"text":"Sorry, that bacon thing was me.  I can&#8217;t help but read the word Beacon as Bacon!","spam":"N"},{"author_name":"randomnine","time":"January 6, 2011 12:57 am","epoch":1294293420,"text":"Haha. You&#8217;re not the only one :p","spam":"N"},{"author_name":"joekinley","time":"January 6, 2011 1:35 am","epoch":1294295700,"text":"Go Bacon","spam":"N"},{"author_name":"Bender","time":"January 8, 2011 7:53 am","epoch":1294491180,"text":"I&#8217;ve to tell you mate, I loved your game so much, I&#8217;ll definitely wait for the new version.<br \/>\n By the way, is your source code under any GPL\/BSD\/CC license ?","spam":"N"},{"author_name":"sfernald","time":"January 8, 2011 4:36 pm","epoch":1294522560,"text":"Congrats. That is an amazing accomplishment for a game you wrote in C++ and started out with no base code.","spam":"N"},{"author_name":"0graham0","time":"February 14, 2011 7:37 am","epoch":1297687020,"text":"Nice little story!","spam":"N"}],"epoch":1294266780,"likes":1,"metadata":{"p_key":"67574","p_author":"randomnine","p_authorkey":"214","p_urlkey":"103377","p_title":"Beacon Postmortem","p_cat":"LD #19 - Discovery - 2010","p_event":"LD19","p_time":"1294266780","p_likes":"1","p_comments":"6","p_status":"UPD5","us_key":"214","us_name":"randomnine","us_username":"randomnine","event_start":"1292544000","event_key":"5","event_name":"LD19"},"text":"<div>\n <p>So here&#8217;s how I wrote <del datetime=\"2011-01-06T01:47:22+00:00\">Bacon<\/del> <a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-19\/?action=rate&amp;uid=214\">Beacon<\/a>.<\/p>\n <\/div>\n <div align=\"center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/01\/05\/beacon-postmortem\/ld-blog-screenshot-2\/\" rel=\"attachment wp-att-39072\"><img src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/01\/LD-blog-screenshot1.jpg\" alt=\"\" width=\"550\" height=\"220\" class=\"size-full wp-image-39072\" \/><\/a><\/div>\n <div>\n <p><strong>What I did:<\/strong><\/p>\n <\/div>\n <div>\n <p>I started LD19 with ambition, &#8216;flu and no preparation or basecode. I wanted to do a\u00a0sprawling content-driven platformer, both to practice storytelling and to see how big\u00a0a scope I could hit within the 48 hour limit.<\/p>\n <\/div>\n <div>\n <p>My initial goal was to build a fairly linear &#8220;Metroidvania&#8221; type game where you&#8217;d explore and then get to an exit. I figured I&#8217;d come up with a narrative\u00a0using the theme within that game structure once I&#8217;d started.<\/p>\n <\/div>\n <div>\n <p>Then my internet connection was cut off forever.<\/p>\n <\/div>\n <div><span id=\"more-39023\"><\/span><\/div>\n <div><a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/01\/05\/beacon-postmortem\/ld-blog-concept-2\/\" rel=\"attachment wp-att-39073\"><img src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2011\/01\/LD-blog-concept1.jpg\" alt=\"\" width=\"550\" height=\"286\" class=\"aligncenter size-full wp-image-39073\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2011\/01\/LD-blog-concept1-300x156.jpg 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2011\/01\/LD-blog-concept1.jpg 550w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><\/div>\n <div>\n <p><strong>What went right:<\/strong><\/p>\n <\/div>\n <div>\n <p><strong>Ongoing scoping<\/strong><\/p>\n <\/div>\n <div>\n <p>About a third of the way into development, I realised I might not finish the game in\u00a0time. I started logging work done in timelog.txt to help me estimate further work.\u00a0Having a good idea how long it&#8217;d take me to tile a new zone or draw a new full screen\u00a0image for some area helped me keep the scope realistic, letting me produce a\u00a0relatively complete game &#8211; even if I missed the mark slightly. But more on that\u00a0later!<\/p>\n <\/div>\n <div>\n <p><strong>I got better at tile mapping\/level design as I went<\/strong><\/p>\n <\/div>\n <div>\n <p>I&#8217;ve never done any tile mapping or serious level design work. I rapidly picked up\u00a0experience over the weekend and I&#8217;m quite proud of some of the later areas I crafted\u00a0compared to the first few. I also got much quicker at it. If I hadn&#8217;t, I&#8217;m not sure\u00a0I&#8217;d have had time to put the ending together.<\/p>\n <\/div>\n <div>\n <p><strong>Delivering story through text<\/strong><\/p>\n <\/div>\n <div>\n <p>Just as this was my first attempt at level design, it was my first attempt at\u00a0storytelling through gameplay. I was originally considering an intro cutscene to set\u00a0up the story but decided to jump straight in and leave clues instead, communicating\u00a0the relevant information by text. Text-only content was extremely quick to implement,\u00a0and since I&#8217;ve had comments praising this aspect I conclude the text-heavy approach\u00a0helped to establish the mood very efficiently.<\/p>\n <\/div>\n <div>\n <p><strong>Low-fidelity graphics<\/strong><\/p>\n <\/div>\n <div>\n <p>Beacon&#8217;s native resolution is 400&#215;225. The main character is 24&#215;24 and its tiles are\u00a016&#215;16. The high-res structures and objects are very simple and stylised, with\u00a0straight lines, a very limited palette and banded gradients (if any). This low-effort approach to art let me create a great deal of bespoke art for scenes in the game in\u00a0just a few hours, even with my crappy art skills.<\/p>\n <\/div>\n <div>\n <p>Beacon doesn&#8217;t have any lighting, shaders, full-screen effects, particle systems or\u00a0other niceties. Skipping this stuff helped me focus on my priorities of content and\u00a0tight, simple gameplay.<\/p>\n <\/div>\n <div>\n <p><strong>What went wrong:<\/strong><\/p>\n <\/div>\n <div>\n <p><strong>No preparation<\/strong><\/p>\n <\/div>\n <div>\n <p>I started without any basecode, so my first task was writing windowing code, input,\u00a0basic texture loading, rendering and so on. It took me about 6 hours to reach the\u00a0point where I had a character moving around in a tilemap and could render text.\u00a0If I&#8217;d invested the time to prepare (within the limits of the rules) before the\u00a0competition, I&#8217;d easily have had 4-6 more hours to work on the game while I was still\u00a0well rested.<\/p>\n <\/div>\n <div>\n <p><strong>Internet failure<\/strong><\/p>\n <\/div>\n <div>\n <p>Two hours into working on the game, my Internet connection cut out.<\/p>\n <\/div>\n <div>\n <p>It took over an hour on the phone to Virgin to find out that they&#8217;d disconnected the\u00a0old house two days early for our requested house move, wouldn&#8217;t reconnect it, and\u00a0couldn&#8217;t connect the new house across the street until Monday. (Jerks.) Without internet access, I\u00a0couldn&#8217;t get tools\/libraries I needed or check reference, and I wouldn&#8217;t be able to\u00a0submit at the end.<\/p>\n <\/div>\n <div>\n <p>I almost gave up at this point.<\/p>\n <\/div>\n <div>\n <p>I resolved to keep working on the game and, on Sunday evening, packed my desktop into\u00a0the car, drove 60 miles to *my* new house &#8211; which already had internet access &#8211; then\u00a0finish the game and submit it from there. In the end, talking to Virgin cost me an\u00a0hour; packing up my PC and driving down through the snow\u00a0took two. When I needed a font\/font renderer, I couldn&#8217;t search for one, so I wrote\u00a0one; another 30 minutes or so.<\/p>\n <\/div>\n <div>\n <p><strong>No sleep<\/strong><\/p>\n <\/div>\n <div>\n <p>I worked through the night. By Sunday evening, I&#8217;d been up for over 30 hours. Staying on task\u00a0was getting tough!<\/p>\n <\/div>\n <div>\n <p>If I&#8217;d napped for an hour or two around halfway, I feel it&#8217;d have been worth it.\u00a0Instead, I got through enough coffee that I still couldn&#8217;t sleep until five or six\u00a0hours after the contest ended. That kept me awake, but I&#8217;m not sure it helped me stay focused <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 <\/div>\n <div>\n <p><strong>Slightly too ambitious<\/strong><\/p>\n <\/div>\n <div>\n <p>This ties into the &#8216;sleep&#8217; thing. All that scoping stuff above was useful, but I\u00a0didn&#8217;t factor in how I&#8217;d slow down as I got tired. In the end, I was a few hours short.\u00a0I had to cut music and also some minor bits of art polish, but fortunately I&#8217;d got all the essential stuff done.<\/p>\n <\/div>\n <div>\n <p><strong>Non-power-of-2 textures<\/strong><\/p>\n <\/div>\n <div>\n <p>I really should have known better, but I used 24&#215;24 images for a few sprites &#8211; like\u00a0the astronaut! This worked perfectly fine on my machine, but apparently the way DevIL\u00a0handles loading these images makes them blurry on some hardware.<\/p>\n <\/div>\n <div>\n <p><strong>What next?<\/strong><\/p>\n <\/div>\n <div>\n <p>I&#8217;m currently working on a revised version of Beacon, with gameplay and art polish,\u00a0music and some minor visual effects, for freeware release some time next week. I&#8217;m\u00a0also collaborating with an excellent friend on a much larger non-linear platformer\u00a0building on the Beacon codebase.<\/p>\n <\/div>\n <div>\n <p>I&#8217;m taking my first steps as a fulltime indie developer now and LD19 has given me a\u00a0few projects to warm up with. More than that &#8211; it&#8217;s made me remember why making games\u00a0is fun! I got more out of LD19 than I expected and I&#8217;ll definitely see you all in\u00a0four months. <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 <\/div>\n <div>\n <p><strong>Technology<\/strong><\/p>\n <\/div>\n <div>\n <p>Beacon was programmed in C++ in Visual C++ 2010 Express using SDL, OpenGL, DevIL and\u00a0FMod. All content was created in Photoshop CS5 trial, notepad, and sfxr.<\/p>\n <\/div>","time":"January 5th, 2011 5:33 pm","title":"Beacon Postmortem"}