Open sjaanus opened 2 years ago
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.
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.
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.
I would say this is the key bit
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
the code you linked seems to cover all these areas I think
Do you have any examples where you call methods from game/shared/cstrike15/weapon_csbase.cpp? This could help to a right path.
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
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 😄
fair enough @sjaanus :sweat_smile: - yeah most new features are pretty tricky now, the easy stuff is mostly done :disappointed:
I'll see if I can get to this soon :tm: but I wouldn't hold my breath to be fair
Also mentioned in markus-wa/demoinfocs-golang#317
isWalking
is using underlying CSGO flagm_bIsWalking
, which actually means that user is holding walk button.Also reproduced it in local machine, by standing still, holding walk key and attacking enemy. All hits were done and
isWalking
was true.