Yes the game use 1.25 tick and timers use that tick.
Thank you very much.
I knew that, this is also what I suspected back in the tank gun tests and then termed "correction time". I thought the game needs to "wait" until the next tick when the previous part of the firing processed finished.
Things here are more complicated though. Some stats still use this correction time, others add a plain 0,125 seconds (so you can go from 0,4 to 0,525) and there will be no correction time at all. And in a third case nothing is applied. I don't know if the 64 bit update changed something, one would need to test tank guns again. But in the end it does not really matter that much. In the case of fire_aim time, this also differs between burst and single fire. Maybe my model that's not exactly what happens, but at least it is one way to describe the outcome.
Currently, the only source of DPS for small arms fire is Cruzz’ formula (also see Vipper’s guide), as well as coh2.serealia.ca which is an updated version that apparently uses Cruzz’ formula as well. However, no one knows where this formula came from.
When I tried to re-calculate these values on my own, I was unable to replicate the exact same values. Since this error could become quite large. I did some more digging only to find out that the formula does not match what I saw in-game.
Some time ago when I tested tank cannons, I found another probably game engine-related issue that increased the time between shots by 0.125 per used stat (I will call this 0.125 addition ‘correction time’ from now on), therefore I expected a similar issue with small arms. I then started iteratively modding and things turned out to be more complicated than that, but finally I can present a model that:
1. Matches the in-game time for shot cycles and
2. Based on that calculates the correct DPS of a given weapon.
I’ll spare you the lengthy details, in essence I had to test every stat separately to see how it behaves, changed it in a mod and then measured the time in-game by hand. If some of you wish to see the raw data, I can provide it but warning ahead it is quite convoluted. "Readability” was not an aim since I initially thought it would only be a quick notation sheet.
Additionally, one limitation is that I had to use "fixed" stats, meaning every stat was defined. The game however often uses randomization for some stats. Although I am fairly certain that I checked for all or at least most of this and my new model reflects this randomness, I cannot exclude with 100% certainty that this will lead to minor differences in the game and in my model. However, these differences will be minor, so I am confident to say that the new formula is better than the old one in any case.
The following spoiler defines a couple of “functions” that are necessary to understand the final formula:
Single fire weapons:
Stat overview:
The easiest way to calculate the DPS is to calculate the expected damage done and divide by the time for a complete shot cycle. Therefore, all variables that are randomly picked from an interval need to be taken as the mean between the interval borders. For brevity and visual clarity, I won’t note it down in the formula.
Expected damage:
Note ahead: Chance to hit and chance to penetrate are capped at 1. The braces are only there to group related stats and not needed for calculation
This means the model cycles through (fire_aim_time + wind_up + wind_down + cooldown) until the last bullet left in the magazine. For the last bullet, no cooldown is applied and the model directly enters the reload animation.
I have seen that the model also sometimes has intermediary animations (looking left and right, cowering etc. This does NOT affect the timings.
Burst fire weapons:
This is were things get tricky mostly because we get some additional stats.
Stat overview:
The reasoning is the same as before: Expected damage divided by the time needed.
Expected damage:
Chance to hit and chance to penetrate are capped at 1. The braces are only there to group related stats and not needed for calculation. I only have limited data on the ROF*burst_duration, but from what I saw this value is not rounded down. If a “half bullet” is calculated, there is either a random check of the bullet is given or not or it is carried over to the next cycle. I assume the latter, but not sure.
Further comments:
The old formula adds the ready_aim time. This is false. Ready_aim time defines the time to focus on a new enemy and is applied only ONCE at the beginning of the fight. It also subtracts the fire aim time. This is false too.
Aftermath
(I'll quickly add another paragraph to give some perspective)
So, what about all this. Overall this doesn't sound like a huge change, does it?
Depends on the weapon you look at. Literally all DPS profiles in coh2.serealia.ca are incorrect. Some values are still close to each other, others are not. For example, the Ranger M1A1 carbine is shows as having 10 DPS in serealia at range 0-4. My in-game tests however showed something closer to 8 (39-40 seconds needed to kill 4 Partisans with in total 320 HP at point blank which leads a DPS of 8-8,2. This leads to a difference of 20% in this rather extreme case. My formula calculates 8,207 which seems to be way closer to the in-game situation. In serealia, the Tommy Bren gun starts at 4,1 and ends at 6,9 DPS, my formula calculates 4,5 (+10%) and 6,95 (+0,1%) respectively. Or the Gren K98 goes from 5,99 to 2,26 DPS, while the new formula returns 5,27 (-12%) to 2,16 (-4%). We're currently in a state of the game where things are in general decently balanced, every move we make now can naturally only be a tiny step. If we want to make further changes, we need to get the correct numbers. I checked some few weapons in the game and my model is consistent with timings that I measured in game and some TTK data I gathered. I encourage everyone to do some measurements themselves and also report back what they got.
I’ll leave it at this for now, it is quite a wall of text already. I spent a lot of time on this, if anyone has doubts about my formula I would kindly ask to gather some data yourself. I will be all ears for discussion, but after countless cycles of changing stats and stopping times, I would like to have a break on this.
I hope this helps for the upcoming commander patch. Release version can be found here.
Please stop spamming the forums and especially the balance section when your opening post is either a rant or seeking advice. Especially if there is no proper reasoning and suggestion for improvement.
This site looks very nice. Congrats on your good work so far!
One question though: could you elaborate which games you are parsing at the moment? Are these all games played, a random selection or is there some bias in it?
Regarding the random/arranged team: can you check if the players have the same rank? If so, they should be arranged
We were discussing merging MOP and Riegels into a "251 package", but it would require some tweaks. For example MOP not stacking with spotting scopes. But I think it'd be real nice to merge them.
I hope this goes through. Would be at least a doctrinal solution of making one light vehicle useful for the late game.
I also saw that the mechanized assault group (PGrens+250) is still unchanged. I assume this one is still under discussion?
Riegel mine is still not worth a full commander slot. This mine is already gated behind a vehicle, I think we can safely bundle it with another small ability.
I once suggested the forward observation post, but defense fortifications or breakthrough equipment (buildable by pios) would fit as well.
I am very happy that the Jager Command squad got into a sevond commander (it is one of the best units OST can offer - durable, strong, provides recon but not cheesy), but I am slightly unhappy that of all things the Riegel had to give up one of its two slots. There are many other abilities that occur 3 times and more. If we want diverse commanders, we should swap those high frequency abilities for less frequently used ones, not swap within the lesser used