<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Lost Decade Games</title>
	<link href="http://www.lostdecadegames.com/rss.xml" rel="self"/>
	<link href="http://www.lostdecadegames.com/"/>
	<updated>2012-02-05T16:59:13-08:00</updated>
	<id>http://lostdecade.github.com/</id>
	<author>
		<name>Lost Decade Games</name>
		<email>hello@lostdecadegames.com</email>
	</author>
	
	<entry>
		<title>Lostcast Episode 7: HTML5, The Bad Parts</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-7-html5-the-bad-parts"/>
		<updated>2012-02-03T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-7-html5-the-bad-parts</id>
		<content type="html">&lt;a href='/media/images/posts/lostcast_07/matt_and_geoff_podcasting.jpg'&gt;
	&lt;img src='/media/images/posts/lostcast_07/matt_and_geoff_podcasting_small.jpg' alt='Matt and Geoff making Lostcast' /&gt;
&lt;/a&gt;
&lt;p&gt;(That&amp;#8217;s Matt on the left, Geoff on the right… and Mojito below!)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is our podcast about HTML5 games. In episode 7, &lt;strong&gt;we hate HTML5&lt;/strong&gt;! … Ok, maybe we actually love it a little &lt;em&gt;too&lt;/em&gt; hard, but in this episode we go over all the stuff that developers (via &lt;a href='http://subsoap.com/games/faerie-alchemy/html5/'&gt;Twitter&lt;/a&gt; and live conversations) told us that they hate about working with HTML5.&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_7_html5_the_bad_parts.mp3' class='download-podcast'&gt;
	Download Lostcast episode 7 (1:10:57, 81MB)
&lt;/a&gt;
&lt;h2 id='html5_game_of_the_week_faerie_alchemy'&gt;HTML5 Game of the Week: Faerie Alchemy&lt;/h2&gt;
&lt;a href='http://subsoap.com/games/faerie-alchemy/html5/'&gt;
	&lt;img src='/media/images/posts/lostcast_07/faerie_alchemy.jpg' alt='Faerie Alchemy' /&gt;
&lt;/a&gt;
&lt;p&gt;We&amp;#8217;re going to start spotlighting one HTML5 game each week, starting things off with &lt;a href='http://subsoap.com/games/faerie-alchemy/html5/'&gt;Faerie Alchemy&lt;/a&gt; by &lt;a href='http://www.subsoap.com/'&gt;Subsoap&lt;/a&gt;. We discuss the game in more detail in the &amp;#8216;cast, but the gist is that it&amp;#8217;s a solid HTML5 game, very appropriate for the platform and quite polished. Check it out!&lt;/p&gt;

&lt;h2 id='show_notes'&gt;Show notes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio'&gt;Impact article on Audio&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://wiki.mozilla.org/Audio_Data_API'&gt;Mozilla&amp;#8217;s Audio Data API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html'&gt;W3C Web Audio API spec&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;em&gt;We should really embed our podcasts using the audio tag…&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/audia-is-a-library-for-simplifying-the-web-audio-api/'&gt;Audia&lt;/a&gt;, a simple Web Audio API wrapper&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.schillmania.com/projects/soundmanager2/'&gt;SoundManager 2&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://labs.adobe.com/technologies/edge/'&gt;Adobe Edge Preview&lt;/a&gt;, HTML5 IDE&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.modernizr.com/'&gt;Modernizr&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/announcing-onslaught-arena-for-sale-in-the-go/'&gt;Chrome Web Store launch&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html'&gt;Gamepad API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://hughfdjackson.com/bbgcomp2/'&gt;BBGCOMP #2&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://pixieengine.com/projects/1439/fullscreen'&gt;Space Dolphin&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;You were played out by: &lt;a href='http://joshuamorse.bandcamp.com/track/madd-forest'&gt;Madd Forest&lt;/a&gt; by video game composer &lt;a href='http://jmflava.com/'&gt;Joshua Morse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for listening! If you have any HTML5 game development questions, please &lt;a href='mailto:hello@lostdecadegames.com'&gt;send them&lt;/a&gt; and we&amp;#8217;ll answer what we can.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lostcast Episode 6: A Wild Tom Appears</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-6-a-wild-tom-appears"/>
		<updated>2012-01-27T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-6-a-wild-tom-appears</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is our podcast about HTML5 games. In episode 6, we interview Tom Fairfield of Game Closure, the company that helped us launch Onslaught! on iPad and Android tablets.&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_6_a_wild_tom_appears.mp3' class='download-podcast'&gt;
	Download Lostcast episode 6 (27:47, 32MB)
&lt;/a&gt;
&lt;h2 id='show_notes'&gt;Show notes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.crunchbase.com/person/tom-fairfield'&gt;Tom Fairfield from Game Closure&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.getxc.org/'&gt;xcjs&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/onslaught_arena/'&gt;Onslaught!&lt;/a&gt; on &lt;a href='http://itunes.apple.com/us/app/onslaught!/id441426241?mt=8'&gt;iPad&lt;/a&gt; and &lt;a href='https://market.android.com/details?id=com.gameclosure.tealeaf&amp;amp;hl=en'&gt;Android tablets&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html'&gt;Web Audio API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://hashbbg.com/'&gt;#bbg&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://gameclosure.com/contact/'&gt;GC Contact Form&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.cuttherope.ie/'&gt;Cut the Rope in HTML5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for listening! If you have any HTML5 game development questions, please &lt;a href='mailto:hello@lostdecadegames.com'&gt;send them&lt;/a&gt; and we&amp;#8217;ll answer what we can.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lostcast Episode 5: Left 4 Questions</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-5-left-4-questions"/>
		<updated>2011-12-31T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-5-left-4-questions</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is our podcast about HTML5 games. In episode 5, we answer a list of questions sent in by Jarrod Oberto, one of our listeners. Here are the questions he sent us:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1) Setting your frame rate: So in the attached code I use setInterval(main, 20); Now I have an idea what this means but have not fully wrapped my head around it. I see in your tutorial you set this value to 1 (so it runs as fast as possible) and then control the speed with your &amp;#8220;modifier&amp;#8221; value? I tried your method and it killed my performance in Firefox. Could you explain the pros/cons in the two different techniques?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;2) HTML5 code Setup: As you can see, I have spilled all my code in to one file! Is this good? bad? Should each object go into a separate file? All tutorials I see have the code jammed in the same file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;3) Menu/Opening screen: Here I&amp;#8217;m talking the screen where you select the number of players or choose your car. Specifically how is the code organised? Is this code even in the &amp;#8220;game&amp;#8221; loop? it&amp;#8217;s own loop? no loop? Again, tutorials skip this and throw you straight in the game.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;4) Lastly, everything in the code attached is what I believe is correct. Therefore it may be completely wrong and I&amp;#8217;ll never know until someone better than me points out mistakes. If you do decide to have a post cast/blog about bringing your code to the next level, I&amp;#8217;m sure you will find plenty of fodder from my code!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Also, I used Logic Pro 9 (yay shiny new Xmas toy!) to edit this episode, and I&amp;#8217;m brand new to it, so please do let me know about any issues, like editing or volume woes.&lt;/em&gt;&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_5_left_4_questions.mp3' class='download-podcast'&gt;
	Download Lostcast episode 5 (41:11, 47MB)
&lt;/a&gt;
&lt;h2 id='show_notes'&gt;Show notes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='https://gist.github.com/1545853'&gt;Racing game source code&lt;/a&gt; by Jarrod Oberto&lt;/li&gt;

&lt;li&gt;Our &lt;a href='http://www.html5rocks.com/en/tutorials/casestudies/onslaught.html'&gt;HTML5 Rocks article&lt;/a&gt;, including a section on &lt;a href='http://www.html5rocks.com/en/tutorials/casestudies/onslaught.html#toc-time-based-modeling'&gt;time-based modeling&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://paulirish.com/2011/requestanimationframe-for-smart-animating/'&gt;requestAnimationFrame&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://impactjs.com/'&gt;Impact&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://richtaur.github.com/demos/spacius/'&gt;Spacius!&lt;/a&gt; &amp;#8211; &lt;a href='https://github.com/richtaur/richtaur.github.com/blob/master/demos/spacius/spacius.js'&gt;(source code)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for listening! If you have your own HTML5 game development questions, please &lt;a href='mailto:hello@lostdecadegames.com'&gt;send them&lt;/a&gt; and we&amp;#8217;ll answer what we can.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lostcast Episode 4: Native Coffee</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-4-native-coffee"/>
		<updated>2011-12-16T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-4-native-coffee</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is our podcast about HTML5 games. In episode 4, we talk about Native Client and other cool HTML5-related stuff. We also answer our first listener email! Check out the show notes for links.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: our apologies for the poorer-than-usual recording quality. You can hear a dude blowing leaves outside&amp;#8230; We&amp;#8217;ll find a quieter location.&lt;/em&gt;&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_4_native_coffee.mp3' class='download-podcast'&gt;
	Download Lostcast episode 4 (46:22, 41MB)
&lt;/a&gt;
&lt;h2 id='show_notes'&gt;Show notes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://code.google.com/p/nativeclient/'&gt;NaCl (Native Client)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://supergiantgames.com/?page_id=242'&gt;Bastion&lt;/a&gt; on the &lt;a href='https://chrome.google.com/webstore/detail/oohphhdkahjlioohbalmicpokoefkgid'&gt;Chrome Web Store&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://braid-game.com/'&gt;Braid&lt;/a&gt;, &lt;a href='http://operasoftware.github.com/Emberwind/'&gt;Emberwind&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.dartlang.org/'&gt;Dart language&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/'&gt;&amp;#8220;use strict&amp;#8221;;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://jashkenas.github.com/coffee-script/'&gt;CoffeeScript&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://ryanflorence.com/2011/2012/case-against-coffeescript/'&gt;A Case Against Using CoffeeScript&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://gist.github.com/1483998'&gt;$foo = (object) array();&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://wiki.mozilla.org/GamepadAPI'&gt;GamePad API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://2dboy.com/games.php'&gt;World of Goo&lt;/a&gt;, &lt;a href='http://www.popcap.com/games/plants-vs-zombies/online'&gt;Plants VS Zombies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for listening! Don&amp;#8217;t forget to &lt;a href='http://www.lostdecadegames.com/lostcast.xml'&gt;subscribe&lt;/a&gt; and &lt;a href='mailto:hello@lostdecadegames.com'&gt;feedback&lt;/a&gt; is super awesome.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lostcast Episode 3: Ramble On</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-3-ramble-on"/>
		<updated>2011-12-09T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-3-ramble-on</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is our podcast about HTML5 games. In episode 3, we ramble incoherently about ways to help lock down your HTML5 game&amp;#8217;s source code. You may notice that this episode is significantly shorter than the previous two: this is based on popular feedback from &lt;a href='https://twitter.com/#!/lostdecadegames'&gt;Twitter&lt;/a&gt;. Also based on feedback, we did not include background music this time around.&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_3_ramble_on.mp3' class='download-podcast'&gt;
	Download Lostcast episode 3 (24:39, 20MB)
&lt;/a&gt;
&lt;h2 id='show_notes'&gt;Show notes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/obfuscating-javascript-with-closure-compiler/'&gt;Code obfuscation&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.flashgamelicense.com/'&gt;Flash Game License&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostgarden.com/2010/02/steambirds-why-indie-games-are-good-for.html'&gt;Daniel Cook and Steambirds&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.sethladd.com/'&gt;Seth Ladd&lt;/a&gt; of Google, &lt;a href='https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih'&gt;Chrome Web Store&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.joystiq.com/2011/01/11/capcom-mobile-rips-off-splosion-man-for-maxplosion/'&gt;Capcom Mobile rips off &amp;#8216;Splosion Man for MaXplosion&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Got topic ideas? &lt;a href='mailto:hello@lostdecadegames.com'&gt;hello@lostdecadegames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for listening! Pretty soon we plan to play some HTML5 games and do some realtime reviews of them. If you have made or know about a game we should review, &lt;a href='http://www.lostdecadegames.com/contact/'&gt;contact us&lt;/a&gt;!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lostcast Episode 2: Code Like a Fox</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-2-code-like-a-fox"/>
		<updated>2011-11-25T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-2-code-like-a-fox</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is our podcast about HTML5 games. In episode 2, we talk with &lt;a href='http://twitter.com/#!/louisstow'&gt;Louis Stowasser&lt;/a&gt; about his game engine, &lt;a href='http://craftyjs.com/'&gt;Crafty&lt;/a&gt;, among many other things HTML5-game related. Have a listen!&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_2_code_like_a_fox.mp3' class='download-podcast'&gt;
	Download Lostcast episode 2 (55:03, 55MB)
&lt;/a&gt;
&lt;h2 id='mentioned_in_the_show'&gt;Mentioned in the show&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://craftyjs.com/'&gt;CraftyJS&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.sethladd.com/2011/09/mouse-lock-for-html5-fps-games.html'&gt;Mouse Lock API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://jlongster.com/2011/11/21/canvas.html'&gt;Fullscreen API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://jmflava.com/'&gt;Joshua Morse: game composer&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://contrasaur.us/'&gt;Contrasaurus&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://chrome.google.com/webstore/detail/ibghgpidpbpnhdgmncpbhioaohmgkigo'&gt;Boomstick: joystick Chrome extension&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://github.com/toji/gl-matrix'&gt;glMatrix&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.tojicode.com/2011/10/source-engine-levels-in-webgl-video.html'&gt;Team Fortress 2 in WebGL&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://github.com/mrdoob/three.js'&gt;three.js&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.glge.org/'&gt;GLGE&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://playbombada.appspot.com/'&gt;Bombada&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='irc://irc.freenode.net/#bbg'&gt;#bbg IRC channel&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://twitter.com/#!/sethladd/status/131255803696001024/photo/1'&gt;&amp;#8220;We love HTML5 games&amp;#8221;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://shrines.rpgclassics.com/genesis/shiningforce/zylo.shtml'&gt;Zylo is awesome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are new to this, so feedback is especially helpful. Thanks for listening!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lostcast Episode 1: Hello World</title>
		<link href="http://www.lostdecadegames.com/lostcast-episode-1-hello-world"/>
		<updated>2011-11-18T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/lostcast-episode-1-hello-world</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lostcast&lt;/strong&gt; is the name of our new podcast! In this first episode we introduce ourselves, chat a little bit about &lt;strong&gt;Lost Decade Games&lt;/strong&gt;, talk about the history of &lt;a href='/onslaught_arena/'&gt;Onslaught!&lt;/a&gt;, and discuss HTML5 games in general. We&amp;#8217;re not sure yet if it will be weekly, or monthly, or what. We&amp;#8217;ll figure that stuff out eventually.&lt;/p&gt;
&lt;a href='/media/lostcast/lostcast_episode_1_hello_world.mp3' class='download-podcast'&gt;
	Download Lostcast episode 1 (46:11, 45MB)
&lt;/a&gt;&lt;p class='subtext'&gt;
	(or &lt;a href='http://itunes.apple.com/us/podcast/lostcast/id481950724'&gt;subscribe via iTunes&lt;/a&gt;)
&lt;/p&gt;
&lt;h2 id='links_mentioned_in_the_show'&gt;Links mentioned in the show&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://richtaur.github.com/demos/spacius/'&gt;Spacius!&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://developer.mozilla.org/en/Canvas_tutorial'&gt;MDN Canvas documentation&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://goo.gl/f7PYe'&gt;Onslaught! is NOT the #1 Google search result :(&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/the-road-to-a-production-quality-html5-game-o/'&gt;Onslaught! launched on iPad July 11 2011&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://jmflava.com/'&gt;Joshua Morse does our music, he&amp;#8217;s great&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.mapeditor.org/'&gt;Tiled open source map editor&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.melonjs.org/'&gt;melonJS&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://reddit.com/r/gamedev/'&gt;/r/gamedev&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/'&gt;Simple Canvas Game tutorial on our blog&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.appmobi.com/'&gt;appMobi&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://gameclosure.com/'&gt;GameClosure&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.newgameconf.com/'&gt;New Game Conference&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lostdecadegames.com/contact/'&gt;We&amp;#8217;re hiring game artists, contact us!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for listening! Next week we&amp;#8217;ll hopefully be interviewing Louis Stowasser of &lt;a href='http://craftyjs.com/'&gt;Crafty&lt;/a&gt; fame. Tune in!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Free-to-use graphics made by my brother in 1996</title>
		<link href="http://www.lostdecadegames.com/free-to-use-graphics-made-by-my-brother-in-1996"/>
		<updated>2011-10-24T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/free-to-use-graphics-made-by-my-brother-in-1996</id>
		<content type="html">&lt;p&gt;I&amp;#8217;ve wanted to make an epic oldschool RPG for as long as I can remember. The first language I ever learned was QBASIC, which was about the worst environment for a huge RPG as I can imagine. But that didn&amp;#8217;t deter me, and I set to work on what I called DRAGON (pretty creative title, right?).&lt;/p&gt;

&lt;p&gt;Earlier this year I found some of my old QBASIC source code and began &lt;a href='http://richtaur.github.com/demos/QBASIC/'&gt;&amp;#8220;translating&amp;#8221; it to JavaScript&lt;/a&gt;. An unfinished version (of the unfinished game) is &lt;a href='http://richtaur.github.com/demos/DRAGON/'&gt;playable in your browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;During this process I was admiring my brother&amp;#8217;s artwork, which got me thinking that some game developers out there might like to have access to some fun little medieval fantasy sprites. So here they are, free to use in any project, commercial or otherwise:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/free_graphics_1996/DRAGON_by_Mike_Hackett_x3.png' alt='Sprites for DRAGON by Mike Hackett' /&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href='/media/images/posts/free_graphics_1996/DRAGON_by_Mike_Hackett.png'&gt;Download DRAGON spritesheet with black blackground&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='/media/images/posts/free_graphics_1996/DRAGON_by_Mike_Hackett_alpha.png'&gt;Download DRAGON spritesheet with alpha transparency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Also: It&amp;#8217;s not necessary of course, but if you do use them, I&amp;#8217;d love to see them in action. So send me your project and I&amp;#8217;ll check it out!&lt;/em&gt;&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Bootstrap your artistic abilities with pixels</title>
		<link href="http://www.lostdecadegames.com/bootstrap-your-artistic-abilities-with-pixels"/>
		<updated>2011-10-17T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/bootstrap-your-artistic-abilities-with-pixels</id>
		<content type="html">&lt;p&gt;So you want to make a game, but maybe there are hurdles blocking you. If you&amp;#8217;re a programmer like me, you can do everything yourself (to a point) but your game must at least have graphics! This is a problem.&lt;/p&gt;

&lt;p&gt;I submit that you &lt;em&gt;can&lt;/em&gt; do it yourself, whether you&amp;#8217;re artistically challenged or not. You just need to bolster your artistic skills with the help of our little friends, pixels. Let&amp;#8217;s get started!&lt;/p&gt;

&lt;h2 id='start_small'&gt;Start small&lt;/h2&gt;

&lt;p&gt;First, start with just two pixels. Open your favorite image editing program (or just grab a sheet of graph paper). Let&amp;#8217;s make this image 1x2, meaning two pixels tall and 1 pixel wide. (Yes, we are starting extremely basic.)&lt;/p&gt;

&lt;p&gt;Now try to draw a person. A man, a woman, or another little character for a game. My guess would be that most people will come up with something like this:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/1x2.png' alt='1x2 sprite' /&gt;
&lt;/div&gt;
&lt;p&gt;Almost everyone will draw the same thing because the limitations are so severe. Some people might make a completely clothed character or a completely naked character, like one of these:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/1x2_x2.png' alt='Two 1x2 sprites' /&gt;
&lt;/div&gt;
&lt;p&gt;But either way, they&amp;#8217;re very similar. Even the worst artist will make an image that will be strikingly similar to what the best artist would make under these limitations. This is an interestingly level playing field.&lt;/p&gt;

&lt;h2 id='kick_it_up_a_knotch'&gt;Kick it up a knotch&lt;/h2&gt;

&lt;p&gt;Now let&amp;#8217;s make the canvas a bit bigger and use a reference. For the sake of familiarty and clarity, let&amp;#8217;s look at an image of Link from &lt;a href='http://en.wikipedia.org/wiki/The_Legend_of_Zelda'&gt;The Legend of Zelda&lt;/a&gt;.&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/link.png' alt='Link from Legend of Zelda' /&gt;
&lt;/div&gt;
&lt;p&gt;Try to draw Link in a 4x4 grid. Your image might look something like this:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/link_4x4.png' alt='Link in 4x4 pixels' /&gt;
&lt;/div&gt;
&lt;p&gt;Some shape is starting to take form and now we&amp;#8217;re diverging a little from what other artists might make given the same limitations. But we&amp;#8217;re still close to the best of what can be done under these restrictions.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s double up. Here&amp;#8217;s my attempt at the previous Link image on an 8x8 canvas:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/link_8x8.png' alt='Link in 8x8 pixels' /&gt;
&lt;/div&gt;
&lt;p&gt;My guess is that this might be the sweet spot for many beginning artists to maximize what they can do under a given restriction. But even though you might be happy with your output at this resolution, you may be thinking that the limitation is too extreme to be creative and generate diverse graphics.&lt;/p&gt;

&lt;p&gt;Not so! Take a gander at these heavily-used &lt;a href='http://forums.tigsource.com/index.php?topic=8970.0'&gt;Creative Commons sprites&lt;/a&gt; that can be found in &lt;a href='https://github.com/richtaur/Valadria'&gt;little games&lt;/a&gt; all over the web:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/spritesheet_by_oryx.png' alt='Spritesheet by oryx' /&gt;
&lt;/div&gt;
&lt;p&gt;There is such a rich variety that the artist has exposed even with these extreme limitations. If we double up once more to 16x16, then truly the sky is the limit, as you can see in this amazing screenshot from &lt;a href='http://en.wikipedia.org/wiki/Final_Fantasy_VI'&gt;Final Fantasy VI&lt;/a&gt;, which employs 16x16 tiles:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/final_fantasy_vi.png' alt='Beautiful sprites from Final Fantasy VI' /&gt;
&lt;/div&gt;
&lt;p&gt;Here I&amp;#8217;ve added a 16x16 grid and enlarged a single tile to demonstrate where the boundaries are:&lt;/p&gt;
&lt;div class='full-frame'&gt;
	&lt;img src='/media/images/posts/bootstrap_pixels/final_fantasy_vi_with_grid.png' alt='This time with a 16x16 grid' /&gt;
&lt;/div&gt;
&lt;p&gt;Working even with 16x16 tiles (that&amp;#8217;s 256 pixels!) may be beyond the skill level of many developers looking to boostrap their own art. What I&amp;#8217;m trying to suggest is that there may be a comfort zone where you can produce decent pixel art &amp;#8211; at 8x8 or 12x12, or whatever feels good and you find acceptable.&lt;/p&gt;

&lt;p&gt;Many games feature amazing art that requires the skill and dedication that only natural talent and thousands of hours of practice can produce. But if you&amp;#8217;re an indie game developer, a hobbyist or if you just want to bang something out quickly, your art doesn&amp;#8217;t necessarily need to be that fancy. Maybe for now you can make do with what you&amp;#8217;ve got, empowered by the limitations of big, beautiful, blocky pixels.&lt;/p&gt;

&lt;h2 id='additional_resources'&gt;Additional resources&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://fileslap.com/2Rm/Depixelizing%20%20Pixel%20%20Art'&gt;Depixelizing Pixel Art&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://forums.tigsource.com/index.php?topic=16397.0'&gt;JWK5&amp;#8217;s Drawing Tips&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.firefruitforge.com/?tutorials/Pixel_Art'&gt;Pixel Art tutorials&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://gas13.ru/v3/tutorials/sywtbapa_almighty_grass_tile.php'&gt;So you want to be a pixel artist?&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.derekyu.com/?page_id=218'&gt;The Pixel Tutorial by Derek Yu&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.spriters-resource.com/'&gt;The Spriter&amp;#8217;s Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Got any additional tips? Please let me know in the comments!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lost Links: 10/14/2011</title>
		<link href="http://www.lostdecadegames.com/lost-links-10-14-2011"/>
		<updated>2011-10-14T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/lost-links-10-14-2011</id>
		<content type="html">&lt;p&gt;Enjoy this Friday&amp;#8217;s roundup of HTML5 gaming links!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://labs.dinahmoe.com/plink/'&gt;Plink: Web Audio API experiment&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.w3.org/2011/09/games/'&gt;Workshop on HTML.next for Games&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://developers.google.com/playn/'&gt;PlayN: Google&amp;#8217;s new cross-platform game engine&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.limejs.com/'&gt;LimeJS: HTML5 game framework for building native-experience games&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://egraether.com/mine3d/'&gt;Mine3D: 3D Minesweeper in WebGL&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://lights.elliegoulding.com/'&gt;Lights: An interactive music experience&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.gopherwoodstudios.com/2011/10/loading-html5-game-assets.html'&gt;Loading HTML5 Game Assets&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.ambiera.at/coppercube/demos/version3/dynamiclight/embedwebgl.html'&gt;WebGL Dungeon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That&amp;#8217;s all for this week. Feel free to point us at interesting HTML5 gaming content via Twitter (&lt;a href='https://twitter.com/#!/lostdecadegames'&gt;@lostdecadegames&lt;/a&gt;) or by emailing us at &lt;a href='hello@lostdecadegames.com'&gt;hello@lostdecadegames.com&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Onslaught! -- a history of violence (in images)</title>
		<link href="http://www.lostdecadegames.com/onslaught-a-history-of-violence-in-images"/>
		<updated>2011-10-10T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-a-history-of-violence-in-images</id>
		<content type="html">&lt;p&gt;&lt;a href='/onslaught_arena/'&gt;Onslaught!&lt;/a&gt; is a medieval fantasy arcade shoot &amp;#8216;em up. It was one of the very first commercial HTML5 games available to the world, launching on &lt;a href='/announcing-onslaught-arena-for-sale-in-the-go/'&gt;December 7, 2010&lt;/a&gt; with the Chrome Webstore and has since launched on &lt;a href='http://itunes.apple.com/us/app/onslaught!/id441426241'&gt;iPad&lt;/a&gt; and &lt;a href='https://market.android.com/details?id=com.gameclosure.tealeaf'&gt;Android tablets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HTML5 is taking off, the web is evolving, the Chrome Web Store is available in more countries than ever and one of these days we&amp;#8217;ll be announcing our next game, so I thought this would be as good a time as any to walk through Onslaught! and its near-successes. Here&amp;#8217;s a history of Onslaught!, in images:&lt;/p&gt;

&lt;h2 id='1_first_whiteboard'&gt;1. First whiteboard&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/01_first_whiteboard.jpg' alt='Onslaught!s first whiteboard' /&gt; Geoff and I spend a ton of time talking, scribbling, debating and planning before we write even a single line of code. This is the first of many whiteboards we scratched out while developing Onslaught!.&lt;/p&gt;

&lt;h2 id='2_early_environment_test'&gt;2. Early environment test&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/02_early_environment_test.png' alt='Early environment test' /&gt; We needed graphics but we didn&amp;#8217;t have any dedicated artist friends or extra money to spend. So I rolled up my sleeves, bought a &lt;a href='http://www.wacom.com/en/Products/Cintiq/Cintiq12WX.aspx'&gt;Cintiq tablet&lt;/a&gt; and drew out some tests to see if I could bang out the graphics myself.&lt;/p&gt;

&lt;h2 id='3_whiteboard_game_flow'&gt;3. Whiteboard: game flow&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/03_whiteboard_flow.jpg' alt='Whiteboard flow' /&gt; This was another early whiteboard, showing the flow of the menus and interface of the game.&lt;/p&gt;

&lt;h2 id='4_objects_test'&gt;4. Objects test&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/04_objects_test.png' alt='Objects test' /&gt; Here&amp;#8217;s another graphics test, this time for basic game objects. I think the mantra was &amp;#8220;good enough.&amp;#8221;&lt;/p&gt;

&lt;h2 id='5_couch_development'&gt;5. Couch development&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/05_ldg_making_onslaught.jpg' alt='Couch development' /&gt; This is a very typical setup for how we worked on Onslaught!. Some days we&amp;#8217;d leave &lt;a href='http://raptr.com/'&gt;work&lt;/a&gt; and head to Geoff&amp;#8217;s for some game design, other days (like in this photo) we&amp;#8217;d head to my place for gameplay tweaking on the big screen.&lt;/p&gt;

&lt;h2 id='6_whiteboard_enemy_statistics'&gt;6. Whiteboard: enemy statistics&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/06_whiteboard_enemy_stats.jpg' alt='Enemy statistics whiteboard' /&gt; We spent ridiculous amounts of time tweaking the damage, health, behavior and interaction of the enemies in Onslaught!, hoping to provide retro gamers with an experience that would feel polished, and familiar yet new.&lt;/p&gt;

&lt;h2 id='7_dragon_tests'&gt;7. Dragon tests&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/07_dragon_tests.png' alt='Dragon tests' /&gt; I think at some point I &lt;a href='/lava-background-sprite-creation-timelapse/'&gt;found my stride with graphics&lt;/a&gt;, and to me the dragon turned out really well (unlike the minotaur). Dragons of all colors are interesting and nostalgic to us, but in the end you can&amp;#8217;t beat the classic &amp;#8220;green dragon.&amp;#8221;&lt;/p&gt;

&lt;h2 id='8_google_internal_contest_poster'&gt;8. Google internal contest poster&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/08_google_contest_poster.png' alt='Google contest poster' /&gt; I&amp;#8217;m not sure that we ever publicly talked about this! As part of Google&amp;#8217;s internal promotion for the Chrome Webstore, they held a contest to see who could get the highest score in Onslaught!. The winner received an Amazon gift card. We later met with the best players to discuss issues with the game and how we could improve it for our players. Google intended to print these posters I made and put them around their campus. That never happened, but the experience was still invaluble.&lt;/p&gt;

&lt;h2 id='9_chrome_web_store_launch'&gt;9. Chrome Web Store launch&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/09_chrome_launch_wall.jpg' alt='Chrome Web Store launch' /&gt; As early adopters of the platform, we were invited to Google&amp;#8217;s big media event where they announced the Chrome Web Store and talked about Chrome OS. It was really exciting, as screenshots of Onslaught! could be found around the extravagant event, including this one (Onslaught! can be seen below the word &amp;#8220;Chrome&amp;#8221;).&lt;/p&gt;

&lt;h2 id='10_new_environments_test'&gt;10. New environments test&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/10_lol_beach_party.png' alt='New environments test' /&gt; We were planning on &lt;a href='/what-we-need-to-get-our-html5-game-on-ipad-sp/'&gt;bringing Onslaught! to iPad&lt;/a&gt;, and to help make the jump to a new platform successful, we wanted to add more content for gamers to enjoy. This was an early sketch of some ideas we had.&lt;/p&gt;

&lt;h2 id='11_sunken_city'&gt;11. Sunken City&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/11_sunken_city.png' alt='Sunken City' /&gt; And this is the final version of the beach scene that shipped with the updated game.&lt;/p&gt;

&lt;h2 id='12_demo_party'&gt;12. Demo party&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/12_demo_party.jpg' alt='Demo part' /&gt; As part of &lt;a href='/the-road-to-a-production-quality-html5-game-o/'&gt;working with Game Closure&amp;#8217;s SDK&lt;/a&gt;, they graciously threw a release party for Onslaught!. Many players showed up from &lt;a href='http://startx.stanford.edu/'&gt;StartX&lt;/a&gt; for catered food and a brand new gaming challenge. Much useful feedback was had, as well as some shouts of victory that was a real pleasure for us to experience firsthand.&lt;/p&gt;

&lt;h2 id='13_new_and_noteworthy'&gt;13. New and Noteworthy&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/13_ipad_new_and_noteworthy.png' alt='New and Noteworthy' /&gt; We were stoked to see Onslaught! in the &amp;#8220;New and Noteworthy&amp;#8221; section in the iPad App Store. We only saw a slight boost in sales, but it was still exciting.&lt;/p&gt;

&lt;h2 id='14_game_developer_magazine_screenshot'&gt;14. Game Developer Magazine screenshot&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/14_game_developer_magazine.jpg' alt='Game Developer Magazine screenshot' /&gt; One of the biggest thrills of my life was reading through &lt;a href='http://www.gdmag.com/homepage.htm'&gt;Game Developer Magazine&lt;/a&gt; and seeing a screenshot of our game. Sure it&amp;#8217;s just a little mention, but you gotta start somewhere. I&amp;#8217;m so proud I framed it and put it on my wall.&lt;/p&gt;

&lt;h2 id='15_onslaught_on_ipad'&gt;15. Onslaught! on iPad&lt;/h2&gt;

&lt;p&gt;&lt;img src='/media/images/posts/onslaught_history_in_images/15_ipad_stage_select.png' alt='Onslaught! on iPad' /&gt; And here&amp;#8217;s the latest version of Onslaught!, at the Stage Select screen. It&amp;#8217;s been a long journey, and we&amp;#8217;re very proud of our little game.&lt;/p&gt;

&lt;h2 id='so_whats_next'&gt;So what&amp;#8217;s next?&lt;/h2&gt;

&lt;p&gt;We&amp;#8217;re not totally sure just yet, but we&amp;#8217;ll be announcing something soon. Stay tuned, and thanks for reading.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lost Links: 10/7/2011</title>
		<link href="http://www.lostdecadegames.com/lost-links-10-07-2011"/>
		<updated>2011-10-07T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/lost-links-10-07-2011</id>
		<content type="html">&lt;p&gt;Happy Friday! Check out our HTML5 gaming links for this week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://coding.smashingmagazine.com/2011/10/04/quick-look-math-animations-javascript/'&gt;A Quick Look Into The Math Of Animations With JavaScript&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.olegkikin.com/audio/audio.html'&gt;HTML5 Expression-Based Music Generation Tool&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.html5rocks.com/en/mobile/optimization-and-performance.html'&gt;HTML5 Techniques for Optimizing Mobile Performance&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://alteredqualia.com/three/examples/webgl_cars.html'&gt;WebGL Cars&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.dottech.nl/raycaster/'&gt;A Wolf3D-esque HTML5 Raycaster&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.chromeexperiments.com/detail/wormz/'&gt;Wormz (a Chrome Experiment)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.tojicode.com/2011/10/source-engine-levels-in-webgl-video.html'&gt;Source Engine Levels in WebGL: Video + Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That&amp;#8217;s all for this week. Feel free to point us at interesting HTML5 gaming content via Twitter (&lt;a href='https://twitter.com/#!/lostdecadegames'&gt;@lostdecadegames&lt;/a&gt;) or by emailing us at &lt;a href='hello@lostdecadegames.com'&gt;hello@lostdecadegames.com&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Audia is a library for simplifying the Web Audio API</title>
		<link href="http://www.lostdecadegames.com/audia-is-a-library-for-simplifying-the-web-audio-api"/>
		<updated>2011-10-05T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/audia-is-a-library-for-simplifying-the-web-audio-api</id>
		<content type="html">&lt;p&gt;After receiving numerous &lt;a href='https://twitter.com/#!/lostdecadegames'&gt;requests on Twitter&lt;/a&gt;, I started working on a tutorial for playing sound in HTML5. You may have read about &lt;a href='http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio'&gt;previous frustrations with Audio&lt;/a&gt; from the HTML5 developer community, and when I dug in recently, the situation was all-too familiar.&lt;/p&gt;

&lt;h2 id='wrong_tool_for_the_job'&gt;Wrong tool for the job&lt;/h2&gt;

&lt;p&gt;In the latest version of Chrome, sound playback was unreliable, bits and pieces were missing from the API, and things just did not work as expected. Safari faired better, but it still felt like &lt;code&gt;Audio&lt;/code&gt; was not ready for prime time. However, I think the problem was more of using the wrong tool for the job. Games need responsive, reliable, sometimes even dynamic sound playback, and because of this, &lt;code&gt;Audio&lt;/code&gt; is not the best choice for game development.&lt;/p&gt;

&lt;p&gt;A good way to think about it is by comparing the &lt;code&gt;Image&lt;/code&gt; and &lt;code&gt;Audio&lt;/code&gt; tags. Both are simple HTML elements that really just want &lt;code&gt;src&lt;/code&gt; attributes, from which they&amp;#8217;ll fetch the media and display it in the document. For advanced image manipulation, &lt;code&gt;Canvas&lt;/code&gt; is used, and for advanced audio manipulation, &lt;code&gt;AudioContext&lt;/code&gt; can be used.&lt;/p&gt;

&lt;h2 id='enter_the_web_audio_api'&gt;Enter the Web Audio API&lt;/h2&gt;

&lt;p&gt;It turns out, the Web Audio API is here today and it is pretty badass. (By &amp;#8220;here today&amp;#8221; I really just mean Chrome, but it exists and works great even in the &lt;a href='http://www.chromium.org/getting-involved/dev-channel'&gt;stable channel&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;Just about the only documentation I could find was the &lt;a href='https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html'&gt;W3C Working Draft&lt;/a&gt;, but this was enough to meet feature parity with &lt;code&gt;Audio&lt;/code&gt;. Fair warning to developers looking to toy around with it: &lt;strong&gt;the API is extremely low-level&lt;/strong&gt; and cumbersome to use (but quite fun if that floats your boat!).&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s what it takes to simply load up a sound file and play it:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;AudioContext&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;function&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;AudioContext&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt; &lt;span class='k'&gt;else&lt;/span&gt; &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;webkitAudioContext&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;function&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;webkitAudioContext&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;source&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;createBufferSource&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nx'&gt;source&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;connect&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;audioContext&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;destination&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;xhr&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;XMLHttpRequest&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;open&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;your_sound_file.mp3&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='kc'&gt;true&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;responseType&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;arraybuffer&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;onload&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;buffer&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;createBuffer&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;response&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='kc'&gt;false&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
	&lt;span class='nx'&gt;source&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;buffer&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;buffer&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
	&lt;span class='nx'&gt;source&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;noteOn&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;};&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;send&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;That&amp;#8217;s a lot of code! Let&amp;#8217;s walk through it.&lt;/p&gt;

&lt;h3 id='1_create_an_instance_of_audiocontext'&gt;1. Create an instance of AudioContext&lt;/h3&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;AudioContext&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;function&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;AudioContext&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt; &lt;span class='k'&gt;else&lt;/span&gt; &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;typeof&lt;/span&gt; &lt;span class='nx'&gt;webkitAudioContext&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;function&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;webkitAudioContext&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Since this is bleeding-edge technology, we can&amp;#8217;t guarantee that &lt;code&gt;AudioContext&lt;/code&gt; exists. Indeed, Chrome currently has the &lt;code&gt;webkitAudioContext&lt;/code&gt; object (an experimental implementation). So before we can create a new instance we first have to check to see what we have available.&lt;/p&gt;

&lt;h3 id='2_create_a_buffer_source_and_connect_it_to_the_audio_output'&gt;2. Create a buffer source and connect it to the audio output&lt;/h3&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;source&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;createBufferSource&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nx'&gt;source&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;connect&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;audioContext&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;destination&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;We request to create a buffer source and store it in the &lt;code&gt;source&lt;/code&gt; variable. Then we connect the source to the audio context&amp;#8217;s &lt;code&gt;destination&lt;/code&gt; property, which will hopefully be our computer&amp;#8217;s speakers!&lt;/p&gt;

&lt;h3 id='3_fetch_the_mp3_file'&gt;3. Fetch the mp3 file&lt;/h3&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;xhr&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;XMLHttpRequest&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;open&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;your_sound_file.mp3&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='kc'&gt;true&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;responseType&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;arraybuffer&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;onload&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='c1'&gt;// See step 4&lt;/span&gt;
&lt;span class='p'&gt;};&lt;/span&gt;
&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;send&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This might be a tad unexpected for JavaScript programmers who are accustomed to simply setting a property on an HTML node (for example. &lt;code&gt;myAudio.src = &amp;quot;my_sound.mp3&amp;quot;;&lt;/code&gt;), but to fetch our sound file we need to do it via an &lt;code&gt;XMLHttpRequest&lt;/code&gt; object. This is basic AJAXy stuff, aside from needing to set &lt;code&gt;responseType&lt;/code&gt; to &amp;#8220;arraybuffer&amp;#8221;.&lt;/p&gt;

