Missions and Snake-y Movement – Chaintanks Devblog 4

I’ve been making steady progress on Chaintanks since finishing the paper prototype a few weeks ago. It’s nowhere near complete yet, but I’ve made a lot of improvements to the game and implemented the first version of the mission system!

Missions are in!.. Sort of

The first thing I worked on after the paper prototype was the mission system. I had it more or less up and running in a few days and was able to test it out. At the moment it honestly doesn’t feel great. The paper prototype had me making a lot of interesting choices, but when I play what is essentially the same game of Chaintanks over and over between each choice it becomes a lot less interesting.

What I’ll need to do is create small custom areas for each mission. They don’t need to be hugely different from one another; a pallette swap on the ground, a few static structures, and maybe a reskin of the enemy units should be enough to make each mission feel unique. This will mean doing even more art, but I’m starting to think I may need to redo what I have anyway.

A screenshot of tiny sprites
It’s impossible to make out any of the details on these sprites. They could be half the resolution and nobody would know!

When the game gets into the later stages and you have a really long chain, the camera pulls back so you can see the whole thing more easily. That’s been in there since the first Ludum Dare version of the game, but I’ve recently made the camera follow the cursor as well to make better use of the screen space available.

The problem with this is that everything is tiny! All of the fine details I put into these sprites are lost. Even at the very beginning of the game with only a few vehicles in your chain and the camera in close the sprites don’t look great. If I did lower resolution sprites I could draw them more quickly and produce more enemy skins.

From a gameplay perspective, the only information the player needs to know is where a vehicle is and if it is a friend or foe. I may want to rework my art style to better suit the way the game actually plays.

There is of course the argument that I should just finish the damn game already! This will be my first finished game other than what I’ve made for game jams, and it doesn’t need to be perfect. Once I’ve more or less finished all the work on the gameplay I’ll evaluate whether or not I should take the time to redo the art.

New Moves!

I’ve rewritten the movement code and the game feels much better to play because of it! Previously, each vehicle in the chain was represented as a Unity physics object linked together with all of the other pieces by hinge joints. The problem with that is that the forces on the joint connected to the player’s lead vehicle were too much since I was manually turning it. If you tried to turn too sharply, you’d overextend the joint and get your chain all twisted up. It looked terrible, and if you stopped you could watch the joints slowly untwist themselves. It was completely broken and had to be replaced.

My solution was to have each vehicle remember a trail of points behind itself as it moved. If it had a child vehicle, that vehicle would use those points to place itself a fixed distance behind it’s parent and face in the correct direction.

A chaintank all twisted up
This wasn’t possible with the old movement system.

Chaintanks has more or less always borrowed it’s movement from Snake, but with the new code it’s much closer. You can make twists and turns and all of your tail vehicles will slowly trace out the same path.

I had to stop using Unity’s physics to make this work, which caused a new problem: you could now pass straight through your own chain or enemy chains. The solution to this was very simple – collision damage!

Demonstrating collisions
Smashing my way through a small enemy chain.

When vehicles collide they deal damage to one another based on their own upgrade tier, so bigger vehicles hurt more to run into! This doesn’t just prevent movement from feeling floaty and unrealistic, it adds a new layer of strategy. Smashing into the rear of an enemy chain can sever a bunch of the weaker vehicles in the back without doing too much damage to you. You’ll have to watch out though as enemies seem to do the same thing to you! While I’d love to say I’d added that into the AI, it’s actually a case of it not being able to avoid smashing itself into you in time. It works though, so I’ll keep it!

Balanced? Nope!

One of the biggest problems at the moment is balance. I’ve found quite a few separate issues during the brief tests I’ve had so far.

The first is that the game goes too quickly. By the end of the first mission you can have a pretty huge chain. I need to reduce the upgrade rate, probably by making upgrades cost around three scrap rather than one.

Overpowered enemies

The game is also brutally difficult at the moment! Enemies spawn far too quickly and can quickly overwhelm you while you slowly shed chunks of your chain trying to keep up. I probably need to buff healing a little bit in the late game and adjust the spawn rate.

Balancing the game so far has been very informal so far. I’ve been writing down whatever I happen notice that feels unbalanced and making quick fixes later on. This can’t work long term, however. I’ll need to spend some time just playing and balancing the game once the mechanics are more fleshed out.

This is Taking Forever!

When I wrote about my plan to go indie, I’d hoped to be making a game every two or three months. That was clearly more than a little bit of an underestimate! I’ve been working on Chaintanks for about three months now (two and a half if you take out the Christmas break) and it’s still a ways off. I don’t have a lot of features left to do, but even still, the last thing I want is for this to become another Alpha Strike.

I have a solid list of tasks at the moment, but it’s not complete. If I haven’t made significant progress in the next month I may need to start making more rigid milestones so I can actually know when I’ll finally finish this thing.

That said, this isn’t a full time job! There’s no need for me to be stressed out if this takes longer than I expected. Even still though, I’d like to be able to set a goal like ‘finish two games this year’ rather than work on the same game forever… again!

Leave a Reply