{"assets":[],"author_link":"author\/morgawr\/","author_name":"Morgawr","cat":"LD #26","categories":["LD #26"],"comments":[],"epoch":1367392860,"event":"LD26","likes":6,"metadata":{"p_key":"80621","p_author":"Morgawr","p_authorkey":"0","p_urlkey":"289738","p_title":"Art Attack \u2013 Post Mortem","p_cat":"LD #26","p_event":"LD26","p_time":"1367392860","p_likes":"6","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1366934400","event_key":"16","event_name":"LD26"},"source_url":"2013\/05\/01\/art-attack-post-mortem\/","text":"<p>Alright guys, it\u2019s been two days (more or less) since I finished my <a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-26\/?action=preview&amp;uid=8711\" title=\"Art Attack LD48 Entry\">LD48 entry<\/a> (If you haven\u2019t yet, please go play it and maybe rate or leave a comment, I\u2019d really appreciate it.) Last time I participated in a Ludum Dare competition was one year ago for the 23rd LD and I had promised I would eventually write a proper post mortem for <a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-23\/?action=preview&amp;uid=8711\" title=\"The Dream Sequencer\">The Dream Sequencer<\/a>. I didn\u2019t. I was too burnt out and I had a lot of other stuff going on so I never got down to actually doing it, I kept postponing and procrastinating and it eventually slipped.<\/p>\n<p>This time I decided I would catch the chance to write a combined Post Mortem, especially considering my two games were very similar and the experiences as well, it\u2019s catching two birds with one stone.<\/p>\n<p style=\"text-align: left\"><strong>DISCLAIMER: <\/strong><span style=\"text-decoration: underline\">This will be a lengthy post, feel free to bookmark it somewhere or just burn it and never read it. I promise it will be interesting!<\/span><\/p>\n<h2 style=\"text-align: center\">The Premise<\/h2>\n<p>I enjoy adventure and story-driven games. I grew up playing Sierra and Lucasarts point and click adventures. One of the very first games I have ever played was The Secret of Monkey Island and, 20 years later, I still find that to be my favorite genre. Still today I am always shopping around and buying mostly point and click adventure games. When somebody asks me to make a game, the first thing that comes to my mind is its story and universe. \u201cWhat would I do?\u201d \u201cWhat would be a great story to narrate?\u201d The mechanics and actual gameplay come later for me. I know there\u2019s a whole class of game developers that would frown at me for saying this, well, just sue me.<\/p>\n<p>With this said, my rather short history of LD entries speaks for itself. If I had to choose a genre to adapt for a LD competition in 48 hours, only point and click comes to my mind. The other proper candidate would be an RPG of some sort but that\u2019s way out of my league, especially in such short amount of time. This is why I decided to go with this genre, I feel it can be adapted to most themes although there were a couple of themes this time that would\u2019ve made it very very hard to succeed. I\u2019m overall glad Minimalism passed over others. (I would\u2019ve still preferred \u201cAfterlife\u201d but that\u2019s my personal opinion)<\/p>\n<h2 style=\"text-align: center\">The Challenge Within a Challenge<\/h2>\n<p>I don\u2019t honestly know why I do this, it\u2019s probably some sort of masochism. 48 hours of full-on game development apparently does not satisfy me enough, I have to explore new approaches and try out new experimental stuff. Otherwise, how can this be a fun and learning process?<\/p>\n<p>Last time, for The Dream Sequencer, I had decided to use C++ with Angel Engine. Keep in mind I had never programmed in C++ extensively before, my main and favorite programming language is C. Most of you game developers know how using pure C or C++ for \u201cquick prototyping\u201d is simply bollocks. There\u2019s too much stuff you need to keep in mind, lots of bugs can be easily caused by pointers or memory issues, bad platform compatibility depending on libraries, harder time porting for Linux\/Windows\/OSX. And that\u2019s what made it fun for me, I felt like I had to prove myself somehow and that\u2019s the route I took. How it ended up? I\u2019ll get more in-depth about that later.<\/p>\n<p>This time I went for a more \u201cportable\u201d solution, I wanted everybody to play my game regardless of platform and operating system, so I went for the obvious solution: the web. There are many options for game developers targeting web platforms: Flash, Java, Unity Web, Javascript+HTML5 and a couple other less known. Let\u2019s go over them one by one so I can give a rationale on why I didn\u2019t pick them:<\/p>\n<ul>\n<li>Flash \u2013 I use Linux. Flash somewhat \u201cworks\u201d on Linux systems and I am well aware of that. Too bad I do not want to support it for many obvious reasons and I am trying not to use Flash for anything at all anymore. I don\u2019t even have it installed on my system.<\/li>\n<li>Java \u2013 Java applets are even worse than Flash, lots of security issues, vulnerabilities and overall annoying for most players. Really a bad choice.<\/li>\n<li>Unity \u2013 I read that Unity was somewhat ported to Linux, I have played and rated several LD games made with Unity with their Linux\/Mono executable. Too bad the Unity web player doesn\u2019t work (or at least I couldn\u2019t get it to work). Obviously not an option for me.<\/li>\n<li>Javascript+HTML5 \u2013 This is a really good option. It\u2019s still a bit immature and may have issues with some browsers but a lot of people are using it also on phones to make games, so why wouldn\u2019t I? Well, it certainly is the best option among the rest, but there is only one problem\u2026 <strong>I don\u2019t like Javascript<\/strong><\/li>\n<\/ul>\n<p>Given the alternatives, the obvious choice would be something that compiles and runs as Javascript+HTML5 that doesn\u2019t use Javascript code. There are dozens of languages and compilers that would allow me to do exactly that, a perfect example would be CoffeeScript. Well, why didn\u2019t I choose CoffeeScript? <a href=\"http:\/\/tvtropes.org\/pmwiki\/pmwiki.php\/Main\/ItsPopularNowItSucks\">Too mainstream<\/a>. No, not really, remember when I said I wanted a challenge? Well, I thought ClojureScript would be a more interesting and an overall more enriching experience to me, which is why I chose it. What is <a href=\"https:\/\/github.com\/clojure\/clojurescript\">ClojureScript<\/a>? Well, it\u2019s a <a href=\"http:\/\/clojure.org\/\">Clojure<\/a> (a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Lisp_%28programming_language%29\">Lisp<\/a> dialect) variant that compiles to Javascript.<\/p>\n<p>I\u2019m a big sucker for Functional Programming, ever since I played around with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Scheme_%28programming_language%29\">Scheme<\/a> back in University and then dabbled a bit with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Haskell_%28programming_language%29\">Haskell. <\/a>I have been waiting for a long time to have an occasion like this where I could actually employ a functional language for real. A few months before the competition began, I started playing around with Clojure. It was amazing, a really enlightening experience and solving some <a href=\"http:\/\/projecteuler.net\/\">Project Euler<\/a> challenges opened my mind. It was just great. I, however, also decided to keep the juicy ClojureScript parts for the competition itself, because I like hurting myself unnecessarily.<\/p>\n<h2 style=\"text-align: center\">History of Bad Luck<\/h2>\n<p>Every developer knows that there is a supernatural force out there that always tries to screw up whatever plans or project you may decide to start. In my case, however, this seemed to have multiplied tenfold when talking about Ludum Dare. Let\u2019s start from the beginning, with my troubled LD entry one year ago.<\/p>\n<p>Around one week prior the competition began, on April 2012, my motherboard fried. I was without a computer and no chance to get a replacement in time for the 48-hour competition. This was a tragedy for me, I was so hyped to participate that I couldn\u2019t just let this problem stop me. I ended up dusting off my old computer that I had been using as a home server, installed a somewhat \u201cfresh\u201d Debian distribution with <a href=\"https:\/\/en.wikipedia.org\/wiki\/LXDE\">LXDE<\/a> and I was good to go\u2026 somewhat. The poor thing was so old and decrepit that it could barely run a text editor and a web browser together. Developing with C++ on that was truly a challenge, but I eventually managed.<\/p>\n<p>Successful after my first LD, I decided to participate again in August. I usually never go on vacation or anywhere in particular, I am a very humble (and <a href=\"https:\/\/en.wikipedia.org\/wiki\/NEET\">NEET<\/a>-like) person, however my friends had managed to convince me to go out of town\u00a0with them for a weekend. We had everything ready, all paid and done\u2026 and later it turns out that the LD had been scheduled exactly on that weekend. I cried a bit inside and decided to skip it, I could always participate in the December competition, right?<\/p>\n<p>Wrong. I\u2019ve been planning to choose a university for my Master\u2019s Degree and my choice had fallen on one in a different country. That\u2019s also when I was able to find a pretty awesome deal for 3 days (plane tickets + hotel) in that very same city for very very cheap, I couldn\u2019t pass it as I might not have been able to find a better occasion to visit the university itself. Too bad the deal was only for that very same weekend on which the 25th Ludum Dare competition was scheduled.<\/p>\n<p>With one whole year past my back, we have come full circle again. Planning and scheduling are still as useless as they were one year ago because even this time I found myself completely overwhelmed with real life commitments and deadlines. The most important of all, <a href=\"https:\/\/www.facebook.com\/pages\/HavenLost\/167427419940060\" title=\"Warning: Lots of Italian :|\">my band<\/a> and I have been pretty much 24\/7 in the recording studios for every single weekend of April to rush a new EP release. I really could not spare a week-end for LD\u2026 and yet I managed. I thought \u201cscrew it\u201d and went for the 48-hour compo no matter what. I\u2019ll get more in-depth with time scheduling in the following paragraph.<\/p>\n<p><strong>Lesson Learned: <\/strong>If you really want to do it, find the time. Sometimes it\u2019s as simple as asking somebody else to cover you, some other times it\u2019s not that easy and may require a lot of sacrifices and lack of sleep. All in all, if you really want to do it, <strong>do it<\/strong>.<\/p>\n<h2 style=\"text-align: center\">General Time Scheduling<\/h2>\n<p>Too much time has passed since I developed The Dream Sequencer. I don\u2019t honestly remember how I organized my time back then but I clearly remember an overall lack of sleep, which is normal for LD, and an intense feeling of rush and purpose as the hours slowly drew closer to the deadline. I had a tremendous issue with the sequence of screens which caused a lot of memory leaks and troubles which made me lose precious hours towards the end, but all in all I managed to do everything I wanted to and I simply slept away the following week.<\/p>\n<p>This time, having to schedule my daily activities and availability around the LD competition was much, much worse. As I mentioned in the previous section, I had to carpool to and from the studios at least once every day. Starting from the early afternoon it would keep me busy until around midnight with an added commute of, more or less, 40 minutes (giving lifts to friends included). I had to do half of my development with my laptop at the studios and I had to be careful with planning if I didn\u2019t want to find myself out of the compo. I always made sure I had the right plug\/socket for my laptop charger, the right amount of paper for concept designing and my trusty wacom tablet for drawing. Drawing itself was the worst part, with only <a href=\"http:\/\/www.morgawr.eu\/p\/1365972829.jpg\" title=\"The couch is the red one. I'm not in the picture btw\">a small couch available<\/a> and no rigid surface\u2026 it was pain.<\/p>\n<p>Subdividing the daily routine is important, as I learned, when participating in these competitions. I had to distribute the load evenly between the hours, allowing myself some breaks, lunch, dinner and the aforementioned commute. Some tasks also had different priorities and deadlines. The engine development should come before the actual content creation, lest I find myself with a lot of content but no game. It is also not viable to record music and sounds in the early morning or late night (neighbors would kill me). On this related note, what is actually funny is that I couldn\u2019t really record anything at the studios either if I wanted to do it myself, the equipment over there is not mine and costs money to rent\/use so it was out of the question. With all these considerations, here was my planned schedule:<\/p>\n<h4>Saturday:<\/h4>\n<ul>\n<li>4AM \u2013 Wake up, competition starts, let\u2019s have a look at the theme<\/li>\n<li>4.30AM -&gt; 6AM \u2013 Overall brainstorming for idea fitting the theme.<\/li>\n<li>6AM -&gt; 12PM \u2013 Full head on development, researching on ClojureScript (remember? I never used it), reading short tutorials and example code, implementing base engine<\/li>\n<li>12PM \u2013 Lunch break<\/li>\n<li>2PM -&gt; Midnight \u2013 Commute to the studios, keep developing base code and have a fully working engine with everything implemented, proper interactions and everything code-related.<\/li>\n<li>Midnight \u2013 get back home and sleep<\/li>\n<\/ul>\n<h4>Sunday<\/h4>\n<ul>\n<li>8AM -&gt; 10AM \u2013 Wake up, start recording audio and musics ASAP<\/li>\n<li>10AM -&gt; 12PM \u2013 Designing basic puzzles and small content creation<\/li>\n<li>12PM \u2013 Lunch break<\/li>\n<li>2PM -&gt; Midnight \u2013 Commute to the studios, draw lots and lots of contents and puzzles.<\/li>\n<li>Midnight -&gt; 4AM \u2013 Final playtesting, eventual bug squashing and upload to LD website<\/li>\n<\/ul>\n<p>It sounded like a smooth plan, right? Well yes, it was exactly that, <strong>a plan<\/strong>.<\/p>\n<p>This is how it ended up being:<\/p>\n<h4>Saturday<\/h4>\n<ul>\n<li>3AM \u2013 Wake up early because I couldn\u2019t sleep all night, this is usually when I go to sleep so my body isn\u2019t used to it<\/li>\n<li>4AM -&gt; 6AM \u2013 Rage on irc about theme (a staple of LD), try to find a proper story<\/li>\n<li>6AM -&gt; 2PM \u2013 Read a lot of posts, articles, interesting news and interesting stuff about ClojureScript. Try to implement other people\u2019s code and get a base engine working. Also forget lunch.<\/li>\n<li>2PM -&gt; 7PM \u2013 Continue developing at the studios, struggle with silly Internet connection that keeps dropping<\/li>\n<li>8PM -&gt; 2AM \u2013 Get home earlier because change in schedule and keep working on engine getting around half of the required features working.<\/li>\n<\/ul>\n<h4>Sunday<\/h4>\n<ul>\n<li>7AM -&gt; 9AM \u2013 Wake up and try to implement missing features from engine<\/li>\n<li>9AM -&gt; 9.30AM \u2013 Realize it\u2019s getting late and I absolutely need to record sounds, ignore engine and start setting up recording equipment. Find out that there was a bug with the recording software and my guitar cable is faulty so I have to look for a proper cable and solve software issue. By this time I was frantic.<\/li>\n<li>9.30AM -&gt; 10AM \u2013 Record 4 improvised tracks, abandon all hope to record extra sounds for the game.<\/li>\n<li>10AM -&gt; 2PM \u2013 Implement sound system in game, test simple features and get a semi-working codebase<\/li>\n<li>2PM -&gt; 11PM \u2013 Draw a lot of pictures and silly things sitting uncomfortably on a couch.<\/li>\n<li>11PM -&gt; 11.30PM \u2013 Try to get back home but realize a friend forgot stuff at the studio, give him a lift back<\/li>\n<li>12AM -&gt; 3AM \u2013 Frantically try to finish the bare amount of content I have, bugs\u2026 bugs everywhere.<\/li>\n<li>3AM -&gt; 3.45AM \u2013 Implement ending scene, put everything together. No playtesting, final destination, upload it to the website<\/li>\n<li>3.45 AM -&gt; 4AM \u2013 Wait for last 15 minutes of competition to end, staring bleakly at the screen.<\/li>\n<\/ul>\n<p>\u201cBut\u2026 Morg, we don\u2019t really care about your private life.\u201d Well, you should. No, not really, however there is a great lesson to be learned here. Look at the differences between the planned and the actual succession of events. I literally finished writing the last line of the ending scene in my game exactly when the LD countdown hit \u201c15 Minutes\u201d. I had poor planning, no real expectations for the tasks I was required to do, and to top it all, a lot of things went wrong. I was overconfident on the first day, I was too frantic on the second one. There is a huge difference there. I\u2019m pretty sure most LD participants can identify with such behavior, it\u2019s very common. The most interesting thing was how I had to \u201cwaste\u201d 40 minutes helping a friend get his things back from the studios. I don\u2019t really blame him but that is the perfect example of something that went wrong and that I should\u2019ve taken in consideration for my planning.<\/p>\n<p><strong>Lesson Learned: <\/strong>Plan carefully, don\u2019t overdo yourself. Always leave yourself some space for a few breaks or unforeseen hindrances and accidents. If all goes well then you\u2019ll be more rested and thinking more clearly. If something goes wrong then you\u2019ll have enough time to fix it.<\/p>\n<h2 style=\"text-align: center\">The Engine<\/h2>\n<p>Last time I had used <a href=\"http:\/\/angel2d.com\/\">Angel Engine,<\/a> a C++ engine for the quick prototyping of simple games. It\u2019s really powerful and is the codebase on which I based the whole Dream Sequencer game. This time, however, I coded everything from scratch in ClojureScript. I had no real engine to work with and I didn\u2019t really need it. The purpose of an engine in itself is to abstract away unnecessary boilerplate code for the programmer, to give him more time on actual content creation and less on menial tasks.<\/p>\n<p>Using ClojureScript, it is actually easier and faster to just write your own functions and filters and maps and lambdas and whatnot, rather than trying to integrate someone else\u2019s code. This is obviously true if you\u2019re working on a deadline like this, proper programming practices still exist in the functional world and Clojure is no silver bullet exempt from them.<\/p>\n<p>I am overall satisfied of how the engine turned out to be. There were a lot of bugs and a lot of issues due to proper planning (see earlier paragraph) but in the end it was solid. I have to thank functional programming for that, keeping functions without side-effects, using proper state keeping instead of throwing everything into globals (exceptions taken for some parts). <em><\/em>I had a lot of fun passing lambdas and higher-order functions around to schedule events, combinations of items and elements in the game and all that stuff. It was really refreshing and an experience that I would suggest to every serious developer at least once in their life.<\/p>\n<p>On the opposite, though, there were a lot of problems too. I honestly had no idea what I was doing half the time, I had to ask for help on irc, use Google, learn how Javascript and the Dom model work, how browsers act, etc etc. I am surprised I was able to get this much done in just 48 hours, by the end of the first day I was pretty sure I wouldn\u2019t be able to finish in time and I was already considering getting into the Jam instead.<\/p>\n<p>The most troubling part of my engine development was actually realizing, on the second day, that I didn\u2019t develop a mechanic I really needed for most of my puzzles, which is opening a dialog and obtaining a new item when combining an item in your inventory with an item on the scene (aka an actor, like giving the brooch to the fisherman, if you played the game). This is a very core mechanic of point and click games, without this it\u2019s not really possible to advance, else your puzzles will be bland and uninspiring. I ended up solving this issue in around 30 minutes hacking together a few functions in charge to check when a new item was acquired and opening a dialog depending on the item and its \u201con-pickup\u201d description. This is exactly the reason why the fisherman disappears <strong>before<\/strong> you receive the text on screen. It\u2019s ugly but I had no time to implement it properly.<\/p>\n<p>Another funny realization was finding out in game that you could just get rid of one guard in front of the throne room to be able to click on a few pixels of the door behind them and get into the throne room itself without solving half of the puzzles. Obviously you\u2019d still not be able to finish the game but that\u2019s another matter. This sequence break is the consequence of some decisions I took early in development where I decided not to go with actual \u201cgame events\u201d and instead assume players wouldn\u2019t be able to sequence break and speed their way through the game. This was developed with cheap tricks like putting items over exits (like the waterfall) to prevent the player from getting through. In retrospective, <strong>it was a bad idea<\/strong>, but a least it worked and was quite simple to realize.<\/p>\n<p><strong>Lesson Learned: <\/strong>If you can, take your time to learn a proper engine and avoid making your own, it will save a lot of time later on when actually developing your game. However, keep in mind that <strong>cutting corners is a viable technique<\/strong> and if you\u2019re going for quick development\/release (like in LD48), your player will never know how many cheap tricks you pulled out of your magic wizard hat to make the game work.<\/p>\n<h2 style=\"text-align: center\">The Story<\/h2>\n<p>For those of you who played my previous entry, you know I tend to do stuff like this. I enjoy starting from A, getting the player through B and then suddenly jump to D, skipping C altogether. I am well aware this is an approach that a lot of people don\u2019t really enjoy. I fell for that trap with The Dream Sequencer, turned the story 180 degrees in the opposite direction halfway through and then unloaded a massive mindfuck bomb at the very end. This time I had promised myself I\u2019d be more careful with that sort of things\u2026 and I somewhat failed. I don\u2019t really know, the ending is very disconnected from the rest of the game but that was on purpose, however it does look like it was very rushed and poorly planned.<\/p>\n<p>Maybe it\u2019s true, I didn\u2019t plan properly. Maybe it\u2019s not true and that was the intention, it doesn\u2019t really matter. What matters is <strong>how the players perceive it<\/strong>. At the end of the day, that is what really counts and you can try hiding behind words as much as you like, facts are still more important.<\/p>\n<p>\u00a0<\/p>\n<p><strong>WARNING! Spoilers Ahead!<\/strong><\/p>\n<p><strong> <\/strong>At the beginning, during early brainstorming phase I had imagined a totally different story. In the very same universe and with the same vibes, just a different purpose. I imagined the main character to be some sort of magical spirit of \u201cArt\u201d, trapped into his prison by an evil sorcerer who turned the whole world into a minimalistic mess. You\u2019d eventually wake up one day and have to find a way to break the evil sorcerer\u2019s curse and bring color and details back to the minimalistic world.<\/p>\n<p>All in all, it made sense in my head, however it lacked the mood I was looking for. It felt really generic and bland, a staple of point and click games. That\u2019s when I decided to add the twisted ending, taking a bit of inspiration (subconsciously) from <a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Whispered_World\">The Whispered World<\/a>. First, I considered making the main character actually a patient of a mental asylum, suffering from schizophrenia (or some other illness of the mind) and eventually coming to terms with his condition, realizing he was living in a fictional world and breaking out of his psyched chains.<\/p>\n<p>The concept itself would have been great, I\u2019m sure. I\u2019m actually noting this down for a possible future game, no kidding. The problem is that there was no way I\u2019d be able to deliver an appropriate narration and closure for such a theme in just 48 hours. That\u2019s where I changed direction and went with a more generic (and rather unimaginative, if I have to admit) main character trying to escape from this weird world and get back home, to a place he doesn\u2019t even know about. Then I properly transformed the ending into a messy-but-somewhat-convincing grand finale that hardly tied to the rest of the story and yet delivered the proper punch to the reader.<\/p>\n<p><strong>Lesson Learned: <\/strong>Aim high, but not too much. If you\u2019re a developer focusing on story, don\u2019t try to pull plot twists everywhere, especially at the end. It\u2019s way too simple to lump together an innovative and experimental writer with an actual inept and bad one. <strong>The players decide<\/strong> how good your story is, not you.<\/p>\n<h2 style=\"text-align: center\">The Puzzles<\/h2>\n<p>This is an area that really improved with the transition between last year\u2019s LD and this year\u2019s. The Dream Sequencer\u2019s puzzles were hardly there, there was no challenge, no real purpose. Just a mass of jumbled crap, one-way transitioning areas and small inventory. Prior to this I had never actually wondered about the effective complexity of designing interesting and yet challenging puzzles in adventure games. Make them too hard or too illogical and the players will get frustrated. Make them too simple and you might as well not put them at all.<\/p>\n<p>There are several things that I managed to improve and I feel this part was actually somewhat successful (by the 48 hours limit, obviously), from the humbleness of my green game design experience. Here\u2019s a quick list and explanation:<\/p>\n<h4>Give the player the chance to backtrace<\/h4>\n<p>Nobody wants to be confined in a corridor. For The Dream Sequencer I was limited by my own knowledge and engine, I made it only possible to go forward, advancing each room and solving puzzles individually. This time, by giving the player the chance to go back on his steps and decide to tackle multiple puzzles at the same time, I managed to make the game broader and more open. A more open world means better immersion and less constraints on what players do.<\/p>\n<h4>Add somebody to talk with<\/h4>\n<p>I didn\u2019t have enough time to add proper dialogues and character interaction in either game, but I realized The Dream Sequencer was lacking a lot of classical point and click spirit. It was lacking NPCs. You really need to have a window to the world you\u2019re playing in, you need to immerse in that and the best way to do that is to have somebody to connect with. By adding the fisherman, the princess, the two guards, some interactive notes and all of that, I made the world more real and more interactive. It doesn\u2019t matter if they don\u2019t participate in puzzles, they still populate an otherwise empty universe.<\/p>\n<h4>Useless stuff is not useless<\/h4>\n<p>On a related note, The Dream Sequencer mostly had only useful items. It was pretty obvious a good 90% of the game\u2019s content was pickup-able from the get-go and players knew exactly what to do. This time I decided to go with more background details, add a window here, a bed there, some useless and uninteresting stuff. At least people now had to actually think (somewhat, in the 48 hours limit obviously) to solve puzzles, they had to actively examine items and further learn about the game\u2019s universe without actively playing it all.<\/p>\n<h4>Make logical puzzles<\/h4>\n<p>This is something I have failed to properly achieve in both The Dream Sequencer and Art Attack. I acknowledge that, I had poor planning and didn\u2019t take enough time to properly formalize the games themselves. Cracker with parrot isn\u2019t a good puzzle, mushroom with water isn\u2019t either. A good puzzle integrates well with the story and makes sense. All puzzles should be logical, straightforward and intuitive. This, however, doesn\u2019t mean they should be easy. Just a bit out of reach for the player, to give him enough room to think it through.<\/p>\n<p>\u00a0<\/p>\n<h2 style=\"text-align: center\">The Art &amp; Style<\/h2>\n<p>Fitting the art and the style to a LD theme is always a challenging task, especially with some less-inspiring themes. This year, with Minimalism, I have seen a big amount of games with pixelated and \u201cminimalistic\u201d graphics. I don\u2019t really agree with their interpretation of the theme as I mostly consider Minimalism to be different from \u201cminimalistic\u201d, however this is all down to personal interpretation and all is good. What I have also noticed is that a lot of people implemented and emulated <a href=\"https:\/\/en.wikipedia.org\/wiki\/Piet_Mondrian\">Mondrian<\/a>\u2018s style. Mostly because it\u2019s one of the first examples in the Wikipedia page for Minimalism and he\u2019s got a very unique and eye-catching style.<\/p>\n<p>I fell into the latter category of developers, adding my own touch to the artistic current, using also other colors like green\u2026 pretty much whatever seemed to look good at the moment. I decided to go for a very \u201cunique\u201d and stylized art style, this doesn\u2019t mean it was a good decision, though. It certainly helped me develop a good amount of content in little time, and that is a really important thing to consider in a 48-hour competition. The downside is that the idea felt much better in my head than it was on screen.<\/p>\n<p>Honestly, from some comments I received in response, it seems like people enjoyed the art, somewhat. I don\u2019t fully understand it, I created it and I think it\u2019s not that good but I\u2019m glad others are actually liking it. Either that, or they just feel pity for my so-called \u201cart skills\u201d. Time (and voting) will tell.<\/p>\n<p>Related to the art, the same rules as the story apply. No matter how intended it was, if people perceive it as bad then they will most likely think you\u2019re a bad artist and consider it a silly attempt at spriting, rather than an intended innovative art style. I\u2019m not really trying to justify myself here, I am not the best artist in the world. Far from it. However I know I could\u2019ve done a much better job had I given more thoughts to the art department. I wouldn\u2019t have been able to finish in time, however.<\/p>\n<p><strong>Lesson Learned: <\/strong>Even if it\u2019s on purpose and you want to make a game so bad it\u2019s actually good\u2026 well, people will still think you\u2019re a bad artist. Always put effort in the art department as it\u2019s what most people notice first, even before playing the game itself. Although, always factor the time it takes you to create good assets and come down to compromises to deliver the promised product in time. That is the #1 priority.<\/p>\n<h2 style=\"text-align: center\">The Music and Sound<\/h2>\n<p>I love music. If that wasn\u2019t clear enough from my previous mention of recording studios and all that jazz. I always try to achieve something original in my soundtrack for the games. I have seen way too many LD developers use <a href=\"http:\/\/www.drpetter.se\/project_sfxr.html\">sfxr<\/a> for sound effects to actually consider it myself, regardless of the fact that it\u2019s an amazing tool. As a musician I prefer recording my own tracks even though I\u2019m probably not the best audio technician in the world (far from it).<\/p>\n<p>The sound recording process for both The Dream Sequencer and Art Attack was fairly similar. Just get my guitar, plug it into the computer and record the track with some effects form my pedal. Loop it as needed and eventually call it a day. There were, however, a few differences between the two processes, mostly related to the actual hardware.<\/p>\n<p>For the Dream Sequencer, as I mentioned earlier, I had a very old piece of crap computer to use for the development. Getting <a href=\"http:\/\/audacity.sourceforge.net\/\">Audacity<\/a> to work with that was simply pain. It would crash every time I clicked on the record button, it would create useless static noise, high latency, it couldn\u2019t keep up with more than one track\u2026 I am actually surprised I managed to record what I did.<\/p>\n<p>For Art Attack, it was much easier. Having at my disposal both my new laptop and my actual desktop made it much more comfortable to work with. After solving some cabling issues and understanding how to get real-time monitoring on <a href=\"http:\/\/ardour.org\/\">Ardour<\/a> (it was surprisingly easy, it just took me too long to explore all the menus), I was good to go. I quickly improvised four different tracks which turned out not so bad. I am actually very fond of the ending song, sporting a nicely improvised solo.<\/p>\n<p>Unfortunately I didn\u2019t have enough time to record additional sound effects or voice acting, time was running low and I was already out of my daily schedule. I also had to rush any post-processing and added mastering\/mixing to each track which would\u2019ve made them way better.<\/p>\n<p><strong>Lesson Learned:<\/strong> Make sure your hardware actually works prior the competition, you don\u2019t want hidden surprises half-way through the weekend. Use any kind of content creator (sfxr is fine too) to ease your process but always try to be original, it does pay off in the end.<\/p>\n<h2 style=\"text-align: center\">Bugs and Issues<\/h2>\n<p>Bugs\u2026 the bane of any developer. Who doesn\u2019t hate them? From my personal experience, bugs can literally kill your development and productivity and make you drop out of the competition straight away. I risked failing everything both times because of silly bugs that kept me busy with petty maintenance tasks instead of letting me focus on actual polishing and content creation.<\/p>\n<p>With The Dream Sequencer, I realized near the end that under some very specific circumstances my game would crash seemingly random. Some pointer allocation and memory leak was making the whole application fail brutally. As I mentioned earlier, using C++ for quick prototyping of a game isn\u2019t the smartest choice in the world, and here is why. If I kept adding dialogues screens I would slowly start losing memory and dropping frames and eventually the game would crash. I realized a few hours before submitting my entry that the game had started failing to load some lua scripts, seemingly for no reason. Turns out later that an apparently innocuous assert() was failing silently and the whole thing would go down. What\u2019s funny is that it started doing that only later during development, until then it had worked fine.<\/p>\n<p>As for Art Attack, using Clojure has saved me quite a lot of pain. Thing just worked and there were very few issues at first. Later on things got a bit worse when I introduced proper asset loading and migrated from localhost to a real website. The added latency would occasionally freeze the loading process and up to this day I haven\u2019t been able to fully solve the issue yet. What is ridiculous is that it would behave in a totally different way on Chrome or Firefox (haven\u2019t had the heart to test it on other browsers). I know browsers and HTML5 can behave very differently but there was apparently no reason why the loading of a few images and sounds would freeze the whole application on one browser but not on the other.<\/p>\n<p>A pretty big downside of ClojureScript was proper error reporting. Having to compile your code to Javascript means you get to lose the ability to see which function is actually failing in the game because the names are all mangled and you have a much harder time debugging stuff. All I could do was add a lot of console.log() and js.alert() functions everywhere until stuff started working again.<\/p>\n<p>One thing that hit me both on my previous and my current game is that after the games end, they both crash. It\u2019s something that I found very hilarious because no matter what language and technology you use, old friends (and enemies) still come back to haunt you. Still to this day I decided to just let it go and ignore those bugs, I don\u2019t really care if the game crashes upon completion, I\u2019m still happy I was able to get it that far. After all it\u2019s just a 48-hour competition, right? Right? (I know it shouldn\u2019t be acceptable but pretend it is)<\/p>\n<p><strong>Lesson Learned: <\/strong>Bugs are everywhere, a single bug can really screw you up. Always be careful when designing and debugging your game, you don\u2019t really want old bugs to show up at the end of the development process. Trust me. However, keep in mind that sometimes you need to coexist with less harmful bugs and just deliver your game. That\u2019s what counts the most.<\/p>\n<h2 style=\"text-align: center\">Words of Closing<\/h2>\n<p>Well, this has been a fairly lengthy post, as I had promised. I tried to give some insight in the development process for both my previous and my current LD entry. Who knows, maybe somebody will find this interesting or even useful. I\u2019m not a very experienced\u00a0 game developer but I enjoy sharing my experiences with the community, just remember to take everything I say with a grain of salt.<\/p>\n<p>One thing that should always be important for every LD participant is to <strong>enjoy it and have fun<\/strong>. There really shouldn\u2019t be any other reason to participate, you don\u2019t win anything, you don\u2019t lose anything. It\u2019s just for fun and because you want to create new games and put yourself to the challenge. Always keep that in mind.<\/p>\n<p>I\u2019m really looking forward to playing a lot of good LD games, there have been a lot of submissions this time and the ones I have already played have been great.<\/p>\n<p>Feel free to comment below and share your experiences, I\u2019d really love to hear from other developers about their own LD submissions.<\/p>","time":"May 1st, 2013 7:21 am","title":"Art Attack \u2013 Post Mortem","title_was_empty":false}