Free Time!

Posted on Posted in Game, X-COM: Alliance

So I’ve had a lot of spare time lately, which I’ve decided to spend on going through all the Alliance content.

Here’s a disclaimer, a lot of this work has been done over the last day or so, so excuse if it doesn’t seem like much but I was making some pretty good progress so I felt I’d post about it.

There’s several things I wanted to do during this time, I’ve produced a few videos showing content of the game which I think people will appreciate, I’ve been in talks with a friend on getting some of the design documents narrated and presented to you guys and finally I’ve been seeing how feasible it would be to produce a semi-restoration of the game as it was in a more modern engine. That last one likely sounds odd and understandably that’s probably true.

Why would you do that? Well there’s definitely followings out there for games such as this which, even to this day, would love to have played it. Obviously though the game was never finished so because of that there’s an extra load of work surrounding something like this. What motivates me however is that any progress I might make will hopefully help anyone else looking to do the same, and if not it certainly makes the content much more accessible for people to examine and explore. Regardless if games like this were released or not, I think they’re still pieces of history that shouldn’t be lost.

This involves going through all the assets within Alliance’s files and figuring out ways in which the content can be converted without losing too much / anything at all, and then finally sorting it. Each bit of content such as textures, sounds or models, can take a considerable amount of time individually for many reasons; keep in mind this content is literally over a decade old now!

I’d say I’ve been making some fairly good progress on this. My focus for now has mainly been on the models purely because I see those as the most work. Why would we want  to grab all these ol’ models? Well again, this will make them easier to examine but also because they’d make good placeholders until the point of which, possibly, new content could be produced.

Initially my efforts on this didn’t go very well. It’s fortunate because some of the original 3DSMax files were also among Alliance’s files, but there’s a number of issues that you’ll encounter from trying to open these! Firstly it seems the development team used the BonesPro plugin for 3DSMax which means that none of the models will be rigged upon opening them. This isn’t a huge problem. The huge problem is that some of these will cause 3DSMax to crash. I’ve tried 3DSMax 2015, 2011 and asked a friend to try 3DSMax 5 to no avail, it’s likely they could possibly be opened with a much earlier version of 3DSMax but I’m yet to find a copy, so until then I’ll have to work around this problem.

Starting with the Trooper, I eventually found two copies of the mesh that could be used and, after searching through many of the animations, eventually found a base animation pose that matched that of the mesh. After this I sent the mesh and animations off to a friend who kindly rigged both the older Trooper mesh and the newer one.

So with that done I began exporting all the animations from the 3DSMax projects within the files. Originally I wanted to export everything into the Collada format but support was seemingly poor in 3DSMax. I considered FBX but then decided to go with Valve’s SMD purely because it wasn’t a binary format, the Blender plugin works and it seemingly exported with very little hassle.

Finally coming to a decision I then converted every single animation individually. This wasn’t fun and I could have likely looked into a way to simplify that process but it’s too late now. With that done, I started trying to decide on an engine, a decision I still haven’t quite made, but I decided to set the models up so I could compile them to view within Valve’s Source Engine since it just happened to be an engine I’m currently a little more familiar with. I considered UE4 but it currently slows my computer down to a grinding halt and I’m not at all familiar with Unity. I had also deeply considered expanding on the engine we’ve been developing for Decay and I suppose I still am, but it’s currently not feasible to quickly prototype anything on it yet unfortunately.

With that out of the way I looked into ways I could extract all the textures from Alliance’s UTX archives. This had to be done through a method that didn’t require me to do it individually. I was a little upset because I previously had some software that worked over the command line that would do this but it’d seemingly gone missing and I could find no trace of it online. I’d almost lost all hope until I stumbled upon WOTgreal’s Exporter which is a fantastic piece of software because it also allowed me to extract all the sounds as well, which saved me a huge amount of time. Sadly it’s ability to export Unreal’s 3d format from some of the packages didn’t seem to function but this isn’t a huge problem right now (I have something in the works myself).

So with most of the textures extracted (some packages failed to open but that’s, again, not a huge problem) I then moved back onto working on some of the models again. The first thing I did was fix some of the rigging on the newer Trooper, as some of his animations would essentially cause him to suddenly develop wings.

I'm feeling much better!
I’m feeling much better! (left side isn’t fixed but right side is, just for comparison)

With that resolved, which was my first time painting vertex weights, the new Trooper model was pretty much done. I began looking into what other models I could try to open up, export and rig, again, rigging being something I hadn’t attempted before. The Ascidian race seemed like a good start, and seemingly it was; both the new Ascidian mesh was easily exported along with an older version, the only downside being that the former was seemingly ever slightly outdated (slightly different UV map and additional assigned materials). The skeleton appeared to be the same as that of the Trooper which was very much a major win. Taking in the knowledge I’d gained from fixing the slight mistake on the Trooper, I set out to rig the Ascidian as best as I could and ended up surprising myself. With it rigged, I looked into exporting some of its animations but sadly encountered a little less luck there however it seemed a lot of the Trooper animations fit it perfectly well so regardless of original intent, it works for now.

After this I spent a short while cleaning up some of the UI graphics before then moving back onto the Trooper again. This time to, again, try some new things I hadn’t done before. Because we don’t have to rely on per-vertex animation anymore and rather, skeletal animation instead, it seemed fitting that I’d add support and look into blending some of these animations together and essentially modernising them a little. Luckily a lot of the animations used for the Trooper were essentially perfect for this, we’ve got animations for looking up and down for both running, walking and standing, animations for strafing left, right and walking forwards or backwards and well, you get the idea.

This was surprisingly easy and looks pretty great too though there’s a lot more work to do on this (like some additional animations to look left or right). I modified the strafing frame rate just so it matched walking a little better.

Shuffling around; blended walk layered with some blended aim animations.

So now to explain that rifle. I also spent a considerable amount of time trying to export some of the weapons but sadly without much luck, seemingly every single 3DSMax file for this particular model just did not want to open regardless of what I did (I believe it somehow has something to do with the weapons geometry) and instead would just crash immediately upon loading it. So being in a hurry to get some sort of weapon into the hands of the Trooper, I opted to use Milkshake to import the 3d file for the weapon model. Now I should explain that there’s a good reason why I don’t use Milkshake for this; deformation! Milkshake often screws up the scale or even sometimes just the general shape of model it imports in this format which is why I generally don’t use it. Oddly enough this model was also at a slight angle which I believe was intentional so it would correctly sit in the hands of the Trooper which is something I’ll likely be resolving at a later point. Going back to Milkshake, luckily in this case it was one of the models that just gets simply stretched on its Y axis which is easily corrected usually just by subtracting 0.5 from it. Sadly however, translating that into Blender then into Source showed some interesting issues with scaling; I ended up having to open Alliance’s UnrealEd up and placing the Trooper and Sniper Rifle beside each other just to get an idea of the scale before correcting it.

Something else Milkshake seemingly destroyed are the UV assignments for the model. I believe the Sniper Rifle used three separate textures however the only UV map left intact is the one for the handle. I question if I’m willing to put the effort into trying to sort the UVs out or just try to continue developing my own converter for Unreal’s 3D format, in the long term the latter is the better solution though.

Anyway that’s my progress with XCOM Alliance so far. Most of this is up in the new AllianceResources repository on GitHub.