Combating Mediocrity

The Combat system in Thief is designed from the ground up to be simple. Mostly since I’m not that good of a programmer, and further justified because the main focus of the game is supposed to be the platforming. Of course, the next game in the docket of my brain (codename Knight) is all about combat – so it’s not that I’m afraid of it. The combat is the way it is to break up the gameplay a little and add some variety.

The key to it was always a system I referred to as “Variable Animations.” Basically, the combat timing is all canned, a system that I worked out and documented somewhere lower in the diary. Since the timing is all set up, the animations become secondary and can be made variable. So, instead of just one “attack” animation, there can be half a dozen. Along with 5 high blocks, 5 low blocks and lots of other variations. Basically, the underlying system is designed to be simple, but look really slick.

The issue with this is that, although it may look very slick, the gameplay is the bit the player is actually playing. So, it was posited that the combat could be upgraded a little bit. I initially thought the idea wasn’t “right” so I thought about other stuff. The reasoning was:

A) The enemy AI is pretty stupid. I mean, they function, but asking them to do more than that will only serve to confuse and annoy.

B) It’s still a secondary feature.

Even still, when I got to thinking about it, the combat could be upgraded within the confines of the current system. So no, not throw out the current system (which I am quite fond of), but instead make it better.

So here’s what I thought of – different Enemy attacks and a rebalanced Deflect mechanic. First, the Enemies. Since having the enemy AI react to the player is quite difficult, I think it would be easier to implement more things for the player to react to. But wait, didn’t I already rip out the third flavour of dodge way back in the day? Well, yes I did, but this is different. Now, while an enemy will still have high and low attacks, some of those attacks will have “Stun” and “Throw” properties. So an attack may also stun the player or begin the “Throw” minigame.

Stunning for example. When the AI figures out the enemy attacks, there will be a random chance that the attack will be a Stun Attack. If this attack hits, it will deal damage and stun the player. If this happens and the enemy still has attacks available the next attack will automatically be a longer duration Super Attack or something similar. So the Fencers may flourish or the Knights may do a spinning wind up attack or the bosses may have a longer, more elaborate swing with a flip or something. While this is going on, the player will mash the keys and generally try to “wake up.” If they fail, the big attack will hit and do considerable damage. If they wake up, then they will still have to press the correct dodge or else take some pain also. Basically, the system is designed to require additional input other than Up and Down while in combat.
The second part of that is a more elaborate Throw. Right now, the Throw is built in there so the enemies and the player do not overlap while fighting. So there is a quick “move away” animation. Instead, I think that the enemy should grab the player and start a different mini-game wherein the enemy punches or jumps on or generally causes minor injury to The Thief. While this is going on, the player will push left and right in an attempt to break free. This will also be available from an attack of the enemy.
So, with there is, I think the combat will be a little more interesting – unless you’re good – at which point you’ll just dodge well enough to never even see a throw or stun attack. In that case I’ve decided to modify the Deflect code to make it easier to use and quicker to see. So it’ll need a bigger flash and a bigger window.
For both of these, I need to build a prototype of course. I mean, they work really well in my head, but in the head and on the screen are very different things I find.

Leave a Reply

Your email address will not be published. Required fields are marked *