<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.andrewrussell.net/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Andrew Russell</title>
	
	<link>http://andrewrussell.net</link>
	<description>The website of independent game developer Andrew Russell</description>
	<lastBuildDate>Sat, 07 Apr 2012 13:50:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.andrewrussell.net/AndrewRussell" /><feedburner:info uri="andrewrussell" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>A Well Crafted Clock</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/ndtMBwNTpQo/</link>
		<comments>http://andrewrussell.net/2012/04/a-well-crafted-clock/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 13:38:52 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=809</guid>
		<description><![CDATA[Here is an email I recently received from a satisfied ExEn user: Believe me, comparing ExEn to a well crafted clock is neither an exaggeration nor a compliment. It&#8217;s a solid truth. I once again realized this fact. For a few days, I&#8217;ve been trying to port my new game to MonoGame. And I succeeded [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an email I recently received from a satisfied ExEn user:</p>
<blockquote><p>Believe me, comparing ExEn to a well crafted clock is neither an exaggeration nor a compliment. It&#8217;s a solid truth. I once again realized this fact. For a few days, I&#8217;ve been trying to port my new game to MonoGame. And I succeeded it at last. But the result is appalling. First of all, it crashes very frequently; font rendering is unacceptably bad, the application starts very slowly (I think because of the large XNB files). I&#8217;m not listing other problems that might be solved in the process. So I decided to stay with ExEn. MonoGame is not an option. If I can&#8217;t live with ExEn, I consider switching to Unity or to similar engines.</p></blockquote>
<p>This puts a smile on my face <img src='http://andrewrussell.net/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>First of all, because ExEn has achieved its original goal: to be a replacement for MonoGame that developers would love using. The community entrusted me with over $10 000 of crowd-funding to make this happen. It happened. Thank you.</p>
<p>And also, because I appreciate the recognition of the craftsmanship that I put into my code. I don’t know much about clockmaking, but I imagine that master clocksmiths work to a similar philosophy: elegant, functional, precise, integral. It would be foolish to say that my code is absolutely these things – but when I fire up my IDE, this is always the aspiration.</p>
<p align="center">~</p>
<p>The email goes on to say that the only problem with ExEn is the iPad 3 retina font bug. In <a href="http://andrewrussell.net/2012/03/the-future-of-exen/">an earlier blog post</a> I described it as finally triggering my long-time-coming decision to retire from ExEn.</p>
<p><strong>I am now happy to say that the iPad 3 font bug in ExEn is fixed!</strong></p>
<p><a href="http://andrewrussell.net/content/2012/03/ms-particle-man-ipad3.png"><img class="aligncenter size-thumbnail wp-image-766" title="Ms. Particle-Man (iPad 3)" src="http://andrewrussell.net/content/2012/03/ms-particle-man-ipad3-256x191.png" alt="" width="256" height="191" /></a></p>
<p>This garbled text is <strong>no longer a problem</strong>. If you have an iPad game using ExEn up on the App Store, I recommend you <strong>update ASAP</strong>. You can get the latest version of ExEn from <a href="http://exen.codeplex.com/">CodePlex</a>.</p>
<p>This fix comes with a big thanks to <a href="http://picobots.net/">Michael Falk</a>, who originally reported the bug (in his game <a href="http://itunes.apple.com/us/app/ms.-particle-man/id500745010?mt=8">Ms. Particle-Man</a> – show him your appreciation by buying it!) and who has been helping me narrow down the cause and the fix.</p>
<p>I should say that this fix is only a band-aid. Neither myself or Michael have an actual iPad 3, and the bug is apparently hardware-only. Not having an iPad 3 means that I haven’t been able to test this fix up to the standard that I usually keep for ExEn. But it has been verified to work by a few people.</p>
<p>My understanding of the issue is that there is an underlying problem with the way ExEn sets up its retina-display surface. If I somehow get my hands on an iPad 3, I will do a proper investigation and produce a proper bug fix.</p>
<p>I know this is not really what you might expect for someone who just retired from a project. But until MonoGame <a href="http://andrewrussell.net/2012/03/the-scavengers-guide-to-exen/">get their act together</a>, I still feel a responsibility to ExEn users – like the gentleman who sent me that email – to keep their games running smoothly.</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/ndtMBwNTpQo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2012/04/a-well-crafted-clock/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2012/04/a-well-crafted-clock/</feedburner:origLink></item>
		<item>
		<title>The Scavengers Guide to ExEn</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/TCoJJQEs3MA/</link>
		<comments>http://andrewrussell.net/2012/03/the-scavengers-guide-to-exen/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 08:20:52 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=780</guid>
		<description><![CDATA[After my announcement that I am essentially retiring from ExEn development, I’ve invited the MonoGame team to “steal” the ExEn code for their own project. They invited me to submit a patch. But that won’t work. I don’t have the time to produce one. And, given that ExEn was made with different priorities to MonoGame, [...]]]></description>
			<content:encoded><![CDATA[<p>After my <a href="http://andrewrussell.net/2012/03/the-future-of-exen/">announcement</a> that I am essentially retiring from ExEn development, I’ve invited the MonoGame team to “steal” <a href="http://exen.codeplex.com/">the ExEn code</a> for their own project.</p>
<p>They invited me to submit a patch. But that won’t work. I don’t have the time to produce one. And, given that ExEn was made with different priorities to MonoGame, I don’t want to go in and wholesale replace large chunks of code. An integration of ExEn code probably needs to be done with more sensitivity than that – something I have even less time to do.</p>
<p>(While the wholesale replacing of large chunks of MonoGame is a possibility that I would gladly support myself, or even using ExEn as a new base for new MonoGame features, such action is a complicated process that would require the buy-in of all the major MonoGame developers, and great care in ensuring that none of their newer features break in the process.)</p>
<p>So it will be up to the MonoGame developers to scavenge what they find useful.</p>
<p>I’ve been chatting on the MonoGame IRC channel about their code, in an effort to reach a shared understanding of what in ExEn could be useful for MonoGame. Rather than have the knowledge be lost in the chat log, I’m going to write this brief guide to what features ExEn contains.</p>
<p>(I’m also rather sick today, so this gives me a nice low-energy-but-useful thing to do, while I hang out on IRC.)</p>
<p>If you have any questions about any of these, I would be thrilled to answer, and also to update this document to clarify anything.</p>
<p align="center">~</p>
<p>In no particular order&#8230;</p>
<p><strong>Project Organisation</strong>: (I don&#8217;t think my project organisation is ideal &#8211; MonoGame&#8217;s is just as good. I just mention it here to help you find your way around.)</p>
<p>ExEn is divided up into the “core” classes (ExEnCore) that are not dependent on anything else. This is usually maths stuff and data structures. The “common” code (ExEnCommon), which contains code that is common to all platforms that has dependencies such that it can’t be put in ExEnCore (often in the form of partial classes containing the platform-independent parts of a given class). And finally the platform-specific code for various platforms (ExEnSilver, ExEnEmTouch and ExEnAndroid).</p>
<p><strong>ExEn ReflectAndCompare</strong>: This is a tool I made that uses reflection to test compatibility between XNA and the ExEn library. Not only does it test the classes, properties, methods and fields match, but it also pushes a whole lot of data through the methods on each class to check that the output matches. This is an internal tool, not really suitable for mass consumption, but it is extremely useful for checking implementation accuracy. It is available on CodePlex <a href="http://exen.codeplex.com/releases/view/84903">here</a>, outside of the main ExEn repository.</p>
<p><strong>Maths Types in ExEnCore</strong>: I’m not sure how different these are to the types in MonoGame – MonoGame is likely to have a more complete implementation of the XNA maths types. But the types and methods that <em>are</em> in ExEn have been extensively tested with the aforementioned ReflectAndCompare tool.</p>
<p><strong>ExEn Types Don&#8217;t Allocate Memory When They Shouldn&#8217;t</strong>: In MonoGame KeyboardState allocates an array where ExEn correctly uses a bit-field (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161160">ExEnCore/Input/KeyboardState.cs</a>). In MonoGame TouchCollection is a reference type deriving from List (so it allocates) whereas ExEn correctly implements IList on value-type fields (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161109">ExEnCore/Input/Touch/TouchCollection.cs</a>).</p>
<p>If a user of MonoGame were to copy one of these types, their game would behave incorrectly. In ExEn their behaviour matches XNA perfectly.</p>
<p>This is an excellent opportunity to just drop the ExEn types into MonoGame. It&#8217;s low-impact and the ExEn code is unarguably better.</p>
<p>I suspect that there may well be other types in MonoGame that are exhibiting allocation behaviour that does not match XNA.</p>
<p><strong>TouchPanel bug fixes:</strong> As well as the above, ExEn implements correct thread safety and allocation behaviour for TouchPanel (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160994">ExEnCommon/Input/Touch/TouchPanel.cs</a>).</p>
<p><strong>Drift-Smoothing ExEn Game Loop</strong>: ExEn has a shared GameLoop type that smooths out incoming ticks from the operating system before they go to Game.Update and Game.Draw. This is similar to the behaviour of XNA (although does not match exactly). This prevents dropped or doubled frames that happen due to timer drift. (See <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160813">ExEnCore/GameLoop.cs</a>.)</p>
<p><strong>Automagic Retina Display Handling</strong>: One neat feature of ExEn is its ability to allow games to take advantage of the iOS retina display, without having to modify any code (just provide higher resolution assets). There are a number of components that go into this:</p>
<p>First of all, the ExEnScaler (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161048">ExEnCore/ExEnScaler.cs</a>) is responsible for all of the transformation maths. It uses fractional maths (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160845">ExEnCore/ExEnFractionMaths.cs</a>) so that it is always pixel perfect – it doesn’t suffer from floating-point precision issues. (This could be expanded to allow arbitrary “virtual” backbuffer sizes – something I never got around to.)</p>
<p>Then the View and View Controller (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160942">ExEnEmTouch/ExEnEmTouchGameView.cs</a>) and the iOS GraphicsDeviceManager are responsible for setting up the backbuffer and ExEnScaler to the correct sizes. The code flow is a bit complicated because it goes through iPhoneOSGameView. But there are lots of comments, “Find All References” is your friend, and I can help via email if need be.</p>
<p>Finally, the Texture2D and SpriteFont loaders on iOS (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160890">ExEnEmTouch/BuiltInLoaders.cs</a>) will load up “@2x” versions of those assets when required. To the user these Texture2Ds and SpriteFonts appear to be of normal size, but under-the-hood they provide retina-sized data.</p>
<p><strong>Faster Fonts and Automatic Retina Font Generation</strong>: ExEn font data is generated with the <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161175">ExEnFontShim</a> XNA content pipeline extension. This generates PNG and custom binary metrics files for sprite fonts, as well as automatically creating &#8220;@2x&#8221; versions of the fonts suitable for retina displays.</p>
<p>These fonts can be loaded on the device much, much, <em>much</em> faster than trying to decode an XNB font. Especially if the fonts are DXT3 compressed  (which XNB fonts are by default).</p>
<p><strong>Seamless Orientation Handling</strong>: The ExEnScaler is also capable of handling orientation changes. Although this is only used on iOS, and only because ExEn was written to support iOS &lt; 4.2 where it was necessary to handle orientation yourself for performance reasons (ExEn blocks iOS from modifying the view orientation).</p>
<p>ExEn implements orientation as-per XNA on WP7. Most of the magic happens in <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160942">ExEnEmTouchGameView.cs</a> and <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161068">ExEnAndroidSurfaceView.cs</a> on iOS and Android respectively. It has special handling for the upside-down orientation on iPad.</p>
<p>The ExEn <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161059">Orientation sample</a> demonstrates orientation changes working correctly. In particular it handles transitioning from the iOS splash screen in any orientation at startup without any flicker (try restarting the app in different orientations).</p>
<p><strong>Custom SurfaceView on Android that Doesn’t Crash</strong>: When I was making the Android version of ExEn, Mono for Android had a bug where the built-in game view in its OpenTK implementation would crash. From memory it is because it didn’t handle the activity pausing correctly (amongst other things). ExEn on Android provides a complete and correct implementation of OpenGL initialisation on Surface View (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161068">ExEnAndroid/ExEnAndroidSurfaceView.cs</a>), covering all the OpenGL and multi-threading complexities.</p>
<p><strong>Backgrounding Doesn&#8217;t Crash on iOS</strong>: It seems like MonoGame will crash on iOS (on the device) when the game gets backgrounded. ExEn doesn&#8217;t crash because it correctly pauses the game loop without touching the frame buffer. (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160995">ExEnEmTouch/ExEnEmTouchApplication.cs</a> is a good starting point, also look at how isPausing is used in <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160942">ExEnEmTouchGameView.cs</a>.)</p>
<p>ExEn exposes a custom API (Game.OnEnterBackground) for users who want to respond to backgrounding (say, by saving their data). Although it would be nicer to convert this to match the WP7 tomb-stoning API. (ExEn was started before WP7 came out.)</p>
<p>And ExEn also correctly implements activation/deactivation events (not to be confused with backgrounding). Not sure if MonoGame&#8217;s implementation is correct &#8211; but it does exist.</p>
<p><strong>Total refactoring of the game and graphics stuff</strong>: ExEn better matches the way XNA uses classes like GraphicsDeviceManager, GraphicsDevice, GameWindow, etc. It also allows better sharing of code between platforms by putting common code into ExEnCommon.</p>
<p>The most important change is to turn GameWindow into a thin cross-platform class, moving platform-specific stuff into separate classes (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160942">ExEnEmTouchGameView.cs</a> and <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161068">ExEnAndroidSurfaceView.cs</a>), which have then themselves been significantly improved.</p>
<p>The way ExEn uses GraphicsDeviceManager as the platform-specific way of handling graphics startup better matches the behaviour of XNA. Also ExEn’s order-of-method-calls correctly matches the behaviour of XNA – including rarely used (but still important) things like calling BeginDraw and EndDraw (and using the result).</p>
<p>ExEn has its own implementation of the Game Components code. It’s fully tested to ensure it matches the method-call order of XNA. (I think MonoGame has some bugs here still.)</p>
<p>It’s important to get the calling order of these methods correct – otherwise it can introduce subtle bugs into the library user’s game.</p>
<p>I know this isn’t an easy one to shift into MonoGame, as it would replace a lot of code. But perhaps it would be worth it, as these classes coordinate some of the advanced features in ExEn. And they would themselves bring in a lot of the fixes mentioned in this document.</p>
<p><strong>Hardware Accelerated Music on iOS</strong>: ExEn does all its audio through the AudioQueue API, whereas MonoGame uses OpenAL.</p>
<p>For <em>sound effects</em>, ExEn&#8217;s code works ok (except that I never implemented panning). But I think OpenAL is a better choice for MonoGame &#8211; especially as their OpenAL code will work cross-platform.</p>
<p>(Not sure if MonoGame supports this, but ExEn has handling for restarting looped sound effects and music when returning from the background.)</p>
<p>However for <em>music</em> playback I would strongly advocate lifting that code from ExEn.</p>
<p>ExEn supports hardware accelerated music decoding &#8211; allowing compressed music to be streamed directly from flash memory to the hardware decoder. This will free up a lot of CPU and RAM for more useful things (software decoding compressed audio is slooooooow).</p>
<p>It also correctly supports the game going to and from background on iOS. It supports playing nicely with other music-playing applications (eg: the iPod app). It&#8217;s also properly thread-safe, unlike MonoGame&#8217;s implementation (especially the MediaPlayer class).</p>
<p>(In ExEnEmTouch, see <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161110">SoundEffect.cs</a> and <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160834">SoundEffectInstance.cs</a> for the nuts-and-bolts of decoding and playing audio. See <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160961">AudioSessionManager.cs</a> for properly setting audio categories. See <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161047">MediaPlayer.cs</a> for correct implementation of locking plus various minor bug fixes. Finally <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160909">Song.cs</a> - there&#8217;s not much to it.)</p>
<p><strong>Audio Improvements on Android</strong>: Similar to ExEn on iOS. ExEn on Android uses SoundPool for sound effects and Android Media Player for hardware-accelerated music. It correctly handles stopping and restarting audio in progress when the activity is paused (sent to the background). It also is correctly thread-safe.</p>
<p>(In ExEnAndroid: See <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161029">SoundEffect.cs</a> and <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161126">SoundEffectInstance.cs</a> for SoundPool playback. See <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160955">MediaPlayer.cs</a> and <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161107">Song.cs</a> for Android Media Player playback. See <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161099">ExEnAndroidActivity.cs</a> for where pausing/resuming handling begins.)</p>
<p><strong>CatGirls Testing Application</strong>: This is a series of graphical interactive unit tests for various ExEn features. It allows easy verification of features across each supported platform. It’s an XNA game so it should be easy enough bring it into MonoGame as a sample.</p>
<p>The Orientation sample is also worth bringing in to verify orientation behaviour, particularly at startup (see the section on Orientation, above).</p>
<p><strong>Cross-Platform Pluggable ContentManager</strong>: The logic of the ContentManager class (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161060">ExEnCore/Content/ContentManager.cs</a>) has been made cross-platform. Actual content loaders are pluggable. ExEn uses this for the platform-specific business of actually loading content files (e.g.: <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160890">ExEnEmTouch/Content/BuiltInLoaders.cs</a>).</p>
<p>End-users can use this as a simple way to add platform-specific methods of loading non-XNB content. (ExEn does not include an XNB reader, so other methods of getting Content Pipeline content into ExEn had to be devised.)</p>
<p><strong>Various Cleanup</strong>: Many of the classes in ExEn have been neatly formatted. The named colours are split out of the main Color type (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#161009">ExEnCore/Graphics/NamedColors.cs</a>). Maths types are organised into cohesive sections.</p>
<p>Platform-agnostic parts of various classes are partial classes in the ExEnCommon area (removing a lot of the convolution required to share code between platforms).</p>
<p>For example: the common parts of the Game class make up 259 lines of code. The platform specific parts of the Game class on iOS are only 86 lines. On Android: 49.</p>
<p>Take a look at the files (<a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160882">here</a>, <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160905">here</a> and <a href="http://exen.codeplex.com/SourceControl/changeset/view/13743#160818">here</a>) to get a full appreciation of this.</p>
<p>ExEn seems to implement IDisposable more consistently and correctly than MonoGame.</p>
<p><strong>Other Stuff</strong>: Perhaps the rendering code in ExEn could be ignored in favour of MonoGame’s rendering code. I hear you have made serious improvements in this area. Still it might be worth looking at my SpriteBatch and Texture2D classes for some ideas.</p>
<p align="center">~</p>
<p>Have fun with my code! If you have any questions about it – please don’t hesitate to contact me!</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/TCoJJQEs3MA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2012/03/the-scavengers-guide-to-exen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2012/03/the-scavengers-guide-to-exen/</feedburner:origLink></item>
		<item>
		<title>The Future of ExEn</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/tW7uchK8yWc/</link>
		<comments>http://andrewrussell.net/2012/03/the-future-of-exen/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 01:36:23 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=765</guid>
		<description><![CDATA[Let&#8217;s start with a little history: Development on ExEn started when I tried to use XnaTouch and SilverSprite to port an XNA game to iOS and Silverlight. Up until that point I had been singing the praises of XNA, not only because it is a really fantastic library, but because it had this cross-platform support. Of [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s start with a little history: Development on <a href="http://andrewrussell.net/exen/">ExEn</a> started when I tried to use XnaTouch and SilverSprite to port an XNA game to iOS and Silverlight.</p>
<p>Up until that point I had been singing the praises of XNA, not only because it is a really fantastic library, but because it had this cross-platform support.</p>
<p>Of course, once I actually tried to use XnaTouch and SilverSprite I quickly changed my tune. Quite frankly the libraries were atrocious. Unusable. Poorly coded, ugly, buggy and slow.</p>
<p>Appalled, I started work on ExEn. It started from an amalgamation of XnaTouch and SilverSprite, but ended up being a near-complete rewrite. ExEn was created to live up to my very high standards. It&#8217;s performant, it&#8217;s has very few bugs &#8211; and none as blatant as its forebears, and it has a design philosophy that puts usability for real game developers first.</p>
<p>Of course, there is a wide chasm between a library for my internal use, and a library that anyone can use. So last year I experimented with crowd-funding. Thanks to contributions from the community, I raised enough money to take the time to work on a public release of ExEn, plus adding support for the Android platform.</p>
<p>The development of ExEn did not go perfectly smoothly &#8211; no software development project does. Adding support for the amazingly obtuse Android platform was especially challenging. But I think I did a pretty good job, and for the most part I enjoyed working on it. And the people who have been using ExEn for their projects have sent me nothing but praise.</p>
<p><strong>ExEn is currently the best platform for porting SpriteBatch XNA games to iOS and Android.</strong></p>
<p>As an added side benefit, since first announcing ExEn online, I have had many offers of contract work developing and porting mobile games using ExEn as the platform. (Incidentally, if you&#8217;re looking for a skilled C# and iOS developer&#8230;)</p>
<p>Sadly, all good things must come to an end.</p>
<p>ExEn itself is not a financially viable project for me. Not even remotely. Even with the contracting work it brings in, time spent working on it is essentially a loss for me.</p>
<p>This comes particularly in the face of competition from MonoGame. What once started out as XnaTouch, buggy and ugly, was endorsed by the Mono folks, renamed to &#8220;MonoGame&#8221;, and has seen its development accelerate at a tremendous pace in the last year.</p>
<p>My understanding is that MonoGame is still significantly buggy. Even as recently as this month I’ve had developers tell me they are switching to ExEn because they found MonoGame unreasonably buggy. And in spite of ExEn being a higher quality platform, MonoGame continues to acquire features, users and support at a tremendous rate. Not to mention: bug fixes. The simple fact of the matter is that they have way more resources than I do. Time is eventually going to make their library better.</p>
<p>(And on the Silverlight front, Silverlight 5 brought with it an XNA-based API for hardware-accelerated immediate-mode rendering, rendering some of the cleverest bits of ExEn obsolete.)</p>
<p>But this has been going on for some time now. What has prompted this blog post is that the iPad 3 (sorry, “the new iPad”) came out and <strong>I got a bug report.</strong> ExEn apparently has a problem with its automagic retina-display fonts on the new iPad. I suspect the fix is simple. But I can&#8217;t check it myself &#8211; I don&#8217;t have an iPad 3. (I figure that my iPad 2 is still good. I&#8217;m actually using it to write this post while I clone my failing HDD &#8211; another story.)</p>
<p style="text-align: center;">[UPDATE: This bug is now fixed in <a href="http://exen.codeplex.com/">ExEn 1.0.1</a>, <a href="http://andrewrussell.net/2012/04/a-well-crafted-clock/">Details</a>]</p>
<p>Here is a screenshot (iPad 2 and iPad 3)</p>
<p><a href="http://andrewrussell.net/content/2012/03/ms-particle-man-normal.png"><img class="aligncenter size-thumbnail wp-image-767" title="Ms. Particle-Man (normal)" src="http://andrewrussell.net/content/2012/03/ms-particle-man-normal-256x191.png" alt="" width="256" height="191" /></a><a href="http://andrewrussell.net/content/2012/03/ms-particle-man-ipad3.png"><img class="aligncenter size-thumbnail wp-image-766" title="Ms. Particle-Man (iPad 3)" src="http://andrewrussell.net/content/2012/03/ms-particle-man-ipad3-256x191.png" alt="" width="256" height="191" /></a></p>
<p style="text-align: center;">[UPDATE: This bug is now fixed in <a href="http://exen.codeplex.com/">ExEn 1.0.1</a>, <a href="http://andrewrussell.net/2012/04/a-well-crafted-clock/">Details</a>]</p>
<p>Now &#8211; I could buy a new iPad &#8211; a significant expense for me and basically a loss when I consider that I have an otherwise perfectly functional iPad 2.</p>
<p>I also strongly considered crowd-funding the purchase of a new iPad &#8211; and perhaps even (in a fairly literal sense) buying some time to improve ExEn. In crowd-funding terms it’s a fairly small amount of money. I considered this so strongly that I actually shot the video for it. This option would still be a loss – this time of time. I would have had to put a large amount of work into the funding rewards and the funding drive itself – more than it would have earned back.</p>
<p>I decided, after a lot of reflection, to do neither. While those plans would have worked this time around, they are not sustainable. I don’t have the spare time or money to pour into ExEn development on a long-term basis (I wish I did). Even with the contract work that ExEn brings in it isn’t worthwhile. And I expect ExEn contract work will gradually dry up as MonoGame gains ground.</p>
<p>So rather than heading down this dead-end path, I have decided that it’s time to wind things up.</p>
<p>(I’ll still do what I can to fix this particular bug. I just won’t be spending money or an excess of time to do so. If anyone has a patch, I’d be very grateful.)</p>
<p align="center">~</p>
<p>I don&#8217;t want to leave ExEn developers completely in the lurch. First of all, feel free to email me if you have any questions or concerns.</p>
<p>If someone out there wants to simply buy me an iPad 3, I would be thrilled to get ExEn to work as seamlessly there as it does on every other iOS device. Send me an email if you&#8217;re keen. (I know this isn&#8217;t as trendy as a sexy video and a crowd-funding project, but it&#8217;s a heck of a lot easier.)</p>
<p>Finally &#8211; and this is by far the most important - <strong>if you are a MonoGame developer: Please steal my code!</strong></p>
<p>I would love to be able to tell all the ExEn users that MonoGame is a worthy replacement. So if you work with MonoGame email me and maybe I can help you integrate the best bits of ExEn into your library. You don&#8217;t even need my permission &#8211; ExEn is open source. (I haven&#8217;t looked at your code base for a while &#8211; but I&#8217;d love to be presently surprised to find ExEn code already in there.)</p>
<p>(Update: read my next post about <a title="The Scavengers Guide to ExEn" href="http://andrewrussell.net/2012/03/the-scavengers-guide-to-exen/">nice ExEn features you can have</a>.)</p>
<p>(Alternately, if someone out there is interested in taking over the ExEn project – and you have the time and skill to devote to it – I’d be happy to hand it over.)</p>
<p align="center">~</p>
<p>Thank you to everyone who has supported ExEn. Together we made some fantastic software.</p>
<p>See you in the next project&#8230;</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/tW7uchK8yWc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2012/03/the-future-of-exen/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2012/03/the-future-of-exen/</feedburner:origLink></item>
		<item>
		<title>Made with ExEn: Ms Particle-Man</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/P85BLYEDMWc/</link>
		<comments>http://andrewrussell.net/2012/02/made-with-exen-ms-particle-man/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 01:14:35 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[Made With ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=753</guid>
		<description><![CDATA[Check out Ms Particle-Man! This game by Michael Falk (Picobots) is full of gorgeous blippy retro goodness. By using ExEn, Michael has made Ms Particle-Man available for iOS (App Store link) and as a browser-based game (website link). Michael also has the game running on Windows and Xbox 360. ExEn lets you build and run [...]]]></description>
			<content:encoded><![CDATA[<p>Check out <a href="http://picobots.net/projects/11210599/ms-particle-man">Ms Particle-Man</a>! This game by Michael Falk (Picobots) is full of gorgeous blippy retro goodness.</p>

<p>By using <a href="http://andrewrussell.net/exen/">ExEn</a>, Michael has made Ms Particle-Man available for iOS (<a href="http://itunes.apple.com/us/app/ms.-particle-man/id500745010?ls=1&amp;mt=8">App Store link</a>) and as a browser-based game (<a href="http://picobots.net/projects/11210599/ms-particle-man?play">website link</a>). Michael also has the game running on Windows and Xbox 360.</p>

<iframe src="http://player.vimeo.com/video/36813023?title=0&amp;byline=0&amp;portrait=0" width="480" height="270" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

<p><a href="http://andrewrussell.net/exen/">ExEn</a> lets you build and run your XNA (Windows, Xbox 360, Windows Phone) games on Silverlight, iOS and Android.</p><img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/P85BLYEDMWc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2012/02/made-with-exen-ms-particle-man/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2012/02/made-with-exen-ms-particle-man/</feedburner:origLink></item>
		<item>
		<title>Predictions on XNA in Windows 8</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/19pgNe01I0M/</link>
		<comments>http://andrewrussell.net/2011/11/predictions-on-xna-in-windows-8/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 12:34:56 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[Andrew’s Blog]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=720</guid>
		<description><![CDATA[Promit Roy (a fellow XNA/DirectX MVP) has written an interesting article about the status of DirectX and XNA. You should read it, because it&#8217;s good, and because this post is somewhat of a reply. The short version is that Microsoft seems to have taken the DirectX SDK off its regular release schedule, and is instead [...]]]></description>
			<content:encoded><![CDATA[<p>Promit Roy (a fellow XNA/DirectX MVP) has written an interesting article about the <a href="http://ventspace.wordpress.com/2011/11/28/directx-and-xna-status-report/">status of DirectX and XNA</a>. You should read it, because it&#8217;s good, and because this post is somewhat of a reply.</p>
<p>The short version is that Microsoft seems to have taken the DirectX SDK off its regular release schedule, and is instead rolling it into the Windows API. And that XNA is not a first-class citizen in Windows 8 (not supported by Metro or the Windows app store).</p>
<p>Promit’s conclusion is that this spells the end for XNA. In fact, ever since the //build/ conference, there has been a lot of doubt floating around about the future of XNA.</p>
<p><strong>Based on what I know about the technology, I am a little more optimistic about XNA’s future.</strong></p>
<p>XNA is based on DirectX 9. DirectX 9 doesn’t work on Metro (Microsoft’s new touch-friendly interface for Windows 8). It will still work on Windows 8, but will switch the interface to “classic mode” (aka: “the Desktop”). XNA would need to target a newer version of DirectX in order to work with Metro.</p>
<p>In XNA 4.0 (the current version) they dropped all of the DirectX 9-only features in anticipation of a future move to DirectX 10/11. But they’re still using DirectX 9, for two very good reasons:</p>
<p>One: DirectX 9 is the last version of DirectX that works on Windows XP (DirectX 10 and newer require Windows Vista and newer).</p>
<p>Two: Xbox 360 games are programmed using an API that is similar to DirectX 9.</p>
<p>XNA is, in essence, a wrapper around DirectX. There is nothing in XNA itself that requires any special “platform stuff”. <strong>There is absolutely no reason XNA should be on the critical path of Windows 8.</strong> Why should the already-risky Windows 8 risk waiting around for a DirectX 11-based XNA 5.0? XNA can easily be added later (along with app store support).</p>
<p>And this is exactly how XNA has worked in the past: XNA is an installable library, completely decoupled from DirectX and the core operating system.</p>
<p>It makes perfect sense that XNA is not a part of the initial launch of Windows 8.</p>
<p>My suspicion is that XNA 5.0 will be released with the new Xbox console, rumoured to be coming soon. I’m sure Microsoft is hoping that Windows XP will have <em>finally</em> gone away by then.</p>
<p>It is worth pointing out that Microsoft already has a partial version of XNA that runs on DirectX 11. It’s the Windows Phone 7 version, <a href="http://arstechnica.com/microsoft/news/2010/04/leaked-windows-phone-7-docs-show-off-wince-6-underpinnings.ars">apparently</a>. (It only supports the “Reach” profile, without custom shaders.)</p>
<p>Based on all these factors, it is my hope and prediction that XNA is simply in “stealth” mode ahead of a new, DirectX 11-based release. I recall a similar silence in the lead-up to XNA 4.0.</p>
<p>(And, failing all of that, <a href="http://andrewrussell.net/exen/">I know someone who’s very good at porting XNA to unsupported platforms</a>.)</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/19pgNe01I0M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2011/11/predictions-on-xna-in-windows-8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2011/11/predictions-on-xna-in-windows-8/</feedburner:origLink></item>
		<item>
		<title>Made with ExEn: Pumpkin Jumpin</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/ZagaVl4ZxTM/</link>
		<comments>http://andrewrussell.net/2011/10/made-with-exen-pumpkin-jumpin/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 09:17:11 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>
		<category><![CDATA[Made With ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=715</guid>
		<description><![CDATA[Another game made with ExEn and available on the App Store, for your Halloween enjoyment:]]></description>
			<content:encoded><![CDATA[<p>Another game <a href="http://andrewrussell.net/exen/">made with ExEn</a> and available on the App Store, for your Halloween enjoyment:</p>
<p><a href="http://itunes.apple.com/de/app/pumpkinjumpin/id443993813?mt=8&amp;uo=4"><img class="aligncenter size-full wp-image-716" title="PumpkinJumpin" src="http://andrewrussell.net/content/2011/10/mzl.ufgaorop.320x480-75.jpg" alt="" width="480" height="320" /></a></p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/ZagaVl4ZxTM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2011/10/made-with-exen-pumpkin-jumpin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2011/10/made-with-exen-pumpkin-jumpin/</feedburner:origLink></item>
		<item>
		<title>ExEn Public Preview 2.1</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/E19TUi9nD5c/</link>
		<comments>http://andrewrussell.net/2011/10/exen-public-preview-2-1/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 12:40:04 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=708</guid>
		<description><![CDATA[Due to a bug that made it&#8217;s way into the last ExEn Public Preview, I am releasing ExEn Public Preview 2.1 (download). The bug affected SpriteFont rendering on iOS devices with retina displays. If you have released a game using SpriteFont and this code (including if you are in the pre-release program), please be sure [...]]]></description>
			<content:encoded><![CDATA[<p>Due to a bug that made it&#8217;s way into the last <a href="http://andrewrussell.net/2011/10/exen-public-preview-2/">ExEn Public Preview</a>, I am releasing ExEn Public Preview 2.1 (<a href="http://andrewrussell.net/content/2011/10/ExEn Public Preview 2.1.zip">download</a>).</p>
<p>The bug affected SpriteFont rendering on iOS devices with retina displays. If you have released a game using SpriteFont and this code (including if you are in the pre-release program), please be sure to update your game in the App Store.</p>
<p>Sorry about that <img src='http://andrewrussell.net/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Remember that ExEn is not yet officially released. You could say that it&#8217;s in &#8220;beta&#8221;. So these things will crop up occasionally. To get bug fixes as soon as they&#8217;re available, consider joining the <a href="http://andrewrussell.net/exen/">pre-release program</a>.</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/E19TUi9nD5c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2011/10/exen-public-preview-2-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2011/10/exen-public-preview-2-1/</feedburner:origLink></item>
		<item>
		<title>Look at me, I’m an MVP</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/LM2JA0NFVno/</link>
		<comments>http://andrewrussell.net/2011/10/look-at-me-im-an-mvp/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 05:58:20 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[Andrew’s Blog]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=703</guid>
		<description><![CDATA[I am Microsoft MVP (XNA/DirectX). <a href="http://andrewrussell.net/2011/10/look-at-me-im-an-mvp/">Click through to see a photo of me with my award</a>.]]></description>
			<content:encoded><![CDATA[<p>Here I am with my 2011 Microsoft MVP award (for XNA/DirectX):</p>
<p><a href="http://andrewrussell.net/content/2011/10/MVP.jpg"><img class="aligncenter size-medium wp-image-704" title="MVP" src="http://andrewrussell.net/content/2011/10/MVP-480x720.jpg" alt="" width="480" height="720" /></a></p>
<p>And I’m also wearing my <a href="http://gamedev.stackexchange.com/">gamedev.stackexchange.com</a> shirt, which I <a href="http://meta.gamedev.stackexchange.com/questions/479/game-development-stack-exchange-swag-for-top-users">received</a> as a top user on that site.</p>
<p>Fun fact: I&#8217;m the top answerer of XNA questions on both <a href="http://stackoverflow.com/tags/xna/topusers">Stack Overflow</a> and <a href="http://gamedev.stackexchange.com/tags/xna/topusers">Game Development SE</a>.</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/LM2JA0NFVno" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2011/10/look-at-me-im-an-mvp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2011/10/look-at-me-im-an-mvp/</feedburner:origLink></item>
		<item>
		<title>ExEn Public Preview 2: Now with Android Support</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/T5aZdYai7ig/</link>
		<comments>http://andrewrussell.net/2011/10/exen-public-preview-2/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 05:23:37 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=692</guid>
		<description><![CDATA[It took a while, but here it is, the latest version of ExEn (10MB zip) [UPDATE 27th October: Fixed a bug] ExEn is a port of Microsoft’s XNA API to iOS, Android and Silverlight. It is licensed under an open-source licence (MS-PL), so you can start using it to port your games right now, for [...]]]></description>
			<content:encoded><![CDATA[<p>It took a while, but <strong>here it is, the <a href="http://andrewrussell.net/content/2011/10/ExEn Public Preview 2.1.zip">latest version of ExEn</a></strong> (10MB zip) [UPDATE 27th October: <a href="http://andrewrussell.net/2011/10/exen-public-preview-2-1/">Fixed a bug</a>]</p>
<p><a href="http://andrewrussell.net/exen/">ExEn</a> is a port of Microsoft’s XNA API to <strong>iOS, Android and Silverlight</strong>. It is licensed under an open-source licence (MS-PL), so you can start using it to port your games right now, for <em>free</em>!</p>
<p>This version introduces support for Android. There are a few <strong>rough edges</strong> with Android support that I should mention: First of all the Android documentation isn’t done yet. The process for setting up a project for Android is similar to the process for iOS. Please take note that content for the Android platform needs to be set as “AndroidAsset” (and not “Content” as on other platforms).</p>
<p>And secondly: The code has <strong>not</strong> been tested on a wide variety of Android devices. Unlike iOS, Android suffers from fairly serious platform fragmentation and numerous weird device bugs. And I simply don’t have the resources to test it on enough devices. So please take note that ExEn for Android will<strong> not</strong> insulate you completely from the Android platform. It is up to you to test your game before releasing it – just as you would have to before releasing a normal Android game.</p>
<p>If you are using ExEn for Android, please send me an email and let me know how it goes. If you run into any device-related issues in ExEn, I’d be happy to work with you to try and fix them.</p>
<p>ExEn for Android requires a minimum of Android 2.1. However it should not be too difficult to modify it to target a 1.6 minimum if your project requires it.</p>
<p>And ExEn of course still supports iOS and Silverlight. This latest Public Preview version includes a number of improvements and bug fixes on those platforms. Most notably, ExEn now supports multi-touch (although not gesture recognition yet) on both iOS and Android.</p>
<p><strong>If you would like to receive updates to ExEn as they are made, and to support the continued development of ExEn, please consider joining the <a href="http://andrewrussell.net/exen/#JoinExEnPreRelease">ExEn Pre-release Program</a>.</strong></p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/T5aZdYai7ig" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2011/10/exen-public-preview-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2011/10/exen-public-preview-2/</feedburner:origLink></item>
		<item>
		<title>Made With ExEn: TriPeaks Solitaire</title>
		<link>http://feeds.andrewrussell.net/~r/AndrewRussell/~3/t5zWo1Vtb98/</link>
		<comments>http://andrewrussell.net/2011/09/made-with-exen-tripeaks-solitaire/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 12:22:07 +0000</pubDate>
		<dc:creator>Andrew Russell</dc:creator>
				<category><![CDATA[ExEn]]></category>
		<category><![CDATA[Made With ExEn]]></category>

		<guid isPermaLink="false">http://andrewrussell.net/?p=683</guid>
		<description><![CDATA[Another ExEn game – this time it’s Jake Poznanski’s game, “TriPeaks Solitaire”: Jake writes: It&#8217;s a port from a Windows Phone 7 XNA game Didn&#8217;t take long thanks to ExEn! Congratulations on an excellent port, Jake! You can play the Silverlight version of TriPeaks Solitaire here. &#160;]]></description>
			<content:encoded><![CDATA[<p>Another <a href="http://andrewrussell.net/exen/">ExEn</a> game – this time it’s Jake Poznanski’s game, “<a href="http://tripeaks.jakepoz.com/">TriPeaks Solitaire</a>”:</p>
<p><a href="http://andrewrussell.net/content/2011/09/TriPeaks.png"><img class="aligncenter size-medium wp-image-684" title="TriPeaks" src="http://andrewrussell.net/content/2011/09/TriPeaks-480x288.png" alt="" width="480" height="288" /></a></p>
<p>Jake writes:</p>
<blockquote><p>It&#8217;s a port from a Windows Phone 7 XNA game <img src='http://andrewrussell.net/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Didn&#8217;t take long thanks to ExEn!</p></blockquote>
<p>Congratulations on an excellent port, Jake!</p>
<p><a href="http://tripeaks.jakepoz.com/">You can play the Silverlight version of TriPeaks Solitaire here</a>.</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/AndrewRussell/~4/t5zWo1Vtb98" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrewrussell.net/2011/09/made-with-exen-tripeaks-solitaire/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://andrewrussell.net/2011/09/made-with-exen-tripeaks-solitaire/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 3.204 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-04-21 05:49:01 --><!-- Compression = gzip -->

