{"assets":[{"original":"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen0-550x115.png","local":"\/data\/posts\/2013\/07\/193abe74a886cf64d5953df9f3b5e4f3.png"}],"author_link":"author\/jdaniello\/","author_name":"James Daniello & Nicolas Ickovic","cat":"MiniLD","categories":["MiniLD"],"comments":[],"epoch":1375193640,"event":"","likes":4,"metadata":{"p_key":"78957","p_author":"James Daniello & Nicolas Ickovic","p_authorkey":"0","p_urlkey":"287967","p_title":"World\u2019s Aftermath \u2013 Post Mortem","p_cat":"MiniLD","p_event":"LD27","p_time":"1375193640","p_likes":"4","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\/07\/30\/worlds-aftermath-post-mortem\/","text":"<p>Hey guys, just wanted to take the opportunity to write a bit more about <strong>World\u2019s Aftermath<\/strong>, and the process behind it.<\/p>\n<h2>Assets<\/h2>\n<p>One thing we strived for when we were planning this project was that we really didn\u2019t want to use any content that wasn\u2019t our own. So, from day one, Nicolas set out drawing pixel art, laying down guitar tracks, and doing voice overs for the character deaths. He kept a steady stream of content coming in, and I plugged away endlessly programming it all together. Every day when I returned home from work Nick told me he\u2019d been up till 6am drawing dozens of animations. One night he stayed up all night animating 30 strips of animations and laying down the entire soundtrack. By the end of it all, we had 300+ frames of graphics, 6 original songs, 50+ original sounds, and half a dozen levels.<\/p>\n<h2>Code<\/h2>\n<p>All of the source code is original too. I\u2019ve been working on a 2D game engine since 2007 that I\u2019ve been using for all my other projects. The night before the competition I gutted out one of my projects of all it\u2019s content so I could start with a blank canvas. I used my custom World Builder (level editor) to design the levels. The engine is written in Java, and uses the Java2D graphics library for rendering (which I\u2019ve optimized immensely). The most important thing, I realized, was that I would need to be able to create units for the game as quickly as possible, and that I wanted <em>hundreds<\/em> of units and <em>hundreds<\/em> of bullets on the screen at once. The game was going to be visceral and gratuitous and I think we hit the mark.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen0.png\" target=\"_blank\"><img alt=\"screen0\" class=\"aligncenter size-large wp-image-264678\" height=\"115\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"\/data\/posts\/2013\/07\/193abe74a886cf64d5953df9f3b5e4f3.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen0-550x115.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen0.png 1276w\" width=\"550\"\/><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen11.png\" target=\"_blank\"><img alt=\"screen1\" class=\"aligncenter size-large wp-image-264679\" height=\"167\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen11-550x167.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen11-300x91.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen11-550x167.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen11.png 896w\" width=\"550\"\/><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen41.png\" target=\"_blank\"><img alt=\"screen4\" class=\"aligncenter size-large wp-image-264677\" height=\"314\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen41-550x314.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen41-300x171.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen41-550x314.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen41.png 656w\" width=\"550\"\/><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen32.png\" target=\"_blank\"><img alt=\"screen3\" class=\"aligncenter size-large wp-image-264680\" height=\"79\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen32-550x79.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen32-300x43.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen32-550x79.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/screen32.png 1296w\" width=\"550\"\/><\/a><\/p>\n<p>Every single variable, animation, sound, and unit\/bullet type is defined in the INI files in the \/<em>gamedat<\/em>\/ folder (which leaves rooms for mods). By the time we were finished, units, bullets, sounds, levels, etc. could all be added without a single line of programming. To make sure the units could pile up without slowdown I wrote a spatial partitioning algorithm that sweeps over all the units at the beginning of every frame. Each unit is put in a different \u201cbin\u201d for every 100 pixels.\u00a0 This way, unit vs unit or bullet vs unit comparisons are made only on those units in the surrounding area by getting only those \u201cbins\u201d in range.<\/p>\n<h2><\/h2>\n<h2>Gameplay\/Mechanics<\/h2>\n<p>We really looked to Command and Conquer as a source of inspiration for this bad-boy. We wanted to capture the vibe of the original Command and Conquer, but we also wanted to make a game that could be played by anyone, without ever having played an RTS. So, we simplified the control scheme and mechanics quite a bit from a traditional RTS. This is where we feel we\u2019ve innovated. Without direct control of unit placement, we were able to reduce the gameplay down to three actions (purchase, attack, defend), but made sure we left room for emergent gameplay and strategy. This created a very casual gameplay experience but also leaves room for a great amount of depth.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/ui.png\" target=\"_blank\"><img alt=\"ui\" class=\"aligncenter size-large wp-image-264681\" height=\"80\" sizes=\"(max-width: 550px) 100vw, 550px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/ui-550x80.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/ui-550x80.png 550w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/ui.png 1600w\" width=\"550\"\/><\/a><\/p>\n<p>From the start, we realized the importance of making sure it was completely clear how to play without any sort of tutorial. So, we designed an intuitive and simplified control scheme that is ultimately compatible with touch screens. In this fashion, the entire game is playable with only a mouse, only a keyboard, or only a touch screen. Unfortunately, we had to ditch the tower defense and defend actions for this version, but adding them in our final release will give that additional layer of control that will really bring the gameplay together as a complete package. Forcing the player to commit to an attack makes each decision of what units to send, how many, and how often, that much more important; and the immediate urgency to capture towers right from the start sets the pace from the start of a match. Finally, the need to unlock tiers of units, as well as the importance of purchasing and defending your harvesters ends up making each purchase critical.<\/p>\n<p>Finally, I\u2019d like to mention that a design decision was made very early on to use object oriented code design to cleanly separate each aspect of the game. In this fashion units are separated from teams, and teams from players. We will be able to add in network support fairly easily for the full release, as the code is designed in a way to make networked control of a player trivial. Something we wanted to do from the very beginning was to play versus each other, so the full release will certainly have online multiplayer.<\/p>\n<h2><\/h2>\n<h2>Music\/Sound Design\/Ambiance\/Inspiration<\/h2>\n<p>We\u2019ve both always been huge fans of the earlier games in the Command and Conquer franchise. And even though Nick won\u2019t play me anymore because I dominate him every time, we wanted to draw from these games for inspiration. We intentionally left out a unit cap, and made sure the game could facilitate as many units as a player could afford. The music and sound design were crucial, also, in creating an homage to these games. We laid down some guitar tracks ala Frank Klepacki (see below), and did our best imitations of the Wilhelm scream that Command and Conquer used so charmingly for it\u2019s infantry death sounds. Getting the artistic direction of the two factions and the mood of the game just right was critical\u2013since graphic design makes or breaks a first impression\u2013so we worked hard to capture a dystopian \u201cRed Alert Vs Tiberian Sun\u201d feel. We decided the more conventional \u201cRebel Scum\u201d vs the domineering and futuristic \u201cAllied Collective\u201d would be a good representation of this. There isn\u2019t a story explicitly stated in-game, but we feel we hit the mark with our \u201cshow don\u2019t tell\u201d approach that we meticulously crafted through the subtle use of our art direction and the limited wording\/naming we sprinkled throughout the game.<\/p>\n<p style=\"text-align: center\"><a href=\"https:\/\/soundcloud.com\/electronick-2\/rts-song-01\" target=\"_blank\"><img alt=\"rts_song_1\" class=\"wp-image-264716 alignleft\" height=\"175\" sizes=\"(max-width: 382px) 100vw, 382px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/rts_song_11.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/rts_song_11-300x137.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/rts_song_11.png 546w\" width=\"382\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p style=\"text-align: center\">\u00a0 <a href=\"https:\/\/soundcloud.com\/electronick-2\/rts-song-06\" target=\"_blank\"><img alt=\"rts_song_6\" class=\"wp-image-264717 alignleft\" height=\"175\" sizes=\"(max-width: 382px) 100vw, 382px\" src=\"http:\/\/www.ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/rts_song_61.png\" srcset=\"http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/rts_song_61-300x137.png 300w, http:\/\/ludumdare.com\/compo\/wp-content\/uploads\/2013\/07\/rts_song_61.png 546w\" width=\"382\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<h2><\/h2>\n<h2><\/h2>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<h2>In closing<\/h2>\n<p>Looking back, we feel very satisfied by what we\u2019ve accomplished here. In 7 days we\u2019ve completed a game from start to finish with all the technical aspects of game development accounted for (sound, music, graphics, level design, victory conditions, menus, AI), and a strong core set of game mechanics. We\u2019re geared up to now create a proper release of the game, having proven our prototype, and in the coming weeks we\u2019ll polish the game with all the love in the world and release a free version of the game with all the bells and whistles.<\/p>\n<h2>Download<\/h2>\n<p>Download\/view our entry here:<br\/>\n<a href=\"http:\/\/www.ludumdare.com\/compo\/minild-44\/?action=preview&amp;uid=24948\" title=\"http:\/\/www.ludumdare.com\/compo\/minild-44\/?action=preview&amp;uid=24948\">http:\/\/www.ludumdare.com\/compo\/minild-44\/?action=preview&amp;uid=24948<\/a><\/p>\n<p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/7drts\/\" rel=\"tag\">#7DRTS<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/indiegame\/\" rel=\"tag\">#indiegame<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/minild44\/\" rel=\"tag\">#MiniLD44<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/2d\/\" rel=\"tag\">2D<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/compo\/\" rel=\"tag\">compo<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/final\/\" rel=\"tag\">final<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/game\/\" rel=\"tag\">game<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/gamedesign\/\" rel=\"tag\">gamedesign<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/gamedev\/\" rel=\"tag\">gamedev<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/jam\/\" rel=\"tag\">jam<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/java\/\" rel=\"tag\">java<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/ludum-dare\/\" rel=\"tag\">Ludum Dare<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/minild\/\" rel=\"tag\">MiniLD<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/post-mortem\/\" rel=\"tag\">post-mortem<\/a>, <a href=\"http:\/\/ludumdare.com\/compo\/tag\/postmortem\/\" rel=\"tag\">postmortem<\/a><\/p>","time":"July 30th, 2013 2:14 pm","title":"World\u2019s Aftermath \u2013 Post Mortem","title_was_empty":false}