Wiki APCR calculator fix

For those that aren’t aware, there is a page on the WarThunder wiki that allows the user to calculate the penetration of AP and APCR rounds.

Spoiler

image

The calculator for normal AP rounds works perfectly fine, and matches the performance of the game.
However, the APCR calculator simply does not.

As an example, I’ll use 76 mm M93 APCR, found on some tanks like the M4A3 (76). In real life, this round weights 4.22 kg, with a velocity of 1036 m/s, and with a core that is 38.1 mm in diameter, with a weight of 1.79 kg. If we are to trust datamined information, M93 has these exact characteristics in WarThunder.

Datamined information

M93 characteristics
Different colors highlight the different mentioned characteristics:

  • Orange: mass of the projectile, kilograms;
  • Yellow: caliber of the bore, meters;
  • Red: mass of the core, kilograms;
  • Green: caliber of the projectile, meters;
  • Purple: caliber of the core, meters.

Plugging these values into the calculator provided in the wiki wields a penetration value of 185 mm at point blank. This simply does not match the actual game, where it actually has 190 mm of penetration.

Calculated penetration for M93

Actual penetration for M93

There are many more examples I could use, as quite literally no APCR round actually matches the respective calculated value on the wiki.

When can we expect this to be fixed?

1 Like

is the wiki wrong or the game wrong?
cuz if its the wiki, share the page link, ill edit the thing

The wiki is wrong, as it doesn’t match the in-game values.

And it’s not something that can be fixed by any random person.

The wiki is supposed to use the actual formula that is used in the game to calculate the penetration, but whatever formula the wiki is using for APCR, it is not the same as the formula used in the actual game. Since only Gaijin developpers know the in game formula, only they can actually fix it.

Edit: Also the link is in the first paragraph of the post.

2 Likes

Hello FlipAllTheTables,

This issue has been noted. Thank you very much for bringing it up.

Regards,
-57

2 Likes

@Inceptor57 Sorry to bother, but it’s been a while and I just wanted to know if there’s anything that can be said about the APCR calculator being fixed.

From the 2019 news article when this calculator was launched:

