<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Josh Talks Flash</title>
	<atom:link href="http://joshblog.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://joshblog.net</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Thu, 19 Apr 2012 01:24:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Foxhole mobile UI controls for Starling</title>
		<link>http://joshblog.net/2012/04/03/foxhole-mobile-ui-controls-for-starling/</link>
		<comments>http://joshblog.net/2012/04/03/foxhole-mobile-ui-controls-for-starling/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 01:18:13 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[Components]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Source Code]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1329</guid>
		<description><![CDATA[If you follow me on Twitter, you probably already heard all about my project, Foxhole for Starling. It&#8217;s a set of UI components built on Starling Framework. Though originally designed for my mobile games, I&#8217;m working hard on them every day to expand the capabilities for use in a wider variety of scenarios. A few [...]]]></description>
			<content:encoded><![CDATA[<p>If you <a href="http://twitter.com/joshtynjala">follow me on Twitter</a>, you probably already heard all about my project, <a href="https://github.com/joshtynjala/foxhole-starling/">Foxhole for Starling</a>. It&#8217;s a set of UI components built on <a href="http://starling-framework.org">Starling Framework</a>. Though originally designed for my mobile games, I&#8217;m working hard on them every day to expand the capabilities for use in a wider variety of scenarios.</p>
<div class="previewimage"><img src="http://flashtoolbox.com/foxhole-starling/showcase/images/rivers-of-olympus.jpg"><br />
<caption>A few Foxhole controls skinned for <a href="http://bowlerhatgames.com/mobile-games/rivers-of-olympus/">Rivers of Olympus</a></div>
<p>I released the source code a few weeks ago, with no documentation at all and only a brief mention in <a href="http://joshblog.net/2012/03/07/rivers-of-olympus-goes-starling/">the announcement</a> for my game, <a href="http://bowlerhatgames.com/mobile-games/rivers-of-olympus/">Rivers of Olympus</a>. Immediately, I received a number of requests for more info and general interest in giving the components a try. With the pressure on, I spent a week adding some much-needed features, creating some example code (including a skin, which I left out at first), and finally adding a little API documentation. Things have finally settled into a bit of stability, so I thought I&#8217;d make a more formal announcement of the <a href="https://github.com/joshtynjala/foxhole-starling/">Foxhole for Starling</a> project now.</p>
<p>Here are a number of important links to get you started:</p>
<ul>
<li>
<p><a href="https://github.com/joshtynjala/foxhole-starling">Github Repository</a></p>
</li>
<li>
<p><a href="https://github.com/joshtynjala/foxhole-starling/wiki">Wiki and Screenshots</a></p>
</li>
<li>
<p><a href="http://flashtoolbox.com/foxhole-starling/examples/kitchen-sink/">In-Browser Demo of the Kitchen Sink Example</a></p>
</li>
<li>
<p><a href="http://flashtoolbox.com/foxhole-starling/examples/display-object-explorer/">In-Browser Demo of the Display Object Explorer Example</a></p>
</li>
<li>
<p><a href="https://github.com/joshtynjala/foxhole-starling-examples">Example Projects and Skins</a></p>
</li>
<li>
<p><a href="http://www.flashtoolbox.com/foxhole-starling/documentation/">API Documentation</a></p>
</li>
<li>
<p><a href="https://github.com/joshtynjala/foxhole-starling/issues">Bugs and Feature Requests</a></p>
</li>
<li>
<p><a href="http://forum.starling-framework.org/topic/official-foxhole-components-qa">Official Q&amp;A thread on Starling Forum</a></p>
</li>
</ul>
<p>Please don&#8217;t hesitate to send feedback. I&#8217;ve been having a ton of fun working on <a href="https://github.com/joshtynjala/foxhole-starling/">Foxhole for Starling</a>, and I&#8217;d love to continue making it better for everyone. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2012/04/03/foxhole-mobile-ui-controls-for-starling/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nurturing and maintaining a relationship with a big corporation while choosing the best paths for your own needs and interests</title>
		<link>http://joshblog.net/2012/03/27/nurturing-and-maintaining-a-relationship-with-a-big-corporation-while-choosing-the-best-paths-for-your-own-needs-and-interests/</link>
		<comments>http://joshblog.net/2012/03/27/nurturing-and-maintaining-a-relationship-with-a-big-corporation-while-choosing-the-best-paths-for-your-own-needs-and-interests/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 06:46:42 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Corona]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1316</guid>
		<description><![CDATA[For a while, a couple years ago, my games seemed to be mentioned constantly by Adobe. Kevin Lynch even demoed Chroma Circuit for a minute or so on stage at Adobe MAX one year. I was in a perfect position, as Adobe was starting to change focus to gaming and video (though, I think they [...]]]></description>
			<content:encoded><![CDATA[<p>For a while, a couple years ago, my games seemed to be mentioned constantly by Adobe. Kevin Lynch even demoed <a href="http://bowlerhatgames.com/mobile-games/chroma-circuit/">Chroma Circuit</a> for a minute or so on stage at Adobe MAX one year. I was in a perfect position, as Adobe was starting to change focus to gaming and video (though, I think they hadn&#8217;t fully committed to the change yet). Many of Adobe&#8217;s evangelists and other community figures knew me from my time building components and rich apps. Since I was new to indie games, they took an interest and helped me out by mentioning me in all the right places.</p>
<p>As the non-Flash tech community gained strength in arguments against Flash (after getting a major ego boost from Steve Jobs&#8217; famous <a href="http://www.apple.com/hotnews/thoughts-on-flash/">Thoughts of Flash</a> letter), I knew right away that Flash&#8217;s future would be changing. I spent a number of months exploring other, often competing, technologies. This included a look at HTML5 and JavaScript, <a href="http://www.anscamobile.com/">Corona</a>, and most recently, <a href="http://www.sencha.com/">Sencha</a> (which, I&#8217;ll say, confidently, is definitely the best web standards replacement for Flex that&#8217;s available today). Not long after, things got quieter on the Adobe front. I was still using Adobe AIR to build games, but I also talked a lot about the competition. I don&#8217;t know if this was an intentional reaction to my change in loyalty, or if my Flash work was simply less exciting. I&#8217;ll freely admit that a few semi-generic casino games that I built during that time aren&#8217;t exactly sexy demo material. Either way, the difference was obvious.</p>
<p>Still, though, I feel like my explorations of other technologies really made a difference in making Adobe technology better. I happened to receive a free one-year subscription to Corona about a year ago, and I took advantage of that time to really kick the tires. It resulted in <a href="http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/">several blog posts</a> that <a href="http://joshblog.net/2011/05/16/adventures-with-corona-part-2-where-corona-needs-improvement/">compared and contrasted</a> the capabilities of Corona and AIR. A couple of the posts were <a href="http://joshblog.net/2011/10/05/corona-versus-air-again-where-corona-falls-behind/">in favor of AIR</a> while a couple were <a href="http://joshblog.net/2011/08/19/corona-continues-to-add-essential-features-ahead-of-air/">more critical</a>. Most importantly, to me, the things I was most critical about have actually been improved in AIR in the time since I wrote those posts. Captive runtime and native extensions, in particular, are really removing old boundaries that made AIR less appealing (now if only captive runtime file size were smaller). I won&#8217;t claim that I had a big part in that. I was just once voice among many who were looking for a better experience with AIR. Regardless, it&#8217;s awesome to see things move in the direction that I asked for them to go.</p>
<p>Ultimately, I still somewhat feel like my relationship with Adobe is a little less warm than it was before. I&#8217;ll take that, proudly even, because I also feel like I helped in some way by finally deciding to provide some proper negative feedback when it was needed. In years past, I was less likely to speak up (but I was less likely to know what I really needed, as well). These days, it&#8217;s usually more clear to me what&#8217;s missing or what isn&#8217;t ideal. If I need something today, I&#8217;ll say it loudly, with more urgency, and less gently. I don&#8217;t want to wait years (or even months) for new features, and I don&#8217;t want to work around the same old issues over and over again in that time. Maybe that&#8217;s asking for a lot, but I just want to get the job done and make great apps and games.</p>
<p>Anyway, my thoughts tonight ultimately came about because I discovered that my game, <a href="bowlerhatgames.com/mobile-games/rivers-of-olympus/">Rivers of Olympus</a> (you can read about how <a href="http://joshblog.net/2012/03/07/rivers-of-olympus-goes-starling/">I converted it to Starling</a>), was mentioned as part of <a href="http://blogs.adobe.com/digitalmedia/2012/03/adobe-introduces-premium-features-for-gaming-with-flash-player-11-2-announces-collaboration-with-unity-technologies-2/">Adobe&#8217;s Flash Player 11.2 and AIR 3.2 announcements</a> (including the fascinating announcement of <a href="http://www.adobe.com/go/fpl">premium Flash Player features</a>). I didn&#8217;t know that they would be mentioning my game, and it&#8217;s great to see a little nod from my old ally again after so long. Even after many attempts to explore alternatives to the Flash platform, I keep choosing AIR to build my games, and I still feel most at home calling myself a Flash developer. I recently created the <a href="https://github.com/joshtynjala/foxhole-starling">Foxhole for Starling</a> project, a set of mobile UI components build on <a href="http://www.starling-framework.org/">Starling</a>, and I feel like it has reinvigorated my interest in Flash and AIR. It&#8217;s been so awesome to see the community show a lot of curiosity in my work too.</p>
<p>I felt very conflicted when I realized that Flash&#8217;s future was changing (even before all of Adobe&#8217;s big announcements about Flex, mobile Flash Player, and everything else at the end of last year). It became harder as my expectations on the matter were met (and so abruptly). Now, though, I&#8217;m feeling like I can confidently keep <a href="http://gaming.adobe.com/">using Flash and AIR to build games</a> while also <a href="http://www.sencha.com/">transitioning elsewhere</a> for other work. I almost wish this had all happened earlier, so that I wouldn&#8217;t have had to ride the crazy waves for so long. Either way, I&#8217;m glad that I finally feel at peace with all that has happened in the last year and more. I&#8217;m looking forward to my next adventures too.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2012/03/27/nurturing-and-maintaining-a-relationship-with-a-big-corporation-while-choosing-the-best-paths-for-your-own-needs-and-interests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rivers of Olympus Goes Starling</title>
		<link>http://joshblog.net/2012/03/07/rivers-of-olympus-goes-starling/</link>
		<comments>http://joshblog.net/2012/03/07/rivers-of-olympus-goes-starling/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 00:17:14 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1293</guid>
		<description><![CDATA[Adobe AIR 3.2 adds the much anticipated Stage 3D to mobile apps. With this comes the ability to use Starling, a great little 2D library built on Stage 3D that closely matches the APIs of the classic Flash Player display list. I&#8217;ve been looking for a reason to learn Starling, and I take learning seriously, [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe AIR 3.2 adds the much anticipated <a href="http://www.adobe.com/devnet/flashplayer/stage3d.html">Stage 3D</a> to mobile apps. With this comes the ability to use <a href="http://starling-framework.org/">Starling</a>, a great little 2D library built on Stage 3D that closely matches the APIs of the classic Flash Player display list. I&#8217;ve been looking for a reason to learn Starling, and I take learning seriously, so that means throwing myself head-first into the development of a complete, real app using Starling. As of today, <a href="http://bowlerhatgames.com/mobile-games/rivers-of-olympus/">Rivers of Olympus</a>, my tile-matching game with similarities to Mahjong solitaire, is available on <a href="http://itunes.apple.com/us/app/rivers-of-olympus/id484647992?mt=8">iOS (universal iPad and iPhone)</a>, <a href="https://play.google.com/store/apps/details?id=air.com.bowlerhatgames.mobile.RiversOfOlympus">Android</a>, <a href="http://www.amazon.com/Bowler-Hat-Games-Rivers-Olympus/dp/B006LBGV7S">Amazon Kindle Fire</a>, along with the <a href="http://www.barnesandnoble.com/w/rivers-of-olympus-bowler-hat-games/1107726837">NOOK Tablet and Color</a>. All these versions use Starling and AIR 3.2 captive runtime.</p>
<div class="previewimage"><a href="http://bowlerhatgames.com/mobile-games/rivers-of-olympus/"><img src="http://joshblog.net/wp-content/uploads/rivers.jpg" alt="Screenshot of Rivers of Olympus"></a></div>
<p>Note: Until RIM adds Stage 3D support, I cannot deploy the Starling version to the BlackBerry PlayBook. The non-Starling version is still <a href="http://appworld.blackberry.com/webstore/content/81292/?lang=en">available on PlayBook</a>.</p>
<h4>UI Controls</h4>
<p>My task for the conversion from classic display list consisted of two major parts. First, I needed to make my personal library of mobile UI controls run on Starling. These older &#8220;Foxhole&#8221; controls were built on <code>fl.core.UIComponent</code> included with Flash Professional. However, in Starling, I needed to start with a new base class. This meant either porting <code>UIComponent</code> over to Starling or starting from scratch with something simpler.</p>
<p>I decided to start from scratch and personalize things. In particular, I ripped out the styling system and made all styles in the Starling version into regular getters and setters. This gives me stronger typing and keeps code from getting too messy with all the magic strings that Adobe&#8217;s style managers often use. I should be able to build some sort of external style manager that injects styles into each component as they&#8217;re added to the display list, if I ever need something like that. For now, it hasn&#8217;t been too important. I also simplified the invalidation mechanisms to ensure that all components validate completely each frame. In general, the depth of nesting isn&#8217;t too extreme, so I feel pretty safe working like that.</p>
<p>The new <a href="https://github.com/joshtynjala/foxhole-starling">Foxhole for Starling</a> mobile UI controls are now on Github. They&#8217;re severely lacking in documentation and examples (in other words, there are none). They&#8217;re without a default skin too, so some assembly is required. Maybe someone will find them useful, though. I wish I could take some time off to polish them up a bit more for general usage.</p>
<p><strong>Edit:</strong> I put together a <em>very</em> basic <a href="https://github.com/joshtynjala/foxhole-starling/wiki/Getting-Started">Getting Started</a> page on the Github wiki. For the curious, it simply shows how to create a Foxhole Button control.</p>
<h4>The Rest of the Game</h4>
<p>Working on Foxhole for Starling was relatively easy, and I could mostly focus on each component in isolation. However, converting a full game&#8217;s codebase to Starling was a more daunting task. Not only did I have the basic Starling conversion of the display list (including changing all text to bitmap fonts), I also had to update the code to use the new APIs in the updated Foxhole controls. This left me working through compile errors one by one, with no ability to run my code for a couple of days. That&#8217;s a new and scary experience for me. I&#8217;m used to constantly running my code to verify that things are working, and even very ambitious refactoring will give me something I can run (even if buggy) within a couple of hours. Once I finally got it to compile, I ran into immediate runtime errors, so I spent more time tracking down each one until I could get a title screen or something displayed. Since the new Starling-based UI controls were still not fully tested, all this work took much longer, and I found myself switching between both codebases to fix bugs in each.</p>
<p>Overall, the full conversion, including both UI controls and the game itself took about a week, including heavy testing to be sure that I didn&#8217;t introduce any new bugs from the differences between the old and new renderers. With the UI controls stabilized now, and more experience in the steps required to do an ambitious conversion like this, I think I can finish the next game in about 3-4 full working days. It&#8217;s still not as simple as changing imports from <code>flash.*</code> to <code>starling*</code>, but it would be a lot worse if I were using a 2D framework that didn&#8217;t match the classic display list so closely. I cannot stress enough how nice it is that Starling matches the display list. Learning is easier, and if you need to convert existing code, it helps so much.</p>
<h4>Starling Performance</h4>
<p>Starling running on Stage 3D is obviously visually smoother than renderMode gpu in my games. Most devices I tested on were consistently running at over 30 frames per second, with many close to 60. Choppy framerates and hiccups, which can be all too common with renderMode gpu, already feel like a thing of the past. My games aren&#8217;t super intense, but this seems like a pretty significant improvement that will greatly increase what AIR mobile developers are able to do, especially on some older devices.</p>
<p>That isn&#8217;t to say that Starling removes all performance issues. In particular, very slow devices like the NOOK Color still needed some optimization to make things run smoothly. There seems to be a threshold where very, very slow devices have a slightly harder time with Starling than renderMode gpu, if you don&#8217;t do some basic optimizations, and then everything else gets a beautiful performance boost even without those improvements.</p>
<p>During testing, I found that the NOOK Color seemed to be rendering somewhat faster than it did with renderMode gpu, but touch events in particular where lagging way behind. I was uploading textures straight from PNGs for basically every single display object, like individual, separate button states. All the textures were staying on the GPU, but swapping between them all became a bottleneck. I needed to combine all my game&#8217;s images into a single 2048&#215;2048 texture atlas to fix this. Even after that, if I created a single separate Quad (single-color rectangle) somewhere on the stage, the performance would drop significantly. If I wanted to display the framerate, I had to rewrite parts of <a href="http://forum.starling-framework.org/topic/starling-port-of-mrdoobs-stats-class">this port of mr. doob&#8217;s Stats class</a> so that the bitmap font and background would come from my atlas instead of using their own separate textures. It was a little frustrating, but the result was that the game ended up being more responsive than the previous version.</p>
<p>To be clear, these optimizations only applied as requirements on the NOOK Color, and an equally-underpowered Motorola Droid 1, among my various test devices. The original unoptimized code worked flawlessly on the Nexus One, Nexus S, NOOK Tablet, Kindle Fire, iPad 1, and iPhone 3GS. Several of those devices couldn&#8217;t keep up with 30fps in renderMode gpu (but were &#8220;good enough&#8221;), but all were running above 30fps with Starling. The best didn&#8217;t quite reach 60fps, like my PC, but a few were in the low to mid-50s consistently, even during tweens that changed the entire screen every frame.</p>
<h4>Come on in, Starling</h4>
<p>Any game I make with AIR for mobile (and probably Flash Player, but I&#8217;m pretty focused on apps these days) from now on will use Starling, for sure. In fact, the performance improvement feels so good that I wish I had the time to port all of my existing games over to Starling. I doubt I would see enough improvements in sales to make it worth my while, though. Still, maybe I&#8217;ll have the occasional weekend afternoon to catch up on all that over time. If you&#8217;re developing 2D apps for mobile with Adobe AIR, I highly recommend checking out Starling or another 2D framework built on Stage 3D. Between Stage 3D and captive runtime, AIR is finally getting close to a &#8220;perfect&#8221; rich mobile app solution for my needs. Now if only Adobe offered a way to remove parts of the captive runtime to decrease the final binary size. There&#8217;s always just one more thing you wish were better, no matter what technology you use.</p>
<div class="previewimage"><a href="http://bowlerhatgames.com/mobile-games/rivers-of-olympus/"><img src="http://joshblog.net/wp-content/uploads/icon128.png" alt="Icon for Rivers of Olympus"></a><br />
<caption>Mentioned above: <a href="http://bowlerhatgames.com/mobile-games/rivers-of-olympus/">Rivers of Olympus</a></caption>
</div>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2012/03/07/rivers-of-olympus-goes-starling/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Indie Game Development 2012: A Look At My Third Year</title>
		<link>http://joshblog.net/2012/01/24/indie-game-development-2012-a-look-at-my-third-year/</link>
		<comments>http://joshblog.net/2012/01/24/indie-game-development-2012-a-look-at-my-third-year/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 19:16:46 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Corona]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1266</guid>
		<description><![CDATA[At the end of 2010, I finished the year feeling a little underwhelmed. I earned less from game development in 2010 than I had in 2009&#8212;the year I started my indie adventure. I hadn&#8217;t found much success in mobile, and I was hoping to take a different approach in 2011. For some reason, I didn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>At the end of 2010, I finished the year feeling <a href="http://joshblog.net/2011/01/17/indie-flash-game-developer-2010-revenue/">a little underwhelmed</a>. I earned less from game development in 2010 than I had in <a href="http://joshblog.net/2010/01/04/indie-flash-game-development-a-2009-year-end-retrospective/">2009</a>&mdash;the year I started my indie adventure. I hadn&#8217;t found much success in mobile, and I was hoping to take a different approach in 2011. For some reason, I didn&#8217;t quite get around to that, though. 2011 became another year of mobile exploration, with some successes that make me pretty happy. Yet, the final numbers totaled up to almost exactly the same as last year&#8217;s earnings. Still, I&#8217;m a little more optimistic this time around because the underlying trend shows an encouraging shift in the right direction.</p>
<h4>The Breakdown</h4>
<p>In total, I earned $21,551 from game development in 2011. This includes mobile device game sales, non-exclusive licensing of Flash games to portals, ad revenue from free Flash games, and a couple of small game-related freelance projects (short-term contract work). As always, I&#8217;m sharing only my earnings as a game developer. I also work on a variety of other freelance projects throughout the year that are mostly <abbr title="Rich Internet Applications">RIAs</abbr>, and I sell an educational app called <a href="http://logic.ly/">Logicly</a>.</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/bowler-hat-games-all-revenue-2011.png" alt="Chart of 2011 Revenue, By Type" width="240" height="300"></div>
<p>Let&#8217;s start by comparing the differences in the percentage breakdown from last year to this year. Last year, freelance work brought in 79% of my game development revenue. In other words, the vast majority of my earnings came from working on games for other people. That doesn&#8217;t exactly matching my goal of eventually going totally independent (or nearly so). This year, freelance work dropped to 14% (again, this is for game development only. RIA freelance projects still make up the majority of my total income). Mobile game sales went in the opposite direction from a mere 8% last year up to 80% in 2011. In spite of total earnings staying nearly the same from year to year, I&#8217;ve seen a major shift in <em>what</em> is earning me money, and it grew significantly.</p>
<h4>The Best App Stores</h4>
<p>Next, let&#8217;s take a look at why my mobile game sales increased so strongly. Seeing which app stores performed best should make it particularly obvious:</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/bowler-hat-games-app-stores-revenue-2011.png" alt="Chart of 2011 Revenue, By App Store" width="240" height="300"></div>
<p>The device that deserves to be in the spotlight is the <a href="http://www.barnesandnoble.com/nook">NOOK Color (and now the NOOK Tablet too)</a> from Barnes &#038; Noble. As you can see, NOOK apps make up 90% of my app sales. It seems to be kind of a dark horse in the app store world. I think most mobile developers don&#8217;t know about the NOOK store, or they haven&#8217;t given it a fair look. NOOK readers are very willing to pay for e-books, or they probably wouldn&#8217;t have bought the NOOK. I took a peek at some of my favorite novels, and they sell for at least 7 or 8 bucks a piece. An extra 50% or more for newer releases. Compared to that, an app that sells for 2 to 4 dollars is no big deal. This is an audience that seems to be even more willing to spend money than iOS users&mdash;at least in my experience so far.</p>
<p>NOOK sales brought in over ten times more than iOS sales, while the Android Market and the BlackBerry PlayBook both got lost miles behind. Neither of those two earned over $200 (although, full disclosure, two of my games aren&#8217;t yet out on Android Market and one isn&#8217;t on PlayBook yet). The Amazon Appstore for Android didn&#8217;t even make the cut. I hadn&#8217;t earned enough to get a check in the mail from them by the end of 2011. However, Christmas sales of the Kindle Fire must have been halfway decent. App sales finally started trickling in from Amazon around Christmas. At the moment, my Amazon sales are comparable to my iOS sales. If I were to limit myself to three stores, it looks like NOOK, Amazon, and iOS come out on top, with NOOK being the absolute first priority.</p>
<blockquote><p>Update February 10, 2012: Amazon sales are still going strong, and they&#8217;re typically better than iOS on most days. Still not as high as NOOK sales, but Amazon is now number 2. Moreover, the PlayBook seems to be doing better now too, and iOS is pretty much in fourth place. Funny how things can change so dramatically, and also a sign that focusing on new and smaller app stores can be a good choice for indies without much marketing budget or experience.</p>
</blockquote>
<h4>Everything Else</h4>
<p>Other revenue either came from small projects, like some portals that wanted an older Flash game site-locked or quick freelance projects that took no more than a day. Nothing significant, but a quick buck here and there for very little effort. To my surprise, ad renveue from MochiAds, MindJolt, and Google AdSense is still coming in. Ads earned me enough to pay my bills for about a month, and I did all the work to make that happen 1-2 years ago. This ad revenue won&#8217;t last forever, but it&#8217;s nice to have it while it lasts.</p>
<h4>Into 2012</h4>
<p>The huge jump in sales thanks to NOOK is awesome, and I hope to continue exploring this platform and finding apps that resonate with its unique audience. However, each new release was just a little bit less successful. I was lucky to get in at the very beginning when the number of apps was well under 1,000. As with the iOS gold rush, it was easy to get recognized by potential users because you couldn&#8217;t drowned out by everyone else clamoring for attention. Thankfully, as with the Amazon Appstore, NOOK sales spiked on Christmas, and they still haven&#8217;t completely dropped back down. There&#8217;s still a little time to enjoy the benefits of being an early developer.</p>
<p>My first game, Chroma Circuit, is my absolute favorite of my creations. It wasn&#8217;t the very best seller, but the fans it found have some real enthusiasm that is inspiring, and I hope I can find more of them. I&#8217;ve been working to release a huge new content update for quite some time, actually. Several new elements are all coded up. Some rotate like the others. Some slide around instead. They&#8217;re fun new additions and there are a lot of little animations and things that add to the aesthetic experience that I didn&#8217;t have the time/brainspace to add when I first released Chroma Circuit three years ago. The biggest barrier now is building new levels. I built a great little visual level editor (unlike the original version, which had hand-coded XML!), but it&#8217;s still a time consuming process, and I don&#8217;t want to release anything until I have over 100 levels. I&#8217;m at about 60 now, and I think I&#8217;m going to set some daily or weekly goals to get me over the last hill and to the finish line.</p>
<p>Other than that, I don&#8217;t have many other concrete plans for the new year. I mainly want to continue releasing games that can sell decently as NOOK apps. Whether they&#8217;re unique games like Chroma Circuit, or more generic ones like Sweet Shop Slots and Rivers of Olympus, I&#8217;m willing to explore both directions. I&#8217;d like to stick to shorter projects that don&#8217;t go longer than a month or so, and then I can see if a bigger collection of games can create the foundation on which I can become more and more independent. If some turn into real hits, even better, but I&#8217;ll be happy with small and modest successes.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2012/01/24/indie-game-development-2012-a-look-at-my-third-year/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Stop dwelling. Look forward.</title>
		<link>http://joshblog.net/2011/12/02/stop-dwelling-look-forward/</link>
		<comments>http://joshblog.net/2011/12/02/stop-dwelling-look-forward/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 05:18:06 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1263</guid>
		<description><![CDATA[Developers around me have recently begun to look more closely at the fuzzy area where one should choose HTML/CSS/JS over Flash for rich browser content. Unfortunately, conversations on the topic have a tendency to get derailed almost immediately because features like Canvas, and even the whole JavaScript language, get dismissed entirely by a vocal few. [...]]]></description>
			<content:encoded><![CDATA[<p>Developers around me have recently begun to look more closely at the fuzzy area where one should choose HTML/CSS/JS over Flash for rich browser content. Unfortunately, conversations on the topic have a tendency to get derailed almost immediately because features like Canvas, and even the whole JavaScript language, get dismissed entirely by a vocal few. When that happens, everyone heads off on a tangent to argue a couple points, and then the conversation pretty much ends. Without a clear winner, the dismissal becomes the defacto conclusion and further exploration within the group is halted, at least temporarily.</p>
<p>We&#8217;re all aware that certain options may be technically or aesthetically inferior. Yet, we can&#8217;t improve the situation without getting our hands dirty. Rather than preach to the choir, we should be providing clear, visible evidence of where web standards (or implementations of the standards) need improvement. We should be creating publicly visible works that push the limits of the browser as it exists today, even if doing so requires the nastiest of workarounds. In fact, finding those workarounds should be a priority because I want us to be able to point to them and say, &#8220;Hey browser vendors: I made this, and users love it, but check out this code that&#8217;s going to make you want to puke  (or this overworked CPU, or excessive memory, or whatever). You need to fix that.&#8221; By showing truly compelling projects that can hit barriers and raise awareness of web development pain points that anyone can see, I think we&#8217;ll find that browser vendors can be far more agile than some people assume.</p>
<p>The open web community has been calling out Flash for many years, whether their arguments were accurate or not. Now that they&#8217;ve &#8220;won&#8221; for certain use-cases, I think that it&#8217;s time for the tables to turn, but in a more productive way. Targeted and actionable feedback, measurable data, along with impressive content will do much more to improve the web than complaining that we miss the good old days. Our jobs may not be as fun at first, but wouldn&#8217;t you rather make it better sooner than later?</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2011/12/02/stop-dwelling-look-forward/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Corona versus AIR again: Where Corona falls behind</title>
		<link>http://joshblog.net/2011/10/05/corona-versus-air-again-where-corona-falls-behind/</link>
		<comments>http://joshblog.net/2011/10/05/corona-versus-air-again-where-corona-falls-behind/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 22:59:57 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Corona]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1250</guid>
		<description><![CDATA[Now that Adobe has released AIR 3, it&#8217;s time to expand on my previous comparisons between AIR and Corona and to take note of some places where Corona definitely doesn&#8217;t offer what I need. Because I&#8217;m a fan of both technologies, I&#8217;m trying to continually put a little pressure on both sides to offer the [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Adobe has released AIR 3, it&#8217;s time to expand on my <a href="http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/">previous</a> <a href="http://joshblog.net/2011/05/16/adventures-with-corona-part-2-where-corona-needs-improvement/">comparisons</a> <a href="http://joshblog.net/2011/08/19/corona-continues-to-add-essential-features-ahead-of-air/">between</a> AIR and Corona and to take note of some places where Corona definitely doesn&#8217;t offer what I need. Because I&#8217;m a fan of both technologies, I&#8217;m trying to continually put a little pressure on both sides to offer the right capabilities for modern mobile apps. This time, Corona gets a turn again.</p>
<h4>Native Extensions</h4>
<p>One question native-only developers ask people like me, who use AIR or Corona, is why we would limit ourselves to the features that Adobe and Ansca are willing to implement for us. It&#8217;s a valid question, and I can see why some developers might feel too restricted. Personally, I prefer to work with languages that I will enjoy using and to have quick and easy APIs like display lists that don&#8217;t require screenfuls of low-level code. I prefer those sugar features so much that I have no hesitation living without the rest.</p>
<p>Thankfully, though, AIR 3 comes with support for native extensions. If Adobe hasn&#8217;t exposed a feature that I need in my AIR app, and I&#8217;m willing to write a little native code to implement it, then I can add that feature myself by including a library with my app. To me, that makes AIR the best of both worlds. It&#8217;s almost as if AIR is just another native framework, but it has the support of all the tools and libraries of the Flash ecosystem.</p>
<p>Now, if only I had the same opportunity to extend Corona. This, to me, is a huge change in the balance between choosing AIR or Corona. Almost any capability Corona offers out of the box that AIR does not, I can implement myself, if needed (or maybe someone in the community already has!). The only places where I might prefer Corona is graphics performance because Stage3D in AIR is only on desktop for now (and TV, I think, but who actually cares about that?) and Lua support because Lua is more fun to write than ActionScript. Not that I&#8217;d use Lua for a Flex-like project, of course. Each language has its place.</p>
<h4>Shaders</h4>
<p>Flash Player and AIR support Pixel Bender shaders. These allow developers to manipulate display objects with cool rendering effects, at pretty impressive performance levels. Drop shadows and glows, color manipulation, distortion, blend modes, and all sorts of fun stuff are possible. The closest thing Corona has is <a href="http://blog.anscamobile.com/2011/04/compositing-fun-with-additive-blends/">additive blend</a>, which is nice, but a single blend mode seems strangely out of place. Oddly enough, I can&#8217;t even find it listed in the <a href="developer.anscamobile.com/resources/apis/">Corona API docs</a>. </p>
<p>At Adobe MAX this week, we also saw a preview of <a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html">CSS Shaders</a>. Eventually, web frontend developers will be able to enhance their content in very cool ways. I know it&#8217;ll be awesome for games. Love the flip-book effect video. I have a similar 3D-like manipulation I want to include for the powerups in <a href="http://itunes.apple.com/us/app/gridshock-hd/id434296552?mt=8">Gridshock HD</a> (notably, a game that I built with Corona).</p>
<p>Interestingly, that blog post from Ansca on the additive blend mode mentions shaders, so it looks like they may have it on the roadmap. Hopefully, sooner than later.</p>
<h4>Build iOS Apps on Windows</h4>
<p>Finally, something that isn&#8217;t related to AIR 3&#8242;s recent release, but I didn&#8217;t mention it in earlier posts. Each time I work with Corona, this one becomes more and more annoying. I can&#8217;t build a Corona app for my iPad or iPhone from my Windows machine (which is my main development machine). Instead, I need to grab my old Mac laptop, transfer the files over somehow, and do the build over there. Adobe has provided the ability to create iOS apps with AIR on Windows since they first introduced it as the &#8220;Packager for iPhone&#8221;. Yes, Apple had a huge hissy fit about this a while back, but they got over it.</p>
<p>Switching computers to do a build, especially if I can only test something on a device, is a major time sink (and mental context switch) that I shouldn&#8217;t need to deal with. I&#8217;ve been building iOS apps with Adobe software on Windows for two years. Isn&#8217;t it about time to play catch up on this one?</p>
<p>More grudge matches to come, I&#8217;m sure, as AIR and Corona continue to evolve.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2011/10/05/corona-versus-air-again-where-corona-falls-behind/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dev Journal: Ancient Temple Puzzle Game #1</title>
		<link>http://joshblog.net/2011/10/02/dev-journal-ancient-temple-puzzle-game-1/</link>
		<comments>http://joshblog.net/2011/10/02/dev-journal-ancient-temple-puzzle-game-1/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 07:27:05 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[Corona]]></category>
		<category><![CDATA[Dev Journals]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1238</guid>
		<description><![CDATA[Here&#8217;s a very, very early preview of a game idea that I&#8217;ve been playing around with for the last week or so. My plans around this idea are still extremely vague, and everything here is subject to change. I&#8217;ve already scrapped the earliest seed of this process completely, and I&#8217;m not yet sure that I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a very, very early preview of a game idea that I&#8217;ve been playing around with for the last week or so. My plans around this idea are still extremely vague, and everything here is subject to change. I&#8217;ve already scrapped the earliest seed of this process completely, and I&#8217;m not yet sure that I&#8217;ve arrived at the final game that I&#8217;ll commit to finishing. To get out of the block I&#8217;ve been experiencing lately, I&#8217;ve been trying to push myself away from my comfort zone as much as possible. Sharing something in the brainstorming to early prototyping stages is part of this process. For science!</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/preview1.png" alt="Screenshot 1 of Ancient Temple Puzzle Game"></div>
<p>The idea here is that it&#8217;ll be an escape the room by moving things around, setting up mechanical contraptions, and deactivating obstacles sort of game. As you go from room to room, the puzzle solving gets more complicated. I guess it&#8217;ll be kind of like Portal, but without the portals (and in 2D, obviously). The player will be be a bit more omnipresent, though. It won&#8217;t involve controlling a character restricted to the world necessarily. I may have a &#8220;token&#8221; that must advance to a specific goal in each level, but the player will be able to manipulate the entire level from a higher plane. I want to try to make multi-touch an important component too, as this game will be targeted at tablets and phones.</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/preview1-2.png" alt="Screenshot 2 of Ancient Temple Puzzle Game"></div>
<p>As you can see from the artwork, I&#8217;m going for kind of an ancient temple theme. Yes, it&#8217;s looking rather pristine at the moment. That&#8217;s just me fighting myself over how complex I want to make this thing. Ultimately, I don&#8217;t think it will look right without some wear and tear. Though it&#8217;s not too detailed yet, I have a feeling that this will become some of the most ambitious game artwork I&#8217;ll have created so far. Earlier this evening, I started considering an idea of ever increasing damage to the structure as the player advances to higher levels. As you get deeper in this temple, these changes may be part of a simple narrative of some sort. Maybe puzzles will start to work incorrectly, and odd workarounds will create a &#8220;new&#8221; solution. I think it&#8217;s possible make this game fun, even without a narrative underlying the player&#8217;s progress, but this is just another place where I think I can benefit from pushing myself to try new things.</p>
<p>The code I&#8217;m running at the moment is targeted at <a href="http://www.anscamobile.com/corona/">Corona</a>. I wanted to play around with <a href="http://justaddli.me/">Lime, a tile map library for Corona</a>, and I&#8217;m experimenting with the built-in physics too, which Lime integrates with rather nicely. I was a little wary of using Lime because there are supposedly performance issues on devices (which the website makes abundantly clear), but I found that my initial test &#8220;level&#8221; is running great on a first-generation iPad. It&#8217;s likely that people developing platformers and other games with Lime have much larger levels than I intend to build. Additionally, my tile size is currently 138px, which is probably enormous in comparison as well, and I assume that can end up making the level simpler to draw due to fewer tiles filling up the space.</p>
<blockquote><p>Side note: I&#8217;m stubbornly and irrationally opposed to using graphics with dimensions at powers of two. Ever since I realized how often people suggest it, I&#8217;ve had the quirk of purposefully choosing something else. Yes, I realize that it&#8217;s generally suggested for good reason, but my inner artist will not be obstructed by silly technical restrictions.</p>
</blockquote>
<p>As I get further along, I&#8217;ll try to share more. Perhaps when I begin experimenting with more puzzles and obstacles, I&#8217;ll highlight a few and explain how they came about. I expect things to continue being experimental going forward for a while. The artwork itself involved some playing around in Photoshop on one boring Saturday afternoon. I had some basic ideas for a physics stacking game that I wasn&#8217;t really committed to. I made the block with the gem in the middle (from the first screenshot above), and I immediately felt how it could be manipulated by touch, and I could start to imagine the temple-like environment that would surround it. With that small success as a foundation, I intend to continue using play and experimentation as my primary motivator for continuing to build upon this idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2011/10/02/dev-journal-ancient-temple-puzzle-game-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Corona continues to add essential features ahead of AIR</title>
		<link>http://joshblog.net/2011/08/19/corona-continues-to-add-essential-features-ahead-of-air/</link>
		<comments>http://joshblog.net/2011/08/19/corona-continues-to-add-essential-features-ahead-of-air/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 02:16:20 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Corona]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1225</guid>
		<description><![CDATA[As an update to my previous post, Adventures with Corona, Part 1: What Corona offers that&#8217;s better than Adobe AIR, I thought I&#8217;d take note of some new features in a recent release of Ansca&#8217;s Corona SDK. In particular, Corona developers now have access to more useful services. Services that we simply cannot use in [...]]]></description>
			<content:encoded><![CDATA[<p>As an update to my previous post, <a href="http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/">Adventures with Corona, Part 1: What Corona offers that&#8217;s better than Adobe AIR</a>, I thought I&#8217;d take note of some new features in a <a href="http://blog.anscamobile.com/2011/08/action-packed-release/">recent release of Ansca&#8217;s Corona SDK</a>. In particular, Corona developers now have access to more useful services. Services that we simply cannot use in AIR today, for various reasons.</p>
<h4>Game Network</h4>
<p>Last time, I noted that <a href="http://openfeint.com/">OpenFeint</a> support in Corona could only be used with iOS. Thankfully, OpenFeint works on Android now too. Moreover, Corona developers have been given a choice between OpenFeint and <a href="http://papayamobile.com/">PapayaMobile</a>. Leaderboards and achievements for all. More and more, I&#8217;m finding that I&#8217;d rather integrate a service that focuses exclusively on this sort of thing because the experience can be far better than a home-grown solution (at least for an indie developer, like me).</p>
<h4>Advertising</h4>
<p>Ansca has also partnered with <a href="http://www.inmobi.com/">InMobi</a> to bring advertising to Corona apps. Whether it&#8217;s to monetize a lite version or to go completely free and try to mimic the typical route of free web games, ads are extremely important. I&#8217;ve been waiting for quite a while now for the ability to try releasing a free game with ads. Since I&#8217;d rather not go fully native, I needed a supported library from an ad network (which apparently isn&#8217;t a priority), or ad support in my platform (thanks, Corona!).</p>
<h4>Hold on there, AIR</h4>
<p>Day by day, I realize that while AIR is getting some cool features that can wow the senses (like Stage3D), Adobe is forgetting, ignoring, or not prioritizing features that keep a roof over a developer&#8217;s head. Some things players expect or demand in games, like popular social networks for leaderboards and achievements. Others help us earn just a little more money, like advertising and in-app purchases (both of which can be useful outside of games too). I immediately felt limited without these essentials back when AIR on mobile was first introduced, and it&#8217;s been frustrating to see little support from Adobe or third-parties after so long. Maybe that&#8217;ll change with native extensions, but those are still a bit further away in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2011/08/19/corona-continues-to-add-essential-features-ahead-of-air/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Adventures with Corona, Part 2: Where Corona Needs Improvement</title>
		<link>http://joshblog.net/2011/05/16/adventures-with-corona-part-2-where-corona-needs-improvement/</link>
		<comments>http://joshblog.net/2011/05/16/adventures-with-corona-part-2-where-corona-needs-improvement/#comments</comments>
		<pubDate>Tue, 17 May 2011 03:57:50 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Corona]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1195</guid>
		<description><![CDATA[In my first look at Ansca&#8217;s Corona SDK, I mentioned several features that Corona offers where Adobe AIR is currently lacking. These were compelling enough for me to rewrite my tablet game, Gridshock HD, with Corona for the iPad version. That said, it wasn&#8217;t all sunshine, lollipops, and rainbows. Some of Corona&#8217;s core APIs and [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/">first look at Ansca&#8217;s Corona SDK</a>, I mentioned several features that <a href="http://www.anscamobile.com/corona/">Corona</a> offers where Adobe AIR is currently lacking. These were compelling enough for me to rewrite my tablet game, <a href="http://itunes.apple.com/us/app/gridshock-hd/id434296552">Gridshock HD</a>, with Corona for the iPad version. That said, it wasn&#8217;t all sunshine, lollipops, and rainbows. Some of Corona&#8217;s core APIs and functionality can feel a bit half baked in places. Let me share some of the places that seem, to me, in most need of some love.</p>
<h4>Platform API Support</h4>
<p>In Corona, there are a number of features that are currently only supported on iOS. Among the most compelling features, I noticed that In-App Purchase and OpenFeint are both marked iOS-only, and there are some others too. In particular, OpenFeint&#8217;s leaderboards and achievements are a big reason for why I chose Corona for Gridshock HD on iPad. I know that players demand OpenFeint and/or Game Center, and I simply cannot use either in AIR right now. As great as it is to see OpenFeint available in Corona, I&#8217;m not a big fan of runtime-included features that aren&#8217;t cross-platform.</p>
<p>On the other hand, the ability to extend Corona with native code would be awesome, just like it would be awesome to have the same thing in AIR. If native extensions existed, the power would be in my hands to choose whether I want to (or am even able to) implement a feature on a specific platform. The development effort for robust extension APIs is, of course, a big task, and I understand that a young platform like Corona might want to include a few high-demand third-party features out of the box before they get around to more daunting things.</p>
<p>Regardless, I&#8217;m sure that there are constantly feature requests for Corona to include an API for <em>&lt;insert personal favorite library here&gt;</em>. If native extensions were available, individual developers would be free to add two very valuable types of functionality:</p>
<ol>
<li>
<p>Highly specialized features that few other developers need.</p>
</li>
<li>
<p>Features that might be coming the future, but there&#8217;s an immediate need that cannot wait.</li>
</ol>
<p>With those out of the way, Ansca can focus on core APIs that work well across all supported platforms and that are useful to the largest majority of their customers&mdash;making everyone happier. In addition to native extension support in the runtime, a place to share (or maybe even sell) extensions would be ideal so that folks like me, who never want to touch Objective-C, can look through what others have already built.</p>
<h4>Simulator</h4>
<p>In the simulator, what you see on your PC may not be what you see on the device. Sometimes, that&#8217;s impossible to fix, since some features just can&#8217;t work on desktops (Although, I&#8217;d like to see more console output that basically says, &#8220;you called function X correctly, but it cannot be used in the simulator. Please test on device&#8221;). Sometimes, though, the simulator can do things that device builds cannot. In my opinion, that&#8217;s much worse. For instance, I saw multi-line text working in the Windows simulator, but discovered that an iOS build only displayed a single line. With simulators, it&#8217;s best not to get my hopes up.</p>
<p>The Mac version of the simulator has skins for iPhone and iPad. It makes sense, on one hand, because the Windows version can&#8217;t output iOS builds due to Apple&#8217;s stupid rules. However, I can&#8217;t be the only Corona developer who codes on Windows and builds on Mac. Even if it requires extra notification that I can&#8217;t build for iOS, those skins would be super helpful. Alternatively, I would like to be able to add completely custom device skins. In the latter case, all I really care about is specifying a custom screen resolution for the device. If I can get 320&#215;480 or 640&#215;960, then I simply don&#8217;t care if the skin looks like an iPhone or not.</p>
<p>Finally, the console output for runtime errors in the simulator always seems to get cut off. On Windows, at least. I can&#8217;t remember off-hand if the Corona Terminal on Mac has the same problem. Anyway, I can live without a debugger, but then the stack trace must be as detailed as possible when that&#8217;s the case. Half missing information could be the difference in finding an error in seconds versus finding an error four hours later. I&#8217;m sure you can guess which I&#8217;d prefer.</p>
<h4>Language</h4>
<p>Lua&#8217;s standard library is probably as stark and barebones as you can get. Basically, it provides some math functions, some string functions, and a few functions that turn a table (usually called an object in other languages) into an array by adding and removing from numeric keys. Some of the most basic things I&#8217;ve come to expect from a standard library just aren&#8217;t there. For instance, how often do you call <code>indexOf()</code> on arrays? I do it all the time, and I was forced to write my own version in Lua. It may not be optimal, and I&#8217;d rather use something that a dedicated person or team has vetted better than I could with my time constraints.</p>
<p>On one hand, the small standard library makes sense. The language itself is tiny, and that&#8217;s a big advantage. On the other hand, I wonder if the wheel has been reinvented tens of thousands of times by various Lua developers. From what I can tell, there isn&#8217;t one true community-supported standard library out there, like I would have expected. Maybe I missed it. Honestly, though, I get the impression that most people throw the Lua interpreter into their C++ games and write super short scripts that don&#8217;t need much supporting utility code. Anything complex just goes in the C++ layer.</p>
<p>Corona is different. In Corona, <em>all</em> your code except the super low-level stuff is written with Lua. Corona developers have a more pressing need for a robust standard library that is closer to what&#8217;s available from the top-level classes and functions in JavaScript or ActionScript. If Ansca has big dreams for much larger game projects built with Corona, they need to spend some time filling in the gap here so that developers aren&#8217;t bogged down in low-level implementation.</p>
<p>Moreover, if Ansca wants to support any kind of open source community, a standard library declared from on high will nip a couple of potential problems in the bud. Since I&#8217;ve yet to see any Lua code that uses some sort of namespacing, name collision is pretty much inevitable. Likewise, duplicate functionality will be rampant as everyone includes their own flavor of the missing core library. For anyone that wants to mix and match third-party libraries, that&#8217;s going to be a mess of headaches. As Corona-targeted libraries get more complex, the chances of this happening grow exponentially.</p>
<h4>Choose the Best Tool for the Job</h4>
<p>I enjoyed porting <a href="http://itunes.apple.com/us/app/gridshock-hd/id434296552">Gridshock HD</a> to Corona. I learned a new language that I hope to develop with again in the future, and I was able to take advantage of features that aren&#8217;t available to me in my usual environments. It has given me some inspiration and expectations that I intend to take back with me to Flash. I might be a little more harsh on Adobe&#8217;s runtimes when I give feedback now, but any criticism I make will be because I want to see Flash Player and AIR continue to be the best at what I use them for.</p>
<p>Am I now a Corona developer? I&#8217;m certainly not leaving Flash behind. However, I&#8217;ll be keeping an eye on Corona to see where it ends up. I don&#8217;t have current plans for more Corona games, but I may change my mind if certain features are compelling enough, or if I decide that I haven&#8217;t played with Lua enough lately. We&#8217;ll see. It&#8217;s another useful tool to have at my disposal. I&#8217;m very glad that I spent some time learning to use it.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2011/05/16/adventures-with-corona-part-2-where-corona-needs-improvement/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Adventures with Corona, Part 1: What Corona offers that&#8217;s better than Adobe AIR</title>
		<link>http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/</link>
		<comments>http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/#comments</comments>
		<pubDate>Sat, 14 May 2011 05:06:32 +0000</pubDate>
		<dc:creator>Josh Tynjala</dc:creator>
				<category><![CDATA[Corona]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://joshblog.net/?p=1155</guid>
		<description><![CDATA[During the last month or so, whenever I could spare an hour, I&#8217;ve been working on a port of my game, Gridshock HD, from Adobe AIR to Ansca Corona so that I could release it for iPad. If you&#8217;re not aware, Corona is a mobile development platform that can target iOS and Android. It was [...]]]></description>
			<content:encoded><![CDATA[<p>During the last month or so, whenever I could spare an hour, I&#8217;ve been working on a port of my game, <a href="http://itunes.apple.com/us/app/gridshock-hd/id434296552">Gridshock HD</a>, from Adobe AIR to <a href="http://www.anscamobile.com/corona/">Ansca Corona</a> so that I could release it for iPad. If you&#8217;re not aware, Corona is a mobile development platform that can target iOS and Android. It was created by some folks who were once involved with Flash Lite, so it&#8217;s quite relevant to Flash developers. It&#8217;s not perfect, but there are a few useful features that Corona offers and AIR is missing. I want to use my experiences to make some requests that I hope Adobe will address in upcoming versions of AIR.</p>
<h4 id="language">Language</h4>
<p>I, and I think many Flash developers who have been around for a while, kind of miss dynamic languages. I often hear that Flash isn&#8217;t as &#8220;fun&#8221; as it used to be. I can relate. It would be great if we could use something less strict than ActionScript 3 in our Flash projects. Yes, I know I can turn off strict mode, but if I&#8217;m going to use ECMAScript, I want AS3&#8242;s dialect to be updated with features that have been added since ES4 was dropped by the committee. There&#8217;s some cool stuff coming in Harmony.</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/lua.jpg" alt="Lua logo"></div>
<p>Corona includes Lua, which is my new favorite language of the moment. It&#8217;s super flexible and a lot of fun to work with. If there were a way to compile it down to bytecode that could run in Flash, I&#8217;d consider switching to Lua over ActionScript 3 for much of the Flash content I create. AS3 is good for Flex apps, but for games, web experiences, and stuff like that, a dynamic language like Lua (or modern ECMAScript) would be more fun for me, and enjoying my work is a top priority.</p>
<p>For reference, this is a minor need compared to the ones that follow. I can live with AS3 for all my Flash development. It&#8217;s a decent language, but I simply desire a little more choice. If you look at JVM or other runtimes, they all have extra languages beyond the main one(s). I want to branch out more, and it would be awesome if I could keep a foundation in Flash.</p>
<h4 id="graphics">Graphics</h4>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/opengl.jpg" alt="OpenGL logo"></div>
<p>Corona offers OpenGL-accelerated graphics. I had no rendering performance bottlenecks, and it was a dream. However, we all know that AIR will be getting Molehill hardware-accelerated APIs in an upcoming release. Corona has the advantage now, but it may not be for long.</p>
<h4 id="libraries">Libraries</h4>
<p>Corona includes out-of-the-box support for OpenFeint and Game Center. These services are considered a requirement by many mobile gamers these days, and they&#8217;re sorely missed in mobile AIR game development.</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/openfeint.jpg" alt="OpenFeint logo"></div>
<p>Developers simply need a way to run native code with AIR. There are compelling third-party services that only provide native libraries, and we can&#8217;t use them if we want to develop with AIR. Even worse, many are unlikely to be added to the runtime, so without native libraries, we&#8217;ll never be able to use them. In addition to game leaderboards and achievements, I know many would like to access things like in-app advertising and custom hardware or accessories. Moreover, being able to use native libraries will help us avoid rewriting existing libraries that are already working well in a native form. It expands the reach of AIR and saves time and headache. Native code would be a major win, for sure.</p>
<h4 id="runtime">Runtime</h4>
<p>Everything you need for Corona is included in the output. There&#8217;s no separate runtime. I suppose it&#8217;s similar to how AIR app work on iOS. Developers like me want to include the AIR runtime with Android apps too. I strongly dislike requiring my users to install a runtime before they can play my games. It&#8217;s an extra potential point of failure, and it feels somehow unprofessional as a potential source of annoyance for the user. While you&#8217;re at it, allow me to include the runtime on Windows, Mac, and Linux as well.</p>
<div class="previewimage"><img src="http://joshblog.net/wp-content/uploads/adobeair.jpg" alt="Adobe AIR logo"></div>
<p>The age when separate app runtimes were a valid choice for targeting consumers is gone. I know games are a big focus for Adobe right now. Flash Player is a huge target for casual games. I&#8217;d love to use AIR to release commercial desktop games that are more polished, bigger, and better than my free web games. However, asking potentially-inexperienced users to install or update AIR is a big reason for why I&#8217;m not exploring AIR on desktop for games. Adobe has probably done the best it can to make the install experience painless, but I just can&#8217;t get over being wary.</p>
<p>As for updating AIR, let&#8217;s be honest. The latest version of AIR doesn&#8217;t get installed as quickly as Flash Player. I&#8217;ve never heard Adobe talk about stats for AIR runtime installs. Given how often Adobe presentations include the graph with Flash Player installs, I refuse to believe that they wouldn&#8217;t be sharing AIR install graphs too&#8230; unless they&#8217;re just not impressive. Let me package in the runtime, and I&#8217;ll never need to worry about the AIR runtime version. I&#8217;ve heard that a ton of Java apps package in the Java runtime now for similar reasons, and I&#8217;m sure that&#8217;s way bigger than AIR, so let&#8217;s get with the times.</p>
<p>Mobile is still a new frontier, and closer to the casual experience on the web, so I&#8217;m tolerating a separate runtime on Android, but my feelings are much the same as with the desktop runtime.</p>
<h4>A Tight Race</h4>
<p>In a follow-up post, I take a look at <a href="http://joshblog.net/2011/05/16/adventures-with-corona-part-2-where-corona-needs-improvement/">a few things that I <em>don&#8217;t</em> like about Corona</a>. Yes, the coin flips both ways. Corona has some advantages that made it an obvious choice for my iPad game&#8230; today. However, AIR is not that far behind Corona in this particular race. In some ways, AIR is much further ahead. To put it simply, I was willing to make some trade-offs in development comfort to get the features I wanted. I didn&#8217;t like that, but I sucked it up and only grumbled to myself.</p>
<p>I know both technologies will be improving over time, but I think that Corona is going to need to fight harder to stay on top in the situations where it holds my interest right now. So far, I&#8217;m only interested in Corona for iOS support. That&#8217;s a precarious place to be when there are a variety of pros and cons on both sides.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshblog.net/2011/05/13/adventures-with-corona-part-1-what-corona-offers-thats-better-than-adobe-air/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.621 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-21 10:46:11 -->
<!-- Compression = gzip -->