&lt;h3 id='4_create_the_sound_buffer_and_play_the_sound'&gt;4. Create the sound buffer and play the sound&lt;/h3&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;buffer&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;audioContext&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;createBuffer&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;xhr&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;response&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='kc'&gt;false&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nx'&gt;source&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;buffer&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;buffer&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='nx'&gt;source&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;noteOn&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This code makes up the contents of the above &lt;code&gt;XMLHttpRequest&lt;/code&gt; object&amp;#8217;s &lt;code&gt;onload&lt;/code&gt; method. First we create a buffer, passing in the XHR response and &lt;code&gt;false&lt;/code&gt;. (That second parameter is &amp;#8220;mixToMono&amp;#8221;, and we don&amp;#8217;t necessarily want our sound in mono, so we pass in &lt;code&gt;false&lt;/code&gt;.) This buffer gets passed to the source by setting its &lt;code&gt;buffer&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;Next, there&amp;#8217;s a call to the odd method &lt;code&gt;noteOn&lt;/code&gt;. In simpler English, this would be &lt;code&gt;play&lt;/code&gt;, but what is going on behind the scenes is much more complicated. The argument represents the time (in seconds) to begin playback. To make our playback begin immediately, we pass &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Pretty involved just to play a sound, right? But the reward is well worth it, because now we have low-level access to our computer&amp;#8217;s sound and can implement &lt;a href='http://chromium.googlecode.com/svn/trunk/samples/audio/'&gt;all kinds of goodies&lt;/a&gt; like panning, filters and other neat effects.&lt;/p&gt;

