Sunday, March 31, 2013

GDC 2013

I've been neglecting my blog for too long - we have big news all around. Our game was picked up by the University for showing at GDC so 7 members of Tripleslash (including myself) attended. The experience was amazing - it was great to have so many geeks under one roof! Nintendo's news of Web Framework was especially interesting for me. They seem to be posed to take Microsoft's place as the most indie-friendly of the three at the moment depending on what Microsoft and Sony may have up their sleeves.
The upcoming Havok Vision also looks REALLY cool. They will be fighting against the already entrenched Unity engine for market share but there are definitely many things going for them. Their state machine based animation system is fantastic and they obviously have a very high-end physics engine. Free deployment for mobile platforms also seems like a great move.
In GDC Play there were a few highlights for me. 'Forced' was a very fun 4-player coop game, basically Gauntlet meets Magicka. 'Super Motherload' looks like ridiculous party fun but I worry about being able to find 3 other people to play with. While it works with fewer players it would probably lose a lot of its charm. Even so, I'll be watching this one! Hawken looked amazing - that's probably why it was being used at the Oculus Rift booth.
Our game had a very positive reception from everybody who stopped by the booth. It seemed like somebody was constantly playing Magnetic By Nature at the University of Utah booth and I saw a number of people coming back time and again to see how far they could make it. We will be cutting all of the rougher  levels and likely combining all of the really difficult levels into a 'Bonus' section.
Thanks to the University of Utah, the Utah Chamber of Commerce and everyone who made our trip possible.

Sunday, February 10, 2013


This has been an incredible week for Magnetic By Nature. On Thursday we brought in a bunch of students and faculty to play through our games and provide feedback. Based on their feedback we have revamped the control scheme, rethought the way we handle the robot head, and made several changes that take our game to the next level. DING!

On Friday I interviewed with a great local company - SmartBomb Interactive. They're probably best known for their incredibly successful browser-based kid-friendly MMO Animal Jam. They've got another upcoming title for a more mature audience - Sky Legends. The developers there really seem to know their stuff - here's hoping I made a good enough impression to warrant a second interview!

Over the weekend I've been working on some much-needed enhancements to the way in which we handle 'special objects'. Our editor has always supported grabbing an item from a toolbox and dropping it into the world, allowing us to easily bundle together functionality for spikes, magnets and so forth. Once our team got into really building levels a major flaw with this philosophy reared it's ugly head - the difficulty of applying a change globally.

For instance, when we needed to tweak the size of our magnets to accommodate some changes to the art work we had to use some regex tricks, manually editing XML, and in the process we broke some things. I have taken a page out of Unity's book now by linking the objects back to the original template/prefab. In other words, we can make a change in one place and have it applied globally.

A nice bonus was that this enables us to reuse a single instance of each component on ALL instances of that object type, saving some memory. The new system is versatile enough to allow overrides on a level-by-level basis, too.

Thursday, January 31, 2013

Hybrid 2d/3d

All of this time we have been referring to our game by it's codename - Attraction. I am now pleased to announce the official title of the game - Magnetic by Nature! Not only does this get around an unfortunate amount of SSO issues (Google is convinced anybody googling 'attraction' wants dating sites, for some reason) - it's also a nod to the story behind the game. The robot is thrust into this dead world with only small bits of life. These act as checkpoints and guide the player through the game.

I have also been busy dealing with an unexpected issue. We originally settled on spritesheet animations with the expectation that they would be smaller, more expressive, and simpler to deal with. After looking at the HUGE number of animations that would be needed for the main player alone it became apparent that we needed to make a change.

Our choices were to either switch to keyframe-based sprite animation (found in most flash games) or render the main character in 3d. Because our artists are all more familiar with Maya than Flash we chose the latter. For the past several weeks I've been struggling through the content pipeline, differences in how XNA renders sprites and models, and animation issues.

One of the first problems I ran into is that the FBX importer is frustratingly undocumented. Models must have a single root joint with all other joints under that hierarchy. This hierarchy cannot include any groups (or the import fails). For about a week I worked with Kyle, our main rigger & 3d modeler, to get all of the issues fixed and the model importing & rendering properly.

Once that was done I had to figure out a way to animate it. While the FBX format supports exporting multiple animations in a single file neither Maya nor XNA seems to like working with the result. To work around this I modified the Skinned Model Extensions sample to merge animations from a subfolder as part of the pipeline. For instance, I can place a 'player.fbx' file in my Models folder, then place all of the animations (player_walk.fbx, player_jump.fbx, etc) in a subfolder named player.

Unfortunately in the process I discovered an issue with the sample code. If you set the scale of your model to anything other than 1 the animations become distorted. What is probably happening is that the mesh is being scaled by the keyframes are not - or maybe they're being scaled improperly. To work around this I either have the artists scale the model before generating the FBX or I set a constant scale within our engine.

I hope to post my modifications to the pipeline as a github project for future projects that have similar needs. If you have any suggestions or requests for additional features feel free to post them in the comments!

Friday, January 4, 2013

New Beginnings

Happy New Year, everyone! The break has been incredibly restful (and productive) for me. Performance was a big focus I had - between the various optimizations I was able to put in place, the game is now running flawlessly on the XBox 360. HUZZAH!
I'm looking forward to this next semester - I can see great things in our future! Watch this space for more details!