{"assets":[],"author_link":"author\/fullmontis\/","author_name":"fullmontis","cat":"LD #27","categories":["LD #27"],"comments":[],"epoch":1377489060,"event":"LD27","likes":14,"metadata":{"p_key":"80074","p_author":"fullmontis","p_authorkey":"0","p_urlkey":"289084","p_title":"Spark \u2013 Postmortem","p_cat":"LD #27","p_event":"LD27","p_time":"1377489060","p_likes":"14","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1377216000","event_key":"18","event_name":"LD27"},"source_url":"2013\/08\/26\/spark-postmortem\/","text":"<p>So, LD#27 is finally over. There is something peculiar about it this time:\u00a0<a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-27\/?action=preview&amp;uid=21736\" target=\"_blank\" title=\"Spark Compo Page\">Spark is \u00a0in the compo<\/a>! My first completed LD48!<\/p>\n<p>After my insuccess in April, getting this achievement really made me happy, despite the game itself being only a pale shade of what I wanted it to be. Still, no matter the things gone wrong, it was a great learning experience and I learned a lot, which is probably the greatest achievement. But let\u2019s see what were the ups and downs of these two days.<\/p>\n<p><strong>The Good<\/strong><\/p>\n<ol>\n<li><strong>LOVE2D<br\/>\n<\/strong>I\u2019ve been in love with <a href=\"https:\/\/www.love2d.org\/\" target=\"_blank\" title=\"LOVE2D\">love2d<\/a> since the first time I discovered it. Because of it, I learned Lua and how amazing of a language it is. Still, I always used it in non time constrained environements: doing a Ludum Dare with it was a breeze, mainly because I got used to the environement, but also because of the amazing semplicity of the modules. I have this idea that a framework should be as transparent as possible so that it doesn\u2019t get in the way of the developer: Love2d achieves that. I never had to stop more than five minutes in the excellent wiki to find out what I needed to do. This to me is like a liberation of a curse: passing hours on poorly documented and overly complicated APIs really kill the creative ideas one may have in a moment. My wet dream would be a love2dJIT, that would be the shit. But only time can tell.<\/li>\n<li><strong>Picking an idea I liked<br\/>\n<\/strong>I wasted somewhere around 12 hours with brainstorming and another aborted game idea before starting working on Spark. This is a huge down, meaning a quarter of the limited time I had was spent on basically nothing that would be in the final game. This is a wrong thing to do (and will never do it again for the future compos), but it helped me find an idea I really enjoyed. While Spark didn\u2019t come out as I wanted, I really enjoyed working on it and implementing it (<a href=\"http:\/\/fullmontis.tumblr.com\/post\/58915228489\/the-call\" target=\"_blank\" title=\"The Call\">The Call<\/a>, my LD26 jam entry, in comparison, felt more like a chore). I knew from the start it was an overambitious idea and I would never be able to complete it all, but my motivation was so strong I got a lot more done in two days than I would have in a project I didn\u2019t like. So those 12 hours didn\u2019t really feel like a waste but more like an investment: they saved me from working a day and an half on a project I would have hated working on.<\/li>\n<li><strong>Submitting the game<\/strong><br\/>\nI was ashamed with how little I was able to put into Spark in the time given. I implemented stuff I never used, I created graphics I didn\u2019t have the time to put in, the final product misses a lot of stuff and doesn\u2019t even remotely resemble how I wanted it to be. But still, the game is in the compo! Great fucking feeling. I was in for a quarter of an hair, but was still able to put something up and online. The last three hours were the worst: I still had to create the levels and implement a lot of stuff and started to think it wasn\u2019t worth all the sleep loss and the hard work since it hardly was the game I wanted after all. I stopped for a few minutes to think, then I realized that I was in the compo to make an amazing game but to finish a game. So I pushed through it. It was hard, but Spark finally got \u201cdone\u201d (with quotes so big you could sleep in them). Now that I have something playable, I have even more motivation to complete the game because I see so much stuff I was unable to implement that would make the game so much better. I\u2019ll start working on a post compo version soon.<\/li>\n<li><strong>Theme<br\/>\n<\/strong>This time around, the theme was actually a theme. LD26\u2019s Minimalism was hardly a theme (more of a style), which frustrated me to no end. I could hardly put something together because of that. This time around, I really liked the theme. I loved it so much I had a lot of ideas that I could be working on in the future, which I had to discard for the compo because they are way too big to fit in 48 hours. It was quite prolific. Even too much, which brings us to the negatives of these two days.<\/li>\n<li><strong>Moonscript<br\/>\n<\/strong><a href=\"http:\/\/moonscript.org\/\" target=\"_blank\" title=\"Moonscript\">Moonscript<\/a> is a language created by\u00a0<a href=\"http:\/\/www.ludumdare.com\/compo\/author\/leafo\/\" target=\"_blank\" title=\"Leafo's Compo Page\">leafo<\/a>\u00a0that compiles to Lua. It basically gives Lua a python-like style. While I know of a lot of programmers who hate forced indents with a passion, I personally feel they make the code immensely easier to read and write. No more ugly, verbose do..end cycles, just press enter+tab and you are good to go. It also forces your code to look good which is hardly a bad thing. Putting the simplicity and speed of coding of Moonscript on top of the beautiful simplicity of Love2d is like supercharging your game making potential. It literally flows under your fingers. My only pet peeve with it is that the debugging errors given but love2d refer to the .lua files because.moon files are compiled to lua. This means that I have to refer from time to time to the compiled .lua file for debugging instead of the .moon file I\u2019m working on, which kinda breaks the flow for me. But still, Moonscript+love2d is a bomb of a combination.<\/li>\n<\/ol>\n<p><strong>The Bad<\/strong><\/p>\n<ol>\n<li><strong>\u00a0Overambitious idea<br\/>\n<\/strong>In the beginning, Spark was a huge idea. I had in mind to put forking paths, complex level design, and a story. None of these got into the final game, by far. Mainly it was because of me being stupid and wasting time, but even for the best programmer it would have been a challenge to put together what I wanted in 48 hours. I remember clearly thinking \u201cI\u2019ll never do this\u201d when I started working on Spark. Buy, was I right. Still, I really liked the idea (see point 2 above) so it wasn\u2019t a complete idiotic choice: it\u2019s not like the idea will self desctruct when I submit the entry. But still, I should have probably toned it down quite a bit.<\/li>\n<li><strong>Tiles<br\/>\n<\/strong>Oh boy. Tiles. Never really used them. And it shows. I wasted around 4 hours making a tiling system that creates levels from images and carefully drawing the tileset, only to discover that I would have to hand draw every level, every angle, every border. I would never be able to do that. It took me around 20 minutes to make one room! I was so heartbroken when I had to draw blocky levels that hurt my eyes only to watch. Also, since the pitfall and the wall tiles were too similar and difficult to determinate which was which, I had to basically throw in a barf-looking pitfall tile in the last half hour to make the game playable. It hurts to watch what it could have been and how it is instead.\n<div class=\"wp-caption aligncenter\" id=\"attachment_287411\" style=\"width: 202px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/tile1.png\"><img alt=\"Spark's original tileset\" class=\"size-full wp-image-287411\" height=\"160\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/tile1.png\" width=\"192\"\/><\/a><p class=\"wp-caption-text\">Spark\u2019s original tileset<\/p><\/div>\n<div class=\"wp-caption aligncenter\" id=\"attachment_287412\" style=\"width: 202px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/tile2.png\"><img alt=\"The original pitfalls\" class=\"size-full wp-image-287412\" height=\"224\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/tile2.png\" width=\"192\"\/><\/a><p class=\"wp-caption-text\">The original pitfalls<\/p><\/div>\n<div class=\"wp-caption aligncenter\" id=\"attachment_287412\" style=\"width: 310px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen120.png\"><img alt=\"Instead you got THAT\" class=\"size-medium wp-image-287418\" height=\"215\" sizes=\"(max-width: 300px) 100vw, 300px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen120-300x215.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen120-300x215.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen120-550x394.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen120.png 799w\" width=\"300\"\/><\/a><p class=\"wp-caption-text\">Instead you got THAT<\/p><\/div>\n<div class=\"wp-caption aligncenter\" id=\"attachment_287419\" style=\"width: 310px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen215.png\"><img alt=\"The hell is this?\" class=\"size-medium wp-image-287419\" height=\"215\" sizes=\"(max-width: 300px) 100vw, 300px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen215-300x215.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen215-300x215.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen215-550x395.png 550w\" width=\"300\"\/><\/a><p class=\"wp-caption-text\">The hell is this?<\/p><\/div>\n<div class=\"wp-caption aligncenter\" id=\"attachment_287421\" style=\"width: 310px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen39.png\"><img alt=\"MY EYES! IT BURNS!\" class=\"size-medium wp-image-287421\" height=\"216\" sizes=\"(max-width: 300px) 100vw, 300px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen39-300x216.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen39-300x216.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen39-550x396.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/08\/screen39.png 798w\" width=\"300\"\/><\/a><p class=\"wp-caption-text\">MY EYES! IT BURNS!<\/p><\/div>\n<p>So\u2026 Yeah. I\u2019m not proud of how it looks. But hey, that\u2019s a mistake I\u2019ve learned from.<\/p><\/li>\n<li><strong>Horrible code structure<br\/>\n<\/strong>In my last few projects I got used to an entity component system I\u2019m developing for Lua. While at first it is pretty weird to work with, once you get the hang of it it flows easily and is very clean to mantain and use (even though there are some weird bugs that pop out once in a while). I could have used it for the game but for this ludum dare I wanted to try something from \u201cinspiration\u201d. The result is a mess of a code. I already have problems changing it because of how horrible it is. It is my fault for being lazy and breaking encapsulation too much, which in the end makes mantaining code an abomination. I should be more careful next time around. I\u2019m already thinking about rewriting the engine to make it more human (right now it looks like a deformed monster struggling to breathe).<br\/>\nThe way I implemented stuff was also weird. I had a lot of problems creating a switch that would change the level, which was quite embarassing thinking of it (but still, I have the excuse of sleep deprivation, so shut up&gt;:( ), so I created this weird solution where there is a switch that changes level from one to another, which greatly limits future implementations since it is limited to one switch per room and can only change THAT room. This really hurt level design since there was hardly anything I could do with it, and the time to implement new mechanics simply wasn\u2019t there. I want revenge and I\u2019ll probably reimplement the mechanic in the post compo version.<\/li>\n<\/ol>\n<p>So, this looks like that\u2019s it. It was a pretty stressful weekend, but Ludum dare is about that. It makes you understand how difficult actually finishing a game is, it takes away your sleep and it makes you ashamed of what you make, but it is still an amazing experience.<\/p>\n<p>Now, for the best part: actually playing the games! I\u2019m so excited. Happy voting!<\/p>\n<p><a href=\"http:\/\/fullmontis.tumblr.com\/post\/59437327512\/ludum-dare-27-spark-postmortem\" target=\"_blank\" title=\"Fullmontis' Blog\">Blog Entry -&gt;<\/a><\/p>\n<p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/love2d\/\" rel=\"tag\">love2d<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/lua\/\" rel=\"tag\">lua<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/moonscript\/\" rel=\"tag\">moonscript<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/postmortem\/\" rel=\"tag\">postmortem<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/spark\/\" rel=\"tag\">spark<\/a><\/p>","time":"August 26th, 2013 3:51 am","title":"Spark \u2013 Postmortem","title_was_empty":false}