I built a little prototype last night in a couple hours. Here's the results.
So, as hinted at prior, I have been dividing my time between Game Maker and Unreal Engine 4. While the former mostly being prototyping until I get comfortable enough with the tools to sit down and get a basic project out; the latter is more to expand my VFX knowledge, specifically. So, without further ado: some screenshots of the VFX work.
Within the core principles of the Backfire design document, the Backfire project was to live off of many of the ideas presented in our biggest influence: Interstate '76. Balance was to be found directly from players customizing their cars, which all had a base stat line and limitations would only be based on a a weight limit stat and the amount of hard points on each vehicle. The hope was to have that system, a location specific damage system more akin to Mechwarrior, and have a simulation and physics driven driving model, to then have a easily recognizable and understandable system for players to pick up and know where they are useful and what tactics will work in their favor or not.
In theory, it was a sound idea: game exploits of the games we were inspired by would be non-issues: we didn't have a Gauss rifle that could shoot further than what could be rendered on screen, and our 'leg damage' equivalent of having a tire shot only affected mobility and didn't take the player out of the game. To add to that, our aiming system was assisted and had no direct precision fire, leading to most tire hits to either be good angling by the player and using level geometry to their advantage. While we never did implement a way to fully customize the vehicles in our final pre-alpha build, we did have a multitude of test loadouts to try these different tactics and see how the driving model handled the weight differences.
Another pillar for the project was to have destructible parts for the vehicles, both to act as a balancing factor for those who wanted to have a large collection of guns on wheels, as well as an easy reference to player state mid-game without the need of health bars or other game staples we wanted to avoid and to allow for more tactics for the player to take advantage of. I distinctly remember one meeting where we had brought up how difficult it would be to play has a car with a speed focus: you would be the most vulnerable on the team, and would have the least fire power. How could you be useful? We then discussed how a fast player could be more focused on taking out previously damaged areas, such as doors or the windshield, generally leading to the killing blow. While this concept remained at the top of the priority list for the whole of the project, we never were able to take the time to implement it and test it.
Ultimately there was some good design forethought on the project in the way of balance and interesting decisions for the player, with some of these concepts coming out in more recent releases such as Mechwarrior Online. (with the change to leg-damage) However, without all of these systems in place, it will be truly hard to know just how well it would have worked beyond what we had on paper, and the number crunching he had done to prototype it outside of the engine.
This is a project that I worked on for a good 3 years with the Gauge Entertainment team. I had joined them back in late 2009, and prior to that they had already put about a year worth of work into the game between original seven members. In that time, they were able to get something playable with some very basic elements implemented. It wasn't pretty, but it worked. I'm not going to take too much time going through team dynamics; this is going to focus all on what went right and wrong with Backfire and how it has shaped my career.
As you may have read in the old post below this one, my early days at Gauge was interesting for me a the time: it was my first foray into working with a proper team, working on an engine I had really just scratched the surface with. It was a time where I had to learn quick to be any use, and learn quick I did. However, how that ended up helping the project is arguable, with several factors at play. This ended up being a lesson in endurance, ego, and when to restrict features. This blog has many times stressed a major reality of game development: understanding what feature creep is, and executing self restraint in your design. This is crucial if you ever want a proper finished project, which this project never was, even after a total of 4 years in part-time development. That doesn't mean there wasn't a lot learned, and a lot to be proud of, however.
Backfire itself was built to be a response to the lack of car combat games at the time. it was 2008, the whole indie game revolution on Xbox Live had really started to grow just a year ago, and the boom of car combat games like Twisted Metal and Interstate '76 had calmed and dissipated as the 90's had. The project itself was to not only hearken to those days and influences while modernizing them. We wanted a more physics driven and simulation-based driving model, destructible vehicles instead of a life-bar, and a fully customizable load-out system for each vehicle. It was a project much larger than we were, though we didn't see it at the time. We had something playable, after all, and that alone kept us driven to keep working on the project.
In that time I learned the tools of the trade to create a texture for a minigun weapon that had previously been modeled, figuring out good practices for making the diffuse, and then generating the normals and specular maps through tools like Crazy Bump. It took much longer than I had hoped, largely because I was young and foolhardy so I ran headfirst into the tools without really looking for help. This ended up causing the texture to take much too long, and had several very simple rookie mistakes such as not taking into account how rust would realistically set, and incorrectly using the generated textures from Filter Forge. That said, it did give me a good insight as to what it took to make a texture and much respect for modelers and the act of creating a UV map.
From that point forward, I worked more with what I knew best: code and Flash. As such, I turned into the UI designer of sorts, working with Actionscript 2 files and Unreal Script to make developer interfaces. Sadly, it was never anything more than development tools simply because we didn't have someone who could dedicate some time to the art I would need, nor were we in a place to worry much about interface beyond these few tools and some basic player information. As such, I tried to help where I could directly on coding and testing nights.
I very quickly found that I was more useful to the team in this sort of role. Using what I knew of the code, testing the limits of what had been implemented led to a lot of bugs being squashed, and lots of issues with the level that had already been designed and built before I had joined. This was also the time that a lot of the pace of the project slowed. We already had a pretty rough schedule as-is, with maybe two nights a week in which the coders would work together for maybe four hours at a time, if that. This caused the production schedule to get out of hand rapidly. To add to this, Gauge as a whole was also in the process of building an office space, leading much of the needed hours for the game to go towards drywalling. The project had gotten too large, and the time available had become too little for us to continue on the project, and shortly after we showed a build we had at a local GameCamp meetup, we had to reassess the project and shelf what had become a near half-decade worth of work for many of the team.
What went Right:
-Hitting on all aspects that could be where my specialization lie. I had no idea where I would excel, but it is so very important starting out.
-Consistent art style that ended up making it look pretty darn good, everything considered
-Consistent design, we kept true to the simulation feeling driving with a more modern feeling when it came to the shooting.
-Getting a playable project up and running right away was a strong suite, considering the tiny bit of time that was available per week and the size of the team.
-Persistence. Projects can take time, and being able to come back to it time and time again is very much a needed factor, and this whole team had that...
What went Wrong:
-...To a fault. There was a lack of self reflection on our own limitations. Taking the scope and available time though the looking glass should have been prioritized. much sooner, and maybe we'd have a success story of a project.
-The team lacked dedication to the project this large in order to complete it.
-We could have just used someone's basement (garages get cold up here in the North) instead of dedicating so many resources to an office that we didn't end up using anyway.
Over the weekend I participated in Edmonton’s first foray into the Global Game Jam which is a gathering of game developers, artists and sound and music engineers in an attempt to create a game from conception to completion in the span of roughly 48 hours. Needless to say, it’s a hell of a weekend from start to finish as you desperately try to get that last piece of art or that important line of code into the final project. I want to go through the process of the project myself and my group, some of the people from Gauge Entertainment, went through.
Sparing the trivial details of actually getting to the event and first impressions, I went with the guys at Gauge with their game idea. They wanted to make a game that I can best describe as the flash game Toss the Turtle but with a high-tech sniper round, a 3rd person camera, and a final target, which seemed simple enough to at least get something going come Sunday. Now, of course, that ‘something’ would likely turn into just a proof of concept as we opted for a 3D engine for the 3rd person camera as we just did not have enough time to do much more.
Now in out rush to get things started and going we didn’t quite do something that we all realized in hindsight: we never prototyped and as such we dove right into making assets. While that worked out to some degree with our project leader and his modeled bullet with appropriate particle effects, it didn’t quite work out for myself and my quick and dirty materials. Had we aimed at creating the prototype from the beginning I feel we could have coordinated better and ended up with something a bit more representative of the target idea. That said, our final proof wasn’t all bad.
In the end our programmers were able to allow the camera to follow the projectile as it should and give control to the player after firing it. This at least gave a rough outline of how we wanted the game to control and how to build levels according to the variables put in place. Now I can only hope that we continue the project, there’s much we can do to make this a true game.
A quick project of mine: I took some very basic geometry from Blender, baked some lightmaps in pureLIGHT then brought all of that over to the UDK to see how it would all work out. The level concept consisted of a very simple maze-like level that would be able to fit two players just nice, while demonstrating that you don’t just have Lightmass at your disposal if you want pre-calculated lighting.
The maps turned out just nice and showcased what pureLIGHT was capable of, while also demonstrating just how easy it is to implement a sort of middleware like this.
Anyway, on to the level!
All the meshes of the level where very basic exports from Blender, which was one of the harder things to get going as I eventually needed to just ask the pureLIGHT guys for a proper export script as none I found did the trick. Once that was said and done, the momentum with the project grew tenfold. With everything in pureLIGHT, it was as simple as telling it to bake, as the materials from my lights had saved and pureLIGHT imports the x,y and z from all meshes so fiddling with positioning shouldn’t be required.
Once processed, pureLIGHT dumps all of the final mesh and map data into ASE and TGA files that can be easily brought into just about anything, be it a game engine like UDK or 3D software like 3ds Max. The best part is pureLIGHT does all the custom UV work, meaning once it’s imported you just drag and drop the texture/material onto the outputted mesh and you map is applied perfectly onto it.
From here on out, it was as simple as placing and scaling all of the meshes and a few dynamic lights to get the end result. I do have to give thanks to Andrew Czarnietzki, he explained to me how to disable much of the UDK’s Simple collision that was wreaking havoc on my meshes. I found out soon after, however, that there must have been something that Unreal didn’t like about my meshes, as every time a bot or I moved while on per-poly collision, we both rose and fell. In the end I was able to add a BlockingVolume to even things out, but in the future collision meshes may be the way to go, even with this very simple geometry. I’ve noted that the next time through it would likely be better to export per mesh instead of per group of mesh, just to avoid some of this strangeness.
What I did right:
- Went to the resources available to me. The script I got directly from the guys at pureLIGHT Technologies worked exactly as I wanted it too.
- Had a clear plan from the beginning and executed it.
- Doing the project at all. Had I decided to bring this into something else mid project, it likely would have stalled everything.
What I did wrong:
- Very rough meshes, making for some light bleed and extra unnecessary polys.
- Lightmap resolution not fully optimized.
- No collision meshes.
What I will do in the future:
Outside of adding the collision and making things a bit more optimized, I plan to move on from Blender and work toward adding proper materials and details into similar levels.
While elements of textures haven’t been a totally new to me; I’ve put some heavy hours into Photoshop over the years. That said, there’s always been concepts that I could not figure out with other engines. A while back I tried my hand at Unity and while importing base textures to it was a breeze, figuring out how to apply basic bump mapping seemed very out there for one who had just picked up the software and was just now trying to figure out C#. Moving from that to the UDK, especially with Materials taking president over base textures, was worlds better.Materials helped me figure out what I was doing, what I can do and, best of all, how easy it is to get proper texture, detail and specular within the game engine.
This screenshot is of a material I’ve been working on for that second UDK level I showed some screenshots of. The focus was to take a previously created texture (in this case, it was the base of the M_PoolDirt_02_Opt material) and revamp it to match a very wet and well trodden piece of mud. Through both my own tinkering and some help from the gracious 3DBuzz, I was able to reach the target as well as grasp how to implement future materials, all within an afternoon. Compare that to what I ended up doing with Unity: Googling, finding someone who coded a solution and then having to backtrack through someones very very ugly script.
I will keep playing around with the editor, and hopefully I’ll have some more to show of it in the near future.
From the beginning, I had actually planned for a simple concept level (yet expansive in scope, once I sat down and went through it all) that would push what I knew about the toolset, though keeping those lessons simple. Little did I know that a lot of those simple ideas were far far beyond what I would ever be able to figure out on my own. Yet, I plugged away at it endlessly until I hit points that I just could not figure out: “Why is the lighting shifting when I add this pointlight here, but not here?!”, “How come this wall is transparent from this side, but not the other?!”(Normals where a new thing to me), “Why is it giving me errors when I try to spawn a bot?!”, the list goes on.
It was around this point that I decided to scrap the whole initial plan entirely, I needed to do something I understood right out of the gate, while keeping the learning end of it as simple as possible. What turned out was the 0.1 version of the level you currently see in the YouTube video I’ve posted. To put it simply, just about everything that is in the current version was in the 0.1, with some simple changes such as no proper grass material, no “god rays”, ect.
Now, as I moved on with the level, trying to implement some changes to make things much more believable became quite the problem. I hadn’t learned how to properly plan development, and as such the stability of my level fell through the floor; whenever I tried to add a new terrain material, change some figures in the lighting or an other major change, everything would crash. After a few days of trying and trying again only to have the same issue come up, it became clear I’d have to start over again. As such, I noted the locations and set-up of every mesh and terrain and started over from scratch.
It was around this time that I came across the 3DBuzz tutorials, these things would quickly teach me concepts that I never would have figured out on my own, as well as some strong development fundamentals, such as ordering what elements should be focused on first, which led to my final version.
To wrap it up, the learning experience with this project was very similar to the RedKnight: design within your own knowledge, know when something may be out of reach or beyond your skill level. And if you want to go that extra distance, take advantage of the resources before you dive head-first into the unknown. Should you feel you are unsure of your own skills, do as I just mentioned and take advantage of the resources you can and see how your knowledge compares to what they have to offer. Having this mindset from the get-go will save you a lot of wasted time and frustration.
What I did right
- Start development with what I knew, to keep the scope in focus.
- Taking advantage of the resources available to me. I can’t stress enough how much those tutorials helped me.
- Restarting from scratch. Though I ended up having to restart one too many times, I was still able to get something out of it in a reasonable amount of time.
What I did wrong
- Not tapping into the previously mentioned resources soon enough. Look up this info as soon as it comes into question, it’ll save tonnes of time.
- Not enough pre-planning. Much of the final level design I came up with as I went and found where my limitations are as a junior developer. This may have worked here, but it sure as hell will not for any future projects.
- Distractions. Since this was my first proper project I was jumping all over the place, deciding suddenly that I wanted this material here, that mesh there, and it made a jumble out of m development cycle, slowing it down considerably.