Weapon & Specimen Stats (PDF)

  • Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

Lewt

FNG / Fresh Meat
Sep 5, 2010
404
112
0
I will not be able to check everything else, so don't hesitate to tell me if there are things that have changed.
All suggestions are welcome.

Hmm.. The crossbow either had a reload speed buff, or the sharpshooter reload bonus now applies to it - dunno if you were already looking at the former.
 
Jun 30, 2012
220
1
18
I've been using this pdf for a long time already and just wanted to thank you for your work. It's great that you decided to update it. Thank you!

I am almost certainly sure you're aware of this already, but just in case you are not: the note in the penetration section says that "the support perk improve the penetration damage with all shotguns, but not the maximum number of penetrations." But, according to scary_ghost's post, the maximum number of penetrations gets increased as well.
 
  • Like
Reactions: meteors

Phada

FNG / Fresh Meat
Aug 24, 2010
190
62
0
France
phada.2ya.com
Hmm.. The crossbow either had a reload speed buff, or the sharpshooter reload bonus now applies to it - dunno if you were already looking at the former.
The crossbow has the same base RoF.
Yes there is a fire speed bonus with ss perk for lar/xbow/m99 (only for lar before?) but there are no such specific information about the perks in the doc. Maybe I'll add a note somewhere.

I am almost certainly sure you're aware of this already, but just in case you are not: the note in the penetration section says that "the support perk improve the penetration damage with all shotguns, but not the maximum number of penetrations." But, according to scary_ghost's post, the maximum number of penetrations gets increased as well.
I am not, thanks I will take a look at this!
Weapon's table updated, one full page juste for ranged weapons, now looking at such things :)
DPS page removed, I only puts the dps for melee weapons now.
 

Althamus

FNG / Fresh Meat
Mar 13, 2012
1,311
21
0
I believe that before the update, the reload sharp bonus applied to all weapons bar Xbow, whereas now it's all onperk weapons.

There's no fire speed bonus for sharpshooters, but due to the Xbow/M99 reloading after each shot, the line blurs.
 

Aze

Grizzled Veteran
Mar 19, 2010
1,423
522
113
There's no fire speed bonus for sharpshooters, but due to the Xbow/M99 reloading after each shot, the line blurs.

Untrue, the Sharpshooter has a hidden fire speed bonus for the LAR actually.

And the Xbow/M99 needs a rate of fire bonus (codewise) to gain any for of pseudo "reload" bonus. It's like that because the Xbow/M99 are some of the weapons in this game that doesn't ACTUALLY reload, they basicly just have one huge magazine. Meh, cba to explain this once again. Do your research fellas -.-
 

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
Awesome job, dude!

I checked out new stats, they seem OK.

Some remarks could be useful to add:

Melee Weapons Notes:
Axe and Claymore can't chain zed times due to slow primary attack speed.

Ranged Weapons Notes:
MP5M has x1.5 faster Healing Dart recharge rate (10%/2) than MP7M, M7A3 and Syrige (all have the same recharge rage: 6.67%/s).
Level 6 Medic Healing speeds (including recharge):
Syringe: 11.7hp per second
MP7M: 11.7hp per second **
MP5M: 26hp per second **
M7A3: 17.3hp per second **
** Values above shows how fast medic can give health, not much quickly it is restored. Player has a constant health restore rate - 10hp/s, no matter of healing source or medic bonuses.

Penetration
Error in the table: Hunting Shotgun has 2 penetrations (3 hits).
Useful note to add: Level 5 and 6 Supports have near-to-infinite penetration count for all shotguns.

** EDIT:
Here is a link on the shotgun penetration table, which I made for shotgun balancing for my ScrnBalance mutator:

The "Original" sheet contains calculations, which were taken from vanilla game's source code.
I you find it useful, you're welcome to copy-paste any information you want into your .pdf or just add a link in the topic.
 
Last edited:

Left 4 Dinner

FNG / Fresh Meat
Jun 11, 2012
732
12
0
so wait, ho wmuch damage does patty do when he's getting lumberjacked? It says when he attemptes to do that move, but it doesnt say how much damage can be done.
 

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
so wait, ho wmuch damage does patty do when he's getting lumberjacked? It says when he attemptes to do that move, but it doesnt say how much damage can be done.

