{"assets":[],"author_link":"author\/benko\/","author_name":"ladybenko","cat":"LD #36","categories":["LD #36"],"comments":[],"epoch":1472553660,"event":"LD36","likes":6,"metadata":{"p_key":"84003","p_author":"ladybenko","p_authorkey":"0","p_urlkey":"294743","p_title":"Post-mortem of \u201cThe Language of the Gods\u201d","p_cat":"LD #36","p_event":"LD36","p_time":"1472553660","p_likes":"6","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1472169600","event_key":"35","event_name":"LD36"},"source_url":"2016\/08\/30\/post-mortem-of-the-language-of-the-gods\/","text":"<p>Hi all!<\/p>\n<p>I wrote a post-mortem for my game The Language of the Gods, and I\u2019m publishing it here as well. I hope you like it, and please play my game and tell me what you think! <img alt=\":)\" class=\"wp-smiley\" src=\"http:\/\/ludumdare.com\/compo\/wp-includes\/images\/smilies\/simple-smile.png\" style=\"height: 1em; max-height: 1em;\"\/><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/ludumdare.com\/compo\/ludum-dare-36\/?action=preview&amp;uid=547\" target=\"_blank\">&gt; Play The Language of the Gods &lt;<\/a><\/p>\n<h2 id=\"log\">Log<\/h2>\n<h3 id=\"saturday\">Saturday<\/h3>\n<p>I woke up at 7AM to see the jam\u2019s <strong>theme<\/strong>, \u201cAncient tech\u201d, and went outside for a long walk to feel refreshed and let my mind wander a bit. Then I headed to a caf\u00e9 to have breakfast and do some <strong>brainstorming<\/strong>. I really love doing mind maps for jams, it really helps me in finding out ramifications of the theme.<\/p>\n<p><img alt=\"Photo of mind map\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/ldjam36-mindmap-1.jpg\"\/><\/p>\n<p>And then I had an idea I really, really loved. It was a story-driven game with the plot involving an explorer in an deserted alien planet trying to figure out how to get back home and discover the secrets of the now long lost alien civilization. Topics would include Good &amp; Evil, the nature of reality, personhood, etc.<\/p>\n<p>And to deliver all of this, I envisioned a kind of <strong>atmospheric<\/strong> game, with lots of <strong>exploring<\/strong>, some <strong>puzzles<\/strong> and opportunities to chill out while you go unfolding the <strong>story<\/strong>.<\/p>\n<p>Still at the caf\u00e9, I doodled some concept art:<\/p>\n<p><img alt=\"Concept art\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/conceptldjam36.jpg\"\/><\/p>\n<p>Problem with this idea? Way huge for the scope of a game jam. But I wanted to make something with this idea, so I considered two choices:<\/p>\n<ul>\n<li>Make a <a href=\"https:\/\/twinery.org\/\">Twine<\/a> game and focus on the story.<\/li>\n<li>Make a vignette that captures the atmosphere I wanted.<\/li>\n<\/ul>\n<p>I was reluctant to opt for Twine because I had never used it before. So I chose to <strong>make a vignette as a proof of concept<\/strong> and see whether people would like that kind of game or not.<\/p>\n<p>As you know from <a href=\"http:\/\/belenalbeza.com\/tag\/game-jam\/\">previous post-mortems<\/a>, I like to spend the first day of Ludum Dare coding, and leave art for Sunday. However, when I opened Pyxel Edit to draw some placeholder art, I couldn\u2019t stop myself and I ended up drawing a pixel art version of the sketch I made at the caf\u00e9.<\/p>\n<p><img alt=\"Pyxel Edit in action\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/pyxel_edit.png\"\/><\/p>\n<p>For the curious, I used the <strong>Dawnbringer\u2019s 32 colour palette<\/strong>, that comes as a preset for Pyxel Edit \u2013having a reduced colour palette helps me <em>a lot<\/em> in drawing pixel art. And then I found out this app could export a PNG with all the tiles (a tilesheet), as well as a tile map in JSON.<\/p>\n<p>So, TL;DR: no placeholder art this time.<\/p>\n<p>There was a problem, though: Pyxel Edit <strong>tile map\u2019s exported files<\/strong> were <em>huge<\/em>. Even after minifying, they were still heavy. So I added <strong>a task to my Gulpfile<\/strong> to manipulate this JSON and only include the information that I needed. The result? Going from more than 500KB to 8KB, something more reasonable for a map!<\/p>\n<p>After lunch I resumed programming and had a bit of trouble trying to import the data. My first strategy was to mimic Tiled\u2019s file format, since Phaser could directly import that. However, the map was not being loaded properly, so I gave up and imported the data into a <code>Phaser.Tilemap<\/code> myself. Once I had the <strong>map rendering<\/strong>, I included the <strong>main character<\/strong> and some passing <strong>clouds<\/strong> as decoration.<\/p>\n<p>Since story was important, I decided that the next thing I should do were to <strong>display text<\/strong>. I drew a tiny font, using PICO-8 font measurements (3\u00d75 pixels per character). And then implemented rendering of text of up to three lines.<\/p>\n<p>Now that I think of it, I did quite a lot of stuff on Saturday, but at that time I went to bed with the feeling that it was not much, since there were many more things I would have wanted to do.<\/p>\n<p><img alt=\"Progress before bed time\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/map_scroll.gif\"\/><\/p>\n<h2 id=\"sunday\">Sunday<\/h2>\n<p>I woke up on Sunday and did the same as the day before: going out for a walk to get fresh air and clear my mind.<\/p>\n<p><strong>I was worried about gameplay.<\/strong> \u201cWill my game be fun if it\u2019s just an story?\u201d, \u201cIf so, should have just made a Twine game?\u201d, \u201cMaybe I should make big levels and allow for exploration\u201d, \u201cMaybe I could add some puzzles to it\u201d.<\/p>\n<p>I started to code events \u2013so I could implement a story\u2013 and refine the text display.<\/p>\n<p><img alt=\"A more advanced display\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/typewriter.gif\"\/><\/p>\n<p>After that, I needed to include some <strong>puzzles<\/strong>. I knew that in the grand scheme of the game the game\u2019s beginning mistery would have to do with music, so the simplest puzzle I could come with was Simon.<\/p>\n<p>Once the mini-game was created, I implemented the artifacts that would launch the puzzle when being interacted with.<\/p>\n<p><img alt=\"Artifact animation\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/artifact.gif\"\/><\/p>\n<p>And then this made the <strong>first playable version<\/strong> of the game! I uploaded it and added a message once the puzzle was solved asking for encouragement and feedback! I really needed some cheering up \u2013and it worked, by the way!<\/p>\n<p><img alt=\"First playable version\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/first_playable.png\"\/><\/p>\n<p>It was already the evening, and I still had a lot to do. It reminded me a lot of once of my previous Ludums, where I <strong>overscoped<\/strong> and I submitted a really rough entry. But somehow I managed to keep my cool and not panic much. It was obvious that I wouldn\u2019t have time to do a lot (or big) levels, so I decided <strong>to cut that part<\/strong> without too much drama from my part.<\/p>\n<p>I went to draw some simple animations for the main character and got hooked into Pyxel Edit again, and ended up doing more frames that I wanted to!<\/p>\n<p><img alt=\"Idle animation\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/chara_idle.gif\"\/><\/p>\n<p><img alt=\"Walking animation\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/chara_run.gif\"\/><\/p>\n<p><img alt=\"Animations in game\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/idle_run_anim.gif\"\/><\/p>\n<p>It was getting late and I still hadn\u2019t a story in place, so I <strong>coded bits of the story in that single level<\/strong>. I made a mistake and I should have hardcoded the whole thing, but I wrote some kind of semi-generic system instead.<\/p>\n<p>Lastly, I drew <strong>another level<\/strong>, this one featuring another type of object that was not an artifact: a crashed spaceship, that will add a bit of info to the story. This level also acts a bit <strong>like a tutorial<\/strong>, showing the player tooltips about how to move and how to interact with objects. This has been the first time I included an in-game tutorial in a Ludum Dare and I think it worked wonders: nobody asked me how to play the game.<\/p>\n<p><img alt=\"Tutorial level\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/wreckage.png\"\/><\/p>\n<p>After that it was about 11PM and I still needed to compose some <strong>background music<\/strong>! The game already had some sound effects, so gameplay-wise it was OK, but music adds a lot to the atmosphere and mood and that was one of the aspects I wanted to try out and get feedback about!<\/p>\n<p>I used <strong>Audiotool<\/strong> for music. I\u2019m still not proficient with it, but I had learned enough so I could comfortable remix some samples and even play a melody with a custom-made sound from a synth.<\/p>\n<p>After integrating the music into the game, I just needed to create a <strong>title screen<\/strong> and run a few walk-troughs to make sure everything was OK. I ended up submitting my entry at 1AM, despite I was aiming for midnight, as usual. However, it felt amazing to finish and have something playable!<\/p>\n<p><img alt=\"Title screen\" src=\"http:\/\/belenalbeza.com\/content\/images\/2016\/08\/Screen-Shot-2016-08-29-at-01-37-17.png\"\/><\/p>\n<h2 id=\"whatwentwrong\">What went wrong<\/h2>\n<ul>\n<li>I chose to do the maps (not the actual drawing of art, but the <em>building<\/em> of the levels) with Pyxel Edit, <strong>instead of Tiled<\/strong>. This caused a delay because I then needed to minify them and write custom import code for Phaser, instead of relying of Tiled, which is the preferred format for Phaser and just works out of the box.<\/li>\n<li><strong>Overscope<\/strong>. I knew from the beginning that my game was too big and that I would have to settle for a tiny fraction of it, but I was having some bad feelings on Saturday night about me not having made enough progress (this is <em>The Wall<\/em>, and I have <a href=\"http:\/\/belenalbeza.com\/surviving-ludum-dare\/#motivation\">talked about it before<\/a>).<\/li>\n<li>I was not strict in terms of meal times \u2013I was so in the zone that <strong>I would forget to eat<\/strong>\u2013, and it made my stomach quite upset.<\/li>\n<li>I ended the jam after midnight, and then I was so alert that I had a rough night afterwards. Other jams that I finished before midnight I was able to sleep as usual.<\/li>\n<\/ul>\n<h2 id=\"whatwentwell\">What went well<\/h2>\n<ul>\n<li>I did not give up! And I think this is my <strong>best entry for a jam <em>ever<\/em>.<\/strong> Although I will always have a soft spot for <em>Metal vs Hipsters<\/em>, I think that this entry is more solid and polished.<\/li>\n<li><strong>Pyxel Edit<\/strong> was easy to use and a bargain for its price and features. I will keep this app as my go-to pixel art software. Bye, bye, Asesprite and Pixen!<\/li>\n<li>I was able to <strong>manage overscope<\/strong>. I think the resulting game is extremely short, but it definitely can be considered a proof of concept. I think that the game captures the atmosphere that I had in my mind and the mood I wanted to convey.<\/li>\n<li>I got a lot of <strong>good feedback and encouragement<\/strong> on Twitter! This helped me to overcome The Wall on Saturday night and not give up.<\/li>\n<\/ul>\n<h2 id=\"tools\">Tools<\/h2>\n<p>Code:<\/p>\n<ul>\n<li>JavaScript as a language.<\/li>\n<li><a href=\"http:\/\/phaser.io\">Phaser<\/a> as a game framework\/library.<\/li>\n<li><a href=\"http:\/\/atom.io\">Atom<\/a> with vim key bindings as text editor.<\/li>\n<li>My <a href=\"https:\/\/www.npmjs.com\/package\/generator-gamejam\">gamejam generator<\/a> to create the initial project template and automation tasks.<\/li>\n<li><a href=\"http:\/\/gulpjs.com\/\">Gulp<\/a> as a build\/tasks system.<\/li>\n<li><a href=\"https:\/\/github.com\/belen-albeza\/ldjam-36\">Github<\/a> and Git for version control and online backup.<\/li>\n<\/ul>\n<p>Audio and graphics:<\/p>\n<ul>\n<li><a href=\"http:\/\/pyxeledit.com\/\">Pyxel Edit<\/a> for pixel art and level building.<\/li>\n<li><a href=\"http:\/\/www.bfxr.net\/\">Bxfr<\/a> to generate sound effects.<\/li>\n<li><a href=\"http:\/\/audiotool.com\">Audiotool<\/a> to arrange the background music.<\/li>\n<\/ul>\n<p>Misc:<\/p>\n<ul>\n<li>A sketchbook for brainstorming and concept art.<\/li>\n<li>Twitter to post WIP screenshots \/ GIF\u2019s and get feedback.<\/li>\n<\/ul>\n<p>Tags: <a href=\"http:\/\/ludumdare.com\/compo\/tag\/post-mortem\/\" rel=\"tag\">post-mortem<\/a><\/p>","time":"August 30th, 2016 10:41 am","title":"Post-mortem of \u201cThe Language of the Gods\u201d","title_was_empty":false}