# Figuring out rank requirements

Please take a moment to consider if this thread is worth bumping.

## Recommended Posts

So, another combat system related question. More a math issue than anything.

In my system I record the following information :

Deaths

Kills

Hits taken

I am wanting to use this data to determine someones combat rank. Now, I know I can divide say the kills by the deaths to get a K/D ratio and base my ranking on that. However, I want to include the amount of hits taken as my system has a couple of dodge options to evade damage. Is there a good method I can use to determine a ratio given these three variables and then break up the results to determine what rank someone is.

The ranks in the system are simply E, D, C, B, A, S, SS. However, what I don't want to happen, ratio wise, is someone does their first ever kill and suddenly they gain the SS rank as their combat efficiency could technically be 100% at that point if they did it with no hits taken

##### Share on other sites

Maybe include factors as difficulty in making the hits and dodging the hits based off distance to/from target, the size/speed/power or the artillery used versus defense/agility/luck of the target.

All this creates a score for each attack which repitition math can be done on.

This assumes mostly projectile type combat, but other things can be considered with melee based combat.

##### Share on other sites

is always interesting this problem puzzle

the problem: a person fires one shot, kills one person, takes no bullets and doesn't get killed themselves, then exits the arena

naive math:. 1:1:0:0. A perfect kill and a perfect score

a person fires 10 shots, kills 10 people, takes 5 bullets and doesn't get killed themselves, then exits

naive math: 10:10:0:5.  Not a perfect score but nearly 10 times better in kills than a 1 shot person

there is a number of ways to ameliorate this. I put here a way it can be done

a seeded 1-based method rather than 0-based to avoid division by zero compensation coding:

float ammo   = 0.001;  // amount of ammo I have used. attacks I make
float kills  = 0.001;  // number of targets I killed
float wounds = 0.001;  // number of wounds I received
float deaths = 0.001;  // number of times that I died

increment each as it happens, by some scale factor to account for type of attack. Like killing a target with bare hands might be worth 1.0. Shooting them with a pistol might be 0.8. Fragging with a grenade 0.5. Sniping from range 0.25. Dropping a nuke on them 0.1, etc

then use the formula: (ammo / kills) / (wounds / deaths) * kills

breaking this down:

float BKA = ammo / kills.  Gives average amount of ammo used to kill a target
float WDA = wounds / deaths. Gives average number of wounds inflicted to kill me

float ratio = BKA / WDA;
float points = ratio * kills;

rank for 10 kills is always higher than 1 kill using same attack. Provided that player hasn't been wounded/killed heaps of times or expended zillions of ammo

Player 1: 1 shot 1 kill then
ammo = 1.001;
kills = 1.001;
BKA = 1.001 / 1.001 = 1.0
WDA = 0.001 / 0.001 = 1.0
ratio = 1.0 / 1.0 = 1.0
points = 1.0 * 1.001 = 1.001

Player 2: 100 ammo, 10 kills, 20 wounds, 2 deaths
ammo = 100.001;
kills = 10.001;
wounds = 20.001;
deaths = 2.001;
BKA = 100.001 / 10.001 = 9.9991;
WDA = 20.001 / 2.001 = 9.995502249;
ratio = 9.9991 / 9.995502249 = 1.0036;
points = 1.0036 * 10.001 = 10.0046;

Player 3: 100 ammo, 10 kills, 10 wounds, 2 deaths
ammo = 100.001;
kills = 10.001;
wounds = 10.001;
deaths = 2.001;
BKA = 100.001 / 10.001 = 9.9991;
WDA = 10.001 / 2.001 = 4.998001;
ratio = 9.9991 / 4.998001 = 2.00062;
points = 2.00062 * 10.001 = 20.0082;

Player 3 is 2 times better than Player 2, and 20 times better than Player 1

2 times better because Player 3 took half the number of wounds for the same number of everything else

can adjust the input values as preferred. The basic formula remains the same

with ranking leaderboards then I prefer to see the last X battles fought ranked/listed by points. A player has only one name entry on the board. If they improve their points then moved up

when the board does not have X entries, new players are added to the board until full

each board entry has a datetime stamp

when the board is full and a new person plays then regardless of their points they are added to the board and ranked. The oldest entry by datetime stamp is removed

can have an all-time ranking board as well. Established players will try and get on this board

but what I find is that the last X board is what keeps new people enthused and playing. Seeing their own name on a board even when a neophyte player