Game: correctly type datamap fields

This commit is contained in:
Kawe Mazidjatari 2024-07-30 15:04:41 +02:00
parent dae694139f
commit ac66fb513b
13 changed files with 110 additions and 107 deletions

View File

@ -12,9 +12,9 @@
struct WeaponInventory_Client
{
void* _vftable;
int weapons[9];
char gap_2c[24];
int activeWeapons[3];
EHANDLE weapons[9];
EHANDLE offhandWeapons[6];
EHANDLE activeWeapons[3];
};
class C_BaseCombatCharacter : public C_BaseAnimatingOverlay

View File

@ -11,6 +11,7 @@
#endif
#include "baseentity.h"
#include "public/studio.h"
#include "public/datacache/idatacache.h"
#include "game/shared/animation.h"
@ -35,7 +36,7 @@ protected:
int m_nForceBone;
Vector3D m_vecForce;
int m_nSkin;
__int16 m_skinMod;
short m_skinMod;
char gap_b32[2];
int m_nBody;
int m_camoIndex;
@ -79,8 +80,8 @@ protected:
int m_nNewSequenceParity;
int m_nResetEventsParity;
char gap_dac[4];
__int64 m_boneCacheHandle;
__int16 m_fBoneCacheFlags; // END CBASEANIMATING
memhandle_t m_boneCacheHandle;
short m_fBoneCacheFlags; // END CBASEANIMATING
char gap_dba[2];
int m_animNetworkFlags;
bool m_animActive;
@ -97,12 +98,12 @@ protected:
float m_recordedAnimPlaybackRate;
float m_recordedAnimPlaybackTime;
matrix3x4_t m_recordedAnimTransform;
int m_recordedAnimPlaybackEnt;
EHANDLE m_recordedAnimPlaybackEnt;
float m_recordedAnimBlendTime;
Vector3D m_recordedAnimBlendOffset;
Vector3D m_recordedAnimBlendAngles;
AnimRelativeData m_animRelativeData;
int m_syncingWithEntity;
EHANDLE m_syncingWithEntity;
char gap_ec4[4];
PredictedAnimEventData m_predictedAnimEventData;
int m_animRefEntityAttachmentIndex;

View File

@ -24,9 +24,9 @@ struct WeaponDropInfo
struct WeaponInventory
{
void* __vftable;
int weapons[9];
int offhandWeapons[6];
int activeWeapons[3];
EHANDLE weapons[9];
EHANDLE offhandWeapons[6];
EHANDLE activeWeapons[3];
};
struct CTether
@ -57,11 +57,11 @@ private:
float m_phaseShiftTimeEnd;
float m_flNextAttack;
float m_lastFiredTime;
int m_lastFiredWeapon;
EHANDLE m_lastFiredWeapon;
float m_raiseFromMeleeEndTime;
float m_nextFlamethrowerStatusEffectUpdateTime;
int m_lastFlamethrowerStatusEffectInflictor;
int m_lastFlamethrowerStatusEffectAttacker;
EHANDLE m_lastFlamethrowerStatusEffectInflictor;
EHANDLE m_lastFlamethrowerStatusEffectAttacker;
int m_sharedEnergyCount;
int m_sharedEnergyTotal;
int m_sharedEnergyLockoutThreshold;
@ -94,14 +94,14 @@ private:
WeaponInventory m_inventory;
char m_selectedWeapons[2];
char gap_16da[2];
int m_latestPrimaryWeapons[2];
int m_latestPrimaryWeaponsIndexZeroOrOne[2];
EHANDLE m_latestPrimaryWeapons[2];
EHANDLE m_latestPrimaryWeaponsIndexZeroOrOne[2];
char m_latestNonOffhandWeapons[2];
char m_selectedOffhands[3];
char m_selectedOffhandsPendingHybridAction[3];
char m_lastCycleSlot;
char gap_16f5[3];
int m_weaponGettingSwitchedOut[2];
EHANDLE m_weaponGettingSwitchedOut[2];
bool m_showActiveWeapon3p[2];
char gap_1702[2];
int m_weaponPermission;
@ -110,15 +110,15 @@ private:
bool m_hudInfo_visibilityTestAlwaysPasses;
bool m_weaponDisabledInScript;
char gap_170f[1];
int m_removeWeaponOnSelectSwitch;
int m_latestMeleeWeapon;
EHANDLE m_removeWeaponOnSelectSwitch;
EHANDLE m_latestMeleeWeapon;
bool m_doOffhandAnim;
bool m_wantInventoryChangedScriptCall;
bool m_doInventoryChangedScriptCall;
char gap_171b[1];
float m_cloakReactEndTime;
CTether m_tethers[2];
int m_titanSoul;
EHANDLE m_titanSoul;
Vector3D m_lastFootstepDamagePos;
bool m_lastFoostepDamageOnGround;
char gap_1781[3];
@ -136,7 +136,7 @@ private:
char m_targetInfoIconName[64];
bool m_titanStepDamage;
char gap_5949[3];
int m_latest3pWeaponGettingEquipped[2];
EHANDLE m_latest3pWeaponGettingEquipped[2];
char gap_5954[12];
};

