What is combat? What is a combat engine?
I suppose (because I’m really just guessing) a combat engine for a game is anything from a turn based system all the way to a high accuracy physics engine with projectiles colliding with physic bodies. With Failed State’s game world being merely a 2.5D environment where terrain is flat and the height of buildings is contrived, it makes little sense to try and perform accurate projectile physics.
In fact, there may be no point in having bullets fly around that map. The infantry of the original Command and Conquer series did this quite well, whereby the infantry would be doing all this shooting and with an animated sprite to show it and another animated sprite to show kicks of dirt around their target.
That and health bars which I don’t intend to use.
That being said, C&C did use projectiles for their tanks and missiles yet even then, they weren’t there to perform high accuracy point to collision mesh collision detection; there’s a good chance it was known in advance if there was going to be a hit or not.
Level of accuracy
Failed State only requires a certain level of combat accuracy to be exposed to the player. Although seeing individual bullets might not be required, there is something to be said of seeing missiles with vapour trails. This video of M1A1 Abrams tanks doing live fire exercises clearly show projectiles in motion and it would be a shame to not see some of those in the game world.
I am definitely going to try and pull some audio from that video for sound effects.
But even if there are projectiles along a 2D plane, they needn’t “hit” anything; not in a physics sense at least. The system I’m interested in making involves the idea that something shoots at something else and that there is a chance of hitting the target. You could say I want to conduct a dice roll in realtime.
Here’s a really basic example…
One soldier fires on an opponent soldier. Either the target is hit or it is not. Now, what are the chances of the hit occurring? What affects the likelihood of hitting the target?
- The skill of the shooter
- Dumb luck
Let’s expand upon this. The skill of the shooter alone is not enough to determine if a target will be hit. Here are things that could make the shot more difficult.
- The target could be moving.
- The target could be far away.
- The target could be behind cover, partially or fully obscuring them.
- The cover could be of various strengths. A bullet might pass through wood but not steel.
There’s a possibility of lots of shooting and not much hitting, especially considering modern combat tactics. Suppressive fire (and modern weapons) use a lot of ammo. What will make Failed State interesting is if these modern combat strategies can be realised. Suppressive machine gun fire or artillery can make a target ineffective (they can’t move, shoot back or even see their opponent approaching their position). Different weapons would create differing amounts of suppression. Implementing such a system would bring some strategic elements to the game because when suppressed, a unit’s awareness of their surroundings is compromised. They may also take time to become effective again as the shock of being shelled diminishes. A unit with high moral and/or experience would recover quicker than a ‘green’ unit.
By taking the above into account, a rudimentary combat system can be constructed.
Let’s say there is a valid target.
- Every 5 seconds the soldier takes a shot at the target
- Typically this soldier has a hit ratio based on some non linear relationship with distance (and skill), i.e. when really close they’re more likely to hit but when further away, they’re more likely to miss.
- Assuming this curve exists, let’s say that the soldier has a 50% chance of hitting
- …but the target is behind cover, reducing the chance of hitting to 20%
- Also, the soldier is in turn under fire, reducing their effectiveness and thus reducing their chance of hitting to 5%.
- So the soldier mathematically needs about 20 shots to hit the target which would equate to about 100 seconds of shooting before their target is hit.
But then there are other considerations. What if the soldier doing the shooting is part of a squad? Surely a squad would be more efficient at eliminating a target than a lone (non sniper) soldier that is isolated?
As much as I want to avoid it, projectiles are important. They take time to reach a target. It would be a strange sight in a game to see one unit fire at another and the target to get hit immediately. It would look like there was a disruption in the time-space continuum.
When dealing with straight line or artillery projectiles, the time for a projectile to reach a target can be calculated in advance; all the visuals are just cosmetic. Yet despite there being no need for collision detection because the start and end points of the projectile are known, this does complicate the timing of the combat engine. Unit A could fire at unit B while the projectile of Unit B is already in flight.
It’s as if the game is turn based but where each turn is 0.01 seconds long.
Attack step and damage resolution
Thankfully the attacking step and the resolving-of-damage step are independent of each other.
- How good a shot are the units? Are the weapons accurate?
- What type of weapon? Small arms or a tank shell?
- Are they currently under fire (suppressed)?
Damage resolution modifiers (NB: it takes distance / velocity of the projectile before this can be resolved)
- Moving (will probably affect cover)
- Armoured? Infantry with kevlar or tanks with steel all have an affect
- Do they generally suck at keeping their head down (skill/experience level)
- Are they being shot at from all sides? This is probably part of the suppression.
Note that suppression probably only affects a unit’s ability to see and shoot back rather than a likelihood of being hit.
First draft complete
And with that brain dump to a blog post, all my initial thoughts for a combat engine have been collated. There’s a good chance that many of these ideas will ultimately be flawed and will have to be modified but one has to start somewhere.