“We decided to use the DeMarr [sic] formula because it is the most accessible and comprehensible formula for high-calibre armour-piercing ([AP/APC/APBC/APCBC] and sub-calibre (APCR/HVAP) shells. When it comes to sub-calibre fin-stabilised shells, we decided to use the Lanz-Odermatt formula. We are still working on APDS shells…”

All DeMarre does is calculate from reference data:
image

Seems they’re using a different reference round in game for APCR from the wiki. If they’ve changed their reference round since 2019 when the wiki page went up you’d see what you’re experiencing.

Putting that into a more readable form gives this:
image

We can look at the wiki page itself to get the javascript for the calculator, which is this:

Lots of code
function gun_go() {
    var kfbr = 1900;
    var caliber = Number(document.getElementById('gun_caliber').value);
    var mass = Number(document.getElementById('gun_mass').value);
    var speed = Number(document.getElementById('gun_speed').value);
    var tnt = Number(document.getElementById('gun_tnt').value);
    var apcbc = document.getElementById('gun_APCBC').checked;
    tnt = (tnt / mass) * 100;
    var kf_apcbc = (apcbc) ? 1 : 0.9;
    if (tnt\u003C 0.65) {
        knap = 1;
    } else if (tnt\u003C 1.6) {
        knap = 1 + (tnt - 0.65) * (0.93 - 1) / (1.6 - 0.65);
    } else if (tnt\u003C 2) {
        knap = 0.93 + (tnt - 1.6) * (0.9 - 0.93) / (2 - 1.6);
    } else if (tnt\u003C 3) {
        knap = 0.9 + (tnt - 2) * (0.85 - 0.9) / (3 - 2);
    } else if (tnt\u003C 4) {
        knap = 0.85 + (tnt - 3) * (0.75 - 0.85) / (4 - 3);
    } else {
        knap = 0.75;
    }
    document.getElementById('gun_rezult').value = (((Math.pow(\nspeed, 1.43) * Math.pow(mass, 0.71)) / (Math.pow(kfbr, 1.43) * Math.pow(caliber / 100, 1.07))) * 100 * knap * kf_apcbc).toFixed(2);
}

Again, simplifying so it’s more readable gives this:
image

“CAP” is a value that is either 1 if the APCBC box is toggled on, or 0.9 if it isn’t.

“FillerPenalty” is what the name indicates, but the way it works is “tiered”, as seen by all the “else if” statements.This graph shows how the penalty works, where X is the percentage of the filler in relation to the overall projectile weight, and Y is the multiplication value (penalty). When filler weight makes up less than 0.65% of the total weight of the round there’s no penalty (multiplication by 1), and it maxes out when filler is 4% of the total projectile weight, where the penalty is 0.75.

Graph

It’s pretty obvious that the calculator that Gaijin uses for AP rounds, while based on the formula you’ve provided (the exponents used are the same just rounded), is clearly modified. Gaijin uses a K value which is nowhere in the original formula, and overall it’s not possible to create a reference round that turns the original calculator into what is used on the wiki, even if the filler penalty, K value and cap value were ignored. Keep in mind, as I stated originally in this topic, the formula for AP rounds in the wiki does match the game.

Additionally, APCR rounds have additional characteristics that are not taken into account in basic AP rounds, stuff like core diameter and core weight.

(Deleting cause I needed to think about it another second).

Yippee!

No, wait, I’m wrong.

The constant they’re using here is just the reduction of all the reference values. Another way to simplify DeMarre, from a given reference value that you extract a constant K for, would be:

Pen =K * (Velocity^1.42)(Weight^0.71)(Diameter^1.07) / (Diameter^3)^0.71
= K * (Velocity^1.42)(Weight^0.71) / (Diameter^1.06)

Which is basically what they’re using. So yeah, their base deMarre is fine! Neat!

What’s the formula in the same Wiki javascript function set for the DeMarre APCR calculator?

(Aside: the constant K here working out to 0.2827 for APCBC, 0.2545 for AP, with non-solid shot at 75%-100% of those K values.)

function gun2_go() {
    var caliber = Number(document.getElementById('gun2_caliber').value);
    var shell_mass = Number(document.getElementById('gun2_shell_mass').value);
    var core_mass = Number(document.getElementById('gun2_core_mass').value);
    var speed = Number(document.getElementById('gun2_speed').value);
    var pallet_mass = shell_mass - core_mass;
    var kfbr = 3000;
    var part_pallet_mass = (core_mass / shell_mass) * 100;
    var kf_pallet_mass = (part_pallet_mass \ u003E36.0) ? 0.5 : 0.4;
    var calculated_mass = core_mass + (kf_pallet_mass * pallet_mass);
    document.getElementById('gun2_rezult').value = ((Math.pow(speed, 1.43) * Math.pow(calculated_mass, 0.71)) / (Math.pow(kfbr, 1.43) * Math.pow(caliber / 10000, 1.07))).toFixed(2);
}

It’s a bit more complex. It’s past midnight so I don’t really have the patience to figure out the nitty gritty of it.

Let me give it a crack.

It’s still very similar to basic DeMarre.

The complication, same as the other one you dissected above, is they’re throwing in a variable of their own design to represent differing shell densities. DeMarre only works by comparing to a reference shell. If another shell has very different characteristics, you need to compare it to a different reference shell. Gaijin with their DeMarre formula needs to come up with continuous functions though, for all possible contingencies.

So capped shells get a 1.0 above, uncapped get a 0.9, in the first function for non-HVAP. Otherwise the equation is the same. Because someone at Gaijin looked at capped vs uncapped in the history books, and concluded uncapped performed about 10% worse on average.

Similarly the function that you graphed reflects the differing shell densities based on how much of them is filler to shell case. Basically as you showed filled shells are rated at 0.75 of the pen of an AP shell of uniform density, with a sliding scale when filler is less than 4% of weight.

With APCR, it’s also a density question, because the shell has a heavy penetrator core nested in a lighter carrier (the “pallet”). (As unlike later APDS the carrier component doesn’t fall away in flight.) The math they use to reflect this gives a different value for shell mass depending on if the core is greater or less than 36% of the total mass of the shell. If it’s greater, the mass used for DeMarre is core mass + 0.5 * pallet mass. If it’s less, it’s core mass + 0.4 * pallet mass.

So at that point, having their mass value, they should just plug it into regular DeMarre, which they do:

Pen = K * (Velocity^1.43)(Weight^0.71)/(Diameter^1.07)

with the K value they’ve chosen for APCR here being a uniform 0.2031.

So, that leaves two possibilities. Either game and wiki are just using slightly different K values (in which case the differential should be consistent across all APCR shells), or they are doing their density modification calculation in different ways (in which case the variation between wiki and game will be inconsistent across different shells with different pallet:core weight ratios).

Honestly I really want to know what source they looked at because generally it is the opposite, specially when it comes to US rounds… but I digress since that’s not the focus of this topic.

It’s inconsistent. Plugging in datamined values for 85 mm BR-365P, for example, gives way more penetration than what it has in game.

Spoiler

Datamined 85 mm BR-365P

Plugging a projectile weight of 4.99 kg, core weight of 0.648 kg, core diameter of 28 mm and velocity of 1050 m/s into the calculator wields this result:
BR-365P calculated

Except BR-365P has 195 mm of penetration at point blank in WarThunder.

So, short answer that means the calculation method in game is more sophisticated than the wiki math code reflects. Possibly it has more stages than just the two, whereas the wiki doesn’t, or possibly just updated values.

The two shells you picked out above are good examples. The US 76.2 mm is a big core in a small pallet (42% of weight is core). The soviet 85mm is a smaller core in a bigger pallet (13% of weight is core). So they fall on either side of that two stage Javascript step function for APCR mass adjustment (less than 36% multiply by 0.4, greater multiply by 0.5)

When you plug in the values, the Wiki calc generates exactly what you’d expect:

ShellDiam CoreDiam Mass CoreMass Speed %Core PalletMass AdjMass deMarre WikiPen
US 76.2mm 0.0762 0.0381 4.22 1.79 1036 42 2.43 3.01 184.74 185
SU 85mm 0.085 0.028 4.99 0.648 1050 13 4.342 2.38 222.20 223

You can explain the game variation by assuming they calculate the mass adjustment differently, and reversing the equation to solve for what the adjusted mass they’re using must be:

WikiAdjMass WikiPen GamePen GameAdjMass
US 76.2mm 3.01 185 190 3.12
SU 85mm 2.38 223 195 1.99

So the 76.2 mm shell is getting credit for more of its pallet weight in game than in the wiki, and the 85 mm shell is having the impact of pallet weight on the average mass further reduced than in the wiki calculation.

So the logical inference is the wiki has an older version of the mass adjustment determination, and the game has got a more complex one now, or at least a different one.

We can even figure out the mass adjustment for the pallet-penetrator ratio they’re using in game now, assuming the function is otherwise unchanged between wiki and game.

Wiki Adjustment Game Adjustment
US 76.2mm 0.5 0.55
SU 85mm 0.4 0.3

So the 76.2mm HVAP on the wiki is getting credit in the impact mass for 50% of the mass of its pallet. In game it’s getting credit for 55. The SU-85 APCR, which has a much higher pallet-penetrator ratio (so overall it’s a significantly less dense shell), is getting credit for 40% of its pallet weight on the wiki, and 30% in game.

Those numbers are suspiciously rounded, so the game function probably isn’t that complex. Adding a few more HVAP values would tell you if this is still a two-step function, just the numbers have changed, or there’s more steps in here now than are on the wiki.

Bottom line, changing this line:
var kf_pallet_mass = (part_pallet_mass \ u003E36.0) ? 0.5 : 0.4;

to

var kf_pallet_mass = (part_pallet_mass \ u003E36.0) ? 0.55 : 0.3;

would get you the same values for those two specific shells you picked on the wiki as in game. Just for those two shells for sure though… if there’s more steps in the function now than the original two there would have to be more of the “if-then” ladder you see with the regular AP calculator.

Remember it’s not just the presence of a cap per se, it’s probably more to do with the overall aerodynamic cross section of the shell and the impact that would have on pen. The “capped” checkbox they’re using is probably more of a stand-in for the spitzer ogive shape associated with APCBC vs regular AP often having more of a flatter nose.

DeMarre goes off reference shells. It can be as complex as the number of shell types you use as your models, the one whose reference data you trust. In this case they’ve basically grouped all possible AP shells into five or so categories, because they’re different enough from each other to need different reference data.

(not so pointy) AP
Capped (pointy) AP
Filled AP
HVAP (pencil penetrator, big pallet)
HVAP (bigger penetrator, smaller pallet)

And just put every non-discarding-sabot AP shell into one of those categories for their pen calc, each with their own reference data constant. DeMarre doesn’t tell you to do that, that’s a judgment call.

I tested this with datamined information on other APCR rounds and it didn’t work sadly.

Using datamined information on the 88 mm KWK43’s APCR round and doing the “game adjustment” you’ve provided gives 260 mm of penetration. In WarThunder it has 279 mm which is slightly lower than what the calculator normally gives without any changes (287 mm).

You can test it for yourself if you want, here’s the datamined stuff.

Datamined information and math

Datamined information.
image

Agreed. So in game it’s at least a three-step function now, or possibly a continuous function even, and the Wiki formula is either an oversimplification or out of date.

88mm APCR comes in at 27% core, which in the two-step function would give it the same value as the Russian 85, because of the wiki function’s break point at 36% core.

That’s three data points right now that form a nice line, so definitely not a two step function:

US 76mm: 42% core, using 55% of the pallet mass to come up with its deMarre mass for game pen purposes:
GE 88mm, 27% core, using 37% of the pallet mass similarly;
RU 85mm, 13% core, using 31% of the pallet mass.