{"author_name":"rwos","cat":"LD #24","comments":[],"epoch":1346268600,"likes":0,"metadata":{"p_key":"51615","p_author":"rwos","p_authorkey":"14690","p_urlkey":"87309","p_title":"Moore\u2019s Game \u2013 compo Postmortem","p_cat":"LD #24","p_event":"LD24","p_time":"1346268600","p_likes":"0","p_comments":"0","p_status":"UPD5","us_key":"14690","us_name":"rwos","us_username":"rwos","event_start":"1345766400","event_key":"12","event_name":"LD24"},"text":"<p>This was my first Ludum Dare and I made a game called &#8220;<a title=\"Moore's Game voting page\" href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-24\/?action=preview&amp;uid=14690\">Moore&#8217;s Game<\/a>&#8220;. It&#8217;s basically a journey through the evolution of video games &#8211; starting with Tic Tac Toe on a line-printer and ending with a ray-casting first person shooter.<\/p>\n <p>Technology-wise it&#8217;s written in JavaScript, using the 2d-context of the HTML5 canvas element.<\/p>\n <h3>What went right<\/h3>\n <p><strong>Speed<\/strong> &#8211; apart from the few times where I got stuck (more on that later), I was working pretty fast. Pong, Breakout and the raytracer for the Wolf3D-like level were done really quickly. It helped that I disregarded every coding best practice in existence. Even though faking namespaces via objects or closures is possible and common in Javascript, I didn&#8217;t do that and just put everything into the global namespace. That made for messy code (more on that later) but speedy development.<\/p>\n <p>Although I (think I) was fast, I couldn&#8217;t finish everything I had originally planned. More on that later (that&#8217;s going to be a big what-went-wrong section, oh my&#8230;).<\/p>\n <p><strong>Technology choice<\/strong> &#8211; Modern Javascript interpreters (read: browsers) are blazingly fast, given the (security-)constraints in which they have to operate. The canvas API is simple and straight-forward. And the result is playable on every operating system with a modern browser.\u00a0 What&#8217;s not to like about that? Javascript as a language has it&#8217;s share of problems, but it&#8217;s not too bad. It has really just the wrong syntax for the dynamic, lisp-like language it actually is.<\/p>\n <p><strong>The competition\u00a0<\/strong>&#8211; as I said, this was my first Ludum Dare. I had the most programming-related fun since &#8230;ever, really! <img src=\"http:\/\/ludumdare.com\/compo\/wp-includes\/images\/smilies\/simple-smile.png\" alt=\":-)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> I also didn&#8217;t expect such a cool community. I was on the IRC a little bit, during the competition, and I was stunned how friendly and civilized everyone behaved. It&#8217;s the internet, people, you are expected to endlessly insult each other!<\/p>\n <p>No, Ludum Dare is just great &#8211; it won&#8217;t be my last one!<\/p>\n <h3>What went wrong<\/h3>\n <p><strong>Scope<\/strong> &#8211; that was my biggest problem. I just planned too much features. And while implementing those I had ideas for even more and more and more&#8230; I originally wanted to blend the gameplay from one game-generation into the other (that is, playing a bit of a Mario-Bros.-like jump-and-run with Pacman, for example) &#8211; but I had just no time for that. The games itself were all simple and small &#8211; but there were eight of them.<\/p>\n <p>Which, by my current calculations, were at least seven games too many for a 48h-competition&#8230;<\/p>\n <p><strong>Code Quality<\/strong> &#8211; let&#8217;s not talk about that. This was hands-down the worst code I&#8217;ve ever written. I&#8217;ve written BASIC on my calculator that was better structured&#8230; I just didn&#8217;t have time to stop and think. So, copy-and-paste it was, mostly. And brute force. And a lot of &#8220;what&#8217;s the most stupid thing that could possibly work at least half of the time&#8221;.<\/p>\n <p><strong>Pacman<\/strong>&#8211; I still don&#8217;t know how the hell I managed to get completely stumped by writing pacman. I was on the wrong path, somehow and as a result I wasted much too much time even getting it to the sorry state it&#8217;s in now. The ghosts just move randomly, the frame-rate is ridiculously low, it&#8217;s buggy as hell. And it doesn&#8217;t even look too much like pacman. Not good.<\/p>\n <p><strong>Adventure<\/strong> &#8211; The lucas-arts inspired point-and-click adventure level was first planned to be the *cool* level of the game. The one that would pay back for all the bugs in the other levels. Well, no, that didn&#8217;t work out. I wrote half of an engine for it, but there just wasn&#8217;t enough time &#8211; and I didn&#8217;t really know how to actually write a point-and-click adventure game engine&#8230; So I started that level over &#8211; with about 4 hours left &#8211; and basically cut down all the features until it was just one big if-else tree. Not good, part 2.<\/p>\n <p><strong><\/strong><strong>Time management<\/strong> &#8211; It&#8217;s easy to lose track of just how much work is still to do when you&#8217;re working on eight different games at the same time. And losing track I did.<\/p>\n <p><strong>Knowledge<\/strong> &#8211; Before I started, I thought that I generally knew how to program all the games I had planned. Well, yes, generally. But what are good jumping dynamics for a platformer? How should I do collision testing? How do I insert scaled sprites into a ray-casted world? By which rules do the monsters move in pacman? I have no idea. Oh, and no time to find out&#8230; Not good, part 3.<\/p>\n <h3>What I&#8217;ll do different next time<\/h3>\n <p>I&#8217;m going to write one game. Like, one.<\/p>\n <p>1<\/p>\n <p>One! Eins! Uno!<\/p>\n <p><strong>One<\/strong> single, polished, working game that&#8217;s fun to play.<\/p>\n <p>Not freaking eight badly made ones&#8230;<\/p>\n <h3>Thanks everyone!<\/h3>\n <p>Ludum Dare 24 was fun! \ud83d\ude00<\/p>\n \n <p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/postmortem\/\" rel=\"tag\">postmortem<\/a><\/p>","time":"August 29th, 2012 2:30 pm","title":"Moore\u2019s Game \u2013 compo Postmortem"}