I haven’t posted recently, but this is not a bad thing. It’s because everything is pretty much as it was last time: I’m still making levels, still haven’t figured out the magical video codec combination to make youtube like my videos, and progress is steady as always.

Latest level in development

Latest level in development

I got some solid feedback from a play tester and have been sharpening my level designs. They’re getting bigger and more difficult, which is good, and I think they’re all still pretty different from one another. I’m up to 17 missions now which is really close to where I want to be.

Balancing everything after the fact is going to be another matter entirely.

So, fear not, gentle reader, DataJack will be out this year. I just need to play a little less Nethack, Dwarf Fortress, and Rollercoaster Tycoon 2, if I can help it.

Buuuuuuuug Fixin’

Before I get wrapped up in the last handful of missions, I needed to make sure the existing ones were more or less ready to go. I replayed them all and they’re pretty much to my satisfaction- there are a handful of things to fix here and there, but nothing show-stopping. This is really good news, because it means the code overhaul went through without a hitch.

invstill can’t figure out how to record, encode and upload video to youtube such that it doesn’t come out looking like crap. This is annoying because I used to have a system that worked, evidenced by my last round of gameplay trailers, but the recent test footage I upped looks terrible. I think it’s mostly the encoding- it’s youtube’s black box processing that screws it up. It’s tricky to get an HD 640×480 video out there.

So basically things are moving along as expected. The game plays better than ever and I’m super excited to get it out. I still want to try a webcast of the dev process, but that will be when I’m ready to start on these last few missions.

Overhaul is complete


A part of a new mission.

I did manage the line-of-sight calculation overhaul on top of everything else, so now there’s dramatically less slowdown in addition to the much smarter A.I. I couldn’t be more pleased with the way it’s turned out.

So I’m back to working on missions pretty much. I would love to get some new gameplay footage but I still haven’t figured that out. Soon, though.
I’m also thinking about trying some sort of live webcast wherein I would demonstrate what goes into making one of these missions.

I also need to do a quick play-through to test for any remaining hiccups that might be left over from the code overhaul.

The AI overhaul has been a big success

The AI testing arena

The AI testing arena

I should have coded the AI this way all along, of course. The new guard AI is such a vast improvement over how it was before, and they now behave much like you think they should. This changes the difficulty of the existing levels for the better and puts to rest a long-standing reservation I had about this game.

I got around the lack of full pathfinding by having guards intelligently navigate around obstacles of arbitrary sizes… It essentially hinges on the fact that if you’re in a maze, taking every right hand turn you come across will eventually get you out.

Of course, switching code in mid-stream is not easy with MMF2. I’ve experimentally transitioned to the new AI code in a few previous missions and it all seems to work out fine.

The process of doing this has also made me consider touching up the line-of-sight calculation that all the AIs use. As it stands, it’s a very complex calculation that uses the same code as my bullets. It’s much more computationally intensive than it needs to be, and if I can pull off the refactoring I have in mind, it will dramatically improve framerates.


Another level down, AI overhaul project begins

Having completed the structure of my latest level (a three-part open-air complex design) I’m ready to really sit down and think hard about the A.I. This has probably been the most difficult part of designing this game due to the constraints of my tools and the requirement that it should not significantly slow down the runtime which is already pushing the limits of multimedia fusion.

I recently uncovered this early design document sketching out the run cycle for the cyborg guards

I recently uncovered this early design document sketching out the run cycle for the cyborg guards

I handle collisions and interactions with the environment via a 256-color 640×480 bitmap wherein different colors signify different types of terrain: windows, walls, half-height walls, etc. This works quite well for testing if a character is running into a wall or off a cliff, but the A.I. will need to sort of generalize outward and reason about the global structure of the map to some extent. Sampling colors at various points seems insufficient.

It would be pretty easy to write this sort of A.I. if the levels were all open fields. It’s when the guard hears the player on the other side of a wall, or sees him duck around a corner that things get a little tricky. Some sort of pathfinding is indicated here, but I can’t do full-blown pathfinding without grinding the engine to a halt. A reasonable approximation is needed.

The A.I. as it stands right now is servicable– it will run after you, shoots at you and will mostly behave as expected- but it isn’t smart enough. It’ll work itself into corners or sometimes fail to notice the player in situations where it should be quite able. Part of this comes from the final stages of tweaking variables like footstep and gunshot noises or shadow visibilities, which I intend to get to during this overhaul.

Work Continues!


A page from the project notebook

A page from the project notebook

The intensity of the holidays and my qualifying exams has passed, and I’ve resumed working on DataJack again in earnest. Only two main things remain to be done:

1. Completing the rest of the missions (about five to go)

2. Balancing the mission rewards and item costs

There are a few minor things here and there that I’m tweaking, like flavor text, some graphical updates, fleshing out the world, etc. I’m also starting to think that a guard A.I. overhaul / updating needs to be done. This could be somewhat of a pain but I think it’d be worth it. Bad A.I. could drag the whole project down, and I hate for that to happen after all this work.

After various updates to the software and talking with the Multimedia Fusion devs, I found the hardware-accelerated display modes have matured quite a bit and I’ve switched DataJack over to full Direct3D 9 with incredible improvements in framerate. This is also now why I think I have some breathing room to make the A.I. a little smarter.

I hope to update more frequently as I push for the finish line here. When it’s ready, DataJack will be published on Desura. Stay tuned!

Using Analytics For Balance

When designing an open-ended game such as DataJack, balance can become an issue. You want to allow the player to make meaningful choices without overly favoring one play style or weapon. This means fine-tuning not only the level designs but their rewards, as well as the host of statistics that define the weapons, items and upgrades.

I’ve been playing around with a spreadsheet to track the stats of each weapon before and after their full upgrades. Hopefully this will prevent any one weapon from being the obvious best choice. Using and visualizing this data effectively can be a challenge, but it’s a lot more objective than my previous method of “rough counting in my head.”

In particular, it seems a good idea to look out for major outliers in any particular stat. Some weapons, such as the railgun, are themselves outliers: the railgun holds only two shots, has the longest delay between shots, but can shoot through most of the basic walls in the game and still deal incredible damage.

Of course, some weapons or mods can make a particular weapon configuration far better in one category than its peers, which isn’t a problem as long as this benefit is offset by a steep cost. This needs to be considered in light of the player’s progression, and how plentiful cash will be in the early versus the late game. The cash flow in turn is controlled by mission progression, which is nonlinear and branching.

Altogether this makes balance a challenge to say the least, even without considering level difficulty, and it’s probably impossible to get it just right. Nevertheless, even an imperfectly balanced game can still be fun.

Work is continuing on making the missions, and I have a full plan written up for the remaining set. I will fall short of my planned 30 missions, but this will allow me to release the game sooner.


Stealth Gameplay

The initial teaser I posted showed off the action and shooting parts of DataJack, but left some wanting a demonstration of the stealthier aspects of the game. To that end, I’ve put together another quick gameplay vid:

Here you can see the player hacking, using the networks, disabling cameras and robots, hiding under desks, etc. This isn’t a complete demonstration but does give a sense of the more slower-paced parts of the game. But when the alarms go off and the shit hits the fan, you will need to prepare for some intense combat…