<?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/64167/">
		<title>Blog for Gavin Bunney 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-21T13:56:09+00:00</dc:date>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/64167/13102"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/64167/12423"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/64167/10991"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/64167/10638"/>
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://www.garagegames.com/blogs/64167/13102">
		<dc:format>text/html</dc:format>
		<dc:date>2007-06-20T09:20:21+00:00</dc:date>
		<dc:creator>Gavin Bunney</dc:creator>
		<title>Script Assert and AFX+CS+RTS</title>
		<link>http://www.garagegames.com/blogs/64167/13102</link>
		<description>Phew, what a hectic half-year! Work has been going well - still trying to get my head around our telecom application that is more complex than memorising the dictionary backwards. One thing that has been great is learning new ways to program; beyond the &amp;quot;attempts&amp;quot; at people teaching you to code at university, most just learn on their own and develop a style that is a mash up of habits/examples.&lt;br&gt;&lt;br&gt;The most recent change is my new habit of Assert. Assert, Assert, Assert! You just need to call asser... wait a tick... TorqueScript doesn't have them! They exist in the engine code everywhere; I think anyone who has used the rendering code is familiar with the conical state AssertFatal test :) But alas, no TorqueScript function - oh well; I thought I would create my own in then!&lt;br&gt;&lt;br&gt;I've submitted it as a resource... but not yet approved, still have a lookie though - &lt;b&gt;&lt;a href='http://www.garagegames.com/index.php?sec=mg&amp;amp;mod=resource&amp;amp;page=view&amp;amp;qid=13101'&gt;Code: Assert for TorqueScript&lt;/a&gt;&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Crusader - RTS&lt;/b&gt;&lt;br&gt;&lt;br&gt;Well after playing around some more with AI engine coding (named Cognisant AI, but more on that at some later date), I decided to actually do what I've been wanting to do - make a complete game! After being a TGE SDK owner for over a year, I mainly focused on the components needed to make a game, rather than having an actual plan for a game.&lt;br&gt;&lt;br&gt;Enter Crusader! I decided on an RTS for a number of reasons&lt;br&gt; - I love playing them&lt;br&gt; - AFX would push the RTS Starter Kit into usability&lt;br&gt; - &lt;a href='http://www.garagegames.com/blogs/26777/12369'&gt;CS: Warriors and Commoners&lt;/a&gt; gives me almost all the assets I needed&lt;br&gt; - There is hardly any TGE RTS games around! (granted Dreamlords just rocks, but still)&lt;br&gt;&lt;br&gt;&lt;b&gt;mmm Character System for RTS games is just golden&lt;/b&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/selectron.01.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;One of the first things I've done was implement AFX+TGE1.5.2+RTS Starter Kit into a nice happy family. The initial motivation was to replace the bland green selectron rings, with the AFX selectron system... without too much trouble, all up and running:&lt;br&gt;&lt;img src='http://www.irombu.net/selectron.02.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;The selectron system is beyond flexible - it's insane! &lt;b&gt;I just love AFX selectrons!&lt;/b&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/selectron.03.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Till next time,&lt;br&gt;&lt;br&gt;Happy Torque'ing!</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/64167/12423">
		<dc:format>text/html</dc:format>
		<dc:date>2007-02-27T10:41:50+00:00</dc:date>
		<dc:creator>Gavin Bunney</dc:creator>
		<title>Immersive AI - Project Summary</title>
		<link>http://www.garagegames.com/blogs/64167/12423</link>
		<description>As I mentioned way back when (&lt;a href='http://www.garagegames.com/index.php?sec=mg&amp;amp;mod=resource&amp;amp;page=view&amp;amp;qid=10991'&gt;eek it has been 7 months since I posted this&lt;/a&gt;), my final year uni project was all about developing an AI engine within TGE. Well I am now well and truely finished with uni, working fulltime for a telecoms software company - ok so it's not games, but very performance programming based :).&lt;br&gt;&lt;br&gt;After resurrecting myself out of the hole that can be a certain MMO that apparently 8 million other people tend to like (guess which!), I'm getting back into TGE; ok well actually I'm starting out with TGEA now, but thats for another blog.&lt;br&gt;&lt;br&gt;&lt;b&gt;Immersive AI&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/iAI.logo.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Well for anyone who can't remember (ok I can't even remember back that long), here is a basic overview of what Immersive AI was all about...&lt;br&gt;&lt;br&gt;The aim of this project was to create a game artificial intelligence system, to assist in the creation of an immersive game world. The implemented system was to allow computer controlled game agents to act, react and interact with the game world in a seemingly intelligent manner.&lt;br&gt;The key objectives of the implemented system were as follows:&lt;br&gt;&lt;br&gt;   1. To create an artificial intelligence system which controls AI agents that interact with the game as seemingly intelligent entities&lt;br&gt;   2. To design a general system which can be implemented for various goal-states and game types&lt;br&gt;   3. To implement a system which has minimal impact on game performance&lt;br&gt;   &lt;br&gt;&lt;i&gt;(Basically make AI characters act like real people, in a fast, efficient way)&lt;/i&gt;&lt;br&gt;&lt;br&gt;Implemented in the system was a path finding system and a complete non-deterministic AI reasoning engine!&lt;br&gt;&lt;br&gt;Just a couple of screenshots below, showing the pathfinding nodes and a couple of the agents (a bandit and a soldier) fighting each other...&lt;br&gt;&lt;br&gt;&lt;b&gt;Pathfinding&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/iAI.screenshot.01.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/iAI.screenshot.02.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Agents fighting each other&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/iAI.screenshot.03.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.net/iAI.screenshot.04.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;For a more details overview, have a look at some of the documentation I've linked below; also in my previous blog posts there is screenshots of the path finding system :)&lt;br&gt;&lt;br&gt;&amp;lt;EDIT&amp;gt;: I've moved the docs into the SDK Private forums thread: &lt;a href='http://www.garagegames.com/mg/forums/result.thread.php?qt=58585'&gt;www.garagegames.com/mg/forums/result.thread.php?qt=58585&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Feel free to use any of the code in the implementation document - I hope that it is of use to someone when trying to navigate around the lovely world of AI. It is by no means the best possible implementation but it should serve as a good starting ground.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Where to from here?&lt;/b&gt;&lt;br&gt;&lt;br&gt;Well after completing my first AI system, I have learnt a hell of a lot about what to do and what not to do... until I blog again, you'll just have to wait and see. Two words though:&lt;br&gt;&lt;br&gt;TGEA&lt;br&gt;AI&lt;br&gt;&lt;br&gt;&lt;br&gt;Happy Torque'ing!</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/64167/10991">
		<dc:format>text/html</dc:format>
		<dc:date>2006-07-29T01:41:27+00:00</dc:date>
		<dc:creator>Gavin Bunney</dc:creator>
		<title>iAI - Path finding shenanigans</title>
		<link>http://www.garagegames.com/blogs/64167/10991</link>
		<description>Well it's been a while since I first mentioned the iAI (immersive ai) project that is underway... so here's an update!&lt;br&gt;&lt;br&gt;The iAI engine is broken up into four modules - Manager, Seek, Combat &amp;amp; Interact. The Manager being exactly that - managing the various iAI Agents within the game world, providing updates, goal/state changes and ensuring that everything is running smoothly. The Seek module is those functions which allow the agent's to traverse/seek objects in the game world; it's most important component being obviously path finding. Combat focuses on the attack/defend functionality of the agents; with the Interact module focusing on the interactions of the agents with the game world, other agents and of course the player itself.&lt;br&gt;&lt;br&gt;In order to develop the other modules easier, the core function of the Seek module, pathfinding, needed to be completed.&lt;br&gt;&lt;br&gt;&lt;b&gt;Seek :: PathMap (Node Graph)&lt;/b&gt;&lt;br&gt;&lt;br&gt;An obvious choice for the path finding is the A* path finding algorithm; which is very easy to implement, once a graph of nodes has been developed... which was quite a task in itself :)&lt;br&gt;&lt;br&gt;When a mission is loaded, the server generates a complete graph of nodes for the terrain (removing ones inside objects, interiors etc) and assigns the various move modifiers (needed for A*) for each node. Each node in the graph is joined to its 8 neighbours (if it has 8 immediate neighbours). The greatest challenge in this was detecting where interiors/objects were (a castray isn't good enough, as a player needs to be able to reach it), so a combination of both castray and collide box detections are used, depending on the nodes location.&lt;br&gt;&lt;br&gt;&lt;b&gt;The final result&lt;/b&gt;&lt;br&gt;&lt;br&gt;Just the graph (iAIPathMap) looks like this:&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/gfx/pathmap.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Being a good little algorithm and avoiding interiors/objects: &lt;br&gt;&lt;img src='http://www.irombu.com/gfx/pathmap.avoid.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;The bounding boxes for each node, which render differently depending on their move modifier (such as the ones in the water are orange as they have a 70% increase move modifier than normal terrain ones):&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/gfx/pathmap.bounding.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;And with both the graph and bounding boxes:&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/gfx/pathmap.map.bounding.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;An obvious improvement to this is the mapping of interiors as well, and joining that to the terrain pathmap - but that's for later :)&lt;br&gt;&lt;br&gt;&lt;b&gt;Seek :: Path Creation (A* fun)&lt;/b&gt;&lt;br&gt;&lt;br&gt;Now a nice path map had been developed, it was time to delve into actually creating a path between two nodes. When an agent requests a path from one world point to another, the algorithm grabs the closest node for the start and end points, and calculates the shortest path between the two nodes. It takes into consideration the move modifier, so paths through water are considered harder to traverse etc. If you're interested in the A* algorithm itself, there are heaps of resources on the net about it..&lt;br&gt;&lt;br&gt;So now that we have a path returned between two points, some optimisations need to be done on it! I thought that the A* returned the shortest path?! It does indeed, but as the world is coated in nodes (and thus the A* will return points from nodes to nodes), we can further optimise it by seeing if nodes can be skipped... smoothing the path.&lt;br&gt;&lt;br&gt;The concept goes that if a path of A-&amp;gt;B-&amp;gt;C exists, but a traversable path from A-&amp;gt;C exists, then you can skip B. So the smoothing algorithm does exactly that. It checks if the current node (A) and the next &lt;i&gt;next&lt;/i&gt; node (C) is in roughly a straight line, and the next node (B), as long as it (B) isn't down a steep hill or something, then it will delete the next node. It completes the check that the next node (B) isn't down a steep hill, to ensure that nodes are skipped from one hill top to another :)&lt;br&gt;&lt;br&gt;Ok that may have been confusing, but hey, I've got some pictures that might show it a bit better. The path on the RIGHT is the unsmoothed path, with the path on the LEFT being the smoothed path. See how much shorter it becomes? It also reduces the number of nodes in the path, in this case from 36 down to 14.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/gfx/pathmap.path.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;another picture of the smoothing.. again the smoothed path is on the LEFT with unsmoothed on the RIGHT. Excuse old mate iAIAgent who is traversing the path, hence why the unsmoothed path seems to just end - he's already traversed that section :)&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/gfx/pathmap.smoothed.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;The paths obviously are rendering as splines, but there is an option to switch it to linear rendering (as if you have quite a few paths being rendered as splines, tends to slow down the old frame rate), or off completely of course.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Next Steps&lt;/b&gt;&lt;br&gt;&lt;br&gt;Well the next thing to tackle is the Manager module, and calculating the various goals/states for the agents themselves.&lt;br&gt;&lt;br&gt;Well that's the end of this update.. till next time, happy Torque'ing</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/64167/10638">
		<dc:format>text/html</dc:format>
		<dc:date>2006-06-06T12:40:59+00:00</dc:date>
		<dc:creator>Gavin Bunney</dc:creator>
		<title>Immersive AI and RTS TLK fun!</title>
		<link>http://www.garagegames.com/blogs/64167/10638</link>
		<description>Since my purchase of TGE back in February, I have been more or less searching for a good solid game idea. I was fortunate enough for my final year engineering project to be able to do research and development of an AI system... naturally with Torque! So along came Immersive AI.&lt;br&gt;&lt;br&gt;&lt;b&gt;Immersive AI&lt;/b&gt;&lt;br&gt;The project is to develop an immersive game environment, through creating a &lt;i&gt;living&lt;/i&gt; world - basically creating an AI system that controls agents to make them appear as real as possible. Using a goal-based AI system, each agent is assigned a general lists of goals (such as patrol, entertain etc), and it is up to the agent to satisfy the goal using a range of techniques, depending on their current personality traits. Such as given a goal of &lt;i&gt;rake leaves&lt;/i&gt; it is up to the agent to work out how to achieve that goal, whether through buying a rake, stealing one, or killing another agent for their rake.&lt;br&gt;Primary application would be in an RPG setting, however using the system (in a cut down manner!) in an FPS could be achieved as well. Immersive AI will be completed by the end of October this year, so until then you will just have to wait!&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/immersiveai/iai.brain.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;RTS, TLK, v1.4 &lt;/b&gt;&lt;br&gt;I have noticed a few people on the forums asking about running RTS + TLK + TGE 1.4 together... and it is possible... actually it is really quite simple. The only files, which can give you some grief, are the various terrain ones... William Fox (&lt;a href='http://www.garagegames.com/mg/forums/result.thread.php?qt=44135'&gt;www.garagegames.com/mg/forums/result.thread.php?qt=44135&lt;/a&gt;) has posted an update to those for TGE 1.4, so if you diff those (WinMerge is awesome) against the auto-patched version of RTS+TLK 1.3.5, and just add the relative TLK code blocks to the ones in Williams guide, then it works fine... assuming that you are merging the RTS into a TLK ready version of TGE.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.irombu.com/rts.tlk.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;If anyone is having any substantial problems with the TLK and RTS for 1.4, I might post up a complete guide on it. I am also looking at integrating the CG water upgrade (&lt;a href='http://www.garagegames.com/index.php?sec=mg&amp;amp;mod=resource&amp;amp;page=view&amp;amp;qid=10357'&gt;www.garagegames.com/index.php?sec=mg&amp;amp;mod=resource&amp;amp;page=view&amp;amp;qid=1035...&lt;/a&gt;) into the RTS kit, well because I love that CG water! The main issue with it being that the RTSTSCtrl needs to be converted to include a view-port for the cg reflection rendering... If anyone has already done this, let me know... save me some hassles :) &lt;br&gt;&lt;br&gt;Happy Torque-ing!</description>
	</item>
</rdf:RDF>