View File

@ -80,7 +80,7 @@ protected:
int touchStamp;
CUtlVector<thinkfunc_t> m_aThinkFunctions;
float m_entitySpawnTime;
int m_spawner;
EHANDLE m_spawner;
bool m_wantsDamageCallbacks;
bool m_wantsDeathCallbacks;
char gap_c2[2];
@ -92,8 +92,8 @@ protected:
int m_networkedFlags;
char m_nRenderFX;
char m_nRenderMode;
__int16 m_nModelIndex;
int m_clrRender;
short m_nModelIndex;
color32 m_clrRender;
char m_clIntensity;
char gap_e5[3];
int m_desiredHibernationType;
@ -129,8 +129,8 @@ protected:
int m_instanceNameIndex;
char m_scriptName[64];
char m_instanceName[64];
__int64 m_holdUsePrompt;
__int64 m_pressUsePrompt;
string_t m_holdUsePrompt;
string_t m_pressUsePrompt;
float m_attachmentLerpStartTime;
float m_attachmentLerpEndTime;
Vector3D m_attachmentLerpStartOrigin;
@ -143,16 +143,16 @@ protected:
char m_MoveCollide;
char gap_30a[2];
int m_RestoreMoveTypeOnDetach;
int m_hMoveParent;
int m_hMoveChild;
int m_hMovePeer;
EHANDLE m_hMoveParent;
EHANDLE m_hMoveChild;
EHANDLE m_hMovePeer;
bool m_bIsActiveChild;
bool m_bPrevAbsOriginValid;
char gap_31e[2];
int m_descendantZiplineCount;
char gap_324[4];
CCollisionProperty m_Collision;
int m_hOwnerEntity;
EHANDLE m_hOwnerEntity;
int m_CollisionGroup;
int m_contents;
bool m_collideWithOwner;
@ -161,10 +161,10 @@ protected:
char gap_3b4[4];
void* m_pPhysicsObject;
float m_flNavIgnoreUntilTime;
int m_hGroundEntity;
EHANDLE m_hGroundEntity;
float m_flGroundChangeTime;
Vector3D m_vecBaseVelocity;
int m_baseVelocityEnt;
EHANDLE m_baseVelocityEnt;
Vector3D m_vecAbsVelocity;
Vector3D m_vecAngVelocity;
char gap_3f4[12];
@ -188,7 +188,7 @@ protected:
bool m_bClientSideRagdoll;
char m_lifeState;
char gap_49a[2];
int m_scriptNetData;
EHANDLE m_scriptNetData;
int m_phaseShiftFlags;
char m_baseTakeDamage;
char gap_4a5[3];
@ -212,8 +212,8 @@ protected:
Vector3D m_vecViewOffset;
int m_ListByClass;
char gap_57c[4];
void* m_pPrevByClass;
void* m_pNextByClass;
CBaseEntity* m_pPrevByClass;
CBaseEntity* m_pNextByClass;
int m_iInitialTeamNum;
int m_iTeamNum;
int m_teamMemberIndex;
@ -226,7 +226,7 @@ protected:
int m_spawnflags;
float m_flGravity;
float m_entityFadeDist;
int m_dissolveEffectEntityHandle;
EHANDLE m_dissolveEffectEntityHandle;
float m_fadeDist;
string_t m_iSignifierName;
int m_collectedInvalidateFlags;
@ -243,7 +243,7 @@ protected:
char m_ScriptScope[32];
char m_hScriptInstance[8];
string_t m_iszScriptId;
int m_bossPlayer;
EHANDLE m_bossPlayer;
int m_usableType;
int m_usablePriority;
float m_usableDistanceOverride;
@ -257,7 +257,7 @@ protected:
char gap_63d[3];
float m_spottedBeginTimes[128];
float m_spottedLatestTimes[128];
__int64 m_spottedByTeams[4];
i64 m_spottedByTeams[4]; // TODO: team handles are 64bit, create type in SDK
char m_minimapData[88];
int m_shieldHealth;
int m_shieldHealthMax;
@ -271,7 +271,7 @@ protected:
bool m_inWater;
char gap_ad9[7];
void* m_statusEffectPlugin;
__int64 m_realmsBitMask;
i64 m_realmsBitMask;
char m_realmsTransmitMaskCached[16];
int m_realmsTransmitMaskCachedSerialNumber;
};

