@@ -261,15 +261,14 @@ struct SubtickMove
261261 bool pressed;
262262};
263263
264- // Size: 0xE8
265- class CMoveData
264+ class CMoveDataBase
266265{
267266public:
268- CMoveData () = default ;
269-
270- CMoveData (const CMoveData &source)
267+ CMoveDataBase () = default ;
268+ CMoveDataBase (const CMoveDataBase &source)
271269 // clang-format off
272- : moveDataFlags {source.moveDataFlags },
270+ : m_bHasZeroFrametime {source.m_bHasZeroFrametime },
271+ m_bIsLateCommand {source.m_bIsLateCommand },
273272 m_nPlayerHandle {source.m_nPlayerHandle },
274273 m_vecAbsViewAngles {source.m_vecAbsViewAngles },
275274 m_vecViewAngles {source.m_vecViewAngles },
@@ -279,23 +278,16 @@ class CMoveData
279278 m_flUpMove {source.m_flUpMove },
280279 m_vecVelocity {source.m_vecVelocity },
281280 m_vecAngles {source.m_vecAngles },
281+ m_vecUnknown {source.m_vecUnknown },
282282 m_bHasSubtickInputs {source.m_bHasSubtickInputs },
283+ unknown {source.unknown },
283284 m_collisionNormal {source.m_collisionNormal },
284- m_groundNormal {source.m_groundNormal },
285+ m_groundNormal {source.m_groundNormal },
285286 m_vecAbsOrigin {source.m_vecAbsOrigin },
286287 m_nTickCount {source.m_nTickCount },
287288 m_nTargetTick {source.m_nTargetTick },
288- m_flSubtickEndFraction {source.m_flSubtickEndFraction },
289289 m_flSubtickStartFraction {source.m_flSubtickStartFraction },
290- m_outWishVel {source.m_outWishVel },
291- m_vecOldAngles {source.m_vecOldAngles },
292- m_flMaxSpeed {source.m_flMaxSpeed },
293- m_flClientMaxSpeed {source.m_flClientMaxSpeed },
294- m_flSubtickAccelSpeed {source.m_flSubtickAccelSpeed },
295- m_bJumpedThisTick {source.m_bJumpedThisTick },
296- m_bOnGround {source.m_bOnGround },
297- m_bShouldApplyGravity {source.m_bShouldApplyGravity },
298- m_bGameCodeMovedPlayer {source.m_bGameCodeMovedPlayer }
290+ m_flSubtickEndFraction {source.m_flSubtickEndFraction }
299291 // clang-format on
300292 {
301293 for (int i = 0 ; i < source.m_AttackSubtickMoves .Count (); i++)
@@ -330,7 +322,8 @@ class CMoveData
330322 }
331323
332324public:
333- uint8_t moveDataFlags;
325+ bool m_bHasZeroFrametime: 1 ;
326+ bool m_bIsLateCommand: 1 ;
334327 CHandle<CCSPlayerPawn> m_nPlayerHandle;
335328 QAngle m_vecAbsViewAngles;
336329 QAngle m_vecViewAngles;
@@ -339,28 +332,42 @@ class CMoveData
339332 float m_flSideMove; // Warning! Flipped compared to CS:GO, moving right gives negative value
340333 float m_flUpMove;
341334 Vector m_vecVelocity;
342- Vector m_vecAngles;
335+ QAngle m_vecAngles;
336+ Vector m_vecUnknown;
343337 CUtlVector<SubtickMove> m_SubtickMoves;
344338 CUtlVector<SubtickMove> m_AttackSubtickMoves;
345339 bool m_bHasSubtickInputs;
340+ float unknown; // Set to 1.0 during SetupMove, never change during gameplay. Is apparently used for weapon services stuff.
346341 CUtlVector<touchlist_t > m_TouchList;
347342 Vector m_collisionNormal;
348343 Vector m_groundNormal; // unsure
349344 Vector m_vecAbsOrigin;
350345 int32_t m_nTickCount;
351346 int32_t m_nTargetTick;
352- float m_flSubtickEndFraction;
353347 float m_flSubtickStartFraction;
354- bool m_nGameModeMovedPlayer;
348+ float m_flSubtickEndFraction;
349+ };
350+
351+ class CMoveData : public CMoveDataBase
352+ {
353+ public:
354+ CMoveData () = default ;
355+
356+ CMoveData (const CMoveData &source)
357+ : CMoveDataBase(source), m_outWishVel {source.m_outWishVel }, m_vecOldAngles {source.m_vecOldAngles },
358+ m_vecAccelPerSecond {source.m_vecAccelPerSecond }, m_vecInputRotated {source.m_vecInputRotated }, m_flMaxSpeed {source.m_flMaxSpeed }
359+ {
360+ }
361+
355362 Vector m_outWishVel;
356- Vector m_vecOldAngles;
363+ QAngle m_vecOldAngles;
364+ Vector m_vecAccelPerSecond; // related to accel and friction
365+ Vector m_vecInputRotated;
357366 float m_flMaxSpeed;
358367 float m_flClientMaxSpeed;
359- float m_flSubtickAccelSpeed; // Related to ground acceleration subtick stuff with sv_stopspeed and friction
360- bool m_bJumpedThisTick; // something to do with basevelocity and the tick the player jumps
361- bool m_bOnGround;
362- bool m_bShouldApplyGravity;
368+ float m_flFrictionDecel;
369+ bool m_bInAir;
363370 bool m_bGameCodeMovedPlayer; // true if usercmd cmd number == (m_nGameCodeHasMovedPlayerAfterCommand + 1)
364371};
365372
366- static_assert (sizeof (CMoveData) == 256 , " Class didn't match expected size" );
373+ static_assert (sizeof (CMoveData) == 296 , " Class didn't match expected size" );
0 commit comments