<?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>WAM Games &#187; xblig</title>
	<atom:link href="http://wam-games.com/tag/xblig/feed/" rel="self" type="application/rss+xml" />
	<link>http://wam-games.com</link>
	<description></description>
	<lastBuildDate>Wed, 21 Jul 2010 14:03:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Retrofit:Overload goes live &#8211; some press reactions</title>
		<link>http://wam-games.com/2010/05/retrofitoverload-goes-live-heres-some-press-reactions/</link>
		<comments>http://wam-games.com/2010/05/retrofitoverload-goes-live-heres-some-press-reactions/#comments</comments>
		<pubDate>Tue, 11 May 2010 19:22:22 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Retrofit series]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Xbox]]></category>
		<category><![CDATA[Press]]></category>
		<category><![CDATA[retrofit]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[xblig]]></category>

		<guid isPermaLink="false">http://wam-games.com/?p=547</guid>
		<description><![CDATA[
Retrofit:Overload is now available for the Xbox 360! you can download it to your Xbox here
We have had some favourable reviews and comments from the gaming press, here are a few links to get you going.
Gamerbytes - &#8220;What if Namco&#8217;s Galaga Legions was actually more like Galaga?  It would have probably turned out like [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-493" href="http://wam-games.com/games/retrofitoverload/boxart_final_small/"><img class="alignnone size-full wp-image-493" title="Retrofit:Overload box art" src="http://wam-games.com/wp-content/uploads/2010/04/BoxArt_Final_Small.jpg" alt="" width="219" height="300" /></a></p>
<p><strong><span style="color: #ff0000;">Retrofit:</span>Overload</strong> is now available for the Xbox 360! you can download it to your Xbox <a href="http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d802585504e5/" target="_self" onclick="pageTracker._trackPageview('/outgoing/marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d802585504e5/?referer=');">here</a></p>
<p>We have had some favourable reviews and comments from the gaming press, here are a few links to get you going.</p>
<p><strong><a title="retrofit overload review" href="http://www.gamerbytes.com/2010/05/xbox_indies_retrofit_overload.php" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.gamerbytes.com/2010/05/xbox_indies_retrofit_overload.php?referer=');">Gamerbytes</a> </strong>- <em>&#8220;What if Namco&#8217;s <em>Galaga Legions</em> was actually more like <em>Galaga</em>?  It would have probably turned out like this.&#8221;</em></p>
<p><strong><a title="retrofit overload review" href="http://www.gamingtruth.com/2010/05/11/retrofit-overload-review/" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.gamingtruth.com/2010/05/11/retrofit-overload-review/?referer=');">Gamingtruth</a></strong> &#8211; <em>&#8220;The great thing about Retrofit: Overload is that you can overload  yourself or a friend with all the retroness this game has to offer.&#8221;</em></p>
<p><strong><a title="retrofit overload review" href="http://wastedseconds.com/?p=4983" target="_self" onclick="pageTracker._trackPageview('/outgoing/wastedseconds.com/?p=4983&amp;referer=');">WastedSeconds</a></strong> &#8211; <em>&#8220;It doesn’t try to reinvent the wheel, it just works and it works damn  well.&#8221;</em></p>
<p><strong><a title="Retrofit Overload Review" href="http://www.xblaratings.com/component/content/article/66-shooter/2335-retrofit-overload" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.xblaratings.com/component/content/article/66-shooter/2335-retrofit-overload?referer=');">Xblaratings</a></strong><em> &#8211; &#8220;This mechanic is genius.&#8221;</em></p>
<p><a href="http://www.xboxhornet.com/wordpress/?p=3903" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.xboxhornet.com/wordpress/?p=3903&amp;referer=');"><strong>Xboxhornet</strong></a> <em>- &#8220;All your arcade favourites meshed into one!&#8221;</em></p>
<p><a href="http://www.gamasutra.com/view/news/28577/Xbox_Live_Indie_Games_10_Titles_For_2010.php" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.gamasutra.com/view/news/28577/Xbox_Live_Indie_Games_10_Titles_For_2010.php?referer=');"><strong>Gamasutra</strong></a><em> &#8211; &#8220;Xbox Live Indie Games &#8211; Ten Titles for 2010&#8243;</em></p>
<p><strong><a href="http://www.sfx-360.com/index.php?idReview=466" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.sfx-360.com/index.php?idReview=466&amp;referer=');">SFX-360</a></strong> &#8211; <em>&#8220;it&#8217;s Galaga on steroids!&#8221;</em></p>
<p><strong><a href="http://gaygamer.net/2010/05/weekly_xbox_indies_51310.html" target="_self" onclick="pageTracker._trackPageview('/outgoing/gaygamer.net/2010/05/weekly_xbox_indies_51310.html?referer=');">Gaygamer</a></strong> &#8211; <em>&#8220;&#8230;the long lost arcade game that would have stolen all of your lunch  money.&#8221;</em></p>
<p><a href="http://www.xnplay.co.uk/2010/05/17/retrofit-overload/" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.xnplay.co.uk/2010/05/17/retrofit-overload/?referer=');"><strong>Xnplay</strong></a> <em>- &#8220;&#8230;it&#8217;s really, really good.&#8221;</em></p>
<p><a href="http://www.caffeinated.org.uk/xbig_blog/review.html?reviewee=retrofit" target="_self" onclick="pageTracker._trackPageview('/outgoing/www.caffeinated.org.uk/xbig_blog/review.html?reviewee=retrofit&amp;referer=');"><strong>XboxIndieGames</strong></a><em> &#8211; &#8220;<span>Retrofit &#8211; Overload is a nigh-on perfect distillation of  the fixed-screen vertical shmup&#8221;</span></em></p>
<p>The game is available on Xbox Live Indie Games and you can download the trial version directly to your Xbox from here <a title="Retrofit Overload on Xbox Marketplace" href="http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d802585504e5/" target="_self" onclick="pageTracker._trackPageview('/outgoing/marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d802585504e5/?referer=');">free of charge</a>. If you like it, the full version costs just 80 Microsoft Points! Enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://wam-games.com/2010/05/retrofitoverload-goes-live-heres-some-press-reactions/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SVG in XNA</title>
		<link>http://wam-games.com/2010/04/svg-in-xna/</link>
		<comments>http://wam-games.com/2010/04/svg-in-xna/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 10:41:31 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Retrofit series]]></category>
		<category><![CDATA[Xbox]]></category>
		<category><![CDATA[content pipeline]]></category>
		<category><![CDATA[overload]]></category>
		<category><![CDATA[retrofit]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[xblig]]></category>

		<guid isPermaLink="false">http://www.wam-games.com/?p=328</guid>
		<description><![CDATA[Here's how we use the open-source SVG Rendering Engine to read SVG files in our content pipeline...]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2010/04/svg-in-xna.png" alt="Authoring enemy flight paths with SVG Beziers." /></p>
<p>Scalable Vector Graphics (<a title="SVG on Wikipedia" href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Scalable_Vector_Graphics?referer=');">SVG</a>) seemed an ideal format for authoring the enemy paths in <em>Retrofit: Overload</em> but it turned out to be much harder to parse than it appeared at first sight. Fortunately the open-source <a title="SVG Rendering Engine home page" href="http://svg.codeplex.com/" onclick="pageTracker._trackPageview('/outgoing/svg.codeplex.com/?referer=');">SVG Rendering Engine</a> works very nicely for reading SVG files in our content pipeline. Here&#8217;s how we use it:</p>
<p><span id="more-328"></span></p>
<p>Although library source code is available, it&#8217;s sufficient to add the <a title="download page" href="http://svg.codeplex.com/releases/view/18884" onclick="pageTracker._trackPageview('/outgoing/svg.codeplex.com/releases/view/18884?referer=');">Svg.dll</a> to the content importer project&#8217;s References. This makes the Svg namespace available. We also need references to System.Drawing and System.Xml.</p>
<p>Here&#8217;s some fairly standard preamble:</p>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Linq;

<span class="kwrd">using</span> Microsoft.Xna.Framework;
<span class="kwrd">using</span> Microsoft.Xna.Framework.Content.Pipeline;

<span class="kwrd">using</span> Svg;
<span class="kwrd">using</span> System.Drawing.Drawing2D;

<span class="rem">// Alias our output type -- A dictionary mapping a path name to a list of </span>
<span class="rem">// control points.</span>
<span class="kwrd">using</span> PathDict = System.Collections.Generic.Dictionary&lt;<span class="kwrd">string</span>,
    System.Collections.Generic.List&lt;Microsoft.Xna.Framework.Vector2&gt;&gt;;

<span class="rem">// The Svg library uses this matrix type not the XNA one:</span>
<span class="kwrd">using</span> Matrix = System.Drawing.Drawing2D.Matrix;

<span class="kwrd">namespace</span> ContentPipeline {

    [ContentImporter(<span class="str">".svg"</span>, DisplayName = <span class="str">"SVG Path Importer"</span>)]
    <span class="kwrd">public</span> <span class="kwrd">class</span> SvgPathImporter : ContentImporter&lt;PathDict&gt; {

        <span class="rem">// (I like to stash the filename at the start of my content
        // importers to make it easier to generate useful error messages in
        // nested calls.)</span>
        <span class="kwrd">string</span> filename;

        <span class="kwrd">public</span> <span class="kwrd">override</span> PathDict Import(
                <span class="kwrd">string</span> filename,
                ContentImporterContext context) {

            <span class="kwrd">this</span>.filename = filename;
</pre>
<p>Now for the interesting stuff. Opening and parsing the SVG file is as simple as a single function call:</p>
<pre class="csharpcode">            SvgDocument doc = SvgDocument.Open(filename);
</pre>
<p>Now we scan for path nodes and pull out the data. The collectPaths() function is defined later on.</p>
<pre class="csharpcode">            <span class="kwrd">var</span> paths = <span class="kwrd">new</span> PathDict();
            collectPaths(<span class="kwrd">ref</span> paths, doc);
            <span class="kwrd">return</span> paths;
        }
</pre>
<p>We&#8217;re only going to consider Bézier curves. Here&#8217;s how we test for them:</p>
<pre class="csharpcode">        <span class="kwrd">static</span> <span class="kwrd">bool</span> isBezier(SvgPath path) {
            <span class="rem">// All but the first point must be type '3'</span>
            <span class="kwrd">const</span> <span class="kwrd">int</span> bezierPointId = 3;
            <span class="kwrd">return</span> path.Path.PathTypes.Skip(1).All(t =&gt; t == bezierPointId);
        }
</pre>
<p>SVG nodes may have multiple associated transforms. (This is one of the things that makes it impractical to throw together a quick parser for this stuff &#8212; There are <a title="SVG spec" href="http://www.w3.org/TR/SVG11/coords.html#TransformAttribute" onclick="pageTracker._trackPageview('/outgoing/www.w3.org/TR/SVG11/coords.html_TransformAttribute?referer=');">many ways</a> of representing transformations in SVG, and unless you know that your editor won&#8217;t use them, even the simplest SVG data is affected by them.) Fortunately SVGRE parses these for us and stores them with each node. The parsed points are stored untransformed though, so we need to accumulate the node&#8217;s transforms and apply them ourselves. Here&#8217;s a function to calculate the overall transform that applies to a node.</p>
<pre class="csharpcode">        <span class="kwrd">static</span> Matrix getTransform(SvgElement node) {
            <span class="kwrd">var</span> m = <span class="kwrd">new</span> Matrix();
            <span class="kwrd">while</span> (node != <span class="kwrd">null</span>) {
                <span class="kwrd">if</span> (node.Transforms != <span class="kwrd">null</span> &amp;&amp; node.Transforms.Count &gt; 0) {
                    <span class="kwrd">var</span> temp = <span class="kwrd">new</span> Matrix();
                    <span class="kwrd">foreach</span> (<span class="kwrd">var</span> trans <span class="kwrd">in</span> node.Transforms) {
                        temp.Multiply(trans.Matrix, MatrixOrder.Prepend);
                    }
                    m.Multiply(temp, MatrixOrder.Append);
                }
                node = node.Parent;
            }
            <span class="kwrd">return</span> m;
        }
</pre>
<p>We traverse the tree of SvgElement nodes recursively. If a node is of type SvgPath, and is a Bézier curve, then we process it and add it to our dictionary.</p>
<pre class="csharpcode">        <span class="kwrd">void</span> collectPaths(<span class="kwrd">ref</span> PathDict paths, SvgElement e) {
            SvgPath path = e <span class="kwrd">as</span> SvgPath;
            <span class="kwrd">if</span> (path != <span class="kwrd">null</span>) {
                <span class="kwrd">if</span> (!isBezier(path)) {
                    <span class="rem">// Complain about any non-Bezier curves</span>
                    <span class="rem">// so we can fix them in the editor.</span>
                    <span class="kwrd">throw</span> <span class="kwrd">new</span> InvalidContentException(
                        String.Format(<span class="str">"Cubic Beziers only: {0}"</span>, path.ID),
                        <span class="kwrd">new</span> ContentIdentity(filename));
                }
                <span class="rem">// Transform points in-place.</span>
                <span class="kwrd">var</span> pts = path.Path.PathPoints;
                getTransform(e).TransformPoints(pts);
                <span class="rem">// Convert to Vector2.</span>
                <span class="kwrd">var</span> vpts = pts.Select(p =&gt; <span class="kwrd">new</span> Vector2(p.X, p.Y)).ToList();
                paths.Add(path.ID, vpts);
            }

            <span class="kwrd">foreach</span> (<span class="kwrd">var</span> child <span class="kwrd">in</span> e.Children) {
                 collectPaths(<span class="kwrd">ref</span> paths, child);
            }
        }

    }
}
</pre>
<p>That&#8217;s it. To load the path data in-game we use:</p>
<pre class="csharpcode"><span class="kwrd">var</span> paths = Content.Load&lt;Dictionary&lt;<span class="kwrd">string</span>, List&lt;Vector2&gt;&gt;&gt;(<span class="str">"test"</span>);
</pre>
<p>Here&#8217;s <a title="SvgImporter.cs" href="/wp-content/uploads/2010/04/SvgImporter.cs">the code in one handy chunk</a>.</p>
<p>The same approach can be used to extract other SVG data. In fact in the Retrofit:Overload importer we look for a screen rectangle too and offset the paths relative to that.</p>
<p>The main disadvantage of SVG Rendering Engine is the lack of documentation, however it is possible to work out quite a lot by loading a simple file and browsing the object structure in the debugger.</p>
<p>You can find the game on the Xbox Dashboard (Game Marketplace -&gt; Indie Games) or <a title="Retrofit: Overload on Xbox.com" href="http://marketplace.xbox.com/games/media/66acd000-77fe-1000-9115-d802585504e5/" onclick="pageTracker._trackPageview('/outgoing/marketplace.xbox.com/games/media/66acd000-77fe-1000-9115-d802585504e5/?referer=');">schedule a download via the web</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wam-games.com/2010/04/svg-in-xna/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>retrofit:overload</title>
		<link>http://wam-games.com/2010/04/retrofitoverload/</link>
		<comments>http://wam-games.com/2010/04/retrofitoverload/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 21:35:39 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Retrofit series]]></category>
		<category><![CDATA[Xbox]]></category>
		<category><![CDATA[indie]]></category>
		<category><![CDATA[overload]]></category>
		<category><![CDATA[retrofit]]></category>
		<category><![CDATA[xblig]]></category>

		<guid isPermaLink="false">http://www.wam-games.com/?p=407</guid>
		<description><![CDATA[Retrofit:Overload game play video, available on Xbox Live Indie Games.]]></description>
			<content:encoded><![CDATA[<p>Now with moving parts ! </p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/yz55gUvBSVg&#038;hl=en_US&#038;fs=1&#038;hd=1"></param><param name="allowFullScreen" value="false"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/yz55gUvBSVg&#038;hl=en_US&#038;fs=1&#038;hd=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://wam-games.com/2010/04/retrofitoverload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zone out with retrofit:overload</title>
		<link>http://wam-games.com/2010/04/zone-out-with-retrofitoverload/</link>
		<comments>http://wam-games.com/2010/04/zone-out-with-retrofitoverload/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 12:16:03 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Retrofit series]]></category>
		<category><![CDATA[Xbox]]></category>
		<category><![CDATA[overload]]></category>
		<category><![CDATA[retrofit]]></category>
		<category><![CDATA[xblig]]></category>

		<guid isPermaLink="false">http://www.wam-games.com/?p=322</guid>
		<description><![CDATA[An arcade mash-up of some of our favourite old school cabinet games with some added funk ;-)
The concept is this: Take some heritage arcade action, mix up the bits that you like, ditch the bits don't like, speed it up, add more weapons and shield deflectors.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wam-games.com/wp-content/uploads/2010/04/Overload_01.png" onclick="pageTracker._trackPageview('/outgoing/www.wam-games.com/wp-content/uploads/2010/04/Overload_01.png?referer=');"><img class="alignnone size-full wp-image-341" title="Overload_01" src="http://www.wam-games.com/wp-content/uploads/2010/04/Overload_01.png" alt="" width="550" height="310" /></a></p>
<p><a href="http://www.wam-games.com/wp-content/uploads/2010/04/Overload_02.png" onclick="pageTracker._trackPageview('/outgoing/www.wam-games.com/wp-content/uploads/2010/04/Overload_02.png?referer=');"><img class="alignnone size-full wp-image-342" title="Overload_02" src="http://www.wam-games.com/wp-content/uploads/2010/04/Overload_02.png" alt="" width="550" height="310" /></a></p>
<p><strong><span style="color: #ff0000;">retrofit:</span>overload</strong> is coming soon to Xbox Live Indie games. (Well, soon-ish, when it&#8217;s ready etc.)</p>
<p>An arcade mash-up of some of our favourite old school cabinet games with some added funk <img src='http://wam-games.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
The concept is this: Take some heritage arcade action, mix up the bits that you like, ditch the bits don&#8217;t like, speed it up, add more weapons and shield deflectors. The goal was to draw from retro heritage but not copy it, to try to recapture the essence of what those games were all about and add some special sauce to get you in the zone.</p>
<p>Why? Because it&#8217;s full of win and you can zone out to it in a big way.</p>
<p>When? All going well, it should be out in April sometime on Xbox Live marketplace.</p>
<p>Video soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://wam-games.com/2010/04/zone-out-with-retrofitoverload/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

