1
\$\begingroup\$

I have a game that is about starships shooting each other. Starships have a values that represent initial Health, Armour and Damage degradation

Example 1000, 800, 80% // 1000 HP, 800 Armour, 80 % mitigation 300, 250, 60% // 300 HP, 250 Armour, 60 % mitigation

Note Armour and mitigation are in relation to each other and armour will be lowered on damage, lowering the associated mitigation in the process.

Resolving damage start with a pure damage value, something like 50. I then check the targeted ship for existing damage entries. Depending on that, i reduce the "armour", translate it to a modified mitigation value and mitigate the damage by x%, reducing the armour in the process, so the next hit will encounter less armour, hence less mitigation etc.

example

A virgin ship has 1000/800/60% - hp/armour/% and is hit for an initial 50 damage.

Check the ship, see it has no damage received yet.

Take the damage (50), apply the armour modifier (800 of 800 remains, so 60% mitigation applies).

Split the damage into 40%/60% (hp, armour damage), so 20 of the 50 damage damage the hull, while 30 damage are eaten up by armour - lowering armour, and effective mitigation, for the next hits.

Next hit, 50 damage

Ship has 980/1000 Health, 770/800 armour.

With 800 armour giving 60% mitigation, 760 armour will give 57 % mitigation

50 damage are split into 43%/57% Hull/Armour damage -> 21/29 points.

this continues until a ship has no hull left.

How can i modify this so it becomes more of progressive curve, i.e. initial hits take bigger chunks of armour/mitigation relative to later hits (currently the the first few hits obviously eat more mitigation than later hits, but i want it to be more even more effective at the beginning.

How do i modify my math ? Do i need to add a square/root somewhere ?

\$\endgroup\$
2
\$\begingroup\$

An alternative method which I've used with some success is to apply a percentage of remaining armor as absolute mitigation.

Example:

Mitigation factor: 10%
HP: 1000
Armor: 800
Effective Mitigation: 800 * 10% = 80

Ship is hit for 80 damage, armor is reduced by 80

HP: 1000
Armor: 720
Effective Mitigation: 720 * 10% = 72

Ship is hit for 80 damage, armor is reduced by 72, health is reduced by 8

HP: 992
Armor: 648
Effective Mitigation: 648 * 10% = 65

This has three primary effects:

  • With a sufficiently high mitigation factor, armor is 100% effective at first and will rapidly decline after a certain threshold. This is a decent approximation of what you're asking for with a simple and easy to calculate formula.

  • Damage per hit affects armor penetration. High damage, single shot weapons have an easier time punching through (doing more hull damage and leaving armor mostly intact) while multiple low damage hits mostly degrade armor.

  • In your original system, hull and armor damage are essentially functions of each other (ignoring rounding error), so you might as well have just one health bar. The proposed system allows for hull and armor to degrade somewhat independently, making the distinction mechanically meaningful, while keeping the relation 1 damage = 1 hull = 1 armor intact.

\$\endgroup\$
  • \$\begingroup\$ While the question is some time old, i appreciate the answer. In fact, for some reason, back then i actually went exactly with your proposal except that starting mitigation at full armour value is always 100 %. \$\endgroup\$ – user431806 Aug 29 '19 at 10:32
2
\$\begingroup\$

Of course there is no definite answer on this one. Only different possibilities, endless I would say. Still the question isn't easy to answer. Here are a few ideas that come to my mind, if they play out according to your wishes will only be decidable by you - probably in game.

First possibility: Loosen up on your "mitigation" model. Right now you strictly separate the incoming damage to either go to the armor or the hp value. This gives you a pretty clean mathematical model. But I can find two reasons why a player may expect another behavior from his armor:

  1. It takes less damage when in lesser shape. If my armor is only at half its original strength it somehow only takes less damage from incoming blow, while the health of the hull takes more and more. As a player at this point I may feel betrayed by my protection or feel that this is an inefficient design.

  2. With the damage to the shields declining, so will the mitigation percentage difference. At first the mitigation potential of the armor will drop by 3 for the first three hits, then by 2 for nearly 10 hits and then by 1 for the last 15.

(These numbers and observations are based on the following calculation of your model: Original Mitigation Model)

Still from a game design perspective, I would value the first point a lot more. The second though fits your desire to change the curve.

One radical way to achieve that is to fight the first irritation: Do not reduce the damage to the shields, always subtract the full incoming damage from your armor. That would lead to linear mitigation decline and nearly linear damage increase. The ships then would loose their complete armor quite some time before destruction and would since then receive the full incoming "pure" damage.

To rebalance your ships you might then have to create them with higher initial armor which will make the difference between initial damage protection and final damage protection (0) even greater. (For the calculation of the hits until armor destruction view this image: Linear Mitigation Decrease)


Second possibility: Keep the mitigation concept like you have it (alas: keep dividing the damage between reducing hull or armor), but choose a different formula to calculate mitigation from armor. Right now, the mitigation value is proportional to the armor value, determined by the proportion factor 60/800. Instead there are quite a few possibilities to link these to values. You want a model that starts high and falls steeply. A square function, like you proposed would do that for you.

To test that out I choose one extra point of the curve, say at armor value 600 you only want 30 percent mitigation left, and you got the two points to determine the factors in the quadratic function

Mitigation(Armor) = a * Armor² + b * Armor

For the example given these are the resulting coefficients:

a = 1/8000
b = -1/40

This will give you a model which at the first hit declines the mitigation by 6 percent and then by 4 and then by 3 and then by 2, quickly dropping from 60 percent to 30 in 10 hits. (Details)

This is only one example of an quadratic connection of the two values, you could choose different, even steeper points to determine the coefficients, since I did the calculation by hand I tried to keep it manageable.

If you would like to look at another example altogether for different mathematical solutions I would suggest exponential regress.

I will however not cover this here, hoping with the idea given you could apply the transfer to exponential curves. Be advised that these models would require more mathematical handiwork every time you would want to change the balancing of your game. (And of course the first time you would want to implement it. But for these topics there are a lot of resources out there, like the wikipedia math section or the stackexchange math forum.)

[Side Note: In my (humble) experience simple equations make your balancing job a lot easier and may allow the player a greater understanding of your games mechanics, thus allowing him (and you as tester) a more strategic experience.]


For my third (and final) suggestion I would return to try to find a different algorithm completely rather than a different mathematical solution. By that this suggestion is pretty similar to the first one in concept and in implementation.

Additionally it is really simple, we keep the Mitigation/Armor-Proportionality and the damage divide, but we artificially increase the weakness of the armor. After the damage was divided into hull/armor damage we take the armor damage and multiply it by two. So the first hit takes 20 of our hp and a high 60 of our armor.

By this we keep the original concept, with all mathematical effects: As the armor drops down, the damage the armor draws drops down too and the mitigation decline stagnates. But till then the armor drops down a lot lot faster and the mitigation drops even faster than with the second solution from 60 to 30 in 10 hits until finally calming down at hit 15. (Details)

Like the first concept this third one would call for an increase of your initial armor values (while not necessarily increasing initial mitigation). And of course the factor "2" is one to be tested, higher values increase the dropping rate of mitigation, and therefore steepen the curve.


You will have noticed, that I did not answer the question what you should do, but the question, what you could do. And I hope I did so in your interest. As game designer only you have all the information to decide between the presented options. All of them have different side effects which I tried to outline here and all will have to be paired with different rebalancings of your other values. But I consider all of them a possible solution to your problem and hope you find the same.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.