<?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>The Toolsmiths</title>
	<atom:link href="http://toolssig.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://toolssig.wordpress.com</link>
	<description>Official blog of the IGDA Tools SIG</description>
	<lastBuildDate>Fri, 11 Mar 2011 04:40:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='toolssig.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Toolsmiths</title>
		<link>http://toolssig.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://toolssig.wordpress.com/osd.xml" title="The Toolsmiths" />
	<atom:link rel='hub' href='http://toolssig.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Debugging in the Field</title>
		<link>http://toolssig.wordpress.com/2009/09/15/debugging-in-the-field/</link>
		<comments>http://toolssig.wordpress.com/2009/09/15/debugging-in-the-field/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 18:11:59 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[pdb]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windbg]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=363</guid>
		<description><![CDATA[Developing in-house game tools presents a myriad of debugging issues. You can&#8217;t always nail down bugs to reproducible steps (if you even have QA resources to concentrate on that). Frequently content creators will complain about rare issues that force them to reboot the tools or use bizarre workarounds then things go wrong. Remote debugging works [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=363&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Developing in-house game tools presents a myriad of debugging issues.  You can&#8217;t always nail down bugs to reproducible steps (if you even have QA resources to concentrate on that).  Frequently content creators will complain about rare issues that force them to reboot the tools or use bizarre workarounds then things go wrong.  Remote debugging works in some of these scenarios, but is mainly useful for debugging crash bugs.  Errant &#8220;drag and drop&#8221; or &#8220;click and drag&#8221; problems require sitting at the machine to properly deal with.</p>
<p>In these cases its handy to be able to deploy a debugger onto the user&#8217;s machine so you can dive in and see where your code is going wrong.  To be successful at this you need a couple of components: the debug symbols from the compile, the source code, and a debugger.</p>
<p>On Windows the debugging symbols are separate files from the executables.  PDB files contains the information debuggers need to map addresses of code and data in a running tool to the source code counterparts.  In Visual Studio, PDBs are only generated in the Debug configuration by default, so assuming you distribute something like a Release build to your users you will need to turn on PDB generation in that configuration.  Its under Linker&#8230; Debugging&#8230; Generate Debugging Info.  Set it to Yes (/DEBUG).  When you prepare and publish your tool set, make sure to include these PDBs with the executables (EXE and DLL files).</p>
<p>PDBs can get quite large, so it may be a good idea to not always pull down PDB files when users get the latest tools.  Insomniac&#8217;s tools retrieval script has some command line flags to pull down PDBs and code only when we know we want to debug something on a user&#8217;s machine.  Using -pdb will get the executables and PDBs, and -code will get the executables, PDBs, and source (all from a label populated when the tools executables were checked in).</p>
<p>Once you have the PDB and code on the machine you just need a Debugger to dig in with.  On Windows you have a choice: <a href="http://www.microsoft.com/express/">Visual C++ Express Editions</a> or WinDBG (from <a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx">Debugging Tools for Windows</a>).  Both are free to install so you aren&#8217;t bending any license agreements here.  Visual C++ should work pretty much like you expect on your development box, but can take a while to install and patch to the latest service pack.  WinDBG on the other hand is very quick to install, but takes a little getting used to.  Typically you must show the UI you want to use (Callstack, Memory, etc&#8230;), as well as potentially manually setting the PDB search path (from File&#8230; Symbol File Path).  It&#8217;s a very different experience but its so quick to deploy it may be worth checking out.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/363/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=363&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/09/15/debugging-in-the-field/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">gorlak</media:title>
		</media:content>
	</item>
		<item>
		<title>The Dependency Question</title>
		<link>http://toolssig.wordpress.com/2009/09/01/the-dependency-question/</link>
		<comments>http://toolssig.wordpress.com/2009/09/01/the-dependency-question/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 16:37:34 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Dependencies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=358</guid>
		<description><![CDATA[One thing I&#8217;ve been interested in for a while is what I call &#8220;The Dependency Question&#8221; as it relates to tools. The question is, when and how do you share code between your game and your tools, specifically tools that are communicating with the game either directly while it&#8217;s running or through things like asset [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=358&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One thing I&#8217;ve been interested in for a while is what I call &#8220;The Dependency Question&#8221; as it relates to tools.  The question is, when and how do you share code between your game and your tools, specifically tools that are communicating with the game either directly while it&#8217;s running or through things like asset files. There are many options on how to do this, and even more opinions on how to do it wrong.  From a dependency standpoint, though, you have two options.</p>
<p>First, you can have the tools and the game depend on a shared library of resources.  The tools have their own UI, tick or don&#8217;t tick at their own rate, and may or may not use the same renderer as the actual game.  By creating tools this way, you have tools automatically update their own behaviors as new features are added to the game, or even automatically generate their own UIs if you&#8217;re using a dlls and a reasonably <a href="http://toolssig.wordpress.com/2009/03/30/the-tech-behind-the-tools-of-insomniac-games/">robust reflection system</a>.  The problem here is that if you&#8217;re not using the game&#8217;s update and render loops, you still have to boot the game to see everything in action.  This can create long turnaround time for assets, especially if your game takes a long time to boot and / or load.  That said, this allows you to keep your tools slightly smaller, it reduces dependencies on what are often unnecessary game libraries (like threaded sound and in game UI), and can make the tools less prone to break due to game changes.</p>
<p>Your second option is to either make the tools dependant on the entire game, or make the tools embedded in the game. Now, I think every studio has a small amount of &#8220;on the fly editing&#8221; capabilities in their engine, but there are very few that are willing to take the full plunge and make their game the editor.  In some cases, this is because they can&#8217;t afford the extra memory or processor time to fit an editor on a console dev kit.  That said, in game editors, or editors that can run the full engine stack, can reduce asset turnaround time significantly.  Given a properly designed tool, artists, designers, and scripters can actually edit objects on the fly, and see their changes affect the environment immediately.  Once given a tool like this, few would want it taken away.  However, these tools can also get cumbersome as well.  Because you&#8217;re working in the game engine directly, few tools developers in this scenario will take the time to develop good user interfaces, as it tends to clutter up the screen quickly, instead relying on weird key or button combinations to achieve the desired result.</p>
<p>In both cases of dependency, the one thing you need to avoid is the dreaded <em>#IFDEF EDITOR</em> block, and I know you&#8217;ve all seen them, and they almost always defeat the purpose of having shared code in the first place.  The idea behind shared code is to make sure the editor behaves the same way the game would under the same circumstances.  #IFDEF EDITOR blocks, by definition, create inconsistencies between editor and game.  But these blocks almost always become a necessity at some point, which is why some studios prefer to forgo the dependency question entirely, and instead opt for a tool that outputs a platform independent format (XML or JSON for example) then has various versions of the game decide what to do with them.  The game can ignore blocks it doesn&#8217;t understand, and fill in missing blocks with default values if needed.  This keeps game and editor independent, so that mismatches can be safely dealt with.  However, it still incurs the wrath of the slow turnaround time, and the necessity to maintain two separate code bases.</p>
<p>In my opinion, dependency is a requirement.  The idea here is to protect against game changes, include the ability to preview your game, and shorten turnaround time to the game whenever possible.  Toward this end, you should limit yourself to dynamically linking in only the libraries you need, which is usually your rendering libraries and your game object libraries.  Try using reflection where possible to generate your UI against game objects so that changes in game objects don&#8217;t require complete editor recompiles.  Save and load objects to a text format (XML is my favorite, but you can choose whatever you like) at least during development so that you can protect against mismatched resource bugs, and, lastly, use a <a href="http://toolssig.wordpress.com/2009/06/03/communication-issues-improving-turnaround/">robust shared command system</a> to transmit changes to a running game to shorten turn around time.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/358/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/358/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/358/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/358/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/358/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/358/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/358/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=358&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/09/01/the-dependency-question/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fuzzybinary</media:title>
		</media:content>
	</item>
		<item>
		<title>Reason 1 of 6 &#8211; Design As You Go</title>
		<link>http://toolssig.wordpress.com/2009/08/24/reason-1-of-6-design-as-you-go/</link>
		<comments>http://toolssig.wordpress.com/2009/08/24/reason-1-of-6-design-as-you-go/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 13:30:49 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=336</guid>
		<description><![CDATA[This ongoing series delves more deeply into each of the &#8220;six reasons your game development tools suck&#8221; as argued in my very first post. Many game companies struggle with delivering tools quickly and cheaply.  Money is always an issue wherever you go.  After all, the bottom line is what keeps a company afloat and it&#8217;s employees [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=336&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This ongoing series delves more deeply into each of the &#8220;<a href="http://toolssig.wordpress.com/2009/01/27/the-6-reasons-your-game-development-tools-suck/" target="_self">six reasons your game development tools suck</a>&#8221; as argued in my very first post.</p>
<p>Many game companies struggle with delivering tools quickly and cheaply.  Money is always an issue wherever you go.  After all, the bottom line is what keeps a company afloat and it&#8217;s employees employed.  No one wants their company to fail, to lose their jobs, or to lay off their workers.</p>
<p>Game companies are in an especially difficult position.  Attempting to balance a workforce spread over multiple disciplines &#8212; art, design, programming and production &#8212; is hard enough, but when you consider that those disciplines have their own specialties within each one, the task is even more difficult.</p>
<p>The obvious solution is to cut corners wherever possible, and that oftentimes falls squarely on the shoulders of  the tools team.  Why?  Because most game companies don&#8217;t make money selling tools.  Tools programmers serve in a support role, and therefore (in the minds of most game execs) are less valuable than those working directly on the games.</p>
<p>Tools teams very rarely get the full support of management, and game teams can&#8217;t be stalled waiting for tools to be completed.  The unfortunate sentiment among those in power is that there&#8217;s no time for tool design.  Get it done and get it done now.</p>
<p>There is no time for design, so the thinking seems to go, but what does that really mean?  Does that mean that the programmer implementing the tool charge blindly into development without thinking about how the tool needs to function?  Of course not. </p>
<p>The programmer has a vague idea of what to do, and without ever writing it down or validating his thoughts with the end users in any formal way, begins to implement the design from his own mind.   He still thinks about it a great deal.  Perhaps 75% of his time is spent thinking and only 25% is spent typing.  There are probably still many  unanswered questions, but as the tool begins to take shape, some answers may start to become more obvious one by one.  The tool seems to practically design itself, but in reality, design is going on quite informally.</p>
<p>But wait!  What if one of those unanswered questions causes a serious problem?  What if the best answer to that question requires a rewrite of major portions of current code-base?   What if the other possible answers are so undesirable, that the rewrite actually appears to be the best option.  Because the design had been postponed until the code was in the process of being written, redesign is now very expensive.  Code that has been written will go to waste, and new effort must be exerted to replace it.</p>
<p>If the programmer takes this problem to a (non-technical) manager, concerned with cost and speed of developing the tool, the manager may come to the very justifiable conclusion that a rewrite is not the way to go.  Instead, just make a work-around for this one problem, in other words, a hack. </p>
<p>As long as that&#8217;s the end of the story, then that&#8217;s probably okay.  Unfortunately, more issues may arise, with similar outcomes.  Also, once delivered, the end users will likely have feedback.  After all, without any formal design process, many of their needs/wants/concerns went unheard.  And now the real fun begins.</p>
<p>It&#8217;s already been established that the quickest solution is more desirable than better architecture and code, and so as feature requests are delivered to the programmer from the users, more and more workarounds are put into place to deliver a new tool quickly.  This leads to code that is difficult to maintain and potentially very buggy.</p>
<p>The end users are now saddled with a tool that does basically what they want but perhaps has stability or performance problems.  The difficulty  to fix those issues increases as time goes on as the code becomes more brittle and spaghetti-like.  Fixing one thing breaks something else, leading to a never-ending maintenance cycle that really makes no net improvement whatsoever.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/336/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=336&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/08/24/reason-1-of-6-design-as-you-go/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">dangoodmanx</media:title>
		</media:content>
	</item>
		<item>
		<title>Rethinking Asset Control</title>
		<link>http://toolssig.wordpress.com/2009/08/03/rethinking-asset-control/</link>
		<comments>http://toolssig.wordpress.com/2009/08/03/rethinking-asset-control/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 14:00:41 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Revision Control]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=322</guid>
		<description><![CDATA[Many of the available source control solutions out there are great if you are a programmer.  Both Subversion and Perforce adequately handle the storing of assets, but neither is very friendly to creative types.  How often do &#8220;bad checkins&#8221; happen because some new and obscure file created on the user&#8217;s machine didn&#8217;t get added?  Or maybe [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=322&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Many of the available source control solutions out there are great if you are a programmer.  Both Subversion and Perforce adequately handle the storing of assets, but neither is very friendly to creative types.  How often do &#8220;bad checkins&#8221; happen because some new and obscure file created on the user&#8217;s machine didn&#8217;t get added?  Or maybe the user didn&#8217;t get latest, merge the data, build the game and test it one last time before checking everything in. </p>
<p>Team sizes are increasing.  So are the assets, themselves.  The more users stressing the system, the more fragile it becomes.</p>
<p>NxN had the right idea with Alienbrain but never really got anywhere due to serious technical issues with their back-end.   It&#8217;s been a few years since I used it last, so they may have fixed a lot of those problems.   Anyway, it also had some very nice features you don&#8217;t get in other source control solutions.  You could easily redesign the whole interface (it was mostly html and javascript as I recall), and they included a feature that was very art-centric.  Previews.</p>
<p>You could generate previews of assets and view them right in the Alienbrain interface.  It was a very slick feature and a selling point of the software.  Finally, a user could see a preview of a model or texture (and many other asset types) without doing a get and opening the files in Maya or Photoshop, etc.  That&#8217;s a real time-saver if you don&#8217;t remember the filename that was used for a specific asset.  You have the chance to browse all the assets of that type and find the one you want pretty easily.</p>
<p>Like I said, though, NxN had its share of troubles.  Still, I believe we can do better than the source control status-quo.  I imagine an asset database solution that integrates with every asset generating tool, as well as the build process, generates a preview for each asset (even if it&#8217;s a bitmap that says &#8220;Preview Not Available&#8221;), and is searchable by its meta-data, including tags, creator, last modified, and so on. </p>
<p>The classic view of assets as a collection of files inside of folders, with users having to know exactly what files need to be checked in and out of source control when changes are made seems a little antiquated.  Instead of searching through folders ten layers deep, how about using a tag cloud to find assets instead?</p>
<p>I imagine being able to open a web-based interface, searching for an animated character from an old project and clicking a button to copy it to a new project, including all of it&#8217;s vertex, texture and animation data and using it as the starting point for a brand new character, or maybe just as a placeholder until a new character is created.  How many walk cycles does one studio need to recreate every time a new project is started, anyway?  Why not take something you have and modify it to fit a new character in a completely different game?</p>
<p>I really beieve that asset databases are the wave of the future for game development.  When the Xbox360 and PS3 came along, team sizes doubled, and assets got bigger and more complex.  What&#8217;ll happen next time there&#8217;s a hardware revolution?  We need to streamline the way we manage assets, or else, it&#8217;s going to bite us in the ass&#8230; even more.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/322/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=322&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/08/03/rethinking-asset-control/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">dangoodmanx</media:title>
		</media:content>
	</item>
		<item>
		<title>Sharing code with p4share</title>
		<link>http://toolssig.wordpress.com/2009/07/26/sharing-code-with-p4share/</link>
		<comments>http://toolssig.wordpress.com/2009/07/26/sharing-code-with-p4share/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 03:52:26 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Revision Control]]></category>
		<category><![CDATA[Teams]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=303</guid>
		<description><![CDATA[Recently Insomniac Games has expanded to include a second studio in Durham, NC. Durham has their own Perforce server instance to support engineering and asset production for their titles. While the Core Team (engine and tools engineering) is still located in Burbank, Durham has a small group that add features and improvements to help get [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=303&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently Insomniac Games has expanded to include a second studio in Durham, NC.  Durham has their own Perforce server instance to support engineering and asset production for their titles.  While the Core Team (engine and tools engineering) is still located in Burbank, Durham has a small group that add features and improvements to help get their games done.  Until recently we got by okay with Durham taking code drops from Burbank, but we needed something better.  We needed a way to share code bidirectionally.</p>
<p>Unfortunately Perforce was not designed as a distributed revision control system, so we needed to come up with our own solution.  We needed to allow sharing code across Perforce server instances.  p4share is a Perl script I wrote to help solve this problem without involving a huge list of complicated manual steps.</p>
<p>To get the job done it does a lot of deleting, syncing, and copying of files on the local client&#8230; nothing too exciting.  I was however able streamline the process in a interesting way given Perforce&#8217;s ability to open a file for edit at the client have revision (as opposed to the head revision).  When you open a file for edit at the client have revision then all of the changes that have been made in subsequent revisions must be resolved into your edits before you submit your changes.  This resolve step is only necessary when your have revision does not equal the head revision when checking out a file, or the file in question allows for multiple checkout and someone edited and submit changes before you can submit.</p>
<p>Given the ability of Perforce to open a historical revision for edit, I was able to make p4share less likely to loose edits on files that have changed on both servers.  p4share uses a label to store the revision at which each file was last shared.  When sharing happens again in the future, the client is synced back to the revision that was submitted the last time files were shared.  The files are then opened for edit at that historical revision and overwritten with files from the other server.  In this state any file that had changed on both sides will require resolution to submit, but the resolving mechanics of Perforce has all the information it needs to do automatic resolution (two versions of a file and a base revision&#8230; which in this case is the revision labeled during the last share session).</p>
<p>Using this technique is a win because it removes the possibility of stomping files and losing changes on either side when manually merging changes from both servers.</p>
<p>You can find p4share on <a href="http://nocturnal.insomniacgames.com">Nocturnal Initiative</a>&#8216;s Perforce server: nocturnal.insomniacgames.com:1666 at //Source/Trunk/p4share/p4share.pl, and via p4web <a href="http://nocturnal.insomniacgames.com:8080/@md=d&amp;cd=//Source/Trunk/p4share/&amp;cdf=//Source/Trunk/p4share/p4share.pl&amp;c=nvd@//Source/Trunk/p4share/p4share.pl?ac=22">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/303/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=303&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/07/26/sharing-code-with-p4share/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">gorlak</media:title>
		</media:content>
	</item>
		<item>
		<title>Doing The Math</title>
		<link>http://toolssig.wordpress.com/2009/07/22/doing-the-math/</link>
		<comments>http://toolssig.wordpress.com/2009/07/22/doing-the-math/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 15:14:39 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Making the Case]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=280</guid>
		<description><![CDATA[In response to Dan&#8217;s post on when to rewrite vs. refactor existing tools, I wanted to point out what I felt was a key section: Now comes the real decision point though.  Does a rewrite make sense for the current project or should it be put off for a later time? If you&#8217;re in beta, rewriting a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=280&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In response to <a href="http://">Dan&#8217;s post</a> on when to rewrite vs. refactor existing tools, I wanted to point out what I felt was a key section:</p>
<blockquote><p>Now comes the real decision point though.  Does a rewrite make sense for the current project or should it be put off for a later time? If you&#8217;re in beta, rewriting a tool now isn&#8217;t going to help you get your game done.  Consider how long a rewrite will take in man-days and calendar days.  If you can get the new and improved tool into the hands of your developers fast enough to save them more time than it took to develop it, then I say, go ahead.</p></blockquote>
<p>The key point here, is the suggestion that you &#8220;do the math&#8217; on the tool: figure out how much time it will take to rewriting versus refactor, and balance that against the time saved by the number of developers that use the tool.</p>
<p>But doing the math should be a key concept when you&#8217;re trying to figure out anything tools related, including trying to convince higher ups that you really need a dedicated tools team or process team.  What you need to take to them is real data that shows that you save more money with a tools team, or a tools refactor, than without one.  So the question is, how do you accomplish this?</p>
<p>To answer this question, you need to know three pieces of data:</p>
<ol>
<li>How many developers use your tool?</li>
<li>How much time does each developer waste because of poor design or poor implementation, OR how much time would be saved if a new tool was implemented?</li>
<li>How much does each developer cost?</li>
</ol>
<p>Number 1 and number 3 are easy to know.  Just take a quick head count, and then compare their levels to the average salary for their field and the experience level using the published data from the <a href="http://www.gamasutra.com/php-bin/news_index.php?story=23264">Game Developer Salary Survey</a>.  Estimates here are usually fine.  Using averages across the board (about $45k per year per developer, which comes up to about $22 an hour) here&#8217;s the numbers you&#8217;re going to come up with.</p>
<table border="1">
<tbody>
<tr>
<th>Number of<br />
Developers</th>
<th>Hours Lost<br />
/developer / day</th>
<th>Cost / day</th>
<th>Cost / year</th>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>$21.63</td>
<td>$5,625.00</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>43.27</td>
<td>11,250.00</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
<td>$64.90</td>
<td>$16,875.00</td>
</tr>
<tr>
<td>4</td>
<td>1</td>
<td>$86.54</td>
<td>$22,500.00</td>
</tr>
<tr>
<td>5</td>
<td>1</td>
<td>$108.17</td>
<td>$28,125.00</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>$43.27</td>
<td>$11,250.00</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>$86.54</td>
<td>$22,500.00</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>$129.81</td>
<td>$33,750.00</td>
</tr>
<tr>
<td>4</td>
<td>2</td>
<td>$173.08</td>
<td>$45,000.00</td>
</tr>
<tr>
<td>5</td>
<td>2</td>
<td>$216.35</td>
<td>$56,250.00</td>
</tr>
</tbody>
</table>
<p>You&#8217;ll notice that at about 4 developers loosing 2 hours per day, you&#8217;ve basically paid for another developer.  Even if you have 10 developers loosing 30 minutes per day, you can afford an intern to fix that problem.</p>
<p>With that said, hours lost per day, or hours of productivity gained is always going to be a best guess, and if you&#8217;re trying to sell this concept to higher ups, you&#8217;re going to have to make sure that you get that number right, or can somehow convince them that you got the number right.  Now, the best way to do this is by having your tools gather metrics concerning how often they crash, time between key actions, build times, cook times, and turnaround times, but that only helps if you already have a team and are just looking to expand it.  Otherwise, you have to rely on hearsay, but here are some techniques that should help:</p>
<ul>
<li>Ask other developers how much time they think they lose on a given day because of bad tool design or performance and average those numbers.  Ask for comments about how tools could improve.</li>
<li>Show time lost from other developers who are only spending half of their time (or less) working on tools.  If you have a bug tracker, you can use those numbers to show amount of time spent on tools bugs.  Combine these with well known metrics concerning hours lost in task switching to show real cost for these support requests.</li>
<li>Show an unfilled developer need.  If you hear people having trouble with a specific issue, ask them how much time they think they could save (on average) if a tool were made to help them.  Show that it would cost less to hire a tools developer than to leave the problem unfixed.</li>
</ul>
<p>Of course, once you&#8217;ve convinced higher ups to create a tools team, don&#8217;t stop there.  Show them it was worth it.  Too many people stop once they have what they want and don&#8217;t show the real and tangible benefits.  These are not always obvious, especially to people who aren&#8217;t in the &#8220;pits&#8221; (meaning doing actual development), especially when some developers may not be vocal about their increased productivity, only their frustrations with a new tool.  Show the amount of productivity gained, and amount of money saved.  That will help prove to you and your boss the value that a tools team can bring.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/280/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=280&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/07/22/doing-the-math/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fuzzybinary</media:title>
		</media:content>
	</item>
		<item>
		<title>Indie Game Tools</title>
		<link>http://toolssig.wordpress.com/2009/07/20/indie-game-tools/</link>
		<comments>http://toolssig.wordpress.com/2009/07/20/indie-game-tools/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 14:00:18 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Middleware]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=268</guid>
		<description><![CDATA[A lot of what gets talked about in the &#8220;professional&#8221; game development sphere is the high-end high-priced tools or those that were developed internally by a dedicated programmer or team of programmers.  Where does this leave the smaller groups that are popping up now, those that are developing primarily for the iPhone or the web? [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=268&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A lot of what gets talked about in the &#8220;professional&#8221; game development sphere is the <span style="text-decoration:line-through;">high-end</span> high-priced tools or those that were developed internally by a dedicated programmer or team of programmers.  Where does this leave the smaller groups that are popping up now, those that are developing primarily for the iPhone or the web?</p>
<p>Luckily, there is a lot of great software out there that is either open source or very cheap, and the very best solutions have risen to the top.  Most of us have heard of Blender, Gimp, the Torque Engine and Unity (which includes a $200 &#8220;indie&#8221; version), and there are a great deal more.  Check out <a href="http://indiegametools.com/">IndieGameTools.com</a> for a good list of the best stuff.</p>
<p>While some of these tools are really great, there will always be a need for custom tools, that aren&#8217;t very useful to other developers.  Smaller developers should consider partnering with a small tools development company or individual contractor.  there are a few people out there who are doing this sort of work and banding together can be mutually beneficial.  Getting someone experience to help out in this area can give a leg up on the competition, after all, the better the tools, the easier it is to make a great game.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/268/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=268&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/07/20/indie-game-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">dangoodmanx</media:title>
		</media:content>
	</item>
		<item>
		<title>When to Throw in the Towel</title>
		<link>http://toolssig.wordpress.com/2009/07/02/when-to-throw-in-the-towel/</link>
		<comments>http://toolssig.wordpress.com/2009/07/02/when-to-throw-in-the-towel/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 14:00:28 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Production]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=257</guid>
		<description><![CDATA[I got an email recently asking for my advice on bug fixing vs. completly rewriting a broken tool.  The email described  the complexity of the tool in question being caused by the addition of new features on top of an already shakey starting point.  This sort of problem always comes down to time and money.  The perception among [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=257&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I got an email recently asking for my advice on bug fixing vs. completly rewriting a broken tool.  The email described  the complexity of the tool in question being caused by the addition of new features on top of an already shakey starting point. </p>
<p>This sort of problem always comes down to time and money.  The perception among management may be that this is going to waste time.  After all, why rewrite something that seems to work fine, and if there are issues, isn&#8217;t it easier (and cheaper) to fix a few bugs than to write something from scratch?</p>
<p>Well, that may be true, but not necessarily.  After all, buggy tools waste the time of everyone using them.  If ten people waste just ten minutes per day, over the course of a single project that lasts a year, then you&#8217;ve lost  over 10 weeks worth of work during that project.  The actual amount of time may be much greater of course.  I&#8217;ve worked in some studios where tools were so slow and buggy, it wasn&#8217;t uncommon for individuals to lose several hours in a single day.</p>
<p>I knew a programmer who would write almost every piece of code twice.  He would completely scrap the first implementation in favor of his second try.  The first was basically a learning experience, and once he figured out how to solve the problem, he could do it much more cleanly on the second go.</p>
<p>Rewriting a better tool may be much faster than the initial implementation.  The team has learned from their mistakes and may have a much clearer vision for how the tool should be designed and implemented.  There may also be some re-usable code, so not everything needs to be wasted; individual modules may be able to be salvaged.</p>
<p>Now comes the real decision point though.  Does a rewrite make sense for the current project or should it be put off for a later time? If you&#8217;re in beta, rewriting a tool now isn&#8217;t going to help you get your game done.  Consider how long a rewrite will take in man-days and calender days.  If you can get the new and improved tool into the hands of your developers fast enough to save them more time than it took to develop it, then I say, go ahead.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/257/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=257&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/07/02/when-to-throw-in-the-towel/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">dangoodmanx</media:title>
		</media:content>
	</item>
		<item>
		<title>Survey: Middleware</title>
		<link>http://toolssig.wordpress.com/2009/06/23/survey-middleware/</link>
		<comments>http://toolssig.wordpress.com/2009/06/23/survey-middleware/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 16:29:34 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=255</guid>
		<description><![CDATA[In February, Mark DeLoura put up a survey on game engines, which we posted and posted his subsequent results.  Well, he&#8217;s doing it again and I&#8217;m sure has refined the survey a bit to answer some of the questions raised by his original survey.  This new survey is available here and we&#8217;re asking the Toolsmiths [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=255&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In February, Mark DeLoura put up a survey on game engines, which we posted and <a href="http://toolssig.wordpress.com/2009/03/06/engine-survey-results/">posted his subsequent results</a>.  Well, he&#8217;s doing it again and I&#8217;m sure has refined the survey a bit to answer some of the questions raised by his original survey.  This new survey is available <a href="http://ow.ly/eYiY">here</a> and we&#8217;re asking the Toolsmiths readers to take part if they haven&#8217;t already, and we&#8217;ll be sure to post the results as soon as they&#8217;re available.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/255/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=255&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/06/23/survey-middleware/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fuzzybinary</media:title>
		</media:content>
	</item>
		<item>
		<title>Communication Issues: Improving Turnaround</title>
		<link>http://toolssig.wordpress.com/2009/06/03/communication-issues-improving-turnaround/</link>
		<comments>http://toolssig.wordpress.com/2009/06/03/communication-issues-improving-turnaround/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 15:06:59 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=252</guid>
		<description><![CDATA[One of the key issues in game tools development is how to improve asset turnaround time; how long is it between when an artist, programmer, writer, level designer, sound designer, or even an executive makes a change before the results can be seen in game or at least in engine. More importantly, how many other [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=252&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the key issues in game tools development is how to improve asset turnaround time; how long is it between when an artist, programmer, writer, level designer, sound designer, or even an executive makes a change before the results can be seen in game or at least in engine.  More importantly, how many other people will be affected by said change?  The goal in any organization should be to make asset turnaround times as short as possible, and allow developers to make and test changes in isolation before shipping them out to the rest of the team.</p>
<p>There are a lot of approaches to this problem, but I&#8217;m going to narrow down the solutions to three that tend to be more efficient and should be used when developing a mature tools pipeline: Using in game editors as opposed to stand alone tools, implementing dynamic resource loading and unloading (through something like a developer console), and improved communication between game and stand alone tools.</p>
<p>Right now, I&#8217;m going to focus on the third possibility.  The use of a game-embedded editor versus a standalone tool set is an ongoing argument in the tools community, and each side has its positive and negatives, but regardless of which way you go, some of your tools are not going to be game-embedded, and it is important that any &#8220;stand-alone&#8221; tools be able to communicate with your game.  By creating even a simple a communication library, you&#8217;ll be able to issue commands to the game remotely, grab and analyze information without using game resources, and smartly organize, load and save diagnostics information, which might otherwise create large amounts of special case code in your game.  By creating a slightly more complicated communication system, you can dynamically run scripts, save and load resources, and even set up a system that communicates changes in seconds to running games.  Talk about turnaround time.</p>
<p>The key to creating a good communications library is understanding the limitations of each console, and when the console (or running game) can initiate communications with a PC, and visa versa.  For things other than debug output (the topic of another article), you can assume that a running tool can communicate with a running game, but not the other way around.  This means that the tool must initiate the communication before the console can send the necessary information back.  In addition, most communication libraries perform this communication in a background thread and, if they don&#8217;t you should design them to do so.  The last thing to keep in mind is that some commands may require a lot of data be sent back and forth from the tool and the game, and it is advantageous to split these commands into multiple sends of packet data, both from the tool and back from the game.  A well defined command system will be able to specify just how much data will be sent, and <img src="http://toolssig.files.wordpress.com/2009/06/060309_1506_communicati1.png?w=655" alt="" align="left" />how many packets it intends to split the data across.</p>
<p>So how do we go about doing this?  First, consult your console&#8217;s documentation on communication.  For PC, your best bet is to used named pipes.  From there, the diagram at left offers a very high view of things, using command factories to create defined commands and issue responses.  Here&#8217;s the basic rundown.</p>
<ol>
<li>Have your game open a well known named pipe, either public (if you want to communicate across PCs) or private (if you don&#8217;t).  The game can then sit in a wait state on the pipe, looking for commands from your tool.  Remember, this is in a separate thread, so having it in a wait state shouldn&#8217;t impact your game.</li>
<li> Have your tool connect to the same named pipe, and issue a command string and parameters.</li>
<li>Have the game, on receiving input, look up the command in a command map.  This should point to either a command factory class or command factory method (I prefer the later for memory reasons, and a class is usually overkill).  The factory should return a class that inherits from a base command.</li>
<li>Run the returned command with parameters.  The command should always generate some sort of simple response, be as simple as  Succeeded / Failed or as complex as Need More Data, Ready To Send Data, or Ready To Initiate Communication.</li>
<li>Send this response back to your tool, which should display the result to the user.</li>
</ol>
<p>From here, the amount and type of communication is up to you, though this can become very complicated very quickly, as you&#8217;re essentially creating your own network protocol.  However, there are a few things you should keep in mind.  First, as I said before, you&#8217;ll want to design your protocol to be able to push multiple packets of information, usually of fixed size.  This will dramatically reduce your memory requirements game side and will improve response on your tool side, as you&#8217;ll be able to offer more information to your users faster than if you were waiting for one large response.  Second, develop a system for communicating with persistent items, such as pieces of debug information or your AI.  This way you don&#8217;t have to go searching for the AI or object you&#8217;re watching or manipulating on every command, it will just always be there.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toolssig.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toolssig.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toolssig.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toolssig.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toolssig.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toolssig.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toolssig.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toolssig.wordpress.com/252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toolssig.wordpress.com&amp;blog=6229262&amp;post=252&amp;subd=toolssig&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toolssig.wordpress.com/2009/06/03/communication-issues-improving-turnaround/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fuzzybinary</media:title>
		</media:content>

		<media:content url="http://toolssig.files.wordpress.com/2009/06/060309_1506_communicati1.png" medium="image" />
	</item>
	</channel>
</rss>
