<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel rdf:about="http://feeds.garagegames.com/rss/blogs/developer/40653/">
		<title>Blog for Gary Preston at GarageGames.com</title>
		<description>Blog feeds for Gamers and Developers in the GarageGames community.</description>
		<link>http://www.garagegames.com/</link>
		<image rdf:resource="http://www.garagegames.com/images/GarageGames_logo_small_w.gif" />
		<dc:date>2008-11-21T11:57:45+00:00</dc:date>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/40653/14970"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/40653/11898"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/40653/10222"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/40653/8278"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/40653/7795"/>
				<rdf:li rdf:resource="http://www.garagegames.com/blogs/40653/7360"/>
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://www.garagegames.com/blogs/40653/14970">
		<dc:format>text/html</dc:format>
		<dc:date>2008-06-27T15:40:58+00:00</dc:date>
		<dc:creator>Gary Preston</dc:creator>
		<title>Shelled! Online Soft Launch</title>
		<link>http://www.garagegames.com/blogs/40653/14970</link>
		<description>&lt;img src='http://www.figmentgames.com/downloads/shelled2/shelled_logo.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;I'm proud to announce the soft launch of Shelled! Online to the GarageGames community. This is your opportunity to get your hands on the game prior to the official public release in a couple of days.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled2/shot_power.png'  align=center alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Complete single player missions to test your skills, then compete online with other tanks in 6 different multiplayer game modes.&lt;br&gt;&lt;br&gt;Custom design your tank for battle online:&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled2/create_a_tank.png'  align=center alt=&quot;&quot;&gt;&lt;br&gt; &lt;br&gt;&lt;a href='http://forums.redthumbgames.com' target=_blank&gt;Forums&lt;/a&gt; are now available for discussing Shelled! Online, organizing a game, or just bragging about your long range mid air kill ;)  Feel free to report bugs and technical issues in the forums or here as well.&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;a href='http://www.redthumbgames.com/shelledonline/download' target=_blank&gt;Shelled! Online 2.0.0 - Download Now!&lt;/a&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.garagegames.com/images/site/store/game/madewithtorque.gif'  align=right alt=&quot;&quot;&gt;</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/40653/11898">
		<dc:format>text/html</dc:format>
		<dc:date>2006-12-17T23:38:12+00:00</dc:date>
		<dc:creator>Gary Preston</dc:creator>
		<title>Shelled! A Postmortem</title>
		<link>http://www.garagegames.com/blogs/40653/11898</link>
		<description>This postmortem is also available as a &lt;a href='http://www.figmentgames.com/downloads/shelled/shelled_postmortem.pdf' target=_blank&gt;PDF&lt;/a&gt; for those that would like the original formatting and image captions. For the rest I've done my best to retain the formatting in the below blog. &lt;br&gt;&lt;br&gt;As I'm also planning to post this on my blog too, please forgive any explanations that seem obvious to GG regulars.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/layout_01.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/shelled_logo_small.jpg'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Shelled! A Postmortem - By Gary Preston&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;&amp;quot;Shelled! is an artillery combat game in full 3D that allows up to 8 on-line players to blow each other to bits! Fire a variety of earth-moving explosive turtle shells including nukes, spreads, and more! With classic Scorched Earth inspired game play&amp;quot;&lt;/i&gt; - &lt;a href='http://www.shelledgame.com' target=_blank&gt;www.shelledgame.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;RedThumbGames began development of Shelled! in January 2005, I joined the team roughly four months in with Shelled! not only being my first TGE based project but also the first real game I'd worked on. The prospect of getting my teeth into a real project was both exciting and at the same time very daunting. &lt;br&gt;&lt;br&gt;&lt;b&gt;THE TECH&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/sneakpeek_3podsofwar.jpg'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Shelled! was developed using the Torque Game Engine (TGE). For those not familiar with TGE, it's a C++ based engine (some Asm) along with a custom scripting language known simply as &amp;quot;Torque Script&amp;quot;.&lt;br&gt;&lt;br&gt;Torque Script takes a little getting used to, not in terms of its language which is very C like and easy to pickup, but its tight integration with the engine. This integration turns out to also be one of its strengths, if your game were a house, the engine would be the bricks and Torque Script the mortar that holds everything together, the vast majority of our game play logic was script based.&lt;br&gt;&lt;br&gt;The script code runs several times slower than C++ code despite being compiled to byte code on first use, thus first reactions would be to bypass it and code everything in the engine. This would be a mistake, the productivity gain scripting brings should not be underestimated. It's quite surprising just how much you can script without any noticeable performance impact, besides, it's always possible to move the more demanding script code into the engine during an optimization phase. &lt;br&gt;&lt;br&gt;That isn't to say Torque Script is perfect, I'm sure most people that have worked with it could come up with a list of extra features they'd like to see, then again you could say that about any engine/development environment.&lt;br&gt;&lt;br&gt;A few months after joining the Shelled! team I was made aware of Torsion, an IDE created for editing and debugging Torque Script by SickHead Games. Without doubt productivity increased considerably. For debugging ease alone, I'd strongly recommend that anyone working with Torque Script evaluates Torsion.&lt;br&gt;It really goes without saying how critical source control is for any project especially those done remotely. We used CVS for most of the project switching to SVN nearer the end. &lt;br&gt;&lt;br&gt;During the last few months of the project we also setup Mantis for logging all reported bugs from the latest beta test. In hindsight we should have had mantis up and running from the start. The effort in co-ordinating who was fixing which bug and whether a bug had been fixed or not was greatly reduced. It did take a little more time up front to get bugs logged, but the later time savings were more than worth it, even more so if your project team is split across several timezones.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;WHAT WENT WRONG&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OUT FEATURE THE COMPETITION&lt;/b&gt;&lt;br&gt;&lt;br&gt;From the off Shelled! had a clear goal, to recreate the fun factor of the classic Scorched Earth game in 3D with simple controls and game play. Early on we lost sight of that goal.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/inspiredby_scorched.gif'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Several months into development the game had it all, flying tanks, deformable terrain, loads of weapons, various planets sporting different gravity levels, tank power ups and a wind system that would occasionally change direction and affect shell trajectories, to mention but a few. What we didn't have, was accessible game play. &lt;br&gt;&lt;br&gt;The game was too cumbersome, it had too many options, the number of clicks needed to go from loading the game to actually firing your first in shell in anger was bordering on the insane. Selecting a level required setting min/max bot skill level, min/max wind speeds, fixed or varied wind direction, planet gravity, terrain type, allowed weapons, points/money for kills and a host of other options that whilst some may find useful, for the majority it was just over whelming.&lt;br&gt;&lt;br&gt;Looking back it was hardly surprising the early versions of the game met with an amount of criticism during the first public viewing. In short order the game was ripped apart and just about every major feature ripped out and game controls overhauled. The user interface was stripped and reduced to a fixed set of simple options. Now the user could get from main menu into an actual game in just a few clicks. &lt;br&gt;&lt;br&gt;&lt;b&gt;LEARNING CURVE&lt;/b&gt;&lt;br&gt;&lt;br&gt;TGE is a sizable chunk of code, the learning curve of which is fairly steep. This steep learning curve was compounded by my initial mindset of wanting to understand how everything worked before making changes. This is probably due to my Information Systems background, where significant time was often spent understanding new systems before any changes were made.&lt;br&gt;&lt;br&gt;With an engine like TGE this wasn't feasible. Not only due to the sheer amount of code, but also because understanding much of the code requires that you already have a grasp of several concepts unique to the game domain.&lt;br&gt;&lt;br&gt;Once I'd shaken off the need to understand everything and instead focused on only code in the immediate area of concern, I found my overall knowledge of the engine increased at a greater pace.&lt;br&gt;&lt;br&gt;&lt;b&gt;CODE WHAT YOU NEED, NOT WHAT YOU THINK YOU MIGHT&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/cut_tonsofcustomoptions.jpg'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;A few times whilst adding support for a specific feature I would catch myself over analyzing what was needed and looking for a &amp;quot;perfect&amp;quot; solution that not only supported the current task but also allowed easy expansion in the future. On the surface this isn't a bad thing to do and in moderation can be very useful. However, when you try to be too flexible or always look for the &amp;quot;best&amp;quot; way to do something, you can end up spending hours/days longer adding a feature that will also support XYZ only to find you never needed X let alone Y or Z. All that extra time making it flexible was for naught and the extra fluff may have reduced the readability of the code. Even worse, you may find the feature gets cut a few months down the line. &lt;br&gt;&lt;br&gt;Coding only &amp;quot;what you need&amp;quot; became an important lesson for me and fortunately one I learnt very early on in the project. Should a feature later be required, then, at that time and not before, refactor and add the new feature. In pretty much every case the flexibility I thought we might need later was never the case and in most cases features were later scaled back or dropped.&lt;br&gt;&lt;br&gt;&lt;b&gt;USABILITY TESTING&lt;/b&gt;&lt;br&gt;&lt;br&gt;We left it quite late in the project before opening the game to a wider audience of testers. By which time a number of features had been fully implemented and final artwork put in place. Only to then discover the intended target audience for the game were overwhelmed by the amount of options and general control scheme.&lt;br&gt;&lt;br&gt;High quality artwork was thrown out and the theme changed to a more cartoon style, but the changes didn't end there. Feature after feature found itself mercilessly cut, some of which had taken considerable time to implement over the previous months.&lt;br&gt;&lt;br&gt;This kind of design change can be minimized by prototyping up front (lesson learnt) however even with prototyping, games are creative works and will under go changes throughout the development life cycle. Features may be dropped due to feedback from testers or cut due to budget/time constraints. &lt;br&gt;&lt;br&gt;Such a major change in direction so far into development was a hard to do, but once the dust settled and newer &amp;quot;cartoon&amp;quot; style artwork was in place the Josh's decision was vindicated and the game really started to finally come together. Had we not followed the &amp;quot;CODE WHAT YOU NEED&amp;quot; rule, this cutting of features would have been all the more painful.&lt;br&gt;&lt;br&gt;In hindsight we should have prototyped the main features of the game and done a wider form of testing with people from the target market rather than relying on our own opinions. &lt;br&gt;&lt;br&gt;&lt;b&gt;CROSS PLATFORM  SUPPORT&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/cut_tonsmoreweapons.jpg'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;TGE is a cross platform engine that works on Windows, MacOS and various flavors of Linux. In the early days of development, Shelled! compiled and ran on all three. However it wasn't long before development focused entirely on Windows with the intention of bringing Mac/Linux up to date at a later time. As development neared an end, we had a game that no longer compiled let alone ran on the Mac nor Linux. Bringing the game up to date on those platforms probably wouldn't have taken too long, but it was time we no longer had. &lt;br&gt;&lt;br&gt;In hindsight we would have been better off keeping Mac and Linux builds up to date either after each feature change or at regular milestones. The time it would take to resolve issues just after a feature change whilst the changes were still fresh would probably have been lower than the time it was going to take to resolve everything a year or two later at the projects end. &lt;br&gt;&lt;br&gt;In addition testing of new features could have been completed on each OS throughout development, by the end of the project even if we ported the game to the Mac and Linux we'd have been left with a sizable amount of feature testing to do. Any major platform bugs would have then caused a significant delay, where as the same bugs found during development could have been resolved by bringing in a Mac/Linux programmer to work in parallel.&lt;br&gt;&lt;br&gt;As a result, Shelled! has only been released on the Windows Platform. &lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/scifi-shelled.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;AI&lt;/b&gt;&lt;br&gt;&lt;br&gt;I guess this doesn't really belong in the &amp;quot;what went wrong&amp;quot; category, more in the, &amp;quot;if we had more time&amp;quot; category.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/cut_badguy.jpg'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;With the main emphasis on network play the AI took a bit of a back seat. This becomes quite evident in that the AI will only ever make use of the default shell type. They're incapable of purchasing and making the decision as to when to use different shell types. &lt;br&gt;&lt;br&gt;Artificial Intelligence is a fascinating subject with a number of techniques that would have been worth investigating for use in Shelled!, time however was not on our side.&lt;br&gt;&lt;br&gt;&lt;b&gt;NETWORKING&lt;/b&gt;&lt;br&gt;&lt;br&gt;Shelled! is mainly a multi player game and unfortunately one key problem is the requirement of users to have ports open before their &amp;quot;hosted&amp;quot; game will appear on the master server. Although many AAA games have this problem, they also have such a large pool of players that its almost a given that a sufficient proportion will know how to forward a few ports to let them run their own servers.&lt;br&gt;&lt;br&gt;Unless your game is aimed at hardcore gamers we cannot assume this level of technical knowledge. There will of course be exceptions, but can we count on that? One potential problem being players download the game, click on-line play and see no servers, so they click host and sit playing the AI for a while then decide nobody else is going to join them and quit. It could be that a number of other players were doing the exact same thing and yet none of them were aware of each other.&lt;br&gt;&lt;br&gt;This could be addressed through running a few dedicated servers but ideally we should removing the need for the end user to worry about port forwarding at all. With UDP packets and the co-operation of a master server, it's possible to traverse firewalls and NAT'd connections. Several methods are available but we didn't have the time needed to investigate and implement any. I believe TNL has an implementation ( used by ZAP!? ) a feature that would make a worth while addition to TGE for future projects.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;WHAT WENT RIGHT&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;COMMUNICATION&lt;/b&gt;&lt;br&gt;&lt;br&gt;Communication on remote projects is problematic at the best of times, but add to that an 8 hour timezone difference and incompatible working hours making real-time communication impossible within any kind of reasonable hour and the potential for problems increases.&lt;br&gt;&lt;br&gt;The alternative, Email and IRC. This wasn't as bad as it sounds, we had a paper trail of feature requests and bugs fixes, in addition feature requests were clear and concise which greatly reduced the chance of differing interpretations. &lt;br&gt;&lt;br&gt;&lt;b&gt;FAKING IT&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/inflight.jpg'  align=right alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;The initial implementation of the Tanks and Jets attempted to model forces such as jet thrust, wind, gravity and  surface friction amongst others. It quickly became apparent that implementing &amp;quot;realistic&amp;quot; physics (as realistic as flying, nuke wielding turtles can be anyway ;) was simply getting in the way of the game play. &lt;br&gt;&lt;br&gt;A few people have commented that they liked the physics in Shelled! and yet under the hood they're very unrealistic. Aside from simulations, accurate physics are not that important so long as the implementation &amp;quot;feels&amp;quot; good it shouldn't matter whether you have a cool rigid body simulation that takes into account thrust/mass/gravity or simply a set of fudged numbers.&lt;br&gt;&lt;br&gt;One example of this is the initiation of flight, the original jet thrust gradually accelerates the tank upwards. However, in the final build we went instead for an instantaneous velocity followed by a gradual acceleration that tapered off quickly. This was done to allow tanks to exit craters quickly yet limit the final height they could achieve. &lt;br&gt;&lt;br&gt;Another area where game play came before reality was the way tanks conform, or more specifically do not conform to the terrain. This was done for two reasons. First, having a fixed level platform made the AI trajectory calculations easier. Second, and of greater importance. The concept of &amp;quot;trajectory&amp;quot; based game play, getting players to aim above a target rather than directly at it, was already a hard sell for our main audience of players. We'd have only complicated matters if tanks could come to a rest angled against a cliff face and the player suddenly found themselves having to move left/right rather than up/down aim higher or lower.&lt;br&gt;&lt;br&gt;We didn't want to be &amp;quot;too&amp;quot; apparent that we'd taken this approach and landing a tank on the top of a spire made it obvious that we'd faked it. Again we fudged it, instead of tumbling off the spire we applied a small force in the direction of the largest overhang to push the tank clear. Accurate, no, but it did the trick.&lt;br&gt;&lt;br&gt;&lt;b&gt;COMMUNITY RESOURCES&lt;/b&gt;&lt;br&gt;&lt;br&gt;These were a mixed bag. On the one hand, we saved quite a substantial amount of time and effort by leveraging the work of the community, however, we also lost time tracking down and fixing various bugs in the resources, many of which went unnoticed for some time. In several cases the resources were later removed in favor of custom code. Although we still saved time by initially using resources to quickly test a concept and as a basis for more customized code.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/cut_enemytank.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Notable exceptions that remained in the final build were resources such as Ben Garney's Commander Map and Stephan Zepp's terrain deformation code both of which saved us a great deal of research and implementation time. Neither resource remained untouched however, we made substantial changes to the terrain deformation code to tailor it to our needs. Such as ensuring any objects in the vicinity had their cached collision sets invalidated to ensure they fell into craters. We also added a crater impact texture and abused the &amp;quot;updateGridMaterials&amp;quot; code to play nicely with tiled terrain.&lt;br&gt;&lt;br&gt;The Garage Games community as a whole&lt;br&gt;are a great asset to the Torque Game Engine. Both in terms of supporting each other through forums and IRC as well as taking the time to produce resources, which, when carefully selected can greatly aid development.&lt;br&gt;&lt;br&gt;&lt;b&gt;JOURNALING&lt;/b&gt;&lt;br&gt;&lt;br&gt;Once again the choice of engine paid dividends. TGE has the ability to record and play back demos of your game to help remind other gamers of how you gracefully nuked them out of existence, however, a less commonly used feature is journaling.&lt;br&gt;&lt;br&gt;Journaling records all the input the game receives whilst running allowing a game session to be replayed again at a later time, but unlike a demo, you can replay the session from within your favorite debugger. If beta testers are having strange crash bugs that you can't reproduce, make them play the game with journaling enabled and send you the resulting file. Fire up visual studio and replay the journal in debug mode, go make a coffee and when you come back the debugger should have broken out just before the event that causes the crash to occur.&lt;br&gt;&lt;br&gt;Journaling helped track down several major bugs within Shelled! Although we never needed beta testers to send in a journal file, the option was there and would also help remove any ambiguities that an emailed bug report could contain.&lt;br&gt;&lt;br&gt;&lt;b&gt;NETWORKING&lt;/b&gt;&lt;br&gt;&lt;br&gt;Using Torque allowed us to make full use of its great networking support. There were a few teething problems but these were more down to inexperience with the networking side of the engine. We also spent a little time testing Shelled under fairly high packet loss and latency's of up to 200-350ms, with only one exception, the game still played well. The exception being the purchase screen which was re-written to use client side predication based on the clients last confirmed Cash amount.&lt;br&gt;&lt;br&gt;&lt;b&gt;CLOSING THOUGHTS&lt;/b&gt;&lt;br&gt;&lt;br&gt;When things go wrong, you find yourself having to work even harder to solve the problem. That extra effort tends to make those events easier to recall. I believe this is why a lot more appears to have gone wrong with the project than right. In reality the two were probably well balanced, mistakes are just easier to remember.&lt;br&gt;&lt;br&gt;What I personally took home from the project (aside from a neat Shelled! branded mug) was a deeper understanding of the engine as well as a greater appreciation for what goes into making a complete game, although I still feel like I've only scratched the surface of TGE in many areas. Perhaps most importantly, I've realized just how much I didn't know I didn't know about game making ;)&lt;br&gt;&lt;br&gt;Did we manage to make a fun game? I think we did. The final decision is of course up to the players, head on over to www.shelledgame.com and give the game a whirl.&lt;br&gt;&lt;br&gt;Gary Preston&lt;br&gt;Lead Programmer&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;PROJECT VITALS&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Development software:&lt;/b&gt;  3D Studio Max, Visual Studio.net 2003, Subversion, Mantis, Torsion&lt;br&gt;&lt;b&gt;Engine Used:&lt;/b&gt; Torque Game Engine&lt;br&gt;&lt;b&gt;Development Hardware:&lt;/b&gt; 2.8GHz HT P4, 1Gig Ram, 256Meg GF6800&lt;br&gt;&lt;b&gt;Release Platform:&lt;/b&gt; Windows &lt;br&gt;&lt;br&gt;&lt;b&gt;Length of Development:&lt;/b&gt; ~2 years&lt;br&gt;&lt;b&gt;Avg. Programmers:&lt;/b&gt; 1-2 &lt;br&gt;&lt;b&gt;Artists:&lt;/b&gt; 1 (for part of project)&lt;br&gt;&lt;b&gt;Release Date:&lt;/b&gt; 14th November 2006&lt;br&gt;&lt;br&gt;&lt;b&gt;Free Download:&lt;/b&gt; &lt;a href='http://www.shelledgame.com' target=_blank&gt;http://www.shelledgame.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/shelled/bronzemedal.jpg'  align=left alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;VGCore Score:&lt;/b&gt; 8.8 / 10&lt;br&gt;&lt;b&gt;VGCore Review:&lt;/b&gt; &lt;a href='http://pc.vgcore.com/reviews/445.html' target=_blank&gt;pc.vgcore.com/reviews/445.html&lt;/a&gt;&lt;br&gt;&lt;b&gt;Game Tunnel:&lt;/b&gt; &lt;a href='http://www.gametunnel.com/gamespace.php?id=306' target=_blank&gt;www.gametunnel.com/gamespace.php?id=306&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;a href='http://www.greatgamesexperiment.com/user/Gary Preston'&gt;&lt;img src='http://static.greatgamesexperiment.com/badge/user/gary preston/gge400x56.png' border=0&gt;&lt;/a&gt;  &lt;a href='http://www.greatgamesexperiment.com/game/shelled'&gt;&lt;img src='http://static.greatgamesexperiment.com/badge/game/shelled/gge400x56.png' border=0&gt;&lt;/a&gt;</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/40653/10222">
		<dc:format>text/html</dc:format>
		<dc:date>2006-04-10T01:03:30+00:00</dc:date>
		<dc:creator>Gary Preston</dc:creator>
		<title>GID j - Black Pixels</title>
		<link>http://www.garagegames.com/blogs/40653/10222</link>
		<description>NOTE: Full write up can be found on my blog, see end of post for links to the blog entries. &lt;br&gt;&lt;br&gt;Originally I had planned to do a TGB based GID however Tom mentioned I should do an XGS GID at some point on irc and I thought what the heck. &lt;br&gt;&lt;br&gt;A GID is hard enough to complete when you know the toolset you're using so I thought I'd have to scale back my goals and I mean really scale back. The goal, to display a single pixel on a PAL tv using the XGS game console. This would probably prove to be quite a challenge considering my limited knowledge of the XGS hardware (zero knowledge of the video hardware) and very little experience with the SX52, but it sounded like a fun challenge.&lt;br&gt;&lt;br&gt;For those that havn't heard about the &lt;a href='http://www.xgamestation.com' target=_blank&gt;XGS&lt;/a&gt;, its a console with the main purpose to learn the details of how hardware works and ways of designing game consoles. At the heart of the XGS is the SX52 microprocessor capable of running at a whopping 80Mhz with 292bytes of RAM and 4k EEPROM for program storage. (The XGS has an extra 128k SRAM onboard but that was beyond the scope of my project since I didn't have time to learn both the video hardware and SRAM hardware interfacing).&lt;br&gt;&lt;br&gt;Plotting a pixel doesn't sound like too hard a task, but then the more I read about how the video hardware worked, the more I realised that perhaps I hadn't scaled my goals back far enough. With the XGS you create video in software, by that I mean you have to generate the waveform that is sent to the TV eg this:&lt;br&gt;&lt;br&gt;&lt;img src='http://00101010.figmentgames.com/wp-content/images/xgs/palref.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;in code.&lt;br&gt;&lt;br&gt;Generating this signal involved counting the cycles each machine instruction would take to execute and knowing that one cycle @ 80Mhz takes 12.5 nano seconds. So by counting clock cycles and adding extra instructions via lots of loops/nops you can get very accurate timing, although the counting proved tricky with a few cycles out resulting in the follow TV output&lt;br&gt;&lt;br&gt;&lt;img src='http://00101010.figmentgames.com/wp-content/images/xgs/signal-novsync1.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Still after a lot of reading (mainly the SX52 manual :P) I managed to get a filled yellow TV screen and with a little more tweaking a nice yellow block in the center. The image I captured is very washed out, you'll have to trust me that it does look yellow on the tv&lt;br&gt;&lt;br&gt;&lt;img src='http://00101010.figmentgames.com/wp-content/images/xgs/big-pixel.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;This in and of itself caused a few headaches since to generate the block I did what amounts to an IF in asm and checked whether the current scanline was greater than 97 but less than 109 in which case we could output the colour yellow, otherwise output black. The problem been these two &amp;lt; and &amp;gt; tests introduced 3 branches into the code and with timing been critical down to the cycle I had to ensure all 3 branches took exactly the same amount of time to execute, which resulted in the following ugly code:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='codeblock'&gt;&lt;pre&gt;    ; black for 141 pixels (2037 cycles) and color for 12 (174 cycles)&lt;br&gt;    mov RE, #VID_BLACK                ; 2&lt;br&gt;&lt;br&gt;    ; color for 12 pixels (174 cycles)   &lt;br&gt;    cjb scanline, #97, :skipcolor1        ; 4/6&lt;br&gt;    cja scanline, #109, :skipcolor2   ; 4/6&lt;br&gt;    DELAY(2037-10)&lt;br&gt;    mov RE, #TEMP_COLOUR                            ; 2 setup pixel colour &lt;br&gt;    jmp :color                        ; 3&lt;br&gt;&lt;br&gt;:skipcolor2&lt;br&gt;    DELAY(2037-12)&lt;br&gt;    nop &lt;br&gt;    nop&lt;br&gt;    jmp :color                        ; 3&lt;br&gt;:skipcolor1&lt;br&gt;    DELAY(2037-6)&lt;br&gt;    nop &lt;br&gt;    nop&lt;br&gt;    jmp :color                        ; 3&lt;br&gt;:color&lt;br&gt;    DELAY( 174-5 )&lt;br&gt;&lt;br&gt;    ; black for 141 pixels (2037 cycles)                           &lt;br&gt;    mov RE, #VID_BLACK                              ; 2 setup pixel colour &lt;br&gt;    DELAY(2037-6)            ; inc following jump&lt;br&gt;&lt;br&gt;    djnz scanline, :scanline_loop   ; 2/4 (extra 2 from 4 is unaccounted for!)&lt;br&gt;   &lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;It's late and I'm sure the final code (which I think amounts to about 374bytes) will probably have plenty of bugs, but the end result is a nice yellow square on both my TV and PC digital TV card. So on the whole everything seems to be working and in sync.&lt;br&gt;&lt;br&gt;A much more detailed coverage can be found on my blog including a few extra screendumps of the debugger and the final source code if you're interested.&lt;br&gt;&lt;br&gt;The one thing that doing this GID has really taught me is how skilled the original Atari 2600 programmers must have been, I have a whole lot of respect for them.&lt;br&gt;&lt;br&gt;Blog entries:&lt;br&gt;&lt;a href='http://00101010.figmentgames.com/2006/04/07/gid-j-black-pixels/' target=_blank&gt;00101010.figmentgames.com/2006/04/07/gid-j-black-pixels/&lt;/a&gt;&lt;br&gt;&lt;a href='http://00101010.figmentgames.com/2006/04/08/gid-j-attempt-1-snow/' target=_blank&gt;00101010.figmentgames.com/2006/04/08/gid-j-attempt-1-snow/&lt;/a&gt;&lt;br&gt;&lt;a href='http://00101010.figmentgames.com/2006/04/08/gid-j-delay-debugging/' target=_blank&gt;00101010.figmentgames.com/2006/04/08/gid-j-delay-debugging/&lt;/a&gt;&lt;br&gt;&lt;a href='http://00101010.figmentgames.com/2006/04/09/gid-j-signal-generation/' target=_blank&gt;00101010.figmentgames.com/2006/04/09/gid-j-signal-generation/&lt;/a&gt;&lt;br&gt;&lt;a href='http://00101010.figmentgames.com/2006/04/09/gid-j-mission-accomplished/' target=_blank&gt;00101010.figmentgames.com/2006/04/09/gid-j-mission-accomplished/&lt;/a&gt;&lt;br&gt;&lt;br&gt;PS For those wondering why &amp;quot;Black Pixels&amp;quot; and not &amp;quot;Yellow Pixels&amp;quot; go search for a blog about &amp;quot;Black Triangles&amp;quot; :)</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/40653/8278">
		<dc:format>text/html</dc:format>
		<dc:date>2005-07-18T01:13:58+00:00</dc:date>
		<dc:creator>Gary Preston</dc:creator>
		<title>Monday Jul 18 1:13</title>
		<link>http://www.garagegames.com/blogs/40653/8278</link>
		<description>GID#14 entry Ghost Hunter. A T2D game which takes place within a haunted house (although you'll have to take my word for that since it's decorated with programmer art :P ) teaming with ghosts.&lt;br /&gt;&lt;br /&gt;Over the last weekend I've been updating my &lt;a href='http://00101010.figmentgames.com/2005/07/16/gid14-ghosthunter/' target=_blank&gt;personal blog&lt;/a&gt; with details of my GID#14 entry Ghost Hunter. Rather than reproduce the whole thing here, I'll just point anyone who interested in reading about the development to my &lt;a href='http://00101010.figmentgames.com/2005/07/16/gid14-ghosthunter/' target=_blank&gt;Ghost Hunter blog entry&lt;/a&gt;. Below is a quick summery for those not intrested in the blog.&lt;br&gt;&lt;br&gt;Ghost Hunter is a T2D game which takes place within a haunted house (although you'll have to take my word for that since it's decorated with programmer art :P ) teaming with ghosts.&lt;br&gt;&lt;br&gt;The player has a deployable trap that once deployed and activated will suck nearby ghosts into it. The trap holds a limited number of ghosts requiring a trip back to the ghost hunters van for emptying. Emptying the trap will score the player points. Trap all the ghosts without dieing to complete the level and game.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid14/images/capture00240.jpg'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;The games available on Linux and Windows (no mac as I don't have one yet). There's an avi for any mac only users, just so you know you're not missing anything good :) &lt;br&gt;&lt;br&gt;&lt;a href='http://www.figmentgames.com/downloads/gid14/WindowsGhost2D.rar' target=_blank&gt;WindowsGhost2D.rar (1.4meg)&lt;/a&gt;&lt;br&gt;&lt;a href='http://www.figmentgames.com/downloads/gid14/LinuxGhost2D.tgz' target=_blank&gt;LinuxGhost2D.tgz (1.7meg)&lt;/a&gt;&lt;br&gt;&lt;a href='http://00101010.figmentgames.com/2005/07/16/gid14-ghosthunter/' target=_blank&gt;View the .plan for this GID entry&lt;/a&gt;&lt;br&gt;&lt;a href='http://www.figmentgames.com/downloads/gid14/GhostHunter.avi' target=_blank&gt;GhostHunter.avi&lt;/a&gt;&lt;br&gt;&lt;br&gt;The game itself was quite fun to implement, its just a shame its not all that interesting to play. Still the aim of GID is mainly fun. I think anyone that has an idea for a game should GID it, you'll find out in a short space of time whether your idea really does have sound gameplay. Plus if you can't implement a very basic cut down version in a GID you might want to rethink implementing the full blown MMORPG version :P&lt;br&gt;&lt;br&gt;Anyhow, I hope some of you check out my blog and leave comments, it will save me having to make up names and posts :/</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/40653/7795">
		<dc:format>text/html</dc:format>
		<dc:date>2005-05-09T22:26:55+00:00</dc:date>
		<dc:creator>Gary Preston</dc:creator>
		<title>Monday May 9 22:26</title>
		<link>http://www.garagegames.com/blogs/40653/7795</link>
		<description>Saturday 7th May marked the start of GID#12 which I've been looking forward to all week. Unfortunately I was out all saturday night and by the time I crawled out of bed sunday, it was already around 12pm. Since hearing about GID I've managed to miss every event and was determined not to miss this one, even if I only had 12 hours of sunday left to GID in.&lt;br /&gt;&lt;br /&gt;Saturday 7th May marked the start of GID#12 which I've been looking forward to all week. Unfortunately I was out all saturday night and by the time I crawled out of bed sunday, it was already around 12pm. Since hearing about GID I've managed to miss every event and was determined not to miss this one, even if I only had 12 hours of sunday left to GID in.&lt;br&gt;&lt;br&gt;The theme was augmentation, although after about 5 minutes thought I decided I didn't have time to think of a game that would fit the theme. I've wanted to create a turn based strategy game for some time, so I decided to prototype a greatly simplified version. If any of you have every played Konquest that ships with KDE, you'll have a good idea of what my aim was :) At a pinch you could say that your augmenting the neutral planets with your fleets :P&lt;br&gt;&lt;br&gt;Originally I was hoping to have AI in the game, or networked multiplayer but due to time constraints I ditched those ideas and instead planned on a 2 player (via same computer) only game. The rest of this plan covers the development of my first GID, which even though I did it solo, I have to say I had a lot of fun :)&lt;br&gt;&lt;br&gt;Linux and windows downloads can be found at the bottom of this plan.  Just wanted to add a quick thanks to everyone in the gid irc channel for an entertaining weekend.&lt;br&gt;&lt;br&gt;&lt;b&gt;1pm - Sunday&lt;/b&gt;&lt;br&gt;&lt;br&gt;Having decided on creating a T2D version of Konquest, I set about creating the main game area. First stop, a quick background created with &amp;quot;The Gimp&amp;quot; (and when I say quick I mean it :P). Amazed by my work of art, I took a well deserved break and had sunday dinner. (Apologies to any artists out there who take offense to me calling my images &amp;quot;art&amp;quot; :P)&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid12/images/day1/13-00.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;14.30 - Sunday&lt;/b&gt;&lt;br&gt;&lt;br&gt;Having spent all of 5 minutes working on Conquest-T2D so far, it was time to get back to work, right after a quick cup of coffee (this happened a lot). I spent a little time adding some neat planets that bear a striking resemblance to an asteroid. I also added a dynamic tile map and populated it with a planet(asteroid) for each player and 5-10 random neutral planets along with a GUI to provide info about the planets. &lt;br&gt;&lt;br&gt;The planets are all stored as a simset within a galaxy script class. Whilst doing this, I realised I didn't know torque script quite as well as I thought and ended up spending some time reading through the various script resources.&lt;br&gt;&lt;br&gt;&lt;b&gt;17:45 - Sunday&lt;/b&gt;&lt;br&gt;With the galaxy/planet datastructure complete, planets now had randomly generated production, name, position and fleetsize stats. Two planets were randomly selected to be the players home planets and their starting stats matched. I spent a while making sure the code supported as many players as you want by simply changing a single $Game::MaxPlayers variable, however I never managed to find time to make a gui for selecting the number of players and entering names/player colours, so its stuck with 2, even though the support is there for loads more.&lt;br&gt;&lt;br&gt;The next screenshot shows the state of play at around 8pm. By which time I'd added mouse selection of planets and display of planet information in the info gui on the right hand side of the screen. I had planned on making a random name generator for the planets, but time got the better of me, so planets ended up been called &amp;quot;AAA1&amp;quot;, &amp;quot;AAA2&amp;quot; etc&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid12/images/day1/20-54.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;21:00 - Sunday&lt;/b&gt;&lt;br&gt;&lt;br&gt;Most of the work for the next few hours was spent adding the background game logic. It was around this time I realised the game needed to support multiple orders from the same player in the same turn and ended up going off on a tangent creating an orders list class for each player as well as a order class. Players could now issue as many orders as they wanted, sending their fleets off to colonise or attack any planet on the map. &lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid12/images/day1/00-03-mon.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid12/images/day1/00-03-mon-2.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;2am - Monday&lt;/b&gt;&lt;br&gt;&lt;br&gt;I'd spent the past two hours working on the game logic for combat. This was much simpler than I'd expected, mainly due to the way the planets were organised in the galaxy datastructure. The final version of the turn end order processing isn't really fair, since player 1 always has his orders processed before player 2, but it will do. &lt;br&gt;&lt;br&gt;The final game play element needed before I headed off to bed was the victory condition check. If any player has 0 planets left at the end of a turn, they may have lost. However, an additional test was needed to check whether the player had any ships en-route to another planet, since those ships could feasibly result in the player having a planet again next turn.&lt;br&gt;&lt;br&gt;&lt;b&gt;12:00pm - Monday&lt;/b&gt;&lt;br&gt;&lt;br&gt;With the game now playable, all that was really left to implement was delayed fleet movements, so that ships take a number of turns to reach a destination planet, depending on the distance from their origin. Most of the day however was spent tidying up the look of the game. I added a few programmer art planets, as well as blended a square of the players colour around player owned planets and a grey square around neutral planets. I also spent a bit of time reading up on the GUI in Torque, which up to now I've pretty much avoided using. The game looked a whole lot better with coloured player names and a splash screen/main menu.&lt;br&gt;&lt;br&gt;All in all the game took around 16-18 hours over sunday/monday, probably less considering the number of breaks I took. Lesson for future GID'ers, GID + TV = BAD!!! :) Overall I'm pretty happy with final game, it's playable even though it's far from finished. Its missing computer controlled players,  networking support, decent graphics/gui and better game play rules. Another few minute work and I could have modified the end turn button to make it fit in more, but there are lots little changes that could be done. Perhaps in the future I'll revisit this and add in network support along with a gui to select number of players :)&lt;br&gt;&lt;br&gt;The only dissapointment was that I didn't have time to create a better combat system, instead I ended up making combat boil down to the player with the most ships at the planet wins that fight. However finishing a GID is a great feeling :) So all in all, I'm a happy programmer and can live with the games shortcomings :)&lt;br&gt;&lt;br&gt;Anyhow, heres a few final screenshots.&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid12/images/day2/finished1.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img src='http://www.figmentgames.com/downloads/gid12/images/day2/finished2.png'  alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Game Download&lt;/b&gt;&lt;br&gt;&lt;a href='http://www.figmentgames.com/downloads/gid12/linux-conquest.tgz' target=_blank&gt;www.figmentgames.com/downloads/gid12/linux-conquest.tgz&lt;/a&gt; Linux Conquest - 1.6Meg (tgz)&lt;br&gt;&lt;a href='http://www.figmentgames.com/downloads/gid12/windows-conquest.rar' target=_blank&gt;www.figmentgames.com/downloads/gid12/windows-conquest.rar&lt;/a&gt;Window Conquest - 1.3Meg (rar)</description>
	</item>
	<item rdf:about="http://www.garagegames.com/blogs/40653/7360">
		<dc:format>text/html</dc:format>
		<dc:date>2005-03-15T18:52:21+00:00</dc:date>
		<dc:creator>Gary Preston</dc:creator>
		<title>Tuesday Mar 15 18:52</title>
		<link>http://www.garagegames.com/blogs/40653/7360</link>
		<description>Well I've had T2D for a week and I have to say I'm impressed with what it has to offer. I'd rather not bang on about all the cool features it has, such as how it handles tile maps/physics/collision detection and does pretty much anything you'd want a 2d engine to do. You can read all about that in the reviews on the T2D page. So instead I'll just point you to my &lt;a href='http://www.figmentgames.com/games/pong.php' target=_blank&gt;first game made using Torque2D.&lt;/a&gt;&lt;br&gt;&lt;br&gt;It's nothing special, just a clone of the classic pong game. What did impress me was how easy it was to get a complete game (even one this simple) done without knowing torque script up front. I think its a credit to the reference docs and basic tutorial :) &lt;br&gt;&lt;br&gt;Anyhow, the game took less than a day to complete, which included learning how to use T2D. I spent a little time on day two tidying up the code and trying to do things in a different way. &lt;br&gt;&lt;br&gt;I'm now working through making a simple pacman clone, well at least working on it inbetween improving my maths skills and playing eve-online :P Hopefully I have enough knowledge of T2D by the time I've completed pacman to make a start on a small 2d project :)&lt;br&gt;&lt;br&gt;Controls are W,S for player 1 and cursor up/down for player 2. Use space to launch the ball. Have fun :P</description>
	</item>
</rdf:RDF>
