<?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>Big Fat Alien</title>
	<atom:link href="http://www.bigfatalien.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.bigfatalien.com</link>
	<description>Games for people.</description>
	<lastBuildDate>Mon, 23 Aug 2010 01:14:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>New Goal: BEEP is going to the Indy Game Festival!</title>
		<link>http://www.bigfatalien.com/?p=252</link>
		<comments>http://www.bigfatalien.com/?p=252#comments</comments>
		<pubDate>Thu, 12 Aug 2010 01:12:35 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=252</guid>
		<description><![CDATA[The Indy Game Festival is THE place to be for a rising independent game devloper. Some of my favorite titles have been a part of this festival (and the prizes aren&#8217;t that bad either!). 
But more than anything, I really want to get some eyeballs on the game and show an interested audience what BEEP [...]]]></description>
			<content:encoded><![CDATA[<p>The Indy Game Festival is THE place to be for a rising independent game devloper. Some of my favorite titles have been a part of this festival (and the prizes aren&#8217;t that bad either!). </p>
<p>But more than anything, I really want to get some eyeballs on the game and show an interested audience what BEEP is all about. </p>
<p>So my new goal is to have a &#8216;release candidate&#8217; build ready by October 18th (the submission deadline for the IGF). With some blood, sweat and tears&#8230; that might actually happen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=252</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BEEP Gets Ported To Linux</title>
		<link>http://www.bigfatalien.com/?p=241</link>
		<comments>http://www.bigfatalien.com/?p=241#comments</comments>
		<pubDate>Thu, 29 Jul 2010 05:51:48 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[BEEP]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=241</guid>
		<description><![CDATA[Linux is like an addiction for me;  at times it feels a bit unhealthy, but I can&#8217;t resist it.
Back in the early 2000&#8217;s, I experimented with various distributions while going to school. Since then, I&#8217;ve used Red Hat and Suse Linux at work (for computer graphics and animation work) and experimented heavily with Ubuntu at [...]]]></description>
			<content:encoded><![CDATA[<p>Linux is like an addiction for me;  at times it feels a bit unhealthy, but I can&#8217;t resist it.</p>
<p>Back in the early 2000&#8217;s, I experimented with various distributions while going to school. Since then, I&#8217;ve used Red Hat and Suse Linux at work (for computer graphics and animation work) and experimented heavily with Ubuntu at home.</p>
<p>In the past, I tried desperately to make Ubuntu my primary desktop system, but I always came crawling back to Windows when the mountain of incompatibilities forced me to admit that it &#8216;just wasn&#8217;t ready yet&#8217;. In those early days, I think I liked the <em>idea</em> of Linux, more than Linux itself.</p>
<p>Boy have things changed in just two short years.  My recent experience porting BEEP to Ubuntu linux has been a very pleasant one.  Linux has really come into it&#8217;s own as a viable desktop platform. And I&#8217;m very happy to report that my videogame, BEEP, is running great in the newest version of Ubuntu.</p>
<p><span id="more-241"></span></p>
<h4>Past Experiences With Linux</h4>
<p>In previous attempts at making linux my primary operating system, I inevitably ran up against a mountain of issues. Namely:</p>
<ul>
<li>Getting <strong>video drivers</strong> downloaded installed and working. (Having to resort to arcane shell commands is far more friction than I care to encounter when doing something as fundamental as making my video card work).</li>
<li>Setting <strong>monitor resolution and enabling multi-monitors</strong>. I wish I didn&#8217;t even know what xorg.conf was. Editing this thing is about as much fun as chewing a ball of salt.</li>
<li>Getting <strong>sound to work</strong>. Ugh.</li>
<li>Getting <strong>wifi card to work</strong>. This is a real pain because without Internet, you have to go to another system and download the drivers onto a USB drive. Then upon bringing it back to your linux system you inevitably realize that the OS mysteriously refuses to recognize your USB stick. (FFFUUU!!!)</li>
</ul>
<p>Apart from just getting the components and peripherals working, there&#8217;s the added benefit of learning all the &#8216;linux&#8217; versions of all the applications you need (email, image editing, chat etc). But admittedly, most of these are actually better than their PC counterparts so learning them isn&#8217;t so much of a detriment to linux itself, just a hassle.</p>
<h4>Why Do I Hate Linux?</h4>
<p>Now, if it sounds like I <em>hate </em>linux, that&#8217;s only half true. I love linux for it&#8217;s potential, but I hate it for the snobbish, elitism extolled by some of it&#8217;s main proponents. I should qualify that. What I mean is, there is this pervasive attitude amongst the elite linux crowd that their OS is <em>infallible</em>. These uber-geeks maintain that any supposed &#8216;usability issues&#8217; are in fact due to user error and ignorance. More specifically, they are <em>unable to admit</em> that serious flaws in linux&#8217;s usability are in fact,<em> design flaws</em>.</p>
<p>I subscribe to a very different philosophy. If I encounter friction in the process of utilizing a designed system, I immediately and without apology <strong>blame the designer</strong>. People routinely blame themselves for being unable to do something as simple as recording a TV show. I take the opposite route. I blame the VCR manufacturer.</p>
<p>I&#8217;ve designed so many systems in the course of my career, I can spot a poorly designed one in an instant.  I experience a creeping sensation that the task at hand could be done easier, faster and with less friction. Bad design infuriates me; whether it&#8217;s in a coffee machine or an operating system.</p>
<h4><strong>So I Think Linux Is a Bad Design?</strong></h4>
<p>NO! Linux is actually quite beautiful. At times, it can be downright elegant. The multi-desktop feature and window management are huge productivity gains. As is the speedy execution courtesy of the rock-solid Linux kernel.</p>
<p>Elegant though the foundation may be, Linux is often crippled by an inability to reduce the friction involved in everyday desktop computing tasks. Things as simple as configuring multiple-monitors, listening to an .mp3 (proprietary codecs) or installing graphics drivers can turn into time-sucking bouts of trial/error problem solving.</p>
<p>Granted, this is a bit of a chicken/egg problem. Without widespread support from hardware and software vendor&#8217;s Linux will remain replete with compatibility issues. But in order for vendors to dedicate precious development resources to Linux, they need to be assured of a sufficiently large consumer base on that platform. Which is something that will never exist until Linux is more widely compatible. Ugh.</p>
<p>Sometimes I fantasize about a world where the majority of software development effort was directed at linux instead of Windows starting way back in the 90s. We could have avoided Windows ME, Windows Vista and countless virus and security issues all while enjoying a faster, sleaker operating system. Imagine the cumulative savings our society would enjoy without the added operating costs associated with problems directly related to MS Windows security and performance issues.</p>
<p>Linux is a faster, more stable and secure platform. What it lacks is polish and a serious concerted effort on the part of the world&#8217;s commercial software houses to support it (with the exception of Google which reportedly uses Ubuntu in their offices and creates Linux versions of their major software products).</p>
<p>Apart from support, Linux also suffers from a willingness on the part of it&#8217;s userbase to look past it&#8217;s serious usability issues. I almost lost faith in Linux entirely until I heard about Ubuntu some years ago. Mark Shuttleworth (the benevolent dictator in charge of Ubuntu) is the rare Linux guru who fully admits that Linux is playing catch-up in the areas of compatibility and ease-of-use. Without at least a willingness to admit that there is a problem, Linux will wallow in obscurity for eternity.</p>
<p>I tested the early versions of Ubuntu and gained a hint of what Linux<em> could</em> be. But it always ended up failing me in some spectacular way (usually relating to graphic card compatibility issues). I could see the light, but the tunnel was really, really long.</p>
<p>Well, I&#8217;m happy to say that the new version of Ubuntu 10.04 is <strong>the first version of Linux I have used that did not require me to resort to command line hacks in the course of installation and setup</strong>. This is a historical moment of sorts. From start to finish, I was able to do my work <em>completely</em> and <em>without sacrifice</em> using only the GUI tools and applications.</p>
<p>In fact, upon starting up for the first time, Ubuntu 10.04 was able to:</p>
<ul>
<li>setup my monitor resolution perfectly</li>
<li>get sound working</li>
<li>connect through HDMI out to my HDTV. (with audio of course)</li>
<li>setup/connect to wifi internet</li>
<li>detect my windows network drive so I could stream my collection of movies/music/photos</li>
<li>configure my second monitor. It magically popped up with correct resolution. I didn&#8217;t even have to configure it through a driver utility like you do in Windows.</li>
<li>installed gcc compiler and Code::Blocks IDE from application installer UI</li>
</ul>
<p>Needless to say, I was impressed. To be honest, I was expecting to spend a full day wading through online forums to find solutions to all of the above mentioned tasks. But I didn&#8217;t have to. IT JUST WORKED.</p>
<h4>What About Porting BEEP?</h4>
<p>Ok, enough of my opining on Linux. What about BEEP&#8217;s port? Well I&#8217;m happy to say that it&#8217;s fully compiled, linked and ready for distribution (just as soon as the content is complete!). The build process took fully two days of wrangling. There are always issues related to porting software systems between OSs. But mostly it was just a matter of squashing compiler errors (the open source C++ compiler, gcc, seems to be a lot more strict about enforcing the ANSI/ISO C++ standards).</p>
<p>In addition to compilation issues, there was the task of tracking down (and in some cases compiling) the Linux versions of the libraries that my game engine uses. At times it felt like I was going down a rabbit hole. But I emerged victorious! Seeing the game running in it&#8217;s full glory in Linux is a great reward.</p>
<div id="attachment_244" class="wp-caption alignnone" style="width: 684px"><a href="http://www.bigfatalien.com/wp-content/uploads/2010/07/Screenshot.png"><img class="size-full wp-image-244  " title="BEEP In Linux" src="http://www.bigfatalien.com/wp-content/uploads/2010/07/Screenshot.png" alt="" width="674" height="378" /></a><p class="wp-caption-text">Fresh off the compiler, it&#39;s BEEP in Ubuntu Linux!</p></div>
<h4>Does Anyone Even Game in Linux?</h4>
<p>Now after going through all this effort, you might be wondering if anyone is even going to care about a Linux build. To be honest, I have my doubts. But if other games are any indication, you can expect to gain between 5-20% sales by providing a Linux version.</p>
<p>How can this be given that most estimates peg Linux adoption at less than 3% of the total PC user-base? My guess is that those 3% of PC users are:</p>
<ol>
<li>starving for content</li>
<li>much more likely to fit the gaming demographic</li>
<li>much more likely to want to support commercial software on Linux (Linux usesr tend to be a bit ideological)</li>
</ol>
<p>So there you have it. My experience with porting BEEP to Linux was completely unlike past experiences. Linux development really has improved dramatically since the days of manual driver installations and hacking text files to set monitor resolutions.</p>
<p>I predicted 2 years ago that Linux would be &#8216;mainstream&#8217; in 5 years. That was probably an aggressive estimate given the sluggish nature of software adoption. But if the newest version of Ubuntu is any indication, the future of this beloved Open Source OS is bright indeed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=241</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Best Python IDE For Maya</title>
		<link>http://www.bigfatalien.com/?p=233</link>
		<comments>http://www.bigfatalien.com/?p=233#comments</comments>
		<pubDate>Fri, 07 May 2010 06:42:16 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=233</guid>
		<description><![CDATA[Since Maya included Python as it&#8217;s scripting language, animation TD&#8217;s all over the globe have made the transition from MEL.  While learning a new language isn&#8217;t always easy, I don&#8217;t know of a single person who misses the days of MEL scripting. Python is, in every conceivable way, better than MEL.

But many of us had [...]]]></description>
			<content:encoded><![CDATA[<p>Since Maya included Python as it&#8217;s scripting language, animation TD&#8217;s all over the globe have made the transition from MEL.  While learning a new language isn&#8217;t always easy, I don&#8217;t know of a single person who misses the days of MEL scripting. Python is, in every conceivable way, better than MEL.<br />
<span id="more-233"></span></p>
<p>But many of us had invested serious effort in making the pain of MEL scripting more bearable by finding and tuning a nice development environment. Over the past couple years I&#8217;ve been experimenting with different editors and IDE&#8217;s in an attempt to find a suitable replacement for Mel Studio Pro (my preferred IDE for MEL development).</p>
<p>Since abandoning Mel Studio Pro, I&#8217;ve gone through a host of editors including; Nedit, SciTE, Visual Studio, Code::Blocks, jEdit, UltraEdit and emacs. These are all great editors and I&#8217;m sure they each have a loyal following. Indeed, some of them are really quite good.</p>
<p>But when it comes to integration with Maya, they all fall flat. There are a few things you need when editing Python code that is meant to run on Maya&#8217;s Python interpreter:</p>
<p>1. The ability to execute the code from within the IDE and run it inside Maya.</p>
<p>2. A step-through debugger that pauses/unpauses Maya.</p>
<p>3. Auto-Completion that recognizes the Maya API and MEL commands.</p>
<p>The editors listed above could do some of these things, but none of them can do ALL these things. In my opinion, these are the real value of using an IDE in the first place.  Without these major features, the editor is really just a fancy Notepad with syntax highlighting.</p>
<p>Ok, enough preamble. The editor I have settled on is Wing IDE, and yes it will do ALL of the things listed above (plus a lot more). Most importantly, I was able to get it setup and working with little fuss. The only strike against Wing? It&#8217;s not free. But I think you&#8217;ll agree the price is fair. And after all, if you do a lot of Python coding for a living, this is a nominal expense. But you won&#8217;t have to shell out anything to see if Wing IDE is what you need since you can <a href="http://www.wingware.com/">download a 30 day trial of Wing IDE</a>.</p>
<p>To get auto-complete of Maya functions  working in Wing IDE:</p>
<p>1. Install Wing IDE</p>
<p>2. You have to point Wing IDE to Maya&#8217;s own Python interpreter (it will complain that it can&#8217;t find Python installed since Maya maintains it&#8217;s own Python interpreter). Just go Project &gt; Properties and set &#8216;Python Executable path to point to : C:\Program Files\Autodesk\Mayaxxxx\bin\mayapy.exe</p>
<p>3. Next, download <a href="http://wiki.wingware.com/GenerateMayaPiFiles">this Python script</a>. And place it in the Maya\bin directory. Now open the Maya python shell (double-click Mayaxxxx\bin\mayapy.exe) and run the script like this: execfile(&#8220;genmayapi.py&#8221;)<a href="http://www.bigfatalien.com/wp-content/uploads/2010/05/autocomplete.jpg"><img class="size-full wp-image-236  alignright" title="Maya Autocomplete" src="http://www.bigfatalien.com/wp-content/uploads/2010/05/autocomplete.jpg" alt="" width="415" height="300" /></a></p>
<p>That&#8217;s it! Now try <em>import maya.cmds as mc</em> and type <em>mc.</em> to bring up the auto-complete list.  Woot!</p>
<p>Now for the second trick. You want full debugger with the ability to watch variables and set breakpoints that pause Maya? Wing can do that too. Maya actually has it&#8217;s own instructions for doing this. Just follow the steps outlined <a href="http://download.autodesk.com/us/maya/2010help/index.html?url=WS73099cc142f48755f2fc9df120970276f7-2158.htm,topicNumber=d0e183276">here</a>.</p>
<p>There you have it! A full, professional grade Python development environment that integrates beautifully with Maya.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=233</wfw:commentRss>
		<slash:comments>326</slash:comments>
		</item>
		<item>
		<title>Python ElementTree XML Tutorial</title>
		<link>http://www.bigfatalien.com/?p=223</link>
		<comments>http://www.bigfatalien.com/?p=223#comments</comments>
		<pubDate>Mon, 05 Apr 2010 19:44:19 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=223</guid>
		<description><![CDATA[After a lot of experimenting, I think I&#8217;ve found what is the fastest and simplest module for writing/parsing XML with Python. The module is called ElementTree (etree) and it comes standard in all Python versions 2.5+. The parser is lightening fast and the API is extremely clean. You won&#8217;t have to compromise between simplicity and [...]]]></description>
			<content:encoded><![CDATA[<p>After a lot of experimenting, I think I&#8217;ve found what is the fastest and simplest module for writing/parsing XML with Python. The module is called ElementTree (etree) and it comes standard in all Python versions 2.5+. The parser is lightening fast and the API is extremely clean. You won&#8217;t have to compromise between simplicity and speed; ElementTree has it all. The only strike against it is that the documentation is scattered all over the place. That&#8217;s why I wrote this.</p>
<p><span id="more-223"></span></p>
<h4>A Wee Story<a href="http://www.bigfatalien.com/wp-content/uploads/2010/04/xml.jpg"><img class="alignright size-full wp-image-224" title="XML Comparison" src="http://www.bigfatalien.com/wp-content/uploads/2010/04/xml.jpg" alt="" width="342" height="356" /></a></h4>
<p>I am using XML as an intermediate file format between my level editor (built on-top of the 3d software package, Maya) and my game engine. Initially, I went with the minidom XML module because that&#8217;s what everyone used and it was well documented. It does work well, but I suspected that I could find something faster. And boy did I. ElementTree is an <em>order of magnitude</em> faster than minidom. I managed to shave off almost 10 seconds when exporting my levels. This is a HUGE benefit for me and is the reason I felt compelled to share this information.</p>
<p>There are two objects you need to worry about when using the ElementTree API:</p>
<p><strong>Element</strong> &#8211; These are XML elements, so they contain the label (tag), a list of attributes and a list of children elements (forming the XML tree hierarchy). This is the object you deal with in 95% of your code.<br />
<strong>ElementTree</strong> &#8211; These are &#8216;wrappers&#8217; around Element objects that provide facilities to output the Element to an .xml file (along with all it&#8217;s children, recursively). You can also read an xml file into an ElementTree and then get access to the Elements within it.</p>
<h4>Get on With It</h4>
<p>Ok, to get started, import the module. It&#8217;s part of Python&#8217;s &#8216;xml&#8217; bundle, you can find it here:</p>
<pre><code>import xml.etree.ElementTree as xml</code></pre>
<p>Now lets create an XML file from scratch and write it to disk:</p>
<pre><code>root = xml.Element('root')

#Create a child element
child = xml.Element('child')
root.append(child)

#This is how you set an attribute on an element
child.attrib['name'] = "Charlie"

#Now lets write it to an .xml file on the hard drive

#Open a file
file = open("c:/test.xml", 'w')

#Create an ElementTree object from the root element
xml.ElementTree(root).write(file)

#Close the file like a good programmer
file.close()</code></pre>
<p>Run the code above and open test.xml. You will see:</p>
<p><a href="http://www.bigfatalien.com/wp-content/uploads/2010/04/xml1.jpg"><img class="alignnone size-full wp-image-228" title="XML Output" src="http://www.bigfatalien.com/wp-content/uploads/2010/04/xml1.jpg" alt="" width="202" height="56" /></a></p>
<p>That bit of code represents everything you need to write an XML exporter. There are additional functions for parsing existing XML files (recursive searching, insert elements etc).</p>
<pre><code>#Parse XML directly from the file path
tree = xml.parse("c:/testFile.xml")

#Get the root node
rootElement = tree.getroot()

#Get a list of children elements with tag == "Books"
bookList = rootElem.findall("Books")

#Check if any "Books" were found
if bookList != None:
    for book in bookList:
        #Do something with your book!
</code></pre>
<p>There&#8217;s some more esoteric information in the API docs found here:<br />
<a href="http://docs.python.org/library/xml.etree.elementtree.html">http://docs.python.org/library/xml.etree.elementtree.html</a><br />
And you can get more detailed information here:<br />
<a href="http://effbot.org/zone/element.htm">http://effbot.org/zone/element.htm</a></p>
<h4>Conclusion</h4>
<p>Here&#8217;s the lesson: Use ElementTree as your XML parser in Python (assuming you aren&#8217;t already). It&#8217;s faster, easier and you already have it as part of the Python distribution. No need to ever touch minidom (and it&#8217;s wacky API) ever again. Enjoy <img src='http://www.bigfatalien.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Any XML tricks or tips you want to share can go in the comments below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=223</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The 2d Side-Scrolling Platformer</title>
		<link>http://www.bigfatalien.com/?p=210</link>
		<comments>http://www.bigfatalien.com/?p=210#comments</comments>
		<pubDate>Sun, 04 Apr 2010 21:55:31 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=210</guid>
		<description><![CDATA[I&#8217;m building a videogame (BEEP) that belongs to the &#8216;platformer&#8217; genre. More specifically, it&#8217;s a &#8216;2d side-scrolling&#8217; platformer. Platformers were THE dominant videogame genre for much of the 80&#8217;s and 90&#8217;s. This article explores the platforming genre to understand exactly what it&#8217;s all about. After all, platforming remains one of the highest selling and paradoxically, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m building a videogame (BEEP) that belongs to the &#8216;platformer&#8217; genre. More specifically, it&#8217;s a &#8216;2d side-scrolling&#8217; platformer. Platformers were THE dominant videogame genre for much of the 80&#8217;s and 90&#8217;s. This article explores the platforming genre to understand exactly what it&#8217;s all about. After all, platforming remains one of the highest selling and paradoxically, least saturated gaming genres.</p>
<p><span id="more-210"></span></p>
<p>With the popularization of 3d graphics in the mid-90&#8217;s, the platforming game evolved to utilize the extra dimension. But in the process of doing so, the 2d side-scroller was booted out of the spotlight. Since the mid 90&#8217;s, 2d platformers have eeked out a living on the margins of  the mainstream. It would be fully 10 years before this genre would experience a nostalgic revival. Why is it coming back? How has it changed? Is it worth reviving?</p>
<h4>Out of Necessity</h4>
<p>Waaay back in the early years (late 70&#8217;s &#8211; early 80s),<strong> single screen</strong> games dominated. They were easy to program and could easily fit into the memory and CPU limitations imposed by the available hardware. Single screen games include all the major stars of the arcade era; Pac-Mac, Donkey Kong, Asteroids, Galaga, Frogger and Pong. Single-screen games definitely have their place, but it&#8217;s difficult to gain a sense of exploration and advancement when the player stays in the same area.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/EhFV5-qbbIw&amp;hl=en_GB&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/EhFV5-qbbIw&amp;hl=en_GB&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Everyone who played Asteroids imagined what it would be like to drive the spaceship beyond the edge of the screen. Side-scrolling really is a natural extension of the single-screen game world. It wasn&#8217;t until 1980 that the first side-scrolling game was released; Defender. Now you COULD take the spaceship to the edge of the screen and explore an area that spans many screens. Suddenly, and for the first time, a video-game gained the added dimension of spacial exploration.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/n_7hLKUzKiI&amp;hl=en_GB&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/n_7hLKUzKiI&amp;hl=en_GB&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h4>Mario</h4>
<p>In the wake of Defender, gamers and developers were left thinking of all the different ways that side-scrolling could revolutionize the established gameplay mechanism (and in<a href="http://www.bigfatalien.com/wp-content/uploads/2010/04/250px-Smb3.jpg"><img class="alignright  size-full wp-image-214" title="Super Mario Bros Box Art" src="http://www.bigfatalien.com/wp-content/uploads/2010/04/250px-Smb3.jpg" alt="Box Art" width="250" height="343" /></a>spire new ones). Defender can be viewed as an extension of Asteroids which spawned the scrolling shooter genre (which would be perfected 10 years later by the Raiden games).  Similarly, Super Mario Bros can be viewed as an extension of Donkey Kong from single-screen to side-scrolling.</p>
<p>Super Mario Bros. exploded onto the scene in 1985 to coincide with the release of Nintendo&#8217;s NES console. Finally, the jump and run (ie. platforming) gameplay was married with side-scrolling technology. The result became one of the best selling games of all time and spawned a litany of sequels and knock-offs.</p>
<p>But the game that remains firmly planted in the social consciousness was Super Mario 3. This was really the culmination of decades of innovation in computer science and game design. For the first time, gamers were playing a character that really looked like something. Mario wasn&#8217;t a block of pixels, he was a cartoon character with personality and animated movements. But even more important than the visuals, was the insanely tight control mechanics. I would argue that Super Mario Bros 3 perfected &#8216;twitch&#8217; gameplay. Even after almost 25 years, the platforming genre remains saturated with gameplay mechanics that owe their origins to this game. It sold 18 million copies and it&#8217;s 2006 sequel (New Super Mario Bros. DS) has sold over 21 million copies. Both games enjoy a spot in the top ten selling games of all time.</p>
<h4>The Gameplay</h4>
<p>So what is it about platforming that makes it so fun? Finding the source of &#8216;fun&#8217; in a videogame is a difficult thing. Most people know when they are having fun, but few people can explain precisely <em>why </em>they are enjoying something. I would like to argue that 2d-side scrolling games (the good ones anyway) possess only a few basic traits which people enjoy.</p>
<p>Most obviously, there is the timed jumping (or &#8216;platforming&#8217;). This is as basic as it gets, you have to get from A to B taking into account constraints C,D,E and F. This is the generic form that all platforming gameplay takes. Common constraints includes things like, limited jump height, moving enemies, death pits, fireballs, moving platforms, tilting platforms, disappearing platforms and on and on. In general terms, these can all be view as <em>constraints </em>that combine to create an environmental puzzle. Overcoming these obstacles and finding the right combination of manoeuvres that satisfy all the constraints is what makes platforming fun. In a nut shell, chaining together actions to satisfy a series of constraints is the reason Mario is fun.</p>
<p>Additionally, platform games tend to exhibit a sense of <em>exploration </em>and <em>progression</em>. That is to say, the player feels like they are making progress as they explore an environment. That may seem trivial, but there are many things that the developer must do to keep this intact. The &#8216;world map&#8217; gives a sense of Mario&#8217;s journey to save the princess. The player can look back at the places they have been and anticipate the levels to come. It seems obvious, but many platform games since Mario have failed in this regard. And before side-scrolling, single-screen games were really at a disadvantage in giving the player a world to explore.</p>
<p>Lastly, good platform gameplay immerses the player in an alternate reality. It&#8217;s about escaping to a world that exhibits a peculiar version of the Newtonian physics we are familiar with. Playing in alternate realities teaches us about our own. Super Mario Galaxy asks us to consider a world in which <em>gravity </em>can be reversed with a switch. Games like Braid confront the player with a world where <em>time </em>itself can be manipulated and reversed. Playing with alternate law of physics is what excites me the most about videogames, and no genre does it better than the Platformer.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/MgTL_kVPq0Q&amp;hl=en_GB&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/MgTL_kVPq0Q&amp;hl=en_GB&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h4>The Revival</h4>
<p>As you can probably tell, I really really like platform games. The last console generation (Gamecube, Xbox, PS2) was a terrible time to be a platformer fan. For reasons that I still don&#8217;t fully understand, the genre was largely ignored. Maybe it was furor created by the introduction of 3d games, but more likely it was short sighted studio executives that saw it as a &#8216;dead&#8217; genre. 21 million sales of New Super Mario Bros. suggests the genre is far from dead.<a href="../wp-content/uploads/2010/04/knytt_stories.jpg"><img class="alignright" title="Knytt  Stories" src="../wp-content/uploads/2010/04/knytt_stories.jpg" alt="" width="400" height="291" /></a></p>
<p>Regardless, there is certainly a revival in the works right now. While mainstream releases like the new Super Mario Bros and Mario Galaxy games are certainly a welcome addition, the indie community is really leading the revival. Braid, a beautiful independently developed game by Jonothan Blow has more innovation in a single pixel than the vast majority of mainstream games have in their entirety. But it&#8217;s primarily a puzzle game with extremely light (and thanks to the reverse time feature), largely inconsequential action platforming. Action platforming fans should check out <a href="http://nifflas.ni2.se/index.php?page=Knytt+Stories">Knytt Stories</a> to see an example of the finest in minimalist action platforming.</p>
<p>There are many other recent titles I&#8217;m failing to mention, but the point is that a revival of the genre is here, it&#8217;s a good thing, and it&#8217;s been largely driven by independent developers around the world.</p>
<h4>BEEP</h4>
<p>So how would I classify my own game, BEEP? Well it&#8217;s certainly a 2d side-scrolling platformer. But it&#8217;s also a shooter. The player aims and fires with the mouse which gives it a first-person shooter feel. I&#8217;m calling it, &#8216;Mario&#8230; with a gun&#8217;. Gaming enthusiasts might argue that the side-scrolling shooter genre exists and was established by games like Contra, Bionic Commando and Metal Slug (all games that I enjoy).</p>
<p>I would agree, but BEEP is different from those games in one very important way, the mouse. The Contra games used a d-pad for aiming which limits the precision of the shooting mechanic. This control system has a dramatic effect on the feel of the game. Aiming with a d-pad is more about controlled chaos than precision shooting (especially in the Contra games which get ridiculous in the amount of on screen clutter).</p>
<p>Additionally, BEEP includes a gravity gun. You hover the mouse over a dynamic object and click-hold the right mouse button to pick it up. This effectively becomes a virtual hand that the player can use to reach into the game world and move stuff around. The gameplay ramifications of this are profound. I&#8217;m still exploring the possibilities this control mechanism enables. So BEEP is the marriage of Mario (running, jumping) and Half-Life (precise shooting, gravity gun). At least, in theory. We&#8217;ll see if the audience agrees once it&#8217;s released into the wild.</p>
<p>There were many reasons why I chose to make a 2d side-scroller. But chielfly among them was the richness and diversity of gameplay options that the genre possesses. With utmost humility, I must admit that the majority of BEEPs gameplay is inspired by existing games. But by understanding <em>why</em> these classics were fun and <em>what</em> made them fun, I hope to replicate their success, learn from their victories and avoid their pitfalls. In the process, maybe I can push the genre forward a little bit and make something that people want to play; even if they aren&#8217;t sure why.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=210</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BEEP Gets Some Levels</title>
		<link>http://www.bigfatalien.com/?p=199</link>
		<comments>http://www.bigfatalien.com/?p=199#comments</comments>
		<pubDate>Wed, 17 Mar 2010 16:42:40 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=199</guid>
		<description><![CDATA[BEEP is at the point now where we are cranking out levels and prepping to begin audio work. I&#8217;m happy with the gun controls and general locomotion. I have a nice little selection of enemy types (both stationary and ones that chase the player). The &#8216;AI entities&#8217; ( ie. Finite State Machines with basic ray-casting [...]]]></description>
			<content:encoded><![CDATA[<p>BEEP is at the point now where we are cranking out levels and prepping to begin audio work. I&#8217;m happy with the gun controls and general locomotion. I have a nice little selection of enemy types (both stationary and ones that chase the player). The &#8216;AI entities&#8217; ( ie. Finite State Machines with basic ray-casting perception) are fun to play with and can certainly be challenging given the dangerous environments  that host the encounters (lots of &#8216;death pits&#8217;, as I&#8217;m calling them).</p>
<p><span id="more-199"></span></p>
<p>Level design is definitely the most labor intensive aspect of BEEP&#8217;s development. Actual construction of level geometry is constantly being interrupted by the need to switch to an art program to design a texture. Or if it isn&#8217;t art, then I get distracted by the occasional tweak to a piece of the level editor or engine code. Level design seems to be the place where 90% of the nagging &#8216;mini-bugs&#8217; are found and dealt with.</p>
<p>But even though it&#8217;s challenging and a bit dull at times, level design has huge pay-offs. It&#8217;s a blast to come up with devious scenarios and challenges to test a player. Not only that, it&#8217;s crucial to the success of the game. It IS the game. As a developer, I have to remind myself that the gamer isn&#8217;t playing your fancy lighting system, or your clever level editor, or your super-slick texture manager. The gamer is playing LEVELS and all that other stuff has to serve that singular purpose.</p>
<p>As I&#8217;ve discussed in a previous article, I&#8217;m using Maya as my level editing environment. I thought I&#8217;d share a quick video to show what a level looks like in the editor.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=10228159&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=10228159&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>The level editor is built on top of the commercial 3d software package, Maya. A custom built exporter uses a web of message connections between nodes to define all of the various assets that comprise a level.</p>
<p>This data is traversed by a Python script and compiled into an XML file that is loaded by the proprietary <em>Bonk</em> 2d game engine.</p>
<p style="text-align: left;">The &#8216;node&#8217; and &#8216;message connection&#8217; pattern used by Maya maps nicely to the engine&#8217;s object and pointer representation. So if a relationship is needed between two level objects (like one is a child of the other) then this is represented as a message connection in Maya, which is stored in XML and ultimately becomes a C++ pointer relationship in the engine.</p>
<p style="text-align: left;">I&#8217;ll leave you with a screen-shot of what the level looks like in the game with all the decorations applied.</p>
<p style="text-align: left; padding-left: 60px;">(click for full size)<a href="http://www.bigfatalien.com/wp-content/uploads/2010/03/Bonk-2010-03-17-09-38-15-961.jpg"><img class="aligncenter size-large wp-image-203" title="BEEP Screen Shot" src="http://www.bigfatalien.com/wp-content/uploads/2010/03/Bonk-2010-03-17-09-38-15-961-1024x800.jpg" alt="" width="491" height="384" /></a>I left the debug drawing on in this image. You can see a blue ray  coming out of the robot towards the player. This is his &#8216;eye sight&#8217;  which at the moment is being blocked by another enemy. You can also see some red rays coming out of his sides. These are used like whiskers to tell when he&#8217;s about to bump into something.</p>
<p style="text-align: left;"><a href="http://www.bigfatalien.com/wp-content/uploads/2010/03/Bonk-2010-03-17-09-38-15-96.jpg"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=199</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Managing Risks: Compatibility / Audio / UI / Mental Fortitude</title>
		<link>http://www.bigfatalien.com/?p=191</link>
		<comments>http://www.bigfatalien.com/?p=191#comments</comments>
		<pubDate>Tue, 16 Feb 2010 02:30:17 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=191</guid>
		<description><![CDATA[Not having a lot of time for lengthy updates, I&#8217;ve decided to bundle a bunch of stuff into a single article. I think it gives you a snapshot of the sorts of things that lie on the periphery of game development but are integral to the final product. In recent weeks I&#8217;ve been scrambling to [...]]]></description>
			<content:encoded><![CDATA[<p>Not having a lot of time for lengthy updates, I&#8217;ve decided to bundle a bunch of stuff into a single article. I think it gives you a snapshot of the sorts of things that lie on the periphery of game development but are integral to the final product. In recent weeks I&#8217;ve been scrambling to pull together all those loose ends that, if left unaccounted for, could easily unravel the whole project.</p>
<p><span id="more-191"></span></p>
<p><strong>Audio</strong></p>
<p>Before embarking on an expensive endeavor, it&#8217;s prudent to establish what aspects of it present the most risk. For BEEP, I knew I could handle the programming, visuals and marketing. But the audio has always been looming like a dark cloud over the entire project. Initially, in my naivete, I presumed I could spend a few months at the end of the project recording my own sound fx and purchasing tracks off the internet.  But it quickly became apparent that this wasn&#8217;t going to get me the consistency and quality of sound that I think the game deserves.</p>
<p>So to remedy this, I set off to find someone who could bring some experience to the project. I had some simple criteria. No students (I simply can&#8217;t risk it) and no garage-bands. I needed a professional I could count on to understand the game and be able to do original sound AND music. I scoured the internet and talked to a few different people before finding a chap by the name of <a href="http://www.franciscofurtado.net/">Francisco Furtado</a> from Portugal. I was impressed by his business acumen, proven experience and enthusiasm for video-game audio. After a bit of back/forth emailing he has agreed to come on board! Big Fat Alien has our first hire! I can&#8217;t wait to see what he comes up with.</p>
<p><strong>Beta Testing</strong></p>
<p>Now in addition to audio, the second biggest risk was my target platform, the PC. PC&#8217;s  (and Macs) are notoriously riddled with compatibility issues due to the vast array of hardware on the market. I&#8217;ve managed some of this risk by using middleware that abstracts the driver interfaces for graphics, audio and input so I don&#8217;t have to get into the nitty gritty (and boring as hell) stuff.</p>
<p>But it&#8217;s not enough to do your best and <em>hope</em> your game runs on all machines. You have to <em>TEST</em>. So I&#8217;ve begun sending out alpha tests to individuals who can run the game on their machine, email me their specs and let me know how it all went down. This data is crucial to the development of a stable piece of software. (If you want in on the next beta test, please send me a note kiaranritchie@gmail.com , I could always use more).</p>
<p><strong>UI</strong></p>
<p>The best user interface is the one you don&#8217;t notice. At it&#8217;s most basic, BEEP requires SOME method to allow players to perform basic high-level commands like, load a level, restart a level, pause etc&#8230;</p>
<p>I find 90% of videogame UI&#8217;s to be aesthetically disgusting and functionally retarded. The problem is usually a case of too many dials, knobs or tabs compounded by an inconsistency of controls and distracting visual arrangement. Basic ergonomics, it seems, continues to elude even the most seasoned video-game studios.</p>
<p>With that in mind, I set off to create something that would avoid all these pitfalls. It had to be simple, to the point and retain a sense of fun and visual elegance (nobody wants to play something that looks like a spreadsheet). I have only a half-dozen menu&#8217;s in the whole game and they all use the same visual arrangement.</p>
<p>When the user enters a menu, I apply a soft Gaussian-blur filter to the background. This is to draw the user&#8217;s attention to the menu. The mouse changes from the targeting reticule used in the game to a normal arrow pointer (so there is no question that you have to click on something now). All the buttons are stacked in a single column with most likely candidates at the top going in descending order. The button text is written in a clear, bold sans-serif font that changes color on hover. It&#8217;s all so painfully obvious a stoned monkey could use it.</p>
<p>It&#8217;s nothing fancy, and that&#8217;s the whole point. Check out the video to see what I&#8217;m talking about:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="469" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9482980&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="469" src="http://vimeo.com/moogaloop.swf?clip_id=9482980&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>World Map</strong></p>
<p>BEEP is a platform game, with a linear progression across levels of increasing difficulty. This is a formula I didn&#8217;t feel the need to divert from. It works and people understand it.</p>
<p>But part of this design is the need for a world map that frames the player&#8217;s progression and provides a mechanism to chose which level to play. I initially designed a world-map that works much like Super Mario. You have a small representative avatar basically sliding around a 2d-map between nodes that represent the different levels.</p>
<p><a href="http://www.bigfatalien.com/wp-content/uploads/2010/02/super-mario-world-map.jpg"></a><a href="http://www.bigfatalien.com/wp-content/uploads/2010/02/super-mario-world-map.jpg"><img class="alignright size-medium wp-image-193" style="border: 2px solid black;" title="Super Mario World Map" src="http://www.bigfatalien.com/wp-content/uploads/2010/02/super-mario-world-map-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>There&#8217;s a lot to like about this design. It&#8217;s simple to use and get&#8217;s the job done. But in the end, I decided to try something different.</p>
<p>I opted to replace the sliding-between-nodes map with  a mini-game involving a spaceship that the player pulls with the mouse.  The player simply directs the spaceship towards a drop zone in orbit around a planet.</p>
<p>From these zones, you can deploy a BEEP-Bot (the player character) to a specific level. It&#8217;s not quite as simple as Mario&#8217;s world map, but the slight loss in simplicity is acceptable given the benefit that this method <em>communicates to the player exactly what he&#8217;s doing</em>; flying around a solar system sending little robots down to the surface of planets. It killed two birds with one stone; picking levels, and telling the story. As a bonus, it&#8217;s actually kind of fun to drive the spaceship around smacking into asteroids and avoiding the sun.</p>
<p>Check out the video to see what I mean:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="469" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9482400&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="469" src="http://vimeo.com/moogaloop.swf?clip_id=9482400&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>Losing It Mentally<br />
</strong></p>
<p>This is an article about risks. The last risk I have to contend with is the possibility of losing my motivation. Writing this blog is cathartic. My huge network of friends and family provide a lot of support too. But at the end of the day, it&#8217;s just me in front of a computer GSD (Getting Shit Done).</p>
<p>I&#8217;m still pretty passionate about the project. The game is looking good which helps a lot.  I keep waiting for the day when I wake up and hate my game (I fully expected to be there by now). So far that hasn&#8217;t happened which is either a sign that I&#8217;ve lost all ability to judge my own work, or maybe, just maybe, it&#8217;s actually a fun game.</p>
<p>One thing I didn&#8217;t expect from this endeavor was to learn how to thrive on stress. I found out my wife is pregnant <a href="http://www.bigfatalien.com/wp-content/uploads/2010/02/meSlightlyWorried.jpg"><img class="alignright size-medium wp-image-196" style="border: 2px solid black;" title="GotStuffNeedsDoing" src="http://www.bigfatalien.com/wp-content/uploads/2010/02/meSlightlyWorried-300x225.jpg" alt="" width="300" height="225" /></a>a few weeks after quitting my job (Cool? Yes.  Stressful? Yup). I&#8217;m into this game for a significant portion of our life savings. I haven&#8217;t got a single level completely finished yet.  I&#8217;m living in my in-laws basement and haven&#8217;t seen a sunny day in about 3 months now (that&#8217;s no exaggeration, winters high-up in the Okanogan Valley are very cloudy). Extraneous expenditures have been cut; no trips to the ski-hills, no hotel weekends and certainly no vacations. No paycheck.  No restaurants nearby. And the neighbor dogs keep attacking ours.</p>
<p>But despite all that, I&#8217;m having a great time. Working on this game is a joy for me. Getting to know my wife&#8217;s family better has been awesome (they are all reasonable, fun people which makes all the difference). And the thought of having a baby on the way is just a little more fire under my ass. Ain&#8217;t no thing but a chicken wing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=191</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My &#8220;Must-Have&#8221; Software Applications</title>
		<link>http://www.bigfatalien.com/?p=181</link>
		<comments>http://www.bigfatalien.com/?p=181#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:35:19 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Gaming General]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=181</guid>
		<description><![CDATA[I use a lot of software in the process of making BEEP. Just for kicks, I thought I&#8217;d take a stab at enumerating them:

Commercial Software:

 Autodesk Maya &#8211; digital content creation
 Beepa Fraps &#8211; recording OpenGL viewport
 Microsoft Windows XP/Vista/7  &#8211; yeah, I need all of em

Open-Source Software:

 Audacity - for audio editing / [...]]]></description>
			<content:encoded><![CDATA[<p>I use a lot of software in the process of making BEEP. Just for kicks, I thought I&#8217;d take a stab at enumerating them:</p>
<p><span id="more-181"></span></p>
<p><strong>Commercial Software:</strong></p>
<ul>
<li> <a title="Maya" href="http://usa.autodesk.com/adsk/servlet/pc/index?id=13577897&amp;siteID=123112" target="_blank">Autodesk Maya</a> &#8211; digital content creation</li>
<li> <a title="Fraps" href="http://www.fraps.com/" target="_blank">Beepa Fraps</a> &#8211; recording OpenGL viewport</li>
<li> <a title="Windows" href="http://www.microsoft.com/WINDOWS/" target="_blank">Microsoft Windows</a> XP/Vista/7  &#8211; yeah, I need all of em</li>
</ul>
<p><strong>Open-Source Software:</strong></p>
<ul>
<li> <a title="Audacity" href="http://audacity.sourceforge.net/" target="_blank">Audacity </a>- for audio editing / recording</li>
<li><a title="Firefox" href="http://www.mozilla.com/en-US/firefox/personal.html" target="_blank">Firefox</a> &#8211; internet browsing / operating system</li>
<li><a title="Open Office" href="http://www.openoffice.org/" target="_blank">Open Office</a> &#8211; word processing / spreadsheets</li>
<li> <a title="Ubuntu" href="http://www.ubuntu.com/" target="_blank">Ubuntu Linux</a> &#8211; for compiling/programming</li>
<li><a title="gcc" href="http://gcc.gnu.org/" target="_self">gcc</a> &#8211; my C++ compiler</li>
<li> <a title="SciTE" href="http://www.scintilla.org/SciTE.html" target="_blank">SciTE </a>- text editing in windows</li>
<li> <a title="Code::Blocks" href="http://www.codeblocks.org/" target="_blank">Code::Blocks</a> &#8211; programming IDE</li>
<li><a title="VLC" href="http://www.videolan.org/vlc/" target="_blank">VLC Player</a> &#8211; multimedia playback</li>
<li><a title="Flyspray" href="http://flyspray.org/" target="_blank">Flyspray</a> &#8211; project management / bug tracking</li>
<li><a title="Gimp" href="http://www.gimp.org/" target="_blank">Gimp</a> &#8211; 2d image editing</li>
<li><a title="Inkscape" href="http://www.inkscape.org/" target="_blank">InkScape</a> &#8211; 2d vector art (all of BEEP&#8217;s art is done in InkScape)</li>
<li><a title="SpeedCrunch" href="http://speedcrunch.org/en_US/index.html" target="_blank">SpeedCrunch</a> &#8211; a handy general calculator program</li>
</ul>
<p><strong>Online Software:</strong></p>
<ul>
<li> <a title="Gmail" href="http://www.gmail.com" target="_blank">Gmail</a> &#8211; email</li>
<li> <a title="Facebook" href="http://www.facebook.com" target="_blank">Facebook</a> &#8211; marketing</li>
<li> <a title="Twitter" href="http://www.twitter.com" target="_blank">Twitter</a> &#8211; marketing</li>
<li> <a title="Wordpress" href="http://wordpress.com/" target="_blank">Wordpress</a> &#8211; this blog</li>
<li><a title="Dropbox" href="http://www.dropbox.com" target="_self">Dropbox</a> &#8211; online backup storage</li>
<li><a title="Vimeo" href="http://www.vimeo.com" target="_blank">Vimeo</a> &#8211; online video storage</li>
<li><a title="Google Analytics" href="http://www.google.com/analytics/" target="_blank">Google Analytics</a> &#8211; awesome web statistics</li>
<li><a href="http://www.google.com">Google Search</a> &#8211; research, research, research</li>
</ul>
<p>Hopefully you found something you can use. I&#8217;m a bit obsessive about finding the right tool for the job so you can be assured these are all descent-to-excellent applications.</p>
<p>Interesting how short the list of commercial applications is! But Maya costs enough to feed a small country so you can&#8217;t accuse me of being anti-capitalism! (And no, Blender is not a viable free alternative to Maya. It&#8217;s just not.)</p>
<p>Am I using something dumb? Missing something obvious? Let me know in the comments below&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=181</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A Simple C++ Finite State Machine</title>
		<link>http://www.bigfatalien.com/?p=125</link>
		<comments>http://www.bigfatalien.com/?p=125#comments</comments>
		<pubDate>Tue, 12 Jan 2010 23:08:58 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=125</guid>
		<description><![CDATA[I thought it might be nice to share a snippet of code that has worked out really well for me over the past few months. I use it literally everywhere throughout the codebase of my videogame BEEP (AI, UI, Audio etc&#8230;). It&#8217;s a simple, extensible, portable finite state machine written in C++.

According to Wikipedia, a [...]]]></description>
			<content:encoded><![CDATA[<p>I thought it might be nice to share a snippet of code that has worked out really well for me over the past few months. I use it literally everywhere throughout the codebase of my videogame BEEP (AI, UI, Audio etc&#8230;). It&#8217;s a simple, extensible, portable finite state machine written in C++.</p>
<p><span id="more-125"></span></p>
<p>According to Wikipedia, a <a title="Wikipedia Finite State Machine" href="http://en.wikipedia.org/wiki/Finite_state_machine" target="_blank">finite state machine</a> is:</p>
<blockquote><p>a model of behavior composed of a finite number of <a title="State (computer science)" href="http://en.wikipedia.org/wiki/State_%28computer_science%29">states</a>, transitions between those states, and actions.</p></blockquote>
<p>State machines are literally everywhere in almost every kind of software. Videogames take them to a whole new level with additional models like Heirarchical Finite State Machines and Decision Trees.</p>
<p>But often times, you just want a plain old vanilla state machine with the ability to:</p>
<ol>
<li>Perform actions within the current state.</li>
<li>Transition to any other state from the current state.</li>
<li>Perform exit and enter actions during a transition.</li>
</ol>
<p>That&#8217;s about as simple as a FSM gets. What follows is my attempt at creating an extensible and simple FSM that can literally be used anywhere you need it and on any platform (Win/MacOS/Linux).</p>
<p>It works like this: there are two objects, finite state machines (FSM) and states (FSMState). A state machine contains a collection of states within it (I&#8217;m using std::vector to store the states which are first wrapped in an std::tr1:shared_ptr so you don&#8217;t have to worry about garbage collection).</p>
<p>So the first step in setting this up is to sub-class FSMState to create new state type for each state in your machine. An enemy AI, for example, might have IdleState, ChaseState, AttackState and DeadState. Each state has an Update() function that performs actions when the FSM is in that state. It also has a OnENTER() and OnEXIT() functions that can be overidden to perform anything you like when the state is first entered, or when it exits.</p>
<p>When FSM::Update() is called, the current state in the machine has it&#8217;s Update() function called which will perform the actions for that state and possibly trigger a transition. If a transition is triggered, the FSM will automatically call the DoEXIT() and DOENTER() functions for the old and new states respectively.</p>
<h2>Getting Started:</h2>
<p>To setup the FSM:</p>
<ol>
<li>At the top of your C++ source: #include &lt;FSM.h&gt;</li>
<li>Create a new state machine: FSM *myFSM = new FSM();</li>
<li>Create a bunch of FSMState sub-classes (your states).</li>
<li>Add each states to your FSM like this: myFSM::AddState();</li>
</ol>
<p>Once the FSM is setup, just call myFSM::Update() to keep the machine running!</p>
<p><strong>NOTE:</strong> <em>One trick here, I&#8217;m using the Boost shared pointer implimention to store the states. This is NOT a part of the C++ standard, but seems to be ubiquitous in it&#8217;s adoption and usage in the industry. In order to use it, you will have to download and include these libraries (not a difficult task). Hopefully this inclusion doesn&#8217;t disqualify this code as being &#8217;simple&#8217;.</em></p>
<h4>FSM.H</h4>
<pre><code>//FSM.h
#ifndef FSM_H
#define FSM_H

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;memory&gt;

class FSM;

//An individual state (must belong to a FSM)
//This is an abstract class and must be sub-classed
class FSMState
{
public:
  FSMState(){};
  FSMState(FSM *fsm){};
  virtual ~FSMState(){};
  virtual void Update(const float&amp; dt) = 0;
  virtual void DoENTER(){};
  virtual void DoEXIT(){};

  std::string stateName;  //used to switch between states
  FSM *fsm;
};

//A vector of shared pointers housing all the states in the machine
typedef std::vector&lt; std::tr1::shared_ptr&lt;FSMState&gt; &gt; StateBank;

//---------------------------------------
//A Simple Finite State Machine
class FSM
{
public:
  FSM();
  ~FSM();
  void Update(const float&amp; dt);

  void TransitionTo(std::string stateName);
  void DelayTransitionTo(std::string stateName);
  void AddState(FSMState *newState, bool makeCurrent);
  std::string GetState();

public:
  FSMState *currentState;
  std::string delayState;

   //Bank to house list of states
  StateBank stateBank;
  std::vector&lt; std::tr1::shared_ptr&lt;FSMState&gt; &gt;::iterator iter;
};

#endif</code></pre>
<h4>FSM.cpp</h4>
<pre><code>//FSM.cpp
#include "FSM.h"

//Constructor
FSM::FSM()
{
  currentState = NULL;
  delayState = "NONE";
}

//Destructor
FSM::~FSM()
{
  stateBank.clear();
}

//Update each tick
void FSM::Update(const float&amp; dt)
{
  //Make sure a current state is loaded
  if (currentState == NULL) return;

  //Check if there are any delayed transition requests
  if (delayState != "NONE")
  {
    TransitionTo(delayState);
    delayState = "NONE";
  }

  //Update the current state, may trigger a transition.
  currentState-&gt;Update(dt);
}

//Called to transition to another state
//@param stateName the name of the state to transition to
void FSM::TransitionTo(std::string stateName)
{
  //Find the named state
  FSMState *goToState = NULL;
  for(iter= stateBank.begin(); iter!= stateBank.end(); iter++)
    if ( (*iter)-&gt;stateName == stateName )
      goToState = iter-&gt;get();

  //Error, trying to transition to a non-existant state
  if (goToState == NULL)
  {
    //Print an error here, or assert if you want
    return;
  }

  currentState-&gt;DoEXIT();
  goToState-&gt;DoENTER();
  currentState = goToState;
}

//Transition to another state (delayed until beginning of next update)
//@param stateName the name of the state to transition to
void FSM::DelayTransitionTo(std::string stateName)
{
  delayState = stateName;
}

//Add a state to the bank, optionally make it the current state
//@param newState the new state to add to the state machine
//@param makeCurrent is this new state the current state?
void FSM::AddState(FSMState *newState, bool makeCurrent)
{
  //Add this state to the FSM
  std::tr1::shared_ptr&lt;FSMState&gt; newStatePtr(newState);
  stateBank.push_back(newStatePtr);
  //Make this the current state?
  if (makeCurrent) currentState = newState;
}

//What is the name of the current state?
std::string FSM::GetState()
{
  return currentState-&gt;stateName;
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=125</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BEEP Preview Video</title>
		<link>http://www.bigfatalien.com/?p=118</link>
		<comments>http://www.bigfatalien.com/?p=118#comments</comments>
		<pubDate>Fri, 08 Jan 2010 18:33:29 +0000</pubDate>
		<dc:creator>kiaran</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[BEEP]]></category>

		<guid isPermaLink="false">http://www.bigfatalien.com/?p=118</guid>
		<description><![CDATA[In the interest of sharing the development of BEEP with friends and fans,  I found some time today to put together a little demo video demonstrating the current state of the game.
What you  see in the video is definitely an &#8216;alpha&#8217; build. There are lots of missing features, (notice the complete lack of sound [...]]]></description>
			<content:encoded><![CDATA[<p>In the interest of sharing the development of BEEP with friends and fans,  I found some time today to put together a little demo video demonstrating the current state of the game.</p>
<p><span id="more-118"></span>What you  see in the video is definitely an &#8216;alpha&#8217; build. There are lots of missing features, (notice the complete lack of sound effects) but I think for the first time you can get a taste of the type of game we&#8217;re going for.</p>
<p>This is a quick play-through of a world we call  &#8220;Rolling Hills&#8221;. It&#8217;s a bouncy, safe-looking environment that acts as an introduction to the character and controls. Once established, the player will be gradually forced into increasingly sinister environments.</p>
<p>As always, feedback is welcome!</p>
<p><code><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8611855&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=8611855&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object> </code></p>
<p><a href="http://vimeo.com/8611855">BEEP Game Alpha Preview</a> from <a href="http://vimeo.com/user2930698">Kiaran Ritchie</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigfatalien.com/?feed=rss2&amp;p=118</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