It is random value between 54 and 108 no matter of game difficulty.
If player has >= 50% armor, he receives double damage (108..216).
 
Last edited:

Phada

FNG / Fresh Meat
Aug 24, 2010
190
62
0
France
phada.2ya.com
@poosh
You're right about hunting shotgun penetration this is a mistake of me.
Your table on googledoc is empty or doesn't work with firefox.

Indeed for the axe/claymore, but this is only valid for non-berzerker.
Berserker lv1 should have a rof of 1 attack/sec with the claymore, the axe will need at least lv3.

About the heal recharge, I plan to add the exact table with all weapon/recharge/healing for each medic perk lv (see to do list).
I got the same recharge numbers as yours, once turned into percentage like in the hud.

The formulla is pretty simple, AmmoRegenRate = the delay to regen ammo +10 * perk bonus (real max ammo = 500).
All regen rate=0.3 (3.3 times/sec or +30/~sec)
Except for mp5=0.2 (5 times/sec or +50/sec)

Ammo used per shot for all weapons = 250 (aka 50%)
Except self syringe = 500 (aka 100%, see SyringeAltFire)


@Left 4 Dinner
About pat radial, yes its randomized I forgot about that!
Real damage should be = 54~108
Or If armor > 50 = 108~216

Code:
// This attack cuts through shields, so crank up the damage if they have a lot of shields
                if( P.ShieldStrength >= 50 )
                {
                    RadialDamageBase = 240;
                }
                else
                {
                    RadialDamageBase = 120;
                }

                // Randomize the damage a bit so everyone gets really hurt, but only some poeple die
                UsedMeleeDamage = (RadialDamageBase - (RadialDamageBase * 0.55)) + (RadialDamageBase * (FRand() * 0.45));

edit: there is a table for patriarch attacks btw.
 
Last edited:

Phada

FNG / Fresh Meat
Aug 24, 2010
190
62
0
France
phada.2ya.com
The Field Medic perk is probably bugged since the beginning, a lv3 or lv4 is actually healing as much as a lv6 :p

Code:
static function float GetHealPotency(KFPlayerReplicationInfo KFPRI)
{
    if ( KFPRI.ClientVeteranSkillLevel == 0 )
    {
        return 1.10;
    }
    else if ( KFPRI.ClientVeteranSkillLevel <= 2 )
    {
        return 1.25;
    }
    else if ( KFPRI.ClientVeteranSkillLevel == 5 ) // TWI mean <= 5 right?
    {
        return 1.5;
    }

    return 1.75;  // Heals for 75% more
}
 

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
Your table on googledoc is empty or doesn't work with firefox.
After selecting a weapon, in the bottom of the windows select "OriginalPenetration" sheet. Table is there. I was supposed to move calculations to another sheet to protect it from public editing.

Indeed for the axe/claymore, but this is only valid for non-berzerker.
Berserker lv1 should have a rof of 1 attack/sec with the claymore, the axe will need at least lv3.
Where have you found that rof needs to be > 1 attack/sec to chain zed times? Zed time longs 3 seconds, so in "theory" each kill in this period +/- Tick() delay should extend the zed time. But it doesn't, and I can't find out why.
But I tested it a game and can tell you that Level 6 Berserker can't chain zed times with Claymore. I tried to adjust fire rate in mutator and came with conclusion, that FireRate should be ~0.95s or less to allow zed time chaining for lvl6 zerk (0.76s perked).

Real damage should be = 54~108
Or If armor > 50 = 108~216
Yeah, sorry, you're right, I misread the formula. It is varying from 45% to 90%, not from 55% - 100%. Imo TWI just wrote it wrong :D
 
Last edited:

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
The Field Medic perk is probably bugged since the beginning, a lv3 or lv4 is actually healing as much as a lv6 :p