&lt;h2 id='introducing_audia'&gt;Introducing Audia&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;a href='/demos/audia/examples/'&gt;Jump straight to the demo?&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;While experimenting with this new API, I quickly discovered that a library to abstract away all this complication would be nice to have, so I wrote one. Here is what I call &lt;a href='https://github.com/richtaur/audia'&gt;Audia&lt;/a&gt;, which implements a very &lt;a href='https://github.com/richtaur/audia#readme'&gt;straightforward API&lt;/a&gt; while still providing some of the power of the Web Audio API. Here&amp;#8217;s an example of how it can be used:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;!&lt;/span&gt;&lt;span class='nx'&gt;Audia&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;supported&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='nx'&gt;alert&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;Oops, no AudioContext object found ...&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;attackSound&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;Audia&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nx'&gt;attackSound&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;onload&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='kd'&gt;function&lt;/span&gt; &lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='nx'&gt;attackSound&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;play&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='p'&gt;};&lt;/span&gt;
&lt;span class='nx'&gt;attackSound&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;src&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;audio/demoblin_attacks.mp3&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Or alternatively:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;backgroundMusic&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;Audia&lt;/span&gt;&lt;span class='p'&gt;({&lt;/span&gt;
	&lt;span class='nx'&gt;src&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;sewers.mp3&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
	&lt;span class='nx'&gt;loop&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='kc'&gt;true&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
	&lt;span class='nx'&gt;volume&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mf'&gt;0.5&lt;/span&gt;
&lt;span class='p'&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Audio (especially as pertains to video games) is a little hobby of mine, so you can bet I&amp;#8217;ll be exposing more of the power behind the Web Audio API to &lt;a href='https://github.com/richtaur/audia'&gt;Audia&lt;/a&gt;&amp;#8217;s simple interface. So do &lt;a href='/demos/audia/examples/'&gt;check out the demo&lt;/a&gt; and let me know in the comments about any issues, feature requests, etc.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lost Links: 9/30/2011</title>
		<link href="http://www.lostdecadegames.com/lost-links-09-30-2011"/>
		<updated>2011-09-30T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/lost-links-09-30-2011</id>
		<content type="html">&lt;p&gt;HTML5 gaming links for this week! Also, if you&amp;#8217;re interested in chatting about HTML5 game dev, Matt and I are hanging out in #bbg on Freenode IRC. Drop in and say hello to zylo (Geoff) and richtaur (Matt)!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.sencha.com/blog/ie10-preview-html5-first-look/'&gt;IE10 Preview: HTML5 First Look&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.sethladd.com/2011/09/mouse-lock-for-html5-fps-games.html'&gt;Mouse Lock for HTML5 FPS games&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.gopherwoodstudios.com/2011/09/html5-appcache-and-keeping-clients.html'&gt;HTML5 AppCache and Keeping Clients Updated&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.pusher.com/2011/9/26/ongamestart-a-bright-future-for-html5-games'&gt;onGameStart: a bright future for HTML5 games&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.tojicode.com/2011/09/state-of-javascript-fullscreen-api.html'&gt;The state of the Javascript Fullscreen API&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://fleetingfantasy.com/game-list'&gt;Fleeting Fantasy #bbg Game List&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.newgameconf.com/'&gt;New Game - The conference for HTML5 game developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That&amp;#8217;s all for this week. Feel free to point us at interesting HTML5 gaming content via Twitter (&lt;a href='https://twitter.com/#!/lostdecadegames'&gt;@lostdecadegames&lt;/a&gt;) or by emailing us at &lt;a href='hello@lostdecadegames.com'&gt;hello@lostdecadegames.com&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Blog author attribution using Jekyll</title>
		<link href="http://www.lostdecadegames.com/blog-author-attribution-using-jekyll"/>
		<updated>2011-09-26T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/blog-author-attribution-using-jekyll</id>
		<content type="html">&lt;p&gt;Since &lt;a href='http://www.lostdecadegames.com/our-new-blog-is-running-on-jekyll/'&gt;converting our website/blog to use Jekyll&lt;/a&gt; we&amp;#8217;ve had a chance to dig a bit deeper into the usage of the framework. One of the first features we tackled was author attribution in blog posts. In this post I&amp;#8217;ll cover our approach in detail.&lt;/p&gt;

&lt;p&gt;Our goal was to display, at the very least, the author&amp;#8217;s name and &lt;a href='http://en.gravatar.com/'&gt;Gravatar&lt;/a&gt; on each blog post. Originally, we hard-coded these values in the &lt;a href='https://github.com/mojombo/jekyll/wiki/yaml-front-matter'&gt;YAML Front Matter&lt;/a&gt;. For example:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='yaml'&gt;&lt;span class='nn'&gt;---&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;layout&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;post&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;title&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;Catchy blog post title&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;post_author&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;Geoff Blair&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;post_gravatar&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;76dbcc74021b8039f14c7b583978b56d&lt;/span&gt;
&lt;span class='nn'&gt;---&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;This is the post content.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Rendering this data was very straightforward:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='html'&gt;&lt;span class='nt'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;post&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;meta&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;img&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;http://www.gravatar.com/avatar/{{ page.post_gravatar }}?s=40&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;span&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;author&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;{{ page.post_author }}&lt;span class='nt'&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	{{ content }}
&lt;span class='nt'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This approach worked decently but has some obvious drawbacks. We found ourselves opening previous blog posts by the desired author and copy/pasting the author data into a new file. While this doesn&amp;#8217;t take up an extraordinary amount of time, there certainly had to be a more elegant solution.&lt;/p&gt;

&lt;p&gt;Ideally, specifying an author would be as simple as adding a key &lt;code&gt;author: geoff&lt;/code&gt; or &lt;code&gt;author: matt&lt;/code&gt; to a blog post and looking up the rest of the info defined elsewhere.&lt;/p&gt;

&lt;p&gt;After some reading the &lt;a href='https://github.com/mojombo/jekyll/wiki/Template-Data'&gt;Jekyll wiki page on Template Data&lt;/a&gt; I found that Jekyll exposes anything in &lt;code&gt;_config.yml&lt;/code&gt; through the &lt;code&gt;site&lt;/code&gt; variable:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As of 0.5.2, all data inside of your &amp;#95;config.yml is now available through the site variable. So for example, if you have url: http://mysite.com in your configuration file, then in your posts and pages it can be used like so: {{ site.url }}.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With that in mind, I created a data structure in &lt;code&gt;_config.yml&lt;/code&gt; to represent post authors:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='yaml'&gt;&lt;span class='l-Scalar-Plain'&gt;authors&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;matt&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;display_name&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;Matt Hackett&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;gravatar&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;60fd5218fff6927c0ed376cce01c5460&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;email&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;matt@lostdecadegames.com&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;web&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;http://www.richtaur.com/&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;twitter&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;richtaur&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;github&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;richtaur&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;geoff&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;display_name&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;Geoff Blair&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;gravatar&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;76dbcc74021b8039f14c7b583978b56d&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;email&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;geoff@lostdecadegames.com&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;web&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;http://www.geoffblair.com/&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;twitter&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;geoffblair&lt;/span&gt;
    &lt;span class='l-Scalar-Plain'&gt;github&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;geoffb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Rendering author information is almost as easy as before, we just need to grab a reference to the current author&amp;#8217;s data in our post template:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='html'&gt;{% assign author = site.authors[page.author] %}
&lt;span class='nt'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;post&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;meta&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;img&lt;/span&gt; &lt;span class='na'&gt;src=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;http://www.gravatar.com/avatar/{{ author.gravatar }}?s=40&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;span&lt;/span&gt; &lt;span class='na'&gt;class=&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;author&amp;quot;&lt;/span&gt;&lt;span class='nt'&gt;&amp;gt;&lt;/span&gt;{{ author.display_name }}&lt;span class='nt'&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	{{ content }}
&lt;span class='nt'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Nice and clean!&lt;/p&gt;

&lt;p&gt;Another benefit of this setup is that we can use the author data elsewhere, too. Take a look at &lt;a href='https://github.com/lostdecade/lostdecade.github.com/blob/master/contact/index.html'&gt;the source for our &amp;#8220;Contact Us&amp;#8221; page&lt;/a&gt; for an example.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re pretty happy with this approach. Let us know on &lt;a href='https://twitter.com/#!/lostdecadegames'&gt;Twitter&lt;/a&gt; or by &lt;a href='mailto:hello@lostdecadegames.com'&gt;email&lt;/a&gt; if you know of a better way!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Lost Links: 9/23/2011</title>
		<link href="http://www.lostdecadegames.com/lost-links-09-23-2011"/>
		<updated>2011-09-23T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/lost-links-09-23-2011</id>
		<content type="html">&lt;p&gt;Welcome to the first installment of Lost Links, a weekly round-up of HTML5 gaming related links.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.phoboslab.org/ogs2011/#1'&gt;Survival Guide to HTML5&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://creativejs.com/2011/09/box2d-javascript-tutorial-series-by-seth-ladd/'&gt;Box2D &amp;#38; JavaScript tutorials by Seth Ladd&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://massively.joystiq.com/2011/09/20/mmobility-illyriad-devs-shine-light-on-html5/'&gt;MMObility: Illyriad devs shine light on HTML5&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://blog.betable.com/hacking-game-boundaries-the-html5-revolution'&gt;Hacking Game Boundaries: The HTML5 Revolution&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://smus.com/game-asset-loader'&gt;Loading Large Assets in Modern HTML5 Games&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That&amp;#8217;s all for this week. Feel free to point us at interesting HTML5 gaming content via Twitter (&lt;a href='https://twitter.com/#!/lostdecadegames'&gt;@lostdecadegames&lt;/a&gt;) or by emailing us at &lt;a href='hello@lostdecadegames.com'&gt;hello@lostdecadegames.com&lt;/a&gt;.&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Our new blog is running on Jekyll</title>
		<link href="http://www.lostdecadegames.com/our-new-blog-is-running-on-jekyll"/>
		<updated>2011-09-12T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/our-new-blog-is-running-on-jekyll</id>
		<content type="html">&lt;p&gt;Welcome to our new website! As web developers, we&amp;#8217;ve been aware that our site has been a bit &amp;#8230; sad? For entirely too long now. So we rolled up our sleeves, made a brand new design and moved our blog off of &lt;a href='http://posterous.com/'&gt;Posterous&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='whats_different'&gt;What&amp;#8217;s different?&lt;/h2&gt;

&lt;p&gt;Our new site is hosted via &lt;a href='http://pages.github.com/'&gt;GitHub Pages&lt;/a&gt; and is powered by &lt;a href='https://github.com/mojombo/jekyll'&gt;Jekyll&lt;/a&gt; &amp;#8211; a &amp;#8220;blog-aware, static site generator.&amp;#8221; There are several benefits to this setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jekyll compiles the site once and then only static html files are served making page load times very fast.&lt;/li&gt;

&lt;li&gt;We can deploy changes or make new posts just by committing to the &lt;a href='https://github.com/lostdecade/lostdecade.github.com'&gt;GitHub repo&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Better &lt;a href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt; support which makes Geoff especially happy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to the above changes we&amp;#8217;re using &lt;a href='http://lesscss.org/'&gt;LESS&lt;/a&gt; to write cleaner and more easily maintained CSS.&lt;/p&gt;

&lt;p&gt;It looks like we&amp;#8217;re not the only ones migrating our site to GitHub Pages, either. Check out &lt;a href='http://developmentseed.org/blog/2011/09/09/jekyll-github-pages/'&gt;this article from Development Seed&lt;/a&gt; for some great tips on using Jeykll.&lt;/p&gt;

&lt;h2 id='more_organized_github_repos'&gt;More organized GitHub repos&lt;/h2&gt;

&lt;p&gt;Our demos and code samples used to all be thrown into our public &lt;a href='https://github.com/lostdecade/lostdecade.github.com'&gt;lostdecade.github.com&lt;/a&gt; repo, but this made for awkward forking and wasn&amp;#8217;t very clean. Now we&amp;#8217;ve made separate repos for our demos including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='https://github.com/lostdecade/analog_sticks'&gt;Analog Sticks&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://github.com/lostdecade/simple_canvas_game'&gt;Simple HTML5 Canvas Game&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So fork, fork away!&lt;/p&gt;

&lt;h2 id='so_long_comments'&gt;So long, comments!&lt;/h2&gt;

&lt;p&gt;We mourn the loss of our comments. Thank you to all who contributed to discussions on our blog, but we hope that moving forward, relying on social networks for interaction with our fans and readers will be adequate. As always, please feel free to &lt;a href='/contact/'&gt;email us&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='more_stuff_coming_soon'&gt;More stuff coming soon&lt;/h2&gt;

&lt;p&gt;We&amp;#8217;ll be making a more substantial page for &lt;a href='/onslaught_arena/'&gt;Onslaught!&lt;/a&gt;, designing an actual title, and fixing any issues that may arise. What do you think? Do you have a setup for your website that&amp;#8217;s similar to ours? Let us know on &lt;a href='https://twitter.com/#!/lostdecadegames'&gt;Twitter&lt;/a&gt;!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>How to make a simple HTML5 Canvas game</title>
		<link href="http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game"/>
		<updated>2011-08-29T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game</id>
		<content type="html">&lt;p&gt;
	Since releasing &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena/&quot;&gt;Onslaught! Arena&lt;/a&gt;,
	I've had many requests for a very basic tutorial on how to make a simple game in canvas.
	After pondering for some time how to best approach this complex subject,
	I decided just to put together the &lt;em&gt;very simplest&lt;/em&gt; game I can imagine and walk through it practically line-by-line.
&lt;/p&gt;

&lt;p&gt;
	So here it is!
	Let's jump right in by walking through
	&lt;a href=&quot;https://github.com/lostdecade/simple_canvas_game/blob/master/js/game.js&quot;&gt;game.js&lt;/a&gt;.
	You can also &lt;a href=&quot;http://www.lostdecadegames.com/demos/simple_canvas_game/&quot;&gt;play the game right here&lt;/a&gt;.
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/6084194152/in/photostream&quot;&gt;
	&lt;img alt=&quot;Simple game using Onslaught! graphics&quot; src=&quot;http://farm7.static.flickr.com/6203/6084194152_35c3e3ba34_z.jpg&quot;&gt;
&lt;/a&gt;

&lt;h2&gt;1. Create the canvas&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Create the canvas&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;canvas&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;2d&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;480&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	The first thing we need to do is create a
	&lt;a href=&quot;https://developer.mozilla.org/en/canvas_tutorial&quot;&gt;canvas element&lt;/a&gt;.
	I did this in JavaScript instead of HTML to demonstrate how easily it is accomplished.
	Once we have the element we get a reference to its context,
	set its dimensions and append it to the document's body.
&lt;/p&gt;

&lt;h2&gt;2. Include images&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Background image&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bgReady&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bgImage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;bgImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;bgReady&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;bgImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;src&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;images/background.png&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	A game needs graphics! So let's load up some images.
	I wanted to do this as simply as possible so it's just an &lt;code&gt;Image&lt;/code&gt; instead of being wrapped up in a nice Class or something.
	&lt;code&gt;bgReady&lt;/code&gt; is used to let the canvas
	know when it's safe to draw it, as trying to
	&lt;a href=&quot;http://stackoverflow.com/questions/2923564/uncaught-error-index-size-err&quot;&gt;render it before it's loaded will throw a DOM error&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	We do this for each of the three graphics we need:
	&lt;a href=&quot;https://github.com/lostdecade/simple_canvas_game/blob/master/images/background.png&quot;&gt;background&lt;/a&gt;,
	&lt;a href=&quot;https://github.com/lostdecade/simple_canvas_game/blob/master/images/hero.png&quot;&gt;hero&lt;/a&gt;
	and &lt;a href=&quot;https://github.com/lostdecade/simple_canvas_game/blob/master/images/monster.png&quot;&gt;monster&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;3. Game objects&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Game objects&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;speed&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// movement in pixels per second&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monstersCaught&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	Now we define some variables we'll need to use later.
	&lt;code&gt;hero&lt;/code&gt; gets setup with &lt;code&gt;speed&lt;/code&gt; which is how fast it'll move in pixels per second.
	&lt;code&gt;monster&lt;/code&gt; won't move so it just has coordinates.
	Lastly, &lt;code&gt;monstersCaught&lt;/code&gt; stores the number of monsters the player has caught.
&lt;/p&gt;

&lt;h2&gt;4. Player input&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Handle keyboard controls&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;keydown&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keyCode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;keyup&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keyCode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	Now for input handling.
	This is probably the first part that will trip up developers who come from a web development background.
	The important thing to remember is that we don't necessarily want to react to an input event right when it happens.
	In the web stack, it may be appropriate to begin animating or requesting data right when the user initiates input.
	But in this flow, we want our game's logic to live solely in once place to retain tight control over when and if things happen.
	For that reason we just want to store the user input for later.
&lt;/p&gt;

&lt;p&gt;
	To accomplish this we simply have a variable &lt;code&gt;keysDown&lt;/code&gt; which stores any event's &lt;code&gt;keyCode&lt;/code&gt;.
	If a key code is in the object, the user is currently depressing that key. Simple!
&lt;/p&gt;

&lt;h2&gt;5. New game&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Reset the game when the player catches a monster&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reset&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;c1&quot;&gt;// Throw the monster somewhere on the screen randomly&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;canvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	The &lt;code&gt;reset&lt;/code&gt; function is called to begin a new game, or level, or whatever you'd like to call it.
	It places the hero (the player) in the center of the screen and the monster somewhere randomly.
&lt;/p&gt;

&lt;h2&gt;6. Update objects&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Update game objects&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;modifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Player holding up&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speed&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;modifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Player holding down&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speed&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;modifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Player holding left&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speed&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;modifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keysDown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Player holding right&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speed&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;modifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;c1&quot;&gt;// Are they touching?&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;monstersCaught&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;reset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	This is the &lt;code&gt;update&lt;/code&gt; function and is called every single interval execution.
	The first thing it does is checks the up, down, left and right arrow keys to see if the user has pressed them.
	If so, the hero is moved in the corresponding direction.
&lt;/p&gt;

&lt;p&gt;
	What may seem odd is the &lt;code&gt;modifier&lt;/code&gt; argument passed into &lt;code&gt;update&lt;/code&gt;.
	You'll see how this is referenced in the &lt;code&gt;main&lt;/code&gt; function, but let me first explain it here.
	&lt;code&gt;modifier&lt;/code&gt; is a time-based number based on 1.
	If exactly one second has passed, the value will be 1 and the hero's speed will be multiplied by 1, meaning he will have moved 256 pixels in that second.
	If one half of a second has passed, the value will be 0.5 and the hero will have moved half of his speed in that amount of time.
	And so forth.
	This function gets called so rapidly that the &lt;code&gt;modifier&lt;/code&gt; value will typically be very low,
	but using this pattern will ensure that the hero will move the same speed no matter how fast (or slowly) the script is running.
&lt;/p&gt;

&lt;p&gt;
	Now that we've moved the hero according to the player's input, we can check to see what happened with that movement.
	If there was a collision with the hero and monster, that's it! That's pretty much the game.
	We tally the score (+1 to &lt;code&gt;monstersCaught&lt;/code&gt;) and reset the game.
&lt;/p&gt;

&lt;h2&gt;7. Render objects&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Draw everything&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bgReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;drawImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bgImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;heroReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;drawImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;heroImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;monsterReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;drawImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;monsterImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;c1&quot;&gt;// Score&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fillStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;rgb(250, 250, 250)&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;font&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;24px Helvetica&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;textAlign&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;left&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;textBaseline&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;top&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fillText&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Goblins caught: &amp;quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;monstersCaught&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	Games are more fun when you get to see the action going down, so let's draw everything to the screen.
	First we take the background image and
	&lt;a href=&quot;https://developer.mozilla.org/en/Canvas_tutorial/Using_images&quot;&gt;draw it to the canvas&lt;/a&gt;.
	Repeat for the hero and monster.
	&lt;em&gt;Note that the order is important, as any image drawn to the surface will be drawn over the pixels under it.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
	Next we change some properties on the context related to how to draw the font, and we make a call to &lt;code&gt;fillText&lt;/code&gt; to display the player's score.
	As we don't have any complicated animations or movement, we're done drawing.
&lt;/p&gt;

&lt;h2&gt;8. The main game loop&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// The main game loop&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;main&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;now&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;now&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;nx&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

	&lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	The main game loop is what controls the flow of the game.
	First we want to get the current timestamp so we can calculate the delta (how many milliseconds have passed since the last interval).
	We get the modifier to send to &lt;code&gt;update&lt;/code&gt; by dividing by 1000 (the number of milliseconds in one second).
	Then we call &lt;code&gt;render&lt;/code&gt; and record the timestamp.
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;
	See also the
	&lt;a href=&quot;http://www.html5rocks.com/en/tutorials/casestudies/onslaught.html#toc-the-game-loop&quot;&gt;Onslaught! Arena Case Study&lt;/a&gt;
	for more on game loops.
&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;9. Start the game!&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Let&amp;#39;s play this game!&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;reset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;setInterval&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Execute as fast as possible&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	Almost there, this is the last code snippet!
	First we call &lt;code&gt;reset&lt;/code&gt; to start a new game/level.
	(Remember that this centers the hero and places the monster randomly for the player to find.)
	Then we seed our timestemp (with the variable &lt;code&gt;then&lt;/code&gt;) and start the interval.
&lt;/p&gt;

&lt;p&gt;
	Congraulations! You now (hopefully!) understand the basic fundamentals of game development using the canvas element in JavaScript.
	Try it out on your own!
	&lt;a href=&quot;http://www.lostdecadegames.com/demos/simple_canvas_game/&quot;&gt;Play the game&lt;/a&gt; or
	&lt;a href=&quot;https://github.com/lostdecade/simple_canvas_game&quot;&gt;fork&lt;/a&gt; the code on GitHub and get started hacking.
&lt;/p&gt;

&lt;h2&gt;Got feedback?&lt;/h2&gt;

&lt;p&gt;
	What did you think of this tutorial?
	Was it helpful? Too slow, too fast, too technical, not technical enough?
	Please let me know and I'll try to improve the next tutorial!
	Be sure to &lt;a href=&quot;http://twitter.com/#!/lostdecadegames&quot;&gt;follow us on Twitter&lt;/a&gt; to know right when the next tutorial is available.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Analog thumb sticks for iOS using HTML5</title>
		<link href="http://www.lostdecadegames.com/analog-thumb-sticks-for-ios-using-html5"/>
		<updated>2011-08-05T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/analog-thumb-sticks-for-ios-using-html5</id>
		<content type="html">&lt;h2&gt;From mouse and keyboard to analog thumb sticks&lt;/h2&gt;
&lt;p&gt;You may have read before about some of the &lt;a href=&quot;http://www.lostdecadegames.com/what-we-need-to-get-our-html5-game-on-ipad-sp&quot;&gt;difficulties of porting Onslaught! to iOS&lt;/a&gt;. The first major hurdle we had to jump was getting a decent framerate. This and many other technical issues (including audio) were &lt;a href=&quot;http://www.lostdecadegames.com/the-road-to-a-production-quality-html5-game-o&quot;&gt;solved by Game Closure's SDK&lt;/a&gt;, but there were other critical issues to address, including a fundamental difference in user input.&lt;/p&gt;
&lt;p&gt;Versions of Onslaught! Arena for&amp;nbsp;&lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Chrome&lt;/a&gt; and &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;OSX&lt;/a&gt; rely on mouse and keyboard controls. Players can use the WASD keys (or arrow keys) to navigate, as well as the mouse for aiming and attacking. Obviously these input mechanisms are not compatible with touch devices. To make the jump to mobile as smooth as possible, we experimented with many different control schemes, and ended up providing players with two options:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Touch to move.&lt;/strong&gt; We labeled this as the &quot;Beginner&quot; option, informing players to &quot;Use one finger.&quot; This is a streamlined, AI-assisted control scheme. Players touch the device where they want their character to move, and the character automatically attacks the nearest enemy or projectile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analog thumb sticks.&lt;/strong&gt; This is the (comparatively) &quot;Advanced&quot; scheme, asking players to &quot;Use two thumbs.&quot; This mechanism provides players with complete control over where their character is moving, where he is facing, when to attack, and fine granular control over the angle of the thrown projectiles.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5829587929/in/photostream&quot;&gt;
		&lt;img src=&quot;http://farm3.static.flickr.com/2791/5829587929_e6dc166d74.jpg&quot;&gt;
	&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;None of the decisions we made regarding user input were decided on lightly. First, we understood that analog thumb sticks have issues of their own, so we read up on &lt;a href=&quot;http://www.gamasutra.com/view/feature/6323/a_guide_to_ios_twin_stick_shooter_.php&quot;&gt;best practices&lt;/a&gt; and studied the approach used by other popular games in the shoot 'em up genre (including &lt;a href=&quot;http://minigore.blogspot.com/&quot;&gt;Minigore&lt;/a&gt; and &lt;a href=&quot;http://itunes.apple.com/us/app/geometry-wars-touch/id364175436?mt=8&quot;&gt;Geometry Wars&lt;/a&gt;).&amp;nbsp;Based on this research, there seemed to be two very different approaches to the positioning of digital thumb sticks: dynamic and static.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic thumb sticks&lt;/strong&gt; (like those used in Geometry Wars) appear on the screen only after the player touches the device, creating anchor points. Movement is then recorded as relative to those points. This has advantages such as user comfort; if one player likes to have his or her thumbs near the edge of the screen, that's fine. Likewise this method supports players who would prefer to reach farther into the device for stability or other reasons. One potential downside is that without prior visual indication, it may not be easily understood how to interact with the game or where to touch the device to begin input.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Static thumb sticks&lt;/strong&gt; are typically always visible and in fixed positions on the screen. We decided to go with this option for a few reasons, including what we believe to be a more robust first-time experience; players new to the game could see at a glance where to put their thumbs. Additionally, it removed issues with monsters or traps being hidden beneath players' thumbs!&lt;/p&gt;

&lt;h2&gt;Technical approach&lt;/h2&gt;
&lt;p&gt;We strongly believe in code reuse so we wanted something that could easily be dropped into just about any project. This led to the creation of a &lt;a href=&quot;https://github.com/lostdecade/analog_sticks&quot;&gt;Stick class&lt;/a&gt; that can be used like so:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stick&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Stick&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 40 is the size of the input&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;mousemove&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;preventDefault&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;nx&quot;&gt;stick&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setInputXY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pageX&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pageY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This is easily rendered to the canvas element with code like:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;&lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;beginPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;arc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stick&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;limit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stick&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;limit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;limitSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PI&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stroke&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;Below I've embedded an example that uses this class as a&amp;nbsp;&lt;strong&gt;dynamic thumbstick&lt;/strong&gt; that should work in most browsers. The thumb stick does not appear until input begins and controls the velocity of the green circle:&lt;/p&gt;
&lt;p&gt;&lt;iframe style=&quot;background:#fff;&quot; width=&quot;400&quot; height=&quot;300&quot; scrolling=&quot;no&quot; src=&quot;/demos/analog_sticks/&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Using the same class, I've embedded another example, this time as a &lt;strong&gt;static thumbstick&lt;/strong&gt;. This demo also controls the velocity of the green circle but it's been augumented with base and pivot graphics (the same graphics used in Onslaught!):&lt;/p&gt;
&lt;p&gt;&lt;iframe style=&quot;background:#fff;&quot; width=&quot;400&quot; height=&quot;300&quot; scrolling=&quot;no&quot; src=&quot;/demos/analog_sticks/static_with_graphic.html&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;For readers who would also like to see how this is accomplished on an actual iPad, load up&amp;nbsp;&lt;a href=&quot;/demos/analog_sticks/ios.html&quot;&gt;this page&lt;/a&gt;&amp;nbsp;on your device.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Dear Lost Decade...</title>
		<link href="http://www.lostdecadegames.com/dear-lost-decade"/>
		<updated>2011-07-18T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/dear-lost-decade</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;after&quot; href=&quot;http://itunes.apple.com/us/app/onslaught!/id441426241&quot;&gt; &lt;img src=&quot;http://farm7.static.flickr.com/6007/5951545329_a45d615527_m.jpg&quot; alt=&quot;Onslaught! on iPad&quot; /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;About a week ago we launched &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught!/id441426241&quot;&gt;Onslaught! on iPad&lt;/a&gt;, and during the weekend we were surprised and delighted to discover a few things. First, &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5951545329/in/photostream&quot;&gt;Onslaught! is in the &quot;New &amp;amp; Noteworthy&quot; section&lt;/a&gt; of the iPad App Store. We're thrilled to see Apple helping to bring exposure to our game, and have been excited to see a significant boost in sales. We think this speaks loudly that HTML5 is here, today, and there can be no more doubt that it's a viable development choice.&lt;/p&gt;
&lt;p&gt;Second, and no less impactful to us, was a well-written and thoughtful review from a loving fan of the game. The subject of the review is &quot;Dear Lost Decade...&quot; and you should be able to read it on the &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught!/id441426241&quot;&gt;review page&lt;/a&gt;. Here it is verbatim:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Onslaught! is a love letter to a certain subset of gamers; those that  grew up playing white-box Dungeons &amp;amp; Dragons and video games in  equal measure, i.e. - me. If you are a fellow member of that elite but  dorky minority, buy this game immediately. If you are not, wait five  minutes, then buy it anyway.&lt;br /&gt;&lt;br /&gt;It feels like this game has been  marinating in awesome since the day it was conceived, lovingly nurtured  through the development process, and then birthed into the app store,  kicking and screaming. This game is truly original. Not oh-em-gee, I've  never seen anything like this and it's going to change the world; that's  innovation. This is originality; taking tried and true game mechanics  and themes and melding them in a way that feels new. In some ways, this  is superior to innovation, because it deftly tiptoes ninja-style over  the pitfall of creating something that is new, but not necessarily  better. An original title safely co-opts proven content in a way that  feels startlingly fresh.&lt;br /&gt;&lt;br /&gt;But enough philosophizing. This game has  Owlbears. Do want. The sewer level boss is a Gelatinous Cube. Yes,  money, give it. This game has an icon in the front end that looks  strikingly similar to the silhouette of a Beholder. That's right, take  it baby, you know you want it. That's how freakin' kewl this game is,  that's the way that it's retro, and that's why the devs had me at hello.&lt;br /&gt;&lt;br /&gt;Add  that to the fact that the controls are perfect, the weapons are  diverse, and the enemies are brilliantly differentiated in the most  elegant of ways. Yes, this is dual-stick, but it's not Geometry Wars,  where you are pouring out bullets at light speed, across the length of  the screen. While I do love that, it would not have been on theme for  this game, and the decision to steer clear of it was a smart one.&lt;br /&gt;&lt;br /&gt;Instead,  some of the weapons have noticeably short ranges, both to match the  fantasy theme and to distinguish between other weapons with different  properties: double dagger with a wide arc-of-fire, high rate-of-fire  spears, burning fireballs, freezing ice shards, and axes that ricochet.  Enemies have vulnerabilities and invulnerabilities to some of these  weapons too. Ever tried to fight a Gelatinous Cube with a dagger? Tried  and died...&lt;br /&gt;&lt;br /&gt;The diversity of the enemies is just as important.  When the Minotaur enters the first arena, then charges at you blindingly  fast, you realize that fact. Some enemies multiply, some have ranged  attacks, some teleport, and some just mob you till you suffocate.&lt;br /&gt;&lt;br /&gt;Add  to this laundry list that you can purchase gear for your adventure from  Ye Olde Shop, with a heaping pile of golden doubloons from your  previous trek. Also add three levels of difficulty, each with its own  arena (watch out for the traps amongst the piles of glistening treasure  in the dragon's lair). Also add that this game will receive continued  love and support from the devs, because anyone who cares enough to share  their baby with the world will make certain that it fairs well in its  strange and wonderful new surroundings.&lt;br /&gt;&lt;br /&gt;Some people will not like  game as much as me. That's okay, I don't mind. I happen to gravitate  toward beauty in simplicity. I am not of the opinion that Gameloft's  latest flavor-of-the-week clone is what makes the app store special, no  matter how polished they are. What makes the app store special is that a  guy can have a simple idea, release it into the wild, have it sit  toe-to-toe with those games, and come out on top in gamers' minds. I  have to think that would be his proudest moment.&lt;br /&gt;&lt;br /&gt;To the developers of this game,&lt;br /&gt;&lt;br /&gt;Thank you so much for the letter. It means the world to me; it really does. Love you too.&lt;br /&gt;&lt;br /&gt;xoxo,&lt;br /&gt;&lt;br /&gt;.djflippy&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The player known as&amp;nbsp;djflippy took the time to write this eloquent review, so we wanted to spotlight it. As Geoff and I are oldschool hardcore gamers ourselves, our intention was very much to appeal to this audience. Since it seems that we have accomplished that with at the very least this supportive fan, we are beyond satisfied. Here's a huge digital hug for&amp;nbsp;djflippy, and thank you for making our weekend delightful!&lt;/p&gt;
&lt;p&gt;To help spread the love, we are making Onslaught! &lt;strong&gt;50% off&lt;/strong&gt; for the rest of the week. If you haven't yet, &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught!/id441426241&quot;&gt;pick it up now for $0.99&lt;/a&gt;!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Onslaught! now available on Android tablets</title>
		<link href="http://www.lostdecadegames.com/onslaught-now-available-on-android-tablets"/>
		<updated>2011-07-16T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-now-available-on-android-tablets</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;after&quot; href=&quot;https://market.android.com/details?id=com.gameclosure.tealeaf&quot;&gt; &lt;img src=&quot;http://farm7.static.flickr.com/6018/5938083697_b45efd0654_m.jpg&quot; alt=&quot;Onslaught! for Android&quot; /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hot on the heels of our announcement of 	&lt;a href=&quot;http://itunes.apple.com/us/app/onslaught!/id441426241&quot;&gt;Onslaught! for iPad&lt;/a&gt;, 	we're now equally as thrilled to announce 	&lt;a href=&quot;https://market.android.com/details?id=com.gameclosure.tealeaf&quot;&gt;Onslaught! for Android&lt;/a&gt;. 	This is again without any additional code on our part, thanks to &lt;a href=&quot;http://gameclosure.com/&quot;&gt;Game Closure&lt;/a&gt;'s awesome technology. 	Read all about it in our previous article, &lt;a href=&quot;/the-road-to-a-production-quality-html5-game-o&quot;&gt;&quot;The road to a production-quality HTML5 game on iOS&quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately it's currently only compatible with Android tablets, 	but we are working on a version that will work with Android phones too. 	&lt;a href=&quot;https://twitter.com/#!/lostdecadegames&quot;&gt;Follow us on Twitter&lt;/a&gt; to know be notified as soon as it's available!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href=&quot;https://market.android.com/details?id=com.gameclosure.tealeaf&quot;&gt;Buy Onslaught! in the Android Market&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;https://market.android.com/details?id=com.gameclosure.tealeaf&quot;&gt;Download Onslaught! LITE (free version) in the Android Market&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>The road to a production-quality HTML5 game on iOS</title>
		<link href="http://www.lostdecadegames.com/the-road-to-a-production-quality-html5-game-o"/>
		<updated>2011-07-11T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/the-road-to-a-production-quality-html5-game-o</id>
		<content type="html">&lt;a href=&quot;http://techcrunch.com/2011/07/11/html5-game-maker-looks-to-transcend-sleepy-chrome-web-store-sales-on-ios/&quot;&gt;
	&lt;img alt=&quot;Onslaught! for iPad on TechCrunch&quot; src=&quot;http://farm7.static.flickr.com/6012/5928010148_8823671290.jpg&quot;&gt;
&lt;/a&gt;

&lt;h2&gt;
	&lt;a href=&quot;http://techcrunch.com/2011/07/11/html5-game-maker-looks-to-transcend-sleepy-chrome-web-store-sales-on-ios/&quot;&gt;As seen today on TechCrunch!&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;
	About a year ago, Geoff and I were both senior frontend engineers working for
	&lt;a href=&quot;http://raptr.com/&quot;&gt;Raptr&lt;/a&gt;.
	As software programmers by trade and hardcore gamers at heart,
	we were anxious to test out this new &quot;HTML5&quot; buzzword to see how well it could handle game development.
	BoingBoing happened to be running a
	&lt;a href=&quot;http://boingboing.net/arcade/&quot;&gt;Games Inspired by Music&lt;/a&gt; contest,
	to which we submitted our &lt;strong&gt;first HTML5 game&lt;/strong&gt;, an early version of
	&lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt;.
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5252304247/in/photostream&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena at the Chrome Webstore press release&quot; src=&quot;http://farm6.static.flickr.com/5130/5252304247_0e56ef269d_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	The game that we entered to
	&lt;a href=&quot;http://boingboing.net/arcade/&quot;&gt;the contest&lt;/a&gt;
	was a quick two-week hack put together in our spare time,
	written in &lt;strong&gt;JavaScript and Canvas&lt;/strong&gt; and designed to run reasonably well in &quot;modern browsers.&quot;
	Making the game was extremely fast and easy, using Google Chrome and its
	&lt;a href=&quot;http://blog.chromium.org/2011/04/chrome-developer-tools-understanding.html&quot;&gt;great developer tools&lt;/a&gt;.
	As expected, the primary issues we ran into were largely performance-related.
	About mid-way through development, however, Chrome &quot;unleashed&quot;
	&lt;a href=&quot;http://blog.chromium.org/2010/09/unleashing-gpu-acceleration-on-web.html&quot;&gt;GPU acceleration&lt;/a&gt;
	on the web, which shot our FPS (frames per second)
	from ~30 to something more like ~200 on tested desktop computers and laptops.
	(Basically the game ran about an &lt;em&gt;order of magnitude faster&lt;/em&gt;, as browsers were improving by leaps and bounds.)
	Like &lt;a href=&quot;http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio&quot;&gt;other developers&lt;/a&gt;,
	we also had a cavalcade of &lt;strong&gt;nasty audio issues&lt;/strong&gt;, ranging from latency, to format incompatiblity and stuttering playback.
	We ended up shipping with &lt;a href=&quot;http://www.schillmania.com/projects/soundmanager2/&quot;&gt;SoundManager 2&lt;/a&gt;
	(a JavaScript-to-flash audio API), though we eventually did utilize HTML5's Audio tag.
&lt;/p&gt;

&lt;p&gt;
	Around this time, Google was coincidentally
	&lt;a href=&quot;http://techcrunch.com/2010/05/19/chrome-web-store/&quot;&gt;preparing&lt;/a&gt;
	for the launch of its new
	&lt;a href=&quot;https://chrome.google.com/webstore&quot;&gt;Chrome Web Store&lt;/a&gt;,
	which was a potentially exciting new platform championing HTML5 and open web standards.
	After scrambling to polish Onslaught! Arena and wrapping a Chrome-colored bow around it,
	&lt;a href=&quot;http://www.lostdecadegames.com/announcing-onslaught-arena-for-sale-in-the-go&quot;&gt;Onslaught! Arena launched in Google's web store&lt;/a&gt;.
	We were invited to the press release, had a
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5252913696/in/photostream&quot;&gt;screenshot of our game up on a big wall&lt;/a&gt;,
	and were very excited to see our HTML5 creation getting
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5673721388/in/photostream&quot;&gt;industry attention&lt;/a&gt;.
&lt;/p&gt;

&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5517989875/in/set-72157624619472766&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena in the Mac App Store&quot; src=&quot;http://farm6.static.flickr.com/5019/5517989875_9bd2dd3820_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Despite being a featured game to launch with a brand new offering from a heavyweight like Google,
	&lt;a href=&quot;http://www.lostdecadegames.com/our-first-week-in-the-chrome-webstore-the-num&quot;&gt;sales were lackluster&lt;/a&gt;
	(as &lt;a href=&quot;http://techcrunch.com/2011/01/04/sales-have-slowed-to-a-trickle-on-googles-chrome-web-store/&quot;&gt;pointed out by TechCrunch&lt;/a&gt;).
	Given that part of HTML5's intended appeal is its portability,
	we thought it was time to give it a real-world test.
	This includes some successes, such as a
	&lt;a href=&quot;http://www.lostdecadegames.com/an-html5-game-in-the-mac-app-store&quot;&gt;release in the Mac App Store&lt;/a&gt;,
	but we found that our primary problem was still slow performance, particularly
	&lt;a href=&quot;http://www.lostdecadegames.com/what-we-need-to-get-our-html5-game-on-ipad-sp&quot;&gt;on iOS&lt;/a&gt;
	(I believe that our best benchmark was ~10 FPS, the target for any game being at &lt;em&gt;least&lt;/em&gt; 30 FPS).
	The answer to our speed woes came from
	&lt;a href=&quot;http://techcrunch.com/2011/02/17/game-closure-makes-it-a-breeze-to-build-multiplayer-cross-platform-games/&quot;&gt;Game Closure&lt;/a&gt;,
	a small group of wickedly smart guys who put together a multi-platform HTML5 game framework.
&lt;/p&gt;

&lt;p&gt;
	Leveraging Game Closure's tech, we had a playable version of Onslaught! Arena on iPad after just a day of hacking,
	running at an impressive 60 FPS (5x that of a simple embedded WebView).
	Their approach is very similar to that of &lt;a href=&quot;http://www.phoboslab.org/log/2010/10/impact-for-ios&quot;&gt;ImpactJS&lt;/a&gt; -- that is,
	they have a custom JavaScript environment, accelerated with direct access to native graphics and sound.
	The best part is that our development environment never changed;
	we were still using Google Chrome, working in pure HTML5 and enjoying Chrome's fine developer tools.
&lt;/p&gt;

&lt;p&gt;
	We didn't just want to port the game over, however.
	We wanted this release to be something special, so we spent a few weeks
	stuffing it full of brand new content, including:
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5841748350/in/photostream&quot;&gt;
	&lt;img alt=&quot;Onslaught! for iPad: Dragon Lair&quot; src=&quot;http://farm3.static.flickr.com/2784/5841748350_a528c99d95_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;Completely redone, full soundtrack by &lt;a href=&quot;http://jmflava.com/&quot;&gt;Joshua Morse&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Revamped arena, much bigger playing area&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Four&lt;/strong&gt; new environments (Sewers, Dragon Lair, Sunken City and Volcano)&lt;/li&gt;
	&lt;li&gt;New &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5829587759/in/photostream&quot;&gt;Stage Select screen&lt;/a&gt; to improve the game's pacing and replayability&lt;/li&gt;
	&lt;li&gt;New weapon: &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5830138264/in/photostream&quot;&gt;frostbolt&lt;/a&gt; (stops enemies cold!)&lt;/li&gt;
	&lt;li&gt;New monsters: &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5830138392/in/photostream&quot;&gt;skeleton, merman and Naga&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitpic.com/56z1zw&quot;&gt;Shop&lt;/a&gt; (featuring an &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/casestudies/onslaught.html&quot;&gt;HTML5 Shield&lt;/a&gt;, Speed Boots, Gold Armor, Whet Stone and even a &lt;a href=&quot;http://www.pixeljoint.com/pixelart/62388.htm&quot;&gt;Dragon Familiar&lt;/a&gt; to help you fight)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5829587929/in/photostream&quot;&gt;Two types of controls&lt;/a&gt; (touch-to-move, dual sticks)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
	Development take-aways
&lt;/h2&gt;

&lt;p&gt;
	We've learned dozens of lessons and have what we hope are insightful and helpful
	take-aways about the process of bringing an HTML5 game to production-quality on iOS.
	We'll be writing about them all in due time (&lt;a href=&quot;http://www.lostdecadegames.com/rss.xml&quot;&gt;subscribe here&lt;/a&gt;),
	but here are a quick handful of pointers:
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5673721388/in/photostream&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena in Game Developer magazine&quot; src=&quot;http://farm6.static.flickr.com/5141/5673721388_f98100ba58_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;Browsers are &lt;strong&gt;great&lt;/strong&gt; for prototyping and fast development. If you're used to compiling your game before being able to test out some code, you'll love moving over to an environment where you can simply reload the game with a single keystroke.&lt;/li&gt;
	&lt;li&gt;Don't worry about framerate/performance until you &lt;strong&gt;absolutely must&lt;/strong&gt;. On more than one occasion, we dirtied up our game's logic with slight optimization tweaks, only to later get huge speed increases later from external sources (that didn't require code updates).&lt;/li&gt;
	&lt;li&gt;Developer tools in the browser are really great. Firebug paved the way for Web Inspector, and current versions of Chrome are a developer's dream. I have only some experience debugging in Objective-C or the Android SDK, but they feel heavy-handed in comparison.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	We'd like to point out that even with all of this new content, Onslaught! is still a &lt;strong&gt;pure HTML5 game&lt;/strong&gt;.
	It was developed in Google Chrome, and leveraging Game Closure's SDK, required no additional iOS-specific work on our part.
&lt;/p&gt;

&lt;p&gt;
	&lt;a href=&quot;http://itunes.apple.com/us/app/onslaught!/id441426241?ls=1&amp;mt=8&quot;&gt;Onslaught! is available now in the iPad App Store.&lt;/a&gt;
	We put a &lt;strong&gt;lot of love&lt;/strong&gt; in this game; we hope you'll check it out and
	let us know what you think in the comments or on &lt;a href=&quot;https://twitter.com/#!/lostdecadegames&quot;&gt;Twitter&lt;/a&gt;. Game on!
&lt;/p&gt;

&lt;h2&gt;
	Side note: this space is blowing up
&lt;/h2&gt;

&lt;p&gt;
	HTML5 and games built on HTML5 are &lt;strong&gt;really hot right now&lt;/strong&gt;.
	If you're not convinced by our little game's story, you should know about other huge companies becoming invested
	in the technology, including Apple, Google, Electronics Arts, and Facebook among other major players.
	We are actively hiring across the development board, from experts in JavaScript
	and game programming to interns looking to learn.
	If you find this space interesting, please do &lt;a href=&quot;mailto:hello+jobs@lostdecadegames.com&quot;&gt;contact us&lt;/a&gt;.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Lava background sprite creation (timelapse)</title>
		<link href="http://www.lostdecadegames.com/lava-background-sprite-creation-timelapse"/>
		<updated>2011-05-25T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/lava-background-sprite-creation-timelapse</id>
		<content type="html">&lt;p&gt;If you &lt;a href=&quot;https://twitter.com/#!/lostdecadegames&quot;&gt;follow us on Twitter&lt;/a&gt; you may already know this, but we've been busy working on a new version of &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught&lt;/a&gt;. We're really excited to be preparing the game for iPad, and instead of just delivering a straight-up port we'll be adding a ton of new content.&lt;/p&gt;
&lt;p&gt;The new content ranges all over from weapons, monsters and a new boss, but one the most signifcant updates will be four brand new environments. This should be fun: the last stage takes place &lt;em&gt;inside a damn volcano&lt;/em&gt;! I've been working really hard to make interesting environments for players to enjoy and thought a timelapse video of their creation might be fun to watch:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe width=&quot;500&quot; height=&quot;314&quot; frameborder=&quot;0&quot; src=&quot;http://www.youtube.com/embed/XMBAcX42-lo&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hope you like it; it was a blast to make! And what is that background music? Why, it's a brand new soundtrack by &lt;a href=&quot;http://jmflava.com/&quot;&gt;Joshua Morse&lt;/a&gt;! Players will be treated to at least 5 brand new nuggets of music goodness.&amp;nbsp;If you're a fan of Onslaught, retro games or the iPad, keep you eye on this space! We'll be blogging about our new iPad game hopefully in the next few weeks.&lt;/p&gt;
&lt;p&gt;And (though the timelapse doesn't cover everything), here's the final product:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5760443355/in/photostream&quot;&gt; &lt;img src=&quot;http://farm3.static.flickr.com/2397/5760443355_e9d9ed1348.jpg&quot; alt=&quot;Onslaught Volcano stage&quot; /&gt; &lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Completing your native Mac OSX App built in HTML5</title>
		<link href="http://www.lostdecadegames.com/completing-your-native-mac-osx-app-built-in-h"/>
		<updated>2011-04-17T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/completing-your-native-mac-osx-app-built-in-h</id>
		<content type="html">&lt;p&gt;&lt;em&gt;Note: this is a continuation of &lt;a href=&quot;http://www.lostdecadegames.com/how-to-embed-html5-into-a-native-mac-osx-app&quot;&gt;How to embed HTML5 into a native Mac OSX app&lt;/a&gt;. This tutorial uses &lt;strong&gt;Xcode Version 4.0.1&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So having gone through the first tutorial, you should now have a bare-bones native OSX application running your HTML5 program. Let's open that same project in Xcode (&lt;a href=&quot;https://github.com/lostdecade/web_view_example&quot;&gt;example on GitHub&lt;/a&gt;) and finish it up! I'll use &lt;strong&gt;WebViewExample&lt;/strong&gt; as the name of this tutorial project, but just like last time, yours can be whatever you like.&lt;/p&gt;

&lt;h2&gt;Adding an icon to your app&lt;/h2&gt;
&lt;p&gt;To set the icon that appears in the dock, Finder and other views, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First you need an &lt;a href=&quot;http://en.wikipedia.org/wiki/Apple_Icon_Image_format&quot;&gt;Apple Icon Image&lt;/a&gt; file. To make one yourself, open up the Icon Composer application (mine is located in &lt;code&gt;/Developer/Applications/Utilities/Icon Composer.app&lt;/code&gt;). For the sake of speed you can use &lt;a href=&quot;https://github.com/lostdecade/web_view_example/blob/master/OnslaughtArena.icns&quot;&gt;OnslaughtArena.icns&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In Xcode's left sidebar, drill down into &lt;code&gt;WebViewExample / Resources&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Drag your &lt;code&gt;.icns&lt;/code&gt; file into the Resources folder.&lt;/li&gt;
&lt;li&gt;Still in the Resources folder, open the &lt;code&gt;WebViewExample-Info.plist&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;In the &quot;Key&quot; column, find the row with the value &quot;Icon file&quot;.&lt;/li&gt;
&lt;li&gt;Set the value of this row to the name of your &lt;code&gt;.icns&lt;/code&gt; file (eg, &lt;code&gt;OnslaughtArena.icns&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Closing the window should close the application&lt;/h2&gt;
&lt;p&gt;For those unfamiliar with OSX, I'll quickly describe what this means. In OSX, you can have an application open without any windows. This is very different from Microsoft's Windows operating system where if all the windows are closed, the application is no longer running. This can create an awkward user experience, so there must be a way to bring windows back. This flow doesn't really make much sense for games, so a good workaround is to close the application when all windows are closed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be sure to do this&lt;/strong&gt;; we got rejected the first time we submitted because we did not enable this feature! Here's the reason from Apple:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have found that if the user closes the app window, there is no way for the user to reopen the app without having to quit and relaunch the app.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the fix is easy.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Xcode's left sidebar, drill down into &lt;code&gt;WebViewExample / Classes / WebViewExampleAppDelegate.m&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;code&gt;awakeFromNib&lt;/code&gt; method, add this line just above the closing bracket: &lt;code&gt;[window setDelegate:self];&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add this method after the &lt;code&gt;awakeFromNib&lt;/code&gt; method:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;
- (void)windowWillClose:(NSNotification *)aNotification {
&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;[NSApp terminate:self];
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's it! Now when you close your application's main window, the application should quit. &lt;em&gt;Note: this works great but it generates the warnings &quot;notice: Semantic Issue: Passing argument to parameter 'anObject' here&quot; as well as &quot;Class 'WebViewExampleAppDelegate' does not implement the 'NSWindowDelegate' protocol&quot;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Logging errors&lt;/h2&gt;
&lt;p&gt;Xcode can be a bit daunting to newcomers, but fortunately it's very easy to send messages to the log. It can be done with code like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NSLog(@&quot;example message&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(These messages should appear in the main Xcode window, in the very bottom.)&lt;/p&gt;
&lt;h2&gt;Enabling localStorage&lt;/h2&gt;
&lt;p&gt;It seems that, by default, &lt;code&gt;localStorage&lt;/code&gt; will not persist data in an embedded WebView as expected. Here's how to enable it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Xcode's left sidebar, drill down into&amp;nbsp;&lt;code&gt;WebViewExample / Classes / WebViewExampleAppDelegate.m&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add this code to the top of the awakeFromNib method: &lt;code&gt;WebPreferences *prefs = [webView preferences];&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Then add this line just below that: &lt;code&gt;[prefs _setLocalStorageDatabasePath:@&quot;~/Library/YourProjectName/LocalStorage&quot;];&lt;/code&gt;. &lt;em&gt;(Be sure to use the name of your project intead of &quot;YourProjectName&quot;.)&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
	It's important to name the folder that &lt;code&gt;localStorage&lt;/code&gt; saves to with the same name as your application (eg, Onslaught! Arena saves to &lt;code&gt;&quot;~/Library/OnslaughtArena/LocalStorage&quot;&lt;/code&gt;)! Apple will reject your app if it puts data somewhere unexpected.
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: this may generate the warning &quot;'WebPreferences' may not respond to '-_setLocalStorageDatabasePath:'&quot;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5517989875/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena&quot; src=&quot;http://farm6.static.flickr.com/5019/5517989875_9bd2dd3820_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;Your application should now meet the bare essentials for submission to the Mac App Store, and you could be reaching a wider audience with your HTML5 app in no time (pending Apple's approval &amp;hellip;). Did I miss anything you were hoping to know about? Any steps not work for you? Please let me know.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; if you want to see what kind of quality you can get out of a native OSX HTML5 app, we just dropped the price of &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; in the &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106?mt=12&quot;&gt;Mac App Store to $1.99&lt;/a&gt;! See HTML5 in action for yourself.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>No more foolin' around</title>
		<link href="http://www.lostdecadegames.com/no-more-foolin-around"/>
		<updated>2011-04-02T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/no-more-foolin-around</id>
		<content type="html">&lt;p&gt;We've reverted our &lt;a href=&quot;http://www.lostdecadegames.com/onslaught-arena-v1225-is-free-today-only&quot;&gt;April Fool's version of Onslaught! Arena&lt;/a&gt; back to the game we all know and love. &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Chrome Web Store&lt;/a&gt; users should see the game update in the next day or so.&lt;/p&gt;
&lt;p&gt;We enjoyed the Super Meat Boy mode so much that we've left it in game, accessible via a keyboard code. Simply type &lt;strong&gt;MEAT&lt;/strong&gt; anytime during the game to play as &lt;a href=&quot;http://supermeatboy.com/&quot;&gt;Super Meat Boy&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Additionally, the game still &lt;strong&gt;saves every wave&lt;/strong&gt; now. We realize the game is extremely difficult so now attempting the &lt;a href=&quot;http://www.youtube.com/watch?v=AJscBSbc-aA&quot;&gt;Dragon&lt;/a&gt; or &lt;a href=&quot;http://www.youtube.com/watch?v=kvLV2OPbq2E&quot;&gt;Beholder&lt;/a&gt; over and over until you get it right won't be quite as punishing! :)&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;646 free downloads! by Lost Decade Games, on Flickr&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5582464201/&quot;&gt;&lt;img src=&quot;http://farm6.static.flickr.com/5266/5582464201_4d513bdbee_m.jpg&quot; alt=&quot;646 free downloads!&quot; width=&quot;240&quot; height=&quot;63&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We gave away &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;Onslaught! Arena on Mac App&lt;/a&gt; store for free yesterday as well and &lt;strong&gt;646 lucky users&lt;/strong&gt; snagged a copy! If you liked it please leave a review!&lt;/p&gt;
&lt;p&gt;Thanks everyone!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Onslaught! Arena v1.2.25 is FREE (today only)</title>
		<link href="http://www.lostdecadegames.com/onslaught-arena-v1225-is-free-today-only"/>
		<updated>2011-04-01T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-arena-v1225-is-free-today-only</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/sets/72157624619472766/&quot;&gt; &lt;img src=&quot;http://farm6.static.flickr.com/5292/5515971700_7737e4c29e.jpg&quot; alt=&quot;Onslaught! Arena&quot; /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Good news, everyone! 	We just launched a big update to 	&lt;a href=&quot;http://goo.gl/l0EhM&quot;&gt;Onslaught! Arena&lt;/a&gt;, 	and to celebrate we're making it 	&lt;a href=&quot;http://goo.gl/l0EhM&quot;&gt;FREE for today only&lt;/a&gt; in the Chrome Webstore!&lt;/p&gt;
&lt;p&gt;Based on market research findings, 	this update includes the following changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Graphics update to make main character more likable. &lt;/li&gt;
&lt;li&gt; Title change to something more recognizable. &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;You die in only one hit&lt;/strong&gt; (but your game is saved after each wave). &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's &lt;strong&gt;normally $1.99&lt;/strong&gt;, so get it while it's hot! I mean, free and stuff!&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;http://goo.gl/l0EhM&quot;&gt;Get Onslaught! Arena FREE&lt;/a&gt;&lt;/h2&gt;
</content>
	</entry>
	
	<entry>
		<title>What we need to get our HTML5 game on iPad (Speed)</title>
		<link href="http://www.lostdecadegames.com/what-we-need-to-get-our-html5-game-on-ipad-sp"/>
		<updated>2011-03-17T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/what-we-need-to-get-our-html5-game-on-ipad-sp</id>
		<content type="html">&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5533389193/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena on iPad&quot; src=&quot;http://farm6.static.flickr.com/5014/5533389193_33d84a9947_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	One of our attractions to HTML5 is its portability.
	Our game &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt;
	began as a browser-based app but has since
	&lt;a href=&quot;http://www.lostdecadegames.com/an-html5-game-in-the-mac-app-store&quot;&gt;moved into native land&lt;/a&gt;
	by embedding a WebKit Web View into
	&lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;our OSX app&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	Given &lt;a href=&quot;http://www.lostdecadegames.com/how-to-embed-html5-into-a-native-mac-osx-app&quot;&gt;how easy it was&lt;/a&gt;
	to get our game onto the Mac App Store, the next obvious question is, &quot;What about iPad?&quot;
	We've been exploring it and are sad to report that we've hit a brick wall of sorts.
&lt;/p&gt;

&lt;p&gt;
	HTML5 Audio is a disaster on iPad; only one sound file can play at a time, in addition to latency and other issues.
	Not to pick on iPad or Apple -- HTML5 Audio
	&lt;a href=&quot;http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio&quot;&gt;sucks all around&lt;/a&gt;.
	The good news is that it was pretty easy to hack in a fix on iPad and make audio work beautifully.
&lt;/p&gt;

&lt;p&gt;
	The trick to getting responsive audio on iPad via HTML5 was to create a bridge from JavaScript to Objective-C.
	I'll post a more detailed tutorial in the future (here's &lt;a href=&quot;http://www.lostdecadegames.com/rss.xml&quot;&gt;our RSS feed&lt;/a&gt; to get updates), but it looks something like this:
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objc&quot;&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;BOOL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;webView:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UIWebView&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;webView&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;shouldStartLoadWithRequest:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSURLRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;navigationType:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UIWebViewNavigationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;navigationType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;requestString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;absoluteString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;components&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;requestString&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;componentsSeparatedByString:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;://&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(([&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;components&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;components&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;objectAtIndex:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;isEqualToString:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;jsbridge&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;([(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;components&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;objectAtIndex:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;isEqualToString:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;battle_music&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c1&quot;&gt;// Play battle music here&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NO&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	
	&lt;span class=&quot;c1&quot;&gt;// Let any other request through&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;YES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
	Then in your JavaScript you'd send a request to &lt;code&gt;&quot;jsbridge://battle_music&quot;;&lt;/code&gt;.
	The device detects this request, parses it, plays an audio file and cancels the request.
&lt;/p&gt;

&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5533389725/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena on iPad&quot; src=&quot;http://farm6.static.flickr.com/5135/5533389725_9ac20fb8f8_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	So there's a workaround; audio is not the bottleneck. The problem with getting &lt;em&gt;our&lt;/em&gt; game onto iOS is &lt;strong&gt;speed&lt;/strong&gt;.
	As you can see in
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/sets/72157624619472766/with/5533389893/&quot;&gt;some of these screenshots&lt;/a&gt;
	of our game running in the iPad simulator, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Frame_rate&quot;&gt;frames per second&lt;/a&gt; (FPS) is severely lacking.
&lt;/p&gt;

&lt;p&gt;
	Movies play at 24 FPS, TV plays at about 30 FPS.
	Modern video games probably run at 60 FPS or more.
	While taking screenshots of &lt;strong&gt;Onslaught! Arena&lt;/strong&gt;, I did notice it can run as high as &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5533389405/&quot;&gt;59 FPS&lt;/a&gt;,
	but it's bursty and doesn't last.
	Most of the screenshots are more depressing, showing the game running at about &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5533972328/&quot;&gt;7 FPS&lt;/a&gt;, which is completely unplayable for an arcade game like ours.
	Plus, as you can see I've removed the extra pixel drawing of the arena itself: the screen is just plain black and it's still unacceptably slow.
&lt;/p&gt;

&lt;p&gt;
	This speed problem is the &lt;em&gt;only&lt;/em&gt; thing keeping us from having a playable game on any iOS device.
	So Apple, Google, all of you WebKit supporters and browser makers: please make things run faster. Lotta love for ya, we just want more speed!
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How to embed HTML5 into a native Mac OSX app</title>
		<link href="http://www.lostdecadegames.com/how-to-embed-html5-into-a-native-mac-osx-app"/>
		<updated>2011-03-15T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/how-to-embed-html5-into-a-native-mac-osx-app</id>
		<content type="html">&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5526392241/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena&quot; src=&quot;http://farm6.static.flickr.com/5293/5526392241_e17c988d20_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Our game &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; was only available on the &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Chrome Webstore&lt;/a&gt; when we first launched it.
	We recently announced that we had also launched the game on the &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;Mac App Store&lt;/a&gt;, using the &lt;a href=&quot;http://www.lostdecadegames.com/an-html5-game-in-the-mac-app-store&quot;&gt;exact same&lt;/a&gt; source code.
	Isn't HTML5 awesome?
&lt;/p&gt;

&lt;p&gt;
	Many of you expressed interest in how to embed a WebView into a Mac app, and as promised, here's a detailed tutorial.
&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;
		Download Xcode onto your Mac. I was able to
		&lt;a href=&quot;http://developer.apple.com/xcode/&quot;&gt;download it from Apple&lt;/a&gt;
		but it's also
		&lt;a href=&quot;http://itunes.apple.com/us/app/xcode/id422352214?mt=12&quot;&gt;in the Mac App Store&lt;/a&gt;
		for $4.99, so your mileage may vary.
	&lt;/li&gt;
	&lt;li&gt;
		Run Xcode. Mine is located in &lt;code&gt;/Developer/Applications/Xcode.app&lt;/code&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		Make a new project. This can be done by using the menubar: choose &lt;code&gt;File / New Project... / Mac OS X / Application / Cocoa Application / Choose ...&lt;/code&gt; then select the folder to save your project into. I'll use &lt;strong&gt;WebViewExample&lt;/strong&gt; as the project name in this tutorial (but you can use whatever you want).
	&lt;/li&gt;
	&lt;li&gt;
		In your Xcode window, under &lt;code&gt;Overview / Groups &amp;amp; Files&lt;/code&gt;, expand &lt;code&gt;WebViewExample / Frameworks&lt;/code&gt; by clicking the arrow icon.
	&lt;/li&gt;
	&lt;li&gt;
		Right-click &lt;strong&gt;Other Frameworks&lt;/strong&gt; and select &lt;code&gt;Add / Existing Frameworks... / Webkit.framework / Add&lt;/code&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		On the same level as &lt;strong&gt;Frameworks&lt;/strong&gt;, expand &lt;strong&gt;Resources&lt;/strong&gt; by clicking the arrow icon.
	&lt;/li&gt;
	&lt;li&gt;
		In a Finder window, locate your HTML5 folder (the folder containing your &lt;code&gt;.html&lt;/code&gt; files, etc.) and drag it into this &lt;strong&gt;Resources&lt;/strong&gt; folder in Xcode. Make sure to choose &lt;strong&gt;Create Folder References for any added folders&lt;/strong&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		On the same level as &lt;strong&gt;Resources&lt;/strong&gt;, expand &lt;strong&gt;Classes&lt;/strong&gt; by clicking the arrow icon.
	&lt;/li&gt;
	&lt;li&gt;
		Select &lt;strong&gt;WebViewExampleAppDelegate.h&lt;/strong&gt; which will open it for editing in the right column.
	&lt;/li&gt;
	&lt;li&gt;
		Edit the file to look like this:
		&lt;pre&gt;&lt;code&gt;
#import &amp;lt;Cocoa/Cocoa.h&amp;gt;
#import &amp;lt;WebKit/WebKit.h&amp;gt;

@interface WebViewExampleAppDelegate : NSObject &lt;NSApplicationDelegate&gt; {
	NSWindow *window;
	IBOutlet WebView *webView;
}

@property (assign) IBOutlet NSWindow *window;
@property (nonatomic, retain) IBOutlet WebView *webView;

@end
		&lt;/code&gt;&lt;/pre&gt;
	&lt;/li&gt;
	&lt;li&gt;
		Now select &lt;strong&gt;WebViewExampleAppDelegate.m&lt;/strong&gt; for editing.
		Edit the file to look like this:
		&lt;pre&gt;&lt;code&gt;
#import &quot;WebViewExampleAppDelegate.h&quot;

@implementation WebViewExampleAppDelegate

@synthesize window;
@synthesize webView;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
}

- (void)awakeFromNib {
	NSString *resourcesPath = [[NSBundle mainBundle] resourcePath];
	NSString *htmlPath = [resourcesPath stringByAppendingString:@&quot;/htdocs/index.html&quot;];
	[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:htmlPath]]];
}

@end
		&lt;/code&gt;&lt;/pre&gt;
		&lt;em&gt;Note: in the line &lt;code&gt;NSString *htmlPath = [resourcesPath stringByAppendingString:@&quot;/htdocs/index.html&quot;];&lt;/code&gt;, change the string &quot;/htdocs/index.html&quot; to your game's &lt;code&gt;.html&lt;/code&gt; file.&lt;/em&gt;
	&lt;/li&gt;
	&lt;li&gt;
		Under &lt;strong&gt;Groups &amp;amp; Files&lt;/strong&gt;, select &lt;strong&gt;WebViewExample&lt;/strong&gt;. Then, in the list to the right under &quot;File Name&quot;, double-click &lt;strong&gt;MainMenu.xib (English)&lt;/strong&gt;. This will open Interface Builder (which should be located in &lt;code&gt;/Developer/Applications/Interface Builder.app&lt;/code&gt;).
	&lt;/li&gt;
	&lt;li&gt;
		In Interface Builder, find the &lt;strong&gt;Library&lt;/strong&gt; window and select the &lt;strong&gt;Objects&lt;/strong&gt; tab.
	&lt;/li&gt;
	&lt;li&gt;
		Scroll down to find a row labeled &quot;Web View - A Coca WebView&quot; &lt;em&gt;(hint: you can type &quot;webview&quot; into the text box at the bottom of this window to filter the results)&lt;/em&gt; and drag it into the &lt;strong&gt;WebViewExample&lt;/strong&gt; window. &lt;em&gt;(another hint: you can resize it and its containing window to whatever sizes you want. More info on this in future tutorials.)&lt;/em&gt;
	&lt;/li&gt;
	&lt;li&gt;
		Find the &quot;MainMenu.xib - English&quot; window and double-click &lt;strong&gt;Web View Example App Delegate&lt;/strong&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		Find the tools window (the one with six icons at the very top, it should be labeled &quot;Web View Example App Delegate Identity&quot;). Switch to the &quot;Connections&quot; tab (by pressing the second icon from the right -- it's a blue circle with a white arrow inside).
		Look under &quot;Outlets&quot;. There should be only one row labeled &quot;window&quot;. You'll come back to this in a moment.
	&lt;/li&gt;
	&lt;li&gt;
		Go back to Xcode and press the &lt;strong&gt;Build and Run&lt;/strong&gt; button (or press command+return on your keyboard).
	&lt;/li&gt;
	&lt;li&gt;
		Go back to Interface Builder. In the &quot;Outlets&quot; section from before, you should now see a row labeled &quot;webView&quot; with an empty circle to the right of it. Press and hold your mouse down inside this empty circle. A blue line should begin to follow your mouse. Drag this blue line into the WebView object that you dropped into the &lt;strong&gt;WebViewExample&lt;/strong&gt; window earlier. (When you hover over it, it should highlight in blue.) Release the mouse button and a connection should be established (this enables communication with your WebView).
	&lt;/li&gt;
	&lt;li&gt;
		Save the file (&lt;code&gt;File / Save&lt;/code&gt; or command+s).
	&lt;/li&gt;
	&lt;li&gt;
		Return to Xode and &lt;strong&gt;Build and Run&lt;/strong&gt;. You should see your app running inside the window that opens.
	&lt;/li&gt;
&lt;/ol&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5517989875/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena&quot; src=&quot;http://farm6.static.flickr.com/5019/5517989875_9bd2dd3820_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	This example project is available &lt;a href=&quot;https://github.com/lostdecade/web_view_example&quot;&gt;on our GitHub page&lt;/a&gt; (I've included my old game &lt;a href=&quot;http://scriptnode.com/lab/spacius/&quot;&gt;Spacius!&lt;/a&gt; as an example).
	You can also &lt;a href=&quot;https://github.com/lostdecade/web_view_example/blob/master/WebViewExample.app.zip&quot;&gt;download the generated WebViewExample app&lt;/a&gt; directly.
&lt;/p&gt;

&lt;p&gt;
	I'll post another tutorial soon on how to make a more complete app (&lt;strong&gt;EDIT :&lt;/strong&gt; now available &lt;a href=&quot;http://www.lostdecadegames.com/completing-your-native-mac-osx-app-built-in-h&quot;&gt;here&lt;/a&gt;!), including adding icons, enabling &lt;code&gt;localStorage&lt;/code&gt; and building a bridge from JavaScript to Objective-C.
	&lt;a href=&quot;http://twitter.com/lostdecadegames&quot;&gt;Follow us on Twitter&lt;/a&gt; to get notified when we publish that tutorial.
&lt;/p&gt;

&lt;p&gt;
	Could you get it to work? Any steps I could change to make things easier to understand? Please let me know in the comments.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>An HTML5 game in the Mac App Store</title>
		<link href="http://www.lostdecadegames.com/an-html5-game-in-the-mac-app-store"/>
		<updated>2011-03-13T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/an-html5-game-in-the-mac-app-store</id>
		<content type="html">&lt;p&gt;
	HTML5 is the development buzzword of the moment.
	It's the &quot;ajax ninja&quot; of the last few years, so naturally it comes with its fair share of skepticism.
	Indeed, many have been writing about its seemingly
	&lt;a href=&quot;http://developers.slashdot.org/story/11/01/20/206206/No-More-Version-Numbers-For-HTML&quot;&gt;never-ending spec&lt;/a&gt;,
	&lt;a href=&quot;http://caniuse.com/#search=html5&quot;&gt;inconsistent implementations&lt;/a&gt; by browser makers,
	and even its &lt;a href=&quot;http://techcrunch.com/2010/04/30/joe-hewitt-web-development/&quot;&gt;inferiority to native apps&lt;/a&gt;.
	All are valid arguments against betting a real business on HTML5.
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5517989699/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena banner on Tech Crunch&quot; src=&quot;http://farm6.static.flickr.com/5176/5517989699_72f3ddceec_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	However, here's a hard example of why you absolutely &lt;em&gt;should&lt;/em&gt; consider serious development in HTML5.
	In December of last year,
	&lt;a href=&quot;/announcing-onslaught-arena-for-sale-in-the-go&quot;&gt;we launched&lt;/a&gt; our little pure-HTML5 game
	&lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; in the Google Chrome Webstore.
	Sales &lt;a href=&quot;http://techcrunch.com/2011/01/04/sales-have-slowed-to-a-trickle-on-googles-chrome-web-store/&quot;&gt;could be better&lt;/a&gt;,
	sure, but we also just launched the &lt;em&gt;exact same game&lt;/em&gt; in the &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;Mac App Store&lt;/a&gt;.
	The code is identical with negligible development time required to port it over to a completely different platform.
&lt;/p&gt;

&lt;p&gt;
	Think about the business case for that. Normally it would take considerable resources to port a game to such a different platform.
	We know our game isn't exactly a AAA title, but if programmed from the ground up in Objective-C, our best guess is it would take a few &lt;em&gt;months&lt;/em&gt; to develop.
	That's time that we can now spend on content updates or even a sequel.
&lt;/p&gt;

&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5517989549/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena running on my MacBook Pro&quot; src=&quot;http://farm6.static.flickr.com/5254/5517989549_1916903b05_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	How was it done?
	We just &lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html&quot;&gt;embedded a WebView&lt;/a&gt; in a native Cocoa app using Xcode.
	Is it inferior? Not noticeably so.
	On my MacBook Pro, the &lt;a href=&quot;http://goo.gl/ICa5u&quot;&gt;Chrome Web Store version&lt;/a&gt; ranges from about 50-250 FPS (frames per second) depending on how many monsters are on the screen.
	On the same computer, the &lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;Mac App Store version&lt;/a&gt; ranges from 30-100 FPS.
	(You can see this for yourself: &lt;strong&gt;type &quot;lddebug&quot;&lt;/strong&gt; while in-game to see debug information.)
	And despite &lt;a href=&quot;http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio&quot;&gt;nasty HTML5 audio issues&lt;/a&gt;, sound plays great in both versions.
&lt;/p&gt;

&lt;p&gt;
	Surprisingly, the Chrome version runs faster than the native Mac version.
	While Safari and Chrome are both using WebKit as their rendering engines,
	Chrome is likely faster because &lt;a href=&quot;http://code.google.com/p/v8/&quot;&gt;V8&lt;/a&gt; has wicked speed and its canvas rendering is &lt;a href=&quot;http://blog.chromium.org/2010/09/unleashing-gpu-acceleration-on-web.html&quot;&gt;hardware-accelerated&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	Either way, it runs great on both platforms and required almost no dedicated development time to port.
	If you're a developer, you should find this exciting. We certainly do!
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5517989875/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena&quot; src=&quot;http://farm6.static.flickr.com/5019/5517989875_9bd2dd3820_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Since you made it this far, you might like to read &lt;a href=&quot;http://www.lostdecadegames.com/our-first-week-in-the-chrome-webstore-the-num&quot;&gt;&quot;Our first week in the Chrome Webstore: the numbers&quot;&lt;/a&gt; if you're into graphs and sales numbers (and who isn't!).
	If you'd like to learn more about our HTML5 development, including a tutorial on how to embed a WebView into a native Mac app,
	&lt;a href=&quot;http://twitter.com/lostdecadegames&quot;&gt;follow us on Twitter&lt;/a&gt;; we'll be writing about that soon.
&lt;/p&gt;

&lt;p&gt;
	&lt;a href=&quot;http://itunes.apple.com/us/app/onslaught-arena/id418268106&quot;&gt;
		See Onslaught! Arena in the Mac App Store.
	&lt;/a&gt;
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Onslaught! Arena is free on Valentine's Day</title>
		<link href="http://www.lostdecadegames.com/onslaught-arena-is-free-on-valentines-day"/>
		<updated>2011-02-13T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-arena-is-free-on-valentines-day</id>
		<content type="html">&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5439656325/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena roses&quot; src=&quot;http://farm5.static.flickr.com/4114/5439656325_6ab6df3f48.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Love it or hate it, &lt;strong&gt;Valentine's Day&lt;/strong&gt; is a day about expressing love ... and giving gifts!
	To celebrate and to show our love for the indie gamers out there, we're making &lt;a href=&quot;http://goo.gl/2lBb2&quot;&gt;Onslaught! Arena FREE on the Chrome Webstore&lt;/a&gt; for &lt;strong&gt;today only&lt;/strong&gt;.
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5439743547/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena heart icon&quot; src=&quot;http://farm6.static.flickr.com/5053/5439743547_d61fa29f21.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Normally &lt;strong&gt;$1.99&lt;/strong&gt;, this is a great chance to save some cash for your sweetheart (or hey, for yourself!) while still getting to have some retro fun. So please &lt;strong&gt;help spread the word&lt;/strong&gt; on &lt;a href=&quot;http://twitter.com/#!/lostdecadegames&quot;&gt;Twitter&lt;/a&gt; and &lt;a href=&quot;http://www.facebook.com/pages/Lost-Decade-Games/139862159378069&quot;&gt;Facebook&lt;/a&gt; and happy monster slaying!
&lt;/p&gt;

&lt;h2&gt;&lt;a href=&quot;http://goo.gl/S0tOG&quot;&gt;Get Onslaught! Arena FREE&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;
	Happy Valentine's Day!
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Onslaught! Arena v1.2.8</title>
		<link href="http://www.lostdecadegames.com/onslaught-arena-v128"/>
		<updated>2011-02-12T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-arena-v128</id>
		<content type="html">&lt;p&gt;
	We just pushed a minor update to &lt;strong&gt;Onslaught! Arena&lt;/strong&gt; on the &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Chrome Webstore&lt;/a&gt;. This quick update includes:
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5439656325/&quot;&gt;
	&lt;img alt=&quot;HTML5 Shield Logo&quot; src=&quot;http://farm5.static.flickr.com/4114/5439656325_6ab6df3f48_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;Removing the broken High Score table.&lt;/li&gt;
	&lt;li&gt;Supporting the &quot;k&quot; key to switch WASD and arrow keys for controls (for lefties!).&lt;/li&gt;
	&lt;li&gt;Supporting the &quot;html5&quot; keycode to unlock a (visual only) &lt;a href=&quot;http://twitpic.com/3z5iib&quot;&gt;HTML5 shield&lt;/a&gt;. Help spread HTML5!&lt;/li&gt;
	&lt;li&gt;Various bug fixes and tweaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	While this is just a small release, we've got new content in the works, including &lt;strong&gt;new weapons&lt;/strong&gt;, &lt;strong&gt;new monsters&lt;/strong&gt;, and a &lt;strong&gt;special promotion&lt;/strong&gt; for Valentine's Day (this upcoming Monday). So stay tuned for more updates!
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Details about our next game Burn Tactics</title>
		<link href="http://www.lostdecadegames.com/details-about-our-next-game-burn-tactics"/>
		<updated>2011-01-16T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/details-about-our-next-game-burn-tactics</id>
		<content type="html">&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5361705333/sizes/z/&quot;&gt;
	&lt;img alt=&quot;Burn Tactics&quot; src=&quot;http://farm6.static.flickr.com/5247/5361705333_dc2b4f2f83_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	&lt;em&gt;Update: we had to change plans, so Burn Tactics is no longer under development.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
	We recently started developing our next game, tentatively called &lt;strong&gt;Burn Tactics&lt;/strong&gt;.
	The concept is a turn-based medieval fantasy strategy game where players control a vengeful dragon who's intent on burning down villages and seeking havoc on the kingdom.
&lt;/p&gt;

&lt;p&gt;
	While we're still very early in development, we've already made wireframes for every screen in the game and have figured out how the interface will flow in its entirety. As you can see from the included images, we'll be periodically uploading (really rough and ugly!) &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/sets/72157625840334334/&quot;&gt;screenshots of our progress&lt;/a&gt;.
	We even have some game code written; we're using the &lt;strong&gt;&lt;a href=&quot;http://impactjs.com/&quot;&gt;impact&lt;/a&gt; HTML5 game engine&lt;/strong&gt; and are so far really liking it.
&lt;/p&gt;

&lt;h2&gt;Why we chose to work on this game&lt;/h2&gt;

&lt;p&gt;
	We've had probably a dozen ideas for what to work on next including puzzle games, RTS games, or even a sequel to &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt;. Among all these directions we could go, we decided to work on &lt;strong&gt;Burn Tactics&lt;/strong&gt; for the following reasons:
&lt;/p&gt;

&lt;h3&gt;Accessibility&lt;/h3&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5361706195/&quot;&gt;
	&lt;img alt=&quot;Burn Tactics&quot; src=&quot;http://farm6.static.flickr.com/5041/5361706195_5a7aab2757_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Though many players are enjoying &lt;strong&gt;Onslaught! Arena&lt;/strong&gt;, we've also heard that some of them are turned off by certain features, including:
&lt;/p&gt;
	
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Retro look and feel&lt;/strong&gt;: the 8-bit graphics and sound are very appealing to some players (including us!) but many aren't familiar with and/or nostalgic about &lt;a href=&quot;http://en.wikipedia.org/wiki/Nintendo_Entertainment_System&quot;&gt;NES&lt;/a&gt;-era games or just think it's overplayed as an art direction.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: very difficult, requires quick reflexes and excellent dexterity. (Even our girlfriends don't want to play it because it requires twitch skills they don't enjoy learning and so never acquired!)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Controls&lt;/strong&gt;: we've heard &lt;em&gt;many&lt;/em&gt; complaints about all kinds of problems with the controls. They're too complicated (with mouse and keyboard options), too buried (not exposing all keyboard shortcuts in the UI) and not customizable (giving non-QWERTY users a headache). &lt;strong&gt;Burn Tactics&lt;/strong&gt; will have a simple click/touch-only interface.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Sluggish performance&lt;/strong&gt;: &lt;a href=&quot;http://www.google.com/chrome&quot;&gt;Chrome&lt;/a&gt; users currently have hardware-accelerated graphics in &lt;strong&gt;Onslaught! Arena&lt;/strong&gt;, which certainly helps, but tons of monsters and weapons on-screen can be very taxing on older computers and browsers (making it easy to die and very frustrating).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	&lt;strong&gt;Burn Tactics&lt;/strong&gt; is a concept that shouldn't have these problems, so hopefully it'll appeal to a larger audience of gamers.
&lt;/p&gt;

&lt;h3&gt;Small in scope&lt;/h3&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5361706559/&quot;&gt;
	&lt;img alt=&quot;Burn Tactics&quot; src=&quot;http://farm6.static.flickr.com/5082/5361706559_91a36cc7fb_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	As you may have &lt;a href=&quot;/why-geoff-failed-and-the-road-to-redemption&quot;&gt;read&lt;/a&gt; &lt;a href=&quot;/why-you-cant-play-matts-dream-game-yet&quot;&gt;before&lt;/a&gt;, we both have bad habits of letting our game concepts explode into unclimbable mountains. Given that, our mantra for &lt;strong&gt;Burn Tactics&lt;/strong&gt; is:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Ridiculously simple turn-based strategy game.&lt;/li&gt;
	&lt;li&gt;Keep it simple.&lt;/li&gt;
	&lt;li&gt;Polish, polish, polish.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Mobile-friendly&lt;/h3&gt;

&lt;p&gt;
	While we would &lt;strong&gt;love&lt;/strong&gt; to get &lt;strong&gt;Onslaught! Arena&lt;/strong&gt; onto mobile platforms such as Android and iPad, there are many hurdles and in some cases, brick walls. Conversely, &lt;strong&gt;Burn Tactics&lt;/strong&gt; is being designed from the ground up to make it feasible to get onto mobile/touch devices. This is great because releasing &lt;strong&gt;Onslaught! Arena&lt;/strong&gt; onto these devices has been one of our most common requests.
&lt;/p&gt;

&lt;h2&gt;We're still working on Onslaught! Arena&lt;/h2&gt;

&lt;p&gt;
	We've got some &lt;a href=&quot;http://www.lostdecadegames.com/support&quot;&gt;issues&lt;/a&gt; we're looking into fixing and we're also trying to get &lt;strong&gt;Onslaught! Arena&lt;/strong&gt; into the new Mac OSX App Store.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Onslaught! Arena now on sale for $1.99</title>
		<link href="http://www.lostdecadegames.com/onslaught-arena-now-on-sale-for-199"/>
		<updated>2011-01-07T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-arena-now-on-sale-for-199</id>
		<content type="html">&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5281233302/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena in the Chrome Webstore&quot; src=&quot;http://farm6.static.flickr.com/5250/5281233302_f99499e9a7_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Happy new year! Our first game &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; launched exactly &lt;a href=&quot;/our-first-week-in-the-chrome-webstore-the-num&quot;&gt;one month ago today&lt;/a&gt;, so we're pretty excited about this year. To welcome 2011, we're having a &lt;strong&gt;60% off&lt;/strong&gt; sale! You can &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;buy Onslaught! Arena now&lt;/a&gt; from the Chrome Webstore for just &lt;strong&gt;$1.99&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
	We've started early production on our next game (to be announced soon!) but we are also still listening to your feedback and fixing any issues that come up on our &lt;a href=&quot;http://lostdecadegames.uservoice.com/&quot;&gt;support forum&lt;/a&gt;.
	And as always, please feel free to &lt;a href=&quot;/pages/contact-1182&quot;&gt;contact us&lt;/a&gt; with any comments or questions.
&lt;/p&gt;

&lt;p&gt;
	Thanks for your support!
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Reviews of 6 Screen Recording Apps for OSX</title>
		<link href="http://www.lostdecadegames.com/reviews-of-6-screen-recording-apps-for-osx"/>
		<updated>2010-12-31T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/reviews-of-6-screen-recording-apps-for-osx</id>
		<content type="html">&lt;p&gt;
	I've been wanting to make some more videos of &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; (and other prototypes we've got cooking) so I wanted to get a really good screen video recording app for Mac OSX.
	But before buying utility software I like to do a little research to make sure I get the one best taylored to my needs.
&lt;/p&gt;

&lt;h2&gt;Desired features&lt;/h2&gt;

&lt;p&gt;
	Since I'll primarily be recording gameplay from our games, I have particular needs in screen recording software, including:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&lt;em&gt;Easily&lt;/em&gt; capture video&lt;/strong&gt; -- with a really simple and noninvasive interface.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;No noticeable CPU hit&lt;/strong&gt; -- I had issues with &lt;a href=&quot;http://www.ambrosiasw.com/utilities/snapzprox/&quot;&gt;Snapz Pro&lt;/a&gt; slowing down my computer when I was recording the &lt;a href=&quot;http://www.youtube.com/watch?v=AJscBSbc-aA&quot;&gt;How to beat the Green Dragon&lt;/a&gt; video, so I didn't include it in this research.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Ability to record &lt;em&gt;audio&lt;/em&gt; as well as video&lt;/strong&gt; -- ideally from the built-in computer's microphone &lt;em&gt;and&lt;/em&gt; what's coming out of the speakers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Which applications did I review?&lt;/h2&gt;

&lt;p&gt;
	These are just some quick reviews (one of them &lt;em&gt;very&lt;/em&gt; quick!), but in most of them I've included &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/&quot;&gt;screenshots&lt;/a&gt; and actual &lt;a href=&quot;http://www.youtube.com/lostdecadegames&quot;&gt;video&lt;/a&gt; recorded with the application. Here they are in the order I reviewed them:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.techsmith.com/camtasia/&quot;&gt;Camtasia&lt;/a&gt; ($99)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://deepit.ru/products/CaptureIt/info/&quot;&gt;CaptureIt!&lt;/a&gt; ($29.95)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://store.shinywhitebox.com/ishowuhd/main.html&quot;&gt;iShowU HD Pro&lt;/a&gt; ($59.95)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://decimus.net/ScreenMimic/&quot;&gt;Screen Mimic&lt;/a&gt; ($65)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.syniumsoftware.com/screenium/&quot;&gt;Screenium&lt;/a&gt; ($29)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.telestream.net/screen-flow/&quot;&gt;ScreenFlow&lt;/a&gt; ($99)&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- Camtasia --&gt;
&lt;h2&gt;Camtasia&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5301721026/&quot;&gt;
	&lt;img alt=&quot;Camtasia&quot; src=&quot;http://farm6.static.flickr.com/5247/5301721026_494d79cd36_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	First I looked at the free trial of &lt;a href=&quot;http://www.techsmith.com/camtasia/&quot;&gt;Camtasia&lt;/a&gt; (full version: &lt;strong&gt;$99.00 USD&lt;/strong&gt;) and had the following thoughts:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Nice that it's available for PC &lt;em&gt;and&lt;/em&gt; Mac.&lt;/li&gt;
	&lt;li&gt;Had to install something called &lt;strong&gt;Soundflower&lt;/strong&gt; to record audio from the built-in microphone. That's irritating; I'd much rather it be bundled with the software I already had to install. &lt;em&gt;(Note: looks like most of these apps also require &lt;strong&gt;SoundFlower&lt;/strong&gt;, so not a huge ding against &lt;strong&gt;Camtasia&lt;/strong&gt;.)&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Confusing interface. Had to start recording to tell how to set the recording region.&lt;/li&gt;
	&lt;li&gt;I don't dig the interface. I'd rather see native OSX checkboxes and other widgets than a bunch of custom graphics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	Here's a quick video I recorded with &lt;strong&gt;Camtasia&lt;/strong&gt;. You can hear both the game's audio and my voice clearly:
&lt;/p&gt;

&lt;object width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/hBUxzApXqLI?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/hBUxzApXqLI?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;
	Overall seems pretty solid and I was happy with the video I recorded. I couldn't find a good way to switch between the microphone VS. speaker audio recordings in the editing software it came with. But I guess that would mostly be done in something else like &lt;a href=&quot;http://www.apple.com/ilife/imovie/&quot;&gt;iMovie&lt;/a&gt; anyway. I'm not sure that &lt;strong&gt;Camtasia&lt;/strong&gt; is the best bang for the buck considering that its price is up to &lt;strong&gt;three times&lt;/strong&gt; that of some of its competitors.
&lt;/p&gt;

&lt;!-- CaptureIt! --&gt;
&lt;h2&gt;CaptureIt!&lt;/h2&gt;

&lt;p&gt;
	Next I tried &lt;a href=&quot;http://deepit.ru/products/CaptureIt/info/&quot;&gt;CaptureIt!&lt;/a&gt; (full version: &lt;strong&gt;$29.95 USD&lt;/strong&gt;) and I was immediately confused. The moment I ran the application my entire screen faded a bit and a toolbar appeared in the bottom-left corner of my desktop. (You can see what I mean on the &lt;a href=&quot;http://deepit.ru/products/CaptureIt/info/&quot;&gt;product page&lt;/a&gt;.)
&lt;/p&gt;

&lt;p&gt;
	I quit, then reopened the application to give it another shot. This time I figured out how to record video (which took some digging), but I couldn't for the life of me find where it put the movie file. Since it clearly wasn't as intuitive and easy to learn as I wanted, I wrote it off as a failure and moved on to the next application.
&lt;/p&gt;

&lt;!-- iShowU HD Pro --&gt;
&lt;h2&gt;iShowU HD Pro&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5302126632/&quot;&gt;
	&lt;img alt=&quot;iShowU HD&quot; src=&quot;http://farm6.static.flickr.com/5007/5302126632_8fa46da300_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	&lt;a href=&quot;http://store.shinywhitebox.com/ishowuhd/main.html&quot;&gt;iShowU HD Pro&lt;/a&gt;'s full version is &lt;strong&gt;$59.95 USD&lt;/strong&gt; with a fewer-features version available for &lt;strong&gt;$29.95 USD&lt;/strong&gt;. I downloaded the demo, gave it a go, and had the following thoughts:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;An update was required the &lt;em&gt;moment&lt;/em&gt; I started the application. While it's nice that it has an &lt;strong&gt;automated update&lt;/strong&gt; flow, I'd rather they had included the update in the file I had just downloaded!&lt;/li&gt;
	&lt;li&gt;I liked the option to show or hide the mouse icon during recording. &lt;em&gt;(Turns out this is a pretty common feature.)&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Would be nice to see meta data when selecting the region to record (such as width/height and X/Y coordinates). This is epecially important since my most common use-case will be wanting to record the &lt;em&gt;exact&lt;/em&gt; gameplay region (eg, 1024x768 pixels).&lt;/li&gt;
	&lt;li&gt;The interface (see screenshot above) felt too large and clunky for my needs. I don't really want to spend much time with whatever screen-capturing software I end up purchasing; I want it to be largely invisible and just quickly/easily record videos then disappear.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	It was really easy to record a test video:
&lt;/p&gt;

&lt;iframe title=&quot;YouTube video player&quot; class=&quot;youtube-player&quot; type=&quot;text/html&quot; width=&quot;480&quot; height=&quot;390&quot; src=&quot;http://www.youtube.com/embed/OUKS3kDdeZg&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;
	&lt;strong&gt;iShowU HD Pro&lt;/strong&gt; is not bad but I think the choice in price might hurt its ability to sell copies. I definitely knew I'd need the &quot;Pro&quot; version since (if I understood correctly) the limited version for 50% less doesn't record audio. So that kind of made me feel like I wouldn't be getting as good a deal (it's funny how &lt;a href=&quot;http://smallbiztrends.com/2008/08/8-pricing-strategies-you-can-implement-right-now.html&quot;&gt;pricing works&lt;/a&gt;, isn't it?)
&lt;/p&gt;

&lt;!-- Screen Mimic --&gt;
&lt;h2&gt;Screen Mimic&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5308732569/&quot;&gt;
	&lt;img alt=&quot;Screen Mimic&quot; src=&quot;http://farm6.static.flickr.com/5043/5308732569_14776689ec_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	&lt;a href=&quot;http://decimus.net/ScreenMimic/&quot;&gt;Screen Mimic&lt;/a&gt; (&lt;strong&gt;$65 USD&lt;/strong&gt;) was next on my list and I had the following thoughts when using it:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Simple and &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5308732569/&quot;&gt;noninvasive interface&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;I like how it displays the selection resolution (eg, 640x480 pixels).&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Very&lt;/strong&gt; useful that you can export as &lt;code&gt;.swf&lt;/code&gt;! Last time I checked I couldn't find anything to easily convert a movie file to flash on a Mac, so I found this feature extra appealing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	The recording quality is pretty good too, as you can see in this video I made using the demo:
&lt;/p&gt;

&lt;object width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/nIXgMc5VRek?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/nIXgMc5VRek?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;
	My favorite feature of &lt;strong&gt;Screen Mimic&lt;/strong&gt; is that it does a great job of staying out of your face. At first it's just an icon in your menu bar. Click it, and the only options displayed are &quot;New Recording&quot; and &quot;Pause Recording&quot; (disabled). Very minimal and definitely appreciated. On the downside, its has fewer options than the competitors in its price range. Based on the other software with similar features I'd say it should be priced about half of what it is.
&lt;/p&gt;

&lt;!-- Screenium --&gt;
&lt;h2&gt;Screenium&lt;/h2&gt;

&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5308732915/&quot;&gt;
	&lt;img alt=&quot;Screenium&quot; src=&quot;http://farm6.static.flickr.com/5130/5308732915_e2dfdfbe8e_t.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Next up I tried
	&lt;a href=&quot;http://www.syniumsoftware.com/screenium/&quot;&gt;Screenium&lt;/a&gt; (&lt;strong&gt;$29 USD&lt;/strong&gt;)
	and immediately liked it.
	The demo is fully-featured except it limits recordings to 30 seconds. Other software in its category might remove features and/or add watermarks to exported videos. Giving me full access to all normal features allowed me to see &lt;em&gt;exactly&lt;/em&gt; what I'd be paying for without any uncertainty. Good stuff.&lt;/li&gt;
&lt;/p&gt;

&lt;p&gt;
	Recording and exporting this video was a breeze:
&lt;/p&gt;

&lt;object width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Y_FgeZwj_zc?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/Y_FgeZwj_zc?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;
	I have almost nothing but good things to say about &lt;strong&gt;Screenium&lt;/strong&gt;:
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5309320464/&quot;&gt;
	&lt;img alt=&quot;Screenium&quot; src=&quot;http://farm6.static.flickr.com/5045/5309320464_7cabc89483_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;Really nice interface.&lt;/li&gt;
	&lt;li&gt;Love the ability to select which audio to record (system audio and/or built-in microphone).&lt;/li&gt;
	&lt;li&gt;Really cool that you can include your built-in camera to the screen capture (see lower-left-hand corner in the video)!&lt;/li&gt;
	&lt;li&gt;Tons of options regarding Hotkeys.&lt;/li&gt;
	&lt;li&gt;Love the simplicity of the export feature; you can just press &quot;OK&quot; to export immediately, or dig in and get pretty advanced.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;So cool&lt;/strong&gt; that you can type in exact width/height and X/Y coordinates! As an anal programmer this optional granular control is wonderful.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	It's difficult to say why, but I also felt that &lt;strong&gt;Screenium&lt;/strong&gt; had excellent usability. All the options were easy to find and in the right place. No task was a chore.
&lt;/p&gt;

&lt;!-- ScreenFlow --&gt;
&lt;h2&gt;ScreenFlow&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5309321144/&quot;&gt;
	&lt;img alt=&quot;ScreenFlow&quot; src=&quot;http://farm6.static.flickr.com/5089/5309321144_7e0e805023_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	After trying &lt;a href=&quot;http://www.telestream.net/screen-flow/&quot;&gt;ScreenFlow&lt;/a&gt; (&lt;strong&gt;$99 USD&lt;/strong&gt;), I had the following thoughts:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Immediately got a &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5309320690/&quot;&gt;translucent window with some recording options&lt;/a&gt;. Didn't see any opacity settings; wasn't digging the pre-recording window.&lt;/li&gt;
	&lt;li&gt;Upon clicking &quot;Record Computer Audio,&quot; was disappointed to be prompted to &quot;Install Audio Driver.&quot;&lt;/li&gt;
	&lt;li&gt;The first test video I recorded only captured video from my laptop screen and I couldn't find a way to record from the external monitor instead.&lt;/li&gt;
	&lt;li&gt;Can also include built-in camera recording in your capture, with many more features like sizing, rotation and position. Very cool, but realistically would probably never get used.&lt;/li&gt;
	&lt;li&gt;Has tons of advanced post-capture editing features such as screen stretching and rotating (but I'd rather handle these effects in a different application like &lt;strong&gt;iMovie&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	Videos (from both the screen and built-in camera) are easy to record:
&lt;/p&gt;

&lt;object width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/M36Jb8w6CZs?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/M36Jb8w6CZs?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;
	I found &lt;strong&gt;ScreenFlow&lt;/strong&gt;'s pre-recording interface to be too minimal and its post-recording interface way too involved. The quality feels pretty good, and even at almost $100 the value might be there for some users. But I'm in the market for a &lt;strong&gt;simple&lt;/strong&gt; screen recording app, so as long as it does what I need, the fewer options the better.
&lt;/p&gt;

&lt;!-- QuickTime --&gt;
&lt;h2&gt;Bonus: QuickTime&lt;/h2&gt;

&lt;p&gt;
	&lt;strong&gt;Edit 1/2/2011:&lt;/strong&gt; I gave &lt;strong&gt;QuickTime&lt;/strong&gt; (v10.0) a try after &lt;a href=&quot;http://www.reddit.com/r/osx/comments/eu5j5/reviews_of_6_screen_recording_apps_for_osx_which/&quot;&gt;reading that it was available&lt;/a&gt; for OSX10.6+. While the price tag (free!) is obviously great, I noticed a CPU hit making my gameplay recording sluggish. I also saw no options for recording only a selected region of the screen. These reasons made it a dealbreaker, but it might be a great free solution for you!
&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;
	Overall I was the most impressed with &lt;a href=&quot;http://www.syniumsoftware.com/screenium/&quot;&gt;Screenium&lt;/a&gt;. It has a wonderful interface, is easy to use and powerful enough for my purposes (and being the least expensive is a nice coincidence!).
	If &lt;strong&gt;Screenium&lt;/strong&gt; wasn't on the plate, I guess my second choice would have been &lt;strong&gt;Screen Mimic&lt;/strong&gt;. It does very little but has pleasant controls and is also simple to use.
&lt;/p&gt;

&lt;p&gt;
	Do you have your own experiences with screen recording software on Mac OSX? Is there any great software out there that I missed?
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Results of our PR outreach</title>
		<link href="http://www.lostdecadegames.com/results-of-our-pr-outreach"/>
		<updated>2010-12-26T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/results-of-our-pr-outreach</id>
		<content type="html">&lt;p&gt;
	New games are released every single day, often from big publishers or known developers with long track records of successful titles. So getting the attention of potential gamers who might like to play our &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;little indie game&lt;/a&gt; is difficult to say the least.
&lt;/p&gt;

&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5200049456/in/set-72157624619472766/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena&quot; src=&quot;http://farm5.static.flickr.com/4131/5200049456_7b274df8d9_m.jpg&quot;&gt;
&lt;/a&gt;
	
&lt;p&gt;
	Given a small to nonexistent marketing budget, we think the key is to release the best product you can, be really noisy about it, and attempt to enlist the help of popular gaming news outlets to reach gamers. So we put together an official &lt;a href=&quot;http://www.lostdecadegames.com/assets/onslaught_arena_press_kit.zip&quot;&gt;press kit&lt;/a&gt; with a press release, images, screenshots, etc., and tried contacting about three dozen different gaming news organizations. Here we've compiled the responses (or lack of responses) we received.
&lt;/p&gt;

&lt;p&gt;
	&lt;em&gt;Note: Many of these video game news organizations are constantly inundated with information and requests for reviews and we understand that they couldn't possibly respond to everyone (especially small potatoes like us). Either way we thought the data might be useful to other indie developers or interested parties.&lt;/em&gt;
&lt;/p&gt;

&lt;h2&gt;Responded and posted&lt;/h2&gt;

&lt;p&gt;
	These are the fantastic, extremely helpful people that not only responded to us but were good enough to help in our attempt to reach gamers who might enjoy &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Onslaught! Arena&lt;/a&gt;.
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/4812629713/&quot;&gt;
	&lt;img alt=&quot;Games Inspired by Music contest&quot; src=&quot;http://farm5.static.flickr.com/4075/4812629713_26fe9cfe4f_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.boingboing.net/&quot;&gt;BoingBoing&lt;/a&gt; - We got the idea for the first iteration of &lt;strong&gt;Onslaught!&lt;/strong&gt; from &lt;strong&gt;BoingBoing&lt;/strong&gt;'s &lt;a href=&quot;http://www.boingboing.net/2010/06/14/games-inspired-by-mu.html&quot;&gt;Games Inspired by Music&lt;/a&gt; contest. So we thought it was particularly awesome of them to &lt;a href=&quot;http://boingboing.net/2010/12/08/onslaught-arena-feat.html&quot;&gt;post about our game&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/#!/BoingBoing/status/12719608712663040&quot;&gt;tweet&lt;/a&gt; it to their impressive 65,000+ followers.
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.gamesradar.com/&quot;&gt;GamesRadar&lt;/a&gt; - My long-time friend &lt;a href=&quot;http://twitter.com/brelston&quot;&gt;Brett&lt;/a&gt; wrote about the &lt;a href=&quot;http://www.gamesradar.com/pc/onslaught-arena/news/google-chrome-web-store-is-live-tons-more-indie-games-now-up-for-grabs/a-2010120794414476076/g-2010120794118560087&quot;&gt;Chrome Webstore&lt;/a&gt;, complete with an awesomely huge sceenshot from &lt;strong&gt;Onslaught!&lt;/strong&gt;. He also mentioned the game on his popular &lt;a href=&quot;http://www.gamesradar.com/f/talkradar-132-platinum-hits/a-2010121715428577000&quot;&gt;TalkRadar&lt;/a&gt; podcast. Very cool!
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.indiegamenews.com/&quot;&gt;Indie Game News&lt;/a&gt; - We were really happy to see two stories posted about &lt;strong&gt;Onslaught!&lt;/strong&gt; -- both a &lt;a href=&quot;http://www.indiegamenews.com/2010/12/onslaught-arena-launched-with-google.html&quot;&gt;our press release&lt;/a&gt; and &lt;a href=&quot;http://www.indiegamenews.com/2010/12/thoughts-on-onslaught-arena.html&quot;&gt;quick review of the game&lt;/a&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://onevideogameaday.com/&quot;&gt;One Video Game a Day&lt;/a&gt; - &lt;a href=&quot;http://onevideogameaday.com/about&quot;&gt;Dusan&lt;/a&gt; was awesome enough to find and &lt;a href=&quot;http://twitter.com/#!/1videogameaday/status/23114830498&quot;&gt;tweet&lt;/a&gt; about our earlier demo of &lt;strong&gt;Onslaught!&lt;/strong&gt;, and that didn't stop him from &lt;a href=&quot;http://twitter.com/1videogameaday&quot;&gt;doing it again&lt;/a&gt; about the full version of our game. Very cool and much appreciated!
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Responded, nothing posted yet&lt;/h2&gt;

&lt;p&gt;
	These kind folks have responded but we haven't yet seen anything posted about our game. We have no complaints or anything -- the holidays are especially busy and we were grateful just to hear back. (And we'll be sure to update this list once the posts are up.)
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://2g1g.thepodkast.com/&quot;&gt;2girls1game&lt;/a&gt; --
		&lt;strong&gt;Edit: 1/8/11&lt;/strong&gt; --
		Review here: &lt;a href=&quot;http://2g1g.thepodkast.com/2010/12/check-out-onslaught-arena/&quot;&gt;check out onslaught! arena&lt;/a&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.casualgirlgamer.com/&quot;&gt;Casual Girl Gamer&lt;/a&gt;
		(extra bonus points for finding and &lt;a href=&quot;http://www.casualgirlgamer.com/articles/entry/28/The-Best-30-HTML-5-games/&quot;&gt;posting about&lt;/a&gt; a very early version of &lt;strong&gt;Onslaught!&lt;/strong&gt;)
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.crudepixel.com/&quot;&gt;Crudepixel&lt;/a&gt; --
		&lt;strong&gt;Edit: 1/8/11&lt;/strong&gt; --
		&lt;a href=&quot;http://crudepixel.com/Spotlight/Indie/Onslaught-Arena&quot;&gt;Review is here.&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.diygamer.com/&quot;&gt;DIYgamer&lt;/a&gt; --
		&lt;strong&gt;Edit: 12/28/10&lt;/strong&gt; --
		Review is here: &lt;a href=&quot;http://www.diygamer.com/2010/12/bring-onslaught/&quot;&gt;Bring on the Onslaught!&lt;/a&gt;.
	&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.manapool.co.uk/&quot;&gt;Mana Pool&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://playthisthing.com/&quot;&gt;Play This Thing!&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.loadsavepoint.com/&quot;&gt;Save Point&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;No response&lt;/h2&gt;

&lt;p&gt;
	Again, we don't have any delusions -- we know we're a tiny, unknown developer and some organizations are too busy to respond to us or spend their time on our little game. So it's cool and all that, but for data's sake here's the list of who we contacted and never heard a peep from:
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5199457969/in/set-72157624619472766/&quot;&gt;
	&lt;img alt=&quot;Beholder Boss in Onslaught! Arena&quot; src=&quot;http://farm6.static.flickr.com/5243/5199457969_d96cde54e0_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;About: Game Center&lt;/li&gt;
	&lt;li&gt;ApertureGames&lt;/li&gt;
	&lt;li&gt;Casual Gamer Chick&lt;/li&gt;
	&lt;li&gt;Destructoid&lt;/li&gt;
	&lt;li&gt;Gamasutra&lt;/li&gt;
	&lt;li&gt;Game Rant&lt;/li&gt;
	&lt;li&gt;GameSetWatch&lt;/li&gt;
	&lt;li&gt;Gamezebo&lt;/li&gt;
	&lt;li&gt;Gaming Bits&lt;/li&gt;
	&lt;li&gt;Joystiq&lt;/li&gt;
	&lt;li&gt;Kotaku&lt;/li&gt;
	&lt;li&gt;Rock, Paper, Shotgun&lt;/li&gt;
	&lt;li&gt;tsumea&lt;/li&gt;
	&lt;li&gt;Worlds in Motion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;No response, disappointed&lt;/h2&gt;

&lt;p&gt;
	Now, I stand by what I said earlier about understanding that folks are busy and we're aware of our minimal place in the industry. But for one reason or another we were really hoping on hearing back from the following list of organizations and were disappointed not to:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;gametunnel&lt;/li&gt;
	&lt;li&gt;Gamer Limit&lt;/li&gt;
	&lt;li&gt;
		IndieGames --
		&lt;strong&gt;Edit: 12/28/10&lt;/strong&gt; -- Heard back in the comments. Thanks Mike!
	&lt;/li&gt;
	&lt;li&gt;indienerds&lt;/li&gt;
	&lt;li&gt;IndieReview&lt;/li&gt;
	&lt;li&gt;
		Mozilla &lt;em&gt;(they're not a gaming news site but they've got an &lt;a href=&quot;https://gaming.mozillalabs.com/&quot;&gt;HTML5 games contest&lt;/a&gt; going on right now and have been &lt;a href=&quot;http://twitter.com/#!/mozlabs/status/15816539060051968&quot;&gt;tweeting about&lt;/a&gt; other games so we were hoping for at least a quick tweet about ours)&lt;/em&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	So in some cases kind of a bummer, but no hard feelings and we still love you guys!
&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5281233302/&quot;&gt;
	&lt;img alt=&quot;Onslaught! Arena featured on the Chrome Webstore homepage!&quot; src=&quot;http://farm6.static.flickr.com/5250/5281233302_f99499e9a7_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	For a brand-new developer, I'd say our expectations were about met (save for the prior list). It looks like a little more than &lt;strong&gt;8%&lt;/strong&gt; of those we contacted have posted about our game, and we heard back from about &lt;strong&gt;one third&lt;/strong&gt;, which is a good start. Here's to hoping that next time around we'll have a bigger, better game and will be fortunate enough to reach a bigger audience!
&lt;/p&gt;

&lt;p&gt;
	&lt;em&gt;Our extra special hats off to &lt;a href=&quot;http://www.google.com/&quot;&gt;Google&lt;/a&gt; for being a &lt;strong&gt;huge&lt;/strong&gt; help and an amazingly supportive contact. They even &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5281233302/&quot;&gt;featured us&lt;/a&gt; on the &lt;a href=&quot;https://chrome.google.com/webstore&quot;&gt;Webstore homepage&lt;/a&gt;! So awesome.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
	Did we miss anyone? This data is really hard to keep track of! If we messed up anywhere above, please do let us know and we'll be happy to amend the details (and thanks for your support!).
&lt;/p&gt;

&lt;h2&gt;Update&lt;/h2&gt;

&lt;p&gt;
	&lt;strong&gt;Edit: 12/27/10&lt;/strong&gt; --
	After having seen this article we've heard from a few awesome organizations such as
	&lt;a href=&quot;http://indiegames.com/&quot;&gt;IndieGames&lt;/a&gt;,
	&lt;a href=&quot;http://www.indiegamereviewer.com/&quot;&gt;Indie Game Reviewer&lt;/a&gt; and
	&lt;a href=&quot;http://nukezilla.com/&quot;&gt;Nukezilla&lt;/a&gt;.
	Thanks for the support!
&lt;/p&gt;

&lt;p&gt;
	&lt;strong&gt;Edit: 2/15/11&lt;/strong&gt; --
	Overlooked a &lt;a href=&quot;http://twitter.com/#!/ocremix/statuses/12883586592018433&quot;&gt;retweet by OverClocked ReMix&lt;/a&gt;. Thanks Andrew!
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Our first week in the Chrome Webstore (the numbers)</title>
		<link href="http://www.lostdecadegames.com/our-first-week-in-the-chrome-webstore-the-num"/>
		<updated>2010-12-14T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/our-first-week-in-the-chrome-webstore-the-num</id>
		<content type="html">&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5199457969/in/set-72157624619472766/&quot;&gt;
	&lt;img alt-=&quot;Onslaught! Arena&quot; src=&quot;http://farm6.static.flickr.com/5243/5199457969_d96cde54e0_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Our new game &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; launched mid-afternoon a week ago today in the new &lt;a href=&quot;https://chrome.google.com/webstore&quot;&gt;Google Chrome Webstore&lt;/a&gt;. This is a brand-new platform from Google and many people are curious (if not excited) about it, so we thought we'd share our numbers from the first week. &lt;em&gt;Note: We got this data from a combination of &lt;a href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt;, Google Checkout, and our own &lt;a href=&quot;http://code.google.com/chrome/webstore/docs/index.html&quot;&gt;Licensing API&lt;/a&gt; caching system.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
	First up is the number of unique visitors to our &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Chrome Webstore page&lt;/a&gt;:
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5261584284/&quot;&gt;
	&lt;img alt=&quot;Visitors to Onslaught! Arena's Chrome Webstore page&quot; src=&quot;http://farm6.static.flickr.com/5123/5261584284_1d021f31ff.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Our strongest day was easily Wednesday with &lt;strong&gt;7,750 uniques&lt;/strong&gt; and our weakest day was just yesterday (Monday) with only &lt;strong&gt;1,059&lt;/strong&gt;. These numbers do seem a bit low for a new product launched by Google, but we are just one game featured in a big store full of apps.
&lt;/p&gt;

&lt;p&gt;
	Next up is the number of new players of &lt;strong&gt;Onslaught! Arena&lt;/strong&gt;. These are unique users who visited the &lt;a href=&quot;http://play.lostdecadegames.com/onslaught_arena/&quot;&gt;play Onslaught! Arena page&lt;/a&gt; and logged in with their Google accounts.
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5260961943/&quot;&gt;
	&lt;img alt=&quot;Number of new Onslaught! Arena players&quot; src=&quot;http://farm6.static.flickr.com/5087/5260961943_13e2d8995f.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;	
	So these numbers range pretty wildly, from &lt;strong&gt;863 players&lt;/strong&gt; down to just &lt;strong&gt;96&lt;/strong&gt;. Lastly, and I'm sure most interestingly, are the number of game sales.
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5261584260/&quot;&gt;
	&lt;img alt=&quot;Number of Onslaught! Arena sales&quot; src=&quot;http://farm6.static.flickr.com/5169/5261584260_93086dd073.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	So our best days have seen only &lt;strong&gt;5 sales&lt;/strong&gt;, but we've had at least one purchase every day. And you may be wondering what our take is out of the &lt;strong&gt;$4.99&lt;/strong&gt; price tag. After Google's &lt;a href=&quot;https://checkout.google.com/support/sell/bin/answer.py?answer=89800&quot;&gt;transaction fees&lt;/a&gt;, we get &lt;strong&gt;$4.46&lt;/strong&gt; per transaction. So given our &lt;strong&gt;21 sales&lt;/strong&gt; so far, that makes for a grand total of &lt;strong&gt;$93.66&lt;/strong&gt; in the first week. These comparatively low numbers make some of the &lt;a href=&quot;http://www.delicious.com/lostdecadegames/onslaught-arena+press&quot;&gt;press&lt;/a&gt; we've seen kind of &lt;a href=&quot;http://www.gottabemobile.com/2010/12/10/chrome-web-store-sales-almost-non-existant/&quot;&gt;humorous&lt;/a&gt;:
&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;
	Onslaught Arena has almost 1,300 users, which means its developer has earned about $7,000 in the first week.
&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;
	That article is inaccurate by a large margin. What that says to us is that the &quot;users&quot; and &quot;installs&quot; numbers of the Webstore pages are confusing. On &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;our app's page&lt;/a&gt;, the numbers displayed are currently &lt;strong&gt;2,337 users - 3,200 weekly installs&lt;/strong&gt;. We're not sure exactly what those numbers mean or where they came from, since they don't easily mesh well with the numbers we have.
&lt;/p&gt;

&lt;p&gt;
	So we won't exactly be buying yachts anytime soon. But I'll tell you, after &lt;a href=&quot;/why-geoff-failed-and-the-road-to-redemption&quot;&gt;failing for&lt;/a&gt; &lt;a href=&quot;/why-you-cant-play-matts-dream-game-yet&quot;&gt;so long&lt;/a&gt; to publish a &quot;real&quot; game, it feels good to finally be able to call ourselves professional game developers, even if on a tiny scale. (And the game is at least paying its own hosting bills at the moment.)
&lt;/p&gt;

&lt;p&gt;
	What do you think? Surprised? Not surprised? Do you have your own numbers from the &lt;strong&gt;Chrome Webstore&lt;/strong&gt; that you'd like to share?
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>App Engine and Chrome Webstore Issues</title>
		<link href="http://www.lostdecadegames.com/app-engine-and-chrome-webstore-issues"/>
		<updated>2010-12-12T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/app-engine-and-chrome-webstore-issues</id>
		<content type="html">&lt;h2&gt;Quick background&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5252913696/&quot;&gt;
  &lt;img alt=&quot;Onslaught! Arena featured in the Chrome Webstore&quot; src=&quot;http://farm6.static.flickr.com/5281/5252913696_1538e10fd7_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
  We recently launched &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt; in the &lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Chrome Webstore&lt;/a&gt;. We're using &lt;a href=&quot;http://code.google.com/appengine/docs/python/gettingstarted/&quot;&gt;App Engine (Python)&lt;/a&gt; as our backend and we are integrated with Google Checkout's &lt;a href=&quot;http://code.google.com/chrome/webstore/docs/get_started.html&quot;&gt;Webstore Licensing API&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  So first off, we messed up: right when we launched, there was a bug in our app that was causing the game demo to serve even to users who had successfully paid for the game. Firstly we'd like to apologize to those users who were affected. We're happy to say that this bug got fixed the night of release.
&lt;/p&gt;

&lt;h2&gt;The troubles we were (and are) having&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    When we first launched, the Licensing API calls were failing. We fixed this, which caused the next two issues:
  &lt;/li&gt;
  &lt;li&gt;
    Some users are getting served &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5255588472/&quot;&gt;error pages&lt;/a&gt; instead of the game itself.
  &lt;/li&gt;
  &lt;li&gt;
    Our app is asking for access to users' email addresses, which understandably makes them uncomfortable. (This is particularly frustrating to us because we neither need or want email addresses.)
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Licensing API calls failing&lt;/h2&gt;

&lt;p&gt;
  So on the night of &lt;a href=&quot;http://www.lostdecadegames.com/announcing-onslaught-arena-for-sale-in-the-go&quot;&gt;the day we launched&lt;/a&gt;, we noticed that users who had purchased the game were still getting served the demo. That's awful! Nobody spotted it because we obviously had access to the game ourselves, and we were also allowing &lt;strong&gt;Google internal beta testers&lt;/strong&gt; access (so they couldn't have found this bug either). We put the fire out quickly (by about 1am PST) and it looks like only 2-3 users even noticed, which is good. Our apologies to any users who were affected.
&lt;/p&gt;

&lt;p&gt;
  Here's why it was happening. Our Python calls to &lt;code&gt;user.federated_identity()&lt;/code&gt; were returning &lt;code&gt;None&lt;/code&gt; on production, invalidating our Licensing API calls (since the API requires OpenID URLs). We feel that this was really easy to miss for the following reasons:
&lt;p&gt;

&lt;ul&gt;
  &lt;li&gt;Dev/local instances of App Engine do not support OpenID URLs at all (this used to be a documented exception, which I can't find anymore on the Google docs page). This makes debugging a &lt;strong&gt;serious time sink&lt;/strong&gt; because we must push to production to test any fixes!&lt;/li&gt;
  &lt;li&gt;The example code (this must have also been removed because I can no longer find it) suggested the use of &lt;code&gt;user_id = user.federated_identity() or user.user_id()&lt;/code&gt; which can be &lt;a href=&quot;http://groups.google.com/a/chromium.org/group/chromium-reviews/msg/c4e98d56d02229e5&quot;&gt;tricky to debug&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Enabling OpenID support is &lt;a href=&quot;http://code.google.com/appengine/articles/openid.html&quot;&gt;experimental&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Once we enabled the &quot;Administration / Application Settings / Authentication Options / (Experimental) Federated Login&quot; option from our App Engine dashboard, &lt;code&gt;user.federated_identity()&lt;/code&gt; was returning the OpenID URL as expected and the Licensing API calls started working again.
&lt;/p&gt;

&lt;a class=&quot;before&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/5252304247/&quot;&gt;
  &lt;img alt=&quot;Onslaught! Arena featured in the Chrome Webstore&quot; src=&quot;http://farm6.static.flickr.com/5130/5252304247_0e56ef269d_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;h2&gt;Server Error pages&lt;/h2&gt;

&lt;p&gt;
  Enabling &lt;strong&gt;Federated Login&lt;/strong&gt; has caused some other pretty nasty issues. One is that some users are getting stuck into &lt;a href=&quot;http://code.google.com/appengine/articles/openid.html#su&quot;&gt;redirect loops&lt;/a&gt;, ultimately resulting in &lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/5255588472/&quot;&gt;error pages&lt;/a&gt;. We've spent a ton of time debugging, researching and otherwise trying to figure out a solution to this, with no real solid solution. There are &lt;a href=&quot;https://github.com/sje397/Chess&quot;&gt;pretty good examples&lt;/a&gt; of work-arounds, but they're all kind of hack jobs and still have edge cases that result in the same error. While I freely admit I'm new to both Python and App Engine, I do not currently see a bulletproof solution to this without Google fixing their OpenID implementation.
&lt;/p&gt;

&lt;p&gt;
  This is a serious problem and if you have experienced this error in our game yourself, we've very sorry. We're trying really hard to find a fix.
&lt;/p&gt;

&lt;h2&gt;Asking for email addresses&lt;/h2&gt;

&lt;p&gt;
  The other issue that came up after enabling &lt;strong&gt;Federated Login&lt;/strong&gt; is that the application now asks for users' email addresses when they authenticate with the app. We've seen a bunch of complaints about this in the reviews and aren't entirely sure what to do about it yet. We do not want, need or use email addresses so we'd ideally like to skip this step altogether.
&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;
  Many of these platforms and APIs are brand-spanking-new, so problems can be expected. But some of these issues are serious showstoppers and are causing awful user experiences and seriously depleting our already limited development resources. If you have any thoughts or ideas on solutions, we're all ears! And again, if you've been affected by any of our issues, we're sincerely sorry.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Announcing Onslaught! Arena for sale in the Google Chrome Webstore!</title>
		<link href="http://www.lostdecadegames.com/announcing-onslaught-arena-for-sale-in-the-go"/>
		<updated>2010-12-07T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/announcing-onslaught-arena-for-sale-in-the-go</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Lost Decade Games&lt;/strong&gt; is proud to announce its first release: &lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena&lt;/a&gt;, a medieval fantasy arcade shoot 'em up. Built using HTML5 technologies, &lt;strong&gt;Onslaught! Arena&lt;/strong&gt; is now &lt;a href=&quot;https://chrome.google.com/extensions/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;available for sale in the Chrome Webstore&lt;/a&gt; via Google Checkout.&lt;/p&gt;
&lt;h2&gt;About Onslaught! Arena&lt;/h2&gt;
&lt;p&gt;Originally created for the &lt;a href=&quot;http://www.boingboing.net/arcade/&quot;&gt;Games Inspired by Music&lt;/a&gt; contest from &lt;a href=&quot;http://www.boingboing.net/2010/06/14/games-inspired-by-mu.html&quot;&gt;Boing Boing&lt;/a&gt;, &lt;strong&gt;Onslaught! Arena&lt;/strong&gt; began as a quick two-week project with programming by &lt;a href=&quot;http://geoffblair.com/&quot;&gt;Geoff Blair&lt;/a&gt;, art by &lt;a href=&quot;http://richtaur.com/&quot;&gt;Matt Hackett&lt;/a&gt; and music/sound effects by &lt;a href=&quot;http://jmflava.com/&quot;&gt;Joshua Morse&lt;/a&gt;. Over the next few months, Geoff and Matt continued to tweak and improve the game and stuff it full of content, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;50 waves of combat&lt;/li&gt;
&lt;li&gt;Over a dozen ferocious monsters&lt;/li&gt;
&lt;li&gt;More than 6 types of weapons&lt;/li&gt;
&lt;li&gt;Ability to continue from a saved game&lt;/li&gt;
&lt;li&gt;Online high score table&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;About Lost Decade Games&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lost Decade Games&lt;/strong&gt; was founded by Geoff Blair and Matt Hackett in September of 2010. Combined, Geoff and Matt have over 20 years of programming and design experience. Our goal is to create engaging, fun HTML5 games with a focus on gameplay and strategy.&lt;/p&gt;
&lt;h2&gt;About the Chrome Webstore&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://chrome.google.com/webstore&quot;&gt;Chrome Webstore&lt;/a&gt; is &quot;an open market for apps.&quot; Released by Google in December of 2010, the webstore enables users to easily discover and install applications built for the web, with the option to pay for premium software via &lt;a href=&quot;https://checkout.google.com/&quot;&gt;Google Checkout&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Related links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lostdecadegames.com/onslaught_arena&quot;&gt;Onslaught! Arena's official home page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/khodnfbkbanejphecblcofbghjdgfaih&quot;&gt;Onslaught! Arena in the Chrome Webstore&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://play.lostdecadegames.com/onslaught_arena/demo&quot;&gt;Onslaught! Arena Free Trial / Demo&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Obfuscating JavaScript with Closure Compiler Advanced Optimizations</title>
		<link href="http://www.lostdecadegames.com/obfuscating-javascript-with-closure-compiler"/>
		<updated>2010-11-17T00:00:00-08:00</updated>
		<id>http://www.lostdecadegames.com/obfuscating-javascript-with-closure-compiler</id>
		<content type="html">&lt;p&gt;While working on our upcoming game, Onslaught! Arena, we wanted to obfuscate the JavaScript code as much as possible. Using tools like &lt;a href='http://developer.yahoo.com/yui/compressor/'&gt;YUICompressor&lt;/a&gt; and &lt;a href='http://code.google.com/closure/compiler/'&gt;Google Closure Compiler&lt;/a&gt; (with Standard Optimizations) just weren&amp;#8217;t enough. Luckily, Closure Complier has an &amp;#8221;&lt;a href='http://code.google.com/closure/compiler/docs/api-tutorial3.html'&gt;Advanced Optimizations&lt;/a&gt;&amp;#8221; mode. This mode will really make your JavaScript gross and unreadable!&lt;/p&gt;

&lt;p&gt;Here are some cases to watch out for along with some tips for those trying to make their JavaScript as unreadable as possible:&lt;/p&gt;

&lt;h2 id='dont_access_object_properties_as_string_literals'&gt;Don&amp;#8217;t access object properties as string literals&lt;/h2&gt;

&lt;p&gt;Using Advanced Optimizations has its &lt;a href='http://code.google.com/closure/compiler/docs/api-tutorial3.html#dangers'&gt;pitfalls&lt;/a&gt;. Because of it&amp;#8217;s super aggressive renaming, Closure Compiler will &lt;strong&gt;break your code&lt;/strong&gt; if you access object properties using string literals. For example:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;thing&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;stuff&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='nx'&gt;foo&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
	&lt;span class='nx'&gt;bar&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;20&lt;/span&gt;
&lt;span class='p'&gt;};&lt;/span&gt;

&lt;span class='c1'&gt;// This will break after Advanced Optimization :(&lt;/span&gt;
&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;foo&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;thing&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;stuff&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;].&lt;/span&gt;&lt;span class='nx'&gt;foo&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Closure will rewrite &lt;code&gt;thing.stuff&lt;/code&gt; as something like &lt;code&gt;a.b&lt;/code&gt; and accessing &lt;code&gt;a[&amp;quot;stuff&amp;quot;]&lt;/code&gt; isn&amp;#8217;t going to work.&lt;/p&gt;

&lt;h2 id='dont_use_string_literals'&gt;Don&amp;#8217;t use string literals&lt;/h2&gt;

&lt;p&gt;Closure Compiler won&amp;#8217;t obfuscate string literals for obvious reasons so just stay away from them as much as you can! Here&amp;#8217;s an example:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='c1'&gt;// Bad. Can&amp;#39;t obfuscate well.&lt;/span&gt;
&lt;span class='nx'&gt;myObject&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;wounded&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;

&lt;span class='c1'&gt;// Good!&lt;/span&gt;
&lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;States&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='nx'&gt;Wounded&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
	&lt;span class='nx'&gt;Stunned&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
	&lt;span class='nx'&gt;Attacking&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;2&lt;/span&gt;
&lt;span class='p'&gt;};&lt;/span&gt;
&lt;span class='nx'&gt;myObject&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;States&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;Wounded&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Instead of seeing &lt;code&gt;a.b = &amp;quot;wounded&amp;quot;;&lt;/code&gt; in your compiled code, you&amp;#8217;ll get something like &lt;code&gt;a.b = c.d;&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id='stay_away_from_builtin_javascript_object_property_names'&gt;Stay away from built-in JavaScript object property names&lt;/h2&gt;

&lt;p&gt;If you want to achieve maximum obfuscation, don&amp;#8217;t use built-in JavaScript object properties such as &lt;code&gt;.position&lt;/code&gt;, &lt;code&gt;.left&lt;/code&gt; or &lt;code&gt;.width&lt;/code&gt; in your custom objects. Here&amp;#8217;s an example:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='c1'&gt;// Bad; &amp;quot;type&amp;quot; and &amp;quot;position&amp;quot; won&amp;#39;t be obfuscated.&lt;/span&gt;
&lt;span class='nx'&gt;myObject&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;type&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='nx'&gt;myObject&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;position&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='nx'&gt;x&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;y&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;};&lt;/span&gt;

&lt;span class='c1'&gt;// Better; &amp;quot;thing&amp;quot; and &amp;quot;coords&amp;quot; will be obfuscated.&lt;/span&gt;
&lt;span class='nx'&gt;myObject&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;thing&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='nx'&gt;myObject&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;coords&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='nx'&gt;x&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;y&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The list of properties such as in this example is pretty long and many of them are common, sensible names for properties. I&amp;#8217;m certainly not recommending that you stop using all of them. Find the balance that makes sense to you but keep in mind the more you can refrain from using these properties, the more obfuscated your code will be.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s an (incomplete!) list of properties that won&amp;#8217;t be obfuscated:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='nx'&gt;add&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;canvas&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;create&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;data&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;direction&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;display&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;execute&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;height&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;history&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;images&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;layers&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;left&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;load&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;loop&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;map&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;normalize&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;now&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;paused&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;play&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;position&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;reset&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;scale&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;setInterval&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;setTimeout&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;size&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;start&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;stop&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;style&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;top&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;type&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;update&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;view&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;width&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;x&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;These are the lessons we&amp;#8217;ve learned while obfuscating our code as much as possible to help protect our work. Can you think of any additional best practices to assist in this process?&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Onslaught! Arena 1.0 Gameplay Teaser</title>
		<link href="http://www.lostdecadegames.com/onslaught-arena-10-gameplay-teaser"/>
		<updated>2010-10-16T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-arena-10-gameplay-teaser</id>
		<content type="html">&lt;p&gt;Onslaught! Arena 1.0 is nearly complete! The latest version of the game is chock full of new enemies, weapons and traps! Take a look at the video below for a sneak peek at the challenges which await you in the arena!&lt;/p&gt;
&lt;p&gt;&lt;iframe width=&quot;480&quot; height=&quot;390&quot; frameborder=&quot;0&quot; src=&quot;http://www.youtube.com/embed/_knh7lwSFVU?rel=0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Onslaught! Arena will be launching with the &lt;a title=&quot;Google Chrome Web Store&quot; href=&quot;https://chrome.google.com/webstore&quot; target=&quot;_blank&quot;&gt;Google Chrome Web Store&lt;/a&gt;&amp;nbsp;later this year. The full version of the game will be purchasable from the Chrome Web Store via Google Checkout and of course we'll have a&amp;nbsp;&lt;strong&gt;free trial version &lt;/strong&gt;available so you can get a taste of the fast paced action!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>What to do when your game is too easy and too hard</title>
		<link href="http://www.lostdecadegames.com/what-to-do-when-your-game-is-too-easy-and-too"/>
		<updated>2010-08-29T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/what-to-do-when-your-game-is-too-easy-and-too</id>
		<content type="html">&lt;p&gt;
	We've been preparing to release &lt;em&gt;version 1.0&lt;/em&gt; of our game
	&lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;Onslaught!&lt;/a&gt;
	and part of that process has included looking wherever we can for feedback on how to improve the game.
&lt;/p&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/4938446723/in/set-72157624619472766/&quot;&gt;
	&lt;img alt=&quot;Onslaught! preview screenshot&quot; src=&quot;http://farm5.static.flickr.com/4118/4938446723_306ca551c5_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Luckily for us, &lt;strong&gt;Onslaught!&lt;/strong&gt; has
	&lt;a href=&quot;http://delicious.com/lostdecadegames/onslaught+press&quot;&gt;been talked about a little bit on the 'net&lt;/a&gt;
	(especially on
	&lt;a href=&quot;http://www.reddit.com/r/WebGames/comments/cwq66/onslaught_an_html5_medieval_fantasy_shoot_em_up/&quot;&gt;/r/WebGames&lt;/a&gt;;
	thanks
	&lt;a href=&quot;http://www.reddit.com/&quot;&gt;Reddit&lt;/a&gt;!)
	so we've been able to dig through some players' comments.
	And we've noticed two recurring themes:
&lt;/p&gt;

&lt;h2&gt;It's too easy&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://playstuff.net/showthread.php/2716-hmtl5-Onslaught-game?p=39546&amp;viewfull=1#post39546&quot;&gt;&quot;lol it was easy just spam the space bar with the 3 way swords shooting at every door&quot;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.reddit.com/r/WebGames/comments/cwq66/onslaught_an_html5_medieval_fantasy_shoot_em_up/c0vvbkp&quot;&gt;&quot;It would be nice is the difficulty actually ramped up past a certain point&quot;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.reddit.com/r/WebGames/comments/cwq66/onslaught_an_html5_medieval_fantasy_shoot_em_up/c0vvgg4&quot;&gt;&quot;I don't want to die on purpose&quot;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://playstuff.net/showthread.php/2716-hmtl5-Onslaught-game?p=39547&amp;viewfull=1#post39547&quot;&gt;&quot;272,460 I'm so bored.....&quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;It's too hard&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.canvasdemos.com/2010/08/02/onslaught/&quot;&gt;&quot;Too hard, I think&quot;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://playstuff.net/showthread.php/2716-hmtl5-Onslaught-game?p=39581&amp;viewfull=1#post39581&quot;&gt;&quot;I officially suck at this game.&quot;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.reddit.com/r/WebGames/comments/cwq66/onslaught_an_html5_medieval_fantasy_shoot_em_up/c0vvo0x&quot;&gt;&quot;I died when they started spawning two cyclops at a time :(&quot;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.reddit.com/r/WebGames/comments/cwq66/onslaught_an_html5_medieval_fantasy_shoot_em_up/c0vuyx8&quot;&gt;&quot;That game was fucking hard.&quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;So, it's too easy AND too hard?&lt;/h2&gt;

&lt;p&gt;
	If the feedback was consistently that &lt;strong&gt;Onslaught!&lt;/strong&gt; was too easy,
	here are some easy tweaks we could have made to help make the game more difficult:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Increase the number of enemies.&lt;/li&gt;
	&lt;li&gt;Increase enemy speed.&lt;/li&gt;
	&lt;li&gt;Increase enemy damage.&lt;/li&gt;
	&lt;li&gt;Decrease the hero's damage.&lt;/li&gt;
	&lt;li&gt;Decrease the hero's health.&lt;/li&gt;
	&lt;li&gt;Decrease weapon drops.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	Likewise, we could have reversed any of those rules to make the game easier.
	But what is a game designer supposed to do with conflicting requirements?
&lt;/p&gt;

&lt;h2&gt;The difficulty curve&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/4813905516/in/set-72157624619472766/&quot;&gt;
	&lt;img alt=&quot;Onslaught! dragon boss&quot; src=&quot;http://farm5.static.flickr.com/4135/4813905516_f6e55409d4_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	The
	&lt;a href=&quot;http://8.latest.lostdecadegamesapp.appspot.com/&quot;&gt;current version&lt;/a&gt;
	of &lt;strong&gt;Onslaught!&lt;/strong&gt; has a very simple algorithm for increasing difficulty.
	There are seven waves, the final wave consisting primarily of the
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/4813905516/in/set-72157624619472766/&quot;&gt;dragon boss&lt;/a&gt;.
	After defeating this wave, the player is thrown back to the beginning of the loop with the number of enemies
	increased steadily by 50% of the first wave (so it would go: 10 bats, 15 bats, 20 bats, 25 bats, etc.).
&lt;/p&gt;

&lt;p&gt;
	According to &lt;a href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt;,
	&lt;strong&gt;Onslaught!&lt;/strong&gt;'s
	10,000+ players have played the game for an average of
	&lt;strong&gt;32 seconds&lt;/strong&gt; each.
	We mentioned previously how we had
	&lt;a href=&quot;http://www.lostdecadegames.com/boing-boing-contest-post-mortem-onslaught-0&quot;&gt;failed to make a 30 second game&lt;/a&gt;,
	and for the final release of &lt;strong&gt;Onslaught!&lt;/strong&gt; we decided it would be good to expand on that idea.
&lt;/p&gt;

&lt;p&gt;
	What we were wanting instead of a steady climb in difficulty like this was an easy beginning with a sharp
	increase in difficulty.
	So after the first couple of wave cycles, the game should &lt;em&gt;rapidly&lt;/em&gt; increase in difficulty,
	providing a challenge for hardcore gamers.
&lt;/p&gt;

&lt;p&gt;
	The below graph shows the previous difficulty curve (&lt;em&gt;v0.2&lt;/em&gt;, in blue),
	and the difficulty curve we are shooting for in &lt;em&gt;v1.0&lt;/em&gt; (in red):
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/4938960236/&quot;&gt;
	&lt;img alt=&quot;Onslaught! difficulty curve&quot; src=&quot;http://farm5.static.flickr.com/4098/4938960236_578e95dab8.jpg&quot;&gt;
&lt;/a&gt;

&lt;h2&gt;What we're going to do and why&lt;/h2&gt;

&lt;p&gt;
	This is going to be a difficult (but fun!) problem to solve. Here's what we have in mind:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
		We're adding &lt;strong&gt;four new enemies&lt;/strong&gt;: flaming skull, flying imps, wizards and sandworms (each with new behavior).
		These enemies will increase the length of gameplay (giving us room to play with difficulty)
		as well as mixing up the player's strategy with varying enemy behaviors.
	&lt;/li&gt;
	&lt;li&gt;
		Players will battle &lt;strong&gt;two new classic D&amp;D-style bosses&lt;/strong&gt; (guess what they are!).
		The first will be relatively easy and the second will be extremely difficult.
	&lt;/li&gt;
	&lt;li&gt;
		After completing a cycle of waves, traps will begin to appear in the arena!
		The number of traps will steadily increase as the player completes cycles.
		They do damage to the player when touched, so this will limit the area the player can navigate.
	&lt;/li&gt;
	&lt;li&gt;
		Complete weapon overhaul: this includes balancing current weapons as well as adding new weapons
		(such as a &lt;strong&gt;bouncing battle axe&lt;/strong&gt; and &lt;strong&gt;flaming sword&lt;/strong&gt; that leaves a trail of fire in its wake)!
	&lt;/li&gt;
	&lt;li&gt;
		For the
		&lt;a href=&quot;http://www.freeplay.net.au/2010/06/freeplay-awards/&quot;&gt;Freeplay awards&lt;/a&gt;,
		we
		&lt;a href=&quot;/onslaught-v02-freeplay-awards&quot;&gt;did two things&lt;/a&gt;
		to improve the &lt;strong&gt;30 second experience&lt;/strong&gt;:
		we replaced the default weapon (rocks, which are boring) with swords (which are more fun!)
		and we provided the player with two starting weapons.
		These weapons were randomly generated, so players were able to reload the game
		in order to get whatever weapons they wanted (for instance, the overpowered trident).
		For &lt;em&gt;v1.0&lt;/em&gt;, we're going to provide set weapons to balance this out (probably knives and fireballs).
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	We've got these improvements and many others in mind as well!
	Our hope is that these gameplay tweaks and content additions will make the game more enjoyable
	for both casual and hardcore players alike.
	What do you think? Is &lt;strong&gt;Onslaught!&lt;/strong&gt; currently too easy or too hard?
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Puzzle Punk -- a Postmortem on a Failed Puzzle Quest Clone</title>
		<link href="http://www.lostdecadegames.com/puzzle-punk-a-postmortem-on-a-failed-puzzle-q"/>
		<updated>2010-08-14T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/puzzle-punk-a-postmortem-on-a-failed-puzzle-q</id>
		<content type="html">&lt;h2&gt;My vicious cycle&lt;/h2&gt;

&lt;p&gt;
	Something had to give.
	I'd been
	&lt;a href=&quot;http://www.lostdecadegames.com/why-you-cant-play-matts-dream-game-yet&quot;&gt;trying and failing&lt;/a&gt;
	to make my game idea a reality for years and years.
	The vision was simple: &lt;strong&gt;an online, multiplayer retro &lt;acronym title=&quot;Role-Playing Game&quot;&gt;RPG&lt;/acronym&gt;&lt;/strong&gt;.
	I guess the term would have been
	&lt;a href=&quot;http://www.massively.com/&quot; title=&quot;Massively Multiplayer Online Role-Playing Game&quot;&gt;MMORPG&lt;/a&gt;
	but I'd been working on various implementations of this project long before the days of 
	&lt;a href=&quot;http://www.worldofwarcraft.com/&quot;&gt;World of Warcraft&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	I remember being a kid and &lt;em&gt;longing&lt;/em&gt; to play games
	in the time of
	&lt;a href=&quot;http://www.shiningforcecentral.com/&quot;&gt;Shining Force&lt;/a&gt; and
	&lt;a href=&quot;http://shrines.rpgclassics.com/snes/som/&quot;&gt;Secret of Mana&lt;/a&gt;.
	I had that same longing, but this time it was to make my own game.
&lt;/p&gt;

&lt;a
	class=&quot;after&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4656666809/in/set-72157624517441461/&quot;
&gt;
	&lt;img alt=&quot;Valadria (super alpha)&quot; src=&quot;http://farm5.static.flickr.com/4046/4656666809_625a796787_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Eventually I started referring to my game project as &lt;strong&gt;Valadria&lt;/strong&gt;.
	Sure, I'd go off on &lt;a href=&quot;http://olremix.org/&quot;&gt;tangents&lt;/a&gt;
	and I'd sometimes work on &lt;a href=&quot;http://scriptnode.com/lab/spacius/&quot;&gt;other little crappy games&lt;/a&gt;,
	but I'd &lt;em&gt;always&lt;/em&gt; come back to this core retro RPG concept.
&lt;/p&gt;

&lt;p&gt;
	&lt;em&gt;
		My last iteration of &lt;strong&gt;Valadria&lt;/strong&gt; is
		&lt;a href=&quot;http://playvaladria.appspot.com/&quot;&gt;up on App Engine&lt;/a&gt;.
		It's a very early prototype, but it's playable.
		I've also &lt;a href=&quot;http://github.com/richtaur/Valadria&quot;&gt;put the source on GitHub&lt;/a&gt;
		(something I wish I'd been able to do with each of my iterations over the years).
	&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
	So I had a pretty good idea about the game I wanted to build,
	but I'd been working on it for years with very little to show for it.
	Here was my vicious cycle:
&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;For some unexplainable reason, my dream game would pop into my head, and &lt;strong&gt;I'd get motivated&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;
		I'd scrounge up freetime between work, school, social life and gaming,
		and I'd put whatever knowledge I had together towards &lt;strong&gt;making the game&lt;/strong&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		Eventually (and this was inevitable), I'd hit a hurdle and &lt;strong&gt;stop working&lt;/strong&gt;.
		Graphics, music, networking code, whatever.
		Something would kill my motivation, most often the hopeless feeling of knowing I'd never finish what
		I'd started.
		This step felt like &lt;em&gt;getting fired or dumped&lt;/em&gt;; it was heartbreaking.
	&lt;/li&gt;
	&lt;li&gt;Rinse, &lt;strong&gt;repeat&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;a
	class=&quot;before&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855358427/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: loading_complete&quot; src=&quot;http://farm5.static.flickr.com/4096/4855358427_362cee4609_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	&lt;em&gt;And&lt;/em&gt; it should be noted that every time I went through the first step, I'd start from scratch.
	It had been months or &lt;em&gt;years&lt;/em&gt; since the last iteration,
	so the code was gross and the ideas were stale.
	I had been repeating this process for over 10 years.
&lt;/p&gt;

&lt;p&gt;
	It can take time to learn, especially when you're so close to something that you become blind to it.
	I didn't notice this cycle. I just thought I liked making games in my free time.
	What's wrong with that?
	But it wasn't that simple and it wasn't that harmless.
	I was suffering from a repeated, defeating, soul-crushing feeling of hopelessness every few years
	when I'd get fed up without getting anywhere and shelve my dream game.
	It was making me depressed and negatively affecting other areas of my life.
	And when I finally realized this, I took action to prevent it.
&lt;/p&gt;

&lt;h2&gt;My prevention plan&lt;/h2&gt;

&lt;a
	class=&quot;after&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855358605/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: select_a_character&quot; src=&quot;http://farm5.static.flickr.com/4093/4855358605_7fcaf16472_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	How was I going to stop this vicious cycle? 
	I had recently read
	&lt;a href=&quot;http://www.amazon.com/Switch-Change-Things-When-Hard/dp/0385528752&quot;&gt;Switch: How to Change Things When Change Is Hard&lt;/a&gt;
	which inspired me to fix areas of my life that felt broken.
	And so the next time I was motivated to work on &lt;strong&gt;Valadria&lt;/strong&gt;,
	I instead focused my attention on examining why the project always failed and what to do about it.
&lt;/p&gt;

&lt;p&gt;
	After much internal debating, whiteboarding and sleepless nights, here was my plan:
&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;
		Create a JavaScript
		&lt;a href=&quot;http://github.com/richtaur/diggy&quot;&gt;game engine&lt;/a&gt;
		and use it to build a simple match-3 game.
	&lt;/li&gt;
	&lt;li&gt;
		Extend this same engine and create a
		&lt;a href=&quot;http://en.wikipedia.org/wiki/Puzzle_Quest:_Challenge_of_the_Warlords&quot;&gt;Puzzle Quest&lt;/a&gt;
		clone.
	&lt;/li&gt;
	&lt;li&gt;
		Extend this new engine to build my dream game, an online
		&lt;a href=&quot;http://playvaladria.appspot.com/&quot;&gt;retro RPG&lt;/a&gt;.
	&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
	This list probably looks really unexpected for an amateur indie developer who wants to work on retro RPGs.
	So let me explain my line of thinking &amp;#8230;
&lt;/p&gt;

&lt;h3&gt;Why a match-3 game in JavaScript?&lt;/h3&gt;

&lt;a
	class=&quot;before&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855358387/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: create_a_character&quot; src=&quot;http://farm5.static.flickr.com/4081/4855358387_503a9b5ee6_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Over the years, I had tried to build &lt;strong&gt;Valadria&lt;/strong&gt; in everything from 
	&lt;em&gt;QBASIC&lt;/em&gt; to &lt;em&gt;C++&lt;/em&gt; to &lt;em&gt;Turbo Pascal&lt;/em&gt;.
	When I was 23, I started working as a &lt;a href=&quot;http://php.net/&quot;&gt;PHP programmer&lt;/a&gt;,
	which got me looking more seriously at &lt;a href=&quot;http://flixel.org/&quot;&gt;Flash&lt;/a&gt;
	and &lt;a href=&quot;http://crockford.com/&quot;&gt;JavaScript&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	&lt;em&gt;Flash&lt;/em&gt; was pretty cool (&lt;em&gt;ActionScript 3&lt;/em&gt; is particularly wonderful)
	but I was learning the most about JavaScript and I felt the most comfortable with it.
	So after a few more failures and still feeling pulled to JavaScript,
	I just said &quot;fuck it&quot; and decided to use it, even though it had never really been tested as a true gaming language.
&lt;/p&gt;

&lt;p&gt;
	And I know what you may have thought: &quot;Just what the world needs: another match-3 game.&quot;
	I feel the same way, I do; I'll explain in the next section.
&lt;/p&gt;

&lt;h3&gt;What? A &lt;em&gt;Puzzle Quest&lt;/em&gt; clone?!&lt;/h3&gt;

&lt;a
	class=&quot;after&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855977662/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk mockup&quot; src=&quot;http://farm5.static.flickr.com/4116/4855977662_b9fb2ca61d_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	You may notice I used the term &lt;em&gt;clone&lt;/em&gt; here, though I am embarrassed to admit it.
	As an amateur indie game developer, I feel that clones are wrong in so many ways.
	They lack innovation, they are sleazy and unethical, and they are at their core lazy game design.
	Borrowing design elements is just another part of making great software,
	but one should not borrow too heavily.
&lt;/p&gt;

&lt;p&gt;
	So how did I arrive at the conclusion that I should work on a &lt;em&gt;Puzzle Quest&lt;/em&gt; clone?
&lt;/p&gt;

&lt;p&gt;
	My desire was to make a pretty massive retro RPG. I had to, for some reason.
	But I thought about it, and I had never even made &quot;real&quot; game of &lt;em&gt;any&lt;/em&gt; kind.
	Not even a &lt;a href=&quot;http://www.tetris.com/&quot;&gt;Tetris&lt;/a&gt; clone or
	a &lt;a href=&quot;http://nifflas.ni2.se/?page=Knytt+Stories&quot;&gt;side-scrolling platformer&lt;/a&gt;.
	I was untested as a game developer and so my aspirations were unreachable.
&lt;/p&gt;

&lt;p&gt;
	Enter &lt;em&gt;Puzzle Quest&lt;/em&gt;.
	I was a &lt;a href=&quot;http://raptr.com/game/DS/Puzzle_Quest_Challenge_of_the_Warlords/review/richtaur&quot;&gt;huge fan&lt;/a&gt;
	of the original and, like
	&lt;a href=&quot;http://www.gamespot.com/pc/puzzle/galactrix/review.html&quot;&gt;many&lt;/a&gt;
	&lt;a href=&quot;http://www.gamerevolution.com/review/ds/puzzle-quest-galactrix&quot;&gt;others&lt;/a&gt;,
	was very disappointed with &lt;a href=&quot;http://www.playpuzzlequestgalactrix.com/&quot;&gt;the next Puzzle Quest&lt;/a&gt; game.
&lt;/p&gt;

&lt;a
	class=&quot;before&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855976904/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: battle_local&quot; src=&quot;http://farm5.static.flickr.com/4079/4855976904_837b9a6805_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	I really &lt;strong&gt;wanted&lt;/strong&gt; to play an online version of &lt;em&gt;PQ&lt;/em&gt; with my friends,
	but the developer of the original did not choose to go that route.
	Plus, I knew I couldn't get motivated to work on something like
	&lt;a href=&quot;http://www.bobpitch.com/zookeeper/zk.html&quot;&gt;ZooKeeper&lt;/a&gt;;
	I'm just too much of a medieval fantasy geek to get excited about much else.
	But I could get behind something like &lt;em&gt;Puzzle Quest&lt;/em&gt;,
	so I came up with what I called &lt;strong&gt;Puzzle Punk&lt;/strong&gt;:
	a game similar to &lt;em&gt;Puzzle Quest&lt;/em&gt; in a steampunk world with online multiplayer capabilities.
&lt;/p&gt;

&lt;p&gt;
	But even this game was far too complicated.
	I was an untested game developer, after all, and had never shipped a single finished game.
	So the plan was to first make a match-3 game.
	That would be my baby step.
	I'd make a solid, stable match-3 game and then use that core framework to build &lt;strong&gt;Puzzle Punk&lt;/strong&gt;.
&lt;/p&gt;

&lt;h3&gt;Connecting the pieces&lt;/h3&gt;

&lt;p&gt;
	My end goal was not to make &lt;strong&gt;Puzzle Punk&lt;/strong&gt;.
	That was not the desire that was keeping me up all night and defeating me every year or so.
	Indeed, I beat myself up a lot over the last few months for having such a stupid idea as
	a clone in the first place.
	I'd second guess my plan and consider scratching it, but then I'd remember how I arrived at this plan,
	and the soul-crushing defeat was pending again,
	so I just got back on track for finishing &lt;strong&gt;Bombada&lt;/strong&gt;.
	I wasn't really happy with my plan but at least I finally &lt;em&gt;had&lt;/em&gt; one.
&lt;/p&gt;

&lt;h2&gt;So what happened?&lt;/h2&gt;

&lt;a
	class=&quot;before&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855977452/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: shop_modal&quot; src=&quot;http://farm5.static.flickr.com/4114/4855977452_b2d638cc8d_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	This plan failed.
	But that's ok.
	I actually did finish the match-3 game; it's called &lt;strong&gt;Bombada&lt;/strong&gt;.
	It's &lt;a href=&quot;http://playbombada.appspot.com/&quot;&gt;playable in your browser right now&lt;/a&gt;
	and I put the &lt;a href=&quot;http://github.com/lostdecade/bombada&quot;&gt;source code up on GitHub&lt;/a&gt;.
	So I finished one step out of three.
&lt;/p&gt;

&lt;p&gt;
	And as you can see from the
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/sets/72157624517441461/&quot;&gt;many images&lt;/a&gt;
	of the game's development sprinkled about,
	I did make some progress on &lt;strong&gt;Puzzle Punk&lt;/strong&gt; (step 2).
&lt;/p&gt;

&lt;p&gt;
	The reason I shelved development on &lt;strong&gt;Puzzle Punk&lt;/strong&gt; is because
	I started working with Geoff.
	We had met some time before and had mutual friends but never seriously talked about collaborating.
	He had some of his own ideas and his own engine he was working on,
	and all that stuff sounded way more fun than what I was doing.
	I guess if we had not decided to work together (or never met),
	it's conceivable that I could still be working on &lt;strong&gt;Puzzle Punk&lt;/strong&gt;,
	but I doubt it.
&lt;/p&gt;

&lt;p&gt;
	I guess the reason I think that is because I didn't even attempt to try to get Geoff on board
	for my &lt;strong&gt;Puzzle Punk&lt;/strong&gt; idea. I wanted to be working on something else.
&lt;/p&gt;

&lt;a
	class=&quot;after&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855977580/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: shop_phase_2&quot; src=&quot;http://farm5.static.flickr.com/4121/4855977580_9f604de3d8_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;h2&gt;What was good&lt;/h2&gt;

&lt;p&gt;
	It wasn't all bad: I learned some extremely valuable lessons from all this.
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
		Having a plan at all made me feel in control and empowered me,
		adding to my motivation at a time when I otherwise felt powerless.
		&lt;strong&gt;Plans can go to shit over time but it's important to have one anyway.&lt;/strong&gt;
	&lt;/li&gt;
	&lt;li&gt;
		Having a &lt;em&gt;small&lt;/em&gt; project to work on first
		(&lt;strong&gt;Bombada&lt;/strong&gt;, the match-3 game) also helped to remove my feeling of hopelessness.
		When thinking about how far I had to go in the long run, it was overwhelming.
		But it was easy to make progress on &lt;strong&gt;Bombada&lt;/strong&gt;, and it was very rewarding.
	&lt;/li&gt;
	&lt;li&gt;
		Keeping really great records of my progress helped drive development.
		If I would ever feel like I wasn't gaining enough ground,
		I could dig through my
		&lt;a href=&quot;http://github.com/lostdecade/bombada/commits/master&quot;&gt;git history&lt;/a&gt;
		and be reminded of what I &lt;em&gt;had&lt;/em&gt; accomplished.
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	
&lt;/p&gt;

&lt;h2&gt;What was bad&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;
		I think I was on the right track using a language I know and love like JavaScript, but
		I should have used a technology like
		&lt;a href=&quot;https://developer.mozilla.org/en/drawing_graphics_with_canvas&quot;&gt;canvas&lt;/a&gt;
		that makes more sense for game development
		(as opposed to &lt;a href=&quot;http://github.com/lostdecade/bombada&quot;&gt;DOM&lt;/a&gt;).
		Hearing Geoff talk about cool canvas stuff (which is so much better suited for games)
		got me really excited; I could have used some of that motivation.
	&lt;/li&gt;
	&lt;li&gt;
		Instead of a match-3 game, I should have been working on a ridiculously simple medieval fantasy game.
		This would have held my attention better and kept me motivated.
		Cliffski of
		&lt;a href=&quot;http://www.positech.co.uk/&quot;&gt;Positech Games&lt;/a&gt;
		has 
		&lt;a href=&quot;http://positech.co.uk/cliffsblog/?p=753&quot;&gt;written about&lt;/a&gt; this kind of thing.
	&lt;/li&gt;
	&lt;li&gt;
		Instead of building &lt;strong&gt;Puzzle Punk&lt;/strong&gt;,
		I should have been building a slightly more complicated version of the previously mentioned simple game.
		Then I should have iterated on that, and continued the process.
	&lt;/li&gt;
&lt;/ul&gt;

&lt;a
	class=&quot;before&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4855977112/&quot;
&gt;
	&lt;img alt=&quot;Puzzle Punk: modal_stats&quot; src=&quot;http://farm5.static.flickr.com/4136/4855977112_68a373a345_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	Overall, I guess this plan was as good as any other.
	Clearly something needed to change because what I was trying was just not working.
	It's hard to say if the plan would have worked overall, but my single biggest takeaway from all
	of this is: &lt;strong&gt;if you find you can't do it alone, it can really help to collaborate&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
	Case in point: after working just a few months together, Geoff and I have put together what we think is
	&lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;a cool little game&lt;/a&gt;.
	And this is a great building block towards building bigger games.
&lt;/p&gt;

&lt;h2&gt;Google Docs&lt;/h2&gt;

&lt;p&gt;
	I have no idea if this will be interesting to anyone or not, but in addition to uploading
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/sets/72157624517441461/&quot;&gt;the mocks and wireframes&lt;/a&gt;
	to
	&lt;a href=&quot;http://www.flickr.com/people/50655575@N03/&quot;&gt;Flickr&lt;/a&gt;,
	I've also opened up the game documentation I was working on.
	You can view the files below on Google Docs:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
		&lt;a href=&quot;https://docs.google.com/Doc?docid=0ARyJ8rdGusOsZGRibnNqOTVfMzRoY21zODJnMw&amp;amp;hl=en&quot;&gt;Puzzle Punk Economy&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;https://docs.google.com/Doc?docid=0ARyJ8rdGusOsZGRibnNqOTVfMzFja2h3anBoNQ&amp;amp;hl=en&quot;&gt;Puzzle Punk Gameplay&lt;/a&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	Do you have any failed game projects? I can't be the only one!
	I'd love to read about someone else's failed project as well.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A Simple Guide to Game Development Contests</title>
		<link href="http://www.lostdecadegames.com/a-simple-guide-to-game-development-contests"/>
		<updated>2010-07-30T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/a-simple-guide-to-game-development-contests</id>
		<content type="html">&lt;h2&gt;How do you find out about these things?&lt;/h2&gt;

&lt;p&gt;
	I hear about game development contests relatively often,
	but it's almost always too late to enter.
	I end up just being frustrated and wonder:
	&quot;Where do people find out about these contests?&quot;
&lt;/p&gt;

&lt;p&gt;
	We've recently been more fortunate and have been able to successfully enter
	&lt;a href=&quot;/boing-boing-contest-post-mortem-onslaught-0&quot;&gt;two&lt;/a&gt;
	&lt;a href=&quot;/onslaught-v02-freeplay-awards&quot;&gt;contests&lt;/a&gt;.
	And here's how we finally were able to find out about them in time:
	&lt;strong&gt;by subscribing to insane amount of gaming news&lt;/strong&gt;.
	Below is a list of game development related news sites, feeds and other resources.
&lt;/p&gt;

&lt;a
	class=&quot;after&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4812629713/&quot;
&gt;&lt;img alt=&quot;Boing Boing's Games Inspired by Music contest&quot; src=&quot;http://farm5.static.flickr.com/4075/4812629713_26fe9cfe4f_m.jpg&quot;&gt;&lt;/a&gt;

&lt;h2&gt;News sites:&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://gamasutra.com/&quot;&gt;Gamasutra&lt;/a&gt;
		&amp;bull; &lt;a href=&quot;http://feeds.feedburner.com/GamasutraNews&quot;&gt;News RSS&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.gamedev.net/&quot;&gt;GameDev.net&lt;/a&gt;
		&amp;bull; &lt;a href=&quot;http://www.gamedev.net/xml/&quot;&gt;RSS&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.globalgamejam.org/&quot;&gt;Global Game Jam&lt;/a&gt;
		&amp;bull; &lt;a href=&quot;http://www.globalgamejam.org/rss.xml&quot;&gt;RSS&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.igf.com/&quot;&gt;Independent Games Festival&lt;/a&gt;
		&amp;bull; &lt;a href=&quot;http://feeds2.feedburner.com/igfnews&quot;&gt;News RSS&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.reddit.com/r/IndieGaming&quot;&gt;reddit IndieGaming&lt;/a&gt;
		&amp;bull; &lt;a href=&quot;http://www.reddit.com/r/IndieGaming/.rss&quot;&gt;RSS&lt;/a&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://www.tigsource.com/&quot;&gt;TIGSource&lt;/a&gt;
		&amp;bull; &lt;a href=&quot;http://www.tigsource.com/feed/&quot;&gt;RSS&lt;/a&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Indie-related Twitter profiles:&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com/triptych&quot;&gt;Andrew Wooldridge&lt;/a&gt; - random game news and web development links from a professional web developer.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com/IndieDB&quot;&gt;IndieDB&lt;/a&gt; - News, insight and media direct from the developers. &lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com/indiegamescom&quot;&gt;IndieGames.com&lt;/a&gt; - The latest independent games news, interviews, and features, from the makers of Gamasutra.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com/jseidelin&quot;&gt;Jacob Seidelin&lt;/a&gt; - Ridiculously good &lt;a href=&quot;http://blog.nihilogic.dk/&quot;&gt;JavaScript hacker&lt;/a&gt; and creator of &lt;a href=&quot;http://javascriptgaming.com/&quot;&gt;javascriptgaming.com&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com/makegames&quot;&gt;Make Games&lt;/a&gt; - A collection of interesting games and game design related links. High content, no noise. (From a current Twitter employee and previous co-worker of mine, &lt;a href=&quot;http://twitter.com/k&quot;&gt;Kevin Cheng&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com/Wolfire&quot;&gt;Wolfire&lt;/a&gt; - An independent game company (they blog almost every single day, yowza).&lt;/li&gt;
	&lt;li&gt;Of course there's also &lt;a href=&quot;http://twitter.com/lostdecadegames&quot;&gt;our Twitter profile&lt;/a&gt; where we tweet about our own doings and game-related news.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	&lt;em&gt;Do you know of any additional resources for game development contest news?
	Please let me know in the comments and I'll happily add them to the list.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
	So now that you &lt;strong&gt;know&lt;/strong&gt; about these contests coming up &amp;#8230;
&lt;/p&gt;

&lt;h2&gt;How do you know if you should enter?&lt;/h2&gt;

&lt;p&gt;
	So you found out about an upcoming contest and you're interested.
	Should you try to put a game together to enter into the contest?
	This is a difficult question.
	First:
	&lt;strong&gt;is it a good fit?&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
	If the contest requires that your game is built on
	&lt;a href=&quot;http://unity3d.com/&quot;&gt;Unity&lt;/a&gt;
	but all of your experience is with
	&lt;a href=&quot;http://www.pygame.org/news.html&quot;&gt;pygame&lt;/a&gt;,
	that's probably a good sign to forget about the
	contest and get back to whatever else you were doing.
&lt;/p&gt;

&lt;p&gt;
	It &lt;em&gt;could&lt;/em&gt; be that the contest is so amazing that it's worth derailing your current project,
	starting a new one, or learning a new language,
	but I'd seriously advise against that.
	I think it's a good adage to &lt;strong&gt;finish what you've started&lt;/strong&gt;
	and &lt;strong&gt;play to your strengths&lt;/strong&gt;.
	You might be able to enter a contest outside of your skill set, but you'd probably make a better game just for yourself for fun.
	So I guess what you should ask yourself is:
&lt;/p&gt;

&lt;h2&gt;Will you benefit from entering?&lt;/h2&gt;

&lt;a
	class=&quot;before&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4844819097/&quot;
&gt;&lt;img alt=&quot;Onslaught! 'box art'&quot; src=&quot;http://farm5.static.flickr.com/4084/4844819097_f169bb11f9_m.jpg&quot;&gt;&lt;/a&gt;

&lt;p&gt;
	On the surface, this is another way of asking, &lt;strong&gt;Could you win?&lt;/strong&gt;
	The benefit of winning many of these contests is clear: for example,
	with the recently-announced
	&lt;a href=&quot;http://www.activision.com/index.html#sweepstakes|en_US&quot;&gt;Activision contest&lt;/a&gt;,
	the grand prize is something like &lt;em&gt;$100k&lt;/em&gt; and a publishing deal. That's pretty major!
	But keep in mind that with a prize like that, you're going to get some very polished entries by some veteran game developers.
	The competition will be intense.
&lt;/p&gt;

&lt;p&gt;
	So, maybe you can win and maybe you can't;
	other benefits can arise from entering.
	For example, if you read our
	&lt;a href=&quot;/boing-boing-contest-post-mortem-onslaught-0&quot;&gt;postmortem on the Boing Boing contest&lt;/a&gt;,
	you saw that we were driven by the hard, unchangeable deadline,
	which was great because we often can't find motivation.
	We also made a bunch of mistakes and learned from them, which is another beneficial side effect.
&lt;/p&gt;

&lt;p&gt;
	Merely being involved in a contest can also get some much desired attention to your game.
	According to
	&lt;a href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt;,
	&lt;a href=&quot;http://boingboing.net/&quot;&gt;Boing Boing&lt;/a&gt; has referred over &lt;em&gt;1,500&lt;/em&gt; people to our game
	&lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;Onslaught!&lt;/a&gt;.
	That's not much from a big business perspective, but for a tiny and unknown team like ours, it's great!
&lt;/p&gt;

&lt;h2&gt;Determining if a contest or promotion is shady&lt;/h2&gt;

&lt;p&gt;
	So you found a contest, you figured it's worth your time for one reason or another, and now you're in!
	You want to enter.
	Just please do one more quick thing first: &lt;strong&gt;make sure the contest isn't shady&lt;/strong&gt;.
	You can do that by &lt;strong&gt;reading the fine print and getting a second opinion&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
	If you're seriously considering entering, it's probably worth your time to read the fine print.
	It's certainly not fun reading,
	but you could get into a bind otherwise: a single sentence could disqualify your game
	or remove your rights to your
	&lt;a href=&quot;http://en.wikipedia.org/wiki/Intellectual_property&quot;&gt;intellectual property&lt;/a&gt;.
	Fortunately, there are resources out there to help you.
&lt;/p&gt;

&lt;p&gt;
	The guys over at
	&lt;a href=&quot;http://wolfire.com/&quot;&gt;Wolfire&lt;/a&gt;
	often write about the bigger contests
	(&lt;a href=&quot;http://blog.wolfire.com/2010/06/Activision-Indie-Games-Competition&quot;&gt;like they recently did&lt;/a&gt;).
	For &lt;em&gt;that&lt;/em&gt; particular contest, you can also get
	&lt;a href=&quot;http://gameattorney.com/blog/?p=89&quot;&gt;insight&lt;/a&gt;
	from
	&lt;a href=&quot;http://gameattorney.com/&quot;&gt;Tom Buscaglia&lt;/a&gt;:
	&lt;a href=&quot;http://twitter.com/gameattorney&quot;&gt;The Game Attorney&lt;/a&gt; (a real attorney!).
&lt;/p&gt;

&lt;p&gt;
	Now, if you can't &lt;strong&gt;find&lt;/strong&gt; the fine print, that's a bad sign right there.
	A legitimate company running a &quot;real&quot; contest is going to have documentation to cover their asses.
	If you're just entering into a
	&lt;a href=&quot;http://gamejolt.com/community/forums/topics/game-jolt-s-second-jam/613/&quot;&gt;quick weekend contest&lt;/a&gt;
	like the fine folks over at &lt;a href=&quot;http://gamejolt.com/&quot;&gt;Game Jolt&lt;/a&gt; regularly hold, that's fine.
	But if there's supposedly a cash prize, and you're going to expend hard-earned time and/or money on your project,
	it had damned well better be legit.
&lt;/p&gt;

&lt;p&gt;
	When in doubt, why not ask your
	&lt;a href=&quot;http://forums.indiegamer.com/&quot;&gt;indie game development peers&lt;/a&gt;?
	Late last year I bumped into an interesting thread with the subject
	&lt;a href=&quot;http://forums.indiegamer.com/showthread.php?t=18518&quot;&gt;Indie Game Competition - $15k and possible publishing deals!&lt;/a&gt;.
	What was interesting to me was
	&lt;a href=&quot;http://forums.indiegamer.com/showpost.php?p=207401&amp;amp;postcount=3&quot;&gt;a post&lt;/a&gt;
	that said:
&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;
	And you still owe me over $250,000. I also found out I am not the only developer being scammed by Zoo Games, so this should be a warning to everyone here.
&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;
	I'm not going to pretend to know what's going on there, but it doesn't &lt;em&gt;smell&lt;/em&gt; right, know what I mean?
	For that reason, I'd have passed on that contest.
&lt;/p&gt;

&lt;h2&gt;Decide quickly and move on with your development&lt;/h2&gt;

&lt;p&gt;
	The most important thing is not to be affected by &lt;a href=&quot;http://en.wikipedia.org/wiki/Analysis_paralysis&quot;&gt;decision paralysis&lt;/a&gt;.
	In the past I've spent an embarassing amount of time just &lt;em&gt;thinking&lt;/em&gt; about these sort of contests.
	And in the end I never entered, so all I had to show for it was a ton of lost time.
	Think about it this way: &lt;strong&gt;you're probably going to keep making games either way&lt;/strong&gt;,
	aren't you?
	So set aside a little time to determine if it's worth your while,
	then move on and get back to making games!
&lt;/p&gt;

&lt;p&gt;
	Have I missed any important steps?
	Have you had any luck (good or bad) with these contests?
	Hope to hear from you in the comments.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Fun With Logos</title>
		<link href="http://www.lostdecadegames.com/fun-with-logos"/>
		<updated>2010-07-25T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/fun-with-logos</id>
		<content type="html">&lt;p&gt;
	Whenever I have free time to work on game development,
	I always struggle to concentrate on the &lt;strong&gt;game development itself&lt;/strong&gt;.
	Sometimes I lose this struggle and I work on something peripheral like
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/sets/72157624259233822/&quot;&gt;logo design&lt;/a&gt;.
	That happened recently, and here's what came out of it:
&lt;/p&gt;

&lt;p&gt;
	&lt;a
		class=&quot;before&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693243921/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games sign logo&quot; src=&quot;http://farm5.static.flickr.com/4052/4693243921_47f9778372_m.jpg&quot;&gt;
	&lt;/a&gt;
	For some reason I kept picturing the name engraved in gold.
	And I was thinking it would be cool for the logo to look like a &lt;em&gt;ye olde tavern&lt;/em&gt; sign,
	like an &quot;INN&quot; sign in &lt;a href=&quot;http://rpgclassics.com/&quot;&gt;classic RPGs&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	I didn't spend much time on this beore I realized I was going in the wrong direction.
	It looks more like a piece of ugly jewelry glued to a sign hanging by thick string.
&lt;/p&gt;

&lt;p style=&quot;clear: both;&quot;&gt;
	&lt;a
		class=&quot;after&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693243401/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games playground logo&quot; src=&quot;http://farm5.static.flickr.com/4039/4693243401_d6745f961f_m.jpg&quot;&gt;
	&lt;/a&gt;
	And here's a different approach: an abandoned playground.
	I definitely dig the style
	(I swear some movie company had an animated logo that had a similar look and it was really cool. Anybody know what that is?)
	and I like how it plays on the company name.
	But overall it made me more sad than motivated.
	Maybe &amp;#8230; maybe I am just too sensitive &amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;clear: both;&quot;&gt;
	&lt;a
		class=&quot;before&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693879442/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games hourglass logo&quot; src=&quot;http://farm5.static.flickr.com/4044/4693879442_ec692f7cc5_m.jpg&quot;&gt;
	&lt;/a&gt;
	I was actually really pleased with how this concept turned out.
	The hourglass represents the idea from the company name about
	&lt;a href=&quot;/why-geoff-failed-and-the-road-to-redemption&quot;&gt;lost&lt;/a&gt;
	&lt;a href=&quot;/why-you-cant-play-matts-dream-game-yet&quot;&gt;time&lt;/a&gt;,
	and the sand falling on the dragon represents the medieval fantasy game we've been wanting to make.
	The main problem is: how do you make a logo out of that?
	If a &lt;a href=&quot;http://www.google.com/logos/official.html&quot;&gt;logo is rectangular, it's usually horizontal&lt;/a&gt;.
	We could cut out the top portion but then it looks odd, with the glass stopping at the edge of the image.
&lt;/p&gt;

&lt;p&gt;
	Plus, the idea of a sundial came up, and that sounded really cool for some reason &amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;clear: both;&quot;&gt;
	&lt;a
		class=&quot;after&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693244353/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games sundial (iron) logo&quot; src=&quot;http://farm5.static.flickr.com/4044/4693244353_9076dee919_m.jpg&quot;&gt;
	&lt;/a&gt;
	This was my first shot at the sundial concept.
	I modeled it after an actual sundial we had in our yard while growing up.
	It looks very similar except there was a character where the title is (I think it was the Grim Reaper).
	The idea of making the center piece
	(the part that casts a shadow to tell the time) a sword came late in the design, which I felt made the whole thing come together.
&lt;/p&gt;

&lt;p style=&quot;clear: both;&quot;&gt;
	&lt;a
		class=&quot;before&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693879754/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games sundial (copper) logo&quot; src=&quot;http://farm5.static.flickr.com/4049/4693879754_0074cc265e_m.jpg&quot;&gt;
	&lt;/a&gt;
	This is a deeper dive into the initial sundial concept.
	Copper replaced iron because it strikes me as a very medieval-fantasy type of metal
	(probably because it was the first decent
	&lt;a href=&quot;http://shrines.rpgclassics.com/nes/dw1/weapons.shtml&quot;&gt;weapon to buy in Dragon Warrior&lt;/a&gt;).
	Then some texture was added to the face, the hilt of the sword got more design attention,
	and the title was enlarged.
&lt;/p&gt;

&lt;p&gt;
	Overall I think we were pretty happy with it, but we collaborated on an idea
	to have a &lt;strong&gt;stone&lt;/strong&gt; sundial, where the center piece is actually an
	&lt;strong&gt;axe that was just slammed into the sundial whoooaaaaaa&lt;/strong&gt;!
	We thought this was awesomely &lt;em&gt;metal&lt;/em&gt; so &amp;#8230;
&lt;/p&gt;

&lt;p style=&quot;clear: both;&quot;&gt;
	&lt;a
		class=&quot;after&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693879996/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games &quot; src=&quot;http://farm5.static.flickr.com/4023/4693879996_36f5ee9cc9_m.jpg&quot;&gt;
	&lt;/a&gt;
	Here it is!
	We're really happy with it and we hope it conveys &quot;young company that makes medieval fantasy games for you to enjoy,&quot;
	because that was our goal.
&lt;/p&gt;

&lt;p&gt;
	The &quot;Lost Decade Games&quot; text itself hasn't seen much design attention yet;
	I think that's something that we'll iterate on.
	But in the meantime, now we have an image to attach to our
	&lt;a href=&quot;http://twitter.com/lostdecadegames&quot;&gt;various&lt;/a&gt;
	&lt;a href=&quot;http://www.flickr.com/photos/50655575@N03/&quot;&gt;online&lt;/a&gt;
	&lt;a href=&quot;http://delicious.com/lostdecadegames&quot;&gt;accounts&lt;/a&gt;,
	which should satisfy our &lt;acronym title=&quot;Obsessive compulsive disorder&quot;&gt;OCD&lt;/acronym&gt; for now.
&lt;/p&gt;

&lt;p style=&quot;clear: both;&quot;&gt;
	&lt;a
		class=&quot;before&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4693244785/&quot;
	&gt;
		&lt;img alt=&quot;Lost Decade Games turd lolgo&quot; src=&quot;http://farm5.static.flickr.com/4066/4693244785_c3655f8c2e_m.jpg&quot;&gt;
	&lt;/a&gt;
	&lt;strong&gt;Oh boy bonus!&lt;/strong&gt;
	I admit there are some designs we're not showing here because they're embarrassingly bad.
	Here's an example: I was exploring the idea of using the name of the company in the design itself,
	and I formed the words into the shape of a sword.
&lt;/p&gt;

&lt;p&gt;
	It was a decent idea in my head, but in
	&lt;a href=&quot;http://www.mydamnchannel.com/You_Suck_at_Photoshop/Season_1/YouSuckAtPhotoshop1DistortWarpandLayerEffects_1373.aspx&quot;&gt;Photoshop&lt;/a&gt;
	it looked so bad I thought it deserved a turd for a handle.
&lt;/p&gt;

&lt;p&gt;
	Oh, we also recently added a
	&lt;a href=&quot;http://www.moddb.com/company/lost-decade-games&quot;&gt;developer page on Mod DB&lt;/a&gt;
	(and &lt;a href=&quot;http://www.indiedb.com/company/lost-decade-games&quot;&gt;Indie DB&lt;/a&gt;, though I don't understand the difference)
	which had ridiculous logo requirements like image resolutions at:
	&lt;strong&gt;940x360&lt;/strong&gt;,
	&lt;strong&gt;950x150&lt;/strong&gt; and
	&lt;strong&gt;1024x768&lt;/strong&gt;.
	Isn't that odd? Anyway you can see more (huge!) versions of the final logo
	&lt;a href=&quot;http://www.moddb.com/company/lost-decade-games&quot;&gt;there&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	Have you worked on a logo before? What problems did you have and what worked well?
	Or better yet, have you
	&lt;a href=&quot;http://blog.wolfire.com/2010/06/Evolution-of-the-Wolfire-Logo&quot;&gt;blogged about it&lt;/a&gt;
	like the &lt;a href=&quot;http://www.wolfire.com/&quot;&gt;Wolfire&lt;/a&gt; guys?
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Boing Boing Contest Post Mortem -- Onslaught!</title>
		<link href="http://www.lostdecadegames.com/boing-boing-contest-post-mortem-onslaught-0"/>
		<updated>2010-07-20T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/boing-boing-contest-post-mortem-onslaught-0</id>
		<content type="html">&lt;p&gt;
	There are a lot of game development contests out there, and for the longest time it's felt like we kept missing them.
	So when we heard about
	&lt;a href=&quot;http://www.boingboing.net/2010/06/14/games-inspired-by-mu.html&quot;&gt;Boing Boing's Music Inspired by Games&lt;/a&gt;
	contest, we decided to derail our current game project a bit and dive in. Here's our postmortem on how that went.
&lt;/p&gt;

&lt;h2&gt;The Game We Built&lt;/h2&gt;

&lt;p&gt;
	First things first, we built a
	&lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;game called Onslaught!&lt;/a&gt;
	which can be played in a
	&lt;a href=&quot;http://www.google.com/chrome&quot;&gt;canvas-enabled browser&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;What Worked Well&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/4812629713/&quot; title=&quot;Games Inspired by Music by Lost Decade Games, on Flickr&quot;&gt;
	&lt;img src=&quot;http://farm5.static.flickr.com/4075/4812629713_26fe9cfe4f_m.jpg&quot; width=&quot;240&quot; height=&quot;138&quot; alt=&quot;Games Inspired by Music&quot;&gt;
&lt;/a&gt;

&lt;ul&gt;
	&lt;li&gt;
		We are ambitious people but we did a surprisingly good job of
		&lt;strong&gt;finishing the damn thing&lt;/strong&gt;
		by &lt;strong&gt;pushing back on features&lt;/strong&gt;.
		There were excellent ideas such as &lt;strong&gt;4 playable classes&lt;/strong&gt;
		and &lt;strong&gt;multiple stages with different music&lt;/strong&gt;,
		but none of it seemed feasible in the 2-3 weeks of time that we had.
		So that feels like the one thing that we did really well.
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://github.com/lostdecade&quot;&gt;GitHub&lt;/a&gt; and
		&lt;a href=&quot;https://www.dropbox.com/referrals/NTUxMTM0Mjk&quot;&gt;Dropbox&lt;/a&gt;
		worked out very well for organization and collaboration.
		These are such fantastic sharing services that you can use right now for free.
	&lt;/li&gt;
	&lt;li&gt;
		We had a good, &lt;strong&gt;concrete definition of our game&lt;/strong&gt; that we could refer to often when wondering which features to include.
		Our mantra was &quot;a medieval fantasy Smash-TV&quot;, which helped the direction we went immensely.
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What Didn't Work So Well&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;
		Our
		&lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt;
		account wasn't billing-enabled, so &lt;strong&gt;our game page went down almost &lt;em&gt;immediately&lt;/em&gt;&lt;/strong&gt; after the contest began.
		And that's a mistake that
		&lt;a href=&quot;/diggy-open-source-javascript-game-engine-with&quot;&gt;Matt&lt;/a&gt;
		should have learned from having &quot;launched&quot;
		&lt;a href=&quot;/diggy-open-source-javascript-game-engine-with&quot;&gt;Bombada&lt;/a&gt;
		just recently.
		Lesson learned now, &lt;strong&gt;twice&lt;/strong&gt;!
	&lt;/li&gt;
	&lt;li&gt;
		We also &lt;strong&gt;did not include Google Analytics&lt;/strong&gt;.
		We figured &lt;em&gt;App Engine&lt;/em&gt; had some kind of analytics-like service for free, but nope.
		&lt;em&gt;Google Analytics&lt;/em&gt; is easy to setup and can provide invaluable feedback, and we hadn't installed it until recently, so we fucked up.
	&lt;/li&gt;
	&lt;li&gt;
		We &lt;strong&gt;didn't make it clear that flash was required for audio&lt;/strong&gt;.
		We received many comments about audio not working.
		Blocking flash is common, especially for savvy Internet users.
		And for &lt;em&gt;this&lt;/em&gt; contest especially, music was integral.
		Not letting the players know that was a mistake.
	&lt;/li&gt;
	&lt;li&gt;
		Should have &lt;strong&gt;made the keyboard controls&lt;/strong&gt; easier to discover.
		We did include some text on the title page of how to play, but it wasn't enough; many people said they couldn't figure out how to move or fire.
	&lt;/li&gt;
	&lt;li&gt;
		We should have been more clear in our email to
		&lt;a href=&quot;http://boingboing.net/&quot;&gt;Boing Boing&lt;/a&gt;
		that this was a game by &lt;em&gt;Lost Decade Games&lt;/em&gt;.
		On the
		&lt;a href=&quot;http://www.boingboing.net/arcade/&quot;&gt;arcade page&lt;/a&gt;, it says
		&quot;Matt Hackett's Onslaught!&quot; which isn't fair because
		&lt;a href=&quot;http://geoffblair.com/&quot;&gt;Geoff&lt;/a&gt; did the lion's share of the code.
		We were pleased to see a direct link to
		&lt;a href=&quot;http://jmflava.com/&quot;&gt;Joshua Morse's personal website&lt;/a&gt;,
		which we think everyone should check out because his music is so incredible.
	&lt;/li&gt;
	&lt;li&gt;
		We did not build a game that would thrive in the &lt;strong&gt;30 second experience&lt;/strong&gt; domain.
		Here's what we mean: with 9 entries, people only have a minute or two at max of patience for each game.
		Our game was challenging immediately: you're fighting off goblins and bats with rocks.
		That's not fun. We feel that our game can get pretty compelling for fans of the genre eventually, but only after 2-3 minutes, once you've collected
		better weapons and are fighting cooler enemies like &lt;em&gt;cyclops&lt;/em&gt; or &lt;em&gt;a dragon&lt;/em&gt;.
		&lt;p&gt;
			The 30 second experience is especially important in a contest which is based on users votes rather than of a panel of judges. Random visitors aren't going to give your game a fair shot if you don't &lt;strong&gt;hook them within the first 30 seconds&lt;/strong&gt;.
		&lt;/p&gt;
		&lt;p&gt;
			For those interested, we believe we have created a better &lt;em&gt;30 second experience&lt;/em&gt;
			by removing rocks in favor of swords, providing two weapons to start with, and getting into the action quicker (goblins instead of bats in the first wave).
			It's now more fun to play immediately, which is great for anyone who plays.
		&lt;/p&gt;
		&lt;p&gt;Don't take our word for it, though. &lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;Play it yourself&lt;/a&gt; and leave your feedback here on the blog or &lt;a href=&quot;http://forums.lostdecadegames.com&quot;&gt;in our forums&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;The URL is forever.&lt;/strong&gt;
		We submitted our entry at 
		&lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;http://lostdecadegamesapp.appspot.com/&lt;/a&gt;,
		which we intended to use for other things as well.
		But the game itself is in the root directory, and we've noticed that some good folks out there have 
		&lt;a href=&quot;http://www.retromundi.com/games/beatemup-games/onslaught.html&quot;&gt;embedded Onslaught! as an iframe&lt;/a&gt;,
		which is great, but now if we ever change that page
		we're going to be providing broken experiences for potential players and pissing some people off.
		That won't do! So the URL is permanent and we can never have anything there but a playable version of &lt;em&gt;Onslaught!&lt;/em&gt;.
		Lesson learned.
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/4813905516/&quot;&gt;
	&lt;img alt=&quot;Onslaught! dragon&quot; src=&quot;http://farm5.static.flickr.com/4135/4813905516_f6e55409d4_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	We made some mistakes and learned some valuable lessons.
	And now we have something that we can (and have!) submitted to
	&lt;a href=&quot;http://www.freeplay.net.au/2010/06/freeplay-awards/&quot;&gt;other contests&lt;/a&gt;.
	And the great thing is that, for the &lt;em&gt;Free Play&lt;/em&gt; contest,
	we were able to spend most of our time tweaking gameplay for fun factor instead of building from scratch.
&lt;/p&gt;

&lt;p&gt;
	Also, having a &lt;strong&gt;hard deadline that you cannot push back&lt;/strong&gt; can be very good for productivity.
	All in all, it was a great experience and we highly recommending entering a contest if you happen to come across one.
&lt;/p&gt;

&lt;h2&gt;Links!&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;Play the &lt;a href=&quot;http://2.latest.lostdecadegamesapp.appspot.com/&quot;&gt;version of Onslaught!&lt;/a&gt; that we entered in the &lt;em&gt;Boing Boing&lt;/em&gt; contest.&lt;/li&gt;
	&lt;li&gt;Play the &lt;a href=&quot;http://lostdecadegamesapp.appspot.com/&quot;&gt;latest version of Onslaught!&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Play &lt;a href=&quot;http://www.boingboing.net/arcade/&quot;&gt;all 9 contest entries&lt;/a&gt;.
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Onslaught! v0.2 &amp;amp; Freeplay Awards</title>
		<link href="http://www.lostdecadegames.com/onslaught-v02-freeplay-awards"/>
		<updated>2010-07-19T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/onslaught-v02-freeplay-awards</id>
		<content type="html">&lt;p&gt;
	&lt;a class=&quot;after&quot; href=&quot;http://www.flickr.com/photos/50655575@N03/4810592758/&quot;&gt; &lt;img src=&quot;http://farm5.static.flickr.com/4099/4810592758_26afaf2689_m.jpg&quot; alt=&quot;&quot; /&gt; &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
	We've been hard at work the last several weeks improving Onslaught! after &lt;a href=&quot;http://www.lostdecadegames.com/our-boing-boing-games-inspired-by-music-entry&quot; target=&quot;_self&quot;&gt;entering in the Boing Boing contest&lt;/a&gt; (Post-mortem coming soon!).
&lt;/p&gt;
&lt;p&gt;Now we're entering Onslaught! in the &lt;a href=&quot;http://www.freeplay.net.au/2010/06/freeplay-awards/&quot; target=&quot;_blank&quot;&gt;Freeplay Awards&lt;/a&gt;&amp;nbsp;with bunches of bug fixes and gameplay enhancements such as:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Brief invincibility when you get hit&lt;/li&gt;
	&lt;li&gt;Improved the &quot;30 second experience&quot; by giving the player two weapons to start&lt;/li&gt;
	&lt;li&gt;You can now cycle through your weapons with Z and X&lt;/li&gt;
	&lt;li&gt;Cyclops now throw rocks or energy balls&lt;/li&gt;
	&lt;li&gt;Improved the &quot;waves&quot; flow with gates opening/close&lt;/li&gt;
	&lt;li&gt;You can now pause the game by pressing P&lt;/li&gt;
	&lt;li&gt;Various behind-the-curtains improvements and bug fixes&lt;/li&gt;
	&lt;li&gt;Pain and death animations&lt;/li&gt;
	&lt;li&gt;Demoblin now gets near you and throws tridents&lt;/li&gt;
	&lt;li&gt;New title&lt;/li&gt;
	&lt;li&gt;Tweaked the hell out of gameplay&lt;/li&gt;
	&lt;li&gt;Added dragon boss!&lt;/li&gt;
	&lt;li&gt;Hit point bars for dragon and superclops&lt;/li&gt;
	&lt;li&gt;Got rid of rocks in favor of swords&lt;/li&gt;
	&lt;li&gt;How to play screen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	Sounds great, right?
&lt;/p&gt;
&lt;p&gt;
	&lt;a title=&quot;Play Onslaught!&quot; href=&quot;http://lostdecadegamesapp.appspot.com/&quot; target=&quot;_blank&quot;&gt;Play Onslaught! v0.2!&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
	As always, we love feedback so leave us some comments here on the blog or &lt;a href=&quot;http://forums.lostdecadegames.com/&quot; target=&quot;_self&quot;&gt;in our forums&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
	(Matt scored around 500k the other night during testing, please take him down a notch and post screenshots of your higher scores!)
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Our Boing Boing &quot;Games Inspired by Music&quot; entry - Onslaught!</title>
		<link href="http://www.lostdecadegames.com/our-boing-boing-games-inspired-by-music-entry"/>
		<updated>2010-07-09T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/our-boing-boing-games-inspired-by-music-entry</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;after&quot; href=&quot;http://www.boingboing.net/2010/07/07/games-inspired-by-mu-9.html&quot;&gt;&lt;img src=&quot;http://farm5.static.flickr.com/4078/4777434649_ef03d55f04_m_d.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Our game, &lt;a title=&quot;Onslaught!&quot; href=&quot;http://www.boingboing.net/2010/07/07/games-inspired-by-mu-9.html&quot; target=&quot;_blank&quot;&gt;Onslaught!&lt;/a&gt;, has been selected as a finalist in &lt;a title=&quot;Games Inspired by Music&quot; href=&quot;http://www.boingboing.net/2010/07/08/games-inspired-by-mu-10.html&quot; target=&quot;_blank&quot;&gt;Boing Boing's &quot;Games Inspired by Music&quot; competition&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;Boing Boing Arcade&quot; href=&quot;http://www.boingboing.net/arcade/&quot; target=&quot;_blank&quot;&gt;Check out our entry along with the others&lt;/a&gt; and please vote for Onslaught! (Voting is handled at the bottom of &lt;a title=&quot;Boing Boing Arcade&quot; href=&quot;http://www.boingboing.net/arcade/&quot; target=&quot;_blank&quot;&gt;this page&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;If you don't care for all this contest nonsense you can &lt;a title=&quot;Play Onslaught!&quot; href=&quot;http://lostdecadegamesapp.appspot.com/&quot; target=&quot;_blank&quot;&gt;just play the game!&lt;/a&gt; We'd love to hear your feedback on the game so don't hesitate to leave comments on this post!&lt;/p&gt;</content>
	</entry>
	
	<entry>
		<title>Diggy, an open source JavaScript game engine (with example game)</title>
		<link href="http://www.lostdecadegames.com/diggy-open-source-javascript-game-engine-with"/>
		<updated>2010-07-05T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/diggy-open-source-javascript-game-engine-with</id>
		<content type="html">&lt;p&gt;
	Today I'm happy to announce &lt;a href=&quot;http://github.com/richtaur/diggy&quot;&gt;Diggy&lt;/a&gt;,
	an open source game engine written in JavaScript.
	Embedded below is &lt;a href=&quot;http://playbombada.appspot.com/&quot;&gt;Bombada&lt;/a&gt;,
	a game made with &lt;em&gt;Diggy&lt;/em&gt;:
&lt;/p&gt;

&lt;iframe
	frameborder=&quot;0&quot;
	src=&quot;http://playbombada.appspot.com/static/app.htm&quot;
	width=&quot;480&quot;
	height=&quot;320&quot;
&gt;&lt;/iframe&gt;

&lt;p&gt;
	&lt;em&gt;(Works best in
	&lt;a href=&quot;http://www.google.com/chrome&quot;&gt;Chrome&lt;/a&gt; or
	&lt;a href=&quot;http://www.apple.com/safari/&quot;&gt;Safari&lt;/a&gt;.)&lt;/em&gt;
&lt;/p&gt;

&lt;h2&gt;More about &lt;em&gt;Diggy&lt;/em&gt;&lt;/h2&gt;

&lt;p&gt;
	The name &quot;Diggy&quot; came from &lt;acronym title=&quot;DHTML Game Engine&quot;&gt;DGE&lt;/a&gt;,
	which stands for &lt;em&gt;&lt;acronym title=&quot;Dynamic Hypertext Markup Language&quot;&gt;DHTML&lt;/acronym&gt; Game Engine&lt;/em&gt;.
	It's a relatively full-featured game engine meant to empower developers to rapidly produce browser-based games.
&lt;/p&gt;

&lt;p&gt;
	You've already seen what &lt;em&gt;Diggy&lt;/em&gt; can do, so here's what it is &lt;strong&gt;not&lt;/strong&gt;:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;A &lt;a href=&quot;http://sizzlejs.com/&quot;&gt;&lt;acronym title=&quot;Document Object Model&quot;&gt;DOM&lt;/a&gt; selector&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;An event manager.&lt;/li&gt;
	&lt;li&gt;A canvas or &lt;acronym title=&quot;Scalable Vector Graphics&quot;&gt;SVG&lt;/acronym&gt; library.&lt;/li&gt;
	&lt;li&gt;Useful for standard web apps.&lt;/li&gt;
	&lt;li&gt;Meant to do anything but make &lt;acronym title=&quot;Document Object Model&quot;&gt;DOM&lt;/a&gt; games.&lt;/li&gt;
	&lt;li&gt;Very stable or ready to make enterprise games.&lt;/li&gt;
	&lt;li&gt;Still in development (at least by me).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	&lt;em&gt;(There are also &lt;a href=&quot;http://github.com/richtaur/diggy&quot;&gt;known issues&lt;/a&gt; to be aware of.)&lt;/em&gt;
&lt;/p&gt;

&lt;h2&gt;More about &lt;em&gt;Bombada&lt;/em&gt;&lt;/h2&gt;

&lt;a
	class=&quot;after&quot;
	href=&quot;http://www.flickr.com/photos/50655575@N03/4758225910/&quot;
&gt;
	&lt;img alt=&quot;Bombada&quot; src=&quot;http://farm5.static.flickr.com/4122/4758225910_c45450a649_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	As you may have
	&lt;a href=&quot;http://www.lostdecadegames.com/why-you-cant-play-matts-dream-game-yet&quot;&gt;read previously&lt;/a&gt;,
	I'm an amateur game developer.
	I've never shipped a &quot;real&quot; game and &lt;em&gt;Bombada&lt;/em&gt; is a baby step towards fixing that.
	Here's more about the project:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
		&lt;em&gt;Bombada&lt;/em&gt; was orginally intended as an &lt;strong&gt;iPhone game&lt;/strong&gt; (hence the 480x320 resolution).
	&lt;/li&gt;
	&lt;li&gt;
		&lt;em&gt;Bombada&lt;/em&gt; was also intended to work with &lt;a href=&quot;http://nodejs.org/&quot;&gt;node&lt;/a&gt; (hence &lt;code&gt;match3.js&lt;/code&gt; being a separate file and attaching to the &lt;code&gt;exports&lt;/code&gt; object).
	&lt;/li&gt;
	&lt;li&gt;
		99% of the code was &lt;strong&gt;written from scratch&lt;/strong&gt; by me,
		with some exceptions being the easing library
		(borrowed from the
		&lt;a href=&quot;http://developer.yahoo.com/yui/animation/&quot;&gt;&lt;acronym title=&quot;Yahoo! User Interface&quot;&gt;YUI2&lt;/a&gt;
		library)
		and the
		&lt;a href=&quot;http://json.org/&quot;&gt;&lt;acronym title=&quot;JavaScript Object Notation&quot;&gt;JSON&lt;/acronym&gt; parser&lt;/a&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		I also made the graphics, which are &lt;strong&gt;free to use&lt;/strong&gt; but have some 
		&lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/us/&quot;&gt;Creative Commons&lt;/a&gt;
		restrictions.
	&lt;/li&gt;
	&lt;li&gt;
		The &lt;strong&gt;music and sound effects&lt;/strong&gt; were made by &lt;a href=&quot;http://jmflava.com/&quot;&gt;Joshua Morse&lt;/a&gt;,
		a freelance music composer. Hire him, he's fantastic.
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	&lt;em&gt;Bombada&lt;/em&gt; ended up taking about &lt;strong&gt;7 months&lt;/strong&gt; of part-time development.
	But it's not that complex, so why did it take so long?
	Partly because as a fulltime web developer, I don't have a lot of free time.
	But also partly because I was building &lt;em&gt;Diggy&lt;/em&gt; along with it,
	so in theory any future games could be built much more rapidly.
&lt;/p&gt;

&lt;p&gt;
	I love postmortems, so I may write one up eventually comprised of what worked, what failed, and
	any valuable lessons learned. If that's something that would interest you, please let me know in the comments.
&lt;/p&gt;

&lt;h2&gt;Those links again please?&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;
		&lt;em&gt;Diggy&lt;/em&gt; game engine &lt;a href=&quot;http://github.com/richtaur/diggy&quot;&gt;source code on GitHub&lt;/a&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		&lt;em&gt;Bombada&lt;/em&gt; puzzle game &lt;a href=&quot;http://github.com/lostdecade/bombada&quot;&gt;source code on GitHub&lt;/a&gt;.
	&lt;/li&gt;
	&lt;li&gt;
		&lt;a href=&quot;http://playbombada.appspot.com/&quot;&gt;Play Bombada&lt;/a&gt; in its own window.
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
	&lt;a
		class=&quot;after&quot;
		href=&quot;http://www.flickr.com/photos/50655575@N03/4768878908/&quot;
	&gt;
		&lt;img alt=&quot;Bombada original soundtrack album cover&quot; src=&quot;http://farm5.static.flickr.com/4096/4768878908_ed53554391_m.jpg&quot;&gt;
	&lt;/a&gt;
	&lt;strong&gt;Edit 7/6/2010:&lt;/strong&gt; 
	&lt;em&gt;Bombada&lt;/em&gt; composer
	&lt;a href=&quot;http://jmflava.com/&quot;&gt;Joshua Morse&lt;/a&gt;
	has put his excellent original soundtrack
	&lt;a href=&quot;http://joshuamorse.bandcamp.com/album/bombada-original-soundtrack&quot;&gt;on sale over at Bandcamp&lt;/a&gt;.
	It's a steal at just $3 (or more if you're feeling generous).
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Why You Can't Play Matt's Dream Game (Yet)</title>
		<link href="http://www.lostdecadegames.com/why-you-cant-play-matts-dream-game-yet"/>
		<updated>2010-05-31T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/why-you-cant-play-matts-dream-game-yet</id>
		<content type="html">&lt;a
	href=&quot;http://www.flickr.com/photos/50655575@N03/4657520990/&quot;
	class=&quot;after&quot;
&gt;
	&lt;img alt=&quot;Spacius! A space adventure&quot; src=&quot;http://farm5.static.flickr.com/4026/4657520990_c170960342_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	I grew up playing games like the original Dragon Warrior (NES). And from the moment a friend taught me &lt;code&gt;PRINT &quot;hello world&quot;&lt;/code&gt; in &lt;a href=&quot;http://seanbaby.com/readers/richter1.htm&quot;&gt;QBASIC&lt;/a&gt;, I've been trying to develop my own RPG.
&lt;/p&gt;

&lt;p&gt;
	It started out as just a hobby, one that for whatever reason would often consume my entire life weeks at a time. Fast forward about &lt;em&gt;17 years&lt;/em&gt; and the passion is as strong as ever. The sad thing is I've just never been able to make it happen. &lt;strong&gt;Why haven't I ever shipped my beloved RPG?&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
	I've been &lt;a href=&quot;http://github.com/richtaur&quot;&gt;writing software&lt;/a&gt; and &lt;a href=&quot;http://widgets.yahoo.com/&quot;&gt;shipping products&lt;/a&gt; professionally for almost 7 years now, so I know I'm capable of finishing a basic game. After much pondering, I think I've figured out the &lt;strong&gt;two main reasons&lt;/strong&gt; I've failed for so long:
&lt;/p&gt;

&lt;h2&gt;The pie in the sky&lt;/h2&gt;

&lt;p&gt;
	When you think about your dream game, your head's in the clouds. You think about all the cool features you would make and all the problems other games have that yours wouldn't. You want it to be spectacular because, after all, it's your &lt;em&gt;dream game&lt;/em&gt;! But the problem is it's just too much. As an amateur developer, I'd have been better off thinking up the next Tetris or Bejeweled, because a one-man-army could make the next one of those, but not the &lt;a href=&quot;http://www.escapistmagazine.com/news/view/96420-Blizzard-Stop-Trying-to-Copy-WoW&quot;&gt;next WoW&lt;/a&gt;. The good news is that the solution is easy: &lt;strong&gt;build a small, concise game&lt;/strong&gt;.
&lt;/p&gt;

&lt;h2&gt;Loss of motivation&lt;/h2&gt;

&lt;p&gt;
	The passion persists, but the motivation is fleeting. I would get into these little boosts of energy where I'd remember &quot;Oh yeah! I should make that RPG I've always wanted to! I'm pretty good with JavaScript now, I could do it!&quot; And I get revved up and spend the next month rewriting the crappy engine I had from last time around, then like clockwork, the spark dies. &lt;strong&gt;What causes the loss of motivation? A few things:&lt;/strong&gt;
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Working in a vacuum&lt;/em&gt; makes it feel like nobody cares about your project, and as humans, it's easy to think &quot;well then why should &lt;em&gt;I&lt;/em&gt; care?&quot; and quit. The key here is to &lt;strong&gt;collaborate and spread the word about your project&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Missing assets like graphics and music&lt;/em&gt; can really kill your spirit. You're thinking about all the different problems you have to solve like tilemaps, scrolling, inventory management ... then you remember you need an entire game's worth of graphics, music and sound effects to boot. Game over! (Luckily these days a clever Googler can find free graphics and &lt;a href=&quot;http://jmflava.com/&quot;&gt;amazing&lt;/a&gt; &lt;a href=&quot;http://forums.indiegamer.com/forumdisplay.php?f=13&quot;&gt;musicians&lt;/a&gt;. But most importantly, it's not that big of a problem, so &lt;a href=&quot;http://www.lostgarden.com/2007/12/how-to-bootstrap-your-indie-art-needs.html&quot;&gt;figure it out and move on&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Distracting &lt;a href=&quot;http://forums.indiegamer.com/showthread.php?t=21228&quot;&gt;side projects&lt;/a&gt; come up.&lt;/em&gt; I've been hacking on various things like &lt;a href=&quot;http://richtaur.com/&quot;&gt;fancy new versions of my website&lt;/a&gt; since I was about 12. But the only project that I really feel like I let slip through my fingers over the years is my own RPG. So clearly, I've been spending my time on the wrong things.&lt;/li&gt;
&lt;/ul&gt;

&lt;a
	href=&quot;http://www.flickr.com/photos/50655575@N03/4656666809/&quot;
	class=&quot;before&quot;
&gt;
	&lt;img alt=&quot;Valadria&quot; src=&quot;http://farm5.static.flickr.com/4046/4656666809_625a796787_m.jpg&quot;&gt;
&lt;/a&gt;

&lt;p&gt;
	That said, it hasn't been all bad. I made a &lt;a href=&quot;http://scriptnode.com/lab/spacius/&quot;&gt;crappy little retro shooter called &lt;strong&gt;Spacius!&lt;/strong&gt;&lt;/a&gt;, and before Geoff and I started working on our game together, I was working on a medieval fantasy RPG I call &lt;strong&gt;Valadria&lt;/strong&gt;. It was going well, probably better than it had in years. I put up a &lt;a href=&quot;http://playvaladria.appspot.com/&quot;&gt;playable demo&lt;/a&gt; on Google's &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;App Engine&lt;/a&gt; (which I really recommend trying out). So some progress is there, it just hasn't been enough.
&lt;/p&gt;

&lt;h2&gt;Summary: how to avoid these problems&lt;/h2&gt;

&lt;p&gt;
	I'm only going to &lt;em&gt;spend my time on tasks that will get me closer to achieving my goal&lt;/em&gt;, which is to ship a professional RPG. There are tons of other cool projects out there, but this is the one for me. I'm also going to &lt;em&gt;collaborate&lt;/em&gt; and try to &lt;em&gt;get the attention of people who like playing (or building) the kind of games&lt;/em&gt; I want to make.
&lt;/p&gt;

&lt;p&gt;
	Do you have a project you've always wanted to complete your whole life? If so, what are you going to do to make it a reality?
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Why Geoff Failed and the Road to Redemption</title>
		<link href="http://www.lostdecadegames.com/why-geoff-failed-and-the-road-to-redemption"/>
		<updated>2010-05-31T00:00:00-07:00</updated>
		<id>http://www.lostdecadegames.com/why-geoff-failed-and-the-road-to-redemption</id>
		<content type="html">&lt;p&gt;I blame my father for my obsession with making video games. It was he that introduced me to the wonderful world of BASIC on his Commodore 64. Dad was a gamer at heart and, just like me, has a passion for tinkering with computers. The very first reason I had for learning to code was to make a game.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://farm5.static.flickr.com/4051/4657126554_8313d46af9.jpg' alt='Shapes' /&gt;&lt;/p&gt;

&lt;p&gt;Fast forward quite a few years and I&amp;#8217;ve yet to fulfill that initial dream of making a game. Now, when I say &amp;#8220;making a game&amp;#8221; I don&amp;#8217;t mean prototypes and &lt;a href='http://geoffblair.com/games/shapes/' title='Shapes'&gt;incomplete demos&lt;/a&gt;. I&amp;#8217;m talking about actual, complete and polished games. The kind that people would be willing fork over cash to play.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why have I failed to produce a completed game?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Good question. There are quite a few reasons. None of them are unsurmountable obstacles. It is my hope, however, to overcome these previous barricades by acknowledging (and documenting) their existence and plotting their demise. Let&amp;#8217;s walk through a few of my stumbling blocks.&lt;/p&gt;

&lt;h2 id='will_code_for_food'&gt;Will code for food&lt;/h2&gt;

&lt;p&gt;Although I&amp;#8217;ve not shipped any games, I have spent the last decade writing lots and lots of code. Coding for a living really limits the amount of time I can seriously dedicate to making games. However, I don&amp;#8217;t regret this for even a second. Instead of spending my time developing prototypes and little RPG demos in the hot language of the week I need to double down on a specific game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: I will focus my game development energy on the game I actually want to make.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id='creepy_features'&gt;Creepy features&lt;/h2&gt;

&lt;p&gt;Feature creep isn&amp;#8217;t just a problem for game programmers; it&amp;#8217;s one that I struggle with on a regular basis. I&amp;#8217;ve found that feature creep is especially nasty for a lone developer working on a game in their spare time. There are so many cool things that can go into games that it can be overwhelming at times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: I will endeavor to keep it simple, release early and iterate often.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id='the_one_man_army'&gt;The one man army&lt;/h2&gt;

&lt;p&gt;Trying to wear every hat in the game development cycle can be daunting. In addition, developing in a vacuum robs you of the valuable feedback from others. Sometimes, just the mere fact that someone will be &lt;a href='http://github.com/geoffb' title='My github page.'&gt;reading my code&lt;/a&gt; forces me to avoid shortcuts and bad design. I&amp;#8217;ve also found that I really need teammates to help motivate me and to excel in areas where I am weak.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: I will surround myself with passionate developers who share my vision for games.&lt;/strong&gt;&lt;/p&gt;</content>
	</entry>
	
</feed>

