Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

isWalking flag is not actually walking #318

Open
sjaanus opened this issue Dec 17, 2021 · 9 comments
Open

isWalking flag is not actually walking #318

sjaanus opened this issue Dec 17, 2021 · 9 comments

Comments

@sjaanus
Copy link

sjaanus commented Dec 17, 2021

Also mentioned in #317

isWalking is using underlying CSGO flag m_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.

@sjaanus
Copy link
Author

sjaanus commented 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
Copy link
Owner

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
Copy link
Author

sjaanus commented 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
Copy link
Owner

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

@markus-wa
Copy link
Owner

the code you linked seems to cover all these areas I think

@sjaanus
Copy link
Author

sjaanus commented 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
Copy link
Owner

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
Copy link
Author

sjaanus commented 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
Copy link
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants