Marking as important because it seems to fit better on this priority, feel free
to change if you disagree (but under no circumstances mark as minor,
release-blocker or feature though! This is for next-release but should not be
treated as a release-blocker)
So, after losing track of how many problems I had because the poor Electro Laser
Rifle was overpowered, and having to confiscate it from Spencer (which I do not
regret, because the new weapon shots a lot, and SHOOTING IS TOO MUCH FUN).
I eventually decided a few months after to try to understand why my overpowered
version of the 999 bot used solely for debug purposes died so quickly with that
weapon, and I found out, after looking and trying to understand bullet.c and
blasts.lua, that the blast damage formula is WRONG.
The animate_blast function is called each blast phase and then causes some
damage. To compensate for the fact that no blast have only one phase, the damage
is multiplied by FrameTime(), resulting in Damage Per Second (DPS).
My main problem, as co-responsible for game balance, is the value we are feeding
to DPS. We currently feed the bullet damage as blast damage, forgetting that the
blast damage is actually DPS.
The standard weapon blast, Exterminator, have 28 phases, animated over 1.6
seconds, if I read blasts.lua correctly.
This means that the blast alone will cause around 1.6x from the bullet damage!
Of course, for consistency, the center of the blast receives more damage, so the
bot which was targeted will not only receive blast damage, but bullet damage too.
This means that my target is receiving 2.6x times the bullet damage if I did
calculations right. Now, let's compare the weapons we have in FreedroidRPG using
this blast against the infamous Barrett, the gun with highest nominal high
damage value (240), and a standard high-level gun. Please note that this was
calculated before commit 763eceb3bb6a15c4a8a16b5b417585500e33451e in which I
changed ELR blast.
nbk999 stands for 'number of bullets to kill a 999'. First value is the one
obtained on a live test, and (second value) the one by mathematical calculations.
Weapon name - base damage - effective damage - avg. nbk999
Laser Pulse Cannon (reference) - 6:14 - 6:14 - 30 (30.00)
Barrett M86 Sniper Rifle - 40:240 - 40:240 - 2 (2.14)
Electro Laser Rifle (ELR) - 80:110 - 208:286 - 2 (1.21)
The Super Exterminator!! - 90:140 - 234:364 - 1 (1.00)
Of course, this problem can be under my responsibility, on which case I'll just
lower the Exterminator damage to the same as the ELR (which with the new blast,
have a multiplier of 2, and not 2.6), and this remains important but can be
assigned back to me.
Or, what I would prefer, is to assign this to fluzz, and change the blast
formula so the bullet damage is NOT the DPS, but the total damage (so:
bullet_damage ÷ animation_time)
This is more consistent and realistic and easier to work with in my opinion, but
feedback is appreciated.
However as it can be clearly seen, maximum damage value means nothing, we need
to know how long the blast will last to have an idea of which weapon is better -
and on this case, I'll open a new feature request (in a separate ticket) to
include this crucial information within shop window: “Blast Duration” or “Blast
Effect”, because suddenly I found out that a weapon with 6:14 damage will cause
diverging damage for diverse blasts.
If I take the Laser P. Cannon with a blast of 2 seconds effect, I'll need only
10 bullets - although it'll take some time to the bot die from DPS.
Well, this subject is now open for discussion and/or assignment.