<?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>Final Form Games</title>
	<atom:link href="http://www.finalformgames.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.finalformgames.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 08 Jul 2010 16:40:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>We Got Some Ink II: The Quickening</title>
		<link>http://www.finalformgames.com/uncategorized/we-got-some-ink-ii-the-quickening/</link>
		<comments>http://www.finalformgames.com/uncategorized/we-got-some-ink-ii-the-quickening/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 16:40:14 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.finalformgames.com/?p=608</guid>
		<description><![CDATA[This post is going to be about our game, but stay with me while I take you on a little bit of a side-quest.
Some of you may not know this, but last Wednesday was Hoagie Day here in Philly. Wawa* puts it on every decade or so, apparently. The formula for this event is sort [...]]]></description>
			<content:encoded><![CDATA[<p>This post is going to be about our game, but stay with me while I take you on a little bit of a side-quest.</p>
<p>Some of you may not know this, but last Wednesday was <a href="http://www.uwishunu.com/2010/06/wawa-hoagie-day-returns-will-feature-a-mile-long-hoagie-stretching-from-the-philadelphia-museum-of-art/" target="_blank">Hoagie Day</a> here in Philly. Wawa* puts it on every decade or so, apparently. The formula for this event is sort of breathtaking in its simplicity:</p>
<p style="text-align: center;"><strong>STEP 1:</strong><br />
<em>Make the longest Italian hoagie in the history of the world (1.25 miles this year)</em></p>
<p style="text-align: center;"><strong>STEP 2:</strong><br />
<em>Give it to the people of Philadelphia</em></p>
<p style="text-align: center;"><strong>STEP 3:</strong><br />
<em>Watch Rocky</em></p>
<div id="attachment_609" class="wp-caption aligncenter" style="width: 512px"><img class="size-full wp-image-609  " title="0630101947" src="http://www.finalformgames.com/wp-content/uploads/2010/07/0630101947.jpg" alt="The stage is set." width="502" height="377" /><p class="wp-caption-text">The stage is set.  Rocky looks on approvingly.</p></div>
<p>So we queued up after work with the rest of the hungry masses, waited for 30 minutes or so, and each got to enjoy several  mouthfuls of sandwich history. Because Wawa is always a class act, they sweetened the pot by giving away enormous quantities of Tastykakes, potato chips, ice cream bars, fruit juices, waters, and iced tea. By the end of the event, Wawa employees were simply roaming around the fields where people were sitting, throwing ice cream bars in random directions.</p>
<p>Then we watched Rocky, using the steps of the Art Museum as stadium seating. Those of you who have seen Rocky will surely appreciate the cultural heft of the tableau I&#8217;m describing. Those of you who haven&#8217;t: <em>shame on you.</em></p>
<p>I mention all this because I want to be clear about what we <em>thought</em> the highlight of last week was going to be:</p>
<div id="attachment_610" class="wp-caption aligncenter" style="width: 512px"><img class="size-full wp-image-610  " title="0630101959" src="http://www.finalformgames.com/wp-content/uploads/2010/07/0630101959.jpg" alt="Six inches of Hoagie history." width="502" height="377" /><p class="wp-caption-text">Six inches of Hoagie history.</p></div>
<p>Right? Then we made our birthday post announcing Jamestown, and <em>this</em> happened:</p>
<ul>
<li><a href="http://shmups.system11.org/viewtopic.php?f=1&amp;t=32074 ">shmups.system11.org forums: &#8220;New shmup: Jamestown&#8221;</a></li>
<li><a href="http://kotaku.com/5579678/when-did-mars-declare-independence-from-britain ">Kotaku.com: &#8220;When Mars Declared Independence From Britain&#8221;</a></li>
<li><a href="http://www.gamesetwatch.com/2010/07/jamestown_old_school_shmup_wit.php? ">GameSetWatch.com: &#8220;Jamestown: Old School Shmup With 4-Player Co-Op, Fantastic Pixel Art&#8221;</a></li>
<li><a href="http://www.destructoid.com/blogs/BulletMagnet/the-obscurer-tribune-53-178113.phtml ">BulletMagnet&#8217;s Destructoid.com blog &#8220;The Obscurer Tribune&#8221;</a></li>
<li><a href="http://www.indiegames.com/blog/2010/07/indie_game_links_nothing_out_o.html ">IndieGames.com&#8217;s &#8220;Indie Game Links&#8221;</a></li>
<li><a href="http://technicallyphilly.com/2010/07/07/startup-roundup-monetate-real-time-marketing-platform-helps-power-modcloth ">TechnicallyPhilly&#8217;s &#8220;Startup Roundup&#8221;</a></li>
<li><a href="http://www.quartertothree.com/game-talk/showthread.php?p=2280354 ">QuarterToThree forums: &#8220;Jamestown: the hardcore shmup set in 17th-century British colonial Mars&#8221;</a></li>
</ul>
<p>Apparently, the internet thinks Jamestown deserves a wider audience than the few (but courageous!) stalwart fans who read this blog.</p>
<p>We are thrilled and humbled that so many folks are excited about our little project! Reading the links above has infused our workdays with a fresh jolt of optimism and determination, and we are banging out code and pixels at full speed. So to the friends, bloggers, readers, commenters, tweeters, and re-tweeters who were part of getting the word out about Jamestown this weekend: thank you!</p>
<p>But don&#8217;t take it too hard, HoagieFest. There&#8217;s simply no hoagie, no matter how record-breaking and delicious, that could have made us feel this positive about our future. Maybe next year.</p>
<p><small>* Wawa is an excellent regional convenience store chain that answers the question &#8220;what if 7-11 didn&#8217;t wallow in being a trashy downscale hell-mart?&#8221; That answer turns out to be market-dominant. </small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/we-got-some-ink-ii-the-quickening/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Final Form, Year One: WHERE WE&#8217;RE GOING</title>
		<link>http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/</link>
		<comments>http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 17:59:21 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[4P]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[co-op]]></category>
		<category><![CDATA[Jamestown]]></category>
		<category><![CDATA[mission]]></category>
		<category><![CDATA[nowhearthis]]></category>
		<category><![CDATA[plans]]></category>
		<category><![CDATA[screenshots]]></category>
		<category><![CDATA[shmup]]></category>
		<category><![CDATA[steampunk]]></category>

		<guid isPermaLink="false">http://www.finalformgames.com/?p=549</guid>
		<description><![CDATA[It took 365 days of hard livin&#8217;, but we&#8217;re finally here: Final Form Games is one year old today! You are our loyal, never-say-die readers with whom we will always shoot straight, and we hope you are excited to celebrate with us!  Over the past few days, we&#8217;re brought you up to speed about [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">It took 365 days of hard livin&#8217;, but we&#8217;re finally here:<strong> Final Form Games is one year old today!</strong> You are our loyal, never-say-die readers with whom we will always shoot straight, and we hope you are excited to celebrate with us!  Over the past few days, we&#8217;re brought you up to speed about <a href="http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-weve-been/" target="_blank">where we&#8217;ve been</a> and <a href="http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-were-at/" target="_blank">where we&#8217;re at</a>, but said very little about&#8230;</p>
<p style="text-align: left;">
<p style="text-align: center;"><strong>WHERE WE&#8217;RE GOING</strong></p>
<p style="text-align: center;"><span style="font-weight: bold; font-style: italic;">or</span></p>
<p style="text-align: center;"><span style="font-weight: bold;">Seriously: What In Tarnation Are You Guys Working On?</span></p>
<p style="text-align: center;">
<p>What a good question! We are working on a rad videogame! It represents a lot of what we love about games, its working title is <span style="font-weight: bold;"><em>Jamestown</em>,</span> and we think it&#8217;s going to be a blast.</p>
<p><img class="aligncenter size-full wp-image-577" title="Logo" src="http://www.finalformgames.com/images/temp/Logo.png" alt="Logo" width="472" height="194" /></p>
<p>First things first: <a href="http://www.finalformgames.com/uncategorized/its-a-god-awful-small-affair/" target="_blank">The screenshot we posted back in October</a> wasn&#8217;t an image of functional gameplay. We know, you&#8217;re shocked. HOWEVER! That image <span style="font-style: italic;">does </span>represent the overall aesthetic and milieu that we are striving to deliver to YOU, the customer! To vouch for the truth of our words, here are some totally real, in-game (and very Work-In-Progress!) screenshots of what the game looks like <span style="font-style: italic;">on this very day:</span></p>

<a href='http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/attachment/shmupproto-2010-06-30-18-17-00-50/' title='ShmupProto 2010-06-30 18-17-00-50'><img width="150" height="150" src="http://www.finalformgames.com/wp-content/uploads/2010/07/ShmupProto-2010-06-30-18-17-00-50-150x150.png" class="attachment-thumbnail" alt="" title="ShmupProto 2010-06-30 18-17-00-50" /></a>
<a href='http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/attachment/shmupproto-2010-06-30-18-18-30-51/' title='ShmupProto 2010-06-30 18-18-30-51'><img width="150" height="150" src="http://www.finalformgames.com/wp-content/uploads/2010/07/ShmupProto-2010-06-30-18-18-30-51-150x150.png" class="attachment-thumbnail" alt="" title="ShmupProto 2010-06-30 18-18-30-51" /></a>
<a href='http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/attachment/shmupproto-2010-06-30-17-29-20-40/' title='ShmupProto 2010-06-30 17-29-20-40'><img width="150" height="150" src="http://www.finalformgames.com/wp-content/uploads/2010/07/ShmupProto-2010-06-30-17-29-20-40-150x150.png" class="attachment-thumbnail" alt="" title="ShmupProto 2010-06-30 17-29-20-40" /></a>
<a href='http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/attachment/shmupproto-2010-06-30-17-33-25-97/' title='ShmupProto 2010-06-30 17-33-25-97'><img width="150" height="150" src="http://www.finalformgames.com/wp-content/uploads/2010/07/ShmupProto-2010-06-30-17-33-25-97-150x150.png" class="attachment-thumbnail" alt="" title="ShmupProto 2010-06-30 17-33-25-97" /></a>
<a href='http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/attachment/shmupproto-2010-06-30-18-20-46-54/' title='ShmupProto 2010-06-30 18-20-46-54'><img width="150" height="150" src="http://www.finalformgames.com/wp-content/uploads/2010/07/ShmupProto-2010-06-30-18-20-46-54-150x150.png" class="attachment-thumbnail" alt="" title="ShmupProto 2010-06-30 18-20-46-54" /></a>
<a href='http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/attachment/shmupproto-2010-06-30-18-17-23-51/' title='ShmupProto 2010-06-30 18-17-23-51'><img width="150" height="150" src="http://www.finalformgames.com/wp-content/uploads/2010/07/ShmupProto-2010-06-30-18-17-23-51-150x150.png" class="attachment-thumbnail" alt="" title="ShmupProto 2010-06-30 18-17-23-51" /></a>

<p>And HERE are some <span style="font-style: italic;">scintillating details:</span></p>
<p>- Jamestown is an old-school, handcrafted shoot-em-up (or &#8220;<a href="http://en.wikipedia.org/wiki/Shoot_'em_up" target="_blank">shmup</a>&#8220;) with a new-school twist:<span style="font-weight: bold;"> 4-player co-operative play!</span></p>
<p><span style="font-weight: bold;"> </span></p>
<div id="attachment_574" class="wp-caption aligncenter" style="width: 466px"><img class="size-full wp-image-574" title="4-player" src="http://www.finalformgames.com/images/temp/4-player.png" alt="You will roll deep." width="456" height="216" /><p class="wp-caption-text">You will roll deep.</p></div>
<p><span style="font-weight: bold;"> </span></p>
<p>- As many have guessed (amazingly), it is set in <span style="font-weight: bold;">17th-century British colonial Mars.</span> It will feature: Famous alt-historical figures! Majestic alien landscapes! Steampunk space tech! Hard-bitten settlers taking their shot at ekeing out a better life in the New World! <span style="font-weight: bold;">Redcoats and Martians settling their differences with spear and space-musket!</span></p>
<p><span style="font-weight: bold;"><img class="aligncenter size-full wp-image-598" title="Redcoat" src="http://www.finalformgames.com/images/temp/Redcoat.gif" alt="Redcoat" width="40" height="72" /><br />
</span></p>
<p>- With the gameplay, we&#8217;re striving to press all the important hardcore gamer pleasure-buttons, while still leaving room to innovate on what co-op can really mean in the context of a classic shooter.  <span style="font-weight: bold;">We just love co-op games so much!</span></p>
<div id="attachment_575" class="wp-caption alignleft" style="width: 185px"><img class="size-full wp-image-575" title="co-op" src="http://www.finalformgames.com/images/temp/co-op.png" alt="In 2011, one of these ships could be you." width="175" height="493" /><p class="wp-caption-text">In 2011, one of these ships could be you.</p></div>
<p>- We hope to tell a story within this world that is legitimately engaging and worth reading/watching/playing. <span style="font-weight: bold;">A story that one might use the word &#8220;swashbuckling&#8221; to describe!</span> Or, &#8220;coherent!&#8221; Or even, &#8220;explodathon!&#8221;</p>
<p>- In terms of timeline, we plan to submit to IGF this year, and <strong>hope to release on PC sometime in </strong><span style="font-weight: bold;"><strong>2011</strong></span>, with other platforms to follow.  The comments section awaits your snarky comments about release dates!</p>
<p><img class="aligncenter size-full wp-image-601" title="RedcoatFw" src="http://www.finalformgames.com/images/temp/RedcoatFw.gif" alt="RedcoatFw" width="40" height="72" /></p>
<p>This is our first project, and we undoubtedly have plenty of rough waters to contend with between now and ship day, but we are optimistic about the journey ahead.  As you may have read in our previous two posts, Year One was largely about investing a huge percentage of our energy into developing the game mechanics, technology, tools, and skillsets that we think are necessary to make our game great.  <span style="font-weight: bold;">Year Two is going to be about using them.</span></p>
<p>Thanks for being here with us on our first birthday.  More to come.<span> </span><span> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/final-form-year-one-where-were-going/feed/</wfw:commentRss>
		<slash:comments>82</slash:comments>
		</item>
		<item>
		<title>Final Form Games, Year One: WHERE WE&#8217;RE AT</title>
		<link>http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-were-at/</link>
		<comments>http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-were-at/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 15:49:48 +0000</pubDate>
		<dc:creator>Roboticus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bardcore]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[mission]]></category>
		<category><![CDATA[nowhearthis]]></category>
		<category><![CDATA[philly]]></category>
		<category><![CDATA[plans]]></category>
		<category><![CDATA[starting up]]></category>

		<guid isPermaLink="false">http://www.finalformgames.com/?p=498</guid>
		<description><![CDATA[On July 1st, a mere earth-rotation from now, Final Form Games will celebrate its very first birthday. To commemorate this milestone, we decided to break our customary silence to talk about where we’ve been, where we’re at, and where we’re going.
WHERE WE ARE AT
 or
 THREE FACTS WE HANG OUR HATS UPON:
ONE: For prototyping, our [...]]]></description>
			<content:encoded><![CDATA[<p>On July 1st, a mere earth-rotation from now, Final Form Games will celebrate its very first birthday. To commemorate this milestone, we decided to break our customary silence to talk about <a href="http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-weve-been/" target="_self">where we’ve been</a>, where we’re at, and where we’re going.</p>
<div id="attachment_499" class="wp-caption aligncenter" style="width: 499px"><img class="size-full wp-image-499 " title="finalform_officepanorama" src="http://www.finalformgames.com/wp-content/uploads/2010/06/finalform_officepanorama.jpg" alt="finalform_officepanorama" width="489" height="187" /><p class="wp-caption-text">Day one.</p></div>
<p style="text-align: center;"><strong>WHERE WE ARE AT</strong><br />
<em> or</em><br />
<strong> THREE FACTS WE HANG OUR HATS UPON:</strong></p>
<div id="attachment_504" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-504" title="0511101929" src="http://www.finalformgames.com/wp-content/uploads/2010/06/0511101929-300x225.jpg" alt="0511101929" width="300" height="225" /><p class="wp-caption-text">Tim, hacking the encryptions.  And yes, he is using three mice at the same time in this photo.</p></div>
<p><strong>ONE</strong>: For prototyping, our goal/dream was to write games in a way that was as rapid, straightforward, and fun as tools like Flash.  Tim told us he had a vision, and that though the path would be a risky one, he knew it would take us where we wanted to go. When Tim finally emerged from his 5-month journey into code, drenched in gore and using a walking-stick that appeared to have been hewn from the claw of some long-forgotten subterranean insect, we looked upon the spoils and knew that we had found what we were looking for.</p>
<div id="attachment_506" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-506 " title="0306101557" src="http://www.finalformgames.com/wp-content/uploads/2010/06/0306101557-300x225.jpg" alt="0306101557" width="300" height="225" /><p class="wp-caption-text">Hal, playing our game in the Traditional Manner.</p></div>
<p><strong>TWO:</strong> We realized that we needed two programmers, and had but one. This led to a conversation that basically went like this:</p>
<p>Tim: &#8220;Hal, we&#8217;re going to need you to become a programmer now.&#8221;</p>
<p>Hal: &#8220;Okay.&#8221;</p>
<p>And so he did.  It&#8217;s easy to say, but much harder to imagine actually doing: Hal bootstrapped himself the bulk of the distance between occasional-web-tinkerer and full-blown-gameplay-programmer in less than a year.  Working closely with Tim brought him the rest of the way there, and now almost all of our actual gamecode is the result of Hal&#8217;s skilled handiwork.</p>
<p><strong>THREE:</strong> People routinely compare our art to the art in Metal Slug.  The rest of Mike&#8217;s life is more or less guaranteed to be downhill.</p>
<p style="text-align: center;"><strong>ALSO!</strong><br />
<em> or</em><br />
<strong> OTHER TRUE FACTS THAT WARM OUR HEARTS WHEN ALL IS COLD AND DARK</strong>:</p>
<p>- We are active members of the small-but-scrappy Philadelphia game developer community, and are thrilled to be a part of its establishment and continued growth.</p>
<div id="attachment_516" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-516 " title="0601101956" src="http://www.finalformgames.com/wp-content/uploads/2010/06/0601101956-300x225.jpg" alt="Our playtests... are getting a little crazy." width="300" height="225" /><p class="wp-caption-text">Our playtests... are getting a little crazy.</p></div>
<p>- We&#8217;ve given a few talks and round-tables about what we do at some local colleges and universities, along with our BFFs over at <a href="http://cipherprime.com/" target="_blank">Cipher Prime</a> and <a href="http://www.meritgames.com/" target="_blank">Merit</a>.  We&#8217;ve enjoyed dipping our toes into these kinds of education initiatives, and hope to wade in much deeper during the coming year.</p>
<div id="attachment_519" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-519 " title="0305101952" src="http://www.finalformgames.com/wp-content/uploads/2010/06/0305101952-300x225.jpg" alt="Crunch dinner, courtesy Hal's then-fiancée-now-wife Jenn." width="300" height="225" /><p class="wp-caption-text">Crunch-time dinner, courtesy Hal&#39;s then-fiancée-now-wife Jenn. It was delicious. And TIMELY!</p></div>
<p>- Our friends and family have been hugely supportive of our endeavor, contributing everything from kind words to sage advice to crunch-time donuts.  Two particular people (one of whom was Mike/Tim&#8217;s mother) went so far as to teach themselves how to pixel, and contributed much-needed art assets during our darkest hour.</p>
<p>- Finally: <strong>we are doing what we came here to do.</strong> We are spending our days making games of our own devising, learning all we can, and enjoying it ever so much.  Year One was a great, tumultuous adventure.  Join us on our birthday tomorrow, and we&#8217;ll tell you about why we&#8217;re so excited about Year Two.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-were-at/feed/</wfw:commentRss>
		<slash:comments>611</slash:comments>
		</item>
		<item>
		<title>Final Form Games, Year One: WHERE WE&#8217;VE BEEN</title>
		<link>http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-weve-been/</link>
		<comments>http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-weve-been/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 21:19:56 +0000</pubDate>
		<dc:creator>Roboticus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[nowhearthis]]></category>
		<category><![CDATA[plans]]></category>
		<category><![CDATA[Prototyping]]></category>
		<category><![CDATA[starting up]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.finalformgames.com/?p=481</guid>
		<description><![CDATA[On July 1st, a scant two days from now, Final Form Games will be one year old! To celebrate, we decided to bring our (fiercely!) loyal readership up to speed on where we&#8217;ve been, where we&#8217;re at, and where we&#8217;re going.

But what about right now, you ask?  What is Final Form working on right [...]]]></description>
			<content:encoded><![CDATA[<p><strong>On July 1st,</strong> a scant two days from now, <strong>Final Form Games will be one year old!</strong> To celebrate, we decided to bring our (fiercely!) loyal readership up to speed on where we&#8217;ve been, where we&#8217;re at, and where we&#8217;re going.</p>
<p><iframe src='http://timeglider.com/app/viewer.php?uid=line_f21f009e77e4c4df1b619c614d247ed6' width='100%' height='550'></iframe></p>
<p>But what about right now, you ask?  What is Final Form working on <em>right this second?</em> When will I finally see evidence that anything from that timeline up there is actually <em>true?</em></p>
<p>Well&#8230; it <em>is </em>our birthday coming up&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/final-form-games-year-one-where-weve-been/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>We Got Some Ink!</title>
		<link>http://www.finalformgames.com/blog/we-got-some-ink/</link>
		<comments>http://www.finalformgames.com/blog/we-got-some-ink/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 19:15:17 +0000</pubDate>
		<dc:creator>Halsted</dc:creator>
				<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://finalformgames.com/?p=467</guid>
		<description><![CDATA[Haverford College put up a lovely article on us over on their website. You should go read it, if only for the really great photo* of us doing our best  mac-users-group &#8216;zine cover pose.
*courtesy of the talented Aaron Stock
]]></description>
			<content:encoded><![CDATA[<p>Haverford College put up a lovely article on us over on their website. You should <a href="http://www.haverford.edu/news/stories/31661/51">go read it</a>, if only for the really great photo* of us doing our best  mac-users-group &#8216;zine cover pose.</p>
<p><small>*courtesy of the talented Aaron Stock</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/blog/we-got-some-ink/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>It&#8217;s A God-Awful Small Affair</title>
		<link>http://www.finalformgames.com/uncategorized/its-a-god-awful-small-affair/</link>
		<comments>http://www.finalformgames.com/uncategorized/its-a-god-awful-small-affair/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 19:58:54 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://finalformgames.com/?p=461</guid>
		<description><![CDATA[A peek at what we&#8217;ve been up to:

It&#8217;s the freakiest show.
]]></description>
			<content:encoded><![CDATA[<p>A peek at what we&#8217;ve been up to:</p>
<p><em><img class="aligncenter size-full wp-image-464" title="jamestown_01X2" src="http://finalformgames.com/wp-content/uploads/2009/10/jamestown_01X2.png" alt="jamestown_01X2" width="480" height="640" /></em></p>
<p>It&#8217;s the freakiest show.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/its-a-god-awful-small-affair/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Something Very Special</title>
		<link>http://www.finalformgames.com/uncategorized/something-very-special/</link>
		<comments>http://www.finalformgames.com/uncategorized/something-very-special/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 15:34:33 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[metaprogramming]]></category>
		<category><![CDATA[partial template specialization]]></category>

		<guid isPermaLink="false">http://finalformgames.com/?p=409</guid>
		<description><![CDATA[The following is a fairly technical post about something that came up during our programming efforts. It assumes a certain amount of experience with the intricacies of C++, so if that&#8217;s not your cup of tea, don&#8217;t pay this post any mind.
I spent some time yesterday integrating my C++ math library with Lua.  I [...]]]></description>
			<content:encoded><![CDATA[<p><em>The following is a fairly technical post about something that came up during our programming efforts. It assumes a certain amount of experience with the intricacies of C++, so if that&#8217;s not your cup of tea, don&#8217;t pay this post any mind.</em></p>
<p>I spent some time yesterday integrating my C++ math library with Lua.  I have a pretty robust Lua integration library at this point, but it heavily leverages <a href="http://msdn.microsoft.com/en-us/library/3967w96f%28VS.80%29.aspx">template partial specialization</a> to achieve the ease-of-extensibility that I want.  While I have become rather adept in the past few months at dissecting and making use of template error messages, I ran into a confounding error that I simply had to share*.</p>
<p>Here is a C++ program that represents the kind of task I was attempting to implement.  The original code was implementing C++-side templated generation of Lua userdata metatables for my templated mathematical primitive classes.  The following code snippet, while contrived, should serve as a more digestible demonstrative example.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// A few generic templates</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> Foo
<span style="color: #008000;">&#123;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span>
<span style="color: #0000ff;">struct</span> Foo<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span>
<span style="color: #008000;">&#123;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> Printer
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;You have &quot;</span> <span style="color: #000080;">&lt;&lt;</span> N <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; &quot;</span> <span style="color: #000080;">&lt;&lt;</span> Texter<span style="color: #000080;">&lt;</span>Foo<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetText</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> Texter
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> GetText<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">return</span> <span style="color: #FF0000;">&quot;apples&quot;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// Let's call this next specialization &quot;A&quot;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span>
<span style="color: #0000ff;">struct</span> Printer<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;You have just one &quot;</span> <span style="color: #000080;">&lt;&lt;</span> Texter<span style="color: #000080;">&lt;</span>Foo<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetText</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// And let's call this next specialization &quot;B&quot;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> Texter<span style="color: #000080;">&lt;</span>Foo<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Test<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> Printer<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> GetText<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">return</span> <span style="color: #FF0000;">&quot;apple&quot;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">**</span> argv<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  Texter<span style="color: #000080;">&lt;</span>Foo<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Test</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>So, what would you expect to happen when you run this program?  I would have expected it to print out, &#8220;You have just one apple&#8221; and terminate.  What I would NOT have expected is for it to spit out this error:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">1&gt;------ Build started: Project: TrickyTemplates, Configuration: Debug Win32 ------
1&gt;Compiling...
1&gt;main.cpp
1&gt;c:\finalformgames\trickytemplates\trickytemplates\main.cpp(40) : error C2039: 'Test' : is not a member of 'Texter&lt;T&gt;'
1&gt;        with
1&gt;        [
1&gt;            T=Foo&lt;1&gt;
1&gt;        ]
1&gt;c:\finalformgames\trickytemplates\trickytemplates\main.cpp(40) : error C3861: 'Test': identifier not found
1&gt;Build log was saved at &quot;file://c:\FinalFormGames\TrickyTemplates\TrickyTemplates\Debug\BuildLog.htm&quot;
1&gt;TrickyTemplates - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========</pre></td></tr></table></div>

<p>It was telling me that <code>Texter&lt;Foo&lt;1&gt;&gt;</code> does not have a method named <code>Test</code> in it.  But there <code>Test</code> is, right above the call to it!  All my efforts to statically analyze the program for the problem were fruitless (in part because the actual code was vastly more complex than this example).  So, I did what anyone would do in my shoes, and started poking at it with a stick.</p>
<p>One surprising result: if I changed <code>Printer</code> to take in an additional template parameter, <code>typename T</code>, the error went away.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">...
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T, <span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> Printer
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;You have &quot;</span> <span style="color: #000080;">&lt;&lt;</span> N <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; &quot;</span> <span style="color: #000080;">&lt;&lt;</span> Texter<span style="color: #000080;">&lt;</span>Foo<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetText</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
...
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> Printer<span style="color: #000080;">&lt;</span>T, <span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;You have just one &quot;</span> <span style="color: #000080;">&lt;&lt;</span> Texter<span style="color: #000080;">&lt;</span>Foo<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetText</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
...</pre></td></tr></table></div>

<p>Well, that&#8217;s pretty strange.  Needless to say, this did little to allay my worry.</p>
<p>So, I rolled it back and broke out an old tried-and-true technique I picked up while working with the Metrowerks Codewarrior debugger: try moving blocks of code around.  Sometimes this is illuminating, and, in fact, I found that by swapping the order of specializations &#8220;A&#8221; and &#8220;B&#8221; (see above code snippets), the error went away.  Again, not too reassuring, but it gave me a lead by suggesting that something about this bug must relate to the order in which things are defined.</p>
<p>I searched online for all manner of permutations of keywords relating to the situation, and finally found <a href="http://www.digitalmars.com/d/archives/digitalmars/D/announce/spirit_like_template_parser_generator_in_100_Lines_of_code_almost_6374.html">this post</a> on a site about the programming language D (which has many similarities to C++):</p>
<blockquote><p><i>&#8220;If two template specialization refer to each other, there is the possibility that one of them will try to instance the other before the specialization for the other is created. The result would be either a compile error or an attempt to instance the wrong template. On the other hand, if I&#8217;m not missing something, a compiler would also be correct to lazy evaluate specializations, in which case this problem may well not occur. Some way to ensure the desired behavior here would be needed.&#8221;</i></p></blockquote>
<p>So, my current understanding as to what was going on is as follows:  The <code>Printer&lt;1&gt;</code> specialization is instantiating the <code>Texter&lt;Foo&lt;1&gt;&gt;</code> specialization before the <code>Texter&lt;Foo&lt;N&gt;&gt;</code> specialization is defined.  This is because the correct order cannot be determined due to two specializations cyclically referring to each other.  As a result, it is masking out the later definition of the <code>Texter&lt;Foo&lt;N&gt;&gt;</code> specialization.  When we call <code>Texter&lt;Foo&lt;1&gt;&gt;::Test()</code> in <code>main()</code>, it uses the incorrect specialization, which does not define the a member named <code>Test</code>.  This may be inaccurate, but it seems to line up best with the symptoms from what I have figured out.  That being said, if you are familiar with this bug, or have a contrasting theory, please share with us below in the comments.</p>
<p>What&#8217;s especially surprising about this error is that there is supposed to be an <a href="http://msdn.microsoft.com/en-us/library/0w9xyawz%28VS.80%29.aspx">error message you get when it happens</a>! It&#8217;s not hard to invoke it, either:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// This compiles just fine:</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> X
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> A<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> Y<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">B</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> C<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> Y
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> B<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> X<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">C</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">**</span> argv<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  X<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">A</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// This, however, throws a C2908!</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> X <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> Y <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span>
<span style="color: #0000ff;">struct</span> X<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> A<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> Y<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">B</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> C<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span>
<span style="color: #0000ff;">struct</span> Y<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> B<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> X<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">C</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">**</span> argv<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  X<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">A</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>I do not mean to fault Microsoft for their failure to throw this error at me.  It&#8217;s one hell of an edge case, and if you&#8217;re in this deep, you really ought not to rely on your compiler to bail you out when you do Bad Things.  That being said, it&#8217;s nice to be able to trust that your compiler is Always Right, and experiences like this make that trust feel tenuous and uncertain.</p>
<p>In conclusion, do not let your template specializations refer to each other cyclically, or you may find yourself a sad, sad panda.</p>
<p><small>*Please note that this post refers specifically to behavior I experienced using Visual Studio 2008 9.0.21022.8 RTM on a machine running Windows XP.  If you are on a different platform, you may or may not experience the same behavior.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/something-very-special/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Touhouhou and a Bottle of Rum</title>
		<link>http://www.finalformgames.com/uncategorized/touhouhou-and-a-bottle-of-rum/</link>
		<comments>http://www.finalformgames.com/uncategorized/touhouhou-and-a-bottle-of-rum/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 19:06:33 +0000</pubDate>
		<dc:creator>Halsted</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[lessons]]></category>
		<category><![CDATA[shmup]]></category>

		<guid isPermaLink="false">http://finalformgames.com/?p=392</guid>
		<description><![CDATA[Chris over at Paper Dino recently put up a  post on the lessons he learned from playing the Touhou shmups, e.g. Perfect Cherry Blossom and Imperishable Night. For those who don&#8217;t know, this is a series of shmups (shoot &#8216;em ups) made by one guy from Japan who calls himself ZUN. He&#8217;s iterated a lot [...]]]></description>
			<content:encoded><![CDATA[<p>Chris over at <a href="http://paperdino.com/">Paper Dino</a> recently put up a  <a title="Imperishable Lessons" href="http://paperdino.com/2009/09/imperishable-lessons-what-i-learned-from-touhou/#more-157" target="_blank">post</a> on the lessons he learned from playing the <a title="Wikipedia: Touhou" href="http://en.wikipedia.org/wiki/Touhou_Project">Touhou shmups</a>, e.g. <a title="Wikipedia: Perfect Cherry Blossom" href="http://en.wikipedia.org/wiki/Perfect_Cherry_Blossom">Perfect Cherry Blossom</a> and <a title="Wikipedia: Imperishable Night" href="http://en.wikipedia.org/wiki/Imperishable_Night">Imperishable Night</a>. For those who don&#8217;t know, this is a series of shmups (shoot &#8216;em ups) made by one guy from Japan who calls himself ZUN. He&#8217;s iterated a lot on the basic vertical scrolling shooter formula and his shoulders are great ones to stand on when you&#8217;re <a title="Fallguy Prototype post 1" href="http://finalformgames.com/uncategorized/fallguy-prototype-the-first-2-5-days/" target="_blank">making a shmup</a> yourself.</p>
<p>Chris did an excellent job of highlighting several key lessons.  Here are some of the things I took away from my own explorations of the series.</p>
<div class="wp-caption aligncenter" style="width: 310px"><img title="Perfect Cherry Blossom" src="http://upload.wikimedia.org/wikipedia/en/thumb/2/24/PCByukari140.jpg/300px-PCByukari140.jpg" alt="Welcome to Bullet Hell" width="300" height="225" /><p class="wp-caption-text">Welcome to Bullet Hell</p></div>
<h2>Slow/Technical Mode</h2>
<div id="attachment_395" class="wp-caption alignright" style="width: 123px"><img class="size-full wp-image-395  " title="Cherry Blossom - Slow Mode" src="http://finalformgames.com/wp-content/uploads/2009/09/impNight3.jpg" alt="If a bullet hits the dot on her waist, you're dead. Anywhere else and you're home free." width="113" height="172" /><p class="wp-caption-text">If a bullet hits the dot on her waist, you&#39;re dead.</p></div>
<p>Almost all of the Touhou games I played had a button that, when you hold it down, makes you go slower. In the earlier Perfect Cherry Blossom you activate this mode by holding down the fire button, a&#8217;la <a title="Wikipedia: DoDonPachi" href="http://en.wikipedia.org/wiki/DoDonPachi" target="_blank">DoDonPachi</a>. In later games, however, <a title="ZUN - maker of Touhou games" href="http://en.wikipedia.org/wiki/Team_Shanghai_Alice" target="_blank">ZUN</a> remapped this slowdown to another button entirely.</p>
<p>One of the most subtle benefits of this slowdown is that it puts a small dot on your character showing your &#8220;real&#8221; hit-box. As Chris mentioned in his post, it&#8217;s usually a good idea in shmups to make the player&#8217;s hit box (i.e. the part of the player that, if it touches a bullet, will result in player&#8217;s death) much smaller than the image of the player&#8217;s ship.</p>
<p>Notice the little white dot on the player on the image to the right. That&#8217;s the player&#8217;s hit-box; as long as you remain in slow mode the game displays this point for you allowing for a highly technical level of play.</p>
<h2>Modal Gameplay</h2>
<div id="attachment_397" class="wp-caption alignright" style="width: 155px"><img class="size-full wp-image-397" title="ImpModeCompare" src="http://finalformgames.com/wp-content/uploads/2009/09/ImpModeCompare.jpg" alt="Left: Slow Mode, Right: Normal" width="145" height="107" /><p class="wp-caption-text">Left: Slow Mode fires wavy bats, Right: Normal fires spread</p></div>
<p>In most of the Touhou games the player&#8217;s main vulcan fire* is slightly different when slow mode is engaged. In Imperishable Night, the players main attack gets extremely different. As you can see on the right, the main character&#8217;s sprite also changes to reflect this.</p>
<p>With the character(s) pictured, the slow mode actually leaves guns behind in screen-space (the red circles above her are the guns) so you can put a gun down, for example, somewhere you know the boss often is while you&#8217;re off somewhere else dodging. By contrast, the main mode is a very traditional vulcan spread shot.</p>
<div id="attachment_398" class="wp-caption alignright" style="width: 96px"><img class="size-full wp-image-398" title="impnightfamiliar" src="http://finalformgames.com/wp-content/uploads/2009/09/impnightfamiliar.jpg" alt="Currently in &quot;I can kill you, you can kill me&quot; mode" width="86" height="117" /><p class="wp-caption-text">Currently in &quot;I can kill you, you can kill me&quot; mode</p></div>
<p>This allows for tactical decisions. All of the sudden you have an interesting choice of which gun to use for each wave of enemies that comes at you. Do you fire the spread to cover more screen, or do you leave a gun on one side of the screen to cover the other?</p>
<p>Imperishable Night makes this even more interesting by changing enemy behavir based on which mode you&#8217;re in. These things, called &#8220;familiars&#8221;, are usually spawned by bosses and shoot bullets at you. When you are in slow mode they won&#8217;t harm you by touch, but you can&#8217;t kill them either. When you are in normal mode, however, your bullets can kill them and they can kill you by running into you. This offers even more interesting play choices such as, for example, you choose whether to remain in regular mode so you can kill them and stop them from firing at you, or just to switch to slow mode and fire through them to get to the boss while dodging bullets.</p>
<h2>Boss Locator</h2>
<p>The last mechanic that I&#8217;ll mention is the boss locator. Whenever you fight a boss, the word enemy appears on the bottom of the screen directly under where the boss is on screen (screenshot below). This lets the player see where the boss is with a minimal effort even when he&#8217;s busy dodging hell of bullets at the bottom of the screen. It&#8217;s a great innovation that&#8217;s particularly well-suited to the smaller bosses of the Touhou shmups. We may have to borrow this.</p>
<div id="attachment_400" class="wp-caption aligncenter" style="width: 434px"><img class="size-full wp-image-400" title="impnight1" src="http://finalformgames.com/wp-content/uploads/2009/09/impnight11.jpg" alt="crude red drawing added by the editors for emphasis" width="424" height="478" /><p class="wp-caption-text">Crude Red Drawing added by the editors for emphasis</p></div>
<p>This is by no means all of the lessons these games have to teach. The bullet patterns alone could be the subject of a dissertation; I&#8217;m sure I&#8217;ll go back to that well. For now, though, these are my big takeaways from my brief research time. If you haven&#8217;t had a chance to play these yet I heartily recommend them, Imperishable Night in particular.</p>
<p><small>* The vulcan is pretty much the standard issue primary weapon in shmups. Originally named after the real M61 Vulcan cannon, the original standard gatling gun on American jets post WWII, in shmups a vulcan is a high speed, high rate-of-fire weapon.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/touhouhou-and-a-bottle-of-rum/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Style Study: Motion Blur in Street Fighter 3</title>
		<link>http://www.finalformgames.com/uncategorized/style-study-motion-blur-in-street-fighter-3/</link>
		<comments>http://www.finalformgames.com/uncategorized/style-study-motion-blur-in-street-fighter-3/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 17:04:31 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[sprites]]></category>
		<category><![CDATA[style study]]></category>

		<guid isPermaLink="false">http://finalformgames.com/?p=361</guid>
		<description><![CDATA[One of the classic problems of 2D animation is the tug-of-war between frame economy (each drawing takes lots of work/time) and high-speed movements (the faster the move, the more likely it is to &#8220;strobe&#8221; if you skimp on frames).  There&#8217;s also the issue that, even with a lot of frames, some movements are so fast [...]]]></description>
			<content:encoded><![CDATA[<p>One of the classic problems of 2D animation is the tug-of-war between frame economy (each drawing takes lots of work/time) and high-speed movements (the faster the move, the more likely it is to &#8220;strobe&#8221; if you skimp on frames).  There&#8217;s also the issue that, even with a lot of frames, some movements are so fast that they would usually become little more than a blur on film.</p>
<p>As you might imagine, developing a 2D fighting videogame really brings this problem front-and-center. Most of the gameplay in a typical fighting game centers around two large characters executing high-speed attacks, continuously, for minutes at a time. Because traditional sprite-art games typically eschew the use of any semi-transparent pixels, they often have to get pretty creative to emulate the effects of motion blur.</p>
<p>Today I went through my Street Fighter 3 sprite collection* to pick out some good example frames, and was surprised to discover a different fast-motion solution for almost every character.  As I went through them frame-by-frame, it became more and more clear that the lead animator of each character was essentially allowed to use whatever technique they preferred to achieve the effects they were after.  What follows is a grab-bag of these tricks in action.</p>
<p><img class="size-full wp-image-372 alignnone" style="background-color: grey;" title="22035" src="http://finalformgames.com/wp-content/uploads/2009/09/22035.png" alt="22035" width="406" height="215" /></p>
<p>This first one is the character Makoto.  This is what I think of as a pretty typical <a href="http://en.wikipedia.org/wiki/12_basic_principles_of_animation#Squash_and_stretch">post-Disney stretch</a>, being used to sell one hell of a jump-kick.  Notice that the contour line around the foot is consistent with the contour treatment on the rest of the character.</p>
<p><img class="size-full wp-image-373 alignnone" style="background-color: grey;" title="22117" src="http://finalformgames.com/wp-content/uploads/2009/09/22117.png" alt="22117" width="406" height="215" /></p>
<p>They&#8217;re also pretty fearless about stretching the physical length of the attacking limb, to further accentuate the speed and force of the hit. Again: classic Disney.  Makoto in particular is an absolute masterclass of physical animation, with her oversized gi and super-long headband flying every which-way.  The fact that these animators are doing it all within 120-odd pixels square just makes it more impressive.</p>
<p><img class="alignnone size-full wp-image-365" style="background-color: grey;" title="12444" src="http://finalformgames.com/wp-content/uploads/2009/09/12444.png" alt="12444" width="288" height="240" /></p>
<p>With Oro, they really loosen up and go nuts with the squash-and-stretch.  In addition, there are more subtle differences: notice that the contour treatment is lighter on the fast-moving limb than on the rest of the body.</p>
<p><img class="alignnone size-full wp-image-364" style="background-color: grey;" title="12225" src="http://finalformgames.com/wp-content/uploads/2009/09/12225.png" alt="12225" width="288" height="240" /></p>
<p>Here you can see the contour change even more clearly.</p>
<p><img class="alignnone size-full wp-image-363" style="background-color: grey;" title="12105" src="http://finalformgames.com/wp-content/uploads/2009/09/12105.png" alt="12105" width="288" height="240" /></p>
<p>And check out this transparency hack, eh?  You wacky Capcom animators!</p>
<p><img class="alignnone size-full wp-image-366" style="background-color: grey;" title="18808" src="http://finalformgames.com/wp-content/uploads/2009/09/18808.png" alt="18808" width="290" height="265" /></p>
<p>&#8230;and now for something completely different.  Akuma&#8217;s movements are very stiff and staccato in comparison to Makoto&#8217;s and Oro&#8217;s, though it&#8217;s not clear if that&#8217;s a deliberate stylistic choice to differentiate their martial arts or just a quality-control breakdown.  However, this motion-lines technique is how all his fast movements are treated.  Like all the techniques used in this game, it works very well, but what an odd contrast!</p>
<p>Finally, we have Chun-Li. As the original Fastest Character In Street Fighter, this character is all about speed! Strangely, her animators seem to be doing everything they can to avoid squash-and-stretch. When it <em>is</em> used, it&#8217;s used&#8230; weirdly. In general, the character almost feels like it was filmed using a higher shutter speed.  Check it out:</p>
<p><img class="alignnone size-full wp-image-367" style="background-color: grey;" title="19962" src="http://finalformgames.com/wp-content/uploads/2009/09/19962.png" alt="19962" width="300" height="230" /></p>
<p>The frame above is the closest I could find to the sort of treatment we saw on Oro, but the foot is clipped to a point. I wonder if that&#8217;s to emphasize the contrast between her exaggerated thighs and small feet?</p>
<p><img class="alignnone size-full wp-image-368" style="background-color: grey;" title="19963" src="http://finalformgames.com/wp-content/uploads/2009/09/19963.png" alt="19963" width="300" height="230" /></p>
<p>The stretch/motion-blur is pretty dramatic here, but&#8230; it&#8217;s sitting behind a proportionately normal and fully rendered limb? Plus, the motion trail is actually lit, or at least gets darker in an effort to achieve some sort of fading effect.</p>
<p><img class="alignnone size-full wp-image-370" style="background-color: grey;" title="20562" src="http://finalformgames.com/wp-content/uploads/2009/09/20562.png" alt="20562" width="300" height="230" /></p>
<p>Now they&#8217;re completely disconnecting the blur element from the limb, and introducing some of that semi-transparent-looking stuff we saw with Oro.</p>
<p><img class="alignnone size-full wp-image-369" style="background-color: grey;" title="20371" src="http://finalformgames.com/wp-content/uploads/2009/09/20371.png" alt="20371" width="300" height="230" /></p>
<p>Same deal, but even more obviously out-of-step with the stuff we saw before.</p>
<p><img class="alignnone size-full wp-image-371" style="background-color: grey;" title="20808" src="http://finalformgames.com/wp-content/uploads/2009/09/20808.png" alt="20808" width="300" height="230" /></p>
<p>Finally, here&#8217;s a frame from her famous lightning kick attack.  This was probably the official Fastest Fighting Game Move Of All Time when it debuted in Street Fighter 2 (possibly tied with E. Honda&#8217;s hundred-hand-slap), and yet its execution in part 3 is extremely underwhelming.  After seeing all the juicy speed effects on the previous characters, this ghost-limb trick really feels like a missed opportunity to me.  Again with the high-shutter-speed gag.</p>
<p>Fun as it was to pick apart the monolithic game art achievements of yore, this style study left me with more respect for the Capcom art team, not less. I&#8217;ve logged more hours than I&#8217;d like to admit on this game, and never once noticed these discrepancies. I&#8217;m sure some of that comes from the fact that only two characters can fight on-screen at a time, so the visual hodge-podge will only ever get so ridiculous. However, I suspect the bulk of said hodge-podge skates by because, at these framerates, your brain is only subconsciously able to process what it&#8217;s seeing (let alone register that Chun-Li has three legs). &#8220;Persistence of vision&#8221; is all about our brain wanting to believe in continuity between frames, and these animations have all been ruthlessly tested and refined towards accomplishing that mental sleight-of-hand. The fact that they went about it in different ways turns out not to matter very much, because they all ultimately achieved their goal: the illusion of speed.</p>
<p>Once again, I am amazed by the users&#8217; tolerance for inconsistency in the final product.  Take heart, game artists!  Your players will forgive you for far more trespasses than you&#8217;ll forgive yourself!</p>
<p><small>*I got all the frames for this post from <a href="http://www.zweifuss.com/">this excellent website</a> and, by extension, from the seminal Capcom fighter Street Fighter 3.  Go check it out if you want to see these animations in motion, and pick up a hefty dose of inspiration while you&#8217;re there!</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/style-study-motion-blur-in-street-fighter-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FallGuy Prototype &#8211; Day 3, part 2</title>
		<link>http://www.finalformgames.com/uncategorized/fallguy-prototype-day-3-part-2/</link>
		<comments>http://www.finalformgames.com/uncategorized/fallguy-prototype-day-3-part-2/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 00:04:08 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[fallguy]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[Prototyping]]></category>
		<category><![CDATA[shmup]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://finalformgames.com/?p=266</guid>
		<description><![CDATA[This is the second in a series of posts that document the process of building a prototype game in about 7 days.  Because I am writing it, it places special emphasis on the particulars of how the art and animation got made.  It&#8217;s also getting increasingly technical.  You can catch up with Part 1 here.

When [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the second in a series of posts that document the process of building a prototype game in about 7 days.  Because I am writing it, it places special emphasis on the particulars of how the art and animation got made.  It&#8217;s also getting increasingly technical.  You can catch up with Part 1 <a href="http://finalformgames.com/uncategorized/fallguy-prototype-the-first-2-5-days/">here</a>.<br />
</em></p>
<p>When we left our heroes, the time had come to start on the first screenshot mockup of FallGuy.</p>
<p>The first decision was game resolution.  Most of the great modern pixel art games (<a href="http://blacklantern.files.wordpress.com/2008/03/dodonpachi_10.gif">DoDonPachi</a>, <a href="http://www.system16.com/screens/progear_a.png">ProGear</a>, <a href="http://www.system16.com/screens/sfiii3_a.png">Street Fighter III</a>, etc.) run somewhere in the neighborhood of 320&#215;240 pixels, but there tend to be subtle variations on those numbers depending on which <a href="http://www.system16.com/hardware.php?id=795">arcade board</a> the game was designed for.  I looked at screenshots of vertical shmups like Ikaruga and <a href="http://www.world-of-arcades.net/Cave/cave.htm">the bulk of the Cave lineup</a>, and arrived at the conclusion that 224 pixels wide by 320 tall was going to work fine for our needs on this project.</p>
<h3>THE MAIN CHARACTER</h3>
<p>As soon as I had a resolution target, I made a blank Photoshop file at that rez and started working on our protagonist.  The main character sprite is the representation of the player in the game, so getting him right is one of the most important art tasks.  He needs to have the correct scale, a clear silhouette, good contrast with the environment (i.e. background, enemies, bullets), and general visual appeal.  Finally, he needs to support core gameplay functionality with things like a clearly-indicated hitbox and a logical point from which bullets can be emitted.  As I didn&#8217;t have any environment art yet, I focused on scale/silhouette/gameplay for the first pass.</p>
<div class="wp-caption aligncenter" style="width: 458px"><img title="p1_design" src="http://finalformgames.com/wp-content/uploads/2009/09/p1_design.gif" alt="p1_design" width="448" height="138" /><p class="wp-caption-text">My crappy, crappy earlier designs.</p></div>
<p>When I was done, the character was just a simple black outline with a white fill, but all the heavy lifting of the character design was largely squared away.  And yet&#8230; he wasn&#8217;t excellent? Really at all? This is probably a good time to mention that for this project, I was focused on getting things to the <a href="http://chrishecker.com/Good_Enough">Good Enough</a> line and then moving on, with a plan to return and polish/revise/start over if time allowed. For example, the character above is doing something with his right hand that looks more like a lewd gesture than holding a pistol. That issue became obvious as soon as I got him to this point, but the clock was ticking! Rather than embark on a complete character redesign, I simply considered the odds that all this art would get thrown away anyway, decided those odds were rather high, and focused on the biggest bang-for-buck revisions I had time for.</p>
<p>For example, if bullets are supposed to come out of that right hand, it should probably be aligned with the center of the character instead of being 5 pixels off to the right.  That was an easy fix, so I made it (and a few others) before I started animating. Anything more difficult than that fell right off the back of the results train, and not just for expediency&#8217;s sake either. The fact is,  I&#8217;m enough of a novice at this style of art that every single piece I create teaches me another 5 important lessons, so the payout of just putting miles on the tires still greatly exceeds the payout of mastering a single turn of the track.*</p>
<p>Before Hal could actually use the art I&#8217;d created, I had to convert it into whatever format he needed on the code side.  After some brief discussion, we determined that the easiest (though somewhat painful) solution was to create animated .gif files and then go through the laborious task of converting them into .swf files in Flash.  This process cries out for automation, but javascripting workflow improvements in Adobe&#8217;s CS3 suite was way, way, WAY out of scope for this project.  I sucked it up, checked the converted main character test image in, and got to work on his first animation.</p>
<h3>THE IDLE LOOP</h3>
<p>The idle loop is actually somewhat rare in the classic shmup world, as most player craft are spaceships or airplanes of some stripe and have no soft bits to apply constant motion to. Typically, that sort of thing is limited to some sort of flicker in the exhaust of the jets or rockets or whatever the propulsion system of the ship is.  In contrast, our character was wearing a business suit, and had no jets, so the natural idea was to animate his clothes flapping in the wind as he flew through the air.</p>
<p>This brought me to a tools question that I&#8217;ve been meaning to find the answer to for a while: <strong>what software will I use to produce these animations?</strong> For previous projects, I had used the following process:</p>
<ol>
<li>Animate at high resolution in an open-source 2d animation program called <a href="http://www.pencil-animation.org/">Pencil</a>&#8230;</li>
<li>&#8230;export that animation as an image sequence&#8230;</li>
<li>&#8230;then batch downrez/crop the frames to the target size in Photoshop CS3&#8230;</li>
<li>&#8230;import those frames into an open-source pixel animation program called <a href="http://opensword.org/Pixen/">Pixen</a>&#8230;</li>
<li>&#8230;and proceed to cleanup/color from there.</li>
</ol>
<p>Long as that list is, this process actually had some nice things going for it: it allowed me to animate at high rez, which is great for someone who is new to the expressionist mental kung-fu that pixel art requires. Additionally, passing through Photoshop gave me access to all the filters and associated knobs/buttons that make it the definitive industrial raster software the world over. Finally, it worked, which is always a plus.  Unfortunately, this pipeline suffered from having a lot of difficult-to-automate steps, and from relying on not one but <em>two </em>pieces of buggy open source software.</p>
<p>For the idle loop, which looked very simple anyway, I decided to try doing the whole process in Photoshop.</p>
<p>Many people don&#8217;t know about the remora of animation support that clings to the underside of Photoshop CS3; I suspect its presence would be classified as a bug by the folks over at Adobe.  By that version of the Creative Suite, almost all the animation support features had been <a href="http://www.dedestruct.com/2008/02/18/how-to-open-animated-gifs-with-photoshop-cs3/">relocated</a> from Photoshop/ImageReady to another Adobe app called Fireworks.  However, just enough of it remains in Photoshop that you can still <a href="http://www.wikihow.com/Create-Animated-GIFs-Using-Photoshop-CS3">get animations done</a> if you plan carefully.  And as we all know, if you&#8217;re animating in 2d, you should be planning carefully anyway.</p>
<div id="attachment_242" class="wp-caption aligncenter" style="width: 110px"><img class=" " style="background-color: grey;" title="idle1" src="http://finalformgames.com/wp-content/uploads/2009/09/idle1.gif" alt="idle1" width="100" height="150" /><p class="wp-caption-text">Only an Armani would flutter like this.</p></div>
<p>What I learned from doing this animation in Photoshop was that you can indeed still use it, but it&#8217;s a deeply counter-intuitive workflow for someone with a traditional animation background.  For example, it stores individual layer visibility state per-frame instead of the typical discrete-images-along-a-timeline metaphor. This probably makes a lot of sense when you&#8217;re creating web graphics, but it&#8217;s maddening if you&#8217;re planning to draw a custom image for every frame anyway. One useful side-effect of that design decision is that you can use the feature in concert with layer and group masks to achieve useful things like per-limb frame offsets and the like. Unfortunately, such feats are unwieldy in the extreme, especially in comparison with any given 3d animation package (where the difficulty of said feats would be most readily compared to that of falling off a log).</p>
<p>There are of course days when it&#8217;s worth the pain, so I&#8217;ll definitely keep Photoshop it in my back pocket for certain classes of task, but most of my takeaway was that I should find a better (or at least more straightforward) tool for my meat-and-potatoes 2d animation work.</p>
<h3>THE SWORD ATTACK</h3>
<p>My next task was to animate him swinging his sword with gust and bravado.  After the weirdness of using Photoshop, I felt renewed excitement to revisit <a href="http://opensword.org/pixen/">Pixen</a>. While buggy, Pixen was obviously designed from the ground up for this exact purpose (probably after looking at <a href="http://www.humanbalance.net/gale/us/">GraphicsGALE</a>), and I was able to stop fighting the tool after just a few hours and focus my energy instead on bringing the character to life. That old 2d animation juice started to flow for the first time in  years, and actually I managed to create something I was pretty happy with:</p>
<div id="attachment_242" class="wp-caption aligncenter" style="width: 110px"><img class=" " style="background-color: grey;" title="p1sword1" src="http://finalformgames.com/wp-content/uploads/2009/09/p1sword1.gif" alt="p1sword1" width="100" height="150" /><p class="wp-caption-text">Swoosh!</p></div>
<p>The lessons of Pixen were to save often, and keep things simple whenever possible. This is because it&#8217;s definitely, definitely going to crash on you all the time. The core functionality is (fairly) safe, but the further you venture out into the badlands of the extended feature set, the greater the odds that you&#8217;re going to step on a landmine.  Also, even though it&#8217;s got lots of neato features like per-frame layers and custom palettes and so on, I found the complexity of wrangling all the moving parts of a 10 frame animation to be all that I could handle. Even something as simple as dealing with layers pulled me out of my fragile groove and got me thinking about my tools again, instead of what I was trying to create with them.</p>
<p>I suppose that was the other lesson of Pixen: that besides being the best of what was around, it was also good enough on some absolute scale of my particular needs.  The day will probably come when I convince Tim to write me the pixeling tool of my dreams, or at least to spot-weld features and bugfixes onto Pixen until it becomes that tool.  For now, though, I&#8217;ve used nothing better for turning jumbled piles of pixels into believable animated characters.</p>
<p style="text-align: left;">Thus concluded Day 3. See you next time for Day 4, which features Unexpected Reversals <em>and</em> A Moment Of Truth!</p>
<p><small>* FYI, you can count on more tortured/mixed metaphors in that style from here on out.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.finalformgames.com/uncategorized/fallguy-prototype-day-3-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