View File

@ -10,6 +10,7 @@
#include "baseentity.h"
#include "mathlib/mathlib.h"
#include "mathlib/vector4d.h"
#include "mathlib/bitvec.h"
#include "public/studio.h"
#include "public/playerstate.h"
@ -218,7 +219,7 @@ private:
int m_StuckLast;
char gap_5a8c[4];
CPlayerLocalData m_Local;
int m_hColorCorrectionCtrl;
EHANDLE m_hColorCorrectionCtrl;
char gap_5dbc[4];
char m_hTriggerSoundscapeList[32];
CPlayerState pl;
@ -233,24 +234,24 @@ private:
NucleusID_t m_platformUserId;
char m_hardware;
char gap_5ef1[7];
__int64 m_classModsActive;
__int64 m_classModsActiveOld;
i64 m_classModsActive;
i64 m_classModsActiveOld;
char m_classSettings[32];
int m_classSettingsScriptRefCount;
char m_modInventory[128];
__int16 m_consumableInventory[32];
short m_consumableInventory[32];
char gap_5fec[4];
__int64 m_passives[2];
i64 m_passives[2];
int m_bleedoutState;
float m_damageComboLatestUpdateTime;
int m_damageComboStartHealth;
float m_healResources_nextTickTime[10];
float m_healResources_healRatePerSecond[10];
__int16 m_healResources_remainingHeals[10];
__int16 m_healResources_totalHeals[10];
__int16 m_healResources_generation[10];
__int16 m_healResources_refId[10];
int m_healResources_healSource[10];
short m_healResources_remainingHeals[10];
short m_healResources_totalHeals[10];
short m_healResources_generation[10];
short m_healResources_refId[10];
EHANDLE m_healResources_healSource[10];
int m_healResources_healthTarget;
int m_communityId;
int m_nButtons;
@ -271,10 +272,10 @@ private:
bool m_wantedToMatchmake;
bool m_playerWeaponSwitchOnEquipIsDisabled;
char gap_610e[2];
int m_skyCamera;
EHANDLE m_skyCamera;
Vector3D m_originalPlayerOrigin;
int m_playerVehicle;
int m_entitySyncingWithMe;
EHANDLE m_playerVehicle;
EHANDLE m_entitySyncingWithMe;
int m_playerFlags;
bool m_hasMic;
bool m_inPartyChat;
@ -311,7 +312,7 @@ private:
Vector3D m_accumDamageImpulseVel;
float m_accumDamageImpulseTime;
float m_damageImpulseNoDecelEndTime;
int m_hDmgEntity;
EHANDLE m_hDmgEntity;
float m_DmgTake;
int m_bitsDamageType;
int m_bitsHUDDamage;
@ -322,7 +323,7 @@ private:
float m_flDeathAnimTime;
int m_iObserverMode;
int m_iObserverLastMode;
int m_hObserverTarget;
EHANDLE m_hObserverTarget;
Vector3D m_observerModeStaticPosition;
Vector3D m_observerModeStaticAngles;
float m_observerModeStaticFOVOverride;
@ -349,10 +350,10 @@ private:
int m_iConnected;
int m_iPlayerLocked;
int m_gameStats[12];
int m_firstPersonProxy;
int m_predictedFirstPersonProxy;
int m_grappleHook;
int m_petTitan;
EHANDLE m_firstPersonProxy;
EHANDLE m_predictedFirstPersonProxy;
EHANDLE m_grappleHook;
EHANDLE m_petTitan;
int m_petTitanMode;
int m_xp;
int m_generation;
@ -361,15 +362,15 @@ private:
bool m_isPlayingRanked;
char gap_635d[3];
float m_skill_mu;
int m_hardpointEntity;
EHANDLE m_hardpointEntity;
float m_nextTitanRespawnAvailable;
bool m_activeViewmodelModifiers[35];
bool m_activeViewmodelModifiersChanged;
int m_hViewModels[3];
EHANDLE m_hViewModels[3];
CUserCmd m_LastCmd;
CUserCmd* m_pCurrentCommand;
float m_flStepSoundTime;
int m_hThirdPersonEnt;
EHANDLE m_hThirdPersonEnt;
bool m_thirdPersonShoulderView;
char gap_6589[7];
ThirdPersonViewData m_thirdPerson;
@ -438,7 +439,7 @@ private:
bool m_grappleActive;
bool m_grappleNeedWindowCheck;
char gap_67ba[2];
int m_grappleNextWindowHint;
EHANDLE m_grappleNextWindowHint;
int m_landingType;
bool m_slowMoEnabled;
bool m_sliding;
@ -448,8 +449,8 @@ private:
float m_lastSlideBoost;
bool m_ziplineAllowed;
char gap_67d1[3];
int m_activeZipline;
int m_lastZipline;
EHANDLE m_activeZipline;
EHANDLE m_lastZipline;
float m_lastZiplineDetachTime;
bool m_ziplineValid3pWeaponLayerAnim;
char gap_67e1[3];
@ -457,8 +458,8 @@ private:
PlayerZiplineData m_zipline;
Vector3D m_ziplineViewOffsetPosition;
Vector3D m_ziplineViewOffsetVelocity;
int m_ziplineGrenadeEntity;
int m_ziplineGrenadeBeginStationEntity;
EHANDLE m_ziplineGrenadeEntity;
EHANDLE m_ziplineGrenadeBeginStationEntity;
int m_ziplineGrenadeBeginStationAttachmentIndex;
char gap_686c[4];
Player_ViewOffsetEntityData m_viewOffsetEntity;
@ -469,7 +470,7 @@ private:
bool m_detachGrappleOnPlayAnimationEnd;
char gap_6919[3];
int m_playAnimationNext[2];
int m_playAnimationEntityBlocker;
EHANDLE m_playAnimationEntityBlocker;
bool m_playAnimationEntityBlockerCanTeleport;
bool m_playAnimationEntityBlockerDucking;
char gap_692a[2];
@ -506,7 +507,7 @@ private:
float m_lastTimeDidDamageToOtherPlayer;
float m_lastTimeDidDamageToNPC;
char m_predictedTriggers[72];
int m_lastJumpPadTouched;
EHANDLE m_lastJumpPadTouched;
int m_launchCount;
char m_lastBodySound1p[32];
char m_lastBodySound3p[32];
@ -527,27 +528,27 @@ private:
int m_lastUCmdSimulationTicks;
int m_lastUCmdSimulationRemainderTime; // Originally float???
float m_totalExtraClientCmdTimeAttempted;
int m_hPlayerViewEntity;
EHANDLE m_hPlayerViewEntity;
bool m_atLeastOneCommandRunThisServerFrame;
bool m_bGamePaused;
bool m_bPlayerUnderwater;
bool m_wasPhaseShiftedForTriggers;
bool m_bShouldDrawPlayerWhileUsingViewEntity;
char gap_6bf9[3];
int m_hConstraintEntity;
EHANDLE m_hConstraintEntity;
Vector3D m_vecConstraintCenter;
float m_flConstraintRadius;
float m_flConstraintWidth;
float m_flConstraintSpeedFactor;
bool m_bConstraintPastRadius;
char gap_6c19[7];
__int64 m_twitchRewardBits;
CBitVec<64> m_twitchRewardBits;
bool m_twitchRewardsUnfulfilled;
char gap_6c29[3];
float m_lastActiveTime;
float m_flLaggedMovementValue;
float m_lastMoveInputTime;
int m_ignoreEntityForMovementUntilNotTouching;
EHANDLE m_ignoreEntityForMovementUntilNotTouching;
Vector3D m_vNewVPhysicsPosition;
Vector3D m_vNewVPhysicsVelocity;
Vector3D m_vNewVPhysicsWishVel;
@ -556,8 +557,8 @@ private:
Vector3D m_preMoveThinkAbsOrigin;
int m_nBodyPitchPoseParam;
char m_szNetworkIDString[64];
__int64 m_squad;
__int64 m_SquadName;
void* m_squad;
string_t m_SquadName;
char m_gameMovementUtil[56];
float m_flTimeAllSuitDevicesOff;
bool m_bIsStickySprinting;
@ -588,12 +589,12 @@ private:
Vector3D m_viewConeSpecific;
Vector3D m_viewConeRelativeAngleMin;
Vector3D m_viewConeRelativeAngleMax;
int m_hReservedSpawnPoint;
int m_hLastSpawnPoint;
EHANDLE m_hReservedSpawnPoint;
EHANDLE m_hLastSpawnPoint;
MatchMetrics m_matchMetrics;
bool m_autoKickDisabled;
char gap_6e11[3];
int m_stuckCharacter;
EHANDLE m_stuckCharacter;
char m_title[32];
bool sentHUDScriptChecksum;
bool m_bIsFullyConnected;
@ -601,7 +602,7 @@ private:
CTakeDamageInfo m_lastDeathInfo;
char gap_6ebc[4];
PlayerMelee_PlayerData m_melee;
int m_lungeTargetEntity;
EHANDLE m_lungeTargetEntity;
bool m_isLungingToPosition;
char gap_6efd[3];
Vector3D m_lungeTargetPosition;
@ -622,7 +623,7 @@ private:
__int64 m_smartAmmoNextTarget;
__int64 m_smartAmmoPrevTarget;
float m_smartAmmoHighestLocksOnMeFractionValues[4];
int m_smartAmmoHighestLocksOnMeEntities[4];
EHANDLE m_smartAmmoHighestLocksOnMeEntities[4];
float m_smartAmmoPreviousHighestLockOnMeFractionValue;
float m_smartAmmoPendingHighestLocksOnMeFractionValues[4];
char gap_6f94[4];
@ -630,10 +631,10 @@ private:
bool m_smartAmmoRemoveFromTargetList;
char gap_6fb9[3];
int m_delayedFlinchEvents;
__int64 m_delayedFlinchEventCount;
i64 m_delayedFlinchEventCount;
char m_extraWeaponModNames[512];
char m_extraWeaponModNamesArray[64];
__int64 m_extraWeaponModNameCount;
i64 m_extraWeaponModNameCount;
char m_pPlayerAISquad[8];
float m_flAreaCaptureScoreAccumulator;
float m_flCapPointScoreRate;
@ -666,11 +667,11 @@ private:
float m_baseVelocityLastServerTime;
Vector3D m_pushedThisFrame;
Vector3D m_pushedThisSnapshotAccum;
int m_pusher;
EHANDLE m_pusher;
float m_pusherTouchTime;
float m_pusherUntouchTime;
Vector3D m_originRelativeToPusher;
int m_predictingEnts[4];
EHANDLE m_predictingEnts[4];
int m_predictingEntCount;
float m_lastCommandCountWarnTime;
Vector3D m_pushAwayFromTopAcceleration;
@ -688,8 +689,8 @@ private:
PredictableServerEvent m_predictableServerEvents[16];
int m_predictableServerEventCount;
int m_predictableServerEventAcked;
int m_playerScriptNetDataGlobal;
int m_playerScriptNetDataExclusive;
EHANDLE m_playerScriptNetDataGlobal;
EHANDLE m_playerScriptNetDataExclusive;
int m_armorType;
int m_helmetType;
bool m_controllerModeActive;

