<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Video Game Architecture and Other Musings</title>
	<atom:link href="http://genix.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://genix.wordpress.com</link>
	<description>A bit about anything, but mostly video game development</description>
	<lastBuildDate>Sat, 31 May 2008 04:13:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='genix.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Video Game Architecture and Other Musings</title>
		<link>http://genix.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://genix.wordpress.com/osd.xml" title="Video Game Architecture and Other Musings" />
	<atom:link rel='hub' href='http://genix.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Its been a while!</title>
		<link>http://genix.wordpress.com/2008/05/31/its-been-a-while/</link>
		<comments>http://genix.wordpress.com/2008/05/31/its-been-a-while/#comments</comments>
		<pubDate>Sat, 31 May 2008 04:13:38 +0000</pubDate>
		<dc:creator>genix</dc:creator>
				<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://genix.wordpress.com/?p=20</guid>
		<description><![CDATA[No updates in many months. For the first few months of 2008, I lounged around doing nothing in particular. Nearing the end of my cash supply (having left my place of previous employment in October 2007), I was already looking for new opportunity. And it came I have moved to Vancouver to work at another [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=20&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No updates in many months. For the first few months of 2008, I lounged around doing nothing in particular. Nearing the end of my cash supply (having left my place of previous employment in October 2007), I was already looking for new opportunity.</p>
<p>And it came <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I have moved to Vancouver to work at another games company doing some pretty cool stuff. What can I say? Writing games is a passion, and having had a slim taste of IT work (web dev) at the end of 2007, it was an easy decision to stay in video games.</p>
<p>I&#8217;m sure you can find pictures of Vancouver anywhere, but you can check out a few I took <a href="http://picasaweb.google.com/genix79/Vancouver" target="_blank">right here</a>.</p>
<p>Hopefully I&#8217;ll find the enthusiasm to do a big more blogging now that my mind is back on video game development.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/genix.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/genix.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genix.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genix.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genix.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genix.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genix.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genix.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genix.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genix.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=20&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genix.wordpress.com/2008/05/31/its-been-a-while/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9f2332908513c52c62cae76a8ad779d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">genix</media:title>
		</media:content>
	</item>
		<item>
		<title>Moroccan-rubbed Steak and Sweet Potato</title>
		<link>http://genix.wordpress.com/2008/01/05/moroccan-rubbed-steak-and-sweet-potato/</link>
		<comments>http://genix.wordpress.com/2008/01/05/moroccan-rubbed-steak-and-sweet-potato/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 07:30:08 +0000</pubDate>
		<dc:creator>genix</dc:creator>
				<category><![CDATA[food]]></category>
		<category><![CDATA[recipe]]></category>

		<guid isPermaLink="false">http://genix.wordpress.com/2008/01/05/moroccan-rubbed-steak-and-sweet-potato/</guid>
		<description><![CDATA[It was so good, I have to blog this one I think. Having seen a documentary on north-african cuisine over the Christmas holidays, I came back determined to try a recipe. However, I have additionally found out my weight is a bit more than I would like and need to curb that a tad. So [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=19&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It was so good, I have to blog this one I think.</p>
<p>Having seen a documentary on north-african cuisine over the Christmas holidays, I came back determined to try a recipe. However, I have additionally found out my weight is a bit more than I would like and need to curb that a tad. So this recipe really seemed the ticket &#8211; probably not authentic Moroccan, but definately different enough to be a taste I don&#8217;t eat regularly and seemingly healthy (going by ingredients):</p>
<p><a href="http://www.arcamax.com/healthyrecipes/s-200109-860691"> http://www.arcamax.com/healthyrecipes/s-200109-860691 </a></p>
<p>I did a few adjustments, and the result was scotch fillet steak with kumara as the sweet potato. The greens you see in the picture are home-grown by my flatmate, and were simply seasoned by orange juice from the orange which supplied the grated orange rind.</p>
<p><b>Steps I used:</b></p>
<p>Grind 1 tsp allspice, 1 tsp cumin seed, 1 tsp ginger, 1 tsp sea salt (rocky, not processed), 1/2 tsp cinnamon, 1/2 tsp coriander, 1/2 tsp cayenne pepper as finely as you can.<br />
Rub 1 tsp of spice into the scotch fillet steaks (both sides) and let stand for half an hour (Im not a chef by any stretch, but presumed this might infuse the flavour)<br />
Peel the kumara, and slice into half-inch wide slices. Finely slice a couple of red onions. Grate a tsp of orange rind.<br />
Add a splash of oil to a bowl, and mix the kumara slices and onion with orange rind and some of the spice mixed in step 1.<br />
Place the contents of the bowl into tinfoil wrap and put in oven at 200 celcius for 35 minutes.<br />
Fry the steaks on a medium to low heat until tender and slightly pink on the inside.<br />
Let the steaks simmer on a low heat for a few minutes when done, then serve with the kumara concoction  hot from the oven.</p>
<p>Note that the amounts for the spices left me with a fair bit. I reckon I could do another one of these with the left-over spices. The meal I made served 2, but the original recipe I was copying served 4. In hind sight, I should have halved all the spices used <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><b>Net result:</b></p>
<p><img src="http://wiki.jon.geek.nz/morroccan-steak.jpeg" alt="Moroccan-rubbed steak" border="2" height="609" width="800" /></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/genix.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/genix.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genix.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genix.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genix.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genix.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genix.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genix.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genix.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genix.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=19&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genix.wordpress.com/2008/01/05/moroccan-rubbed-steak-and-sweet-potato/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9f2332908513c52c62cae76a8ad779d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">genix</media:title>
		</media:content>

		<media:content url="http://wiki.jon.geek.nz/morroccan-steak.jpeg" medium="image">
			<media:title type="html">Moroccan-rubbed steak</media:title>
		</media:content>
	</item>
		<item>
		<title>And what an excellent trip it was!</title>
		<link>http://genix.wordpress.com/2007/11/08/and-what-an-excellent-trip-it-was/</link>
		<comments>http://genix.wordpress.com/2007/11/08/and-what-an-excellent-trip-it-was/#comments</comments>
		<pubDate>Thu, 08 Nov 2007 01:03:37 +0000</pubDate>
		<dc:creator>genix</dc:creator>
				<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://genix.wordpress.com/2007/11/08/and-what-an-excellent-trip-it-was/</guid>
		<description><![CDATA[Europe on a shoe-string! At least accommodation wise. Its a good feeling to be finally back home. Germany, Denmark, England (well, just London really), and Iceland! Its an unusual mix for this time of year given New Zealand is heading into summer, and I&#8217;ve just gone to a number of countries which are getting colder [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=18&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Europe on a shoe-string! At least accommodation wise.</p>
<p>Its a good feeling to be finally back home. Germany, Denmark, England (well, just London really), and Iceland! Its an unusual mix for this time of year given New Zealand is heading into summer, and I&#8217;ve just gone to a number of countries which are getting colder right now. Certainly Iceland was the icing on the cake (pun intended) and ground temperature at time of landing was 3 degrees celcius. A vicious wind with what was seemingly sleet kept my blood from flowing.</p>
<p>I&#8217;d caution anyone planning on visiting europe to consider a few things which got me by surprise from the countries I was in:</p>
<ul>
<li>In Germany, many of the public toilets cost money. Seemingly between 30 and 80 euro cents. Learn to not leave your place of accommodation without emptying out first!</li>
<li>additionally, not all places seem to have toilets in Germany (compared to NZ where any place serving food/drink, or any service station will have a toilet)</li>
<li>Im still unsure of the proper protocol, but restaurant waiters don&#8217;t pop by at regular intervals to check up on you. You&#8217;ll need to awkwardly catch their attention to get service, and you won&#8217;t get the bill unless you explicitly ask for it (even if you have finished and all your dishes have been cleared from the table).</li>
<li>I suspect many places don&#8217;t like the English very much, and like to see you squirm. Don&#8217;t let them make the situation awkward, and if you&#8217;re not from Britain, helpfulness can improve markedly if they find this out.</li>
</ul>
<p>I&#8217;m sure that last point may offend some folks, but essentially its true. Had a few people roll their eyes and make some comments about British tourists when the found out I wasn&#8217;t from those parts, but to mirror that I was in a queue at Heathrow where an English woman made a comment about &#8216;the mentality they have there&#8217; (talking about scandinavia).</p>
<p>Maybe I just bumped into the right (wrong?) people to give me this impression!</p>
<p>Still, it was an awesome trip and I&#8217;d happily do it again next year if it weren&#8217;t for  the obscene cost in going anywhere besides Australia from New Zealand.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/genix.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/genix.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genix.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genix.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genix.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genix.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genix.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genix.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genix.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genix.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=18&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genix.wordpress.com/2007/11/08/and-what-an-excellent-trip-it-was/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9f2332908513c52c62cae76a8ad779d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">genix</media:title>
		</media:content>
	</item>
		<item>
		<title>Almost time for a holiday!</title>
		<link>http://genix.wordpress.com/2007/09/30/almost-time-for-a-holiday/</link>
		<comments>http://genix.wordpress.com/2007/09/30/almost-time-for-a-holiday/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 13:24:46 +0000</pubDate>
		<dc:creator>genix</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://genix.wordpress.com/2007/09/30/almost-time-for-a-holiday/</guid>
		<description><![CDATA[Random non-rant non-work related post! In slightly under 2 weeks I shall be flying off on a long-awaited holiday. It will be my first trip to Europe. I am actually starting to look forward to it again. For what seemed the longest time I endured the slump between initially deciding, booking tickets and looking into [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=17&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Random non-rant non-work related post! In slightly under 2 weeks I shall be flying off on a long-awaited holiday. It will be my first trip to Europe.</p>
<p>I am actually starting to look forward to it again. For what seemed the longest time I endured the slump between initially deciding, booking tickets and looking into it, and reaching the final countdown. I&#8217;ll be taking it easy spending a week or so in Germany, a week in Denmark, hopefully get to skip to Norway for a day or two before making my way to London to catch a flight over to Iceland.</p>
<p>The tail end of the holiday in Iceland is intended to be the icing on the cake! I shall be geeking it out at <a href="http://www.eve-online.com/fanfest/2007/" target="_blank">EVE Fanfest 2007</a>  and actually staying in a Hotel for that part. The rest of it is, unfortunately, going to be done on the cheap! Hostels and dodgy backpackers here I come.</p>
<p>Luckily I shall be traveling with a friend to help sort out the confusion. At least if I&#8217;m sleeping in the gutter somewhere, I wont be alone <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In other news, I have resigned from my job of the last 6.5 years as Lead Programmer on a variety of titles for <a href="http://www.sidheinteractive.com/" target="_blank">Sidhe Interactive</a>. I guess at some point everyone needs a change, and this holiday is intended to be the much-needed break between the old and new. The &#8216;new&#8217; in this case has yet to be decided! I finish up work the day before I fly out for my European holiday&#8230;  its going to be a hectic next couple of weeks.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/genix.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/genix.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genix.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genix.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genix.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genix.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genix.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genix.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genix.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genix.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=17&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genix.wordpress.com/2007/09/30/almost-time-for-a-holiday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9f2332908513c52c62cae76a8ad779d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">genix</media:title>
		</media:content>
	</item>
		<item>
		<title>Its Easy Once Its Going: Of Beginnings and Endings</title>
		<link>http://genix.wordpress.com/2007/08/30/its-easy-once-its-going-of-beginnings-and-endings/</link>
		<comments>http://genix.wordpress.com/2007/08/30/its-easy-once-its-going-of-beginnings-and-endings/#comments</comments>
		<pubDate>Wed, 29 Aug 2007 12:13:14 +0000</pubDate>
		<dc:creator>genix</dc:creator>
				<category><![CDATA[communication]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://genix.wordpress.com/2007/08/30/its-easy-once-its-going-of-beginnings-and-endings/</guid>
		<description><![CDATA[I often wonder about the challenges of videogame programming. Most people seem to assume the real key lies in domain specific knowledge. Are you some super math whizz? Can you read straight assembler like it were a book? Can you code learning AI which takes advanced statistical analysis of the battlefield into account? Because if [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=16&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I often wonder about the challenges of videogame programming. Most people seem to assume the real key lies in domain specific knowledge. Are you some super math whizz? Can you read straight assembler like it were a book? Can you code learning AI which takes advanced statistical analysis of the battlefield into account? Because if you can do that, the common belief goes that you would be able to write the most awesome game!</p>
<p>Ofcourse you know as well as I that it is all smoke and mirrors. Most of a game can be written by people who know how to use matrices, but don&#8217;t understand them. Most of a game can be written by people who would be dumbfounded if they saw assembler. Most of a game can be written with only the most basic of AI models. I will make a partial  exception here for programming on consoles as the limited nature of their hardware introduces a number of logistical issues with regard to: memory allocation, memory fragmentation, very slow load times from storage media, and unforgiving performance hits when blowing instruction/data caches. However, I&#8217;d like to make it only a &#8216;partial exception&#8217; on the grounds that the aforementioned is akin to understanding your target environment (which would be the same for any programming) more so than knowledge specific to creating games.</p>
<p>So, if you don&#8217;t need a large amount of domain specific knowledge when it comes to game algorithms, and neither do you need to be some super whizz to create a polished game&#8230; then where do the challenges come in?</p>
<p>While there are a number of things I have realised, I suppose there are two key points that I&#8217;d like to make mention of here. Maybe you&#8217;re reading this because you are about to embark on a game project. If so, then let me at least raise these thoughts to your conscious mind because strangely enough its not always clear what the causes are for frustrations later in the project. Perhaps this will spur you into thinking of techniques to address the issues.</p>
<p><strong>1) Getting the Ball Rolling</strong></p>
<p>Most games it seems start with the &#8216;game phase&#8217;. The bit where the player interacts and invokes the core game mechanics (moving, shooting, collecting things, etc.). After some time, the environment gets fleshed out and bits of a HUD start to appear. Eventually menu&#8217;s come into the picture &#8211; often the pause menu first as that houses &#8216;restart&#8217; and other handy features.</p>
<p>Now, the problem as I see it lies in the foundations. Or lack thereof. You wouldn&#8217;t inline all your render calls in the middle of arbitrary functions (or at least you might have, and if so I&#8217;m guessing you just wrote your first game outside of a commercial environment). You wouldn&#8217;t  write a bunch of network code to transmit data for each object if you hadn&#8217;t already laid down the framework for getting a connection and managing peers.</p>
<p>In a similar way, you shouldn&#8217;t write the actual playable game without the framework that it would fit in.</p>
<p>Say what?</p>
<p>At some point your game is going to have to transition from a menu, and into a state where it can begin. Because it has always been programmed with a hacked up initialisation which ensured that by the time the application started running its main update loop, the game was already in a running state and it&#8217;s quite difficult to then make the application aware of non-game states (such as the main menu).</p>
<p>Typically the transition phase from a newly added menu to the ingame is the most flaky, error intolerant,  and poorly architected part of the game. Whole chunks of memory can be left hanging, handles left open, and hacks to get loaded save games to correctly restore state abound.</p>
<p>Once the game is actually setup, objects are instantiated, a render or two has been called, and some &#8216;fake updates&#8217; to get objects to set state before the physics/ai/whatever runs, then its usually solid. After that, its into a well-tested predictable state which has been worked on since the birth of the project.</p>
<p>I know this well. I only had to make this mistake in my approach to code once before I realised it, luckily.</p>
<p>The solution, ofcourse, is to lay the groundwork for the game phase before you begin work on it. Know that you&#8217;re going to need special &#8216;loading&#8217; phases, menu phases, and maybe areas where network connectivity will be active. Put something basic in place before you write a single line of code toward giving the player an object or reading his input. Just a day taken to do something up front can save a lot of headache later.</p>
<p><strong>2) One Frame Glitches</strong></p>
<p>A personal hate of one of my bosses.  This is usually apparent when games change camera views, flick in and out of cutscenes, or experience large time delta&#8217;s due to pauses for loading or similar. The effect is usually that of the scene being very rapidly &#8216;set up&#8217; over the course of 1 or 2 frames. The cause? Update dependencies between objects or systems.</p>
<p>On projects which involve code teams larger than 2 or 3 people, these sorts of things crop up fairly often.  Without the coherency of a single mind divising the code (or least so few minds as to allow each to know everything the others are doing), there will be dependencies between objects which are not made explicit. At some point these inconsistencies boil to the surface.</p>
<p>It may be as simple as a few disparate decisions which were made &#8211; each seemingly quite simple &#8211; but together, they cause mayhem. For example, lets imagine each update the game object just transfers its local state to its physics representation in a 3rd party physics library. Someone sticks this in the objects Update() or similar function and all seems good. A few cached transforms for the graphics render need to be kept, so the graphics guy adds in some calculation and caching where the physics guy put his code because the rationale is: if the object is moving, I&#8217;ll need to recalculate these.</p>
<p>Next thing a separate programmer was adding inter-object interactions, which means a second object can modify the velocity of another. Nobody notices that if one object is updated after the one it affects, then it takes one additional update to propagate the physics change.</p>
<p>Still later an AI programmer is getting a smart object to intercept another. It does this by looking at the physics representation because he wishes their physics volumes to aim at each other for a collision. The AI seems to pretty much work fine &#8211; a bit of on screen debug output looks accurate, and the objects are colliding.</p>
<p>Lastly someone adds in a teleporter. Suddenly strange and wierd things are happening. The camera changes to show the first frame of a new scene which doesnt have all objects in the right places. Nobody quite knows why, but it seems a very small thing so it gets ignored.</p>
<p>Move forward to the end of the project and suddenly these small things are priorities. Somebody investigates.</p>
<p>What they find turns out to be quite a can of worms!</p>
<p>It seems that the teleporter got updated after the player object. A decision made early on meant objects have their own code for changing the player object&#8217;s state. This means the teleporter detects the collision and sends the player object off to another part of the world. However the graphics and the physics for the player have not had this propagated to them yet! Now the camera has started its fancy shake at the &#8216;exit&#8217; for the wormhole which seemed pretty cool &#8211; only for one frame the player&#8217;s character is not there.</p>
<p>Furthermore, the local AI objects in the area suddenly wake up because they&#8217;ve all been triggered by the player warping in. However, when they query his physics position &#8211; its still back at the teleporter&#8230; so they decide to head in that direction. At least for a second or two until their next &#8216;think()&#8217; is called.</p>
<p>Yes, its a trivial example. However, this kind of thing happens a lot on a large project. All a project needs to do is exceed the ability for the people working on it to keep the entire thing in their heads at once, and voila!  Things get out of sync, rare crashes happen, and hacks start to abound.</p>
<p>Changing the order of updates or modifying the base code seems way too risky by this point! So what to people do? Add extra Update() calls, extra Render() calls, and write special case code where teleporters might iterate over all objects which are not teleporters and Update() them when something teleports. This in turn causes an unusually large amount of execution on this one particular frame, and can be noticeable on limited hardware devices (pocketpc&#8217;s, phones, etc).</p>
<p><strong>Conclusion?</strong></p>
<p>There is no silver bullet. Unforunately. However you can take measures to allieviate the pain when you consciously realise that there are going to be these sorts of issues.</p>
<p>1) Communication! Documentation! Write comments that make it plain there will be a frame or two &#8216;propagation delay&#8217;. Make the update order for the application explicit so that everyone on the team knows the broad overview of how things are planned to tie together. Who knows &#8211; maybe you end up taking a break and need to pick up the project after you&#8217;ve forgotten the specifics. How good would it be to see reminders for class and function responsibilities!</p>
<p>2) It always pays to consider the whole. If you&#8217;re making a game, brainstorm all the software bits you expect to need &#8211; including a brief mention of installers, 3rd party libraries. Then brainstorm a rough overview of whats in the game &#8211; even if its not accurate, at least provision for the core items will hopefully see a more flexible framework which will accommodate unknowns without too much pain.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/genix.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/genix.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genix.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genix.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genix.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genix.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genix.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genix.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genix.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genix.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genix.wordpress.com&amp;blog=1214231&amp;post=16&amp;subd=genix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genix.wordpress.com/2007/08/30/its-easy-once-its-going-of-beginnings-and-endings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9f2332908513c52c62cae76a8ad779d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">genix</media:title>
		</media:content>
	</item>
	</channel>
</rss>
