<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel rdf:about="http://feeds.garagegames.com/rss/blogs/developer/27414/">
		<title>Blog for Craig Fortune at GarageGames.com</title>
		<description>Blog feeds for Gamers and Developers in the GarageGames community.</description>
		<link>http://www.garagegames.com/</link>
		<image rdf:resource="http://www.garagegames.com/images/GarageGames_logo_small_w.gif" />
		<dc:date>2008-11-21T09:42:00+00:00</dc:date>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/15239"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/15118"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/13985"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/13134"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/13125"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/12449"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/12412"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/12357"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/12272"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/27414/11066"/>
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://www.garagegames.com/blogs/27414/15239">
		<dc:format>text/html</dc:format>
		<dc:date>2008-08-08T13:49:35+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>iPhones and Productivity</title>
		<link>http://www.garagegames.com/blogs/27414/15239</link>
		<description>&lt;b&gt;iPhones and Productivity&lt;/b&gt;&lt;br&gt;&lt;br&gt;This week I finally got the new iPhone and so far I'm loving every minute of it. What with the iPhone announcement here on GG I thought I'd share with you some thoughts and general ramblings about the iPhone itself, what it means to indie developers and just how it has, in my opinion, the potential to become a sort of generation-defining device in terms of the concept of &amp;quot;convergent devices&amp;quot;.&lt;br&gt; &lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/aug7th/iphone.jpg'  alt=&quot;&quot;&gt;&lt;br&gt; &lt;br&gt;&lt;b&gt;Apple Keynotes&lt;/b&gt;&lt;br&gt; &lt;br&gt;To put it into some sort context my path to becoming an iPhone owner and (soon to be) developer I'd like to show this picture:&lt;br&gt; &lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/aug7th/keynote.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;(compliments of Gizmodo)&lt;br&gt; &lt;br&gt;Love him or hate him, this guy is a genius. I'm not mac owner, I've been a windows user since I very first got into computing as a kid, but every time I watch one of Apple's keynotes I get this urge to buy everything that Apple can sell to me. In fact, when I have the spare cash a MacBook Pro is going to be the next little member of my desk's ever growing family of gadgets and gizmos.&lt;br&gt; &lt;br&gt;I nearly purchased an iPhone last year, but second guessed myself when I packed in full-time work and went full-time freelance for a while before starting my lecturing work for the winter/spring semester. I was always teetering on the edge of making the final decision to indulge my shackled Apple product-lustings and when the iPhone 3G announcement came earlier this year (well it wasn't exactly hidden before that, but then it wasn't really ever *supposed* to be was it?) during a keynote I knew I wanted it. I wanted it badly. Why?&lt;br&gt; &lt;br&gt;&lt;b&gt;Why iPhone is so good&lt;/b&gt;&lt;br&gt; &lt;br&gt;The iPhone is such a remarkable piece of kit for a number of reasons. The main reasons are not, in my opinion, anything to do with 3G vs Edge, GPS or the stylus-free multi-touch screen. The main thing that makes the iPhone so attractive to many is as per most Apple products, presentation. The way the iPhone seamlessly brings together tasks such as music playing, web browsing, email checking, texting, phoning etc into one tight package that I bet even your likely largely computer illiterate/disinterested elder relatives could, after some tutoring, work their way around, if admittedly not at the pace your good selves would.&lt;br&gt; &lt;br&gt;Convergent devices are all about bringing the ability to perform all your tasks together into one device, and for you to actually GAIN productivity from this and not be hampered by the device not matching or falling short of the ability to perform the intended function. That is a crucial point I feel has been largely missed before the event of the iPhone: the initial mindset to create a do-all device from the ground up rather than do a nasty little mobile OS (*cough* Windows Mobile *cough*) that feels too much like its trying to be a desktop in your hand. Please don't think that because I'm waxing lyrical about the iPhone that I'm green and not as-of-yet battle hardened by Smartphones/PDAs, when my iPhone arrived I finally got to retire my rather battered and bruised XDA (Obviously on Windows Mobile), which was even at one point serving as a SatNav for my Motorbike. It got a beating :)&lt;br&gt; &lt;br&gt;Anyway, I digress. A do-all device has to predict what is to be expected of it, as much as developers for it have to align their thinking to focus around what it CAN do rather than what it CAN'T do. I've seen on forums (here and elsewhere) people saying &amp;quot;iPhone sucks, you can't do X&amp;quot;, &amp;quot;how would you do X? omg lame&amp;quot; and so on. The truth is, as you well know, these people have totally the wrong mindset. Tackling iPhone development is all about grass roots design as far as I'm concerned. Don't think about pre-existing beliefs you have with how input systems etc should work, throw them out of the window and utilise what the iPhone gives to you. Don't try to fudge it into something its not, just for the sake of familiarity - that denies innovation the chance to come to fruition. Do away with menu systems, instead, have things work in context, present your content as, well, the content. Don't have your app/app interaction as the main thing and your actual content as a side liner.&lt;br&gt; &lt;br&gt;Presentation is everything in today's age, presentation is just a parallel term to marketing. Everything in marketing is about how to get your product/information/content out there. We live in a highly market driven time, even more so with the credit crunch. Reassess and realign your development to match this. the iPhone app store allows you to get any type/size of app out there to pretty much any iPhone user should they happen to load up the app store. Plus, 70% royalties is a damn good deal! :)&lt;br&gt; &lt;br&gt;Enough, I'll move on before too many of you get bored with my presentation of this content, hehe.&lt;br&gt; &lt;br&gt;&lt;b&gt;Productivity&lt;/b&gt;&lt;br&gt; &lt;br&gt;Productivity as mentioned before, or rather increasing productivity, (whether it be via cloud computing, convergence-type devices and so on) is the in-thing at the moment. It seems everywhere you go there is some other way of improving your productivity and ultimately saving you time by providing content to you in different ways. Weirdly enough until somewhat recently I've never been into all that jazz. I've always found myself rather reluctant to sign up to rss feeds of news and blogs and be &amp;quot;fed&amp;quot; information rather than going out and getting the information I want, when I want. Don't ask me why I was in that mindset, because I honestly couldn't give you an answer. It was irrational, it was daft, it was probably a bad choice.&lt;br&gt; &lt;br&gt;My move over to the &amp;quot;content-spoon-fed&amp;quot; masses happened by chance. I decided it was time for a backup and format of my desktop PC. Upon the obligatory post windows reinstall sessions of downloading all the new versions of apps you use regularly, but can never be bothered to say &amp;quot;yes&amp;quot; to allow them to update themselves, I happened upon Google Gadgets. I'd never used Google Gadgets before, nor had I really known much about them. It was bundled with a FireFox download, so I thought what the hey, it's bound to be something good, it's Google after all!&lt;br&gt; &lt;br&gt;I was right. Google gadgets is a great little time saver. I have a nice straight forward music player, ebay watching gadget, to-do list, note taker, gmail checker and a weather checker all sat on my second monitor. If you don't use google gadgets already, give them a shot. I'm not a Vista user but I've been told Google Gadgets are just a hole load nicer than the Vista alternative.&lt;br&gt; &lt;br&gt;Talking about productivity and different ways to work, I'm actually even writing this on Google Docs. Funny how once you start changing the way you work you end up TOTALLY changing it!&lt;br&gt; &lt;br&gt;&lt;b&gt;iAvoid&lt;/b&gt;&lt;br&gt; &lt;br&gt;To finish off with (*hears sighs of relief*) I thought I'd show a little picture of a game I'm developing especially for iPhone. Currently I'm just calling it &amp;quot;iAvoid&amp;quot; for lack of anything better at the moment. It's developed in TGB and is solely script changes so I can port it over to Torque for iPhone easy-as-pie later down the line. Basically you control the green object around the screen bashing &amp;quot;attacking&amp;quot; objects away to keep them away from the centre area. Ultimately you'll tilt the iPhone around to control the player object, but now it follows the cursor with some lag to sort of simulate this. There's a few other cool little things that I'll cover in another .plan too - Oh, and excuse the graphics they are placeholder ;)&lt;br&gt; &lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/aug7th/iAvoid.png'  alt=&quot;&quot;&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;If you've read this far, thank you :)&lt;br&gt;-Craig&lt;br&gt;&lt;br&gt;&lt;br&gt;edit: typos etc, the norm</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/15118">
		<dc:format>text/html</dc:format>
		<dc:date>2008-07-22T21:48:17+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Building community in purely single player games</title>
		<link>http://www.garagegames.com/blogs/27414/15118</link>
		<description>Building community is an important way to get people playing, and keep playing, your game. I was thinking about a way to create this sort of community for some games I'm working on and after playing a few little flash games scattered all around the net I realized I was playing them again and again, just to get myself up the leader boards a little bit.&lt;br&gt;&lt;br&gt;I like to call these &amp;quot;One more go&amp;quot; games, meaning that no matter how many attempts you have, you always want that one extra turn to try and improve your ranking on the scoreboards. A prime example is this game: [url=http://www.miniclip.com/games/monkey-kick-off/en/ ]Monkey Kick Off[/url] I always find myself trying to get a better score as the minutes continually slide off the clock on the wall at an alarming rate. As an aside, my best is actually 5037 not as shown in the image - Yes I have seen the amazing vistas of Monkey Village and beyond! :D&lt;br&gt;&lt;br&gt;Taking away the uber-simplistic (yet very fun I find) game play dynamics why does this game have any relevance to building community? Pretty simply really, it has a leader board. That's it. Community doesn't have to mean chat rooms and forums and communication etc, it can be as simple as putting them in contact with other player's scores and letting them &amp;quot;compete&amp;quot; against one another.&lt;br&gt;&lt;br&gt;&lt;b&gt;This picture has nothing to do with this .plan, its just that otherwise its a picture-less .plan... :)&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://craigfortune.co.uk/randomShite/dave-button.PNG'  alt=&quot;&quot;&gt;&lt;br&gt;It's a character called &amp;quot;Dave&amp;quot; from a little game I'm making with a mate. Anyway...&lt;br&gt;&lt;br&gt;&lt;b&gt;So why the rambling?&lt;/b&gt;&lt;br&gt;&lt;br&gt;Off the back off this &amp;quot;research&amp;quot; (That's my word for procrastination, try it for size on your bosses) I decided to implement my own online scoreboard and have TGB send the information gathered (scores + names) up to said scoreboard. I'm no database and website guy so I actually searched around for a bit on GG and elsewhere for the know-how to go about doing this. Turns out, it so damn simple that anyone whose head doesn't make a rattling noise when they nod should be able to do it. The following is a step-by-step guide to setting up your own scoreboard. It's a collection of the information I found in tutorials and on the GG forums, so I'm not claiming it's all mine by any stretch of the imagination.&lt;br&gt;&lt;br&gt;If you don't understand some of the terms etc being used here then you'll find a wealth of information on the net. Google is your friend, it is frequently mine. This is a real &amp;quot;bare bones&amp;quot; implementation and shouldn't be considered a final usable thing.&lt;br&gt;&lt;br&gt;I will be putting this on TDN also; it's just here so that people who might be interested are more likely to see it.&lt;br&gt; &lt;br&gt;&lt;b&gt;Step 1:&lt;/b&gt;&lt;br&gt;You'll be storing the information in an SQL database, so if you haven't got access to one readily then I suggest you sign up here (its free hosting, so you have nothing to lose :D): http://www.000webhost.com/&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 2:&lt;/b&gt;&lt;br&gt;Setup a SQL database using their control panel systems. You'll want to have a table setup with the following fields:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;id - set it be a smallint type and to auto increment and be the primary key&lt;br&gt;name - set it to be a varchar of a size that is big enough to contain the longest name you expect&lt;br&gt;score - set it to something relevant to your scoring system, for testing I have it as a mediumint&lt;br&gt;dateSubmitted - set it to be a timestamp type and current_timestamp&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;The id setups up a unique identifier for each row entered. The name... that's obvious. The score, again obvious. The dateSubmitted field is used to store when you actually upload the score, it'll fill itself in with the current time that the database considers it to be.&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 3:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Save the following code into a .php file (I suggest something like &amp;quot;scores.php&amp;quot; for the sake of simplicity) and upload it to your webspace. Make sure you have PHP enabled obviously.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;&amp;lt;html&amp;gt;&lt;br&gt;	&amp;lt;head&amp;gt;&lt;br&gt;		&amp;lt;title&amp;gt;Title&amp;lt;/title&amp;gt;&lt;br&gt;	&amp;lt;/head&amp;gt;&lt;br&gt;	&amp;lt;body&amp;gt;&lt;br&gt;	&lt;br&gt;		&amp;lt;?&lt;br&gt;		&lt;br&gt;			$service = &amp;quot;your_hostname_here&amp;quot;;&lt;br&gt;			$username = &amp;quot;your_username_here&amp;quot;;&lt;br&gt;			$password = &amp;quot;your_password_here&amp;quot;;&lt;br&gt;			$database = &amp;quot;your_databasename_here&amp;quot;;&lt;br&gt;			&lt;br&gt;			mysql_connect($service, $username, $password);&lt;br&gt;			@mysql_select_db($database) or die( &amp;quot;Unable to select database&amp;quot;);&lt;br&gt;			&lt;br&gt;			$query = &amp;quot;SELECT * FROM your_table_here ORDER BY score DESC&amp;quot;;&lt;br&gt;			$result = mysql_query($query);&lt;br&gt;			$num = mysql_numrows($result);&lt;br&gt;		&lt;br&gt;		?&amp;gt;&lt;br&gt;		&lt;br&gt;		&amp;lt;table&amp;gt;&lt;br&gt;			&amp;lt;tr class=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Position&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Score&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Date Submitted&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br&gt;		&lt;br&gt;			&amp;lt;?&lt;br&gt;			&lt;br&gt;				$loopindex = 0;&lt;br&gt;				&lt;br&gt;				while ($loopindex &amp;lt; $num)&lt;br&gt;				{	&lt;br&gt;					$thisname = mysql_result($result, $loopindex, &amp;quot;name&amp;quot;);&lt;br&gt;					$thisscore = mysql_result($result, $loopindex, &amp;quot;score&amp;quot;);&lt;br&gt;					$thisdate = mysql_result($result, $loopindex, &amp;quot;datesubmitted&amp;quot;);&lt;br&gt;					$thispos = $loopindex+1;&lt;br&gt;				&lt;br&gt;					echo (&amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td align=left&amp;gt;&amp;lt;p&amp;gt;$thispos&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br&gt;						&amp;lt;td align=center&amp;gt;&amp;lt;p&amp;gt;$thisname&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br&gt;						&amp;lt;td align=center&amp;gt;&amp;lt;p&amp;gt;$thisscore&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br&gt;						&amp;lt;td align=center&amp;gt;&amp;lt;p&amp;gt;$thisdate&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;);&lt;br&gt;					&lt;br&gt;					$loopindex++;&lt;br&gt;				}&lt;br&gt;			&lt;br&gt;			?&amp;gt;&lt;br&gt;	&lt;br&gt;		&amp;lt;/table&amp;gt;&lt;br&gt;	&amp;lt;/body&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;The code above does the following:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;Attempts to connect to a SQL database.&lt;br&gt;Selects everything in the table you specify&lt;br&gt;Orders the rows by descending score&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;Then...&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;Starts to create a table&lt;br&gt;Loops through each row of the data you grabbed from the database and fills in the cells of a table with it&lt;br&gt;Closes table, body and html tags.&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;To summarize, when you load up this page it'll connect to your database and grab the data and then display it. Simple huh?&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 4:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Now for the page which handles uploading...&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;&amp;lt;?&lt;br&gt;	&lt;br&gt;	$name = $_GET['name'];&lt;br&gt;	$score = $_GET['score'];&lt;br&gt;	&lt;br&gt;	$service = &amp;quot;your_hostname_here&amp;quot;;&lt;br&gt;	$username = &amp;quot;your_username_here&amp;quot;;&lt;br&gt;	$password = &amp;quot;your_password_here&amp;quot;;&lt;br&gt;	$database = &amp;quot;your_databasename_here&amp;quot;;&lt;br&gt;&lt;br&gt;	&lt;br&gt;	mysql_connect($service, $username, $password);&lt;br&gt;	@mysql_select_db($database) or die( &amp;quot;Unable to select database&amp;quot;);&lt;br&gt;	&lt;br&gt;	if($name)&lt;br&gt;	{&lt;br&gt;		if($score &amp;gt; 0)&lt;br&gt;		{&lt;br&gt;			$query=&amp;quot;INSERT INTO your_table_here VALUES ('null', '$name', '$score', CURRENT_TIMESTAMP)&amp;quot;;&lt;br&gt;			$result=mysql_query($query);&lt;br&gt;			echo(&amp;quot;replyData Score submitted! Name: $name, Score: $score&amp;quot;);&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;	else&lt;br&gt;	{&lt;br&gt;		echo(&amp;quot;replyData No score was submitted&amp;quot;);&lt;br&gt;	}	&lt;br&gt;?&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;This page again connects to the database but this time there are a few important differences. You'll see we are using $_GET to grab the values of the name and score variables passed to the page. We later check that these actually exist and then INSERT into the database the information like thus:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;$query=&amp;quot;INSERT INTO your_table_here VALUES ('null', '$name', '$score', CURRENT_TIMESTAMP)&amp;quot;;&lt;br&gt;$result=mysql_query($query);&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;If we got the data we wanted (name and score) we echo back:&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;&amp;quot;replyData Score submitted! Name: $name, Score: $score&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;and if not:&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;&amp;quot;replyData No score was submitted&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;You'll see why in the next step ;)&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 5:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Now we need Torque (in this case TGB) to actually send the data over to the scoreUpload page.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;function scoreTest(%name, %score)&lt;br&gt;{&lt;br&gt;   %server = &amp;quot;_hostnamehere_:80&amp;quot;;&lt;br&gt;   %path = &amp;quot;/uploadScore.php&amp;quot;;&lt;br&gt;   %script = &amp;quot;name=&amp;quot; @ %name @ &amp;quot;&amp;amp;score=&amp;quot; @ %score;&lt;br&gt;   &lt;br&gt;   %httpObj = new HTTPObject(scoreUploadHTTPObj);&lt;br&gt;   %httpObj.Get(%server, %path, %script);&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;Not exactly rocket science is it? There are prettier ways to do this, but why bother when you're just trying to show a bare bones concept? Not being a web guy I wasn't really sure if I should be using GET or POST throughout all of this. GET works with the PHP stuff nicely. I like GET. :)&lt;br&gt;&lt;br&gt;First we setup our servername we want to connect to and the relevant path if necessary. The %path part is the page and then %script contains the PHP gubbins to pass the variables values to the page.&lt;br&gt;&lt;br&gt;Then we create a HTTPObject with&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;%httpObj = new HTTPObject(scoreUploadHTTPObj);&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;and finally do a Get command using it. This is the bit that actually sends data to the host.&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;%httpObj.Get(%server, %path, %script);&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 6:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Some more script stuff. So we can actually handle if we don't connect, include this:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;function scoreUploadHTTPObj::onConnectFailed(%this)&lt;br&gt;{&lt;br&gt;   echo(&amp;quot;Connection Failed&amp;quot;);&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Remember earlier with the &amp;quot;replyData&amp;quot; line? Well now we're going to do something with it. The following code will check each line that comes back to us from the server after our GET command. We check if the opening word of the line is &amp;quot;replyData&amp;quot; and if so we actually pay some attention to it. We know that we're going to get something to act upon here regarding our attempted upload of our score, so lets popup a messagebox showing the result. We check the second word and if it is &amp;quot;No&amp;quot; we know the data wasn't accepted for some reason. We don't have to bother checking for the rest of the line... in fact we don't need to send it at all to be honest but it was handy for me while testing.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;function scoreUploadHTTPObj::onLine(%this, %line)&lt;br&gt;{&lt;br&gt;   if(getWord(%line, 0) $= &amp;quot;replyData&amp;quot;)&lt;br&gt;   {&lt;br&gt;      if(getWord(%line, 1) $= &amp;quot;No&amp;quot;)&lt;br&gt;         MessageBoxOK(&amp;quot;DID NOT UPLOAD SCORE&amp;quot;, &amp;quot;Your score has not been uploaded. (Rejected)&amp;quot;, &amp;quot;&amp;quot;);&lt;br&gt;else&lt;br&gt;MessageBoxOK(&amp;quot;UPLOADED SCORE&amp;quot;, &amp;quot;Your score has been uploaded!&amp;quot;, &amp;quot;&amp;quot;);&lt;br&gt;&lt;br&gt;   }&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 7:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Go in game and open the console and type something like&lt;br&gt;	&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;scoreTest(&amp;quot;name_here&amp;quot;, &amp;quot;score_here&amp;quot;);&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;Everything should work ok and you should get a message box popup telling you that you have uploaded your score!&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion:&lt;/b&gt;&lt;br&gt;&lt;br&gt;As you can see that really wasn't too taxing at all. I literally had to learn how to use PHP and SQL Databases while doing that and still it only took me an hour or two start to finish. Admittedly it'd take me like 15 minutes now but ho'hum :)&lt;br&gt;&lt;br&gt;Hopefully this will open up the opportunity for many people who were a bit unsure how to go about storing player data online to get some really cool little additions in their games.&lt;br&gt;&lt;br&gt;&lt;b&gt;Future changes:&lt;/b&gt;&lt;br&gt;&lt;br&gt;Obviously security needs to be added here, as you can just go straight to your page in a browser and merrily add scores ad infinitum. :) A nice solution would be to have user accounts etc, but that is obviously beyond the scope of this short tutorial.&lt;br&gt;&lt;br&gt;Having a web-based score table viewable in TGB would be neat, and super simple. I'll likely get that on TDN also.&lt;br&gt;&lt;br&gt;Thanks for reading, hope it helps!&lt;br&gt;&lt;br&gt;edit: general typos etc, the usual ;)</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/13985">
		<dc:format>text/html</dc:format>
		<dc:date>2007-12-10T20:14:43+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Skinned Mesh XSI Exporting</title>
		<link>http://www.garagegames.com/blogs/27414/13985</link>
		<description>Not-so-brief .plan covering two things:&lt;br&gt;*Freelancing&lt;br&gt;*XSI to DTS Exporting procedure (Skinned Meshes)&lt;br&gt;&lt;br&gt;&lt;b&gt;Freelancing&lt;/b&gt;&lt;br&gt;I'm in a bit of an empty time as far as work is considered at the moment. I'm going to be doing some lecturing at a University come late January, but until then I'm free to take up tasks on projects people are working on. My skills are based around coding and 3D (check my profile for more information on skills/education/etc) so give me a shout if you are after some extra help - paid work only though please.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt; XSI to DTS Exporting Procedure (Skinned Meshes) &lt;/b&gt;&lt;br&gt;&lt;br&gt;I've seen people have a fair bit of problems regarding XSI to DTS exporting, specifically with skinned meshes, so I thought I'd do a write up to help people with the process. I'm putting this here so it'll get a more attention then it would have done otherwise, (i.e. not get buried in the forums - 'cos the search isn't exactly stellar :/ ) I'll probably mirror this onto TDN later also. I'm going to have this largely as a step by step to how to rig up a character that is Torque compatible, rather then teach you how to use XSI or how to animate etc.&lt;br&gt;&lt;br&gt;The main thing here is the use of a shadow rig of nulls instead of XSI bones etc. The exporter wants to use nulls - REMEMBER THIS :D&lt;br&gt;&lt;br&gt;Firstly, open up XSI and press '2' (will open the animate menu on the left) and then click on Character -&amp;gt; Biped guide and accept the default options. You'll get this funky looking red doohicky.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/1.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/2.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;This is a biped guide, basically it allows you to adjust where your joints etc are going to be on your model and then create a nice rig for it. I'm not going to teach you how to do that, it are easy and I won't insult your intelligence. Right, next let's be lazy and use the default XSI low poly model. Primitive -&amp;gt; Model -&amp;gt; Body - Man. Handily enough it fits perfectly on to the biped guide (almost like that was planned to save time huh? :D)&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/3.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Now press '8' (to open the scene explorer) and click on Biped_Guide, then go Character -&amp;gt; Rig from Biped Guide. On the new window click on the Shadow Rigs tab. select Null Hierarchy from the options.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/4.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;You should now have a nice rig setup, with another 'rig' of nulls that shadows it's every movement - cool huh? It's safe to delete to Biped_Guide now, as we don't need it anymore. Make sure you middle click to branch select it before attempting to delete it.&lt;br&gt;&lt;br&gt;Now open up to the Biped_Null branch until you see 'UpperBody', Drag this up to the scene root and delete the Biped_Null branch.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/5.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/6.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Now let's quickly bind the character mesh to the null rig (which starts with 'UpperBody') Select the character mesh and then go to Envelope -&amp;gt; Set Envelope. Click yes if it warns about modes. Middle click on the 'UpperBody' in the scene explorer and then right click anywhere.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/7.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;I'm not going to bother doing anything with envelope weightings; it's not within the scope of what I'm trying to teach you here.&lt;br&gt;&lt;br&gt;Now its time to setup the scene the way the DTS exporter wants it for export. Create 3 nulls, name them: base01, start01, detail2. Rename the Man to Man2. (Man2 because we have a detail node called detail2 - Please note: I have taken the geometry portion of the Man branch and moved it to the scene root) Setup this hierarchy:&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/8.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Now let's do a bounds box (simply a cuboid that encompasses everything that is named bounds and is at the scene root)&lt;br&gt;&lt;br&gt;&lt;img src='http://www.craigfortune.co.uk/plans/9.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Now export! Yippee etc.</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/13134">
		<dc:format>text/html</dc:format>
		<dc:date>2007-06-25T15:25:50+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Vehicle mounting system progress (video)</title>
		<link>http://www.garagegames.com/blogs/27414/13134</link>
		<description>I'm not normally one to post 2 .plans in quick succession, but as I have something to show I thought I might as well :) First off, a link to the video (excuse the bizarre art, its what I had to hand when I was scripting this up - it's hover tank utilising wheeled vehicle, its just that at the moment the wheels are visible):&lt;br&gt;&lt;br&gt;&lt;a href='http://www.youtube.com/watch?v=WsuCYEaeHmg&amp;amp;v' target=_blank&gt;www.youtube.com/watch?v=WsuCYEaeHmg&amp;amp;v&lt;/a&gt;&lt;br&gt;&lt;br&gt;What you see in the video is several things:&lt;br&gt;&lt;br&gt;1.	Simply creating a vehicle on the fly&lt;br&gt;2.	Walking up to it and pressing E (use) to bring up a little GUI.&lt;br&gt;3.	Selecting to enter the vehicle as a driver (the D 'button')&lt;br&gt;4.	Being mounted in the correct position with the correct keymap etc and a message being displayed saying what have entered the vehicle as a driver. (Displays a message like this for every seat you enter)&lt;br&gt;5.	Dismounting and using the vehicle again and this time entering the vehicle as a gunner, in the gunner's seat and with the gunner's keymap.&lt;br&gt;6.	Dismounting and using the vehicle again and this time entering the vehicle as a passenger, in the gunner's seat and with the passenger's keymap.&lt;br&gt;7.	Dismounting and using the vehicle again and this time simply closing the GUI with the X button.&lt;br&gt;8.	Using the vehicle one final time, this time walking away from the vehicle beyond the maximum mounting distance. A message pops up telling you that you are too far away and how far you are.&lt;br&gt;&lt;br&gt;Things of note:&lt;br&gt;&lt;br&gt;The GUI will correctly display which mount points are of what type: Driver, Gunner, Passenger etc. It will also display an X on any occupied seat and not let you select to mount the vehicle in that position. The GUI shown is just some simple placeholder art, its intention is to allow you to have an aerial image of the vehicle with the mount locations shown in their physical locations. This is fully supported, I just haven't bothered doing nice art to fully demonstrate that yet.&lt;br&gt;&lt;br&gt;The GUI will only let you mount if you are within range (it checks your distance again when you select a position to enter in - so no opening the GUI and running far away and then mounting) It also times out after 10 seconds and disappears.&lt;br&gt;&lt;br&gt;&lt;b&gt;So What's Next?&lt;/b&gt;&lt;br&gt;&lt;br&gt;Well primarily the next step is to hook up controllable weapons (turrets etc) to the vehicles that the gunners an take control of. This of course will mean creating some sort of tank style class that will support this (guess what? I already have this done :D just tied up inside the wheeled vehicle code) I'm also going to create a little object that will allow me to use a control panel to create the vehicles (and ultimately select which vehicles to make etc)&lt;br&gt;&lt;br&gt;&lt;b&gt;Obligations...&lt;/b&gt;&lt;br&gt;&lt;br&gt;I couldn't really go another plan with no image, so for those too lazy to see the video, here is a screenshot:&lt;br&gt;&lt;br&gt;&lt;img src='http://img337.imageshack.us/img337/8509/screenshothz4.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Ok seriously go watch the video as this shot makes no sense :)&lt;br&gt;&lt;br&gt;&lt;b&gt;New Book&lt;/b&gt;&lt;br&gt;&lt;br&gt;I got a new book in the post today, &amp;quot;Game Design, Theory and Practice.&amp;quot; I haven't had a chance to read it yet but it looks like a nice little chunky book (650 pages) full of discussion with the industries big guns and plenty of differing topics. The reason I mention this is because of the big grin it put on my face when this was the first page I opened it to:&lt;br&gt;&lt;br&gt;&lt;img src='http://img70.imageshack.us/img70/3751/img062fl1.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Probably cannot see that properly, so the text reads:&lt;br&gt;&lt;br&gt;&amp;quot;You have ignited a nuclear war.&lt;br&gt;&lt;br&gt;And no, there is no animated display of a mushroom cloud with parts of bodies flying through the air.&lt;br&gt;&lt;br&gt;We do not reward failure.&lt;br&gt;&lt;br&gt;OK&amp;quot;&lt;br&gt;&lt;br&gt;&lt;br&gt;How can this book not be excellent? :D&lt;br&gt;&lt;br&gt;&lt;br&gt;Bye for now!&lt;br&gt;craigfortune _at_ gmail.com&lt;br&gt;&lt;a href='http://www.craigfortune.co.uk' target=_blank&gt;www.craigfortune.co.uk&lt;/a&gt;</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/13125">
		<dc:format>text/html</dc:format>
		<dc:date>2007-06-23T23:41:42+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Graduation and Freelancing</title>
		<link>http://www.garagegames.com/blogs/27414/13125</link>
		<description>I apologise right now if this blog seems a bit &amp;quot;self pimpage&amp;quot; but meh, what are blogs for if not to pimp yourself or your wares? :D Also, no pictures... but still an interesting read I hope :D&lt;br&gt;&lt;br&gt;&lt;b&gt;Graduation&lt;/b&gt;&lt;br&gt;&lt;br&gt;First off, some good news, I've graduated! I'm now 'Craig Ashley Fortune BSc Hons' and I have a piece of paper that has the rather nice wording &amp;quot;First Class&amp;quot; on it too ;) I'm now officially not stupid, lol. But on a more serious note my graduation yesterday marked the end of the road for three years of hard work and I'm glad to have achieved as highly as I did. It's a fantastic feeling to have finished university, although a little sad at the same time, knowing that my student life is now behind me.&lt;br&gt;&lt;br&gt;&lt;b&gt;Marching On&lt;/b&gt;&lt;br&gt;&lt;br&gt;With all that being said, I'm now looking to find some work. If anyone works for a games company in the North-West of England and think I might be interested in a vacancy they have then I'm all ears. I'm looking for either design or coding jobs. (Side note: I'm based in Bolton and I don't wish to relocate at this time, so Liverpool is just a tad too far)&lt;br&gt;&lt;br&gt;If you work for a company that are looking for a graduate with very good C++ skills etc and are not games related, I might still be interested, so drop me an email.&lt;br&gt;&lt;br&gt;Heck, if you can even offer an offsite position for games stuff I might be interested in then again feel free to contact me :)&lt;br&gt;&lt;br&gt;&lt;b&gt;Freelancing&lt;/b&gt;&lt;br&gt;&lt;br&gt;In the meantime, until I get fulltime work sorted, I plan to do some freelancing work to keep the ol' bank balance ticking over. If you have a short term need for a programmer, designer or 3D (primary) or 2D artist then give me a shout. Even very small jobs I might be interested. No harm in contacting me, the worst I can do is say no thanks :P&lt;br&gt;&lt;br&gt;&lt;b&gt;Development / What I'm working on&lt;/b&gt;&lt;br&gt;&lt;br&gt;Currently I'm working on a little system that will allow multiple players to be in control of different aspects of a vehicle simultaneously, and also deal with the mounting aspects etc. A couple months back I had coded up tank functionality into the wheeled vehicle code, basically I could have a rotating/rising turret that would move independently of the main body of the vehicle. It was hooked up to work with an xbox360 controller (left stick = movement, the other = turret) and simply utilised blend animations for the turret movement.&lt;br&gt;&lt;br&gt;It worked nicely, but I thought I'd take it a step further and have it so I could have drivers, gunners and passengers all in one vehicle. Having different players in control of the guns etc isn't too tricky a task. (You have the extra guns as separate mounted objects and then just set the client controlling them to one of the players mounted to the vehicle in a gunner designated mount node spot)&lt;br&gt;&lt;br&gt;However, the problem arises with developing a nice technique for letting the player select which position within the vehicle they wish to enter. Games such as Planetside rely on you standing on specific locations on the ground around the vehicle when attempting to jump into a spot in the vehicle, I don't much like that method to be honest, I find it to be cumbersome and sometimes you get situations where you can't quite get to where you need to be to get into a specific mount location. Annoying to say the least!&lt;br&gt;&lt;br&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;br&gt;&lt;br&gt;The system I plan to implement will work like thus: walk up to vehicle, press use button (probably 'e') and a little GUI control will popup, showing the available positions. Click on the position you want and get auto mounted into it. Job's a good'n. I'll simply have to free up and lock the cursor down before and afterwards.&lt;br&gt;&lt;br&gt;Also, I'll probably put this up as a resource after I finish it if people show some interest.&lt;br&gt;&lt;br&gt;Anyway, ciao for now.&lt;br&gt;&lt;br&gt;&lt;a href='http://www.craigfortune.co.uk' target=_blank&gt;www.craigfortune.co.uk&lt;/a&gt;&lt;br&gt;craigfortune _at_ gmail.com</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/12449">
		<dc:format>text/html</dc:format>
		<dc:date>2007-03-02T15:34:07+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>NeuralNet FSM mapping</title>
		<link>http://www.garagegames.com/blogs/27414/12449</link>
		<description>First off, wow - I'm blogging like properly regularly :D I for once kept my promise of keeping my blogs upto date! Secondly...&lt;br&gt;&lt;br&gt;&lt;b&gt;Neural Nets&lt;/b&gt;&lt;br&gt;With my Neural Net system one of the key design aspects was that I was interested in using the NN to &lt;b&gt;initiate complex behaviours&lt;/b&gt;, rather then using the NN to do the movement etc itself. What this means is that I'll be using the outputs of my NN to decide upon what state to move to within a FSM(Finite State Machine) type setup.&lt;br&gt;&lt;br&gt;What you need for this is a way to map the outputs to the states. For this end I've created a class called &amp;quot;StateHolder&amp;quot;, its a simple class that pretty much holds structs that contain data about a state (notably: its name), and the states it is linked to within my FSM. It is a very simple setup in essence but the thing that makes this really nice is that you can register the states and the linked states from script very easily. Each state (in the order you register them) is then mapped to the NN's output. For instance the first state you map maybe called &amp;quot;flee&amp;quot; and that will be mapped to output[0], attack mapped to output[1] and so on.&lt;br&gt;&lt;br&gt;The key to this system is that whenever you process the NN, (whenever your AI Agent &amp;quot;thinks&amp;quot;) you order the outputs it produces in decending numerical order. You then attempt to move to the highest valued output (remember: it is mapped to a FSM state) thats available. If the FSM doesn't have this link defined from your current state (we have this data readily available due to our StateHolder class), you try the next highest ranked output and so on until you change state or decide to do no state changing.&lt;br&gt;&lt;br&gt;Sounds a bit weird and stuff but simply put all I'm doing is changing to the output (state) that the NN most desires to be in. (Remember: a NN gets trained towards processing the inputs of a situation into outputs that will give it the highest gain - if fleeing is a high gain output, then output[0] (if thats what you have fleeing behaviour mapped to) should be trained up to give a high output when a situation you should want to flee occurs... make sense? Kind of? No? Read it again :D)&lt;br&gt;&lt;br&gt;Instead of normal NN thinking of:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;Inputs -&amp;gt; Processing -&amp;gt; Outputs&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;think of this:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;Inputs -&amp;gt; Processing -&amp;gt; State Choice&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;So now this system is in place I can simply code the different &amp;quot;behaviours&amp;quot; into the states within script and start training some NNs. *grin* Of course theres a few more complexities I have included in this, like having a cooldown on state changing (I dont want to be flicking inbetween states lots - so a cooldown on state changing should fix this and smooth it out)&lt;br&gt;&lt;br&gt;&lt;b&gt;Possible Torsion Bug?&lt;/b&gt;&lt;br&gt;&lt;br&gt;As a complete off topic and probably not worthy of sticking in a .plan... has anyone had any weird problems with Torsion ignoring breakpoints in your script? I've had it decide to not bother with breakpoints in specific files but be perfectly ok with breaking on some breakpoints in other files... weird Huh? Just wondering if I'm alone here and its my system being weird or whether there is a bug is Torsion? I'd rather not file a bug report until I'm somewhat sure its not me to blame.</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/12412">
		<dc:format>text/html</dc:format>
		<dc:date>2007-02-26T00:23:18+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Neural Nets are learning!</title>
		<link>http://www.garagegames.com/blogs/27414/12412</link>
		<description>&lt;b&gt;Neural Nets are learning!&lt;/b&gt;&lt;br&gt;&lt;br&gt;Last night I made a rather large breakthrough with my neural net work in TGE, they started to learn and evolve :) Alas it was nothing visibly exciting unless you get excited over raw output data... I did, lol. I made the nets' fitness dependant on their output, (they only had one output, the size of this output was added to their fitness everytime I updated them) so I was in essence training them to learn how to structure themselves to produce the highest output they could.&lt;br&gt;&lt;br&gt;Within very few generations a topology that could produce 0.85~ (out of 1.0, so 85% of maximum) with the data I was inputting - which was the same all the time - had evolved and largely taken over the population. Given several more generations and it likely would have evolved and/or mutated up to near maximum. Thats a good thing btw ;)&lt;br&gt;&lt;br&gt;&lt;b&gt;STL and Torque suck at being friends... :(&lt;/b&gt;&lt;br&gt;&lt;br&gt;On a less happy note, I'm still having problems with trying to get STL and TGE working together. Nothing I seem to try works properly - so I'm likely falling back to just trying to replace all STL stuff which is a pain and will likely delay me lots :(&lt;br&gt;&lt;br&gt;Currently I can compile and link my project and run it... however I get a lot of user breakpoints thrown back and me (which I can continue through) and ultimately it always seems to be a problem with the end(); method on tVector's iterator :( I have tried using stl_fix and it seems almost as if it needs to be updated to work with VS 2005. *grr* (it gives errors on std::allocator - isn't this one of the very things its supposed to fix?!)&lt;br&gt;&lt;br&gt;&lt;br&gt;PS. As per usual find my full blog here: http://craigfortune.blogspot.com&lt;br&gt;&lt;br&gt;Anyone done any work on this problem recently? &lt;b&gt;PLEASE&lt;/b&gt; let me know :)&lt;br&gt;&lt;br&gt;&lt;b&gt;Animation&lt;/b&gt;&lt;br&gt;&lt;br&gt;As a brief aside I'd like to recommend to anyone interested in animation to buy a copy of &amp;quot;The Animator's Survival Kit&amp;quot; by Richard Williams. I picked up a copy recently after hearing good things about it and it is possibly one of the most well put together books in the general art area that I've ever read. Its applicable to both traditional and computer, 2d and 3d animation. Its a complete and utter treat to read.</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/12357">
		<dc:format>text/html</dc:format>
		<dc:date>2007-02-19T21:27:56+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Backing-Up, Repositories, XSI and Neural Networks Progression</title>
		<link>http://www.garagegames.com/blogs/27414/12357</link>
		<description>Its been such a short time since my last .plan I fear the World might be coming to an end or at least Hell is becoming a bit nippy, anywho... :)&lt;br&gt;&lt;br&gt;The last week for me has been rather busy with both University work and some new gadgetry that I've decided to setup. After one too many annoying instances of &amp;quot;awww crap Windows has karked it again&amp;quot; or &amp;quot;oops, did I really hold shift when I deleted that? NUTS!&amp;quot; I've decided to set myself up with a proper automatic backup system.&lt;br&gt;&lt;br&gt;These things rock!&lt;br&gt;&lt;br&gt;I've got a thing called &amp;quot;Backup Platinum Agent&amp;quot; that will allow me to create different 'items' of data to backup. The items can be collections of files and folders or just single files and you can even choose explicitly which file types to include/exclude in the item. The item is then stored wherever you choose it to go, in this case my Icybox harddrive. An IcyBox is basically an enclosure that connects to your PC via USB and can hold a normal IDE harddrive within itself. (So its a much more functional version of an external harddrive imo - you can remove the hdd at any time) All my backups are now going to this spare 160GB hdd I had sitting in my PC doing nothing - which is great as I can cart data around and have all my backups 'separate' from my PC.&lt;br&gt;&lt;br&gt;What's extra cool about this backup system is that you can schedule it to perform backups at certain times/interval or even when you logon or off. It can also store versions of files up to a certain amount you specify (so you can go back to different backup versions rather than just your latest)&lt;br&gt;&lt;br&gt;Most backup clients offer these sort of systems and I just cant recommend them enough, I dare say not a single person reading this hasn't suffered data loss in one way or another. This data loss probably happened at the worst time too :P So I wonder how many of you reading this actually backup PROPERLY and if so what tools do you use? It'd be interesting to find out.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Repositories&lt;/b&gt;&lt;br&gt;&lt;br&gt;I don't know why but for some reason I've always considered repo systems to be predominately for multi person applications (ie: teams working together on a single project) and never bothered setting one up just for my sole use. Heck I have even advised people on the merits of using them for any code-base/art/asset collection even when its just one person but I've never heeded my own advice... Finally I saw the light and today I've decided to setup SVN on my own desktop system. I'm storing within it a repo of my codebase for my NeuralNetworks in Torque project and already its hooked up in turn to my backup client. This work is not gonna get lost without a damn good fight :)&lt;br&gt;&lt;br&gt;&lt;b&gt;XSI&lt;/b&gt;&lt;br&gt;&lt;br&gt;Following on the theme of cool new things I've discovered this week. I'd like to just mention something within XSI that I'd never really paid much attention to and I'm now kicking myself for it. The sypnotic view is probably one of the coolest and most versatile things you'll find within XSI. (XSI has a LOT of cool stuff in it, so its saying something) Its basically a little customisable window that's great for working with complex rigs etc, it works off a .html file to allow you to image-map your rig for easy selection etc (ie: you can click on bits in the picture to select bits in your actual rig in XSI) The html file will run either VBscript or JavaScript when you click on areas of the screen. All in all its rather cool and flexible and you don't just have to use it for rigging etc. Its extra nice if you have a second monitor too, I'm a sucker for trying to save screen real estate.&lt;br&gt;&lt;br&gt;With the release of the beta of the XSI exporter for Torque recently I'm assuming there's a fair few new XSI users or previous XSI users rearing their heads in the community, would it be at all worth putting together a nice list of useful tips/trick/general stuff on XSI? Tell me if you think so and I'll put something together.&lt;br&gt;&lt;br&gt;&lt;b&gt;Neural Nets&lt;/b&gt;&lt;br&gt;&lt;br&gt;I've continued my work with NeuralNetworks in Torque this week and I'm now up to a point where I have NeuralAI units in mission and a lot of the &amp;quot;backend&amp;quot; stuff is now playing nicely with Torque. The annoying thing here is that as its all backend stuff there's not a whole lot to show :/&lt;br&gt;&lt;br&gt;I'm thinking probably a week and I'll have some guys running around and processing their NNs for decision making. On a side note I'm considering using the outputs to control over an FSM. By this I mean say my outputs control behaviours like fleeing, attacking and standing your ground, the highest of the outputs will ultimately decide which state to flick the FSM into. Obviously that's making it sound a bit too clean and simple but there's the gist of my thinking anyway. Another thing here is the possibility of doing some fuzzy state logic on the outputs for behaviours, maybe you could be half fleeing and half attacking (ie, running away and shooting over your shoulder :P) Just ideas, not really sure about the implementation of those yet, heh.&lt;br&gt;&lt;br&gt;&lt;br&gt;As per before, my blog is also here: http://craigfortune.blogspot.com</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/12272">
		<dc:format>text/html</dc:format>
		<dc:date>2007-02-08T04:28:28+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>Neural Networks</title>
		<link>http://www.garagegames.com/blogs/27414/12272</link>
		<description>Well, I'll start with the old adage of &amp;quot;long time no blog&amp;quot; and further the cliche by saying &amp;quot;I intend to start blogging regularly from now on.&amp;quot; Thing is though, for once I think I might actually mean it :)&lt;br&gt;&lt;br&gt;Usually my attempts at regular blogging have always fallen flat on their face by the sheer fact of not having something that I could blog the progress on frequently enough etc, alas now I have! Introducing...&lt;br&gt;&lt;br&gt;&lt;b&gt;Neural Networks in Torque&lt;/b&gt;&lt;br&gt;&lt;br&gt;There may be some of you out there who recognise my name as that of an artist, this is true enough. (I have credits in some TGB tutorial art and older T2D demos, the RTS Kit, Dimenxion - check it out ion the GG store, its free - amongst other such stuff as many a GID etc) However I'm also a degree student in my final semester, my degree is &amp;quot;BSc Hons Computer Games Development.&amp;quot; What this means is that I'm also a programmer who is at a stage nearing when he's supposed to be industry ready to some level.&lt;br&gt;&lt;br&gt;This is where neural networks come into the fray, for my final year project I'm doing a research paper into cooperation and complex behaviours using NNs. Of note to the GG community is that I'm integrating the NEAT approach into TGE, I'm also using the RTS Kit addon.&lt;br&gt;&lt;br&gt;&lt;a href='http://nn.cs.utexas.edu/keyword?neat' target=_blank&gt;NEAT&lt;/a&gt;&lt;br&gt;&lt;a href='http://www.cs.ucf.edu/~kstanley/neat.html' target=_blank&gt;More NEAT&lt;/a&gt;&lt;br&gt;&lt;br&gt;I've noticed a lot of interest in the GG community for neural networks in the past and hence I thought it might be of some use/interest to people if I blogged my progress and maybe ultimately provide some sort of download/demo of it. &lt;b&gt;Let me know if you're at all bothered about seeing this ;)&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Where its at currently&lt;/b&gt;&lt;br&gt;&lt;br&gt;A class derived off RTSUnit called NeuralAI is spawnable and a highly hacked version of &amp;quot;windowsNEAT&amp;quot; is sitting inside tge with a bit of script functionality hooked up to it. (In reality it's actually playing its own little invisible minesweepers game when you run an RTS mission :D)&lt;br&gt;&lt;br&gt;Doesn't sound much but when you consider windowsNEAT uses STL, it was a chore to get in. In the end I simply decided to disable torque's memory manager as the main work around. The main controller class can be told by script to go through the ticks of its current population until it's time to epoch the system. Epoch, rinse, repeat.&lt;br&gt;&lt;br&gt;I suppose in a really-odd-round-about-way that means I've got NNs working in TGE :P Of course it'd be a much more interesting proposition if you could either see it in action or at least see its outputs... next blog maybe ;)&lt;br&gt;&lt;br&gt;&lt;b&gt;Blog also here...&lt;/b&gt;&lt;br&gt;If you've read this far you're either bored or actually have an interest in this random twittering... my blog is also here: &lt;a href='http://craigfortune.blogspot.com' target=_blank&gt;craigfortune.blogspot.com&lt;/a&gt; and it might also include things I don't put up on GG.</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/27414/11066">
		<dc:format>text/html</dc:format>
		<dc:date>2006-08-11T00:26:56+00:00</dc:date>
		<dc:creator>Craig Fortune</dc:creator>
		<title>You'd be best skipping this .plan if you're busy :)</title>
		<link>http://www.garagegames.com/blogs/27414/11066</link>
		<description>First off I'd like to say two things: 1. This isn't a proper plan, dont get excited, I have nothing even remotely useful to enlighten your lives with. However you might smile a bit :) 2. Readers of a nervous disposition click the back button in your browser, we could set a record in bad language here. Blame Tom.&lt;br&gt;&lt;br&gt;I've thought for a while that it'd be a fun idea to put up a load of random quotes from IRC that have happened during the development of Alive and Ticking. (see Tom Bampton's .plans recently for more info on  A&amp;amp;T) Reason being? Well, I feel that there's probably a lot of people out there who can empathise with some of the quotes and hopefully will bring a wry smile to your face in a &amp;quot;oh good, its not just me that has that happen&amp;quot; etc. Enjoy:&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;quot;Sound familiar?&amp;quot;&lt;/b&gt;&lt;br&gt;[17:45] &amp;lt;TomB&amp;gt; this was meant to be a quick and easy project&lt;br&gt;[17:45] &amp;lt;TomB&amp;gt; but Nauris keeps causing it to snowball ;-)&lt;br&gt;&lt;br&gt;[17:49] &amp;lt;CraigFortune&amp;gt; I just need the enthusiasm to start doing stuff&lt;br&gt;[17:50] * Nauris buys Craig a kilo of EnthuSchism(tm)&lt;br&gt;&lt;br&gt;[18:45] &amp;lt;TomB&amp;gt; bollocks, i cant make a debug build crash&lt;br&gt;&lt;br&gt;[17:33] &amp;lt;CraigFortune&amp;gt; XSI showed up to error messages at once&lt;br&gt;[17:33] &amp;lt;CraigFortune&amp;gt; one saying &amp;quot;failed to save scene before system failure&amp;quot;&lt;br&gt;[17:34] &amp;lt;CraigFortune&amp;gt; other saying &amp;quot;sucessfully saved scene before system failure&amp;quot;&lt;br&gt;&lt;br&gt;[17:23] &amp;lt;CraigFortune&amp;gt; hows this different to what we initially discussed?&lt;br&gt;[17:23] &amp;lt;TBM&amp;gt; do you expect me to remember what we initially discussed ? :)&lt;br&gt;&lt;br&gt;[19:34] &amp;lt;TomB&amp;gt; explain it in purely art terms of the effect that you want to accomplish&lt;br&gt;[19:34] &amp;lt;TomB&amp;gt; without using terms like &amp;quot;terrain&amp;quot; which is what's confusing me&lt;br&gt;[19:35] &amp;lt;CraigFortune&amp;gt; ok&lt;br&gt;[19:35] &amp;lt;CraigFortune&amp;gt; I want to be able to paint textures onto the ground&lt;br&gt;[19:35] &amp;lt;CraigFortune&amp;gt; using a soft brush&lt;br&gt;[19:35] &amp;lt;CraigFortune&amp;gt; (ie for blending)&lt;br&gt;[19:36] &amp;lt;CraigFortune&amp;gt; much like the t**rain editor in tge currently&lt;br&gt;&lt;br&gt;[17:16] &amp;lt;TomB&amp;gt; ah the sodding  mac has finally finished building&lt;br&gt;[17:16] &amp;lt;TomB&amp;gt; it takes bloody ages to do a full build&lt;br&gt;[17:17] &amp;lt;TomB&amp;gt; so logn ive now forgotten what it was i was doing&lt;br&gt;&lt;br&gt;[19:25] &amp;lt;TomB&amp;gt; all bow down before the awesome radiusRumble() function ;-)&lt;br&gt;[19:25] &amp;lt;TomB&amp;gt; at least, it will be awesome if it works&lt;br&gt;[19:27] &amp;lt;TomB&amp;gt; which it doesnt ;-)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;quot;Thanks for the Advice, thats useful (git)&amp;quot;&lt;/b&gt;&lt;br&gt;[18:07] &amp;lt;TomB&amp;gt; at some point i think i will be needing to do a level editor&lt;br&gt;[18:08] &amp;lt;TomB&amp;gt; with 3d shapes its going to get a bit beyond the capabilities of my text editor based level editor ;-)&lt;br&gt;[18:08] &amp;lt;Nauris&amp;gt; you need 3d text editor, obviously&lt;br&gt;[18:08] &amp;lt;TomB&amp;gt; lol&lt;br&gt;[18:08] &amp;lt;Nauris&amp;gt; so thats you number one priority ;)&lt;br&gt;&lt;br&gt;[17:28] &amp;lt;TomB&amp;gt; its more that the precip code is shit&lt;br&gt;[17:28] &amp;lt;CraigFortune&amp;gt; wasn't it all redone about a year back?&lt;br&gt;[17:28] &amp;lt;TomB&amp;gt; possibly but i think that may have been for tse&lt;br&gt;[17:28] &amp;lt;TomB&amp;gt; i dont remember&lt;br&gt;[17:29] &amp;lt;CraigFortune&amp;gt; let me rephrase:&lt;br&gt;[17:29] &amp;lt;CraigFortune&amp;gt; it was all redone about a year back&lt;br&gt;[17:29] &amp;lt;CraigFortune&amp;gt; :D&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;quot;Did you really just say that?&amp;quot;&lt;/b&gt;&lt;br&gt;[01:01] &amp;lt;CraigFortune&amp;gt; btw, do bombs go off if you run into them?&lt;br&gt;[01:01] &amp;lt;TomB&amp;gt; possibly&lt;br&gt;[01:01] &amp;lt;TomB&amp;gt; the bombs are based on the wanking penguin code&lt;br&gt;[01:01] &amp;lt;TomB&amp;gt; which i believe did set them off in that case&lt;br&gt;[01:01] &amp;lt;TomB&amp;gt; but im not 100% sure&lt;br&gt;&lt;br&gt;[16:25] &amp;lt;TomB&amp;gt; what i was thinking for bombs is animate them in someway (maybe pulsing) when they're about to explode&lt;br&gt;[16:25] &amp;lt;TomB&amp;gt; and mount a particle emitter to the fuse&lt;br&gt;[16:26] &amp;lt;TomB&amp;gt; or some other way to animate the fuse, i dunno&lt;br&gt;[16:26] &amp;lt;Nauris&amp;gt; well, that's the same idea. they would just look a bit different and animation could be them giggling hysterically or something&lt;br&gt;[16:26] &amp;lt;Nauris&amp;gt; not that they become REAL critters&lt;br&gt;[16:27] &amp;lt;CraigFortune&amp;gt; the giggling would be so funny&lt;br&gt;[16:27] &amp;lt;CraigFortune&amp;gt; &amp;quot;hehehehe! BOOM&amp;quot;&lt;br&gt;[16:27] &amp;lt;Nauris&amp;gt; lol&lt;br&gt;[16:27] &amp;lt;TomB&amp;gt; i dunno&lt;br&gt;[16:27] &amp;lt;Nauris&amp;gt; yeh.. &amp;quot;watch out!.. too late...hehehehe!&amp;quot;&lt;br&gt;[16:28] &amp;lt;Nauris&amp;gt; perhaps Tom just has to see it&lt;br&gt;[16:28] &amp;lt;Nauris&amp;gt; we could make him some kind of presentation, Craig, perhaps?&lt;br&gt;[16:28] &amp;lt;CraigFortune&amp;gt; I say you video yourself in your room laughing lots then throwing cardboard boxes about whilst shouting &amp;quot;boom&amp;quot;&lt;br&gt;[16:29] &amp;lt;CraigFortune&amp;gt; that'll persuade him&lt;br&gt;&lt;br&gt;[01:26] &amp;lt;CraigFortune&amp;gt; its not so much a skybox as it is a box with sky on it :D&lt;br&gt;[01:26] &amp;lt;TomB&amp;gt; exactly ;)&lt;br&gt;&lt;br&gt;[01:27] &amp;lt;TomB&amp;gt; the skybox is like the giant pink cocks&lt;br&gt;[01:27] &amp;lt;TomB&amp;gt; everyone things its a mistake&lt;br&gt;[01:27] &amp;lt;TomB&amp;gt; but i did it on purpose&lt;br&gt;[01:28] &amp;lt;TomB&amp;gt; and in the case of the giant pink cocks, you're the only person that doesnt htink they're phallic :)&lt;br&gt;&lt;br&gt;[00:49] &amp;lt;TomB&amp;gt; if the TGE World Editor and the TGB Level Builder had a shag, Ticked would be their bastard offspring&lt;br&gt;&lt;br&gt;[16:19] &amp;lt;TomB&amp;gt; well BreakableObject is not finished&lt;br&gt;[16:20] &amp;lt;CraigFortune&amp;gt; what abilities will it have?&lt;br&gt;[16:20] &amp;lt;TomB&amp;gt; it will have the ability to make tea&lt;br&gt;&lt;br&gt;[17:09] &amp;lt;TomB|DyingFromHeat&amp;gt; the level code is becoming kind of insane. its like a 3D version of a t2dTileMap only on major amounts of crack&lt;br&gt;&lt;br&gt;[20:12] &amp;lt;CraigFortune&amp;gt; ffs I'm being a complete crack addled whore of a dumb fuck-shit-burnt-nugget variety&lt;br&gt;[20:12] &amp;lt;TomB|DyingFromHeat&amp;gt; HAHAHAHHAHAHAHAHAHA&lt;br&gt;[20:12] &amp;lt;TomB|DyingFromHeat&amp;gt; welcome to the quotes file :)&lt;br&gt;&lt;br&gt;[00:10] &amp;lt;CraigFortune&amp;gt; right I'm gonna get these UVs packed up tonight&lt;br&gt;[00:10] &amp;lt;CraigFortune&amp;gt; so I can hand over to nauris on the model&lt;br&gt;[00:10] &amp;lt;TomB&amp;gt; can Nauris start humping your leg while I chant &amp;quot;rig it! rig it!&amp;quot; yet ? :)&lt;br&gt;[00:12] &amp;lt;Nauris&amp;gt; i dont do humping&lt;br&gt;&lt;br&gt;[18:15] &amp;lt;TomB&amp;gt; that mean you'll be drunken ircing on your phone ? :)&lt;br&gt;[18:16] &amp;lt;CraigFortune&amp;gt; oooh that'd so end up expensive :D&lt;br&gt;[18:17] &amp;lt;TomB&amp;gt; yeh it would :)&lt;br&gt;[18:17] &amp;lt;TomB&amp;gt; but if you're drunk such things dont register :)&lt;br&gt;[18:18] &amp;lt;CraigFortune&amp;gt; lol true&lt;br&gt;[18:18] &amp;lt;CraigFortune&amp;gt; I was reasonably drunk last night&lt;br&gt;[18:19] &amp;lt;CraigFortune&amp;gt; and tried playing planetside&lt;br&gt;[18:19] &amp;lt;CraigFortune&amp;gt; I resigned myself to flying into my own team mates for shits and giggles&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;quot;Can you feel the love?&amp;quot;&lt;/b&gt;&lt;br&gt;[00:46] &amp;lt;TomB&amp;gt; anyway, i gotta go get some ctor work done, Nic distracted me, the bastard&lt;br&gt;&lt;br&gt;[23:42] &amp;lt;TomB&amp;gt; flash needs to fuck off and die :)&lt;br&gt;&lt;br&gt;[18:18] * Nauris is now known as Nauris|swim&lt;br&gt;[18:18] &amp;lt;TomB&amp;gt; have fun&lt;br&gt;[18:18] &amp;lt;TomB&amp;gt; try not to drown&lt;br&gt;[18:19] &amp;lt;Nauris|swim&amp;gt; instincts do that for me&lt;br&gt;[18:19] &amp;lt;Nauris|swim&amp;gt; i cant be bothered&lt;br&gt;&lt;br&gt;[23:13] &amp;lt;CraigFortune&amp;gt; see I'm not totally useless :D&lt;br&gt;[23:13] &amp;lt;TomB&amp;gt; if i thought you were totally useless i wouldnt have mentioned scripting :)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;You're still here? Impressive&lt;/b&gt;&lt;br&gt;Well you've got down this far, so you've sucessfully showed that you have too much spare time :P. Hope you enjoyed this and I hope that someone from #gameinaday will open up there quotes file and put some in the comments ;)</description>
	</item>
</rdf:RDF>