View File

@ -52,7 +52,7 @@ class CPlayerLocalData
float m_airSlowMoFrac;
int predictableFlags;
int m_bitsActiveDevices;
int m_hSkyCamera;
EHANDLE m_hSkyCamera;
sky3dparams_t m_skybox3d;
CFogParams m_fog;
audioparams_t m_audio;
@ -68,7 +68,7 @@ class CPlayerLocalData
float m_meleePressTime;
int m_meleeDisabledCounter;
int m_meleeInputIndex;
int lastAttacker;
EHANDLE lastAttacker;
int attackedCount;
int m_trackedChildProjectileCount;
bool m_oneHandedWeaponUsage;
@ -80,7 +80,7 @@ class CPlayerLocalData
float m_hotDropImpactTime;
float m_outOfBoundsDeadTime;
int m_objectiveIndex;
int m_objectiveEntity;
EHANDLE m_objectiveEntity;
float m_objectiveEndTime;
int m_cinematicEventFlags;
bool m_forcedDialogueOnly;
@ -120,9 +120,9 @@ class CPlayerLocalData
Vector3D m_playerLocalGravityPoint;
Vector3D m_playerLocalGravityLineStart;
Vector3D m_playerLocalGravityLineEnd;
int m_playerLocalGravityEntity;
int m_playerLocalGravityLineStartEntity;
int m_playerLocalGravityLineEndEntity;
EHANDLE m_playerLocalGravityEntity;
EHANDLE m_playerLocalGravityLineStartEntity;
EHANDLE m_playerLocalGravityLineEndEntity;
float m_playerFloatLookStartTime;
float m_playerFloatLookEndTime;
float m_wallrunLatestFloorHeight;

