So, this may explain why the auto balancer is awful. This is the power (energy) function it uses. Lets choose two example players Sir_TryHard_CarriesAlot and ArcherWith300Ping.
Its a 30 on 30. Sir_TryHard_CarriesAlot is on blue, and is an old school two-handed hero. He started the match of well, hitting the enemy murderball (massed infantry) like a tidal wave, killing 7 people while taking little damage. ArcherWith300Ping is a strength crutcher with a long bow. He hasn't had a good round so far, hasn't had a clear shot. So he says fuck it, and starts lobbing arrows into the melee at head height from a mile away.
Sir_TryHard_CarriesAlot is on a roll. He going to set a personal record this match. Sir_TryHard turns to fight the next enemy, and suddenly an arrow sprouts from his head. He goes down.
Lets take a look at how our two players did round 1.
P1 Sir_TryHard_CarriesAlot
Level: 30
Overall K/D from all matched: 10:1
Round 1 kills: 7 ( Had a bad round)
Round 1 Deaths: 1
Round 1 Points: 40
On Losing team(Re: Bad round)
P1 ArcherWith300Ping
Level: 31
Overall K/D from all matches: 1:4
Round 1 kills :0
Round 1 Deaths:0
Round 1 Points: 3
On winning team
Some boilerplate:
(store_script_param, ":player_no", 1),
(try_begin),
(store_add, ":troop_no", "trp_player0_multiplayer", ":player_no"),
(troop_get_slot, ":level", ":troop_no", slot_troop_crpg_level),
(gt, ":level", 0),
(val_add, ":level", 5), #add 4 levels to everyone so every player counts higher
(try_begin),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_rabbit),
(val_add, ":level", 25), #in rabbit, people by itself count more
(try_end),
Ok, so we have our new levels. Also, wtf is rabbit?
Sir_TryHard_CarriesAlot Level: 35
ArcherWith300Ping Level: 36
(player_get_score, ":kill_count", ":player_no"),
(player_get_death_count, ":death_count", ":player_no"), #get_death_count
So we've got our kill count.... wait... player_get_score?
P1 Sir_TryHard_CarriesAlot
Level: 35
kill_count: 40
deaths: 1
P2 ArcherWith300Ping
Level: 36
kill_count:10
deaths: 0
(val_div, ":kill_count", 10),
(val_sub, ":kill_count", ":death_count"),
(val_mul, ":kill_count", 3),
Well, at lease Sir_TryHard is still in the lead. He did such a good job.
P1 Sir_TryHard_CarriesAlot
Level: 35
kill_count: 9
deaths: 1
P2 ArcherWith300Ping
Level: 36
kill_count:3
deaths: 0
(store_mul, ":player_score_plus_death", ":level", 10),
(val_add, ":player_score_plus_death", ":kill_count"),
And ArcherWith300Ping takes the lead!
P1 Sir_TryHard_CarriesAlot
Level: 35
player_score_plus_death: 359
P2 ArcherWith300Ping
Level: 36
player_score_plus_death:363
(set_fixed_point_multiplier, 10000),
So I *think* this is going to multiply any number we convert to fixed point by 10000 and divide everything converted by the same. However, I'm going to assume I'm wrong, and was put in to fix a bug with fixed point numbers or something.
(troop_get_slot, ":kd", ":troop_no", slot_troop_crpg_kd_ratio),
Yes! Go Sir_TryHard!
P1 Sir_TryHard_CarriesAlot
Level: 35
player_score_plus_death: 359
P2 ArcherWith300Ping
Level: 36
player_score_plus_death:363
(val_div, ":kd", 100),
(val_add, ":player_score_plus_death", ":kd"),
(val_max, ":player_score_plus_death", 0),
....
Maybe its stored its stored as 100x? Game doesn't seem to like fixed point numbers. Lets say it is.
Yeah... Go Sir_TryHard!
P1 Sir_TryHard_CarriesAlot
Level: 35
player_score_plus_death: 369
P2 ArcherWith300Ping
Level: 36
player_score_plus_death:363
(assign, ":power", 1),
(convert_to_fixed_point, ":player_score_plus_death"),
(convert_to_fixed_point, ":power"),
(val_mul, ":power", 11),
(val_div, ":power", 10),
(store_pow, ":tmp", ":player_score_plus_death", ":power"),
(assign, ":player_score_plus_death", ":tmp"),
(convert_from_fixed_point, ":player_score_plus_death"),
(assign, reg0, ":player_score_plus_death"), #What the function will return
Ok... So lets assume what I said earlier about that multiplier is true. So Sir_TryHard increases his lead! Looks like I was wrong. Looks like the balancer will rank Sir_TryHard as he deserves. Although I was expecting him to end up more than 1% better...
P1 Sir_TryHard_CarriesAlot
reg0: 666
P2 ArcherWith300Ping
reg0:654
(try_begin),
(player_get_team_no, ":team", ":player_no"),
(is_between, ":team", 0, 2),
(team_get_score, ":this_team_score", ":team"),
Wait, what? Whats going on?
P1 Sir_TryHard_CarriesAlot
reg0: 666
this_team_score:0
P2 ArcherWith300Ping
reg0:654
this_team_score:1
(store_sub, ":enemy_team", ":team", 1),
(val_abs, ":enemy_team"),
(team_get_score, ":enemy_team_score", ":team"),
Maybe this will be the boost Sir_TryHard deserves...
P1 Sir_TryHard_CarriesAlot
player_score_plus_death: 666
this_team_score:0
enemy_team_score:1
P2 ArcherWith300Ping
player_score_plus_death:654
this_team_score:1
enemy_team_score:0
(val_sub, ":this_team_score", ":enemy_team_score"),
(lt, ":this_team_score", 0),
Or not....
P1 Sir_TryHard_CarriesAlot
player_score_plus_death: 666
this_team_score:-1
P2 ArcherWith300Ping
player_score_plus_death:654
this_team_score:1
(val_mul, ":this_team_score", 30),
(val_add, reg0, ":this_team_score"),
And ArcherWith300Ping is now more useful (According to the autobalancer) than Sir_TryHard_CarriesAlot
P1 Sir_TryHard_CarriesAlot
player_score_plus_death: 636
this_team_score:-1
P2 ArcherWith300Ping
player_score_plus_death:654
this_team_score:1
Moral of the story is that the fame weights level too much, and overall K/D far too little.