Code:
static function float GetHealPotency(KFPlayerReplicationInfo KFPRI)
{
    if ( KFPRI.ClientVeteranSkillLevel == 0 )
    {
        return 1.10;
    }
    else if ( KFPRI.ClientVeteranSkillLevel <= 2 )
    {
        return 1.25;
    }
    else if ( KFPRI.ClientVeteranSkillLevel == 5 ) // TWI mean <= 5 right?
    {
        return 1.5;
    }

    return 1.75;  // Heals for 75% more
}

Lol, yeah, classic bug in TWI style. Like wave 8 bug, which was solved only in
1035.
But tbh this doesn't matter, because there was medic gun dropping exploit before, but now there are 3 medguns to switch between, so medic can provide non-stop healing. And the health restore rate is the same, no matter who heals you: non-medic or level 6.
 

Phada

FNG / Fresh Meat
Aug 24, 2010
190
62
0
France
phada.2ya.com
Sorry my newbieness about googledoc ^^

I have no idea about the delay max to chain zed time tbh lol
Yeah I already tried claymore several time (at lv6) and I think we can't chain zed time with it.
In theory the Claymore at lv6 should attack every 1.05/1.25=0,84sec, but it seems much slower.


About the drop exploit, something like this could fix it:
Code:
simulated function ClientWeaponThrown() { // or somewhere else just to reset charge to 0
    super.ClientWeaponThrown();
    HealAmmoCharge = 0;
}
You sure about the healing amount? Because it should be scaled by the GetHealPotency() of the current player holding the weapon.
See MP7MHealinglProjectile.ProcessTouch() line276.
 

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
Simply setting HealAmmoCharge=0 in default properties in each Medic Gun solves the drop exploit, but TWI had already fixed in 1035 in a different way - they store the value before dropping and restore it after picking up.
Btw MP5MMedicGun.HealAmmoCharge = 650, so TWI wanted to set its max charge to 130%, but forgot that it's limited by MaxAmmoCount with is const set to 500.

