<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Toolsmiths &#187; Frameworks</title>
	<atom:link href="http://thetoolsmiths.org/category/programming/frameworks/feed/" rel="self" type="application/rss+xml" />
	<link>http://thetoolsmiths.org</link>
	<description></description>
	<lastBuildDate>Fri, 07 May 2010 01:34:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>XSLT as a Development Tool</title>
		<link>http://thetoolsmiths.org/2010/01/22/xslt-as-a-development-tool/</link>
		<comments>http://thetoolsmiths.org/2010/01/22/xslt-as-a-development-tool/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 13:00:53 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=403</guid>
		<description><![CDATA[Some time ago, I decided to write a small C# &#8220;wizard&#8221; tool for enemy encounters and other level design patterns.  The idea was to create pattern types, that designers could define with a small amount of data (different for each type of pattern) that could be exported into a much more complex xml format that could describe when [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, I decided to write a small C# &#8220;wizard&#8221; tool for enemy encounters and other level design patterns.  The idea was to create pattern types, that designers could define with a small amount of data (different for each type of pattern) that could be exported into a much more complex xml format that could describe when to spawn what enemies, what behaviors and properties to give them, etc. in order to make each instance of a pattern unique. </p>
<p>The properties set by the designers were stored internally as an XML document, since XML in C# is incredibly easy to manipulate, and since the data would be different for each level design pattern.  It was easy enough to save out the raw XML data as it was stored internally, but the problem was how to transform this data into the format that would be read into the game. Enter XSLT.</p>
<p>C# has the functionality to transform data internally with an external XSLT file.  It&#8217;s easy enough to associate a XSLT file with a specific pattern, apply it at run time, and then simply write out the result.  At this point, it&#8217;s simply a matter of providing the designers with the data files necessary to generate their data.</p>
<p>The advantages here are great.  Putting the complex structure and syntax in an external file, and separating it from the designer&#8217;s view, allows them to concentrate on what&#8217;s  actually important.  The downside is that someone has to craft these XSLT files, which is a format that is a bit obtuse for someone used to functional languages.  Additionaly, XSLT has little to no debugging capability.</p>
<p>Now, more recently, I&#8217;ve had the challenge of writing an exporter from OpenOffice Calc, which also uses XSLT as filters for importing and exporting.  All OpenOffice documents are are stored as XML.  In fact, if you simply rename an .ODS file to a .ZIP file, you can explore the format, which is spread over several files inside the .ZIP, the most interesting of which is called content.xml.  This is the data that needs to be transformed in order to get the information out of OpenOffice into your own format.</p>
<p>What we wanted was a way to store properies of all enemies in a single table, so designers could tweak values easily.  The data then needed to be exported into a proprietary text format (not XML).  This is also relatively easy with XSLT, but as with anything, exporting from Calc with XSLT had its pitfalls.</p>
<p>It&#8217;s easy enough to access individual cells in a row in Calc.  Unfortunately, for some reason, they decided that if adjacent cells in a single row have the same value, it would only be stored in the first cell and an attribute on that cell would indicate the value repeats for n-number of cells.</p>
<p>With XSLT, there are no variables that can change their values, only constants within a single template (the XSLT equivalent of a function).  Consequently, there are no &#8220;for loops&#8221; in the traditional sense.  The way to get around this with XSLT is to use recursion.  In my script, I basically have every cell recursively calling the template on the next cell in the row, or on itself in the case of repeated cells, and track the cell heading (the first row of the table) separately.  Just thinking about it gives me nightmares.</p>
<p>At any rate, more and more data is being stored as XML, and consequently XSLT is probably here to stay.  It&#8217;s another tool that should be available in the game developer&#8217;s toolbox, but must be used with care.  To learn more, there are tons of resources on the web, but your best bet for a good introduction is the W3 schools site at <a href="http://www.w3schools.com/xsl/">http://www.w3schools.com/xsl/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/01/22/xslt-as-a-development-tool/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Playing with Prototyping Tools</title>
		<link>http://thetoolsmiths.org/2009/09/27/playing-with-prototyping-tools/</link>
		<comments>http://thetoolsmiths.org/2009/09/27/playing-with-prototyping-tools/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 00:25:34 +0000</pubDate>
		<dc:creator>Casey O&#39;Donnell</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Prototyping]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=355</guid>
		<description><![CDATA[Hey readers, my name is Casey O&#8217;Donnell, I&#8217;m one of the new Toolsmiths around here. I&#8217;m a bit of a strange one, having worked in the industry, studied the industry, and now as a professor at the University of Georgia. My research has begun to focus more and more on tools, tool development, and open [...]]]></description>
			<content:encoded><![CDATA[<p>Hey readers, my name is Casey O&#8217;Donnell, I&#8217;m one of the new Toolsmiths around here. I&#8217;m a bit of a strange one, having worked in the industry, studied the industry, and now as a professor at the University of Georgia. My research has begun to focus more and more on tools, tool development, and open source software. I still do a bit of game development <a href="http://www.osyosmosis.com/" target="_blank">that should be announced soon</a>; a small development project that used Unity (a not-so open source tool), which I and my team enjoyed using (minus the lack of SVN integration).</p>
<p>In my efforts to put the tools and tool-chain wiki together (another one of many projects that was sidelined during the summer), I stumbled upon the (now not-so) recent <a href="http://2dboy.com/2009/05/27/rapid-prototyping-framework" target="_blank">blog post of 2D Boy</a>, announcing the release of their rapid protyping framework (&#8220;<a href="http://2dboy.com/2009/05/27/rapid-prototyping-framework" target="_blank">BoyLib</a>&#8220;). I don&#8217;t like having design students get bogged down in technical issues right away, so I am always looking at a variety of different tools for testing and thinking through game mechanics. While evaluating the BoyLib framework, Jeff Ward suggested that I compare it to <a href="http://code.google.com/p/angel-engine" target="_blank">Angel</a> and <a href="http://bitbucket.org/fuzzybinary/angelxna" target="_blank">AngelXNA</a> [<a href="http://www.jeffongames.com/2009/05/angelxna-v10" target="_blank">Jeff on AngelXNA</a>], both of which were new to me. This is also read through the lens of my current efforts to port <a href="http://www.indielib.com/" target="_blank">IndieLib</a> to Mac OS X. Thus I spiraled further down the rabbit hole of rapid prototyping.</p>
<p>One of the primary advantages of AngelXNA that I&#8217;ve found is its linkages to XNA and the Game Studio asset pipelines. While rapid prototyping, it is nice to not give a second thought to how your assets will be imported into the game. Of course this isn&#8217;t entirely the case, sounds must still be in particular formats and in particular places for XNA to properly locate them. BoyLib uses <a href="http://www.ambiera.com/irrklang" target="_blank">irrKlang</a> and Angel uses <a href="http://www.fmod.org/" target="_blank">FMOD</a> for sound importing, which buys you some flexibility greater than XNA. IndieLib uses <a href="http://openil.sourceforge.net/" target="_blank">DevIL</a> for its image reading and <a href="http://www.grinninglizard.com/tinyxml" target="_blank">TinyXML</a> for XML. BoyLib also uses <a href="http://www.grinninglizard.com/tinyxml" target="_blank">TinyXML</a> for XML. Angel makes liberal usage of .ini configuration files and Python for scripting. Angel uses Box2D, BoyLib doesn&#8217;t seem to include a physics engine of any kind, so you&#8217;ll be coding that up from scratch. AngelXNA of course implements the underlying physics in an XNA friendly manner. IndyLib really excells in the 2D realm. The developers have clearly thought through the issues that most often affect 2D game development. Things like layers are an underlying construct, so end up being elements you pay attention to at the outset rather than thinking about them after the fact.</p>
<p>Ultimately, what I found interesting about each engine was its approach to pipelines. Getting art assets and design data into an engine becomes the crucial component. Image libraries, text file parsing, and supported scripting languages quickly become the focus for engineering problems on these engines. All except <a href="http://bitbucket.org/fuzzybinary/angelxna" target="_blank">AngelXNA</a> that is. The real plusses and minuses for each engine seem to come down to file support, preferences toward coding conventions, and supported platforms. While AngelXNA is great for prototyping and does an excellent job of using XNA&#8217;s asset pipelines, it creates Windows only binaries, and while it may allow you to prototype on your Xbox, taking it other platforms will provide not an insignificant amount of work.</p>
<p>Of course Angel has has had a bit more time to mature that BoyLib, and AngleXNA benefits from this history. IndyLib, though quite promising, offers the least amount of support for various file types and means by which to get things moving. Not to mention that Angel works on Windows, Mac OS X, and AngelXNA on Windows/Xbox 360 Community. BoyLib and IndieLib are currently stuck without a Mac port, which is something I&#8217;ve spent several days now really investigating. Combined with Angel&#8217;s overall better support for various file types, it seems to have the overall edge for a robust protyping tool and overall indy &#8220;engine.&#8221; That isn&#8217;t to say that IndyLib doesn&#8217;t have a great deal going for it. Indeed its focus on the 2D may very well make it a more desirable tool in some cases.</p>
<p>I was also intrigued by the near ubiquitous support for some sort of USB controller for these engines. This seems to indicate the for many game developers, the likely idea seems to be to really use these to develop prototypes for consoles rather than as &#8220;engines&#8221; in the more traditional sense. These are frameworks used to test out mechanics and user interactions quickly and relatively inexpensively. Personally, I&#8217;ve found that a USB Xbox 360 Controller can really provide an identifiable and productive gaming experience more quickly than the mouse or keyboard when trying out simple game mechanics and user interaction methods. Thus having controller support right away is a treat for most of these libraries.</p>
<p>This post is also an invitation, I&#8217;d like to get a sense of what frameworks readers are using. What works for you? What doesn&#8217;t work? What Open Source frameworks do you use? What closed source tools/frameworks do you use (assuming you can say)? As I gather all of these bits and pieces together, you become my greatest assets, so let me know what tools and tool-chain bits you want to see on the wiki.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/09/27/playing-with-prototyping-tools/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tools of &#039;Love&#039;</title>
		<link>http://thetoolsmiths.org/2009/04/28/tools-of-love/</link>
		<comments>http://thetoolsmiths.org/2009/04/28/tools-of-love/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 17:56:27 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Production]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[uni-verse]]></category>
		<category><![CDATA[verse]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=218</guid>
		<description><![CDATA[Here is an interesting video of the tools Eskil Steenberg has engineered for his game Love: [youtube=http://www.youtube.com/watch?v=DPIA2g8T6Hw] His integration with Uni-Verse is definitely an interesting take on what life as a content creator could be like without having to deal with load/save/export via files on disk. Verse seems to disconnect where data is stored and [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an interesting video of the tools Eskil Steenberg has engineered for his game <a href="http://www.quelsolaar.com/love/index.html">Love</a>:</p>
<p>[youtube=http://www.youtube.com/watch?v=DPIA2g8T6Hw]</p>
<p>His integration with <a href="http://uni-verse.org/">Uni-Verse</a> is definitely an interesting take on what life as a content creator could be like without having to deal with load/save/export via files on disk.  Verse seems to disconnect where data is stored and how its managed from the user.  It comes across to me as fitting the client/server paradigm of the web into content creation tools for games.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/04/28/tools-of-love/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Discussion Point: C++ STL &amp; Games</title>
		<link>http://thetoolsmiths.org/2009/02/17/discussion-point-c-stl-games/</link>
		<comments>http://thetoolsmiths.org/2009/02/17/discussion-point-c-stl-games/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 00:04:10 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=99</guid>
		<description><![CDATA[The C++ STL is pervasive in tools development.  C++ STL coupled with memory heaps backed by paging files will take one pretty far.  However, there are some aspects to C++ STL that make sharing code between tools and runtime challenging. In my mind it would be awesome if there was a container library like C++ [...]]]></description>
			<content:encoded><![CDATA[<p>The C++ STL is pervasive in tools development.  C++ STL coupled with memory heaps backed by paging files will take one pretty far.  However, there are some aspects to C++ STL that make sharing code between tools and runtime challenging.</p>
<p>In my mind it would be awesome if there was a container library like C++ STL that supported:</p>
<ul>
<li>Allocator objects as instance API as well as static API</li>
<li>Usage of heap handles (instead of pointers) that would allow memory relocation</li>
<li>Creating and synchronizing threads in a platform-agnostic way</li>
<li>Lockable containers that are safely accessible from more than one thread</li>
<li>Sleeping threads on empty containers (with semaphores or events)</li>
<li>Basic archiving of data to / from flat files</li>
</ul>
<p>Here are some solutions I have found:<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html"></a></p>
<ul>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html">Intel&#8217;s </a><a href="http://www.threadingbuildingblocks.org/">Thread Building Blocks</a> address the locking and sleeping issues.</li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html">EASTL</a> conquers the instance allocator problem, but it is closed source.</li>
<li>C++0x could potentially address some of these (with native support for threads) but I would expect that support or C++0x is still years away (especially for game console compilers).</li>
</ul>
<p>What other solutions are out there?  Are there any resources out there that put all of these pieces together?  It seems to me that a container library that solved these problems in symphony could be very powerful for working with code that needs to work on both workstations and consoles (E.G. portable code that abides by strict memory requirements).</p>
<p>Has anyone solved any of these problems interfacing directly with C++ STL?  If not, does the games industry need something besides STL that could suit these needs better?</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/02/17/discussion-point-c-stl-games/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>To .Net or Not to .Net</title>
		<link>http://thetoolsmiths.org/2009/01/31/to-net-or-not-to-net/</link>
		<comments>http://thetoolsmiths.org/2009/01/31/to-net-or-not-to-net/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 20:13:39 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=59</guid>
		<description><![CDATA[Some comments to my previous post were asking why we decided to switch from .NET to wxWidgets.

Check out the full article for all the gritty details.]]></description>
			<content:encoded><![CDATA[<p>Some comments to my previous post were asking why we decided to switch from .NET to wxWidgets.  Here was why we decided to switch:</p>
<p>* The .NET Forms Designer was very unstable for us. Editing code that gets parsed back into the forms designer lead to forms that could no longer be edited in the designer. Cryptic internal exceptions when trying to edit forms were difficult / impossible to troubleshoot. Sometimes the form would appear but silently remove user controls placed within it. We ended up having to hand code all our UIs because the forms designer would inevitably break our layouts. This was especially true with user controls and controls loaded from assemblies outside Windows::Forms.</p>
<p>* Windows::Forms is buggy and lacking features (Multi-select tree view anyone?). We encountered bugs that we had to workaround that compromised our user experience because Windows::Forms is closed source (why is that anyway? we couldn’t think of a single good reason for Microsoft to keep that source close to their chest). wxWidgets comes with full source and we have made fixes and added features that have been picked up by the main line. wxFormBuilder is a superior solution to this problem and its fast and extremely stable.</p>
<p>* We like to tightly integrate code between our game runtime and tools, and we see this as key moving forward with the next generation. This means we have native C++ code that we wanted to call from .NET (and sometimes *god forbid* vice versa!). This lead to managed C++ (C++/CLI) wrapper classes that ended up creating more work for us. Using .NET made it feel like we had less choices rather than more choices when it came to organizing our code (you must use DLLs), integrating code (especially with intricate data structures), and deploying our tools (.exe.manifest and .exe.config madness just to use an assembly in another folder). All of these things are easier with wxWidgets and native code and we are able to spend less time troubleshooting .NET idiocy and more time creating what our users want. Also, mixed-mode debugging is no fun and gathering callstacks from a crashing tool across the managed/unmanaged barrier isn’t really possible or supported by .NET.</p>
<p>* We already had a good C++ reflection system and data-driven property system (they are in Nocturnal). This gave us type checking, serialization, automatic type conversion, and property sheets without using .NET. These were the killer features to us for using .NET, and having our own solutions to these features that gave us the freedom to ditch .NET for our level and asset editor in about 1 man month.</p>
<p>* Embedding technology based on .NET as a plugin in another product (like Maya) is impossible and/or dangerous and/or difficult. This goes back to what I said about having more choices rather than less choices. wxWidgets integrates with Maya very easily.</p>
<p>* Getting support from Microsoft is a joke. The community is a better source of support than contacting Microsoft directly. Several of our tickets we closed in their tracking system (without a real resolution that we could use) because they were fixed in ‘their internal builds’. They just hung us out to dry on a lot of things. If we are going to be paying for a development environment and UI toolkit then it either needs killer support or it needs to be open source so we can fix it ourselves. Getting stuck at the mercy of a company that won’t release service packs to fix your bugs and makes you pay for them in the next product cycle that contains little in the way of other benefits is immensely maddening. Also, the public hotfix directory is a joke… They need to make fully tested service release so we can get on with our lives!</p>
<p>* wxWidgets is cross platform. I like to believe that someday we (as a studio) won’t be as dependent on Windows as we are now, and wxWidgets gives us strategic room to grow in this regard. The Linux and Mac ecosystems have a lot of things that are desirable compared to Vista/Windows7. Not having to reboot your server farm every 2 weeks due to kernel memory leaks in the 32 bit emulation layer is one example <img src='http://thetoolsmiths.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ultimately switching to wxWidgets simplifies everything in our tools pipeline, makes refactoring and making major changes to key subsystems easier, and makes our tools easier to deploy to our users. It was an easy choice to make, and we haven’t looked back since. We still have several small tools that use .NET and going back to work on them and fix bugs is no fun after switching to wx.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/01/31/to-net-or-not-to-net/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
		<item>
		<title>C++ Events and Delegates</title>
		<link>http://thetoolsmiths.org/2009/01/30/c-events-and-delegates/</link>
		<comments>http://thetoolsmiths.org/2009/01/30/c-events-and-delegates/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 23:06:09 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=45</guid>
		<description><![CDATA[Hi folks, One of the coolest things about working for a company like Insomniac Games is being able to open source technology that our tools team creates.  Nocturnal is our open source project, and one of the most useful things included with the ToolsFramework project is its c++ event and delegate system. Any programmer that [...]]]></description>
			<content:encoded><![CDATA[<p>Hi folks,</p>
<p>One of the coolest things about working for a company like Insomniac Games is being able to open source technology that our tools team creates.  <a href="http://nocturnal.insomniacgames.com">Nocturnal</a> is our open source project, and one of the most useful things included with the ToolsFramework project is its c++ event and delegate system.</p>
<p>Any programmer that has used Microsoft&#8217;s .NET framework will tell you that the events and delegates implementation in .NET is incredibly useful.  It pervades the entire Windows Forms framework.  UI element callbacks, plug-in APIs, and application automation are all made easier by this design pattern.  Unfortunately jumping into the .NET Framework doesn&#8217;t go without significant trade-offs.</p>
<p>When Insomniac ported its tools from .NET to <a href="http://wxwidgets.org">wxWidgets</a> we definitely wanted something as slick as .NET events and delegates.  This is what we came up with, and we have been iterating on it for several years now.  Most of our key libraries and applications lean on it heavily.</p>
<p>This implementation supports a lot of tricky cases that aren&#8217;t easily handled by function (or member function) pointers alone.  Delegates can be added and removed within delegates of the same event and objects that own events can be deleted from within delegates of the same event.</p>
<p>To get started, just typedef the Signature template with your return and parameter types.  Then use the Event class (a member class of Signature) to make a multi-cast event, or Delegate to make a single-cast event.</p>
<p><a href="http://nocturnal.insomniacgames.com/nocturnal/EventDemo.zip">EventDemo.zip</a></p>
<p>Geoff Evans<br />
Insomniac Games</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/01/30/c-events-and-delegates/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>EA&#039;s Prototyping Framework</title>
		<link>http://thetoolsmiths.org/2009/01/30/eas-prototyping-framework/</link>
		<comments>http://thetoolsmiths.org/2009/01/30/eas-prototyping-framework/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 17:51:15 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Prototyping]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=40</guid>
		<description><![CDATA[This is news to me. Apparently EA has release one of its prototyping GameJam frameworks to the public on Google Code. The framework (called Angel) is available here: http://code.google.com/p/angel-engine/ From the site: Angel was originally made by a group of employees at Electronic Arts Los Angeles for use in a GameJam they were planning for [...]]]></description>
			<content:encoded><![CDATA[<p>This is news to me.  Apparently EA has release one of its prototyping GameJam frameworks to the public on Google Code.  The framework (called Angel) is available here:<br />
<a href="http://code.google.com/p/angel-engine/">http://code.google.com/p/angel-engine/</a></p>
<p>From the site:</p>
<blockquote><p>Angel was originally made by a group of employees at Electronic Arts Los Angeles for use in a GameJam they were planning for April of 2008. The source was opened in January 2009.</p>
<p>Angel provides:</p>
<ul>
<li>Actors (game objects with color, shape, responses, attributes, etc.)</li>
<li>Texturing with Transparency</li>
<li>&#8220;Animations&#8221; (texture swapping at defined intervals)</li>
<li>Rigid-Body Physics
<ul>
<li>A clever programmer can do soft-body physics with it</li>
</ul>
</li>
<li>Sound (.wav only)</li>
<li>Text Rendering with multiple fonts</li>
<li>Particle Systems</li>
<li>Some basic AI (state machine and pathfinding)</li>
<li>Config File Processing</li>
<li>Input from a mouse, keyboard, or XBox 360 controller
<ul>
<li>Binding inputs from a config file</li>
</ul>
</li>
<li>Tuning Variables that write out to a config file</li>
<li>In-Game Console</li>
<li>Logging</li>
</ul>
</blockquote>
<p>It should be noted that Angel is not a framework for beginning programmers.  Again, from the site:</p>
<blockquote><p>Angel is designed for experienced engineers. That doesn&#8217;t mean that it uses all sorts of crazy programming techniques or is difficult to use (quite the opposite: see #1), but nor does it hold the developer&#8217;s hand very much. It&#8217;s expected that a developer has at least some experience exploring a codebase to see how it works.</p></blockquote>
<p>I think this is fine for a prototyping framework, as they&#8217;re made to get &#8220;out of the way&#8221; so that a programmer can do exactly what they want quickly.</p>
<p>I look at prototyping frameworks as one of the key tools a company can provide to programmers.  It allows them to quickly and easily investigate a new system in your game without having to go through the complicated mess of your engine (and, yes, regardless of how awesome your engine is, it&#8217;s still a complicated mess).  In my mind, this is a big thing, and I hope it continues to evolve over the next few years.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/01/30/eas-prototyping-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
