{"assets":[],"author_link":"author\/shadow\/","author_name":"MrTwister","cat":"LD #23","categories":["LD #23"],"comments":[],"epoch":1335306360,"event":"LD23","likes":7,"metadata":{"p_key":"77803","p_author":"MrTwister","p_authorkey":"0","p_urlkey":"286653","p_title":"\u201cDrop of Life\u201d Post-Mortem \u2026 Or a journal of sorts \u2026 kinda.","p_cat":"LD #23","p_event":"LD23","p_time":"1335306360","p_likes":"7","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1334880000","event_key":"10","event_name":"LD23"},"source_url":"2012\/04\/24\/drop-of-life-post-mortem-or-a-journal-of-sorts-kinda\/","text":"<p><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/24\/drop-of-life-post-mortem-or-a-journal-of-sorts-kinda\/title-81\/\" rel=\"attachment wp-att-139665\"><img alt=\"Drop of Life TItle\" class=\"aligncenter size-medium wp-image-139665\" height=\"143\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/title26-300x143.png\" width=\"300\"\/><\/a><\/p>\n<p>If you haven\u2019t played our game yet I <a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-23\/?action=preview&amp;uid=4250\">strongly encourage you to do so<\/a>. We are hungry for feedback!<\/p>\n<p>Well, ok, is time to do this; post-mortem time!!<\/p>\n<p><span id=\"more-139573\"><\/span><\/p>\n<p><span style=\"color: #ff0000\"><strong>Enter the team<\/strong><\/span><\/p>\n<div class=\"wp-caption alignleft\" id=\"attachment_139666\" style=\"width: 106px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/24\/drop-of-life-post-mortem-or-a-journal-of-sorts-kinda\/xd\/\" rel=\"attachment wp-att-139666\"><img alt=\"Shadow's profile picture\" class=\"size-full wp-image-139666\" height=\"96\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/xd.jpg\" width=\"96\"\/><\/a>\u00a0\u00a0<p class=\"wp-caption-text\">I call this portrait \"Smiling Shadow\"<\/p><\/div>\n<p>\u00a0<\/p>\n<p>I\u2019ve personally been around since\u00a0<a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-20\/?action=rate&amp;uid=4250\">LD20<\/a>. I participated for the first time with two friends from University (when jam entries were not rated) and\u00a0<a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/05\/02\/post-jam-post\/\">we had a hell of a good time<\/a>. Then LD21 happened, and I was alone, so I entered the\u00a0<a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-21\/?action=preview&amp;uid=4250\">compo<\/a>. I must say that sometimes, working alone can\u00a0<a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/08\/21\/67879\/\">be truly depressing, but may scale into an epic adventure<\/a>. I skipped LD22, and -if I must be honest- I wasn\u2019t quite sure if I would make something for LD23, after all, I\u2019m a <del>kick-ass<\/del> programmer but with little art skills.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<div class=\"wp-caption alignright\" id=\"attachment_139668\" style=\"width: 130px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/24\/drop-of-life-post-mortem-or-a-journal-of-sorts-kinda\/ilovepixel\/\" rel=\"attachment wp-att-139668\"><img alt=\"ILovePixel's profile picture\" class=\"size-full wp-image-139668\" height=\"160\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/ilovepixel.gif\" width=\"120\"\/><\/a><p class=\"wp-caption-text\">He is less blurry in person. Less colors as well.<\/p><\/div>\n<p>My friend and jam mate (<strong>ilovepixel<\/strong>) is a completely different case. He knew of ludumdare, but never participated before. He is a <a href=\"http:\/\/manxana.deviantart.com\/\">hell of an artist<\/a>\u00a0and <a href=\"http:\/\/shin.cl\/\">all-around creative guy<\/a>. \u00a0Since this was LD\u2019s 10th anniversary, I asked my friend if he was interested on participating. He liked the idea, so -before I could fully realize the implications of it- the game was on and there was no backing down.<\/p>\n<p>For this entry he was going to be in charge of the art, and I was supposed to take care of programming and music (given we had time to add such a thing to the game). His weapon of choice was Photoshop while mine were\u00a0<a href=\"http:\/\/notepad-plus-plus.org\/\">Notepad++<\/a> and <a href=\"http:\/\/monkeycoder.co.nz\/\">Monkey<\/a>.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><span style=\"color: #ff0000\"><strong>The game is on \u2026<\/strong><\/span><\/p>\n<p><span style=\"text-decoration: underline\"><strong><span style=\"color: #000000;text-decoration: underline\">Friday<\/span><\/strong><\/span><\/p>\n<p>We met online Friday night, about 20 minutes before the theme was announced. I was on IRC waiting for the life-deciding moment. After some technical difficulties, the irc bot finally announced the theme; the <a href=\"http:\/\/en.wikipedia.org\/wiki\/K%C3%BCbler-Ross_model\">usual chain of events followed<\/a>. Denial, anger, bargaining, depression, acceptance; we went through all of them in about 15 minutes.<\/p>\n<p>We wanted to make something different (some forecasts were done in IRC about most entries being side-scroll platformers with small elements and creatures and with some linear combination of \u201ctiny\u201d and \u201cworld\u201d as their name) so we first thought of a tower defense game.<\/p>\n<p>To fit the theme we pictured small-scale organisms like protozoa, amoebas and that kind of living creatures. As I wanted to bring some emphasis into the \u201ctiny\u201d aspect, I envisioned the world to be limited by tight constraints, like a petri dish\u2026 or\u2026 a drop of water. We later found that you can actually fit <a href=\"http:\/\/muzzbie.com\/?p=112\">a hefty number of bacteria into a drop of water<\/a> so we went along with that.<\/p>\n<p>At that point we already decided it would be a \u201cplayer-vs-enemy\u201d battle and we came up with the idea of the drop falling into ground and having the microorganisms to fight each other for survival. Since bacteria was going to be carried to the battlefield in drops of water, we decided to use that as a core restriction; the player won\u2019t have the freedom to create units by accumulating points or resources, but rather he would receive a number of units after each drop reached the ground.<\/p>\n<p>There was a problem with our choice of genre (tower defense) though; player units were required to be stationary while the enemy was supposed to move freely across the field. We then started thinking on ways of making our units to move, but it wasn\u2019t easy to picture some unicellular organism moving on that scenario other than by drifting on the liquid surface with no input from the user.<\/p>\n<p>Then I recalled <a href=\"http:\/\/en.wikipedia.org\/wiki\/Conway's_Game_of_Life\">Conway\u2019s game of life<\/a>, and although it\u2019s not a game <em>per se<\/em>, there you have cells which \u201cmove\u201d by death and spawn of new ones.\u00a0The idea of fully implementing conway\u2019s rules followed quickly, so we settled with making a playable version of Conway\u2019s automata with the additional challenge of \u00a0incoming waves of enemy cells.<\/p>\n<div class=\"wp-caption aligncenter\" style=\"width: 389px\"><img alt=\"Conway's game of life insane &quot;breeder&quot; formation\" height=\"192\" src=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/e\/e6\/Conways_game_of_life_breeder_animation.gif\" width=\"379\"\/><p class=\"wp-caption-text\">The formation you dream your country came up with, but deep into your heart you know it was an asian dude.<\/p><\/div>\n<p>\u00a0<\/p>\n<p>With the basic game concept and mechanics decided, we called it a day and logged off so we could start working on the game the next day.<\/p>\n<p><strong><span style=\"text-decoration: underline\">Saturday<\/span><\/strong><\/p>\n<p>My mate came over to my house Saturday around 3:40 PM. We had things to do early that day so we started with more than half a day of disadvantage. My friend shown me some ideas he sketched on his pocket notepad related to the main game view and the intro, so we discussed them and settled with the general feeling of the game.<\/p>\n<p>I had a few basic classes and components made as part of the warm-up weekend, so I didn\u2019t have to code ABSOLUTELY everything from scratch (I had\u00a0animations, tilesets and the framework for dynamic resource loading implemented) but I was still missing a few things (fonts, scene management, cameras, etc) so I ended up doing a lot of them during the compo\/jam which drastically reduced my time.<\/p>\n<p>I wasted some time experimenting a bit with zooming in and out of the field, but since I didn\u2019t have a solid mechanism for camera control I discarded the idea and went ahead with a fixed zoom level (we will probably implement zoom on the post-jam version).<\/p>\n<p>If you are curious, this was our inspiration for the general look and feel of the player\u2019s units:<\/p>\n<div class=\"wp-caption aligncenter\" style=\"width: 261px\"><img alt=\"Powerpuff girls' amoeba boys\" height=\"219\" src=\"http:\/\/www2.ups.edu\/faculty\/velez\/Span_301\/html\/extra\/amoeba.jpg\" width=\"251\"\/><p class=\"wp-caption-text\">Real unicellular organisms as seen by an electronic microscope<\/p><\/div>\n<p>\u00a0<\/p>\n<p>We stopped working around 5 AM and we went to sleep. We planned to rest for 4 hours but we ended up taking a 6 hours full nap. <span style=\"text-decoration: underline\">BAD.<\/span><\/p>\n<p><strong><span style=\"text-decoration: underline\">Sunday<\/span><\/strong><\/p>\n<p>We further discussed the game rules, basically if it was worth introducing new rules that took into account the fact that two different parties were in play but everything we tried completely broke the game. After realizing how truly wise Conway was, we decided to make no modifications to the standard rules. Well, to be completely honest, I managed to sneak a little modification: while the conditions of \u201coverpopulation\u201d and \u201cloneliness\u201d doesn\u2019t take into account whether the cells are friend or foe, for breeding you NEED the 3 cells to be of your team (although we don\u2019t explain that in game :\/ ).<\/p>\n<p>My mate made some tutorial screens explaining the rules and finished the sprites, which I later added the game. I worked into implementing individual sprites for each cell so they could display different animations (like \u201cdeath\u201d or \u201csprout\u201d) instead of all the living cells displaying the same sprite and dead cells having no animation. This is where I came up with the current implementation which is most likely the cause of the performance drop the game experiences after a certain number of rounds. I knew \u00a0it was going to cause problems but according to my calculations, there was no time to implement a dynamic sprite pool (and in fact, I didn\u2019t have time to later rewrite this part) so every time a cell spawns, a new sprite is created in memory. Where is the memory freed? only god knows.<\/p>\n<p>My friend left my house around 6:30 PM because he had things to do. At this point the game had no turn-based action and no way to remove cells once you placed them on the field. We also had no enemies although all the methods for adding and processing enemy cells were already implemented and tested (by manually placing \u00a0enemy cells and watching them \u201clive\u201d).<\/p>\n<p>I kept working on the game: Added the full set of animations my friend made, added a way to recognize cells placed by the player so you could remove them if you wanted, and had the basic turn-swapping mechanics in place. I also implemented a text box which could contain multiple lines of text which I used to signal the beginning of your turn. \u00a0It was 00:00 AM, Monday, so I left the development and did my routinary sunday-night routine which involves preparing myself for the next day (which means returning to my day-time job). Went to bed between 3 and 4 AM.<\/p>\n<p><span style=\"text-decoration: underline\"><strong>Monday<\/strong><\/span><\/p>\n<p>Arrived home around 7:30 PM after an intense day at work. Jam deadline was due 10:00 PM so I only had 2 hours and a half \u00a0to finish the game. I immediately resumed my work on the project. I kinda panicked since my mate wasn\u2019t online and I needed a credits and game over screen as well as redoing the tutorial to have simplified instructions and\u00a0reflect a change in the background color of the field. I also needed a story.<\/p>\n<p>I decided I didn\u2019t have time to sit and wait so I crammed the credits into the intro screen, used the handy textbox class I implemented the night before for recreating \u00a0the tutorial screens together with a new set of screens I made . Then added a skip button I quickly created with one of the fonts we were using.<\/p>\n<p>For the story, I wrote a short description of the game premise and stuffed it into another text box which I made scroll. I also added another skip button for that screen as well.<\/p>\n<p>Finally I wrote the game-over condition test and abused yet again of my textbox to notify the tragic event to the player and\u00a0display the survival stats.<\/p>\n<p>My friend finally logged in, like 10 minutes before the deadline. Too late for redoing anything of what I needed, sadly. I polished a few details and started getting ready to submit.\u00a0I launched the submission form and started filling what I could. I also ran filezilla and connected to my ftp.<\/p>\n<p>It was 5 minutes before deadline and the game didn\u2019t have enemies. I came up with some crappy AI which basically starts spawning cells after two \u00a0rounds, trying to fit a few standard formations which give the enemy either a stable low population of cells, or some compact weapon (The <strong>glider<\/strong>, which you can <a href=\"http:\/\/www.bitstorm.org\/gameoflife\/\">try here<\/a>). It didn\u2019t test if the formation fits though, or if it causes to suddenly\u00a0annihilate his entire army, so whenever the enemy runs out of cells, a new wave arrives.<\/p>\n<p>I was finally done with the enemies and it was like 10:01 PM. <strong>I was off by 1 F*CKING minute!!.<\/strong><\/p>\n<p>I refreshed the ludumdare\u2019s homepage and realized that the submission hour just started. I was then like \u201cDamn right!! the submission hour! We are SOOO not screwed now!\u201d. \u00a0It was actually good that I forgot completely about the submission hour, because otherwise I may have worked without haste.<\/p>\n<p>I then realized that our game didn\u2019t have a name so I asked my friend to think on something. He came up with\u00a0<strong>drop of life<\/strong>\u00a0which I immediatly liked. I told him if he could integrate the title into the intro screen, I also uploaded the game to my server to show him the current status of the game. He luckily loved the result and the way I implemented the missing things and brought everything together (the last time he saw the game before leaving my house not all the animations and assets were in the game, mostly placeholders and the first animations he did).<\/p>\n<p>He sent me the modified intro screen which I added into the game, rebuilt the project and uploaded everything to my server again. Filled the LD form and submitted\u2026.<\/p>\n<p><span style=\"text-decoration: underline\">IT WAS OVER<\/span><\/p>\n<p>It was DAMN over. I was tired as hell\u2026 with a f*cking headache that words alone can\u2019t describe\u2026. but I was satisfied\u2026 and happy.<\/p>\n<p>And so was my friend. I must say it was a real pleasure to work with him. He worked lighting-fast and delivered high quality assets for the game in jaw-dropping time.\u00a0We both are proud of what we achieved; we came up with a nice game concept and we managed to develop the game entirely (well, not 100% complete but it\u2019s playable and it looks damn good) \u00a0in probably no more than 30 hrs. It doesn\u2019t have music, it has a few bugs, and some screens are pretty generic but man, we love every damn bit of it.<\/p>\n<p>So we would like to ask you from the bottom of our hearts: <a href=\"http:\/\/www.ludumdare.com\/compo\/ludum-dare-23\/?action=preview&amp;uid=4250\">Play the game<\/a>.\u00a0<strong>We truly hope you enjoy it as much as we enjoyed developing it.<\/strong><\/p>\n<div class=\"wp-caption aligncenter\" id=\"attachment_139664\" style=\"width: 74px\"><a href=\"http:\/\/www.ludumdare.com\/compo\/2012\/04\/24\/drop-of-life-post-mortem-or-a-journal-of-sorts-kinda\/cell\/\" rel=\"attachment wp-att-139664\"><img alt=\"GIF animation of a friendly bacterium\" class=\"size-full wp-image-139664\" height=\"64\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2012\/04\/cell.gif\" width=\"64\"\/><\/a><p class=\"wp-caption-text\">You just can't hate it, can you?<\/p><\/div>\n<p>\u00a0<\/p>\n<p>EDIT: Added the MOAR tag so this post won\u2019t appear as the behemoth it is unless you click on (more\u2026)<\/p>\n<p>ERRATUM: I *think* I added a temporary form of credits on the intro screen on Sunday night but I\u2019m not actually sure of it. Just wanted to add that clarification for the sake of accuracy.<\/p>\n<p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/drop-of-life\/\" rel=\"tag\">drop of life<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/jam\/\" rel=\"tag\">jam<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/journal\/\" rel=\"tag\">journal<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/ld23\/\" rel=\"tag\">ld23<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/post-mortem\/\" rel=\"tag\">post-mortem<\/a><\/p>","time":"April 24th, 2012 10:26 pm","title":"\u201cDrop of Life\u201d Post-Mortem \u2026 Or a journal of sorts \u2026 kinda.","title_was_empty":false}