View File

@ -3,6 +3,7 @@
#include "mathlib/vector.h"
#include "public/studio.h"
#include "public/ihandleentity.h"
#include "predictioncopy.h"
class CAnimationLayer
{
@ -26,7 +27,7 @@ struct PredictedAnimEventData
float m_predictedAnimEventTimes[8];
int m_predictedAnimEventIndices[8];
int m_predictedAnimEventCount;
int m_predictedAnimEventTarget;
EHANDLE m_predictedAnimEventTarget;
int m_predictedAnimEventSequence;
int m_predictedAnimEventModel;
float m_predictedAnimEventsReadyToFireTime;
@ -57,7 +58,7 @@ struct AnimRelativeData
struct Player_AnimViewEntityData
{
void* __vftable;
int animViewEntityHandle;
EHANDLE animViewEntityHandle;
float animViewEntityAngleLerpInDuration;
float animViewEntityOriginLerpInDuration;
float animViewEntityLerpOutDuration;

View File

@ -10,7 +10,7 @@ struct PlayerMelee_PlayerData
bool isSprintAttack;
char gap_f[1];
float attackStartTime;
int attackHitEntity;
EHANDLE attackHitEntity;
float attackHitEntityTime;
float attackLastHitNonWorldEntity;
int scriptedState;

View File

@ -4,7 +4,7 @@
struct Player_ViewOffsetEntityData
{
void* __vftable;
int viewOffsetEntityHandle;
EHANDLE viewOffsetEntityHandle;
float lerpInDuration;
float lerpOutDuration;
bool stabilizePlayerEyeAngles;

View File

@ -26,8 +26,8 @@ class CFogParams
float densityScale;
float halfAngleDeg;
float HDRColorScale;
int distColor;
int dirColor;
color32 distColor;
color32 dirColor;
Vector3D direction;
float minFadeTime;
bool forceOntoSky;

View File

@ -21,8 +21,8 @@ struct GrappleData
float m_grapplePullTime;
float m_grappleAttachTime;
float m_grappleDetachTime;
int m_grappleMeleeTarget;
int m_grappleAutoAimTarget;
EHANDLE m_grappleMeleeTarget;
EHANDLE m_grappleAutoAimTarget;
bool m_grappleHasGoodVelocity;
char gap_6d[3];
float m_grappleLastGoodVelocityTime;

View File

@ -30,10 +30,10 @@ class CTakeDamageInfo
Vector3D m_vecDamageForceDirection;
Vector3D m_vecDamagePosition;
Vector3D m_vecReportedPosition;
int m_hInflictor;
int m_hAttacker;
int m_hWeapon;
__int16 m_hWeaponFileInfo;
EHANDLE m_hInflictor;
EHANDLE m_hAttacker;
EHANDLE m_hWeapon;
short m_hWeaponFileInfo;
bool m_forceKill;
char gap_37[1];
float m_flDamage;

View File

@ -22,10 +22,10 @@ public:
int playerEntityIndex;
char gap_c[4];
__int64 currentClass;
__int64 requestedClass;
__int64 onDeathClass;
__int64 oldClass;
i64 currentClass;
i64 requestedClass;
i64 onDeathClass;
i64 oldClass;
string_t netname;
int fixangle;
QAngle anglechange;