<?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>Doolwind&#039;s Game Coding Blog</title>
	<atom:link href="http://www.doolwind.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doolwind.com/blog</link>
	<description>Pragmatic Thoughts On Game Development</description>
	<lastBuildDate>Sun, 08 Jan 2012 08:15:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Game Developer Graduate Exhibition Tips</title>
		<link>http://www.doolwind.com/blog/game-developer-graduate-exhibition-tips/</link>
		<comments>http://www.doolwind.com/blog/game-developer-graduate-exhibition-tips/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 08:15:18 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=574</guid>
		<description><![CDATA[I&#8217;ve been to countless video game graduate industry nights over the past five years. I started out scouting talent for the companies I was working for and now I&#8217;m always on the look out for talented developers to work with on indie games. The talent and games coming out of these graduates has steadily increased [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/qantm.jpg"><img class="alignright" title="QANTM" src="http://www.doolwind.com/images/blog/qantm.jpg" alt="" width="347" height="180" /></a>I&#8217;ve been to countless video game graduate industry nights over the past five years. I started out scouting talent for the companies I was working for and now I&#8217;m always on the look out for talented developers to work with on indie games. The talent and games coming out of these graduates has steadily increased with every passing year. I&#8217;m constantly surprised by the quality of work of many of the teams given their limited experience. However, I keep seeing the same mistakes being made each year and thought it was time I shared some basic tips to reduce these recurring issues.</p>
<p><span id="more-574"></span></p>
<p><strong>Get Business Cards</strong></p>
<p>The simplest issue is one I&#8217;m constantly frustrated by. The majority of teams have business cards or other suitable contact information, but there is always at least one team that has no way of me contacting them. Often, this team will have the star programmer of the night that I really want to hire. There are countless options for cheap and free business cards and I think this is far more important than anything else you will spend money on for the evening (like posters and t-shirts).</p>
<p>Also on this topic, make sure you give out business cards for the whole team. At the most recent industry event, I was speaking with the game designer from a team of 5. I asked for &#8220;all your business cards&#8221; and he proceeded to give me 5 of his own business card.</p>
<p><strong>Research Local Companies Before The Event</strong></p>
<p>All of the industry nights I&#8217;ve attended have been in Brisbane, Australia. Home of a number of large studios in the past (Auran, THQ, Pandemic) and smaller extremely successful studios like Halfbrick. It pays to spend a few hours before the event researching the companies in your local area as there&#8217;s a good chance they will send at least one representative. Knowing what they have recently released and are currently working on will give you a good opportunity to lengthen the conversation you have while they visit your booth. It&#8217;s also a good opportunity to pick the favorite studios you would most like to work for. Check out their &#8220;positions available&#8221; page to find out the sort of talent and amount of experience they are looking for in each field.</p>
<p><strong>Don&#8217;t Drink Too Much Alcohol</strong></p>
<p>Most of the events I go to have free alcohol for those attending. I remember my poor university student days and the excitement when free &lt;anything&gt; was offered. However if you&#8217;re at these events showing off your games PLEASE take it easy with the free alcohol. I usually only make it towards the second half of the industry nights and by then there is always at least one team that has consumed their weight in free alcohol. I realise these events are held at the end of an extremely stressful period, however I implore you to wait just one more night. Use your college student ingenuity and stockpile the free alcohol in a safe container for later consumption if you really must.</p>
<p><strong>Don&#8217;t Pack Up Early</strong></p>
<p>Most of the events only last a few hours. Game developers are busy people and can&#8217;t always make it along to the entire event. There&#8217;s nothing worse than walking around the booths with 30 minutes to go and seeing people packing up their equipment. There is always ample time at the end to pack up and you&#8217;re missing out on one of a very few opportunities to put your work in front of prospective employers. If you can&#8217;t last the few hours required for an industry night you&#8217;re unlikely to make it through a multi-year development cycle.</p>
<p><strong>It&#8217;s Not A Pro Gaming League</strong></p>
<p>Many teams go for local multiplayer in their end of year projects to save on time writing AI code. This is a great idea and lets multiple people experience your game at the same time during the industry night. Just remember that you not only created the game, but have countless more months experience with it than prospective employers. Getting absolutely smashed in a game I barely understand and then having (slightly drunk) graduates whooping and high-five each other is a bit of a turn off. It&#8217;s difficult to gauge the quality of a game when I die every 15 seconds. We had this same problem with an MMO we were showing to a prospective publisher. The development team treated it light some kind of pro gaming league and completely wiped the floor with the &#8220;noob&#8221; publishers. Your job prospects will likely go the way of this ill-fated MMO.</p>
<p><strong>Designated Spokesperson</strong></p>
<p>I&#8217;ve noticed a number of teams have a designated spokesperson that speaks to people entering the booth. I have mixed feelings about this   setup. It&#8217;s good for a key person to grab the attention of people walking past and give a good introduction to the game and the team. However this role usually falls to the project manager/lead game designer of the team and if I&#8217;m looking for an artist or programmer I want to talk to these team members. If you are going with a dedicated spokesperson, make sure they ask if there is anyone on the team in particular they would like to speak with. Also, make sure the whole team is about for most of the evening. If you are the spokesperson, make sure you introduce yourself and be confident.</p>
<p><strong>Send Emails</strong></p>
<p>I remember how desperate I was to get business cards of video game developers while I was studying. As soon as I got one I&#8217;d email them and make sure I got on their radar. It seems about 10% of people I give cards to at these events act in the same way. The other 90% either lose my card or just don&#8217;t bother replying. Even if you&#8217;re not looking for work right away, its invaluable to have contacts in the industry, particularly in Australia at the moment. Sending a quick introduction email to all the business cards you receive on the night should only take a few hours and I guarantee at least one of them will pay off in the future.</p>
<p><strong>Make Something Playable</strong></p>
<p>This tip doesn&#8217;t apply to the industry night specifically. Make sure when planning the game you will show at the industry night, you keep the scope small enough so that you will have at least something playable to show. Gameplay videos are great, but they take time to create and don&#8217;t do as good a job at showing off your work. Having a playable build, no matter how buggy or unpolished is going to impress prospective employers more than a simple gameplay video. Also this is a great time to get a whole bunch of free user testing done on your project. Spend as much time on polish as you can as a beautifully polished, simple game, is far better than a grandiose, buggy one.</p>
<p>I remember one of the first industry nights I went to, about seven years ago. I walked up to the booth to find the familiar scene of Visual Studio and a coder hacking away at a bug. While it was great fun hunting down the crash bug with him, it didn&#8217;t instill much faith in their abilities to deliver a project on time and on budget.</p>
<p><strong>Conclusion</strong></p>
<p>These are just a few tips I&#8217;ve noticed on multiple occasions throughout the past few years. Do you have any recommendations for students showing their games at industry nights?</p>
<p>Another great resource for tips: <a href="http://altdevblogaday.com/2011/08/26/game-dev-students-represent/">http://altdevblogaday.com/2011/08/26/game-dev-students-represent/</a></p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/game-developer-graduate-exhibition-tips/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Separation of Gameplay</title>
		<link>http://www.doolwind.com/blog/separation-of-gameplay/</link>
		<comments>http://www.doolwind.com/blog/separation-of-gameplay/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 21:11:02 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=571</guid>
		<description><![CDATA[I&#8217;ve worked on three different game engines and all have had gameplay and engine intertwined throughout the source code. In Unity, all game objects inherit from MonoBehaviour giving them full access to the power of Unity (and forming a hard link between game and engine). Recently, I&#8217;ve moved away from this approach to a better [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/SeparationOfGameplay.jpg"><img class="alignright" title="Separation Of Gameplay" src="http://www.doolwind.com/images/SeparationOfGameplay.jpg" alt="" width="137" height="142" /></a>I&#8217;ve worked on three different game engines and all have had gameplay and engine intertwined throughout the source code. In Unity, all game objects inherit from MonoBehaviour giving them full access to the power of Unity (and forming a hard link between game and engine). Recently, I&#8217;ve moved away from this approach to a better &#8220;separation of concerns&#8221;. I completely separate out the gameplay making it engine agnostic. This has worked well and I plan to use this approach for most of the games I create in the future. Today I discuss this <em>separation of gameplay</em> and why I recommend others make the switch.</p>
<p><span id="more-571"></span></p>
<p><strong>Why?</strong></p>
<p>Why would you want to separate out the gameplay from the rest of the game? There are a few main reasons for this:</p>
<ul>
<li><strong>Gameplay code varies widely between different games</strong>. Whereas other systems like rendering, audio, animations and input have many similarities between different games. (Eg while Battlefield 3 and NFS: The Run share an engine, their gameplay is substantially different).</li>
<li><strong>Gameplay code has different ownership to the other systems in the game</strong>. Most teams are split into gameplay and engine divisions. These two areas require different skill sets which is why there is specialisation in each. Often the size fo the gameplay team will be similar in size to the engine team.</li>
<li><strong>Designers deal solely in terms of gameplay and so they should</strong>. Designers should not be concerned with shaders or specific input code. Separating this code out simplifies their job and protects them and the engine from each other.</li>
<li><strong>Allows unit testing specific to gameplay code</strong>. As the test suites are gameplay focused they are simpler and easier to maintain.</li>
<li><strong>&#8220;Finding the fun&#8221; is one of the hardest and most important parts of game development</strong>. By separating out gameplay developers can focus solely on this task without worrying about other engine related issues. By dealing with less code, developers have a better velocity to make changes and prototype new ideas throughout development.</li>
</ul>
<p><strong>How?</strong></p>
<p>We&#8217;re using Unity and C# for our game development. We split the gameplay out into it&#8217;s own library (a .dll specifically). This library has no reference to Unity and is completely engine agnostic. In theory, we could swap out Unity for XNA or another engine that is able to communicate with a .NET library.</p>
<p>The game engine then &#8220;includes&#8221; this library and uses it for simulating the game world. In Unity this is as simple as dragging the .dll into the project and you instantly have access to all it&#8217;s public types.One option is to make all access from the game engine into the library through interfaces. This gives you the best separation of concerns and completely decouples the game engine from the implementation of the gameplay. I did this for the first game that used this technique but have since moved away from it. I highly recommend having all communication through an interface for larger games and teams.</p>
<p>I&#8217;ve also used this technique in an XNA project which was also a simple process. Simply add a reference to the gameplay .dll and start coding against it.</p>
<p><strong>Scripting Languages</strong></p>
<p>This separation is often achieved through scripting languages. Certain behaviour within the game is exposed to designers through a scripting language like Lua. I&#8217;ve done this on a number of projects and this separation works well. I&#8217;ve also spoken about why I think <a href="http://www.doolwind.com/blog/why-you-should-use-csharp-for-your-scripting-language/">C# should be used as a scripting language</a>. <em>Separation of gameplay</em> is an extension to the regular scripting language breakup.</p>
<p><em>Separation of gameplay</em> flips the classic scripting language paradigm on it&#8217;s head. Rather than exposing some functionality of the game engine to designers and gameplay programmers to create the game world. We let the designers and gameplay developers create the world and engine developers use this world. This frees both teams up to work at full velocity initially as they build the ground work of the game. Both have set functionality they must achieve and can communicate through a simple, well defined interface. Designers can focus on implementing fun gameplay while engine coders work closely with artists to get the look and feel they want from the game.</p>
<p>Engines like Unity and Unreal all gameplay code is already in a scripting language (Unreal Script and C# vs the engine&#8217;s C/C++ code). However I&#8217;m arguing for taking this a step further and even within these scripting languages we create a separate library independent of any of the engine specific code. We then have three main domains within our game:</p>
<ol>
<li>Gameplay specific code (eg Player ship and Torpedo)</li>
<li>Engine code specific to this game (eg Taking raw input and passing it in a nice form to gameplay specific code or shaders)</li>
<li>Engine code (for Unity and Unreal this is the C++ code we generally don&#8217;t access)</li>
</ol>
<p><strong>Negatives</strong></p>
<p>I did find a few down sides to this approach. For games where game engine and gameplay ARE tightly linked there can be a lot of duplicated data. As the gameplay code is unaware of the engine data structures like transform must be duplicated in the gameplay code. This increases memory usage and processing as the data structures are converted.</p>
<p>Another downside is that some useful features of the game engine are not accessible to the gameplay. Two key features of Unity that would have been great to use were triggers and coroutines. Once again, code duplication is required if the gameplay is to use these features. (See <em>future plans</em> below for a solution to these issues)</p>
<p><strong>Two Worlds</strong></p>
<p>In effect, there are two instances of the game world. A gameplay specific instance and an engine/rendering specific instance. For complex games this separation is a good thing as it frees engine developers to store the world in their own optimized data structures. This decoupling also simplifies the process of multi-threading the game engine as there is a distinct breakup between gameplay specific code and rendering/input code. I&#8217;ve worked on a large project which made this split after a multi-year development and while it was painful to implement once complete the teams velocity increased significantly.</p>
<p><strong>Unit Testing</strong></p>
<p>I spoke about unit testing in my last post and this is one of the major advantages of <em>separation of gameplay</em>. You can easily unit test the gameplay itself and have a suite of tests specific to making sure the gameplay is &#8220;correct&#8221;. When unit tests deal only with gameplay they can be simpler and higher code coverage can be achieved. One area I am looking at in the future is formally turning the game design document into a suite of gameplay specific unit tests. The gameplay team have complete ownership over the gameplay code and the test suite that tests it.</p>
<p><strong>Future Plans</strong></p>
<p>There are a few areas I plan to experiment with in the future that I haven&#8217;t had the opportunity to yet. The first is solving the issue of duplicated data between the gameplay and game engine. My thoughts on solving this problem are for the gameplay to have a reference to the game engine data structures where appropriate. For Unity3D this would be as simple as including the UnityEngine.dll. Spatial data structures (Vector3, Quaternion, etc) can then be used directly in the gameplay. This breaks some of the abstraction between the gameplay and game engine but if done sparingly I think it will add a lot of value. Specific to Unity I&#8217;m going to experiment with creating MonoBehaviour entities within the gameplay as well to see whether this works and how badly it breaks the abstraction.</p>
<p>As I mentioned with Unit Tests, I&#8217;m going to look at ways of formalising the game design itself into a suite of unit tests. I&#8217;d like to experiment with Domain Specific Languages (DSLs) to make this as simple a process as possible for game designers. A DSL would also let them speak in their own language. I&#8217;ve experimented with <a href="http://www.doolwind.com/blog/fluent-game-design-with-fluent-interfaces/">fluent game design</a> in the past and this is another area of interest for me.</p>
<p><strong>Conclusion</strong></p>
<p>What are your thoughts on <em>separation of gameplay</em> from the rest of the game code? Is this already achieved with scripting languages or do you see extra value with allowing gameplay developers to create the entire gameplay model themselves and have engine developers use world through an interface?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/separation-of-gameplay/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Test Driven Game Development Experiences</title>
		<link>http://www.doolwind.com/blog/test-driven-game-development-experiences/</link>
		<comments>http://www.doolwind.com/blog/test-driven-game-development-experiences/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 10:32:08 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=568</guid>
		<description><![CDATA[We&#8217;ve just wrapped up our first game that employs full Test Driven Development (TDD) practices. I&#8217;ll share my experiences, good and bad, now that we&#8217;re completely finished the first version of the project. I&#8217;ve spoken previously about Test Driven Game Development (TDGD) but a lot of that was theoretical so today I&#8217;d like to give some more concrete [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/TestDrivenGameDevelopment.jpg"><img class="alignright" title="Test Driven Game Development" src="http://www.doolwind.com/images/blog/TestDrivenGameDevelopment.jpg" alt="" width="289" height="109" /></a>We&#8217;ve just wrapped up our first game that employs full Test Driven Development (TDD) practices. I&#8217;ll share my experiences, good and bad, now that we&#8217;re completely finished the first version of the project. I&#8217;ve spoken <a href="http://www.doolwind.com/blog/test-driven-game-development/">previously</a> about Test Driven Game Development (TDGD) but a lot of that was theoretical so today I&#8217;d like to give some more concrete thoughts on how TDGD helped with the creation of <a href="http://www.battlegroupgame.com">Battle Group</a>.</p>
<p><span id="more-568"></span></p>
<p><strong>Test Driven Game Development?</strong></p>
<p>The idea behind Test Driven Game Development is writing automated Unit Tests to confirm the correctness of your production code. Unit tests can be written to test all areas of a game from gameplay to rendering engines and anything in between. As I stated previously, there are three main goals from TDGD:</p>
<ol>
<li><strong>Find out when code breaks</strong>. If you make a code change that breaks something that was previously working (and is tested) you will know about it immediately.</li>
<li><strong>Forces modular code</strong>.  For code to be &#8220;unit testable&#8221; it must be modular with clear boundaries and &#8220;separation of concerns&#8221; between various systems.</li>
<li><strong>Allows you to “find the fun”</strong>.  Once you’re guaranteed that certain requirements are met, you’re free to experiment with gameplay to make it more enjoyable without breaking the game.  This also extends to giving designers more freedom when scripting.  Encouraging experimentation by designers without programmer intervention is invaluable.</li>
</ol>
<p><strong>How We Did It</strong></p>
<p>In general the development of new gameplay features followed these steps:</p>
<ol>
<li>Design the unit test for the new feature, testing the outward interface seen by the rest of the system</li>
<li>Implement the feature as quickly as possible, cutting corners as needed so the feature is playable in the quickest time possible</li>
<li>The team tests the feature, makes sure it&#8217;s working and fun and we make iterative improvements to it</li>
<li>Once happy with the feature I then refactor the code to clean up any shortcuts and make it the optimal solution</li>
</ol>
<p>This system worked extremely well and lead to a high development velocity both for the creation of new features and maintenance/update of existing features.</p>
<p><strong>Gameplay Testing</strong></p>
<p>All of the unit tests created for Battle Group were testing gameplay code as this is the most complex area of our game. Unity does the heavy lifting for most of the technology based systems (eg rendering, input) freeing us to have ~90% of the code in the project related directly to gameplay. The main motivation for this testing was to allow us to rapidly develop features and experiment with existing code without breaking existing systems. For the most part, this motivation was met throughout the lifetime of the project. While the gameplay stayed fairly constant throughout the 4 month development cycle, there were a couple of major changes we made and the unit tests were invaluable during these changes.</p>
<p>Battle Group started out (as most games do) as a game design document. We then prototyped the game, tweaked the design document and began working on the alpha build. This design document was translated into unit tests. While I (the programmer) was responsible for this, I plan in the future for our game designer to begin to take over the role of writing gameplay specific unit tests. As the project progresses, the artifacts of its design move from a static design document/wiki to an active, maintained set of unit tests. As design changes requests came in from the team I would focus my time on updating the unit tests to match the new design.</p>
<p><strong>What About Prototyping?</strong></p>
<p>We did not create these unit tests during the prototyping stage (about a week&#8217;s work) as this was a throwaway prototype and unit tests would have slowed us down without much real value. One of the negatives related to TDGD is the reduction in velocity while making fairly major changes to the codebase. This is often the case while prototyping and therefore I strongly urge against TDGD during the prototyping phase of your development, particularly throw away prototypes.</p>
<p>The prototyping phase is a great opportunity to start fleshing out the design of your testing suite however. As you work on the core features of the game you can see where the bulk of the coding effort is likely to go and also which areas are most susceptible to change throughout the life of the project. A good example of this was the blast radius and velocity of the weapons used in Battle Group. Small changes to this had a major impact on the feel, flow and accessibility of the game. For this reason I made sure that this was both easy to change and robust in the changes I made. As velocities increased the distance traveled per frame became quite large. Coupled with this was the low physics frame rate on older mobile devices and it was crucial that we had repeatable behavior at varying frame rates and data values. As I had already planned to implement TDGD post-prototype I was mindful of these areas of code and made a mental note to test these areas first and thoroughly.</p>
<p><strong>Code Coverage</strong></p>
<p><strong></strong>Whenever I discuss TDD with someone in or outside the game development industry, there&#8217;s often a heated discussion about code coverage. Code coverage is the percentage of production code that is &#8220;covered&#8221; by unit tests. There are purists that claim you&#8217;re not really doing true TDD without 100% code coverage and there are others who say some arbitrary percentage is enough. My stance is that the game/code itself should determine the code coverage you should aim for. Sometimes certain tests are causing more trouble than good (eg changing a few lines of code requires 10 times more lines of unit testing code to be updated). Either the tests need a rethink in the way they are implemented or it&#8217;s best just to remove them.</p>
<p>I didn&#8217;t &#8220;watch the clock&#8221; when it came to code coverage on Battle Group. My main focus was to get the best value from my limited resources (as the sole programmer on the team). During prototyping and throughout development I noted which areas of code were critical or breaking often and made sure to get the highest code coverage possible on them. There is certainly a point of diminishing returns when it comes to code coverage which differs between projects and between systems within a project.</p>
<p><strong>Test First Development</strong></p>
<p>I opted for a &#8220;Test First&#8221; development style where I would create my unit test and then implement the feature being tested. This allowed me to design exactly how I thought the code should be used rather than writing the solution to the problem. I found this was invaluable to keeping a clear separation of concerns and made sure everything was as modular as possible. By thinking about the outward interface of the functionality first, it helped me get in a mindset of creating exactly what I wanted. When solving an interesting and complex problem it&#8217;s easy to lose site of the original reason for the code&#8217;s existence. Test first development focuses your efforts where they are needed most, on defining and then implementing the functionality of a piece of code as seen by the rest of the system.</p>
<p><strong>NCrunch</strong></p>
<p>One tool that was released during the development of Battle Group was <a href="http://www.ncrunch.net/">NCrunch</a>. This tool will completely change the way you unit test. I won&#8217;t go into too much detail as it&#8217;s a little off topic, but I strongly recommend you grab it and experiment with how it works. The whole system can be summed up in two points:</p>
<ol>
<li>Unit test code has real-time inline green/red lights to indicate whether it is currently passing. Tests are continually running in the background to keep this constantly up to date</li>
<li>Production code has a similar green/red light system showing how many unit tests covering this code pass and fail (or if there are no tests at all)</li>
</ol>
<div><strong>Conclusion</strong></div>
<div>Overall I was really happy with the way our TDGD turned out on Battle Group and I definitely plan on adopting it again for future projects. My development velocity increased overall while being slightly slower at the point of implementation of a new feature.</div>
<div>Have you used TDD on game projects? Do you have any experiences you can share? Or do you think this is all a load of crap and I should get off my soapbox and get back to coding the game instead of the unit tests?</div>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/test-driven-game-development-experiences/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Becoming A Better Game Programmer</title>
		<link>http://www.doolwind.com/blog/becoming-a-better-game-programmer/</link>
		<comments>http://www.doolwind.com/blog/becoming-a-better-game-programmer/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 08:01:45 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=566</guid>
		<description><![CDATA[Over the past 12 months I&#8217;ve worked as the sole programmer on the three games we&#8217;ve made. I&#8217;ve just started up a new project with a fellow programmer and found that I&#8217;ve picked up some bad habits in those past 12 months. I&#8217;m continually trying to make myself a better game programmer and today I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/carmackworking.jpg"><img class="alignright" src="http://www.doolwind.com/images/blog/carmackworking.jpg" alt="" width="287" height="216" /></a>Over the past 12 months I&#8217;ve worked as the sole programmer on the three games we&#8217;ve made. I&#8217;ve just started up a new project with a fellow programmer and found that I&#8217;ve picked up some bad habits in those past 12 months. I&#8217;m continually trying to make myself a better game programmer and today I&#8217;m sharing my thoughts on this topic.</p>
<p><span id="more-566"></span></p>
<p><strong>Constructive Criticism</strong></p>
<p>The most important way I feel I grow as a programmer is to listen to criticism from my peers. In the past (particularly during puberty) I found this quite difficult to do. Over the past few years as my confidence has grown my view of constructive criticism has changed from fear to embracing wholeheartedly. I&#8217;m now at the point where I&#8217;ll purposely ask people to give me negative feedback on my code, design, games and in general so I can learn. If nothing else in this list resonates with you, I strongly recommend at least thinking on this point. I&#8217;ve met many programmers in the past (including myself) that either ignored criticism or actively fought it. There will always be better programmers than yourself out there and taking constructive criticism from these people is an excellent way of improving.</p>
<p><strong>Continually Learning</strong></p>
<p>I tend to go through peaks and troughs when it comes to reading and learning. During the middle 80% of a project and particularly deep within crunch I find I put my blinkers on and ignore most of the world around me. Once completing a project, and as I start on a new one I&#8217;ll resurface and look at what I&#8217;ve missed in the previous months. I think learning new techniques, technologies and generally discussing game development with my peers is a great way of improving my skill-set and maintaining an optimal development velocity. I generally count GDC in this as I find I&#8217;m invigorated after each visit to SF.</p>
<p><strong>Complete Difficult Problems</strong></p>
<p>When time is short (when is it not) for a particular milestone I find myself shying away from difficult problems in favor of a quick fix or doing something different entirely. I&#8217;ve found this is often a sub-optimal solution as the problem is often not solved and inevitably crops up again later in the project. On a project-wide time frame the problem ends up taking far more time to solve than if I had simply taken the time initially to solve the original difficult problem at the expense of the milestone time frame. My solution to this situation is to allow enough padding in my milestone estimates so that I have time to dig deep into a complex problem when needed without worrying too much about the ticking clock. This is easier said than done, however focusing on the project-wide velocity improvement makes it an easy choice to solve complex problems as they crop up.</p>
<p><strong>Cross Discipline</strong></p>
<p>Unlike other software development I&#8217;ve done, game development has an extremely wide range of skills across a team. One of the most stark differences is between programmers and artists. With our different hemispheres at work programmers often band together and feel like they are working against the other disciplines in the company. This was the case for the first few jobs I had in the video game industry and it wasn&#8217;t until I worked on a cross-discipline team that I realized how incomplete my earlier teams had been. Without a working knowledge of the other key areas of game development I was missing a large part of the big picture. Not until I sat next to an artist and watched them complete repetitive tasks for hours at a time did I realize that spending 10 minutes writing a simple tool for them would make their live much easier. It wasn&#8217;t until our <a href="http://www.battlegroupgame.com">latest game</a> that I worked closely with a sound engineer and learned how easy it is to build an extremely powerful sound system to rival many AAA games on the market. Spending time with developers from other disciplines is invaluable to both becoming a better programmer and improving the quality of your team.</p>
<p><strong>Critical Thinking</strong></p>
<p>I often fall into the trap of completing a particular task in a certain way as &#8220;that&#8217;s the way it&#8217;s always been done&#8221;. It&#8217;s not until I discuss my processes and thinking with other programmers that I realize there can be a better way. There are two main groups I find I get the most &#8220;aha&#8221; moments that often have radical changes to the way I do things. The first group is junior developers newly out of university. They will often be exposed to new ways of thinking or have simply thought outside the box to solve problems. The second group is developers from outside the video game industry. Test driven development is a great example of something I picked up from a web developer friend (and have since started <a href="http://www.doolwind.com/blog/test-driven-game-development/">evangelizing</a> to other game programmers). Looking introspectively at your processes and development style at the end of a project is a great time to be critical of how you do things and see if you can improve.</p>
<p><strong>Conclusion</strong></p>
<p>Do you have other recommendations and thoughts on becoming a better game programmer? What techniques have you picked up over the years that have helped you grow?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/becoming-a-better-game-programmer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Targeting 4 Platforms Simultaneously With Unity</title>
		<link>http://www.doolwind.com/blog/targeting-4-platforms-simultaneously-with-unity/</link>
		<comments>http://www.doolwind.com/blog/targeting-4-platforms-simultaneously-with-unity/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 06:32:49 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[battle group]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=560</guid>
		<description><![CDATA[We’ve just released Battle Group on four platforms simultaneously. Porting is usually a lengthy process that I hate to do. I quit my job in the mainstream video game industry partly over being forced into porting one of our latest games. Thankfully this is not the case when porting with Unity as the time required [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.battlegroupgame.com" target="_blank"><img class="alignright" title="Battle Group Available" src="http://www.doolwind.com/images/blog/BattleGroupAvailable.jpg" alt="" width="226" height="165" /></a>We’ve just released Battle Group on four platforms simultaneously. Porting is usually a lengthy process that I hate to do. I quit my job in the mainstream video game industry partly over being forced into porting one of our latest games. Thankfully this is not the case when porting with Unity as the time required is measured in days rather than weeks or months. Today I’ll share my experiences porting Battle Group with Unity.</p>
<p><span id="more-560"></span></p>
<p><strong>Overview</strong></p>
<p>Our primary platform for Battle Group is iOS (iPhone, iPad and iPod Touch) while our primary development platform is PC. This took us approximately four months to complete and it took a further 10 days to port to Android, Pc and Mac. Our first two games were both iOS exclusive so this was our first time developing for the other three platforms as an indie team.</p>
<p><strong>Input Changes (Mac and PC)</strong></p>
<p>One of the biggest challenges was making the game work well with both touch and mouse input. Back when we created Flick Buddies I created a unified input system so that the mouse and touch are treated through the same code path. This went a long way to simplifying the process of targeting both input systems. The input basically boiled down to “On Down”, “On Move” and “On Up”. Unity’s “Touch” class is extremely helpful and saved us a lot of time. The only game specific challenge we faced was around ship selection. We made use of the scroll wheel and keyboard for extra player control, both of which only took an hour or so with Unity.</p>
<p>Overall we were really happy with the way the input worked across all platforms and we decided to keep them very similar.</p>
<p><strong>Multiple Resolutions (PC, Mac and Android)</strong></p>
<p>The area I’m least happy about with Battle Group is the multiple resolution support. While we support any resolution and aspect ratio, the fact we targeted iPad primarily (1024&#215;768) meant the game isn’t really wide screen. We decided to fully support any aspect ratio between iPad and iPhone and add letterboxing to resolutions outside this. For gameplay reasons we could not allow an unlimited amount of aspect ratios without letterboxing. The biggest concern for me is that letterboxing usually runs along the top and bottom of the view and people expect this. In Battle Group, as we targeted iPad primarily, our letterboxing runs along the left and right handside for extremely widescreen aspect ratios.</p>
<p>The actual implementation of multiple resolutions was fairly straightforward with Unity. As Battle Group is a 2D game we were using an orthographic camera and I simply adjusted the size of the camera’s view area to accommodate different resolutions. The biggest complexity involved created the settings page allowing players to choose the resolution and full screen. Unity has amazing support for resolution changing, including full screen and windows. I have horrid memories in DirectX of lost context and all sorts of issues that are gracefully handled for us now.</p>
<p>One small point of concern is multiple monitor support. Out of the box, Unity doesn’t support locking the mouse cursor to the primary screen. There are some platform specific workarounds but nothing I was happy with and so for version 1 we don’t lock the mouse cursor. This is a personal pet hate of mine and so I was quite disappointed however timeframes didn’t allow me to obsess to long on this feature.</p>
<p><strong>Demo Version (PC)</strong></p>
<p>The PC version we sell through our website has a demo that unlocks with a CD key. I spent a while looking for example code for CD keys but couldn’t find any I was happy with. Instead I spent a few hours and threw together my own CD key generation and checks and it’s worked quite well. I used Unity’s built in text box for the CD key input and this actually worked quite well. Players can cut and paste the CD key from anywhere and I then do some quick validation. I always warn my students not to use the built in Unity GUI, however in this case it worked really well.</p>
<p><strong>Mac App Store</strong></p>
<p>We decided to release a Mac version on their Mac App Store to coincide with the iOS release. Having already ported to PC this was an extremely simple process until the very end. Unfortunately there’s a little monkey work that needs to be completed in the final step that Unity does not currently handle. Check out the following links for detailed instructions on how to complete this:</p>
<ul>
<li><a href="http://technology.blurst.com/unity-games-and-mac-app-store">http://technology.blurst.com/unity-games-and-mac-app-store</a></li>
<li><a href="http://forum.unity3d.com/threads/71340-Submit-Unity-games-to-the-Mac-App-Store">http://forum.unity3d.com/threads/71340-Submit-Unity-games-to-the-Mac-App-Store</a>!</li>
</ul>
<p>One key point is that you need to make sure “Player Log” is turned OFF. We failed certification the first time as we were still writing out our log file.</p>
<p>The Mac version of Battle Group is actually our best seller at the moment. We were featured in “New &amp; Noteworthy” and we are currently the #4 game in Australia and #12 game in the US. This was a great surprise and we were really happy we took the time to port to the Mac App Store.</p>
<p><strong>Android</strong></p>
<p>After initial issues setting up the ADB driver for my Android device this was another smooth process. The Android shares nearly all the code of its iOS sibling and the only major difference was supporting multiple resolutions and aspect ratios for all the different Android devices. I had already completed the resolution code for the PC version and therefore this all “just worked”.</p>
<p>Post release, we had a small hiccup with “1 star spam” where someone (probably a competitor) spammed our game with 40 1 star ratings in under 30 minutes. Thankfully Google were quick to rectify this, however it was not a great feeling.</p>
<p><strong>Performance</strong></p>
<p>I spent a week or so heavily optimizing the game and rendering for Battle Group about three quarters of the way through development. Per platform optimizations weren’t really necessary and we’re happy with the frame rate on all platforms. There were really only two limitations I put on our game designer as he created levels, both of which were increased at his request a number of times. These were mainly around the number of concurrent enemies on screen at one time as both the game logic and rendering increased linearly with this number. The only major outstanding concern I didn’t get enough time to look into was load times on some slower devices. For some reason Android particularly takes a lot longer to load than its iOS counterpart and this is something I am planning to fix in a future patch.</p>
<p><strong>Closing Thoughts</strong></p>
<p>Overall I was overjoyed with how well the porting process went. I consider it one of my least favourite parts of video game development and the fact it went so quickly and smoothly was excellent. I always listed cross platform support as one of Unity’s biggest drawcards and now I can confirm this. Not just that, but the simplicity of this cross platform development is a real plus. For a small studio, spending months porting to new platforms simply isn’t an option for us and this has allowed us to hit all the platforms we wanted on the same day.</p>
<p>Instead of spending time porting we can now work on updates to Battle Group and future games that we have begun prototyping.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/targeting-4-platforms-simultaneously-with-unity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Game Industry Retrospective 2011</title>
		<link>http://www.doolwind.com/blog/game-industry-retrospective-2011/</link>
		<comments>http://www.doolwind.com/blog/game-industry-retrospective-2011/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 10:26:34 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Auran]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=555</guid>
		<description><![CDATA[I’m sick at the moment which has forced me to stop working while I rest and recover. At times like this I find myself becoming retrospective and looking at how things are going in my game development life. I thought I’d share my thoughts on where I think things are going well (and not so [...]]]></description>
			<content:encoded><![CDATA[<div><a href="http://www.doolwind.com/blog/wp-content/uploads/2011/09/MasterChiefThinker.jpg"><img class="alignright size-thumbnail wp-image-556" title="MasterChiefThinker" src="http://www.doolwind.com/blog/wp-content/uploads/2011/09/MasterChiefThinker-150x150.jpg" alt="" width="150" height="150" /></a>I’m sick at the moment which has forced me to stop working while I rest and recover. At times like this I find myself becoming retrospective and looking at how things are going in my game development life. I thought I’d share my thoughts on where I think things are going well (and not so well) for game development in 2011.</p>
<p><span id="more-555"></span></p>
<p><strong>What’s Working</strong></p>
<ul>
<li>Tools</li>
</ul>
<p>The biggest change I’ve seen in our game development lives in the last few years is the ubiquity of high quality game engine tools. It’s no secret that I’m a big fan of Unity and we’re currently using it to create our <a href="http://www.battlegroupgame.com">third game</a>. Unlike our first two games, this time we’re planning to release on no less than 4 platforms simultaneously. Without the power of Unity this would simply not be feasible for a small indie company that’s still in startup mode. I’ve heard the promise of “write once, deploy anywhere” a number of times in the past but it seems like this is the first time it’s actually come true. Unreal and CryEngine are now free giving indie&#8217;s great access to high quality development tools.</p>
<p>Along with multi-platform support is the breadth of features found in these tools that means we can create small to medium sized games with multi-month development cycles with only a single programmer in the team.</p>
<ul>
<li>Distributed Development</li>
</ul>
<p>Internet communication has reached a level where we can build an entire game together from the comfort of our respective homes. Leasing an office at this stage in our company would cost more than the rest of the games development combined. With the use of Skype, Dropbox and Acunote we can work seamlessly together sharing ideas and large files as if we were in the same office. There’s still a few issues that come up, but most of these are resolved with weekly face-to-face meetings. We’re still planning to get an office in the near future, however it’s not as pressing a concern as it has been in the past.</p>
<ul>
<li>Platforms</li>
</ul>
<p>Something else that’s changed considerably since I left mainstream game development is the number of platforms we can target. It’s easy to take this for granted, particularly as they’ve grown at a fairly linear rate over the past few years. I’ve always been a firm believer in letting a game design pick the platform that suits it best, however not until recently has this been a feasible option for indie game developers. We can now choose between console, mobile, web and more traditional platforms and have the ability to target them with even the smallest budget. With the barrier to entry being measured in the hundreds of dollars even a hobbyist student can forgo drinking for a few weeks to fund their next game.</p>
<p><strong>What’s Not Working</strong></p>
<ul>
<li>Games still take too long to make</li>
</ul>
<p>I’m continually frustrated with the time it takes to create games. Every game I’ve ever worked on has run overtime, often by over 50% of their original estimate. After speaking to other developers, thankfully this is not just something I struggle with. I’ve found there are two major milestones a game developer reaches in their career. The first is actually finishing a game, something I had trouble with when starting out (I still have countless half-finished projects laying around my old HDD). The second is finishing a game within the original estimate, something nearly every developer I know still struggles with no matter how many years they’ve been working.</p>
<p>I spend considerable time and effort trying to solve this problem and I feel as though each project we refine our process and things are slowly getting better. Despite my first point, I feel tools are the biggest opportunity for us to solve this issue. When I started out in game development I had a very negative view on tools development and felt it was not my job to create tools. I’ve since learnt this is a very closed minded view of game development. Team Bondi’s recent game (and closure) is a perfect example of this. I’ve heard a number of developers share anecdotes of the development where making simple changes (such as the placement of a trigger) would have a turn-around time measured in the tens of minutes. Small issues like this add up over time and cause games to blow out their time and budget.</p>
<ul>
<li>Australian Game Industry</li>
</ul>
<p>I left Auran two weeks before it closed down back in 2007. Since then I’ve watched as many of my closest friends and ex-colleagues lose their jobs as the number of large studios dwindles. There are countless reasons for this downsizing but what’s important is the fact many of the smartest people I’ve worked have been forced to move overseas to find work in the game industry or worse, move into more mundane jobs to make ends meet. I am hopeful that the growing number of independent studios forming from the ashes will see success and we will have a second chance at building the Australian game industry while learning from our previous mistakes.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/game-industry-retrospective-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>When Is Your Game Finished?</title>
		<link>http://www.doolwind.com/blog/when-is-your-game-finished/</link>
		<comments>http://www.doolwind.com/blog/when-is-your-game-finished/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 06:32:16 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Designer]]></category>
		<category><![CDATA[Indie Game Development]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=552</guid>
		<description><![CDATA[I attended Freeplay Independent Games Festival on the weekend and had a chance to try out Antichamber for a little over an hour (sorry to all the people in the queue behind me). We were there to show off Battle Group as we were a finalist in their indie game competition. Part of my discussion [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://antichamber-game.com/Images/04StoryNewLarge.jpg" alt="" width="249" height="140" />I attended <a href="http://www.freeplay.net.au/">Freeplay Independent Games Festival</a> on the weekend and had a chance to try out <a href="http://antichamber-game.com/">Antichamber</a> for a little over an hour (sorry to all the people in the queue behind me). We were there to show off <a href="http://www.battlegroupgame.com">Battle Group</a> as we were a finalist in their indie game competition. Part of my discussion with Alex was about our when our respective games would be &#8220;finished&#8221;. Today I&#8217;m going to explore this a little further.</p>
<p><span id="more-552"></span></p>
<p>I&#8217;ve heard Alex speak a number of times in the past and a recurring theme is that he is always being asked when his game is finished, and when it will be released. Alex has some strong views on this that I completely agree with, relating to quality levels required before a game is ready for release. Our own game Battle Group has been pushed back from our (internally planned) release date a number of times in it&#8217;s 4 month development. It&#8217;s a recurring theme on every game I&#8217;ve worked on, both independently and at larger studios, they are always late. The question is, how can we objectively determine when the game is finished?</p>
<p><strong>&#8220;You&#8217;re game is finished when someone who hasn&#8217;t played it before can play through it&#8217;s entirety without assistance&#8221; </strong></p>
<p>Lets dig a little into what this means. Firstly you (or a few key team members) need to sit and watch people play your game. If you&#8217;re not doing this, your game shouldn&#8217;t be released, period. Without sufficient playtesting there&#8217;s no objective way you can determine if your game is ready or not.</p>
<p>Someone can only play through your entire game once you have no show stopper bugs. I can play a game I&#8217;m working on for days on end and never come across an issue which a play tester finds within the first few minutes of playing. The game also needs to teach them enough to be able to play through it&#8217;s entirety without your help. This is a really difficult task when watching someone make seemingly simple mistakes in your game. I&#8217;ve spoken about this previously with <a href="http://www.doolwind.com/blog/virgin-play-testers/">&#8220;Virgin&#8221; playtesters</a> and spending the weekend watching people play Battle Group only reinforced this for me. If you have to help someone through a certain part, something is wrong.</p>
<p>Related to bugs and assistance is the requirement that you are happy to show people the game in it&#8217;s current state. This seems like a no brainer, if you&#8217;re not happy to show someone, why would you release? Surprisingly, I&#8217;ve seen a number of people so desperate to &#8220;just get it out there&#8221; that they break this rule. They were all apologies and excuses when I tried to play the game but they felt they were still ready to release it to the world, as if people they don&#8217;t know would be more forgiving.</p>
<p>When deciding when a game is finished, there are two areas that people run into trouble:</p>
<p>1. Some people fall into the &#8220;it&#8217;s never finished&#8221; trap. They are usually small teams that aim for absolute perfection and are never happy with the game. These games often disappear and the team gets bored and moves on to something else.</p>
<p>2. At the other extreme are games that are shipped far too soon. These often come from larger studios with external time and money constraints imposed on them.</p>
<p>Either extreme is dangerous and obviously we want to aim for the middle ground between these. Knowing which end of the spectrum you are more likely to favour is important so you can set expectations at the <strong>start</strong> of the project. The further a game progresses in development the easier it is to diverge towards one of these extremes. When talking about setting the quality level before you begin production on a game I use the analogy of going out drinking. It&#8217;s important to set the number of drinks you plan to have in an evening before you start drinking as once you&#8217;ve started down that path, your judgement is impaired. The longer your on a project, the more impaired your judgement becomes. Either wanting to &#8220;get it out the door&#8221; because your sick of working on it, or not wanting to waste the months you&#8217;ve been working by releasing an imperfect game.</p>
<p>Only by setting your expectations at the beginning of a project can you have a reasonable chance of setting the quality bar at a safe level. Look at the team makeup, objectives of the game (retail success vs portfolio piece) and project budget/length when deciding what quality bar to aim for.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/when-is-your-game-finished/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game Connection Thoughts</title>
		<link>http://www.doolwind.com/blog/game-connection-thoughts/</link>
		<comments>http://www.doolwind.com/blog/game-connection-thoughts/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 04:59:16 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Connection]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=548</guid>
		<description><![CDATA[I spent last week at GDC and 1.5 days of that in Game Connection. I was taking prototypes Bane Games&#8217; next games to show publishers to see if we could get a funding or publishing deal for them. Today&#8217;s article is my thoughts about Game Connection and whether other Indie&#8217;s should go next year. Speed [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/GameConnectionBooth.jpg"><img class="alignright" title="Game Connection Booth" src="http://www.doolwind.com/images/GameConnectionBooth.jpg" alt="" width="216" height="161" /></a>I spent last week at GDC and 1.5 days of that in <a href="http://game-connection.com/">Game Connection</a>. I was taking prototypes Bane Games&#8217; next games to show publishers to see if we could get a funding or publishing deal for them. Today&#8217;s article is my thoughts about Game Connection and whether other Indie&#8217;s should go next year.</p>
<p><span id="more-548"></span></p>
<p><strong>Speed Dating</strong></p>
<p>Game Connection is described as &#8220;speed dating&#8221; with publishers. We had 30 minute meetings with as many publishers as we could cram into our time. We had 1.5 of the 3 days Game Connection runs for as we shared a booth with the guys from Last Level Games. This ended up being ample time for us as we met 22 publishers and a few PR/marketing people. Our goal was to form contacts and show off our two prototypes we are developing for iOS, Android and web.</p>
<p>This &#8220;speed dating&#8221; style was a great way to get in front of publishers we would otherwise never have a chance of meeting face to face. Being from Australia, we are on the other side of the world to many of the publishers, particularly the larger ones. Also, there are a lot of developers pitching their games and having this condensed period for us to briefly meet was perfect.</p>
<p>I had heard from a few people that it is frowned upon for publishers to turn down a meeting with you no matter how small you are, which is perfect for a small team like ourselves. Thankfully, this was true. Nearly every meeting I proposed was accepted and we managed to meet all the publishers we were hoping, from the largest to many small unknowns.</p>
<p><strong>The Process</strong></p>
<p>The process for setting up meetings is fairly simple. A few weeks before the event, the system opens up and you can request meetings with as many people as you have space for. After a set period this shuts down and the system automatically matches you together and sets up a room for the two parties to meet. For the most part, we stayed in our booth (about 3x3m) and publishers came to us. Any spots that are free after this time can then manually be filled in with other publishers. The system does a good job of letting you know whether you both have a free spot at the same time.</p>
<p>My only complaint about this system is it&#8217;s a little harsh as I ended up having 16 meetings in 8 hours on my first day. This left me no time for grabbing lunch, let alone a break to use the amenities. Thankfully some of the meetings ran under time (and I had a single no-show) which gave me time to dash off for food and a comfort stop.</p>
<p><strong>Response</strong></p>
<p>Our two prototypes were very much in the prototype stage. I had spent a couple of days coding them and our artist had put a few hours into turning my primary coloured abomination into a nice looking tech demo.</p>
<p>Despite the simplicity of the demos every publisher could see the core of the game and judged it upon its merits. I was blown away by the response from the publishers with all but four giving us amazing responses. Everyone loved the ideas with a number of people giving amazing feedback within only minutes of seeing the games. We even begin discussing specifics of deals with a number of publishers during our short meeting.</p>
<p>One of our demo&#8217;s particularly shined and based on the feedback we received we have decided to pursue it next and look at our options for funding and publishing with the people we&#8217;ve met. Unfortunately I can&#8217;t give any more details as we move forward with our dealings, suffice to say we are extremely happy with the response.</p>
<p><strong>Cost</strong></p>
<p>We were extremely fortunate that the Queensland Government helped pay a large percentage of the usual cost of taking part in Game Connection. This support combined with sharing a booth made it affordable even for a small indie developer such as ourselves. If it weren&#8217;t for this, we likely would not have been able to justify the full price of 2,700 to 4,700 Euro&#8217;s for the event.</p>
<p>This cost will also likely be restrictive to many indie developers. It makes it hard for me to recommend the event to smaller developers where this amount of money makes up a substantial amount of their entire game budget. It really comes down to what you want to get out of the event. We managed to talk to many of the big publishers and a lot of smaller publishers from around the world that we would simply never be able to meet. If you factor in flying overseas to meet with a publisher this price point quickly becomes reasonable for the sheer volume of people you can meet.</p>
<p>I highly recommend any smaller indie thinking of taking part in Game Connection next year to check out the competitions on offer such as <a href="http://www.gamasutra.com/view/news/26776/Game_Connection_Brings_Indie_Studio_Promotion_To_GDC.php">this years</a>.</p>
<p><strong>Should You Participate Next Year?</strong></p>
<p>I highly recommend Game Connection to anyone looking to get their game published. It&#8217;s the perfect place to meet with a multitude of publishers to cast out the widest next possible. We found a few publishers we&#8217;d never heard of that seem like almost a perfect match for our small indie team. Meeting face to face is vitally important and this was a great way of achieving this.</p>
<p>In the end, it really comes down to the money. If you can afford $2-4k Euro&#8217;s then I highly recommend, however if you can&#8217;t I&#8217;d recommend petitioning your government to see if you can get assistance as we did. I would love to see an &#8220;Indie&#8221; pass or similar offered by Game Connection for a shorter time at a lower cost.</p>
<p><strong>Conclusion</strong></p>
<p>Have you been to Game Connection or do you plan to go next year? Or is this cost simply too prohibitive?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/game-connection-thoughts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SOLID Principles For Game Developers</title>
		<link>http://www.doolwind.com/blog/solid-principles-for-game-developers/</link>
		<comments>http://www.doolwind.com/blog/solid-principles-for-game-developers/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 22:34:36 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Game Programming]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=545</guid>
		<description><![CDATA[The SOLID principles are a set of 5 software development principles coined by “Uncle Bob” (Robert C. Martin).  They are a set of guidelines for Object Oriented Design (OOD), specifically for class design.  They are widely used by agile business programmers however they are generally unknown amongst game developers.  This article describes the principles and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/solid/solidprinciples.jpg"><img class="alignright" title="SOLID Principles" src="http://www.doolwind.com/images/blog/solid/solidprinciples.jpg" alt="" width="162" height="130" /></a>The SOLID principles are a set of 5 software development principles coined by “Uncle Bob” (Robert C. Martin).  They are a set of guidelines for Object Oriented Design (OOD), specifically for class design.  They are widely used by agile business programmers however they are generally unknown amongst game developers.  This article describes the principles and frames them in common game development situations.</p>
<p><span id="more-545"></span></p>
<p><strong>Single Responsibility Principle</strong></p>
<p><em>“There should never be more than one reason for a class to change.”</em></p>
<p><a href="http://www.doolwind.com/images/blog/solid/SingleResponsibilityPrinciple.jpg"><img class="alignright" title="Single Responsibility Principle" src="http://www.doolwind.com/images/blog/solid/SingleResponsibilityPrinciple.jpg" alt="" width="270" height="216" /></a></p>
<p>The first principle is the cornerstone of the set and gives the greatest return on investment when followed correctly.  It states that each class should have only a single responsibility and therefore reason to change.  Keeping each class small and tightly focussed allows developers to know exactly where to go to find or add particular functionality to the game. </p>
<p>Why is having more than one responsibility bad?  Multiple responsibilities means there is coupling between separate pieces of code.  Changes to one responsibility reduce the ability for the class to meet the requirements of the other responsibilities.  This leads to fragile design that breaks often and in unexpected ways.  “Why did changing from rendering API break jumping in the game?”</p>
<p>The way to fix code that breaks this principle is to separate each responsibility into its own class.  The first step can be to extract an interface per responsibility.  Other classes can then rely on these interfaces rather than the class itself.  The class can then safely be split up into separate classes for each responsibility that each implements a single interface.</p>
<p><span style="text-decoration: underline;">When have you got it?</span> – The usual culprit breaking this principle is that one (or group) class that’s hundreds or thousands of lines long.  You know the one I’m talking about. Often it’s the <em>GameObject</em> or <em>Entity</em> class that everyone seems to throw code into.  This class usually has about 500 reasons to change, and therefore 500 responsibilities.  It’s usually involved in the heinous bugs that crop up constantly.</p>
<p><strong>Open Closed Principle</strong></p>
<p><em>“Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.”</em></p>
<p><a href="http://www.doolwind.com/images/blog/solid/OpenClosedPrinciple.jpg"><img class="alignright" title="Open Closed Principle" src="http://www.doolwind.com/images/blog/solid/OpenClosedPrinciple.jpg" alt="" width="270" height="216" /></a></p>
<p>The goal of this principle is for each class to change as infrequently as possible while allowing it to be used in as many situations as possible.  While these two requirements may seem at odds they actually complement each other to generate robust design.  A class is open for extension means that the behaviour of a class can be changed in new and different ways as the requirements change.  A class is closed for modification when no source code changes are required for these changes in requirements to be met.</p>
<p>This principle can easily be resolved with data driven design.  By passing the required configuration data to a class it can easily be extended reducing its need for modification.  Any variables (in the mathematical sense) should be passed to the class so that the classes definition itself (the code) does not specify the functionality of the class alone.  I find this the easiest to think about in terms of the basic OOD principle of data and operations.  The class defines the operations it can perform (its functions) and the data that it operates on.  As much of this data as possible should be passed to the class/function.  This moves the configuration of its data outside the class itself to the calling code increasing its ability to change.</p>
<p><span style="text-decoration: underline;">When have you got it?</span> – This is the file you dread checking-in because everyone seems to be working on it all the time.  No matter what system you’re working on, these files always seem to be involved.</p>
<p><strong>Liskov Substitution Principle</strong></p>
<p><em>“Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.”</em></p>
<p><a href="htp://www.doolwind.com/images/blog/solid/LiskovSubtitutionPrinciple.jpg"><img class="alignright" title="Liskov Substitution Principle" src="http://www.doolwind.com/images/blog/solid/LiskovSubtitutionPrinciple.jpg" alt="" width="270" height="216" /></a></p>
<p>Inheritance and polymorphism are powerful mechanisms for solving complex problems with simple solutions.  They are also powerful mechanisms for creating bugs and problematic code.  This principle involves making sure inheritance hierarchies are sound and not being abused by code that introduces bugs that are hard to find.  While it seems simple on the surface, this principle can be quite complex to solve correctly.</p>
<p>The first steps to solving this problem are to find instances of checking for an objects type &#8211; both its own and that of objects it’s working on.  Beyond this easy first step comes a principle known as “Design By Contract”.  Each function has a set of conditions that must be true before it is called (pre-conditions) and a set of conditions it guarantees are met after its completion (post-conditions).  These are often implied conditions kept in the mind(s) of the programmer(s) working on them.  The first step is formalising these conditions into code.  Once this step is completed the following rule can be met – “Derived classes can only weaken pre-conditions and strengthen post-conditions”.  Put another way, functions of a derived class should expect no more than their base class and promise no less.  This principle is important because of the fact a model viewed in isolation cannot be meaningfully validated.  You don’t know whether your new “Tank” class is valid until you run it in the context of its parent, siblings and other game system.</p>
<p><span style="text-decoration: underline;">When have you got it?</span> – Classes breaking this rule are really easy to find.  Look for any base class that uses run-time type information (RTTI) to interrogate its own type (or the type of an object it’s working on).  As soon as the GameEntity class is checking if it’s of type “Tank” to do some special code, you’ve broken this principle.  The class should be able to polymorphically call functions without caring about the actual type of the object.</p>
<p><strong>Interface Segregation Principle</strong></p>
<p><em>“Clients should not be forced to depend upon interfaces that they do not use.”</em></p>
<p><a href="http://www.doolwind.com/images/blog/solid/InterfaceSegregationPrinciple.jpg"><img class="alignright" title="Interface Segregation Principle" src="http://www.doolwind.com/images/blog/solid/InterfaceSegregationPrinciple.jpg" alt="" width="270" height="216" /></a></p>
<p>Interfaces should be used for communication between different objects to encourage clean, modular code. This principle takes that concept further by making sure that the interfaces we use are themselves clean and unified. The larger the interface, the more the client is relying on functionality of another object. By keeping small segregated interfaces each object will rely upon only the smallest set of functionality it actually requires. This reduces the complexity of links between objects and more importantly, lets someone reading your code know exactly what each class relies upon. Rather than one “fat” interface we break the interface up into multiple smaller groups of functionality that each serve a different client.</p>
<p>This principle links back to the single responsibility principle nicely. In this case each interface should have a single responsibility. This lets you explicitly state the functionality requirements of each object based on the interfaces it requires.</p>
<p><span style="text-decoration: underline;">When have you got it?</span> – Look at all your interfaces (abstract classes) and make sure their listing of functions are homogenous.  An easy way to tell you’ve broken this principle is when there are small groupings of functions within the interface definition.  Whitespace is the key here, the more whitespace between the groups of functions, the more disparate they are.</p>
<p><strong>Dependency Inversion Principle</strong></p>
<p><em>“High level modules should not depend upon low level modules. Both should depend upon abstractions.”</em></p>
<p><em>“Abstractions should not depend upon details. Details should depend upon abstractions.”</em></p>
<p><a href="http://www.doolwind.com/images/blog/solid/DependencyInversionPrinciple.jpg"><img class="alignright" title="Dependency Inversion Principle" src="http://www.doolwind.com/images/blog/solid/DependencyInversionPrinciple.jpg" alt="" width="270" height="216" /></a></p>
<p>This is a key point that I had not heard of at all in game development until recently. This principle is quite the opposite of how many developers are used to working. Usually, if a class depends on another class, the client will instantiate an object of that class and then act upon it. Dependency Inversion (also called Inversion of Control) turns this on its head. Instead of the client being responsible for creating the object, it is given the object it depends on. This takes the control away from the client and moves it to the owner of the client, often the game engine.</p>
<p>A good example of this is in a rendering system. Rather than instantiating a rendering object, or directly calling the classes of the rendering API, the rendering system should receive an interface to the low level rendering functionality. By relying on an interface that is given to the rendering system, the low level rendering API can be changed without making breaking changes to the client rendering system. It becomes obvious if breaking changes occur as the low level rendering API’s interface will require changing.</p>
<p><span style="text-decoration: underline;">When have you got it?</span> – When two systems are talking to each other, how do they do it?  If they are using concrete classes then look for opportunities for them to rely on interfaces instead.  The best way is for the class to take as parameter to its constructor an interface reference to the class it needs to work on.  This also makes it obvious what sub-systems are particular class is reliant on.</p>
<p><strong>Conclusion</strong></p>
<p>What are your thoughts on the SOLID principles? Do you see benefit from adopting these in the games industry as web and application development has done?</p>
<p>SOLID Motivational Posters, by <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Derick Bailey</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/solid-principles-for-game-developers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Prototyping Tips</title>
		<link>http://www.doolwind.com/blog/prototyping-tips/</link>
		<comments>http://www.doolwind.com/blog/prototyping-tips/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 23:20:27 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Flick Buddies]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=543</guid>
		<description><![CDATA[Since the release of Flick Buddies, I’ve been prototyping game ideas for our next game. The best of these prototypes we’re taking to GDC to show publishers. Today I’m sharing my list of tips for creating prototypes. 1. Set Your Goals It’s important to decide exactly why you’re making the prototype, and what you hope [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/prototype.jpg"><img class="alignright" title="Prototype" src="http://www.doolwind.com/images/prototype.jpg" alt="" width="230" height="161" /></a>Since the release of <a href="http://itunes.apple.com/app/flick-buddies/id405424038?mt=8">Flick Buddies</a>, I’ve been prototyping game ideas for our next game. The best of these prototypes we’re taking to GDC to show publishers. Today I’m sharing my list of tips for creating prototypes.<strong></strong></p>
<p><span id="more-543"></span></p>
<p><strong>1. Set Your Goals</strong></p>
<p>It’s important to decide exactly why you’re making the prototype, and what you hope to achieve. These goals show you where to focus your time while developing the prototype. For us it’s about testing gameplay mechanics and proving the core concept of the game. A secondary goal is having playable prototypes we can show potential publishers to quickly get across the feel of the game.</p>
<p>Without these goals, it’s difficult to know where your time is best spent. Is this about testing a mechanic on a particular platform or finding whether certain gameplay is fun? Could the game better be served by a pen and paper prototype first? It’s worth spending some time before you begin, deciding the best use of your resources.<strong></strong></p>
<p><strong>2. Timeboxing</strong></p>
<p>I always set a specific limit on how long I can afford to spend on the prototype. It’s easy to get carried away once I start and I can easily lose a lot more time than is necessary. Timeboxing forces me to focus on the most important elements of the prototype as I can’t do everything.</p>
<p>The actual length of time allocated depends entirely on your situation. I allocate 20 man hours per prototype which fits nicely into two work days for me. I find two days is the perfect length for completing the core elements while keeping time short so I am forced to focus.<strong></strong></p>
<p><strong>3. Throw It Away</strong></p>
<p>This is a tough one for some people, but I always recommend planning to throw the prototype away. This has a number of core benefits:</p>
<ol>
<li><a href="http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/">Pragmatic</a> – This stops me from doing any big design up front and forces me to do      just enough to get the task done. It puts me in a completely different      mindset while developing as I just want to get it done as quickly as possible.</li>
<li>Lessons learned – When you      begin work on the real game you will have previous experience in      implementing the same features and solving the same problems. This will      help improve the design of the game, both at a software and gameplay level.      With some particularly complex problems (“wicked problems” according to <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670">McConnell</a>)      we must try solving the problem first, before we can fully understand it      and find the optimal solution.</li>
<li>Less Constraints – If      you’re throwing away the prototype there’s less constraints on how you      build the prototype. You can use whatever technology is best for      prototyping, rather than the best for creating complete games. If you      don’t follow company (or personal) guidelines during the development it’s      less of an issue, as it’s a completely separate act.</li>
</ol>
<p>Rather than laying the foundations for your game your doing the opposite, investigating the best way to build it so that when the time comes to lay the foundations you’re in a better position.<strong></strong></p>
<p><strong>4. Key Gameplay Only</strong></p>
<p>I only focus on what’s different about the current game. If I’m making a clone, then really, what’s the point in prototyping? I pick out the gameplay elements that make the game stand out and test those to make sure they work and tweak them. One of our prototypes is a new twist on the platformer genre. I spent as little time on the platformer elements and focussed on “the twist”.</p>
<p>Another way of looking at this is to test the highest risk elements of the game. Gameplay that will make or break the game is important to test as early as possible. Often I find some ideas simply don’t work, and it’s much better to find this out in the first few days of development.<strong></strong></p>
<p><strong>5. Allow Tweaking</strong></p>
<p>I expose as much as possible to my designers and even play testers so they can tweak the gameplay. The game will be in a very rough form and allowing rapid changes to core gameplay can help steer the game in the correct direction.</p>
<p>Another of our prototypes is an asynchronous strategy game. I’ve exposed the start and win conditions and all unit stats. Small changes to these completely change the way the game plays. This is perfect for a prototype as it lets anyone play with the values and suggest changes to the originals. This pushes the burden of experimenting, balancing and tweaking off the prototype team and onto anyone else that plays the game.<strong></strong></p>
<p><strong>6. Divide The Game Up</strong></p>
<p>If I’m working on a large game I’ll divide the different elements up into separate prototypes. For example in the “Total War” series I would make the strategic and battle maps completely different prototypes. This has a number of core benefits:</p>
<ol>
<li>Separate teams can work on      each prototype if needed</li>
<li>Different technology and      tools can be used if helpful</li>
<li>Each individual part of      the game can be judged independently. Perhaps some areas are less fun than      others? You can look at each part as its own game and easily see its      strengths and weaknesses.<strong><br />
</strong></li>
</ol>
<p><strong>7. Run On Target Platform</strong></p>
<p>I always find that to get the full user experience of a prototype it’s best to run on the target platform. This is core to the gameplay experience and for certain platforms will completely alter the reaction to the prototype.</p>
<p>The only time I don’t do this is when it will blow out the schedule to do so or if there are other constraints that make it impossible (e.g. platform owner restrictions). In this case I do my best to imitate the platform it will run on to get the user experience as close to the real platform as possible.<strong></strong></p>
<p><strong>8. Have External Material</strong></p>
<p>Some things are better completed outside of the prototype itself to save time. I often write tutorials and help screens as a series of screenshots of the game with instructions overlayed. This is far quicker to do in Photoshop than implementing within the prototype. While having screenshots as a tutorial isn’t as good a user experience it saves time that can be spent implementing other features of the prototype.</p>
<p>Another time saver is to walk people through the prototype personally, replacing the tutorial. I like to watch people playing the prototype as much as possible and explaining the game to them is the perfect way to open up a dialog about the prototype.</p>
<p><strong>Conclusion</strong></p>
<p>What are your tips for prototyping? How long do you like to spend and do you throw them away once finished?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/prototyping-tips/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

