You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I implemented a check that checks if players is moving based on velocity. Basically checked all shots that occured when velocity was higher than 0. It seems that pro players move 60-80% of shots they take. This means there might not be a accuracy penalty while moving in very low speeds.
Do you know how much velocity affects accuracy? Like, lets say velocity is on scale 0 to 250. I checked if all values are over 0, then player is moving. But maybe when velocity is like 1, then player gets no penalty.
float flMovementInaccuracyScale = RemapValClamped(pPlayer->GetAbsVelocity().Length2D(),
fMaxSpeed * CS_PLAYER_SPEED_DUCK_MODIFIER,
fMaxSpeed * 0.95f, // max out at 95% of run speed to avoid jitter near max speed
0.0f, 1.0f );
and then
float flAirSpeedInaccuracy = RemapVal( fSqrtVerticalSpeed,
fSqrtMaxJumpSpeed * 0.25f, // Anything less than 6.25% of maximum speed has no additional accuracy penalty for z-motion (6.25% = .25 * .25)
fSqrtMaxJumpSpeed, // Penalty at max jump speed
0.0f, // No movement-related penalty when close to stopped
flInaccuracyJumpInitial ); // Movement-penalty at start of jump
Okay that is over my head. The method I linked, there are too many variables in there. Have never touched csgo source and Go language before. Not a good starter project 😄
Activity
sjaanus commentedon Dec 19, 2021
I implemented a check that checks if players is moving based on velocity. Basically checked all shots that occured when velocity was higher than 0. It seems that pro players move 60-80% of shots they take. This means there might not be a accuracy penalty while moving in very low speeds.
I think a good thing to implement is this https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/shared/cstrike15/weapon_csbase.cpp#L1208
This allows to check how much penalty users get during shooting, which basically means how efficient they are.
markus-wa commentedon Dec 19, 2021
thanks for the detailed analysis @sjaanus - I think this may indeed be worth re-implementing.
PRs welcome, otherwise I'll see if/when I can get to it.
sjaanus commentedon Dec 20, 2021
Do you know how much velocity affects accuracy? Like, lets say velocity is on scale 0 to 250. I checked if all values are over 0, then player is moving. But maybe when velocity is like 1, then player gets no penalty.
markus-wa commentedon Dec 20, 2021
I would say this is the key bit
and then
markus-wa commentedon Dec 20, 2021
the code you linked seems to cover all these areas I think
sjaanus commentedon Dec 22, 2021
Do you have any examples where you call methods from game/shared/cstrike15/weapon_csbase.cpp? This could help to a right path.
markus-wa commentedon Dec 22, 2021
we can't call any source-engine code from this library. it has to be re-implemented in Go.
but I think the data is all there, e.g.
m_fAccuracyPenalty := weapon.Entity.PropertyValueMust("m_fAccuracyPenalty")etc.let me know if you're missing any of the variables used in the calculation and I'll try to dig them up
sjaanus commentedon Dec 22, 2021
Okay that is over my head. The method I linked, there are too many variables in there. Have never touched csgo source and Go language before. Not a good starter project 😄
markus-wa commentedon Dec 29, 2021
fair enough @sjaanus 😅 - yeah most new features are pretty tricky now, the easy stuff is mostly done 😞
I'll see if I can get to this soon ™️ but I wouldn't hold my breath to be fair
markus-wa commentedon Aug 31, 2026
fixed via docs improvement
docs(common): clarify IsWalking() reflects walk key, not movement
docs(common): clarify IsWalking() reflects walk key, not movement