There is a delay between start of melee attack and hitting the target. It is specified by variable DamagedelayMin, which is 0.63s for Claymore. But even with it (1.05 + 0.63)/1.25 = 1.344s between attack is significantly less than 3s of ZED time. ZED time extensions are set in KFGameType.Killed():
Code:
function Killed(Controller Killer, Controller Killed, Pawn KilledPawn, class<DamageType> damageType)
{
	local Controller C;
	local string MapName;

	if ( PlayerController(Killer) != none )
	{
		if ( KFMonster(KilledPawn) != None && Killed != Killer )
		{
			if ( bZEDTimeActive && KFPlayerReplicationInfo(Killer.PlayerReplicationInfo) != none &&
				 KFPlayerReplicationInfo(Killer.PlayerReplicationInfo).ClientVeteranSkill != none &&
				 KFPlayerReplicationInfo(Killer.PlayerReplicationInfo).ClientVeteranSkill.static.ZedTimeExtensions(KFPlayerReplicationInfo(Killer.PlayerReplicationInfo)) > ZedTimeExtensionsUsed )
			{
				// Force Zed Time extension for every kill as long as the Player's Perk has Extensions left
				DramaticEvent(1.0);

				ZedTimeExtensionsUsed++;
			}
...
bZEDTimeActive is controller by DramaticEvent(), which starts the ZED time and Tick(), which stops it after CurrentZEDTimeDuration drops down to 0.
CurrentZEDTimeDuration is reset in DramaticEvent() to ZEDTimeDuration, which is 3s long by default.
Spoiler!
The only issue I see here is that function Tick() decreases CurrentZEDTimeDuration by the time between calls, not by time between current and zed time start. Theoretically it should called very often, so calculation error should be minimal. But, for example, if Tick() was called 1s before previous zed time start, then zed time was continued and Tick() was called again, it decreases CurrentZEDTimeDuration by extra 1s.
Anyway, CurrentZEDTimeDuration implementation is lame. ZEDEndTime should be used instead, i.e.:
Code:
DramaticEvent():
...
bZEDTimeActive = true;
ZEDEndTime = Level.TimeSeconds + ZEDTimeDuration
...

Tick():

if (Level.TimeSeconds >= ZEDEndTime )
  bZEDTimeActive = false;
...
 

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
You sure about the healing amount? Because it should be scaled by the GetHealPotency() of the current player holding the weapon.
See MP7MHealinglProjectile.ProcessTouch() line276.

I'll try to make myself clear. You see, there are two different things: health giving and health receiving.

Health giving is what you see in MP7MHealinglProjectile.ProcessTouch(). It has medic perk bonus. But it doesn't change Healed pawn Health. It sets KFPawn.HealthToGive variable.

Health receiving is implemented in KFPawn.AddHealth():
Code:
simulated function AddHealth()
{
    local int tempHeal ;
    if((level.TimeSeconds - lastHealTime) >= 0.1)
    {
        if(Health < HealthMax)
        {
            tempHeal = int(10 * (level.TimeSeconds - lastHealTime)) ;
            if(tempHeal>0)
              lastHealTime = level.TimeSeconds ;

            Health = Min(Health+tempHeal, HealthMax);
            HealthToGive -= tempHeal ;
        }
        else
        {
            lastHealTime = level.timeSeconds ;
            // if we are all healed, there's gonna be no more healing
            HealthToGive = 0 ;
        }
    }
}
As you can see, it restores 10hp per second no matter of health amount or healer perk bonus. So it doesn't matter you receive 2 MP5M Healing Darts from level 6 Medic or 5 syringe injections from non-medics - you will restore 100hp in 10 seconds.

Yes, you receive more health from one healing made by medic than non-medic, but medic's healing will last longer too.
 
Last edited:

scary ghost

FNG / Fresh Meat
Sep 13, 2010
900
338
0
California
Simply setting HealAmmoCharge=0 in default properties in each Medic Gun solves the drop exploit, but Scary Ghost had already fixed in 1035 in a different way - they store the value before dropping and restore it after picking up.

FTFY ;). Also, only the mp5m has the fix implemented. Neither M7A3 nor MP7M has it patched.
 

Phada

FNG / Fresh Meat
Aug 24, 2010
190
62
0
France
phada.2ya.com
As the mp5m prove it, it's useless to modify the HealAmmoCharge in defaultproperties.
Im doing some test with custom medic guns, I tried the HealAmmoCharge=0 in properties and this doesn't do anything about the drop/pickup instant recharge on mp7m.
The mp5m doesn't seems to have this prob and that pretty weird because this is a mp7's subclass with same code.
EDIT: if scary ghost already know how to fix it I give up ;)
EDIT2: Ok this is done in the pickup.

I don't have look at the zed time yet but this is interesting, ty.
I am more wondering about the real swinging speed of the claymore for now.


About KFPawn.AddHealth()
if I remember well, this function called by Tick() is only here to quickly delay the healing process, because there is no instant heal.
The current amount of heal is stored in the HealthToGive's variable, which is set in the next function KFPawn.GiveHealth(), the one used on weapons.
Also look at KFPawn.Tick() to understand how AddHealth() is working.
I think the 1hp every 0.1sec is the max healing speed, but if there are more heathToGive this will continue.
EDIT: Nevermind I know what you're talking about now :p
 
Last edited:

poosh

Grizzled Veteran
Jan 6, 2011
3,404
327
83
FTFY ;). Also, only the mp5m has the fix implemented. Neither M7A3 nor MP7M has it patched.

LOL, just checked it out - really. I don't know are the devs dumb, lazy or both, but how you can fix one medic gun and don't fix another? All it takes to do is to copy-paste the same code, just replacing some words.

As the mp5m prove it, it's useless to modify the HealAmmoCharge in defaultproperties.
Im doing some test with custom medic guns, I tried the HealAmmoCharge=0 in properties and this doesn't do anything about the drop/pickup instant recharge on mp7m.

Setting HealAmmoCharge=0 in default properties for MP5M doesn't work, because its value is restored in pickup class (see MP5MPickup.uc). But this will work for MP7M and M7A3, because, as scary_ghost already said, they aren't patched.
When you drop a weapon on the ground, it has been destroyed and a pickup spawns instead of it. When you pickup a "pickup" :), new weapon instance is spawned - it isn't the same weapon you held before.
 
Last edited: