Advertisement
Guest User

Classes

a guest
Dec 21st, 2012
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 165.22 KB | None | 0 0
  1. #ifndef __ClientHeader_h
  2. #define __ClientHeader_h
  3.  
  4. #include <Windows.h>
  5. #include <d3d9.h>
  6. #include <d3dx10.h>
  7. #include <d3d10.h>
  8. #include <d3dx10.h>
  9. #include <d3d11.h>
  10. #include <stddef.h>
  11.  
  12. // Game
  13. #define OFFSET_MAIN             0x022B7790
  14. #define OFFSET_CLIENTGAMECONTEXT        0x02342AE4
  15. #define OFFSET_GAMERENDERER         0x023468B4
  16. #define OFFSET_DXRENDERER           0x232B6E4
  17. #define OFFSET_UPDATEMATRICES           0x6B86F0
  18. #define OFFSET_BORDERINPUTNODE          0x023468F0
  19. #define OFFSET_VISUALUPDATE         0x0117AC20
  20.  
  21. // Draw
  22. #define OFFSET_DBGRENDERER2         0x04B2D70
  23. #define OFFSET_DBGRENDRAWTEXT           0x004B74E0
  24. #define OFFSET_DBGRENDRAW2DLINE         0x004B9850
  25. #define OFFSET_DBGRENDRAWRECTLINE       0x004BA1B0
  26. #define OFFSET_DBGRENDRAWRECT           0x004BA3C0
  27. #define OFFSET_DBGRENDRAWTRIANGLE       0x004BA0F0 
  28. #define OFFSET_DBGRENDRAWSPHERE         0x004B76B0
  29.  
  30. // Old!
  31. #define OFFSET_UPDATEBONES          0xC32BE0 // OLD!
  32. #define OFFSET_MINIMAP              0x6FBCA0 // OLD!
  33. ////////////////////////////////////////////////////////////
  34.  
  35. #define CONCAT_IMPL(x, y) x##y
  36. #define MACRO_CONCAT(x, y) CONCAT_IMPL(x, y)
  37. #define PAD(SIZE) BYTE MACRO_CONCAT(_pad, __COUNTER__)[SIZE];
  38. #define VD( x ) ( x != NULL && HIWORD( x ) )  
  39. #define PI 3.14159265358979323846
  40. #define DEG2RAD(DEG) ((DEG)*((PI)/(180.0)))
  41. #define GET_ORIGIN( v4Out, pMatrix){ v4Out.x = pMatrix._41; v4Out.y = pMatrix._42; v4Out.z = pMatrix._43; v4Out.w=0.f;}
  42. #define GET_X( v4Out, pMatrix) { D3DXVec4Normalize( &v4Out, &D3DXVECTOR4(pMatrix._11,pMatrix._12,pMatrix._13,0.f)); }
  43. #define GET_Y( v4Out, pMatrix) { D3DXVec4Normalize( &v4Out, &D3DXVECTOR4(pMatrix._21,pMatrix._22,pMatrix._23,0.f)); }
  44. #define GET_Z( v4Out, pMatrix) { D3DXVec4Normalize( &v4Out, &D3DXVECTOR4(pMatrix._31,pMatrix._32,pMatrix._33,0.f)); }
  45.  
  46. namespace eastl
  47. {
  48.     template <class T1, class T2>
  49.     class pair
  50.     {
  51.     public:
  52.         T1 first;
  53.         T2 second;
  54.     };
  55.  
  56.     template <class T>
  57.     class vector
  58.     {
  59.     public:
  60.         T* m_firstElement;
  61.         T* m_lastElement;
  62.         T* m_arrayBound;
  63.         LPVOID vftable;
  64.     public:
  65.         UINT Size() { return (((DWORD)m_lastElement - (DWORD)m_firstElement) / 4); }
  66.         T At(INT nIndex) { return *(T*)((DWORD)m_firstElement + (nIndex * sizeof(T))); }
  67.  
  68.         T operator [](INT index) { return At(index); }
  69.     };
  70.  
  71.     template <class T, INT Count, INT PadSize>
  72.     class fixed_vector
  73.     {
  74.     private:
  75.         T* m_firstElement;
  76.         T* m_lastElement;
  77.         T* m_arrayBound;
  78.         LPVOID m_pad[PadSize];
  79.         T m_data[Count];
  80.  
  81.     public:
  82.         UINT Size() { return (((DWORD)m_lastElement - (DWORD)m_firstElement) / 4); }
  83.         T At(INT nIndex) { return *(T*)((DWORD)m_firstElement + (nIndex * sizeof(T))); }
  84.  
  85.         T operator [](INT index) { return At(index); }
  86.     };
  87.  
  88.     template <class T1, class T2>
  89.     class map_node
  90.     {
  91.     public:
  92.         map_node<T1, T2>* m_right;
  93.         map_node<T1, T2>* m_left;
  94.         map_node<T1, T2>* m_parent;
  95.         T1 value1;
  96.         T2 value2;
  97.     };
  98.  
  99.     template <class T1, class T2>
  100.     class map
  101.     {
  102.     public:
  103.         UINT m_Compare;
  104.         map_node<T1, T2>* m_anchorLeft;
  105.         map_node<T1, T2>* m_anchorRight;
  106.         DWORD pad;
  107.         UINT m_size;
  108.         DWORD m_allocator;
  109.     };
  110.  
  111.     template <class T>
  112.     class DequeIterator
  113.     {
  114.     public:
  115.         T** m_current;
  116.         T** m_begin;
  117.         T** m_end;
  118.         PAD(0x4);
  119.     };
  120.  
  121.     template <class T>
  122.     class deque
  123.     {
  124.     public:
  125.         T*** m_array;
  126.         UINT m_count;
  127.         DequeIterator<T> m_begin;
  128.         DequeIterator<T> m_end;
  129.         DWORD allocator;
  130.     };
  131.  
  132.     template <class T>
  133.     class basic_string
  134.     {
  135.     private:
  136.         T* m_firstChar;
  137.         T* m_lastChar;
  138.         T* m_bufferBound;
  139.         LPVOID vftable;
  140.  
  141.     public:
  142.         T* GetString() { return m_firstChar; };
  143.         operator T*(){ return m_firstChar; };
  144.     };
  145. };
  146.  
  147. namespace fb
  148. {
  149.     class Color32
  150.     {
  151.     public:
  152.         union
  153.         {
  154.             struct
  155.             {
  156.                 BYTE R;
  157.                 BYTE G;
  158.                 BYTE B;
  159.                 BYTE A;
  160.             };
  161.             DWORD dwColor;
  162.         };
  163.  
  164.     public:
  165.         Color32(const DWORD _Color)
  166.         {
  167.             dwColor=_Color;
  168.         }
  169.  
  170.         Color32(const BYTE Red,const BYTE Green,const BYTE Blue, const BYTE Alpha)
  171.         {
  172.             A=Alpha;
  173.             R=Red;
  174.             G=Green;
  175.             B=Blue;
  176.         }
  177.     };
  178.  
  179. template <class T> class Tuple2
  180. {
  181.     public:
  182.         T Element1;
  183.         T Element2;
  184.  
  185.     public:
  186.         Tuple2(T _Element1, T _Element2)
  187.         {
  188.             Element1=_Element1;
  189.             Element2=_Element2;
  190.         }
  191. };
  192.  
  193. class InputCache
  194.     {
  195.     public:
  196.     char unknown0[4];
  197.         float flInputBuffer[123];
  198.     };
  199.  
  200.  
  201. class BorderInputNode
  202.     {
  203.     public:
  204.      virtual void Function0();
  205.      virtual void Function1();
  206.      virtual void Function2();
  207.      virtual void Function3();
  208.      virtual void Function4();
  209.      virtual void Function5();
  210.      virtual void Function6();
  211.      virtual void Function7();
  212.      virtual void Function8();
  213.      virtual void Function9();
  214.      virtual void Function10();
  215.      virtual void Function11();
  216.      virtual void Function12();
  217.      virtual void Function13();
  218.      virtual void Function14();
  219.      virtual void Function15();
  220.      virtual void Function16();
  221.      virtual void Function17();
  222.      virtual void Function18();
  223.      virtual void Function19();
  224.      virtual void Function20();
  225.      virtual void Function21();
  226.      virtual void Function22();
  227.      virtual void Function23();
  228.      virtual void Function24();
  229.      virtual void Function25();
  230.      virtual void Function26();
  231.      virtual int preFrameUpdate(float fDeltaTime);
  232. char _0x0004[4];
  233.     InputCache* m_inputCache;//fb::ScopedPtr< InputCache > m_inputCache;
  234.  
  235.     };
  236.  
  237.  
  238. namespace network
  239.     {
  240.         class Ghost
  241.         {
  242.         public:
  243.             LPVOID vftable;             // 0x00
  244.             PAD(0x3C);      // 0x04
  245.         }; // 0x40
  246.  
  247.         class ClientGhost
  248.             : public Ghost      // 0x00
  249.         {
  250.         }; // 0x40
  251.  
  252.         class InterpolationObject
  253.         {
  254.         public:
  255.             PAD(0x14);
  256.         }; // 0x14
  257.  
  258.         template <class T>
  259.         class Interpolator
  260.             : public InterpolationObject        // 0x00
  261.         {
  262.         public:
  263.             eastl::deque<T> m_states;           // 0x14
  264.         }; // 0x40
  265.  
  266.         class INetworkable
  267.         {
  268.         public:
  269.             LPVOID vftable;                     // 0x00
  270.             DWORD m_networkableDescriptorSize;  // 0x04
  271.         }; // 0x08
  272.  
  273.         class IClientNetworkable
  274.             : public INetworkable       // 0x00
  275.         {
  276.         }; // 0x08
  277.  
  278.         class IClientNetworkableGroupMember
  279.             : public IClientNetworkable     // 0x00
  280.         {
  281.         }; // 0x08
  282.  
  283.         class ClientNetworkableGroup
  284.             : public IClientNetworkable
  285.         {
  286.         public:
  287.             eastl::fixed_vector<IClientNetworkableGroupMember*, 32, 1> m_networkables;  // 0x00
  288.         }; // 0x98
  289.     };
  290.  
  291.     template <class T>
  292.     class WeakPtr
  293.     {
  294.     private:
  295.         T** m_ptr;
  296.  
  297.     public:
  298.         T* GetData()
  299.         {
  300.             if(m_ptr == NULL)
  301.                 return NULL;
  302.  
  303.             if(*m_ptr == NULL)
  304.                 return NULL;
  305.  
  306.             return (T*)((DWORD)(*m_ptr) - offsetof(T, m_weakTokenHolder));
  307.         }
  308.     };
  309.  
  310.     template <class T>
  311.     class Array
  312.     {
  313.     public:
  314.         T* m_firstElement;
  315.  
  316.     public:
  317.         T At(INT nIndex)
  318.         {
  319.             //if(m_firstElement == NULL)
  320.                 //return 0;
  321.  
  322.             return *(T*)((DWORD)m_firstElement + (nIndex * sizeof(T)));
  323.         };
  324.  
  325.         T operator [](INT index) { return At(index); }
  326.     };
  327.  
  328.     template <class T>
  329.     class RefArray
  330.     {
  331.     private:
  332.         T** m_array;
  333.  
  334.     public:
  335.         T* At(INT nIndex)
  336.         {
  337.             if(m_array == NULL)
  338.                 return NULL;
  339.  
  340.             return *(T**)((DWORD)m_array + (nIndex * 4));
  341.         }
  342.  
  343.         T* operator [](INT index) { return At(index); }
  344.     };
  345.  
  346.     template <class T>
  347.     class RelocArray
  348.     {
  349.     private:
  350.         UINT m_count;
  351.         T* m_data;
  352.  
  353.     public:
  354.         UINT Size() { return m_count; }
  355.         T At(INT index) { return *(T*)((DWORD)m_data + (index * sizeof(T))); }
  356.         T operator[](INT index) { return At(index); }
  357.     };
  358.  
  359.     class MemoryArena
  360.     {
  361.     public:
  362.         LPVOID vftable;
  363.         INT m_flags;
  364.         MemoryArena* m_front;
  365.     };
  366.  
  367.     class String
  368.     {
  369.     private:
  370.         LPSTR m_string;
  371.  
  372.     public:
  373.         LPSTR GetString() { return m_string; }
  374.         operator LPSTR() { return m_string; }
  375.     };
  376.  
  377.     class Vec2
  378.     {
  379.     public:
  380.         union
  381.         {
  382.             struct
  383.             {
  384.                 FLOAT x;
  385.                 FLOAT y;
  386.             };
  387.  
  388.             FLOAT data[2];
  389.         };
  390.     };
  391.  
  392.  
  393.     class Vec3
  394.     {
  395.     public:
  396.         union
  397.         {
  398.             struct
  399.             {
  400.                 FLOAT x;
  401.                 FLOAT y;
  402.                 FLOAT z;
  403.                 FLOAT w;
  404.             };
  405.  
  406.             FLOAT data[4];
  407.         };
  408.     };
  409.  
  410.     class LinearTransform
  411.     {
  412.     public:
  413.         union
  414.         {
  415.             struct
  416.             {
  417.                 D3DXVECTOR4 left;
  418.                 D3DXVECTOR4 up;
  419.                 D3DXVECTOR4 forward;
  420.                 D3DXVECTOR4 trans;
  421.             };
  422.  
  423.             FLOAT data[4][4];
  424.         };
  425.     };
  426. };
  427.  
  428. typedef D3DXVECTOR4 hkVector4;
  429.  
  430. template <class T>
  431. class hkArray
  432. {
  433. public:
  434.     T** m_data;
  435.     INT m_size;
  436.     INT m_capacityAndFlags;
  437. };
  438.  
  439. class hkBaseObject
  440. {
  441. public:
  442.     LPVOID vftable;     // 0x00
  443. }; // 0x04
  444.  
  445. class hkReferencedObject
  446.     : public hkBaseObject       // 0x00
  447. {
  448. public:
  449.     WORD m_memSizeAndFlags;     // 0x04
  450.     SHORT m_referencedCount;    // 0x06
  451. }; // 0x08
  452.  
  453. class hkpEntityListener
  454. {
  455. public:
  456.     LPVOID vftable;     // 0x00
  457. }; // 0x04
  458.  
  459. class hkpPhantomListener
  460. {
  461. public:
  462.     LPVOID vftable;     // 0x00
  463. }; // 0x04
  464.  
  465. class hkpCharacterProxy
  466.     : public hkReferencedObject,                    // 0x00
  467.     public hkpEntityListener,                       // 0x08
  468.     public hkpPhantomListener                       // 0x0C
  469. {
  470. public:
  471.     hkArray<DWORD> m_manifold;                      // 0x10 hkpRootCdPoint
  472.     hkArray<DWORD> m_bodies;                        // 0x1C hkpRigidBody*
  473.     hkArray<DWORD> m_phantoms;                      // 0x28 hkpPhantom*
  474.     hkArray<DWORD> m_overlappingTriggerVolumes;     // 0x34 hkpTriggerVolume*
  475.     hkVector4 m_velocity;                           // 0x40
  476.     hkVector4 m_oldDisplacement;                    // 0x50
  477.     DWORD m_shapePhantom;                           // 0x60
  478.     FLOAT m_dynamicFriction;                        // 0x64
  479.     FLOAT m_staticFriction;                         // 0x68
  480.     PAD(0x4);                                       // 0x6C
  481.     hkVector4 m_up;                                 // 0x70
  482.     FLOAT m_extraUpStaticFriction;                  // 0x80
  483.     FLOAT m_extraDownStaticFriction;                // 0x84
  484.     FLOAT m_keepDistance;                           // 0x88
  485.     FLOAT m_keepContactTolerence;                   // 0x8C
  486.     FLOAT m_contactAngleSensitivity;                // 0x90
  487.     INT m_userPlanes;                               // 0x94
  488.     FLOAT m_maxCharacterSpeedForSolver;             // 0x98
  489.     FLOAT m_characterStrength;                      // 0x9C
  490.     FLOAT m_characterMass;                          // 0xA0
  491.     hkArray<DWORD> m_listeners;                     // 0xA4 hkpCharacterProxyListener*
  492.     FLOAT m_maxSlopeCosine;                         // 0xB0
  493.     FLOAT m_penetrationRecoverySpeed;               // 0xB4
  494.     INT m_maxCastIterations;                        // 0xB8
  495.     INT m_refreshManifoldInCheckSupport;            // 0xBC
  496. }; // 0xC0
  497.  
  498. class hkpCharacterContext
  499.     : public hkReferencedObject         // 0x00
  500. {
  501. public:
  502.     INT m_characterType;                // 0x08
  503.     DWORD m_stateManager;               // 0x0C hkpCharacterStateManager
  504.     INT m_currentState;                 // 0x10
  505.     INT m_filterEnable;                 // 0x14
  506.     FLOAT m_maxLinearAcceleration;      // 0x18
  507.     FLOAT m_maxLinearVelocity;          // 0x1C
  508.     FLOAT m_gain;                       // 0x20
  509. }; // 0x24
  510.  
  511. class hkpShape
  512.     : public hkReferencedObject     // 0x00
  513. {
  514. public:
  515.     DWORD m_userData;               // 0x08
  516.     INT m_type;                     // 0x0C
  517. }; // 0x10
  518.  
  519. namespace fb
  520. {
  521.     class AimAssist;
  522.     class AimerModifierData;
  523.     class AimingConstraints;
  524.     class AimingPoseData;
  525.     class AmmoConfigData;
  526.     class AmmunitionDepot;
  527.     class AnimatedSoldierWeapon;
  528.     class AnimatedSoldierWeaponOffsetModule;
  529.     class AnimatedSoldierWeaponShootModule;
  530.     class AnimatedSoldierWeaponSpeedModule;
  531.     class AnimatedSoldierWeaponSprintModule;
  532.     class AnimatedSoldierWeaponZoomModule;
  533.     class AnimatedWeaponGS;
  534.     class AnimationConfigurationShootModuleData;
  535.     class Asset;
  536.     class AutoAimData;
  537.     class AxisAlignedBox;
  538.     class BitArray;
  539.     class Blueprint;
  540.     class BoltActionData;
  541.     class BoneCollisionComponent;
  542.     class BoneCollisionComponentData;
  543.     class BoneCollisionData;
  544.     class BreathControlData;
  545.     class Camera;
  546.     class CameraContext;
  547.     class CameraData;
  548.     class CameraManager;
  549.     class CameraScene;
  550.     class CharacterEntity;
  551.     class CharacterEntityData;
  552.     class CharacterPhysicsData;
  553.     class CharacterPhysicsEntity;
  554.     class CharacterPhysicsEntityCallbacks;
  555.     class CharacterPhysicsEntityCollisionShapes;
  556.     class CharacterPhysicsEntityContext;
  557.     class CharacterPhysicsEntityState;
  558.     class CharacterPoseConstraints;
  559.     class CharacterPoseData;
  560.     class CharacterStateData;
  561.     class CharacterStatePoseInfo;
  562.     class ChassisComponent;
  563.     class ClientAimingReplication;
  564.     class ClientAnimatedSoldierWeaponHandler;
  565.     class ClientBoneCollisionComponent;
  566.     class ClientCameraContext;
  567.     class ClientCharacterEntity;
  568.     class ClientChassisComponent;
  569.     class ClientChassisComponentSimulation;
  570.     class ClientChassisComponentReplication;
  571.     class ClientChassisComponentPrediction;
  572.     class ClientComponent;
  573.     class ClientControllableEntity;
  574.     class ClientEntryComponent;
  575.     class ClientGameContext;
  576.     class ClientGameEntity;
  577.     class ClientGameView;
  578.     class ClientGhostAndNetworkableGameEntity;
  579.     class ClientHealthStateEntityManager;
  580.     class ClientLockingController;
  581.     class ClientPartComponent;
  582.     class ClientPhysicsEntity;
  583.     class ClientPlayer;
  584.     class ClientPlayerManager;
  585.     class ClientPlayerManagerPlayer;
  586.     class ClientPlayerView;
  587.     class ClientSoldierAimingSimulation;
  588.     class ClientSoldierEntity;
  589.     class ClientSoldierPrediction;
  590.     class ClientSoldierReplication;
  591.     class ClientSoldierSimulation;
  592.     class ClientSoldierWeapon;
  593.     class ClientSoldierWeaponsComponent;
  594.     class ClientSpawnEntity;
  595.     class ClientSubView;
  596.     class ClientVehicleEntity;
  597.     class ClientVehicleEntityHealth;
  598.     class ClientWeapon;
  599.     class ClientWeaponFiringReplication;
  600.     class ClientWeaponsState;
  601.     class Component;
  602.     class ComponentCollection;
  603.     class ComponentData;
  604.     class ControllableEntity;
  605.     class ControllableEntityData;
  606.     class ControllableFinder;
  607.     class DataBusData;
  608.     class DataContainer;
  609.     class DxRenderer;
  610.     class DynamicBitSet;
  611.     class Entity;
  612.     class EntityBus;
  613.     class EntityBusData;
  614.     class EntityBusPeer;
  615.     class EntityCollectionSegment;
  616.     class EntityCreator;
  617.     class EntityData;
  618.     class EntityWorld;
  619.     class EntryComponent;
  620.     class EntryInput;
  621.     class EntryInputActionMap;
  622.     class EntryInputState;
  623.     class EntryInputTranslator;
  624.     class EventConnection;
  625.     class EyePositionCallback;
  626.     class FireEffectData;
  627.     class FireLogicData;
  628.     class FiringDispersion;
  629.     class FiringDispersionData;
  630.     class FiringFunctionData;
  631.     class FovEffect;
  632.     class FreeCamera;
  633.     class FreeCameraInput;
  634.     class GameContext;
  635.     class GameDataContainer;
  636.     class GameEntity;
  637.     class GameEntityData;
  638.     class GameObjectData;
  639.     class GamePhysicsEntityData;
  640.     class GameRenderer;
  641.     class GameRenderViewParams;
  642.     class GameTime;
  643.     class GameView;
  644.     class GameWorld;
  645.     class HavokAsset;
  646.     class HealthStateEntityManager;
  647.     class HoldAndReleaseData;
  648.     class IClientNetworkableGroupMember;
  649.     class IClientSoldierHealthModule;
  650.     class IGameRenderer;
  651.     class IInputFilter;
  652.     class Input;
  653.     class InputAction;
  654.     class InputActionMap;
  655.     class InputActionMapping;
  656.     class InputActionMappingsData;
  657.     class InputActions;
  658.     class InputNode;
  659.     class IPhysicsRayCaster;
  660.     class IRigidBodyHook;
  661.     class ITypedObject;
  662.     class ITypedObjectWithRefCount;
  663.     class Level;
  664.     class LevelData;
  665.     class LevelDescription;
  666.     class LevelSetup;
  667.     class LevelSetupOption;
  668.     class LinkConnection;
  669.     class LockingController;
  670.     class LockingControllerData;
  671.     class LookConstraintsData;
  672.     class MaterialContainerPair;
  673.     class MaterialGridData;
  674.     class MaterialGridManager;
  675.     class MaterialInteractionGridRow;
  676.     class MaterialRelationPropertyPair;
  677.     class MemoryArena;
  678.     class MessageListener;
  679.     class ObjectBlueprint;
  680.     class OnlineId;
  681.     class OverHeatData;
  682.     class PartComponentData;
  683.     class PathfindingBlob;
  684.     class PhysicsEntity;
  685.     class PhysicsEntityBase;
  686.     class PhysicsEntityData;
  687.     class PhysicsEntityParts;
  688.     class PhysicsEntityUserData;
  689.     class PitchModifier;
  690.     class Player;
  691.     class PlayerData;
  692.     class PlayerManager;
  693.     class PrefabBlueprint;
  694.     class ProjectileBlueprint;
  695.     class ProjectileEntityData;
  696.     class PropertyConnection;
  697.     class PropertyModificationListener;
  698.     class RayCastHit;
  699.     class RecoilData;
  700.     class ReferenceObjectData;
  701.     class RefillableAmmunitionDepot;
  702.     class RenderScreenInfo;
  703.     class RenderView;
  704.     class RenderViewDesc;
  705.     class ShotConfigData;
  706.     class SkeletonAsset;
  707.     class SkeletonCollisionData;
  708.     class SoldierAimAssistData;
  709.     class SoldierAimingEnvironment;
  710.     class SoldierAimingSimulationData;
  711.     class SoldierEntity;
  712.     class SoldierEntityData;
  713.     class SoldierWeaponDispersion;
  714.     class SoldierWeaponsComponent;
  715.     class SpatialEntity;
  716.     class SpatialEntityData;
  717.     class SpatialPrefabBlueprint;
  718.     class SpawnReferenceObjectData;
  719.     class SpeedModifierData;
  720.     class SubLevel;
  721.     class SubView;
  722.     class SubWorldData;
  723.     class SupportedShootingCallback;
  724.     class TargetCameraCallback;
  725.     class TeamEntityData;
  726.     class TeamInfo;
  727.     class Tool;
  728.     class ToolData;
  729.     class VehicleEntity;
  730.     class VehicleEntityHealth;
  731.     class VehicleHealthZoneData;
  732.     class Weapon;
  733.     class WeaponName;
  734.     class WeaponAimingConfigurationModifier;
  735.     class WeaponAimingSimulationModifier;
  736.     class WeaponAnimTypeModifier;
  737.     class WeaponData;
  738.     class WeaponFiring;
  739.     class WeaponFiringCallbackHandler;
  740.     class WeaponFiringCallbacks;
  741.     class WeaponFiringData;
  742.     class WeaponFiringDataModifier;
  743.     class WeaponFiringEffectsModifier;
  744.     class WeaponFiringShooter;
  745.     class WeaponMagazineModifier;
  746.     class WeaponMiscModifierSettings;
  747.     class WeaponModifier;
  748.     class WeaponModifierBase;
  749.     class WeaponOffsetData;
  750.     class WeaponProjectileModifier;
  751.     class WeaponShotModifier;
  752.     class WeaponSoundModifier;
  753.     class WeaponSpeedData;
  754.     class WeaponsState;
  755.     class WeaponSuppressionData;
  756.     class WeaponSway;
  757.     class GunSway;
  758.     class WeaponSwayCallbackImpl;
  759.     class WeaponSwitching;
  760.     class WeaponSwitchingCallbacks;
  761.     class WeaponSwitchingState;
  762.     class WeaponZoomModifier;
  763.     class WorldData;
  764.     class ZoomLevelData;
  765.     class ZoomLevelLockData;
  766.  
  767.     enum SpotType
  768.     {
  769.         SpotType_None ,         // constant 0x0
  770.         SpotType_Active,        // constant 0x1
  771.         SpotType_Passive,       // constant 0x2
  772.         SpotType_Radar,         // constant 0x3
  773.         SpotType_Unspottable,   // constant 0x4
  774.         SpotType_Count          // constant 0x5
  775.     };
  776.  
  777.     enum Realm
  778.     {
  779.         Realm_Client,
  780.         Realm_Server,
  781.         Realm_ClientAndServer,
  782.         Realm_None,
  783.         Realm_Pipeline,
  784.     };
  785.  
  786.     enum ResourceCompartment
  787.     {
  788.         ResourceCompartment_First_,
  789.         ResourceCompartment_Static,
  790.         ResourceCompartment_Frontend,
  791.         ResourceCompartment_LoadingScreen,
  792.         ResourceCompartment_Game,
  793.         ResourceCompartment_HUD,
  794.         ResourceCompartment_Debug,
  795.         ResourceCompartment_Dynamic_Begin_,
  796.         ResourceCompartment_Dynamic_Synchronized_Begin_,
  797.         ResourceCompartment_Dynamic_Synchronized_End_,
  798.         ResourceCompartment_Dynamic_ClientOnly_Begin_,
  799.         ResourceCompartment_Dynamic_ClientOnly_End_,
  800.         ResourceCompartment_Dynamic_End_,
  801.         ResourceCompartment_Count_,
  802.         ResourceCompartment_Forbidden,
  803.     };
  804.  
  805.     enum InputConceptIdentifiers
  806.     {
  807.         ConceptMoveFB,
  808.         ConceptMoveLR,
  809.         ConceptMoveForward,
  810.         ConceptMoveBackward,
  811.         ConceptMoveLeft,
  812.         ConceptMoveRight,
  813.         ConceptYaw,
  814.         ConceptPitch,
  815.         ConceptRoll,
  816.         ConceptRecenterCamera,
  817.         ConceptFire,
  818.         ConceptAltFire,
  819.         ConceptFireCountermeasure,
  820.         ConceptReload,
  821.         ConceptZoom,
  822.         ConceptToggleCamera,
  823.         ConceptSprint,
  824.         ConceptCrawl,
  825.         ConceptToggleWeaponLight,
  826.         ConceptJump,
  827.         ConceptCrouch,
  828.         ConceptCrouchOnHold,
  829.         ConceptProne,
  830.         ConceptInteract,
  831.         ConceptPickUp,
  832.         ConceptDrop,
  833.         ConceptBreathControl,
  834.         ConceptParachute,
  835.         ConceptSwitchInventoryItem,
  836.         ConceptSelectInventoryItem1,
  837.         ConceptSelectInventoryItem2,
  838.         ConceptSelectInventoryItem3,
  839.         ConceptSelectInventoryItem4,
  840.         ConceptSelectInventoryItem5,
  841.         ConceptSelectInventoryItem6,
  842.         ConceptSelectInventoryItem7,
  843.         ConceptSelectInventoryItem8,
  844.         ConceptSelectInventoryItem9,
  845.         ConceptSwitchToPrimaryWeapon,
  846.         ConceptSwitchToGrenadeLauncher,
  847.         ConceptSwitchToStaticGadget,
  848.         ConceptSwitchToDynamicGadget1,
  849.         ConceptSwitchToDynamicGadget2,
  850.         ConceptMeleeAttack,
  851.         ConceptThrowGrenade,
  852.         ConceptCycleFireMode,
  853.         ConceptChangeVehicle,
  854.         ConceptBrake,
  855.         ConceptHandBrake,
  856.         ConceptClutch,
  857.         ConceptGearUp,
  858.         ConceptGearDown,
  859.         ConceptGearSwitch,
  860.         ConceptNextPosition,
  861.         ConceptSelectPosition1,
  862.         ConceptSelectPosition2,
  863.         ConceptSelectPosition3,
  864.         ConceptSelectPosition4,
  865.         ConceptSelectPosition5,
  866.         ConceptSelectPosition6,
  867.         ConceptSelectPosition7,
  868.         ConceptSelectPosition8,
  869.         ConceptCameraPitch,
  870.         ConceptCameraYaw,  
  871.         ConceptMapZoom,
  872.         ConceptMapInnerZoom,
  873.         ConceptMapSize,
  874.         ConceptMapThreeDimensional,
  875.         ConceptScoreboard,
  876.         ConceptMenu,
  877.         ConceptSpawnMenu,
  878.         ConceptCancel,
  879.         ConceptCommMenu1,
  880.         ConceptCommMenu2,
  881.         ConceptCommMenu3,
  882.         ConceptAccept,
  883.         ConceptDecline,
  884.         ConceptSelect,
  885.         ConceptBack,
  886.         ConceptActivate,
  887.         ConceptDeactivate,
  888.         ConceptEdit,
  889.         ConceptView,
  890.         ConceptParentNavigateLeft,
  891.         ConceptParentNavigateRight,
  892.         ConceptMenuZoomIn,
  893.         ConceptMenuZoomOut,
  894.         ConceptPanX,
  895.         ConceptPanY,
  896.         ConceptVoiceFunction1,
  897.         ConceptSayAllChat,
  898.         ConceptTeamChat,
  899.         ConceptSquadChat,
  900.         ConceptSquadLeaderChat,
  901.         ConceptQuicktimeInteractDrag,
  902.         ConceptQuicktimeFire,
  903.         ConceptQuicktimeBlock,
  904.         ConceptQuicktimeFastMelee,
  905.         ConceptQuicktimeJumpClimb,
  906.         ConceptQuicktimeCrouchDuck,
  907.         ConceptFreeCameraMoveUp,
  908.         ConceptFreeCameraMoveDown,
  909.         ConceptFreeCameraMoveLR,
  910.         ConceptFreeCameraMoveFB,
  911.         ConceptFreeCameraRotateX,
  912.         ConceptFreeCameraRotateY,
  913.         ConceptFreeCameraIncreaseSpeed,
  914.         ConceptFreeCameraDecreaseSpeed,
  915.         ConceptFreeCameraFOVModifier,
  916.         ConceptFreeCameraChangeFOV,
  917.         ConceptFreeCameraSwitchSpeed,
  918.         ConceptFreeCameraTurboSpeed,
  919.         ConceptFreeCameraActivator1,
  920.         ConceptFreeCameraActivator2,
  921.         ConceptFreeCameraActivator3,
  922.         ConceptFreeCameraMayaInputActivator,
  923.         ConceptTargetedCameraDistance,
  924.         ConceptTargetedCameraRotateX,
  925.         ConceptTargetedCameraRotateY,
  926.         ConceptTargetedCameraChangeSpeed,
  927.         ConceptLThumb,
  928.         ConceptRThumb,
  929.         ConceptUndefined,
  930.         ConceptSize,
  931.     };
  932.  
  933.     enum InputActionMapSlot
  934.     {
  935.         InputActionMapSlot_Undefined,
  936.         InputActionMapSlot_Root1,
  937.         InputActionMapSlot_Root2,
  938.         InputActionMapSlot_Root3,
  939.         InputActionMapSlot_Root4,
  940.         InputActionMapSlot_Root5,
  941.         InputActionMapSlot_Root6,
  942.         InputActionMapSlot_Root7,
  943.         InputActionMapSlot_Root8,
  944.         InputActionMapSlot_Root9,
  945.         InputActionMapSlot_Root10,
  946.         InputActionMapSlot_Root11,
  947.         InputActionMapSlot_Root12,
  948.         InputActionMapSlot_Root13,
  949.         InputActionMapSlot_Root14,
  950.         InputActionMapSlot_Root15,
  951.         InputActionMapSlot_Root16,
  952.         InputActionMapSlot_Sticks1,
  953.         InputActionMapSlot_Sticks2,
  954.         InputActionMapSlot_Sticks3,
  955.         InputActionMapSlot_Sticks4,
  956.         InputActionMapSlot_Buttons1,
  957.         InputActionMapSlot_Buttons2,
  958.         InputActionMapSlot_Buttons3,
  959.         InputActionMapSlot_Buttons4,
  960.         InputActionMapSlot_Sticks1Buttons1,
  961.         InputActionMapSlot_Sticks1Buttons2,
  962.         InputActionMapSlot_Sticks1Buttons3,
  963.         InputActionMapSlot_Sticks1Buttons4,
  964.         InputActionMapSlot_Sticks2Buttons1,
  965.         InputActionMapSlot_Sticks2Buttons2,
  966.         InputActionMapSlot_Sticks2Buttons3,
  967.         InputActionMapSlot_Sticks2Buttons4,
  968.         InputActionMapSlot_Sticks3Buttons1,
  969.         InputActionMapSlot_Sticks3Buttons2,
  970.         InputActionMapSlot_Sticks3Buttons3,
  971.         InputActionMapSlot_Sticks3Buttons4,
  972.         InputActionMapSlot_Sticks4Buttons1,
  973.         InputActionMapSlot_Sticks4Buttons2,
  974.         InputActionMapSlot_Sticks4Buttons3,
  975.         InputActionMapSlot_Sticks4Buttons4,
  976.         InputActionMapSlot_Count,
  977.     };
  978.  
  979.     enum CameraIds
  980.     {
  981.         NoCameraId,
  982.         FreeCameraId,
  983.         EntryCameraId,
  984.         CameraIdCount,
  985.     };
  986.  
  987.     enum StreamRealm
  988.     {
  989.         StreamRealm_None,
  990.         StreamRealm_Client,
  991.         StreamRealm_Both,
  992.     };
  993.  
  994.     enum PersonViewEnum
  995.     {
  996.         FirstPerson,
  997.         ThirdPerson,
  998.         PersonViewCount,
  999.     };
  1000.  
  1001.     enum PlayerSpawnType
  1002.     {
  1003.         PlayerSpawnType_HumanPlayer,
  1004.         PlayerSpawnType_AiPlayer,
  1005.         PlayerSpawnType_Actor,
  1006.     };
  1007.  
  1008.     enum PersonViewMode
  1009.     {
  1010.         PersonViewMode_FirstPerson,
  1011.         PersonViewMode_ThirdPerson,
  1012.     };
  1013.  
  1014.     enum CharacterPoseType
  1015.     {
  1016.         CharacterPoseType_Stand,
  1017.         CharacterPoseType_Crouch,
  1018.         CharacterPoseType_Prone,
  1019.         CharacterPoseTypeCount,
  1020.     };
  1021.  
  1022.     enum CharacterPoseCollisionType
  1023.     {
  1024.         CharacterPoseCollisionType_Capsule,
  1025.         CharacterPoseCollisionType_Pencil,
  1026.     };
  1027.  
  1028.     enum CharacterStateType
  1029.     {
  1030.         CharacterStateType_OnGround,
  1031.         CharacterStateType_Jumping,
  1032.         CharacterStateType_InAir,
  1033.         CharacterStateType_Climbing,
  1034.         CharacterStateType_Falling,
  1035.         CharacterStateType_User_0,
  1036.         CharacterStateType_User_1,
  1037.         CharacterStateType_User_2,
  1038.         CharacterStateType_User_3,
  1039.         CharacterStateType_User_4,
  1040.         CharacterStateType_User_5,
  1041.         CharacterStateType_StateCount,
  1042.         CharacterStateType_Parachute,
  1043.         CharacterStateType_Swimming,
  1044.         CharacterStateType_AnimationControlled,
  1045.         CharacterStateType_Sliding,
  1046.     };
  1047.  
  1048.     enum SoldierEntityActionState
  1049.     {
  1050.         Jumping,
  1051.         Walking,
  1052.         Sliding,
  1053.         Air,
  1054.         Falling,
  1055.         Parachute,
  1056.         Swim,
  1057.         Climb,
  1058.         AnimationDriven,
  1059.         NumberOfBits,
  1060.     };
  1061.  
  1062.     enum HitReactionType
  1063.     {
  1064.         HRT_Body,
  1065.         HRT_Head,
  1066.         HRT_RightArm,
  1067.         HRT_LeftArm,
  1068.         HRT_RightLeg,
  1069.         HRT_LeftLeg,
  1070.         HRT_Count,
  1071.     };
  1072.  
  1073.     enum EntryInputActionEnum
  1074.     {
  1075.         EIAThrottle,
  1076.         EIAStrafe,
  1077.         EIABrake,
  1078.         EIASwitchPrimaryInventory,
  1079.         EIAYaw,
  1080.         EIAPitch,
  1081.         EIARoll,
  1082.         EIAFire,
  1083.         EIACameraPitch,
  1084.         EIACameraYaw,
  1085.         EIAFireCountermeasure,
  1086.         EIAZoom,
  1087.         EIAJump,
  1088.         EIAChangePose,
  1089.         EIAProne,
  1090.         EIAReload,
  1091.         EIASelectWeapon1,
  1092.         EIASelectWeapon2,
  1093.         EIASelectWeapon3,
  1094.         EIASelectWeapon4,
  1095.         EIASelectWeapon5,
  1096.         EIASelectWeapon6,
  1097.         EIASelectWeapon7,
  1098.         EIASelectWeapon8,
  1099.         EIASelectWeapon9,
  1100.         EIASwitchPrimaryWeapon,
  1101.         EIAGrenadeLauncher,
  1102.         EIAStaticGadget,
  1103.         EIADynamicGadget1,
  1104.         EIADynamicGadget2,
  1105.         EIAMeleeAttack,
  1106.         EIAThrowGrenade,
  1107.         EIASprint,
  1108.         EIACrawlSpeed,
  1109.         EIACycleFireMode,
  1110.         EIAInteract,
  1111.         EIAToggleParachute,
  1112.         EIACycleRadioChannel,
  1113.         EIAToggleCamera,
  1114.         EIAScoreboardMenu,
  1115.         EIAGearUp,
  1116.         EIAGearUpOrToggleWeaponLight,
  1117.         EIAGearDown,
  1118.         EIAGearDownOrExitSupportedShooting,
  1119.         EIAClutch,
  1120.         EIAHandBrake,
  1121.         EIAGiveOrder,
  1122.         EIABreathControl,
  1123.         EIAMapZoom,
  1124.         EIAChangeVehicle,
  1125.         EIAChangeEntry,
  1126.         EIAChangeEntry1,
  1127.         EIAChangeEntry2,
  1128.         EIAChangeEntry3,
  1129.         EIAChangeEntry4,
  1130.         EIAChangeEntry5,
  1131.         EIAChangeEntry6,
  1132.         EIAChangeEntry7,
  1133.         EIAChangeEntry8,
  1134.         EIAThreeDimensionalMap,
  1135.         EIAShowCommoRose,
  1136.         EIAShowLeaderCommoRose,
  1137.         EIAQuicktimeInteractDrag,
  1138.         EIAQuicktimeFire,
  1139.         EIAQuicktimeBlock,
  1140.         EIAQuicktimeFastMelee,
  1141.         EIAQuicktimeJumpClimb,
  1142.         EIAQuicktimeCrouchDuck,
  1143.         EIAUndefined,
  1144.         EIANoInput,
  1145.     };
  1146.  
  1147.     enum WeaponAnimType
  1148.     {
  1149.         WeaponAnimType_NoAddon,
  1150.         WeaponAnimType_Bipod,
  1151.         WeaponAnimType_Foregrip,
  1152.         WeaponAnimType_40mm_GL,
  1153.         WeaponAnimType_40mm_GL_Fire,
  1154.         WeaponAnimType_Underslung_Shotgun,
  1155.         WeaponAnimType_Underslung_Shotgun_Fire,
  1156.         WeaponAnimType_Straight_Pull_Bolt,
  1157.     };
  1158.  
  1159.     enum ZoomLevelActivateEventType
  1160.     {
  1161.         ZoomLevelActivateEventType_Disable,
  1162.         ZoomLevelActivateEventType_Enable,
  1163.         ZoomLevelActivateEventType_ToggleOnLightSwitch,
  1164.     };
  1165.  
  1166.     enum LockType
  1167.     {
  1168.         LockAlways,
  1169.         LockOnRadar,
  1170.         LockOnHeat,
  1171.         LockOnLaserPainted,
  1172.         LockNever,
  1173.         LockTypeCount,
  1174.     };
  1175.  
  1176.     enum WeaponFiringEvent
  1177.     {
  1178.         WeaponFiringEvent_Push,
  1179.         WeaponFiringEvent_Pop,
  1180.         WeaponFiringEvent_PrimaryStartedFiringCallback,
  1181.         WeaponFiringEvent_PrimaryFireCallback,
  1182.         WeaponFiringEvent_PrimaryFireReleaseCallback,
  1183.         WeaponFiringEvent_PrimaryFireShotSpawnedCallback,
  1184.         WeaponFiringEvent_PrimaryFireAutomaticBeginCallback,
  1185.         WeaponFiringEvent_PrimaryFireAutomaticEndCallback,
  1186.         WeaponFiringEvent_PrimaryStoppedFiringCallback,
  1187.         WeaponFiringEvent_ReloadPrimaryCallback,
  1188.         WeaponFiringEvent_ReloadPrimaryEndCallback,
  1189.         WeaponFiringEvent_BoltActionCallback,
  1190.         WeaponFiringEvent_BoltActionEndCallback,
  1191.         WeaponFiringEvent_DetonationSwitchCallback,
  1192.         WeaponFiringEvent_HoldAndReleaseReleaseCallback,
  1193.         WeaponFiringEvent_UpdateRequired,
  1194.     };
  1195.  
  1196.     enum FireLogicType
  1197.     {
  1198.         fltSingleFire,
  1199.         fltSingleFireWithBoltAction,
  1200.         fltAutomaticFire,
  1201.         fltBurstFire,
  1202.         fltHoldAndRelease,
  1203.         fltDetonatedFiring,
  1204.         fltCount,
  1205.     };
  1206.  
  1207.     enum ReloadLogic
  1208.     {
  1209.         rlWeaponSwitchCancelsUnfinishedReload,
  1210.         rlReloadUnaffectedByWeaponSwitch,
  1211.     };
  1212.  
  1213.     enum ReloadType
  1214.     {
  1215.         rtSingleBullet,
  1216.         rtMagazine,
  1217.         rtMagazineWithPossibleShorterReload,
  1218.     };
  1219.  
  1220.     namespace ant
  1221.     {
  1222.         class QuatTransform
  1223.         {
  1224.         public:
  1225.             D3DXVECTOR4 transAndScale;      // 0x00
  1226.             D3DXVECTOR4 rotation;           // 0x10
  1227.         }; // 0x20
  1228.  
  1229.         class UpdatePoseResultData
  1230.         {
  1231.         public:
  1232.             QuatTransform* m_localTransforms;               // 0x00
  1233.             QuatTransform* m_worldTransforms;               // 0x04
  1234.             LPD3DXMATRIX m_renderTransforms;                // 0x08
  1235.             QuatTransform* m_interpolatedLocalTransforms;   // 0x0C
  1236.             QuatTransform* m_interpolatedWorldTransforms;   // 0x10
  1237.             QuatTransform* m_activeWorldTransforms;         // 0x14
  1238.             QuatTransform* m_activeLocalTransforms;         // 0x18
  1239.             INT m_slot;                                     // 0x1C
  1240.             INT m_readerIndex;                              // 0x20
  1241.             CHAR m_validTransforms;                         // 0x24
  1242.             CHAR m_poseUpdateEnabled;                       // 0x25
  1243.             CHAR m_poseNeeded;                              // 0x26
  1244.             PAD(0x1);                                       // 0x27
  1245.         }; // 0x28
  1246.  
  1247.         class AnimationSkeleton
  1248.         {
  1249.         public:
  1250.             class PoseBlock
  1251.             {
  1252.                 QuatTransform* m_localTransforms;               // 0x00
  1253.                 QuatTransform* m_worldTransforms;               // 0x04
  1254.                 LPD3DXMATRIX m_renderTransforms;                // 0x08
  1255.                 QuatTransform* m_interpolatedWorldTransforms;   // 0x0C
  1256.                 QuatTransform* m_interpolatedLocalTransforms;   // 0x10
  1257.                 QuatTransform* m_targetLocalTransforms;         // 0x14
  1258.                 DWORD m_initData;                               // 0x18
  1259.                 DWORD m_blendData;                              // 0x1C
  1260.                 DWORD m_resultData;                             // 0x20
  1261.                 DWORD m_interpolationData;                      // 0x24
  1262.                 DWORD m_interpolationTicks;                     // 0x28
  1263.             }; // 0x2C
  1264.  
  1265.             fb::SkeletonAsset* m_skeletonAsset;                     // 0x00
  1266.             DWORD m_boneCount;                                      // 0x04
  1267.             eastl::vector<LPCSTR> m_unknown;                        // 0x08
  1268.             eastl::vector<LPCSTR> m_boneNames;                      // 0x18
  1269.             DWORD m_sourceBoneCount;                                // 0x28
  1270.             DWORD m_dmaAlignedPoseSize2Comp;                        // 0x2C
  1271.             DWORD m_dmaAlignedPoseSize3Comp;                        // 0x30
  1272.             DWORD m_dmaAlignedPoseSize4Comp;                        // 0x34
  1273.             PAD(0xA4);                                              // 0x38
  1274.             eastl::vector<INT> m_activePoseSlots;                   // 0xDC
  1275.             DWORD m_poseCount;                                      // 0xEC
  1276.             eastl::fixed_vector<PoseBlock*, 16, 2> m_poseBlocks;    // 0xF0
  1277.             CHAR m_hasInterpolationTransforms;                      // 0x144
  1278.             CHAR m_hasRenderTransforms;                             // 0x145
  1279.             PAD(0x2);                                               // 0x146
  1280.         }; // 0x148
  1281.     };
  1282.  
  1283.     class MemberInfoData
  1284.     {
  1285.         public:
  1286.             const char* name;
  1287.     }; 
  1288.  
  1289.   class MemberInfo
  1290.     {
  1291.     public:
  1292.         const MemberInfoData*                        m_infoData;                                        //0004
  1293.     };
  1294.  
  1295.     class TypeInfo : public MemberInfo
  1296.     {
  1297.     public:
  1298.         TypeInfo*                        m_pNext;                                        //0008
  1299.         WORD                        m_uRuntimeId;                                    //000C
  1300.         WORD                        TypeInfo_padding_001;                            //000E
  1301.     };
  1302.  
  1303.     class FieldInfo : public MemberInfo
  1304.     {
  1305.     public:
  1306.         // Undocumented....
  1307.     };
  1308.  
  1309.     class MemberInfoFlags
  1310.     {
  1311.     public:
  1312.         WORD                        uFlags;                                            //0000
  1313.     };
  1314.  
  1315.     class FieldInfoData
  1316.     {
  1317.     public:
  1318.         char*                        name;                                            //0000
  1319.         MemberInfoFlags                flags;                                            //0004
  1320.         WORD                        arraySize;                                        //0006
  1321.         void*                        fieldTypePtr;                                    //0008
  1322.         void*                        secondaryTypePtr;                                //000C
  1323.         int                            fieldOffset;                                    //0010
  1324.         void*                        attributes;                                        //0014
  1325.     };
  1326.  
  1327.     class TypeInfoData
  1328.     {
  1329.     public:
  1330.         char*                        name;                                            //0000
  1331.         MemberInfoFlags                flags;                                            //0004
  1332.         WORD                        totalSize;                                        //0006
  1333.         void*                        module;                                            //0008
  1334.         unsigned char                alignment;                                        //000C
  1335.         unsigned char                fieldCount;                                        //000D
  1336.         unsigned char                version;                                        //000E
  1337.         unsigned char                pad;                                            //000F
  1338.         int                            marshaledSize;                                    //0010
  1339.         void*                        attributes;                                        //0018
  1340.     };
  1341.  
  1342.  
  1343.     class ITypedObject
  1344.     {
  1345.     public:
  1346.         virtual TypeInfo*        getType() = 0;                                    //0008 (V)
  1347.         virtual void                deconstructor() = 0;                            //000C (V)
  1348.         virtual TypeInfo*        doGetDeclaringType() = 0;                        //0010 (V)
  1349.         virtual unsigned int        getFieldCount() = 0;                            //0014 (V)
  1350.         virtual FieldInfo**    getFields( unsigned int *rCount ) = 0;            //0018 (V)
  1351.         virtual FieldInfo*    getField( const char* name ) = 0;                //001C (V)
  1352.         virtual bool                setFieldValue(      ITypedObject* instance,     const char* fieldName,      const char* value,      bool handlePrototypes,      unsigned int *fieldEnum ) = 0;                //0020 (V)
  1353.         virtual bool                getFieldValue(      ITypedObject* instance,     const char* fieldName,      eastl::basic_string< char >* value ) = 0;    //0024 (V)
  1354.         virtual void                visitFields() = 0;                                //0028 (V)
  1355.         virtual MemberInfo**    getMembers( unsigned int *rCount ) = 0;            //002C (V)
  1356.         virtual unsigned int        getMemberCount() = 0;      
  1357.     }; // 0x04
  1358.  
  1359.     class DataContainer
  1360.         : public ITypedObject       // 0x00
  1361.     {
  1362.     public:
  1363.         WORD m_refCnt;              // 0x04
  1364.         WORD m_flags;               // 0x06
  1365.     }; // 0x08
  1366.  
  1367.     class Asset
  1368.         : public DataContainer  // 0x00
  1369.     {
  1370.     public:
  1371.         String m_name;          // 0x08
  1372.     }; // 0x0C
  1373.  
  1374.  
  1375.     struct EntityCollection
  1376.     {
  1377.         EntityCollectionSegment* firstSegment;     // 0x000
  1378.         void* creator;     // 0x004
  1379.     };
  1380.  
  1381.     class GameWorld
  1382.     {
  1383.     public:
  1384.  
  1385.         enum RayCastTest
  1386.         {
  1387.             RCTDetailed = 0,
  1388.             RCTCollision
  1389.         };
  1390.         char                                unknown0[2076]; //0000
  1391.         eastl::vector<EntityCollection>        m_collections;    //0820 - size 16
  1392.         //unsigned char                        pad[16];        //0830
  1393.         //0x840 - IPhysicsRayCaster
  1394.  
  1395.         __declspec(noinline) static GameWorld* Singleton();
  1396.     };
  1397.  
  1398.     class IPhysicsRayCaster
  1399.     {
  1400.          public:
  1401.          virtual bool physicsRayQuery(const char *, D3DXVECTOR4 &, D3DXVECTOR4 &, RayCastHit &, unsigned int, void* PhysicsEntityList);
  1402.          virtual void *asyncPhysicsRayQuery(const char *ident, D3DXVECTOR4 *from, D3DXVECTOR4 *to, unsigned int flags, void *excluded);
  1403.     };
  1404.  
  1405.     class ClientGameWorld : public GameWorld, public IPhysicsRayCaster
  1406.     {
  1407.     public:
  1408.  
  1409.         __declspec(noinline) static ClientGameWorld* Singleton()
  1410.         {
  1411.             return ( ClientGameWorld* ) GameWorld::Singleton();
  1412.         }
  1413.     };
  1414.  
  1415.     class ClientLevel
  1416.     {
  1417.     public:
  1418.         unsigned char                    pad[0xc0];                            //0000
  1419.         //DWORD*                            m_physicsManager;                    //00BC
  1420.         ClientGameWorld*                m_gameWorld;                        //00C0
  1421.     };  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.     class GameContext
  1431.     {
  1432.     public:
  1433.         PAD(8);                                         // 0x00
  1434.         PlayerManager* m_playerManager;                 // 0x08
  1435.         GameTime* m_gameTime;                           // 0x0C
  1436.         ClientLevel* m_level;                           // 0x10
  1437.         MaterialGridManager* m_materialGridManager;     // 0x14
  1438.         DWORD m_animationManager;                       // 0x18 ant::AnimationManager
  1439.         DWORD m_modelAnimationManager;                  // 0x1C ModelAnimationManager
  1440.         DWORD m_blueprintBundleManager;                 // 0x20 BlueprintBundleManager
  1441.         DWORD m_dlcManager;                             // 0x24 DLCManager
  1442.         DWORD m_demoControl;                            // 0x28 DemoControl
  1443.         INT m_realm;                                    // 0x2C
  1444.     }; // 0x30
  1445.  
  1446.     class ClientGameContext
  1447.         : public GameContext                            // 0x00
  1448.     {
  1449.     public:
  1450.         //char                        unknown0[12];            //0000  
  1451.         //void*                        m_gameTime;                //000C
  1452.         //fb::ClientLevel*            m_clientLevel;            //0010
  1453.         //char                        unknown1[10];            //0014
  1454.         fb::ClientPlayerManager*    m_clientPlayerManager;    //0030  
  1455.         //char                        unknown2[80];            //0034
  1456.  
  1457.     public:
  1458.         static ClientGameContext* Singleton()
  1459.         {
  1460.             return *(ClientGameContext**)(OFFSET_CLIENTGAMECONTEXT);
  1461.         }
  1462.     }; // 0x34
  1463.  
  1464.     class PlayerManager
  1465.     {
  1466.     public:
  1467.         LPVOID vftable;                     // 0x00
  1468.         PlayerData* m_playerData;           // 0x04
  1469.         DWORD m_maxPlayerCount;             // 0x08
  1470.         DWORD m_playerCountBitCount;        // 0x0C
  1471.         DWORD m_playerIdBitCount;           // 0x10
  1472.     }; // 0x14
  1473.  
  1474.     class PlayerData
  1475.         : public Asset                              // 0x00
  1476.     {
  1477.     public:
  1478.         DataContainer* m_playerView;                // 0x0C
  1479.         DataContainer* m_inputConceptDefinition;    // 0x10
  1480.         DataContainer* m_inputMapping;              // 0x14
  1481.     }; // 0x18
  1482.  
  1483.     class GameTime
  1484.     {
  1485.     public:
  1486.         DWORD m_ticks;                      // 0x00
  1487.         DWORD m_tickFrequency;              // 0x04
  1488.         DWORD m_tickIndexInFrame;           // 0x08
  1489.         DWORD m_lastTickIndexInFrame;       // 0x0C
  1490.         DWORD m_tickCountInFrame;           // 0x10
  1491.         FLOAT m_deltaTime;                  // 0x14
  1492.         FLOAT m_passedDeltaTimeInFrame;     // 0x18
  1493.         DOUBLE m_time;                      // 0x1C
  1494.         INT m_useVariableDeltaTime;         // 0x24
  1495.     }; // 0x28
  1496.  
  1497.     class SubLevel
  1498.     {
  1499.     public:
  1500.         LPVOID vftable;                                         // 0x00
  1501.         eastl::vector<EntityCollectionSegment*> m_segments;     // 0x04
  1502.         eastl::vector<UINT> m_deletedEntities;                  // 0x14
  1503.         Blueprint* m_subLevelData;                              // 0x24
  1504.         SubLevel* m_parent;                                     // 0x28
  1505.         SubLevel* m_child;                                      // 0x2C
  1506.         SubLevel* m_sibling;                                    // 0x30
  1507.         MemoryArena* m_arena;                                   // 0x34
  1508.         ResourceCompartment m_compartment;                      // 0x38
  1509.         Realm m_realm;                                          // 0x3C
  1510.         INT m_refCount;                                         // 0x40
  1511.         BYTE m_isDestroyed;                                     // 0x44
  1512.         PAD(3);                                 // 0x45
  1513.     }; // 0x48
  1514.  
  1515.     class EntityCollectionSegment
  1516.         : public eastl::vector<Entity*>             // 0x00
  1517.     {
  1518.     public:
  1519.         SubLevel* m_subLevel;                       // 0x10
  1520.         EntityCollectionSegment* m_next;            // 0x14
  1521.         EntityCollectionSegment* m_prev;            // 0x18
  1522.         DWORD m_iterableSize;                       // 0x1C
  1523.         DWORD m_collectionIndex;                    // 0x20
  1524.     }; // 0x24
  1525.  
  1526.     class PropertyModificationListener
  1527.         : public ITypedObject           // 0x00
  1528.     {
  1529.     }; // 0x04
  1530.  
  1531.     class EntityBusPeer
  1532.         : public PropertyModificationListener       // 0x00
  1533.     {
  1534.     }; // 0x04
  1535.  
  1536.     class Entity
  1537.         : public EntityBusPeer          // 0x00
  1538.     {
  1539.     public:
  1540.         DWORD m_weakTokenHolder;        // 0x04
  1541.         DWORD m_flags;                  // 0x08
  1542.     }; // 0x0C
  1543.  
  1544.     class DataBusData
  1545.         : public Asset                                      // 0x00
  1546.     {
  1547.     public:
  1548.         Array<PropertyConnection> m_propertyConnections;    // 0x0C
  1549.         Array<LinkConnection> m_linkConnections;            // 0x10
  1550.     }; // 0x14
  1551.  
  1552.     class PropertyConnection
  1553.     {
  1554.     public:
  1555.         DataContainer* m_source;        // 0x00
  1556.         DataContainer* m_target;        // 0x04
  1557.         INT m_sourceFieldId;            // 0x08
  1558.         INT m_targetFieldId;            // 0x0C
  1559.     }; // 0x10
  1560.  
  1561.     class LinkConnection
  1562.         : public PropertyConnection     // 0x00
  1563.     {
  1564.     }; // 0x10
  1565.  
  1566.     class EntityBusData
  1567.         : public DataBusData                        // 0x00
  1568.     {
  1569.     public:
  1570.         Array<EventConnection> m_eventConnections;  // 0x14
  1571.         DataContainer* m_descriptor;                // 0x18
  1572.         BYTE m_needNetworkid;                       // 0x1C
  1573.         BYTE m_interfaceHasConnections;             // 0x1D
  1574.         BYTE m_hasNetworkedEvents;                  // 0x1E
  1575.         PAD(0x1);                                   // 0x1F
  1576.     }; // 0x20
  1577.  
  1578.     class EventConnection
  1579.     {
  1580.     public:
  1581.         DataContainer* m_source;        // 0x00
  1582.         DataContainer* m_target;        // 0x04
  1583.         INT m_sourceEvent;              // 0x08
  1584.         INT m_targetEvent;              // 0x0C
  1585.         INT m_targetType;               // 0x10
  1586.     }; // 0x14
  1587.  
  1588.     class Blueprint
  1589.         : public EntityBusData          // 0x00
  1590.     {
  1591.     }; // 0x20
  1592.  
  1593.     class LevelSetupOption
  1594.     {
  1595.         String m_criterion;     // 0x00
  1596.         String m_value;         // 0x04
  1597.     }; // 0x08
  1598.  
  1599.     class LevelSetup
  1600.     {
  1601.     public:
  1602.         String m_name;                                  // 0x00
  1603.         Array<LevelSetupOption> m_inclusionOptions;     // 0x04
  1604.         DWORD m_difficultyIndex;                        // 0x08
  1605.         PAD(0xC);                                       // 0x0C
  1606.     }; // 0x18
  1607.  
  1608.     class Level
  1609.         : public SubLevel                               // 0x00
  1610.     {
  1611.     public:
  1612.         GUID m_checksum;                                // 0x48
  1613.         MaterialGridManager* m_materialGridManager;     // 0x58
  1614.         EntityBus* m_entityBus;                         // 0x5C
  1615.         LevelData* m_data;                              // 0x60
  1616.         TeamInfo* m_teamInfo;                           // 0x64
  1617.         LevelSetup m_levelSetup;                        // 0x68
  1618.     }; // 0x80
  1619.  
  1620.     class MaterialGridManager
  1621.     {
  1622.     public:
  1623.         EntityBusData* m_busData;                       // 0x00
  1624.         EntityBus* m_entityBus;                         // 0x04
  1625.         MaterialGridData* m_data;                       // 0x08
  1626.         MaterialContainerPair* m_defaultMaterialPair;   // 0x0C
  1627.         DWORD m_defaultMaterialIndex;                   // 0x10
  1628.     }; // 0x14
  1629.  
  1630.     class EntityBus
  1631.     {
  1632.     public:
  1633.         LPVOID vftable;                         // 0x00
  1634.         SubLevel* m_subLevel;                   // 0x04
  1635.         EntityBus* m_parentBus;                 // 0x08
  1636.         INT m_dataId;                           // 0x0C
  1637.         INT m_refCount;                         // 0x10
  1638.         INT m_networkId;                        // 0x14
  1639.         SHORT m_realm;                          // 0x18
  1640.         CHAR m_parentPropertiesCanChange;       // 0x1A
  1641.         PAD(0x1);                               // 0x1B
  1642.     }; // 0x1C
  1643.  
  1644.     class MaterialGridData
  1645.         : public Asset                                              // 0x00
  1646.     {
  1647.     public:
  1648.         DataContainer* m_defaultMaterial;                           // 0x0C
  1649.         RefArray<MaterialContainerPair> m_materialPairs;            // 0x10
  1650.         Array<UINT> m_materialIndexMap;                             // 0x14
  1651.         DWORD m_defaultMaterialIndex;                               // 0x18
  1652.         Array<MaterialRelationPropertyPair> m_materialProperties;   // 0x1C
  1653.         Array<MaterialInteractionGridRow> m_interactionGrid;        // 0x20
  1654.     }; // 0x24
  1655.  
  1656.     class MaterialContainerPair
  1657.         : public DataContainer          // 0x00
  1658.     {
  1659.     public:
  1660.         DWORD m_flagsAndIndex;          // 0x08
  1661.         BYTE m_physicsPropertyIndex;    // 0x0C
  1662.         BYTE m_physicsMaterialIndex;    // 0x0D
  1663.         PAD(0x2);                       // 0x0E
  1664.     }; // 0x10
  1665.  
  1666.     class MaterialRelationPropertyPair
  1667.     {
  1668.     public:
  1669.         RefArray<DataContainer> m_physicsMaterialProperties;        // 0x00
  1670.         RefArray<DataContainer> m_physicsPropertyProperties;        // 0x04
  1671.     }; // 0x08
  1672.  
  1673.     class MaterialInteractionGridRow
  1674.     {
  1675.     public:
  1676.         RefArray<MaterialRelationPropertyPair> m_items;             // 0x00
  1677.     }; // 0x04
  1678.  
  1679.     class PrefabBlueprint
  1680.         : public Blueprint                      // 0x00
  1681.     {
  1682.         RefArray<GameObjectData> m_objects;     // 0x20
  1683.     }; // 0x24
  1684.  
  1685.     class GameDataContainer
  1686.         : public DataContainer          // 0x00
  1687.     {
  1688.     }; // 0x08
  1689.  
  1690.     class GameObjectData
  1691.         : public GameDataContainer              // 0x00
  1692.     {
  1693.     public:
  1694.         WORD m_indexInBlueprint;                // 0x08
  1695.         BYTE m_isEventConnectionTarget;         // 0x0A
  1696.         BYTE m_isPropertyConnectionTarget;      // 0x0B
  1697.     }; // 0x0C
  1698.  
  1699.     class SpatialPrefabBlueprint
  1700.         : public PrefabBlueprint                // 0x00
  1701.     {
  1702.     }; // 0x24
  1703.  
  1704.     class SubWorldData
  1705.         : public SpatialPrefabBlueprint         // 0x00
  1706.     {
  1707.     public:
  1708.         DataContainer* m_registryContainer;     // 0x24
  1709.         BYTE m_isWin32SubLevel;                 // 0x28
  1710.         BYTE m_isXenonSubLevel;                 // 0x29
  1711.         BYTE m_isPs3SubLevel;                   // 0x2A
  1712.         PAD(0x1);                               // 0x2B
  1713.     }; // 0x2C
  1714.  
  1715.     class WorldData
  1716.         : public SubWorldData                   // 0x00
  1717.     {
  1718.     public:
  1719.         DataContainer* m_runtimeMaterialGrid;   // 0x2C
  1720.     }; // 0x30
  1721.  
  1722.     class PathfindingBlob
  1723.     {
  1724.     public:
  1725.         GUID m_blobId;              // 0x00
  1726.         DWORD m_blobSize;           // 0x10
  1727.         Array<UINT> m_chunkSizes;   // 0x14
  1728.     }; // 0x18
  1729.  
  1730.     class LevelDescription
  1731.     {
  1732.     public:
  1733.         String m_name;                          // 0x00
  1734.         String m_description;                   // 0x04
  1735.         RefArray<DataContainer> m_components;   // 0x08
  1736.         BYTE m_isCoop;                          // 0x0C
  1737.         BYTE m_isMenu;                          // 0x0D
  1738.         BYTE m_isMultiplayer;                   // 0x0E
  1739.         PAD(0x1);                               // 0x0F
  1740.     }; // 0x10
  1741.  
  1742.     class LevelData
  1743.         : public WorldData                              // 0x00
  1744.     {
  1745.     public:
  1746.         DataContainer* m_levelReference;                // 0x30
  1747.         PathfindingBlob m_blob;                         // 0x34
  1748.         DataContainer* m_aiSystem;                      // 0x4C
  1749.         FLOAT m_worldSizeXZ;                            // 0x50
  1750.         LevelDescription m_description;                 // 0x54
  1751.         String m_gameConfigurationName;                 // 0x64
  1752.         DataContainer* m_emitterSystemAsset;            // 0x68
  1753.         RefArray<DataContainer> m_exclusionVolumes;     // 0x6C
  1754.         FLOAT m_defaultFov;                             // 0x70
  1755.         FLOAT m_infantryFovMultiplier;                  // 0x74
  1756.         DWORD m_maxEntityBusNetworkCount;               // 0x78
  1757.         DataContainer* m_soundStates;                   // 0x7C
  1758.         DataContainer* m_voiceOverSystem;               // 0x80
  1759.         RefArray<Asset> m_voiceOverLogic;               // 0x84
  1760.         FLOAT m_maxVehicleHeight;                       // 0x88
  1761.         String m_aerialHeightmapData;                   // 0x8C
  1762.         DataContainer* m_enlightenShaderDatabase;       // 0x90
  1763.         RefArray<Asset> m_antProjectAssets;             // 0x94
  1764.         DataContainer* m_faceAnimationWaveMappings;     // 0x98
  1765.         DataContainer* m_animatedSkeletonDatabase;      // 0x9C
  1766.         RefArray<Asset> m_cameraModes;                  // 0xA0
  1767.         RefArray<DataContainer> m_cameraTransitions;    // 0xA4
  1768.         DataContainer* m_hackForceBuild;                // 0xA8
  1769.         BYTE m_hugeBroadPhase;                          // 0xAC
  1770.         BYTE m_freeStreamingEnable;                     // 0xAD
  1771.         PAD(0x2);                                       // 0xAE
  1772.     }; // 0xB0
  1773.  
  1774.     class TeamInfo
  1775.     {
  1776.     public:
  1777.         TeamEntityData* m_teams[17];            // 0x00
  1778.         UINT m_teamCount;                       // 0x44
  1779.     };
  1780.  
  1781.     class EntityData
  1782.         : public GameObjectData                 // 0x00
  1783.     {
  1784.     }; // 0xC
  1785.  
  1786.     class SpatialEntityData
  1787.         : public EntityData             // 0x00
  1788.     {
  1789.     public:
  1790.         PAD(0x4);                       // 0x0C
  1791.         D3DXMATRIX m_transform; // 0x10
  1792.     }; // 0x50
  1793.  
  1794.     class GameEntityData
  1795.         : public SpatialEntityData              // 0x00
  1796.     {
  1797.     public:
  1798.         RefArray<GameObjectData> m_components;  // 0x50
  1799.         BYTE m_enabled;                         // 0x54
  1800.         BYTE m_runtimeComponentCount;           // 0x55
  1801.         PAD(0xA);                               // 0x56
  1802.     }; // 0x60
  1803.  
  1804.     class TeamEntityData
  1805.         : public GameEntityData         // 0x00
  1806.     {
  1807.     public:
  1808.         DataContainer* m_team;          // 0x60
  1809.         INT m_id;                       // 0x64
  1810.     }; // 0x68
  1811.  
  1812.     class ClientSpottingTargetComponent
  1813.     {
  1814.     public:
  1815.         enum SpotType m_spotType; // this+0x18
  1816.         class WeakPtr<fb::ClientPlayer> m_spotterPlayer; // this+0x1C
  1817.         class WeakPtr<fb::ClientPlayer> m_playerThatOrders; // this+0x20
  1818.         float m_lastOrderTime; // this+0x24
  1819.  
  1820.     }; // fb::ClientSpottingTargetComponent
  1821.  
  1822. class fb::EntryInputState
  1823. {
  1824.  
  1825.         enum SpecialInit
  1826.         {
  1827.            int NoInit;                     // constant 0x0
  1828.         }; // SpecialInit
  1829.  
  1830.         class CharacterMeleeIdentifier
  1831.         {
  1832.                 class fb::WeakPtr<fb::Entity> entity;                     // this+0x0
  1833.                 class fb::network::ClientGhost * clientGhost;  // this+0x4
  1834.         }; // CharacterMeleeIdentifier
  1835.  
  1836.         class CharacterCollisionPos
  1837.         {
  1838.                 class fb::WeakPtr<fb::Entity> entity;                     // this+0x0
  1839.                 class fb::network::ClientGhost * clientGhost;  // this+0x4
  1840.                 struct fb::Vec3 pos;                     // this+0x10
  1841.         }; // CharacterCollisionPos
  1842.  
  1843.         float[0xA] m_analogInput;                     // this+0x10
  1844.         float[0x64] m_downTimes;                     // this+0x38
  1845.         class eastl::bitset<100> m_entryInputActionIsActive; // this+0x1C8
  1846.         unsigned __int64 m_digitalBitFlags;                     // this+0x1D8
  1847.         unsigned int m_customBitFlags;                     // this+0x1E0
  1848.         float m_deltaTime;                     // this+0x1E4
  1849.         float m_timeBehind;                     // this+0x1E8
  1850.         float m_authorativeAimingYaw;                     // this+0x1EC
  1851.         float m_authorativeAimingPitch;                     // this+0x1F0
  1852.         float m_authorativeMovementPenalty;                     // this+0x1F4
  1853.         struct fb::Vec3 m_authoritativeCameraPosition;                     // this+0x200
  1854.         struct fb::Vec3 m_authoritativeMovementPosition;                     //this+0x210
  1855.         struct fb::Vec3 m_authoritativeMovementVelocity;                     //this+0x220
  1856.         struct fb::EntryInputState::CharacterMeleeIdentifier m_characterMeleeIdentifier;                     // this+0x230
  1857.         unsigned int m_characterCollisionCount;                     // this+0x238
  1858.         struct fb::EntryInputState::CharacterCollisionPos[0x4] m_characterCollisionPos;                     // this+0x240
  1859.         unsigned int m_zoomLevel;                     // this+0x2C0
  1860.         unsigned int m_ticks;                     // this+0x2C4
  1861.         unsigned int m_controllableId;                     // this+0x2C8
  1862.         unsigned int m_entryId;                     // this+0x2CC
  1863.         unsigned int m_networkSequenceNumber;                     // this+0x2D0
  1864.         class eastl::bitset<18> m_rawDigital;                     // this+0x2D4
  1865.         struct fb::Vec2 m_rawLeftStick;                     // this+0x2D8
  1866.         struct fb::Vec2 m_rawRightStick;                     // this+0x2E0
  1867.         float m_rawLeftTrigger;                     // this+0x2E8
  1868.         float m_rawRightTrigger;                     // this+0x2EC
  1869.         unsigned int m_clientCameraOrientation;                     // this+0x2F0
  1870.         unsigned int m_isLastTickInFrame;                     // this+0x2F4, len(0x1)
  1871.         unsigned int m_hasClientCameraOrientation;                     // this+0x2F5, len(0x1)
  1872.         unsigned int m_previousAuthoritativeMovementActive;// this+0x2F6, len(0x1)
  1873. }; // fb::EntryInputState
  1874. */
  1875.  
  1876.     class EntryInputState
  1877.     {
  1878.     public:
  1879.         class CharacterMeleeIdentifier
  1880.         {
  1881.         public:
  1882.             WeakPtr<Entity> entity;             // 0x00
  1883.             network::ClientGhost* clientGhost;  // 0x04
  1884.         }; // 0x08
  1885.  
  1886.         class CharacterCollisionPos
  1887.         {
  1888.         public:
  1889.             WeakPtr<Entity> entity;                 // 0x00
  1890.             network::ClientGhost* clientGhost;      // 0x04
  1891.             PAD(0x8);                               // 0x08
  1892.             D3DXVECTOR4 pos;                                // 0x10
  1893.         }; // 0x20
  1894.  
  1895.         LPVOID vftable;                                 // 0x00
  1896.         PAD(0xC);                                       // 0x04
  1897.         FLOAT m_analogInput[10];                        // 0x10
  1898.         FLOAT m_downTimes[100];                         // 0x38
  1899.         PAD(0x24);                                      // 0x1C8
  1900.         FLOAT m_deltaTime;                              // 0x1EC
  1901.         FLOAT m_timeBehind;                             // 0x1F0
  1902.         FLOAT m_authorativeAimingYaw;                   // 0x1F4
  1903.         FLOAT m_authorativeAimingPitch;                 // 0x1F8
  1904.         FLOAT m_authorativeMovementPenalty;             // 0x1FC
  1905.         D3DXVECTOR4 m_authoritativeCameraPosition;              // 0x200
  1906.         D3DXVECTOR4 m_authoritativeMovementPosition;            // 0x210
  1907.         D3DXVECTOR4 m_authoritativeMovementVelocity;            // 0x220
  1908.         CharacterMeleeIdentifier m_meleeIdentifier;     // 0x230
  1909.         PAD(0x4);                                       // 0x238
  1910.         DWORD m_characterCollisionCount;                // 0x23C
  1911.         CharacterCollisionPos m_collisionPos[4];        // 0x240
  1912.         DWORD m_zoomLevel;                              // 0x2C0
  1913.         DWORD m_ticks;                                  // 0x2C4
  1914.         DWORD m_controllableId;                         // 0x2C8
  1915.         DWORD m_entryId;                                // 0x2CC
  1916.         DWORD m_networkSequenceNumber;                  // 0x2D0
  1917.     }; // 0x2D4
  1918.  
  1919.     class EntryInput
  1920.         : public EntryInputState            // 0x00
  1921.     {
  1922.     }; // 0x2D4
  1923.  
  1924.     class Component : public EntityBusPeer                      // 0x00
  1925.     {
  1926.     public:
  1927.         ComponentData* m_data;              // 0x04
  1928.         ComponentCollection* m_collection;  // 0x08
  1929.         PAD(0x4);                           // 0x0C
  1930.     }; // 0x10
  1931.  
  1932.     class ComponentData
  1933.         : public GameObjectData                     // 0x00
  1934.     {
  1935.     public:
  1936.         D3DXMATRIX m_transform;             // 0x10
  1937.         RefArray<GameObjectData> m_components;      // 0x50
  1938.         INT m_excluded;                             // 0x54
  1939.     }; // 0x58
  1940.  
  1941.     class ComponentInfo
  1942.     {
  1943.     public:
  1944.         class Component * component;                     // this+0x0
  1945.         class Component * entry;                     // this+0x4
  1946.         unsigned int flags;                     // this+0x8
  1947.         unsigned int treePrePhysicsUpdateRequiredFlag;                     // this+0x8, len(0x1)
  1948.         unsigned int componentPrePhysicsUpdateRequiredFlag; // this+0x9, len(0x1)
  1949.         unsigned int treePostPhysicsUpdateRequiredFlag;                     // this+0xA, len(0x1)
  1950.         unsigned int componentPostPhysicsUpdateRequiredFlag; // this+0xB, len(0x1)
  1951.         unsigned int treeVisualUpdateRequiredFlag;                     // this+0xC, len(0x1)
  1952.         unsigned int componentVisualUpdateRequiredFlag;                     // this+0xD, len(0x1)
  1953.         unsigned int treeFrameInterpolationUpdateRequiredFlag;   // this+0xE, len(0x1)
  1954.         unsigned int componentFrameInterpolationUpdateRequiredFlag;        // this+0xF, len(0x1)
  1955.         unsigned int wantsToModifyChildrenEntryInput;                     // this+0x10, len(0x1)
  1956.         unsigned int isUpdating;                     // this+0x11, len(0x1)
  1957.         unsigned int worldTransformWentDirtyInUpdate;                     // this+0x12, len(0x1)
  1958.         unsigned int hasCachedBoundingBox;                     // this+0x13, len(0x1)
  1959.         unsigned int cachedBoundingBoxDirty;                     // this+0x14, len(0x1)
  1960.         unsigned int callbackUpdateRequiredChangedEnabled;                     // this+0x15, len(0x1)
  1961.         unsigned int type;                     // this+0x16, len(0x1)
  1962.         unsigned int classId;                     // this+0x17, len(0x10)
  1963.         unsigned char meshIndex;                     // this+0xC
  1964.         unsigned char parentIndex;                     // this+0xD
  1965.         unsigned char totalChildCount;                     // this+0xE
  1966.         unsigned char flags2;                     // this+0xF
  1967.         unsigned char treePostFrameUpdateRequiredFlag;                     // this+0xF, len(0x1)
  1968.         unsigned char componentPostFrameUpdateRequiredFlag;// this+0x10, len(0x1)
  1969.         unsigned char messageHandlerEnabled;                     // this+0x11, len(0x1)
  1970.         unsigned char ownsEntry;                     // this+0x12, len(0x1)
  1971.         unsigned char supportsPrediction;                     // this+0x13, len(0x1)
  1972.         unsigned char hasChildrenThatSupportsPrediction;                     //this+0x14, len(0x1)
  1973.         unsigned char wantsOnPostInitCall;                     // this+0x15, len(0x1)
  1974.     }; // fb::ComponentInfo
  1975.  
  1976.     class ComponentCollection
  1977.     {
  1978.     public:
  1979.         GameEntity* owner;                  // 0x00
  1980.         BYTE playerCount;                   // 0x04
  1981.         BYTE totalCount;                    // 0x05
  1982.         BYTE offsetCount;                   // 0x06
  1983.         PAD(0x1);                           // 0x07
  1984.  
  1985.        
  1986.         ComponentInfo *getInfo( int index )
  1987.         {
  1988.             ComponentInfo *info = (ComponentInfo *)this;
  1989.             return &(info[index + 1]);
  1990.         }
  1991.     }; // 0x08
  1992.  
  1993.     class ClientComponent
  1994.         : public Component      // 0x00
  1995.     {
  1996.     }; // 0x10
  1997.  
  1998.     class WeaponComponent
  1999.     {
  2000.         class WeaponState
  2001.         {
  2002.             unsigned int m_barrelIndex;                     // this+0x0, len(0x4)
  2003.         }; // WeaponState
  2004.         //eastl::vector<D3DXMATRIX,eastl_arena_allocator> m_barrelTransforms;                     // this+0x0
  2005.         PAD(0x10);
  2006.         bool m_isEnabled;                     // this+0x10            
  2007.     }; // fb::WeaponComponent
  2008.  
  2009.     class EntryComponent
  2010.     {
  2011.     public:
  2012.         class WeaponInfo
  2013.         {
  2014.         public:
  2015.             virtual void worldTransform(D3DXMATRIX &);  // V: 0x0
  2016.             virtual void getState(/*class fb::WeaponFiringState &*/);   // V: 0x4
  2017.             virtual void addWeaponFiringCallbacks(fb::WeaponFiringCallbacks *); // V: 0x8
  2018.             virtual void removeWeaponFiringCallbacks(fb::WeaponFiringCallbacks *);  // V: 0xC
  2019.             virtual fb::WeaponFiring * weaponFiring();  // V: 0x10
  2020.             virtual fb::Weapon * weapon();  // V: 0x14
  2021.             virtual WeaponComponent * weaponComponent();    // V: 0x1C
  2022.             virtual void * serverWeaponComponent(); // V: 0x20
  2023.         }; // 0x04
  2024.  
  2025.         class FiringCallbacks
  2026.         {
  2027.         public:
  2028.             LPVOID vftable;             // 0x00
  2029.             EntryComponent* m_entry;    // 0x04
  2030.             WeaponInfo* m_info;         // 0x08
  2031.         }; // 0x0C
  2032.  
  2033.         class Subscriber
  2034.         {
  2035.         public:
  2036.             LPVOID vftable;     // 0x00
  2037.         }; // 0x04
  2038.  
  2039.         LPVOID vftable;                             // 0x00
  2040.         eastl::vector<FiringCallbacks*> m_weapons;  // 0x04
  2041.         eastl::vector<Subscriber*> m_subscribers;   // 0x14
  2042.         PAD(0x4);                                   // 0x24
  2043.     }; // 0x28
  2044.  
  2045.     class MessageListener
  2046.     {
  2047.     public:
  2048.         PAD(0x8);   // 0x00
  2049.     }; // 0x08
  2050.  
  2051.     class ClientEntryComponent
  2052.         : public ClientComponent,                               // 0x00
  2053.         public EntryComponent,                                  // 0x10
  2054.         public network::IClientNetworkable,                     // 0x38
  2055.         public network::Interpolator<LPVOID>,                   // 0x40
  2056.         public MessageListener                                  // 0x80
  2057.     {
  2058.     public:
  2059.         class Camera
  2060.         {
  2061.         public:
  2062.             DWORD camera;               // 0x00
  2063.             DWORD callback;             // 0x04
  2064.             CHAR isFirstPerson;         // 0x08
  2065.             CHAR receivesImpulses;      // 0x09
  2066.             PAD(0x2);                   // 0x0A
  2067.         }; // 0x0C
  2068.  
  2069.         DWORD m_turrentComponent;                               // 0x88
  2070.         PAD(0x4);                                               // 0x8C
  2071.         eastl::vector<EntryInputActionMap*> m_inputActionMaps;  // 0x90
  2072.         EntryInputTranslator* m_inputTranslator;                // 0xA0
  2073.         eastl::vector<Camera> m_cameras;                        // 0xA4
  2074.     }; // 0xB4
  2075.  
  2076.     class InputActionMappingsData
  2077.         : public DataContainer              // 0x00
  2078.     {
  2079.     public:
  2080.         RefArray<DataContainer> m_mappings; // 0x08
  2081.     }; // 0x0C
  2082.  
  2083.     class InputActionMap
  2084.     {
  2085.     public:
  2086.         eastl::vector<InputActions> m_actions;          // 0x00
  2087.     }; // 0x10
  2088.  
  2089.     class InputActions
  2090.     {
  2091.     public:
  2092.         eastl::vector<InputAction> m_inputActions;      // 0x00
  2093.     }; // 0x10
  2094.  
  2095.     class InputAction
  2096.     {
  2097.     public:
  2098.         DataContainer* m_data;                  // 0x00 InputActionData
  2099.         InputConceptIdentifiers m_concept;      // 0x04
  2100.     }; // 0x08
  2101.  
  2102.     class EntryInputActionMap
  2103.         : public InputActionMap             // 0x00
  2104.     {
  2105.     public:
  2106.         LPVOID vftable;                     // 0x10
  2107.         InputActionMapSlot m_slot;          // 0x14
  2108.     }; // 0x18
  2109.  
  2110.     class ClientPlayerView
  2111.         : public network::ClientGhost,                                  // 0x00
  2112.         public network::Interpolator<LPVOID>,                           // 0x40
  2113.         public network::IClientNetworkable                              // 0x80
  2114.     {
  2115.     public:
  2116.         eastl::fixed_vector<ClientSubView*, 4, 2> m_subViews;           // 0x88
  2117.         ClientPlayer* m_owner;                                          // 0xAC
  2118.         eastl::fixed_vector<WeakPtr<ClientPlayer>, 8, 2> m_spectators;  // 0xB0
  2119.         FLOAT m_giveDamageTime;                                         // 0xE4
  2120.         FLOAT m_damageGivenToDamageEntity;                              // 0xE8
  2121.         WeakPtr<ClientVehicleEntity> m_vehicleInteractionEntity;        // 0xEC
  2122.         DWORD m_lastWeaponPickupTick;                                   // 0xF0
  2123.         DWORD m_lastAmmoPickupTick;                                     // 0xF4
  2124.         PAD(0x8);                                                       // 0xF8
  2125.         D3DXVECTOR4 m_soldierHitPosition;                                       // 0x100 Ignore Z
  2126.         D3DXVECTOR4 m_soldierHitDirection;                                      // 0x110 Ignore Z
  2127.         D3DXVECTOR4 m_soldierHitGiverOrigin;                                    // 0x120 Ignore Z
  2128.         D3DXVECTOR4 m_vehicleHitDirection;                                      // 0x130 Ignore Z
  2129.         FLOAT m_soldierHitDamage;                                       // 0x140
  2130.         CHAR m_isBulletDamage;                                          // 0x144
  2131.         CHAR m_hasSuppressedEnemy;                                      // 0x145
  2132.         PAD(0x2);                                                       // 0x146
  2133.         FLOAT m_lockAmount;                                             // 0x148
  2134.         CHAR m_vehicleHitDirectionUpdated;                              // 0x14C
  2135.         CHAR m_squadSpawnAllowed;                                       // 0x14D
  2136.         PAD(0x2);                                                       // 0x14E
  2137.         FLOAT m_spawnIsAllowedTimer;                                    // 0x150
  2138.         FLOAT m_warmUpTimer;                                            // 0x154
  2139.         FLOAT m_timeToRespawn;                                          // 0x158
  2140.         FLOAT m_lastRespawnTime;                                        // 0x15C
  2141.         ClientCameraContext* m_cameraContext;                           // 0x160
  2142.     }; // 0x164
  2143.  
  2144.     class SubView
  2145.         : public ITypedObject           // 0x00
  2146.     {
  2147.     public:
  2148.         DataContainer* m_data;          // 0x04 SubViewData
  2149.     }; // 0x08
  2150.  
  2151.     class ClientSubView
  2152.         : public SubView,                       // 0x00
  2153.         public network::IClientNetworkable      // 0x08
  2154.     {
  2155.     public:
  2156.         ClientPlayerView* m_playerView;         // 0x10
  2157.     }; // 0x14
  2158.  
  2159.     class CameraContext
  2160.     {
  2161.     public:
  2162.         PAD(0x8);           // 0x00
  2163.         D3DXMATRIX m_transform;         // 0x08
  2164.         D3DXMATRIX m_targetTransform;       // 0x48
  2165.         CameraIds m_cameraId;                   // 0x88
  2166.         DWORD m_cameraActivePosition;           // 0x8C
  2167.     }; // 0x90
  2168.  
  2169.     class ClientCameraContext
  2170.         : public network::IClientNetworkable,                       // 0x00
  2171.         public network::Interpolator<LPVOID>,                       // 0x08
  2172.         public CameraContext                                        // 0x48
  2173.     {
  2174.     public:
  2175.         PAD(0x8);                                                   // 0xD8
  2176.         DWORD m_weakTokenHolder;                                    // 0xE0
  2177.         WeakPtr<ClientControllableEntity> m_targetObject;           // 0xE4
  2178.         WeakPtr<ClientControllableEntity> m_targetControllable;     // 0xE8
  2179.         DWORD m_targetEntryId;                                      // 0xEC
  2180.         ClientGameView* m_gameView;                                 // 0xD0
  2181.     }; // 0xD4
  2182.  
  2183.     class TargetCameraCallback
  2184.         : public ITypedObject       // 0x00
  2185.     {
  2186.     }; // 0x04
  2187.  
  2188.     class GameView
  2189.         : public TargetCameraCallback       // 0x00
  2190.     {
  2191.     public:
  2192.         class EntryUnSpawnCallback
  2193.             : public EntryComponent::Subscriber     // 0x00
  2194.         {
  2195.         public:
  2196.             GameView* m_gameView;                   // 0x04
  2197.             EntryComponent* m_entry;                // 0x08
  2198.         }; // 0x0C
  2199.  
  2200.         INT m_currentGameplayCameraId;      // 0x04
  2201.     }; // 0x08
  2202.  
  2203.     class ClientGameView
  2204.         : public GameView,                                                  // 0x00
  2205.         public MessageListener                                              // 0x08
  2206.     {
  2207.     public:
  2208.         enum FreeCameraMode
  2209.         {
  2210.             Static,
  2211.             Follow,
  2212.             LookAt,
  2213.         };
  2214.  
  2215.         D3DXMATRIX m_cameraTargetOffset;                                // 0x10
  2216.         D3DXVECTOR4 m_cameraTargetDistance;                                     // 0x50
  2217.         CameraScene* m_freeCameraScene;                                     // 0x60
  2218.         FreeCamera* m_freeCamera;                                           // 0x64
  2219.         FreeCameraMode m_freeCameraMode;                                    // 0x68
  2220.         INT m_freeCameraPriority;                                           // 0x6C
  2221.         PAD(0x8);                                                           // 0x70
  2222.         ClientEntryComponent* m_inputTarget;                                // 0x78
  2223.         EntryComponent::Subscriber* m_inputUnspawnCallback;                 // 0x7C
  2224.         WeakPtr<ClientGameEntity> m_cameraTarget;                           // 0x80
  2225.         ClientEntryComponent* m_cameraEntryTarget;                          // 0x84
  2226.         GameView::EntryUnSpawnCallback* m_targetEntryUnSpawnCallback;       // 0x88
  2227.         WeakPtr<ClientCameraContext> m_cameraContext;                       // 0x8C
  2228.     }; // 0x90
  2229.  
  2230.     class CameraScene
  2231.     {
  2232.     public:
  2233.         CameraManager* m_manager;                           // 0x00
  2234.         eastl::map<UINT, Camera*> m_cameras;                // 0x04
  2235.         eastl::map_node<UINT, Camera*>* m_activeCamera;     // 0x1C
  2236.     }; // 0x20
  2237.  
  2238.     class CameraManager
  2239.     {
  2240.     public:
  2241.         LPVOID vftable;         // 0x00
  2242.     }; // 0x04
  2243.  
  2244.     class ITypedObjectWithRefCount
  2245.         : public ITypedObject           // 0x00
  2246.     {
  2247.     public:
  2248.         INT m_refCount;                 // 0x04
  2249.     }; // 0x08
  2250.  
  2251.     class FovEffect
  2252.     {
  2253.     public:
  2254.         FLOAT m_fov;            // 0x00
  2255.         FLOAT m_fadeTime;       // 0x04
  2256.         FLOAT m_delay;          // 0x08
  2257.         INT m_active;           // 0x0C
  2258.     }; // 0x10
  2259.  
  2260.     class Camera
  2261.         : public ITypedObjectWithRefCount       // 0x00
  2262.     {
  2263.     public:
  2264.         PAD(0x8);                               // 0x08
  2265.         D3DXMATRIX m_transform;         // 0x10
  2266.         Vec2 m_viewportOffset;                  // 0x50
  2267.         PAD(0x4);                               // 0x58
  2268.         FovEffect m_fovInEffect;                // 0x5C
  2269.         FovEffect m_fovOutEffect;               // 0x6C
  2270.         CameraData* m_data;                     // 0x7C
  2271.         FLOAT m_fov;                            // 0x80
  2272.         FLOAT m_dofFocusDistance;               // 0x84
  2273.     }; // 0x88
  2274.  
  2275.     class CameraData
  2276.         : public GameObjectData             // 0x00
  2277.     {
  2278.     public:
  2279.         D3DXVECTOR4 m_occlusionRayOffset;           // 0x10
  2280.         FLOAT m_shakeFactor;                // 0x20
  2281.         FLOAT m_preFadeTime;                // 0x24
  2282.         FLOAT m_fadeTime;                   // 0x28
  2283.         FLOAT m_fadeWaitTime;               // 0x2C
  2284.         FLOAT m_soundListenerRadius;        // 0x30
  2285.         DataContainer* m_viewFx;            // 0x34
  2286.         FLOAT m_nearPlane;                  // 0x38
  2287.         FLOAT m_soundOcclusion;             // 0x3C
  2288.         INT m_stayFadedWhileStreaming;      // 0x40
  2289.     }; // 0x44
  2290.  
  2291.     class FreeCamera
  2292.         : public Camera                             // 0x00
  2293.     {
  2294.     public:
  2295.         class State
  2296.         {
  2297.         public:
  2298.             FLOAT rotateLeftRight;      // 0x00
  2299.             FLOAT rotateUpDown;         // 0x04
  2300.             FLOAT moveLeftRight;        // 0x08
  2301.             FLOAT moveUpDown;           // 0x0C
  2302.             FLOAT moveReverseForward;   // 0x10
  2303.             FLOAT increaseFov;          // 0x14
  2304.         }; // 0x18
  2305.  
  2306.         PAD(0x8);                                   // 0x88
  2307.         FreeCameraInput* m_currentInput;            // 0x90
  2308.         FreeCameraInput* m_defaultCameraInput;      // 0x94
  2309.         FreeCameraInput* m_editorCameraInput;       // 0x98
  2310.         State m_realState;                          // 0x9C
  2311.         State m_wantedState;                        // 0xB4
  2312.         PAD(0x4);                                   // 0xCC
  2313.         D3DXVECTOR4 m_targetPos;                            // 0xD0
  2314.         FLOAT m_rotateLeftRightHeldDown;            // 0xE0
  2315.         FLOAT m_rotateUpDownHeldDown;               // 0xE4
  2316.         FLOAT m_moveLeftRightHeldDown;              // 0xE8
  2317.         FLOAT m_moveUpDownHeldDown;                 // 0xEC
  2318.         FLOAT m_moveReverseFowardHeldDown;          // 0xF0
  2319.         FLOAT m_increaseFovHeldDown;                // 0xF4
  2320.     }; // 0xF8
  2321.  
  2322.     class Input
  2323.     {
  2324.     public:
  2325.         LPVOID vftable;             // 0x00
  2326.         InputNode* m_inputNode;     // 0x04
  2327.     }; // 0x08
  2328.  
  2329.     class EntryInputTranslator
  2330.         : public Input                          // 0x00
  2331.     {
  2332.     public:
  2333.         EntryInputActionMap* m_inputActionMap;  // 0x08
  2334.         InputActionMappingsData* m_mappingData; // 0x0C
  2335.     }; // 0x10
  2336.  
  2337.     class InputNode
  2338.     {
  2339.     public:
  2340.         LPVOID vftable;         // 0x00
  2341.     }; // 0x04
  2342.  
  2343.     class FreeCameraInput
  2344.         : public Input                      // 0x00
  2345.     {
  2346.     public:
  2347.         PAD(0x8);                           // 0x08
  2348.         D3DXVECTOR4 m_move;                     // 0x10
  2349.         D3DXVECTOR4 m_rotate;                       // 0x20
  2350.         DWORD m_simTickCount;               // 0x30
  2351.         FLOAT m_inverseTick;                // 0x34
  2352.         FLOAT m_fovIncrease;                // 0x38
  2353.         InputActionMapping* m_map;          // 0x3C
  2354.         INT m_moveSpeed;                    // 0x40
  2355.         INT m_rotateSpeed;                  // 0x44
  2356.         CHAR m_hadPostFrame;                // 0x48
  2357.         CHAR m_turboSpeed;                  // 0x49
  2358.         CHAR m_enabled;                     // 0x4A
  2359.         PAD(0x1);                           // 0x4B
  2360.     }; // 0x4C
  2361.  
  2362.     class InputActionMapping
  2363.     {
  2364.     public:
  2365.         eastl::vector<INT> m_mappedActions;     // 0x00
  2366.     }; // 0x10
  2367.  
  2368.     class SpatialEntity
  2369.         : public Entity             // 0x00
  2370.     {
  2371.     public:
  2372.         DWORD m_cullGridId;         // 0x0C
  2373.     }; // 0x10
  2374.  
  2375.     template <class T>
  2376.     class SpatialEntityWithBusAndData
  2377.         : public SpatialEntity              // 0x00
  2378.     {
  2379.     public:
  2380.         EntityBus* m_entityBus;             // 0x10
  2381.         T* m_data;                          // 0x14
  2382.     }; // 0x18
  2383.  
  2384.     class GameEntity
  2385.         : public SpatialEntityWithBusAndData<GameEntityData>    // 0x00
  2386.     {
  2387.     public:
  2388.         DWORD m_updateInterval;                                 // 0x18
  2389.         ComponentCollection* m_collection;                      // 0x1C
  2390.     }; // 0x20
  2391.  
  2392.     class ClientGameEntity
  2393.         : public GameEntity     // 0x00
  2394.     {
  2395.     }; // 0x20
  2396.  
  2397.     template <class T>
  2398.     class GamePhysicsEntity
  2399.         : public T              // 0x00
  2400.     {
  2401.     public:
  2402.         FLOAT m_health;         // sizeof(T)
  2403.     }; // sizeof(T) + 0x04
  2404.  
  2405.     class IRigidBodyHook
  2406.     {
  2407.     public:
  2408.         LPVOID vftable;         // 0x00
  2409.     }; // 0x04
  2410.  
  2411.     class ClientPhysicsEntity
  2412.         : public GamePhysicsEntity<ClientGameEntity>,       // 0x00
  2413.         public IRigidBodyHook                               // 0x24
  2414.     {
  2415.     }; // 0x28
  2416.  
  2417.     template <class T>
  2418.     class ClientGhostGameEntity
  2419.         : public T,                     // 0x00
  2420.         public network::ClientGhost     // sizeof(T)
  2421.     {
  2422.     }; // sizeof(T) + 0x40
  2423.  
  2424.     class ClientGhostAndNetworkableGameEntity
  2425.         : public ClientGhostGameEntity<ClientPhysicsEntity>,    // 0x00
  2426.         public network::IClientNetworkable                      // 0x68
  2427.     {
  2428.     }; // 0x70
  2429.  
  2430.     class ControllableEntity
  2431.     {
  2432.     public:
  2433.         LPVOID vftable;                     // 0x00
  2434.         MaterialContainerPair* m_material;  // 0x04
  2435.         INT m_teamId;                       // 0x08
  2436.         INT m_defaultTeamId;                // 0x0C
  2437.     }; // 0x10
  2438.  
  2439.     class ClientControllableEntity
  2440.         : public ClientGhostAndNetworkableGameEntity,           // 0x00
  2441.         public ControllableEntity                               // 0x70
  2442.     {
  2443.     public:
  2444.         eastl::vector<ClientEntryComponent*> m_entries;         // 0x80
  2445.         DWORD m_currentVelocityNormalizedOut;                   // 0x90 PropertyWriter<FLOAT>
  2446.         DWORD m_currentHealthNormalizedOut;                     // 0x94 PropertyWriter<FLOAT>
  2447.         FLOAT m_oldVelocity;                                    // 0x98
  2448.         FLOAT m_oldHealth;                                      // 0x9C
  2449.         ClientSpawnEntity* m_owner;                             // 0xA0
  2450.         ClientControllableEntity* m_correctionTask;                                 // 0xA4
  2451.         DWORD m_remoteGhostId;                                  // 0xA8
  2452.         DWORD m_correctingEntry;                                // 0xAC
  2453.         CHAR m_predictionEnabled;                               // 0xB0
  2454.         CHAR m_correctionEnabled;                               // 0xB1
  2455.         CHAR m_isCorrecting;                                    // 0xB2
  2456.         PAD(0x1);                                               // 0xB3
  2457.     }; // 0xB4
  2458.  
  2459.     class ReferenceObjectData
  2460.         : public GameObjectData                 // 0x00
  2461.     {
  2462.     public:
  2463.         D3DXMATRIX m_bluprintTransform; // 0x10
  2464.         DataContainer* m_blueprint;             // 0x50
  2465.         DataContainer* m_objectVariation;       // 0x54
  2466.         StreamRealm m_streamRealm;              // 0x58
  2467.         INT m_excluded;                         // 0x5C
  2468.     }; // 0x60
  2469.  
  2470.     class SpawnReferenceObjectData
  2471.         : public ReferenceObjectData
  2472.     {
  2473.     public:
  2474.         D3DXMATRIX m_controllableInput;         // 0x60
  2475.         D3DXMATRIX m_controllableTransform;     // 0xA0
  2476.         FLOAT m_spawnProtectionRadius;                  // 0xE0
  2477.         String m_locationNameSid;                       // 0xE4
  2478.         String m_locationTextSid;                       // 0xE8
  2479.         INT m_teamId;                                   // 0xEC
  2480.         FLOAT m_rotationRoll;                           // 0xF0
  2481.         DWORD m_spawnProtectionFriendlyKilledCount;     // 0xF4
  2482.         FLOAT m_throttle;                               // 0xF8
  2483.         FLOAT m_rotationPitch;                          // 0xFC
  2484.         FLOAT m_initialSpawnDelay;                      // 0x100
  2485.         FLOAT m_spawnDelay;                             // 0x104
  2486.         INT m_maxCount;                                 // 0x108
  2487.         INT m_maxCountSimultaneously;                   // 0x10C
  2488.         INT m_totalCountSimultaneousOfType;             // 0x110
  2489.         FLOAT m_spawnAreaRadius;                        // 0x114
  2490.         FLOAT m_rotationYaw;                            // 0x118
  2491.         FLOAT m_spawnProtectionFriendlyKilledTime;      // 0x11C
  2492.         INT m_takeControlEntryIndex;                    // 0x120
  2493.         CHAR m_lockedTeam;                              // 0x124
  2494.         CHAR m_autoSpawn;                               // 0x125
  2495.         CHAR m_onlySendEventForHumanPlayers;            // 0x126
  2496.         CHAR m_clearBangersOnSpawn;                     // 0x127
  2497.         CHAR m_tryToSpawnOutOfSight;                    // 0x128
  2498.         CHAR m_sendWeaponEvents;                        // 0x129
  2499.         CHAR m_takeControlOnTransformChange;            // 0x12A
  2500.         CHAR m_returnControlOnIdle;                     // 0x12B
  2501.         CHAR m_useAsSpawnPoint;                         // 0x12C
  2502.         CHAR m_initialAutoSpawn;                        // 0x12D
  2503.         CHAR m_enabled;                                 // 0x12E
  2504.         CHAR m_spawnProtectionCheckAllTeams;            // 0x12F
  2505.     };
  2506.  
  2507.     class ClientSpawnEntity
  2508.         : public SpatialEntityWithBusAndData<SpawnReferenceObjectData>,     // 0x00
  2509.         network::ClientGhost,                                               // 0x18
  2510.         network::IClientNetworkable                                         // 0x58
  2511.     {
  2512.     public:
  2513.         class Interpolator
  2514.             : public network::Interpolator<LPVOID>  // 0x00
  2515.         {
  2516.         public:
  2517.             ClientSpawnEntity* m_spawnEntity;       // 0x40
  2518.         }; // 0x44
  2519.  
  2520.         class ControllableListener
  2521.         {
  2522.         public:
  2523.             LPVOID vftable;     // 0x00
  2524.         }; // 0x04
  2525.  
  2526.         eastl::vector<ClientControllableEntity*> m_spawnedControllables;    // 0x60
  2527.         EntityBus* m_peerSubBus;                                            // 0x70
  2528.         DWORD m_controllableTransform;                                      // 0x74 PropertyWriter<D3DXMATRIX>
  2529.         PAD(0x8);                                                           // 0x78
  2530.         D3DXMATRIX m_transform;                                     // 0x80
  2531.         Interpolator m_interpolator;                                        // 0xC0
  2532.         INT m_teamId;                                                       // 0xC4
  2533.         INT m_enabled;                                                      // 0xC8
  2534.         eastl::vector<ControllableListener> m_controllableListeners;        // 0xCC
  2535.     }; // 0xDC
  2536.  
  2537.     class GameAnimatable
  2538.     {
  2539.     public:
  2540.         //BYTE pad_001[0xC4];
  2541.         //Animatable * m_animatable; // this+0xC4
  2542.         //BYTE pad_001[0x1F0];
  2543.         //AnimationManager * m_animationManager; // this+0x1F0
  2544.         BYTE pad_001[0xD0];
  2545.         bool m_hadVisualUpdate;  // this+0xD0
  2546.     };
  2547.  
  2548.     class ClientAntAnimatableComponent
  2549.     {
  2550.     public:
  2551.         BYTE pad_001[0x20];
  2552.         GameAnimatable m_handler;
  2553.         //BYTE pad_002[0x8];
  2554.         //PoseProviderWithUpdate* m_PoseProviderUpdater;
  2555.     };
  2556.  
  2557.     class CharacterEntity
  2558.     {
  2559.     public:
  2560.         virtual FLOAT yaw();                                    // V:00
  2561.         virtual FLOAT pitch();                                    // V:04
  2562.         virtual BOOL isVisible();                                // V:08
  2563.         virtual BOOL isAlive();                                    // V:0C
  2564.         virtual BOOL isDead();                                    // V:10
  2565.         virtual BOOL isDying();                                    // V:14
  2566.         virtual FLOAT getHealth();                                // V:18
  2567.         virtual FLOAT maxHealth();                                // V:1C
  2568.         virtual BOOL isAIPlayer();                                // V:20
  2569.         virtual BOOL isSingleplayer();                            // V:24
  2570.         virtual VOID getPhysicsInfoForAnimation(LPVOID, LPVOID); // V:28
  2571.         virtual BOOL isInVehicle();                                // V:2C
  2572.     }; // 0x04
  2573.  
  2574.     class ClientCharacterEntity
  2575.         : public ClientControllableEntity,              // 0x00
  2576.         public CharacterEntity                          // 0xB4
  2577.     {
  2578.     public:
  2579.         ClientPlayer *m_player;                         // 0xB8
  2580.         ClientAntAnimatableComponent *m_animatableComponent[2];                 // 0xBC
  2581.         DWORD m_collisionComponent;                     // 0xC4
  2582.         DWORD m_healthComponent;                        // 0xC8
  2583.         WORD m_lightProbeHandle;                        // 0xCC
  2584.         PAD(0x2);                                       // 0xCE
  2585.         eastl::vector<IInputFilter*> m_inputFilters;    // 0xD0
  2586.         DWORD m_hasLocalPlayer;                         // 0xE0
  2587.         PersonViewEnum m_activeView;                    // 0xE4
  2588.         Entity** m_ownedEntities;                       // 0xE8
  2589.         WORD m_ownedEntityCount;                        // 0xEC
  2590.         CHAR m_mustBeRemotePlayer;                      // 0xEE
  2591.         PAD(0x1);                                       // 0xEF
  2592.     }; // 0xF0
  2593.  
  2594.     class IInputFilter
  2595.     {
  2596.     public:
  2597.         LPVOID vftable;     // 0x00
  2598.     }; // 0x04
  2599.  
  2600.     class GamePhysicsEntityData
  2601.         : public GameEntityData             // 0x00
  2602.     {
  2603.     public:
  2604.         DataContainer* m_physicsData;       // 0x60
  2605.     }; // 0x64
  2606.  
  2607.     class ControllableEntityData
  2608.         : public GamePhysicsEntityData          // 0x00
  2609.     {
  2610.     public:
  2611.         PAD(0x8);                               // 0x64
  2612.         INT m_defaultTeam;                      // 0x6C
  2613.         FLOAT m_lowHealthThreshold;             // 0x70
  2614.         PAD(0x4);                               // 0x74
  2615.         DataContainer* m_materialPair;          // 0x78
  2616.         PAD(0x4);                               // 0x7C
  2617.     }; // 0x80
  2618.  
  2619.     class CharacterEntityData
  2620.         : public ControllableEntityData         // 0x00
  2621.     {
  2622.     public:
  2623.         PlayerSpawnType m_playerSpawnType;      // 0x80
  2624.         PersonViewMode m_defaultViewMode;       // 0x84
  2625.         PAD(8);     // 0x88
  2626.     };
  2627.  
  2628.     class SoldierEntityData
  2629.         : public CharacterEntityData            // 0x00
  2630.     {
  2631.     public:
  2632.         PAD(0x10);                              // 0x90
  2633.         D3DXVECTOR4 m_fLIRKeyColor;                     // 0xA0
  2634.         DataContainer* m_headMaterialPair;      // 0xB0
  2635.         DataContainer* m_boneFakePhysics;       // 0xB4
  2636.         DataContainer* m_autoAim;               // 0xB8
  2637.         DataContainer* m_aimingConstraints;     // 0xBC
  2638.         DataContainer* m_headCollision;         // 0xC0
  2639.         DataContainer* m_characterPhysics;      // 0xC4
  2640.         DataContainer* m_footMaterialPair;      // 0xC8
  2641.         DataContainer* m_sprintSettings;        // 0xCC
  2642.         DataContainer* m_meshes1p;              // 0xD0
  2643.         DataContainer* m_meshes3p;              // 0xD4
  2644.         DataContainer* m_hidableMeshParts;      // 0xD8
  2645.         DataContainer* m_sound;                 // 0xDC
  2646.         DataContainer* m_streamGroup1p;         // 0xE0
  2647.         FLOAT m_impulseReactionTime;            // 0xE4
  2648.         DataContainer* m_healthModule;          // 0xE8
  2649.         FLOAT m_maxHealth;                      // 0xEC
  2650.         DataContainer* m_collisionInfo;         // 0xF0
  2651.         DataContainer* m_voiceOverInfo;         // 0xF4
  2652.         FLOAT m_fLIRValue;                      // 0xF8
  2653.         DataContainer* m_breathControl;         // 0xFC
  2654.         FLOAT m_explosionDamageModifier;        // 0x100
  2655.         DataContainer* m_uiParts;               // 0x104
  2656.         FLOAT m_regenerationDelayModifier;      // 0x108
  2657.         CHAR m_freeSpaceCheck;                  // 0x10C
  2658.         CHAR m_proximityCheck;                  // 0x10D
  2659.         CHAR m_enableGroundmapLighting;         // 0x10E
  2660.         CHAR m_showWeaponWhenDead;              // 0x10F
  2661.         CHAR m_lowerGunOnOwnTeam;               // 0x110
  2662.         CHAR m_useSpineXRotation;               // 0x111
  2663.         CHAR m_collisionEnabled;                // 0x112
  2664.         CHAR m_physicsControlled;               // 0x113
  2665.         CHAR m_humanPlayerControlled;           // 0x114
  2666.         CHAR m_interactiveManDownAllowed;       // 0x115
  2667.         CHAR m_showNametag;                     // 0x116
  2668.     };
  2669.  
  2670.     class AutoAimData
  2671.     {
  2672.     public:
  2673.         D3DXVECTOR4 m_autoAimOuterBoxOffset;         // 0x00
  2674.         D3DXVECTOR4 m_autoAimOuterBoxExtends;        // 0x10
  2675.         D3DXVECTOR4 m_autoAimInnerBoxOffset;         // 0x20
  2676.         D3DXVECTOR4 m_autoAimInnerBoxExtends;        // 0x30
  2677.         CharacterPoseType   m_poseType;      // 0x40
  2678.     };
  2679.  
  2680.     class SupportedShootingCallback
  2681.     {
  2682.     public:
  2683.         LPVOID vftable;         // 0x00
  2684.     }; // 0x04
  2685.  
  2686.     class EyePositionCallback
  2687.     {
  2688.     public:
  2689.         LPVOID vftable;         // 0x00
  2690.     }; // 0x04
  2691.  
  2692.     class PhysicsEntityUserData
  2693.     {
  2694.     public:
  2695.         DWORD mmaterialIndices;     // 0x00
  2696.         DWORD materialFlags;        // 0x04
  2697.         DWORD partsEnabled;         // 0x08
  2698.         DWORD flags;                // 0x0C
  2699.         FLOAT mass;                 // 0x10
  2700.         WORD partCount;             // 0x14
  2701.         BYTE materialCount;         // 0x16
  2702.         BYTE pad;                   // 0x17
  2703.     }; // 0x18
  2704.  
  2705.     class PhysicsEntityBase
  2706.         : public SpatialEntity                      // 0x00
  2707.     {
  2708.     public:
  2709.         PhysicsEntityUserData m_physicsUserData;    // 0x10
  2710.         PAD(0x8);                                   // 0x28
  2711.         ITypedObject* m_userData;                   // 0x30
  2712.         DWORD m_em;                                 // 0x34 SpatialQueryManager
  2713.         DWORD* m_manager;                           // 0x38 HavokPhysicsManager
  2714.         DWORD* m_hook;                              // 0x3C HavokRigidBodyHook
  2715.         PAD(0x8);                                   // 0x40
  2716.         CHAR m_isAddedToEntityGrid;                 // 0x48
  2717.         PAD(0xF);                                   // 0x49
  2718.     }; // 0x58
  2719.  
  2720.     class CharacterPhysicsEntity
  2721.         : public PhysicsEntityBase                                  // 0x00
  2722.     {
  2723.     public:
  2724.         class CharacterInput
  2725.         {
  2726.         public:
  2727.             D3DXVECTOR4 m_forwardVector;        // 0x00
  2728.             D3DXVECTOR4 m_upVector;         // 0x10
  2729.             D3DXVECTOR4 m_characterGravity; // 0x20
  2730.             FLOAT m_waterLevel;         // 0x30
  2731.             FLOAT m_speedScale;         // 0x34
  2732.             FLOAT m_yaw;                // 0x38
  2733.             FLOAT m_pitch;              // 0x3C
  2734.             FLOAT m_forwardInput;       // 0x40
  2735.             FLOAT m_strafeInput;        // 0x44
  2736.             FLOAT m_sprintMultiplier;   // 0x48
  2737.             CHAR m_tryJump;             // 0x4C
  2738.             CHAR m_changePose;          // 0x4D
  2739.             CHAR m_toggleParachute;     // 0x4E
  2740.             CHAR m_sprint;              // 0x4F
  2741.             LPVOID m_userData;          // 0x50
  2742.         }; // 0x54
  2743.  
  2744.         class CharacterPhysicsEntityPos
  2745.         {
  2746.         public:
  2747.             WeakPtr<CharacterPhysicsEntity> entity;     // 0x00
  2748.             PAD(0xC);                                   // 0x04
  2749.             D3DXVECTOR4 pos;                                    // 0x10
  2750.         }; // 0x20
  2751.  
  2752.         PAD(0x8);                       // 0x58
  2753.         hkpCharacterProxy* m_characterProxy;                        // 0x60
  2754.         CharacterPhysicsEntityContext* m_characterContext;          // 0x64
  2755.         DWORD m_stateManager;                                       // 0x68
  2756.         DWORD m_phantom;                                            // 0x6C
  2757.         D3DXMATRIX* m_gameWorldTransform;                       // 0x70
  2758.         DWORD m_listener;                                           // 0x74
  2759.         PAD(0x4);                                                   // 0x78
  2760.         CharacterPoseType m_currentPose;                            // 0x7C
  2761.         CharacterPoseType m_changingToPose;                         // 0x80
  2762.         FLOAT m_poseTransitionTimer;                                // 0x84
  2763.         CharacterPhysicsEntityCollisionShapes* m_collisionShapes;   // 0x88
  2764.         CharacterPoseConstraints* m_poseConstraints;                // 0x8C
  2765.         CHAR m_enabled;                                             // 0x90
  2766.         CHAR m_isPhysicsControlled;                                 // 0x91
  2767.         CHAR m_aiBodyAddedToWorld;                                  // 0x92
  2768.         PAD(0xD);                                                   // 0x93
  2769.         D3DXVECTOR4 m_currentLocalEyePosition;                              // 0xA0
  2770.         FLOAT m_mass;                                               // 0xB0
  2771.         CharacterPhysicsData* m_data;                               // 0xB4
  2772.         eastl::fixed_vector<CharacterPoseData*, 3, 2> m_poseData;   // 0xB8
  2773.         PAD(0x8);                                                   // 0xD0
  2774.         EntityBusPeer* m_transformNode;                             // 0xD8
  2775.         DWORD m_rbProxy;                                            // 0xDC
  2776.         DWORD m_aiBody;                                             // 0xE0
  2777.         DWORD m_contactMaterialIndex;                               // 0xE4
  2778.         FLOAT m_dynamicFriction;                                    // 0xE8
  2779.         FLOAT m_staticFriction;                                     // 0xEC
  2780.         MaterialContainerPair* m_characterMaterials;                // 0xF0
  2781.         DWORD m_characterMaterialFlags;                             // 0xF4
  2782.         PAD(0x8);                                                   // 0xF8
  2783.         D3DXVECTOR4 m_ladderPosition;                                       // 0x100
  2784.         PAD(0x10);                                                  // 0x110
  2785.         CharacterInput m_characterInput;                            // 0x120
  2786.         PAD(0x1C);                                                  // 0x174
  2787.         CharacterPhysicsEntityPos m_adjustedEntity[4];              // 0x190
  2788.         DWORD m_adjustCount;                                        // 0x210
  2789.     }; // 0x214
  2790.  
  2791.     class SoldierEntity
  2792.     {
  2793.     public:
  2794.         LPVOID vftable;                                             // 0x00
  2795.         PAD(0xC);                                                   // 0x04
  2796.         SoldierEntityData* m_soldierData;                           // 0x10
  2797.         AutoAimData* m_autoAimData[3];                              // 0x14
  2798.         INT m_overrideLookAt;                                       // 0x20
  2799.         PAD(0xC);                                                   // 0x24
  2800.         D3DXVECTOR4 m_lookTarget;                                           // 0x30
  2801.         FLOAT m_headRotationSpeed;                                  // 0x40
  2802.         INT m_allowedToMoveEyes;                                    // 0x44
  2803.         FLOAT m_waterLevelUpdateTimer;                              // 0x48
  2804.         PAD(0x4);                                                   // 0x4C
  2805.         D3DXVECTOR4 m_hitDirection;                                     // 0x50
  2806.         MaterialContainerPair* m_headMaterial;                      // 0x60
  2807.         Component* m_space;                                         // 0x64
  2808.         SupportedShootingCallback* m_supportedShootingCallback;     // 0x68
  2809.         EyePositionCallback* m_eyePositionCallback;                 // 0x6C
  2810.         FLOAT m_maxHealth;                                          // 0x70
  2811.         CharacterPhysicsEntity* m_characterPhysicsentity;           // 0x74
  2812.         PAD(0x8);                                                   // 0x78
  2813.         CharacterPhysicsEntity::CharacterInput m_characterInput;    // 0x80
  2814.         PAD(0xC);                                                   // 0xD4
  2815.         INT m_beingInteractedStatus;                                // 0xE0
  2816.         FLOAT m_waterLevel;                                         // 0xE4
  2817.         CHAR m_entryPoseEnabled;                                    // 0xE8
  2818.         CHAR m_physicsControlled;                                   // 0xE9
  2819.         CHAR m_isShielded;                                          // 0xEA
  2820.         PAD(0x1);                                                   // 0xEB
  2821.         CharacterEntity* m_character;                               // 0xEC
  2822.     }; // 0xF0
  2823.  
  2824.     class CharacterPhysicsEntityContext
  2825.         : public hkpCharacterContext                            // 0x00
  2826.     {
  2827.     public:
  2828.         class ParachuteContext
  2829.         {
  2830.         public:
  2831.             D3DXMATRIX m_transformWS;       // 0x00
  2832.             D3DXMATRIX m_unknown;           // 0x40
  2833.             D3DXVECTOR4 m_parachuteOffset;              // 0x80
  2834.             FLOAT m_time;                       // 0x90
  2835.             INT m_initialized;                  // 0x94
  2836.         }; // 0x98
  2837.  
  2838.         PAD(0xC);                                               // 0x24
  2839.         ParachuteContext m_parachuteContext;                    // 0x30
  2840.         PAD(0x8);                                               // 0xC8
  2841.         D3DXVECTOR4 m_ladderNorm;                                       // 0xD0
  2842.         CharacterPhysicsEntityCallbacks* m_callbackHandler;     // 0xE0
  2843.         CharacterPhysicsEntity* m_entity;                       // 0xE4
  2844.         DWORD m_ladder;                                         // 0xE8
  2845.         FLOAT m_timeToJump;                                     // 0xEC
  2846.         FLOAT m_jumpDelay;                                      // 0xF0
  2847.         FLOAT m_stamina;                                        // 0xF4
  2848.         FLOAT m_jumpPenaltyFactor;                              // 0xF8
  2849.         FLOAT m_forceToGroundTimer;                             // 0xFC
  2850.         DWORD m_jumpCount;                                      // 0x100
  2851.         CHAR m_applyLandingPenalty;                             // 0x104
  2852.         CHAR m_sprinting;                                       // 0x105
  2853.         CHAR m_sprintHold;                                      // 0x106
  2854.         CHAR m_jumpInProgress;                                  // 0x107
  2855.     };
  2856.  
  2857.     class CharacterPhysicsEntityCallbacks
  2858.     {
  2859.     public:
  2860.         LPVOID vftable;             // 0x00
  2861.     }; // 0x04
  2862.  
  2863.     class AxisAlignedBox
  2864.     {
  2865.     public:
  2866.         D3DXVECTOR4 min;            // 0x00
  2867.         D3DXVECTOR4 max;            // 0x10
  2868.     }; // 0x20
  2869.  
  2870.     class CharacterPhysicsEntityCollisionShapes
  2871.     {
  2872.     public:
  2873.         hkpShape* m_shapes[3];
  2874.         PAD(0xC);
  2875.         AxisAlignedBox m_aabbs[3];
  2876.     };
  2877.  
  2878.     class CharacterPoseConstraints
  2879.     {
  2880.     public:
  2881.         LPVOID vftable;         // 0x00
  2882.         CHAR m_validPoses[4];   // 0x04
  2883.     }; // 0x08
  2884.  
  2885.     class CharacterPhysicsData
  2886.         : public Asset                              // 0x00
  2887.     {
  2888.     public:
  2889.         RefArray<CharacterPoseData> m_poses;        // 0x0C
  2890.         RefArray<CharacterStateData> m_states;      // 0x10
  2891.         CharacterStateType m_defaultState;          // 0x14
  2892.         DataContainer* m_sprint;                    // 0x18
  2893.         DataContainer* m_materialPair;              // 0x1C
  2894.         INT m_pushableObjectWeight;                 // 0x20
  2895.         FLOAT m_mass;                               // 0x24
  2896.         FLOAT m_maxAscendAngle;                     // 0x28
  2897.         FLOAT m_physicalRadius;                     // 0x2C
  2898.         FLOAT m_waterDepthLimit;                    // 0x30
  2899.         FLOAT m_inputAcceleration;                  // 0x34
  2900.         FLOAT m_ladderAcceptAngle;                  // 0x38
  2901.         FLOAT m_ladderAcceptAnglePitch;             // 0x3C
  2902.         FLOAT m_jumpPenaltyTime;                    // 0x40
  2903.         FLOAT m_jumpPenaltyFactor;                  // 0x44
  2904.         FLOAT m_speedPenaltyOnDamage;               // 0x48
  2905.     }; // 0x4C
  2906.  
  2907.     class LookConstraintsData
  2908.     {
  2909.     public:
  2910.         FLOAT m_minLookYaw;         // 0x00
  2911.         FLOAT m_maxLookYaw;         // 0x04
  2912.         FLOAT m_minLookPitch;       // 0x08
  2913.         FLOAT m_maxLookPitch;       // 0x0C
  2914.     }; // 0x10
  2915.  
  2916.     class CharacterPoseData
  2917.         : public DataContainer                          // 0x00
  2918.     {
  2919.     public:
  2920.         PAD(0x8);                                       // 0x08
  2921.         D3DXVECTOR4 m_eyePosition;                              // 0x10
  2922.         D3DXVECTOR4 m_collisionBoxMaxExpand;                    // 0x20
  2923.         D3DXVECTOR4 m_collisionBoxMinExpand;                    // 0x30
  2924.         FLOAT m_height;                                 // 0x40
  2925.         FLOAT m_stepHeight;                             // 0x44
  2926.         Array<Vec2> m_throttleModifierCurve;            // 0x48
  2927.         CharacterPoseType m_poseType;                   // 0x4C
  2928.         CharacterPoseCollisionType m_collisionType;     // 0x50
  2929.         LookConstraintsData m_lookConstraints;          // 0x54
  2930.     }; // 0x64
  2931.  
  2932.     class CharacterStateData
  2933.         : public DataContainer                          // 0x00
  2934.     {
  2935.     public:
  2936.         RefArray<CharacterStatePoseInfo> m_poseInfo;    // 0x08
  2937.     }; // 0x0C
  2938.  
  2939.     class SpeedModifierData
  2940.     {
  2941.     public:
  2942.         FLOAT m_forwardConstant;        // 0x00
  2943.         FLOAT m_backwardConstant;       // 0x04
  2944.         FLOAT m_leftConstant;           // 0x08
  2945.         FLOAT m_rightConstant;          // 0x0C
  2946.     }; // 0x10
  2947.  
  2948.     class CharacterStatePoseInfo
  2949.         : public DataContainer              // 0x00
  2950.     {
  2951.     public:
  2952.         CharacterPoseType m_poseType;       // 0x08
  2953.         FLOAT m_velocity;                   // 0x0C
  2954.         FLOAT m_accelerationGain;           // 0x10
  2955.         FLOAT m_decelerationGain;           // 0x14
  2956.         FLOAT m_sprintGain;                 // 0x18
  2957.         FLOAT m_sprintMultiplier;           // 0x1C
  2958.         SpeedModifierData m_speedModifier;  // 0x20
  2959.     };  // 0x30
  2960.  
  2961.     class ClientSoldierEntity
  2962.         : public ClientCharacterEntity,                                 // 0x00
  2963.         public SoldierEntity,                                           // 0xF0
  2964.         public network::Interpolator<LPVOID>,                           // 0x1E0
  2965.         public CharacterPhysicsEntityCallbacks                          // 0x220
  2966.     {
  2967.     public:
  2968.         class PersonView
  2969.         {
  2970.         public:
  2971.             eastl::vector<DWORD> m_meshModels;      // 0x00 MeshModel*
  2972.             DWORD m_weaponBoneIndex;                // 0x10
  2973.         }; // 0x14
  2974.  
  2975.         class BreathControlHandler
  2976.         {
  2977.         public:
  2978.             BreathControlData* m_data;                  // 0x00
  2979.             FLOAT m_breathControlTimer;                 // 0x04
  2980.             FLOAT m_breathControlMultiplier;            // 0x08
  2981.             FLOAT m_breathControlPenaltyTimer;          // 0x0C
  2982.             FLOAT m_breathControlPenaltyMultiplier;     // 0x10
  2983.             BYTE m_breathControlActive;                 // 0x14 Lower two bits set if active
  2984.             PAD(0x3);                                   // 0x15
  2985.         }; // 0x18
  2986.  
  2987.         class SprintInputHandler
  2988.         {
  2989.         public:
  2990.             enum State
  2991.             {
  2992.                 WaitForward,
  2993.                 WaitReleaseForward,
  2994.                 DoubleTapSprint,
  2995.                 ButtonSprint,
  2996.                 WaitReleaseButtonSprint,
  2997.                 PostSprint,
  2998.             };
  2999.  
  3000.             State m_currentState;           // 0x00
  3001.             FLOAT m_doubleTapTimer;         // 0x04
  3002.             FLOAT m_sprintReleaseTimer;     // 0x08
  3003.             INT m_waitForSprintRelease;     // 0x0C
  3004.         }; // 0x10
  3005.  
  3006.         PAD(0x10);                                                      // 0x224
  3007.         Blueprint* m_blueprint;                                         // 0x234
  3008.         ClientSoldierPrediction* m_predictedController;                 // 0x238
  3009.         ClientSoldierReplication* m_replicatedController;               // 0x23C
  3010.         DWORD m_vegetationInfo;                                         // 0x240
  3011.         PAD(0x4);                                                       // 0x244
  3012.         FLOAT m_movementPenalty;                                        // 0x248
  3013.         FLOAT m_clearMovementTimer;                                     // 0x24C
  3014.         DWORD m_customizationComponent;                                 // 0x250
  3015.         INT m_received1pHint;                                           // 0x254
  3016.         DWORD m_cameraComponent;                                        // 0x258
  3017.         MaterialContainerPair* m_footMaterial;                          // 0x25C
  3018.         PersonView m_personViews[2];                                    // 0x260
  3019.         eastl::vector<DWORD> m_hiddenBones;                             // 0x288
  3020.         FLOAT m_authorativeYaw;                                         // 0x298
  3021.         PAD(0x4);                                                       // 0x29C
  3022.         INT m_aimingenabled;                                            // 0x2A0
  3023.         FLOAT m_authorativePitch;                                       // 0x2A4
  3024.         DWORD m_soldierSound;                                           // 0x2A8
  3025.         PAD(0x4);                                                       // 0x2AC
  3026.         D3DXMATRIX m_meshTransform;                                     // 0x2B0
  3027.         SoldierEntityActionState m_oldActionState;                      // 0x2F0
  3028.         CharacterPoseType m_previousPose;                               // 0x2F4
  3029.         PAD(0x3C);                                                      // 0x2F8
  3030.         DWORD m_proximityHook;                                          // 0x334
  3031.         DWORD m_orientationCallback;                                    // 0x338
  3032.         PAD(0x8);                                                       // 0x33C
  3033.         IClientSoldierHealthModule* m_healthModule;                     // 0x344
  3034.         FLOAT m_deathTimer;                                             // 0x348
  3035.         ClientSoldierWeaponsComponent* m_soldierWeaponsComponent;       // 0x34C
  3036.         DWORD m_bodyComponent;                                          // 0x350
  3037.         ClientBoneCollisionComponent* m_boneCollisionComponent;         // 0x354
  3038.         PAD(0x8);                                                       // 0x358
  3039.         BreathControlHandler* m_breathControlHandler;                   // 0x360
  3040.         SprintInputHandler* m_sprintInputHandler;                       // 0x364
  3041.         EntryInputActionEnum m_sprintInterruptAction;                   // 0x368
  3042.         FLOAT m_sprintRecoveryTimer;                                    // 0x36C
  3043.         byte m_wasSprinting;                                            // 0x370
  3044.         byte m_isOccluded;                                              // 0x371
  3045.         PAD(0x6);                                                       // 0x372
  3046.         FLOAT m_criticalHealthThreshold;                                // 0x378
  3047.  
  3048.         template<typename T>
  3049.         T *getComponent( std::string name )
  3050.         {
  3051.                     if( !m_collection || !(( m_flags >> 15 ) & 1 ) )
  3052.                         return NULL;
  3053.                     for( int i = 0; i < m_collection->totalCount; i++ ) {
  3054.                         ComponentInfo *info = m_collection->getInfo( i );
  3055.                         if( !info || !info->flags >> 15 || !info->component )
  3056.                             continue;
  3057.  
  3058.                         TypeInfo *tinfo = info->component->getType( );
  3059.                         if( !std::string( tinfo->m_infoData->name ).compare( name ) ) {
  3060.                             return (T *)info->component;
  3061.                         }
  3062.                     }
  3063.                     return NULL;
  3064.         }
  3065.     }; // 0x37C
  3066.  
  3067.     class BreathControlData
  3068.         : public DataContainer                      // 0x00
  3069.     {
  3070.     public:
  3071.         FLOAT m_breathControlTime;                  // 0x08
  3072.         FLOAT m_breathControlReleaseTime;           // 0x0C
  3073.         FLOAT m_breathControlPenaltyMultiplier;     // 0x10
  3074.         FLOAT m_breathControlPenaltyTimeout;        // 0x14
  3075.     }; // 0x18
  3076.  
  3077.     class ClientSoldierSimulation
  3078.     {
  3079.     public:
  3080.         LPVOID vftable;                                 // 0x00
  3081.         CharacterPhysicsEntity* m_characterEntity;      // 0x04
  3082.     }; // 0x08
  3083.  
  3084.     class CharacterPhysicsEntityState
  3085.     {
  3086.     public:
  3087.         D3DXVECTOR4 m_parachuteRotation;                // 0x00
  3088.         FLOAT m_parachuteDeployTime;            // 0x10
  3089.         PAD(0xC);                               // 0x14
  3090.         D3DXVECTOR4 m_position;                     // 0x20
  3091.         D3DXVECTOR4 m_surfaceVelocity;                  // 0x30
  3092.         D3DXVECTOR4 m_linearVelocity;                   // 0x40
  3093.         D3DXVECTOR4 m_groundNormal;                 // 0x50
  3094.         DWORD m_pose;                           // 0x60
  3095.         DWORD m_changingToPose;                 // 0x64
  3096.         FLOAT m_transitionTimer;                // 0x68
  3097.         DWORD m_currentState;                   // 0x6C
  3098.         BYTE m_enabled;                         // 0x70
  3099.         PAD(0xF);                               // 0x71
  3100.         D3DXVECTOR4 m_localEyePosition;             // 0x80
  3101.         DWORD m_groundSupported;                // 0x90
  3102.         FLOAT m_groundHeight;                   // 0x94
  3103.         FLOAT m_timeToJump;                     // 0x98
  3104.         FLOAT m_stamina;                        // 0x9C
  3105.         FLOAT m_ladderHeightClimbed;            // 0xA0
  3106.         FLOAT m_ladderTransitionProgress;       // 0xA4
  3107.         PAD(0x44);                              // 0xA8
  3108.         DWORD m_contactMaterialIndex;           // 0xEC
  3109.         FLOAT m_jumpPenaltyFactor;              // 0xF0
  3110.         DWORD m_jumpCounter;                    // 0xF4
  3111.         FLOAT m_forceToGroundTimer;             // 0xF8
  3112.         CHAR m_jumpInProgress;                  // 0xFC
  3113.         CHAR m_applyLandingPenalty;             // 0xFD
  3114.         CHAR m_sprinting;                       // 0xFE
  3115.         CHAR m_sprintHold;                      // 0xFF
  3116.     }; // 0x100
  3117.  
  3118.     class ClientSoldierPrediction
  3119.         : public ClientSoldierSimulation,               // 0x00
  3120.         public IInputFilter                             // 0x08
  3121.     {
  3122.     public:
  3123.         class DeltaState
  3124.         {
  3125.         public:
  3126.             D3DXVECTOR4 position;       // 0x00
  3127.             D3DXVECTOR4 velocity;       // 0x10
  3128.             D3DXVECTOR4 eyePosition;    // 0x20
  3129.         }; // 0x30
  3130.  
  3131.         PAD(0x4);                                       // 0x0C
  3132.         DeltaState m_correctionDelta;                   // 0x10
  3133.         DeltaState m_frameCorrectionDelta;              // 0x40
  3134.         D3DXVECTOR4 m_velocity;                             // 0x70
  3135.         FLOAT m_correctionInterpolationTime;            // 0x80
  3136.         FLOAT m_correctionInterpolationTimer;           // 0x84
  3137.         FLOAT m_frameInterpolationFactor;               // 0x88
  3138.         INT m_noInterpolateNextCorrection;              // 0x8C
  3139.         CharacterPhysicsEntityState* m_currentState;    // 0x90
  3140.         PAD(0xC);                                       // 0x94
  3141.         CharacterPhysicsEntityState m_predictionState;  // 0xA0
  3142.         CharacterPhysicsEntityState m_correctionState;  // 0x1A0
  3143.         SoldierEntityActionState m_actionState;         // 0x2A0
  3144.     }; // 0x2A4
  3145.  
  3146.     class ClientSoldierReplication
  3147.         : public ClientSoldierSimulation    // 0x00
  3148.     {
  3149.     public:
  3150.         class State
  3151.         {
  3152.         public:
  3153.             D3DXVECTOR4 parachuteRotation;          // 0x00
  3154.             D3DXVECTOR4 position;                   // 0x10
  3155.             D3DXVECTOR4 surfaceVelocity;            // 0x20
  3156.             D3DXVECTOR4 velocity;                   // 0x30
  3157.             D3DXVECTOR4 groundNormal;               // 0x40
  3158.             DWORD groundSupported;          // 0x50
  3159.             DWORD groundMaterialIndex;      // 0x54
  3160.             INT state;                      // 0x58
  3161.             INT pose;                       // 0x5C
  3162.             INT changingToPose;             // 0x60
  3163.             PAD(0x4);                       // 0x64
  3164.             FLOAT groundHeight;             // 0x68
  3165.             FLOAT ladderHeightClimbed;      // 0x6C
  3166.             FLOAT ladderHeightLeft;         // 0x70
  3167.             PAD(0x4);                       // 0x74
  3168.             INT actionState;                // 0x78
  3169.         }; // 0x7C
  3170.  
  3171.         DWORD m_interpolator;           // 0x08
  3172.         PAD(0x4);                       // 0x0C
  3173.         State m_state;                  // 0x10
  3174.     }; // 0x8C
  3175.  
  3176.     class IClientSoldierHealthModule
  3177.     {
  3178.     public:
  3179.         LPVOID vftable;     // 0x00
  3180.     }; // 0x04
  3181.  
  3182.     class BoneCollisionComponent
  3183.     {
  3184.     public:
  3185.         enum Bone
  3186.         {
  3187.             Bone_RightShoulder,
  3188.             Bone_LeftShoulder,
  3189.             Bone_Pelvis,
  3190.             Bone_Head,
  3191.             Bone_RightThigh,
  3192.             Bone_LeftThigh,
  3193.             Bone_RightKnee,
  3194.             Bone_LeftKnee,
  3195.             Bone_Total
  3196.         };
  3197.  
  3198.         class BoneTransformInfo
  3199.         {
  3200.         public:
  3201.             D3DXMATRIX transform;       // 0x00
  3202.             D3DXVECTOR4 position;                   // 0x40
  3203.         }; // 0x50
  3204.  
  3205.         BoneCollisionComponentData* m_boneCollisionData;                            // 0x00
  3206.         ant::UpdatePoseResultData m_updatePoseResultData;                           // 0x04
  3207.         ant::AnimationSkeleton* m_skeleton;                                         // 0x2C
  3208.         BoneTransformInfo* m_transforms;                                            // 0x30
  3209.         eastl::vector<eastl::pair<INT, MaterialContainerPair>> m_boneCollisionInfo; // 0x34
  3210.         FLOAT m_latencyBufferTime;                                                  // 0x44
  3211.         FLOAT m_latencyBufferInterval;                                              // 0x48
  3212.         PAD(0x174);                                                                 // 0x4C
  3213.         BoneTransformInfo* m_latencyTransforms;                                     // 0x1C0
  3214.         CHAR m_hiLod;                                                               // 0x1C4
  3215.         PAD(0x3);                                                                   // 0x1C5
  3216.         DWORD m_debugColor;                                                         // 0x1C8
  3217.         INT m_collisionBoneCount;                                                   // 0x1CC
  3218.         CHAR m_collisionEnabled;                                                    // 0x1D0
  3219.         CHAR m_collisionUpdated;                                                    // 0x1D1
  3220.         CHAR m_isServer;                                                            // 0x1D2
  3221.         PAD(0x1);                                                                   // 0x1D3
  3222.     }; // 0x1D4
  3223.  
  3224.     class BoneCollisionComponentData
  3225.         : public ComponentData                              // 0x00
  3226.     {
  3227.     public:
  3228.         PAD(0x8);                                           // 0x58
  3229.         SkeletonCollisionData* m_skeletonCollisionData;     // 0x60
  3230.     }; // 0x64
  3231.  
  3232.     class SkeletonCollisionData
  3233.         : public DataContainer                              // 0x00
  3234.     {
  3235.     public:
  3236.         SkeletonAsset* m_skeletonAsset;                     // 0x08
  3237.         Array<BoneCollisionData> m_boneCollisionTransforms; // 0x0C
  3238.     };
  3239.  
  3240.     class SkeletonAsset
  3241.         : public Asset                          // 0x00
  3242.     {
  3243.     public:
  3244.         Array<String> m_boneNames;              // 0x0C
  3245.         Array<INT> m_hierarchy;                 // 0x10
  3246.         Array<D3DXMATRIX> m_localPose;      // 0x14
  3247.         Array<D3DXMATRIX> m_modelPose;      // 0x18
  3248.         String m_weaponBoneName;                // 0x1C
  3249.         String m_headBoneName;                  // 0x20
  3250.         String m_hipBoneName;                   // 0x24
  3251.         String m_cameraBoneName;                // 0x28
  3252.     }; // 0x2C
  3253.  
  3254.     class PitchModifier
  3255.     {
  3256.     public:
  3257.         D3DXVECTOR4 m_offset;           // 0x00
  3258.         FLOAT m_pitchVal;       // 0x10
  3259.         FLOAT m_pitchAngle;     // 0x14
  3260.     }; // 0x18
  3261.  
  3262.     class BoneCollisionData
  3263.     {
  3264.     public:
  3265.         D3DXVECTOR4 m_debugDrawColor;                           // 0x00
  3266.         D3DXVECTOR4 m_capsuleOffset;                            // 0x10
  3267.         String m_boneName;                              // 0x20
  3268.         HitReactionType m_animationHitReactionType;     // 0x24
  3269.         MaterialContainerPair* m_materialPair;          // 0x28
  3270.         INT m_boneAxis;                                 // 0x2C
  3271.         FLOAT m_capsuleLength;                          // 0x30
  3272.         FLOAT m_capsuleRadius;                          // 0x34
  3273.         PAD(0x8);                                       // 0x38
  3274.         PitchModifier m_minPitch;                       // 0x40
  3275.         PAD(0x8);                                       // 0x58
  3276.         PitchModifier m_maxPitch;                       // 0x60
  3277.         PAD(0x8);                                       // 0x78
  3278.         CHAR m_validInHiLod;                            // 0x80
  3279.         CHAR m_validInLowLod;                           // 0x81
  3280.         CHAR m_usePhysicsRotation;                      // 0x82
  3281.         CHAR m_deactiveIfBehindWall;                    // 0x83
  3282.         PAD(0xC);                                       // 0x84
  3283.     }; // 0x90
  3284.  
  3285.     class ClientBoneCollisionComponent
  3286.         : public ClientComponent,           // 0x00
  3287.         public BoneCollisionComponent       // 0x10
  3288.     {
  3289.     }; // 0x1E4
  3290.  
  3291.     class SoldierWeaponsComponent
  3292.     {
  3293.     public:
  3294.         LPVOID vftable;             // 0x00
  3295.         FLOAT m_weaponDispersion;   // 0x04
  3296.     }; // 0x08
  3297.  
  3298.     class WeaponSwitchingCallbacks
  3299.     {
  3300.         LPVOID vftable; // 0x00
  3301.     }; // 0x04
  3302.  
  3303.     class WeaponFiringCallbacks
  3304.     {
  3305.     public:
  3306.         DWORD vftable; // 0x00
  3307.     }; // 0x04
  3308.  
  3309.     class WeaponSwitchingState
  3310.     {
  3311.     public:
  3312.         INT m_weaponCount;                                      // 0x00
  3313.         INT m_currentWeaponId;                                  // 0x04
  3314.         INT m_previousWeaponId;                                 // 0x08
  3315.         INT m_lastPrimary;                                      // 0x0C
  3316.         FLOAT m_weaponSwitchTimer;                              // 0x10
  3317.         FLOAT m_switchBackToPrevMaxTimePressed;                 // 0x14
  3318.         EntryInputActionEnum m_fireAndSwitchBackToPrevAction;   // 0x18
  3319.         CHAR m_automaticFire;                                   // 0x1C
  3320.         CHAR m_playerSwitchedWeapons;                           // 0x1D
  3321.         CHAR m_quickSwitch;                                     // 0x1E
  3322.         PAD(0x1);                                               // 0x1F
  3323.     }; // 0x20
  3324.  
  3325.     class WeaponsState
  3326.     {
  3327.     public:
  3328.         PAD(0xC4);      // 0x00
  3329.     }; // 0xC4
  3330.  
  3331.     class ClientWeaponsState
  3332.         : public WeaponsState   // 0x00
  3333.     {
  3334.     }; // 0xC4
  3335.  
  3336.     class AnimatedWeaponGS
  3337.     {
  3338.     public:
  3339.         class Read
  3340.         {
  3341.         public:
  3342.             FLOAT DisableZoomToggleWeight;      // 0x00
  3343.             INT AIAllowFire;                    // 0x04
  3344.             INT AIAltFireFromAnt;               // 0x08
  3345.         }; // 0x0C
  3346.  
  3347.         class Write
  3348.         {
  3349.         public:
  3350.             CHAR Deploy;                        // 0x00
  3351.             CHAR AltDeploy;                     // 0x01
  3352.             CHAR Undeploy;                      // 0x02
  3353.             CHAR QuickSwitch;                   // 0x03
  3354.             CHAR Reload;                        // 0x04
  3355.             CHAR ReloadShotgun;                 // 0x05
  3356.             CHAR Fire;                          // 0x06
  3357.             CHAR FireSingle;                    // 0x07
  3358.             CHAR FireHoldAndRelease;            // 0x08
  3359.             CHAR FireSimple;                    // 0x09
  3360.             CHAR FireShotSpawned;               // 0x0A
  3361.             CHAR BoltAction;                    // 0x0B
  3362.             CHAR PumpAction;                    // 0x0C
  3363.             CHAR MeleeAttack;                   // 0x0D
  3364.             CHAR QuickThrow;                    // 0x0E
  3365.             PAD(0x1);                           // 0x0F
  3366.             INT QuickThrowType;                 // 0x10
  3367.             CHAR AimBody;                       // 0x14
  3368.             CHAR AlwaysAimHead;                 // 0x15
  3369.             CHAR OneHanded;                     // 0x16
  3370.             CHAR OneHandedAiming;               // 0x17
  3371.             CHAR AimingEnabled;                 // 0x18
  3372.             CHAR LowerGun;                      // 0x19
  3373.             CHAR BreathControl;                 // 0x1A
  3374.             CHAR RflType;                       // 0x1B
  3375.             CHAR PstlType;                      // 0x1C
  3376.             CHAR HgrType;                       // 0x1D
  3377.             CHAR ATType;                        // 0x1E
  3378.             CHAR ShgType;                       // 0x1F
  3379.             CHAR LMGType;                       // 0x20
  3380.             CHAR BagType;                       // 0x21
  3381.             CHAR SnpType;                       // 0x22
  3382.             CHAR Zoom;                          // 0x23
  3383.             FLOAT AimBodyWeight;                // 0x24
  3384.             FLOAT ZoomParameter;                // 0x28
  3385.             FLOAT ZoomScaleFactor;              // 0x2C
  3386.             FLOAT Dispersion;                   // 0x30
  3387.             PAD(0xC);                           // 0x34
  3388.             D3DXVECTOR4 AimTargetPosBody;               // 0x40
  3389.             FLOAT ZoomOutSpeed;                 // 0x50
  3390.             FLOAT ZoomInSpeed;                  // 0x54
  3391.             FLOAT UnDeploySpeed;                // 0x58
  3392.             FLOAT DeploySpeed;                  // 0x5C
  3393.             CHAR LightEnabled;                  // 0x60
  3394.             CHAR FireModeChanged;               // 0x61 Doesn't Update
  3395.             PAD(0x2);                           // 0x62
  3396.             INT AnimType;                       // 0x64
  3397.             INT GunDown;                        // 0x68
  3398.             FLOAT NumberOfBulletsLeftInGun;     // 0x6C
  3399.             CHAR BulletsLeftInGun;              // 0x70
  3400.             CHAR WeaponActionESIG;              // 0x71
  3401.             CHAR IsSprinting;                   // 0x72
  3402.             CHAR PreparingToBash;               // 0x73
  3403.             INT JustStartedSprinting;           // 0x74
  3404.             FLOAT KickBackInIronSight;          // 0x78
  3405.             FLOAT ZoomingTime;                  // 0x7C
  3406.             INT TriggerZoomGunTwitch;           // 0x80
  3407.             INT WeaponChooserSignal;            // 0x84
  3408.             INT WeaponClassSignal;              // 0x88
  3409.             FLOAT OffsetX;                      // 0x8C
  3410.             FLOAT OffsetY;                      // 0x90
  3411.             FLOAT OffsetZ;                      // 0x94
  3412.         }; // 0x98
  3413.  
  3414.         class Data
  3415.         {
  3416.         public:
  3417.             Read R;     // 0x00
  3418.             PAD(0x4);   // 0x0C
  3419.             Write W;    // 0x10
  3420.         }; // 0xA8
  3421.  
  3422.         Data m_data;        // 0x00
  3423.     }; // 0xA8
  3424.  
  3425.  
  3426.  
  3427.  
  3428. /*******************/
  3429.  
  3430.  
  3431.  
  3432.  
  3433.     class WeaponName
  3434.     {
  3435.     public:
  3436.         unsigned char pad0[8];
  3437.         fb::String m_name;
  3438.     };
  3439.  
  3440.     class WeaponEntityData
  3441.     {
  3442.     public:
  3443.         unsigned char pad0[300];
  3444.         WeaponName * m_namePtr;//12C
  3445.     };
  3446.  
  3447.  
  3448.  
  3449.  
  3450.  
  3451.     class WeaponSway // Inherited class at offset 0x0
  3452.     {
  3453.     public:
  3454.         class AbilityCallback
  3455.         {
  3456.             virtual bool isFunctionOn(int);    // V: 0x0                                                                                          
  3457.         }; // AbilityCallback
  3458.  
  3459.         class SuppressionCallback
  3460.         {
  3461.             virtual float getSuppressionValue();        // V: 0x0
  3462.         }; // SuppressionCallback
  3463.  
  3464.  
  3465.         class SoldierAttributesCallback
  3466.         {
  3467.             virtual enum fb::CharacterPoseType getPose();                // V: 0x0
  3468.             virtual enum fb::CharacterPoseType getChangingToPose();         // V: 0x4
  3469.             virtual struct D3DXVECTOR4 getSoldierSpeed();             // V: 0x8
  3470.             virtual float getSoldierMaxSpeed();         // V: 0xC
  3471.             virtual bool isWeaponZoomed();              // V: 0x10
  3472.             virtual enum SoldierEntityActionState actionState();  // V: 0x14
  3473.             virtual float getYawInputLevel();               // V: 0x18
  3474.             virtual float getPitchInputLevel();             // V: 0x1C
  3475.             virtual float getStrafeInputLevel();           // V: 0x20
  3476.             virtual float getThrottleInputLevel();       // V: 0x24
  3477.             virtual unsigned int getSeed();   // V: 0x28
  3478.             virtual bool isSupported();           // V: 0x2C
  3479.             virtual bool isWeaponLightEnabled();     // V: 0x30
  3480.             virtual void onDispersionUpdated();       // V: 0x34
  3481.             virtual bool isSprinting();               // V: 0x38
  3482.             virtual class fb::WeaponSway::AbilityCallback * getAbilityCallback();      // V: 0x3C
  3483.             virtual class fb::WeaponSway::SuppressionCallback * getSuppressionCallback();             // V: 0x40
  3484.             void * __vecDelDtor(unsigned int);      // V: 0x44
  3485.         }; // SoldierAttributesCallback
  3486.  
  3487.         public:
  3488.             virtual void na1();
  3489.             virtual void na2();
  3490.             virtual void na3();
  3491.             virtual void na4();
  3492.             virtual void na5();
  3493.             virtual void na6();
  3494.             virtual void na7();
  3495.             virtual void na8();
  3496.             virtual void na9();
  3497.             virtual void na10();
  3498.             virtual void na11();
  3499.             virtual void na12();
  3500.             virtual void na13();
  3501.             virtual void na14();
  3502.             virtual void na15();
  3503.             virtual void na16();
  3504.             virtual void na17();
  3505.             virtual void na18();
  3506.             virtual void na19();
  3507.             virtual void na20();
  3508.             virtual void na21();
  3509.             virtual void na22();
  3510.             virtual void na23();
  3511.             virtual void unlockModifiers(const fb::WeaponModifier * wm);             // V: 0x60
  3512.             virtual void update(float f, const WeaponSway::SoldierAttributesCallback & scb);      // V: 0x64
  3513.             virtual void getDispersion(D3DXMATRIX &, bool);   // V: 0x68
  3514.             virtual void getRecoil(D3DXMATRIX &, bool);             // V: 0x6C
  3515.             virtual void getCameraRecoil(D3DXMATRIX &);        // V: 0x70
  3516.             virtual void getLag(D3DXMATRIX &, bool);  // V: 0x74
  3517.             virtual float getDispersionFactor();           // V: 0x7C
  3518.             virtual float getDispersionAngle();            // V: 0x80
  3519.             virtual float getMinDispersionAngle();    // V: 0x84
  3520.             virtual float getSuppresionMinDispersionAngleFactor();                // V: 0x88
  3521.             virtual float getRecoilPitch();       // V: 0x8C
  3522.             virtual float getRecoilYaw();        // V: 0x90
  3523.         class WeaponFiringCallbacks // Inherited class at offset 0x0
  3524.         {
  3525.             enum CallOrder
  3526.             {
  3527.                 CallOrder_PreWeapon,                     // constant 0x0
  3528.                 CallOrder_Weapon,                     // constant 0x1
  3529.                 CallOrder_PostWeapon                     // constant 0x2
  3530.             }; // CallOrder
  3531.  
  3532.         }; // fb::WeaponFiringCallbacks
  3533.  
  3534.  
  3535.  
  3536.  
  3537.     public:
  3538.         class Deviation
  3539.         {
  3540.         public:
  3541.             float m_pitch;                     // this+0x0
  3542.             float m_yaw;                     // this+0x4
  3543.             float m_roll;                     // this+0x8
  3544.             float m_transY;                     // this+0xC
  3545.         }; // Deviation
  3546.  
  3547.  
  3548.         const void * m_data;                     // this+0x4
  3549.         PAD(0xA4);                   // this+0x14
  3550.  
  3551.  
  3552.         Deviation m_currentRecoilDeviation;                     // this+0xAC
  3553.         float m_timeSinceLastShot;                     // this+0xBC
  3554.         PAD(0x10);
  3555.         D3DXMATRIX m_cameraRecoilTransform;                     // this+0xD0
  3556.         Deviation m_currentLagDeviation;                     // this+0x110
  3557.         float m_dispersionAngle;                     // this+0x120
  3558.         float m_minDispersionAngle;                     // this+0x124
  3559.         float m_crossHairDispersionFactor;                     // this+0x128
  3560.         Deviation m_currentDispersionDeviation;                     // this+0x12C
  3561.         float m_currentGameplayDeviationScaleFactor;                     // this+0x13C
  3562.         float m_currentVisualDeviationScaleFactor;                     // this+0x140
  3563.         float m_suppressionMinDispersionAngleFactor;                     // this+0x144
  3564.     };
  3565.  
  3566.     class WeaponSwayCallbackImpl
  3567.         : public WeaponSway::SoldierAttributesCallback                  // 0x00
  3568.     {  
  3569.     public:
  3570.         FLOAT m_yawInputLevel;                                          // 0x04
  3571.         FLOAT m_pitchInputLevel;                                        // 0x08
  3572.         FLOAT m_strafeInputLevel;                                       // 0x0C
  3573.         FLOAT m_throttleInputLevel;                                     // 0x10
  3574.         DWORD m_seed;                                                   // 0x14
  3575.         PAD(0x8);                                                       // 0x18
  3576.         D3DXVECTOR4 m_soldierSpeed;                                         // 0x20
  3577.         FLOAT m_soldierMaxSpeed;                                        // 0x30
  3578.         WeaponSway::AbilityCallback* m_abilityCallback;                 // 0x34
  3579.         WeaponSway::SuppressionCallback* m_suppressionCallback;         // 0x38
  3580.         FLOAT m_currentSupressionLevel;                                 // 0x3C
  3581.         CharacterPoseType m_soldierPose;                                // 0x40
  3582.         CharacterPoseType m_soldierChangingToPose;                      // 0x44
  3583.         SoldierEntityActionState m_soldierActionState;                  // 0x48
  3584.         CHAR m_isSupported;                                             // 0x4C
  3585.         CHAR m_isSprinting;                                             // 0x4D
  3586.         CHAR m_isWeaponLightEnabled;                                    // 0x4E
  3587.         CHAR m_isZooming;                                               // 0x4F
  3588.     }; // 0x50
  3589.  
  3590.     class ClientSoldierWeaponsComponent
  3591.         : public ClientComponent,                                               // 0x00
  3592.         public network::IClientNetworkable,                                     // 0x10
  3593.         public network::Interpolator<LPVOID>,                                   // 0x18
  3594.         public SoldierWeaponsComponent,                                         // 0x58
  3595.         public WeaponSwitchingCallbacks,                                        // 0x60
  3596.         public WeaponFiringCallbacks                                            // 0x64
  3597.     {
  3598.     public:
  3599.         class ZoomCorrectionState
  3600.         {
  3601.             PAD(0x4);           // 0x00
  3602.             INT hasZoom;        // 0x04
  3603.             DWORD zoomLevel;    // 0x08
  3604.         }; // 0x0C
  3605.  
  3606.         class State
  3607.         {
  3608.         public:
  3609.             WeaponSwitchingState weaponSwitchingState;      // 0x00
  3610.             ZoomCorrectionState zoomCorrectionState;        // 0x20
  3611.         }; // 0x2C
  3612.  
  3613.         class ClientWeaponSwayCallbackImpl
  3614.             : public WeaponSwayCallbackImpl     // 0x00
  3615.         {
  3616.         public:
  3617.             INT m_hasBeenLocalPlayer;           // 0x50
  3618.         }; // 0x54
  3619.  
  3620.         DWORD m_correctionCallbackcHandler;                                     // 0x68
  3621.         PAD(0x4);                                                               // 0x6C
  3622.         D3DXMATRIX m_weaponTransform;                                       // 0x70
  3623.         DWORD m_animatableComponent[0x2];                                       // 0xB0
  3624.         ClientSoldierEntity* m_soldier;                                         // 0xB8
  3625.         eastl::vector<ClientSoldierWeapon*> m_weapons;                          // 0xBC
  3626.         ClientAnimatedSoldierWeaponHandler* m_currentAnimatedWeaponHandler;     // 0xCC
  3627.         INT m_weaponMeshWasEnabled;                                             // 0xD0
  3628.         WeaponSwitching* m_replicatedWeaponSwitching;                           // 0xD4
  3629.         WeaponSwitching* m_predictedWeaponSwitching;                            // 0xD8
  3630.         ClientWeaponSwayCallbackImpl* m_weaponSwayCallback;                     // 0xDC
  3631.         INT m_hasOrHadLocalPlayer;                                              // 0xE0
  3632.         SoldierAimingEnvironment* m_aimingEnvironment;                          // 0xE4
  3633.         AimingConstraints* m_swimAimingConstraints;                             // 0xE8
  3634.         PAD(0x64);                                                              // 0xEC
  3635.         INT m_oldZoomState;                                                     // 0x150
  3636.         INT m_lastZoomLevel;                                                    // 0x154
  3637.         FLOAT m_timeSinceWeaponFire;                                            // 0x158
  3638.         CHAR m_needsWweapon1pResource;                                          // 0x15C
  3639.         CHAR m_weaponLightDisabled;                                             // 0x15D
  3640.         PAD(0x2);                                                               // 0x15E
  3641.         State m_correctionState;                                                // 0x160
  3642.         State m_predictionState;                                                // 0x18C
  3643.         State* m_currentState;                                                  // 0x1B8
  3644.         ClientWeaponsState m_currentWeaponsState;                               // 0x1BC
  3645.         AnimatedWeaponGS m_gameState;                                           // 0x280
  3646.         PAD(0x28);                                                              // 0x328
  3647.         D3DXMATRIX m_globalAimOverride;                                 // 0x350
  3648.         INT m_globalAimOverrideMode;                                            // 0x390
  3649.         CHAR m_animationsDisabledForCurrentWeapon;                              // 0x394
  3650.         CHAR m_instantReloadEnabled;                                            // 0x395
  3651.         CHAR m_flaggedForLowAmmo;                                               // 0x396
  3652.         PAD(0x1);                                                               // 0x397
  3653.         AnimatedSoldierWeapon* m_lastAnimatedSoldierWeapon;                     // 0x398
  3654.         DWORD m_1pWeaponAsset;                                                  // 0x39C
  3655.         DWORD m_3pWeaponAsset;                                                  // 0x3A0
  3656.     }; // 0x3A4
  3657.  
  3658.     class ClientAnimatedSoldierWeaponHandler
  3659.     {
  3660.     public:
  3661.         LPVOID vftable;                                 // 0x00
  3662.         CHAR m_weaponDeployRequested;                   // 0x04
  3663.         CHAR m_altDeploy;                               // 0x05
  3664.         CHAR m_quickSwitch;                             // 0x06
  3665.         PAD(0x1);                                       // 0x07
  3666.         FLOAT m_weaponUndeployTimer;                    // 0x08
  3667.         FLOAT m_spamDetectTimer;                        // 0x0C
  3668.         PAD(0x4);                                       // 0x10
  3669.         ClientSoldierWeapon* m_currentAnimatedWeapon;   // 0x14
  3670.         INT m_deleteCurrentAnimationWeapon;             // 0x18
  3671.         INT m_currentAnimatedWeaponIndex;               // 0x1C
  3672.         INT m_currentAnimatedWeaponState;               // 0x20
  3673.         ClientSoldierWeapon* m_wantedAnimatedWeapon;    // 0x24
  3674.         INT m_wantedAnimatedWeaponIndex;                // 0x28
  3675.         ClientSoldierEntity* m_soldier;                 // 0x2C
  3676.         INT m_lastPredicted;                            // 0x30
  3677.     }; // 0x34
  3678.  
  3679.     class WeaponSwitching
  3680.     {
  3681.     public:
  3682.         LPVOID vftable;                                         // 0x00
  3683.         INT m_currentWeaponId;                                  // 0x04
  3684.         INT m_previousWeaponId;                                 // 0x08
  3685.         INT m_lastPrimary;                                      // 0x0C
  3686.         INT m_weaponCount;                                      // 0x10
  3687.         EntryInputActionEnum m_fireAndSwitchBackToPrevAction;   // 0x14
  3688.         FLOAT m_weaponSwitchTimer;                              // 0x18
  3689.         FLOAT m_switchBackToPrevMaxTimePressed;                 // 0x1C
  3690.         CHAR m_playerSwitchedWeapons;                           // 0x20
  3691.         CHAR m_quickSwitch;                                     // 0x21
  3692.         CHAR m_automaticFire;                                   // 0x22
  3693.         PAD(0x1);                                               // 0x23
  3694.         WeaponSwitchingCallbacks* m_callbackHandler;            // 0x24
  3695.     }; // 0x28
  3696.  
  3697.     class SoldierAimingEnvironment
  3698.     {
  3699.     public:
  3700.         ClientSoldierEntity* m_soldier;                 // 0x00
  3701.         WeakPtr<ClientControllableEntity> m_target;     // 0x04
  3702.         CHAR m_hasTarget;                               // 0x08
  3703.         CHAR m_hasFriendlyTarget;                       // 0x09
  3704.         CHAR m_hasChangedTarget;                        // 0x0A
  3705.         CHAR m_hasStickyBoxTarget;                      // 0x0B
  3706.         CHAR m_hasSnapBoxTarget;                        // 0x0C
  3707.         PAD(0x3);                                       // 0x0D
  3708.     }; // 0x10
  3709.  
  3710.     class AimingConstraints
  3711.     {
  3712.     public:
  3713.         FLOAT m_minYaw;             // 0x00
  3714.         FLOAT m_maxYaw;             // 0x04
  3715.         FLOAT m_minPitch;           // 0x08
  3716.         FLOAT m_maxPitch;           // 0x0C
  3717.         FLOAT m_pitchOffset;        // 0x10
  3718.         FLOAT m_yawOffset;          // 0x14
  3719.         FLOAT m_minYawDefault;      // 0x18
  3720.         FLOAT m_maxYawDefault;      // 0x20
  3721.     }; // 0x24
  3722.  
  3723.     class AnimatedSoldierWeaponSprintModule
  3724.     {
  3725.     public:
  3726.         CHAR m_wasSprinting;        // 0x00
  3727.         CHAR m_isSprinting;         // 0x01
  3728.         CHAR m_nearBashable;        // 0x02
  3729.         CHAR m_wasNearBashable;     // 0x03
  3730.     }; // 0x04
  3731.  
  3732.     class AnimatedSoldierWeaponShootModule
  3733.     {
  3734.     public:
  3735.         AnimationConfigurationShootModuleData* m_data;  // 0x00
  3736.         INT m_zooming;                                  // 0x04
  3737.     }; // 0x08
  3738.  
  3739.     class AnimationConfigurationShootModuleData
  3740.     {
  3741.     public:
  3742.         FLOAT m_zoomedKickbackFactor;       // 0x00
  3743.     }; // 0x04
  3744.  
  3745.     class AnimatedSoldierWeaponZoomModule
  3746.     {
  3747.     public:
  3748.         FLOAT m_zoomTimer;                          // 0x00
  3749.         FLOAT m_oldZoomTimer;                       // 0x04
  3750.         FLOAT m_isZooming;                          // 0x08
  3751.         SoldierAimingSimulationData* m_aimingData;  // 0x0C
  3752.     }; // 0x10
  3753.  
  3754.     class AnimatedSoldierWeaponOffsetModule
  3755.     {
  3756.     public:
  3757.         WeaponOffsetData* m_data;       // 0x00
  3758.         INT m_zooming;                  // 0x04
  3759.     }; // 0x08
  3760.  
  3761.     class WeaponOffsetData
  3762.         : public DataContainer          // 0x00
  3763.     {
  3764.     public:
  3765.         FLOAT m_weaponOffsetX;          // 0x08
  3766.         FLOAT m_weaponOffsetY;          // 0x0C
  3767.         FLOAT m_weaponOffsetZ;          // 0x10
  3768.         FLOAT m_weaponZoomedOffsetX;    // 0x14
  3769.         FLOAT m_weaponZoomedOffsetY;    // 0x18
  3770.         FLOAT m_weaponZoomedOffsetZ;    // 0x1C
  3771.     }; // 0x20
  3772.  
  3773.     class AnimatedSoldierWeaponSpeedModule
  3774.     {
  3775.     public:
  3776.         WeaponSpeedData* m_data;    // 0x00
  3777.     }; // 0x04
  3778.  
  3779.     class WeaponSpeedData
  3780.         : public DataContainer      // 0x00
  3781.     {
  3782.     public:
  3783.         FLOAT m_zoomOutSpeed;       // 0x08
  3784.         FLOAT m_zoomInSpeed;        // 0x0C
  3785.         FLOAT m_unDeploySpeed;      // 0x10
  3786.         FLOAT m_deploySpeed;        // 0x14
  3787.     }; // 0x18
  3788.  
  3789.     class AnimatedSoldierWeapon
  3790.         : WeaponFiringCallbacks                             // 0x00
  3791.     {  
  3792.     public:
  3793.         DWORD m_weapon;                                     // 0x04
  3794.         WeaponFiringData* m_weaponFiringData;               // 0x08
  3795.         WeaponModifier* m_weaponModifier;                   // 0x0C
  3796.         DWORD m_weaponStateData;                            // 0x10
  3797.         SoldierAimingSimulationData* m_aimingData;          // 0x14
  3798.         INT m_weaponType;                                   // 0x18
  3799.         AnimatedSoldierWeaponSprintModule m_sprintModule;   // 0x1C
  3800.         AnimatedSoldierWeaponShootModule m_shootModule;     // 0x20
  3801.         AnimatedSoldierWeaponZoomModule m_zoomModule;       // 0x28
  3802.         AnimatedSoldierWeaponOffsetModule m_offsetModule;   // 0x38
  3803.         AnimatedSoldierWeaponSpeedModule m_speedModule;     // 0x40
  3804.         PAD(0xC);                                           // 0x44
  3805.         D3DXVECTOR4 m_eyePosition;                                  // 0x50
  3806.         D3DXVECTOR4 m_aimAtPosition;                                // 0x60
  3807.         FLOAT m_reloadTimer;                                // 0x70
  3808.         FLOAT m_zoomTimer;                                  // 0x74
  3809.         FLOAT m_aimTimer;                                   // 0x78
  3810.         FLOAT m_aimBlendTimer;                              // 0x7C
  3811.         FLOAT m_aimYaw;                                     // 0x80
  3812.         FLOAT m_aimPitch;                                   // 0x84
  3813.         FLOAT m_aimBodyBlendTime;                           // 0x88
  3814.         FLOAT m_dispersion;                                 // 0x8C
  3815.         FLOAT m_disableZoomToggleWdight;                    // 0x90
  3816.         FLOAT m_cameraLockWeight;                           // 0x94
  3817.         INT m_bulletsLeftInGun;                             // 0x98
  3818.         INT m_quickThrowType;                               // 0x9C
  3819.         INT m_weaponAnimType;                               // 0xA0
  3820.         INT m_animatedFireType;                             // 0xA4
  3821.         INT m_fireLogicType;                                // 0xA8
  3822.         CHAR m_isFiring;                                    // 0xAC
  3823.         PAD(0x3);
  3824.     }; // 0xD0
  3825.  
  3826.     class WeaponMiscModifierSettings
  3827.     {
  3828.     public:
  3829.         CHAR m_enableBreathControl;                 // 0x00
  3830.         CHAR m_canBeInSupportedShooting;            // 0x01
  3831.         CHAR m_unZoomOnBoltAction;                  // 0x02
  3832.         CHAR m_holdBoltActionUntilZoomRelease;      // 0x03
  3833.     }; // 0x04
  3834.  
  3835.     class WeaponModifier
  3836.     {
  3837.     public:
  3838.         PAD(0xA8);                                                                  // 0x00
  3839.         WeaponMiscModifierSettings m_weaponMiscModifier;                            // 0xA8
  3840.         PAD(0x4);                                                                   // 0xAC
  3841.         WeaponFiringDataModifier* m_weaponFiringDataModifier;                       // 0xB0
  3842.         WeaponFiringEffectsModifier* m_weaponFiringEffectsModifier;                 // 0xB4
  3843.         WeaponSoundModifier* m_weaponSoundModifier;                                 // 0xB8
  3844.         WeaponShotModifier* m_weaponShotModifier;                                   // 0xBC
  3845.         WeaponProjectileModifier* m_weaponProjectileModifier;                       // 0xC0
  3846.         WeaponAimingSimulationModifier* m_weaponAimingSimulationModifier;           // 0xC4
  3847.         WeaponAimingConfigurationModifier* m_weaponAimingConfigurationModifier;     // 0xC8
  3848.         WeaponAnimTypeModifier* m_weaponAnimTypeModifier;                           // 0xCC
  3849.         WeaponMagazineModifier* m_weaponMagazineModifier;                           // 0xD0
  3850.         WeaponZoomModifier* m_weaponZoomModifier;                                   // 0xD4
  3851.     }; // 0xD8
  3852.  
  3853.     class WeaponModifierBase
  3854.         : public DataContainer  // 0x00
  3855.     {
  3856.     }; // 0x08
  3857.  
  3858.     class WeaponFiringDataModifier
  3859.         : public WeaponModifierBase         // 0x00
  3860.     {
  3861.     public:
  3862.         DataContainer* m_weaponFiring;      // 0x08
  3863.     }; // 0x0C
  3864.  
  3865.     class FireEffectData
  3866.     {
  3867.     public:
  3868.         D3DXVECTOR4 m_rotation;             // 0x00
  3869.         D3DXVECTOR4 m_offset;                   // 0x10
  3870.         D3DXVECTOR4 m_zoomRotation;         // 0x20
  3871.         D3DXVECTOR4 m_zoomOffset;               // 0x30
  3872.         DataContainer* m_effect;        // 0x40
  3873.         CHAR m_useZoomOffset;           // 0x44
  3874.         CHAR m_useZoomRotation;         // 0x45
  3875.         CHAR m_disableDuringZoom;       // 0x46
  3876.         CHAR m_updateTransform;         // 0x47
  3877.         CHAR m_stopLoopingEffects;      // 0x48
  3878.         PAD(0x3);                       // 0x49
  3879.     }; // 0x4C
  3880.  
  3881.     class WeaponFiringEffectsModifier
  3882.         : public WeaponModifierBase             // 0x00
  3883.     {
  3884.     public:
  3885.         Array<FireEffectData> m_fireEffects1p;  // 0x08
  3886.         Array<FireEffectData> m_fireEffects3p;  // 0x0C
  3887.     }; // 0x10
  3888.  
  3889.     class WeaponSoundModifier
  3890.         : public WeaponModifierBase // 0x00
  3891.     {
  3892.     public:
  3893.         DataContainer* m_sound;     // 0x08
  3894.     }; // 0x0C
  3895.  
  3896.     class WeaponShotModifier
  3897.         : public WeaponModifierBase         // 0x00
  3898.     {
  3899.     public:
  3900.         PAD(0x8);                           // 0x08
  3901.         D3DXVECTOR4 m_initialSpeed;             // 0x10
  3902.         INT m_numberOfBulletsPerShell;      // 0x20
  3903.     }; // 0x24
  3904.  
  3905.     class WeaponProjectileModifier
  3906.         : public WeaponModifierBase             // 0x00
  3907.     {
  3908.     public:
  3909.         ProjectileEntityData* m_projectileData; // 0x08
  3910.     }; // 0x0C
  3911.  
  3912.     class WeaponAimingSimulationModifier
  3913.         : public WeaponModifierBase             // 0x00
  3914.     {
  3915.     public:
  3916.         DataContainer* m_aimingController;      // 0x08
  3917.     }; // 0x0C
  3918.  
  3919.     class WeaponAimingConfigurationModifier
  3920.         : public WeaponModifierBase                     // 0x00
  3921.     {
  3922.     public:
  3923.         Array<FLOAT> m_zoomInOutMeshTransitionFactors;  // 0x08
  3924.         FLOAT m_zoomedKickBackFactor;                   // 0x0C
  3925.         DataContainer* m_weaponOffsetModuleData;        // 0x10
  3926.         DataContainer* m_weaponSpeedModuleData;         // 0x14
  3927.     }; // 0x18
  3928.  
  3929.     class WeaponAnimTypeModifier
  3930.         : public WeaponModifierBase         // 0x00
  3931.     {
  3932.     public:
  3933.         WeaponAnimType m_weaponAnimType;    // 0x08
  3934.     }; // 0x0C
  3935.  
  3936.     class WeaponMagazineModifier
  3937.         : public WeaponModifierBase     // 0x00
  3938.     {
  3939.     public:
  3940.         INT m_magazineCapacity;         // 0x08
  3941.         INT m_numberOfMagazines;        // 0x0C
  3942.     }; // 0x10
  3943.  
  3944.     class WeaponZoomModifier
  3945.         : public WeaponModifierBase     // 0x00
  3946.     {
  3947.     public:
  3948.         FLOAT m_zoomRenderFov;          // 0x08
  3949.     }; // 0x0C
  3950.  
  3951.     class ClientSoldierWeapon
  3952.         //: public ClientGameEntity                             // 0x00
  3953.     {
  3954.     public:
  3955.         class WeaponState
  3956.         {
  3957.         public:
  3958.             AnimatedSoldierWeapon* m_animation;             // 0x00
  3959.             eastl::vector<DWORD> m_fakePhysics;             // 0x04 <BoneFakePhysics*>
  3960.             DWORD m_meshVariationSet;                       // 0x14 MeshVariationSet*
  3961.             DWORD m_meshZoomVariationSet;                   // 0x18 MeshVariationSet*
  3962.             DWORD m_mesh;                                   // 0x1C ResourceProxy<MeshSet>
  3963.             DWORD m_meshZoom;                               // 0x20 ResourceProxy<MeshSet>
  3964.             WORD m_meshInstanceHandle;                      // 0x24
  3965.             WORD m_meshZoomInstanceHandle;                  // 0x28
  3966.             DWORD m_projectileBoneIndex;                    // 0x2C
  3967.         }; // 0x30
  3968.  
  3969.         class CorrectionCallbackHandler
  3970.             : public WeaponFiringCallbacks  // 0x00
  3971.         {
  3972.         public:
  3973.             AmmunitionDepot* m_ammoDepot;   // 0x04
  3974.         }; // 0x08
  3975.  
  3976.         public:
  3977.         BYTE pad_010[0x20]; // 0x10
  3978.         DWORD m_ownedEntities;
  3979.         INT m_ownedEntityCount;
  3980.         eastl::vector<WeaponState> m_weaponStates1p;            // 0x28
  3981.         eastl::vector<WeaponState> m_weaponStates3p;            // 0x38
  3982.         eastl::vector<DWORD> m_socketPointers;                  // 0x48 AttachableSocket (Size 0xA4)
  3983.         WeaponModifier m_weaponModifier;                        // 0x58
  3984.         BYTE pad_130[0x10];
  3985.         DWORD m_cameraLagEffect;                                // 0x13C
  3986.         ClientSoldierAimingSimulation* m_authorativeAiming;     // 0x140 WeaponLagEffect*
  3987.         ClientAimingReplication* m_replicatedAiming;            // 0x144
  3988.         ClientLockingController* m_lockingController;           // 0x148
  3989.         ClientLockingController* m_secondaryLockingController;  // 0x14C
  3990.         ClientWeapon* m_weapon;                                 // 0x150
  3991.         ClientWeaponFiringReplication* m_replicatedFiring;      // 0x154
  3992.         CorrectionCallbackHandler* m_correctionCallbackHandler; // 0x158
  3993.         WeaponFiring* m_predictedFiring;                        // 0x15C
  3994.         WeaponFiring* m_correctedFiring;                        // 0x160
  3995.         ResourceCompartment m_compartment;                      // 0x164
  3996.         WORD m_weaponInstanceId;                                // 0x168
  3997.         BYTE pad_16A[0x2];
  3998.         INT m_projectileBoneIndex;
  3999.         DWORD m_lpResourceCompartment;
  4000.         BYTE m_hasAttachedEntities;
  4001.         BYTE m_willAlwaysBe3p;
  4002.     };
  4003.  
  4004. /*      PAD(0x8);                                               // 0x20
  4005.         eastl::vector<WeaponState> m_weaponStates1p;            // 0x28
  4006.         eastl::vector<WeaponState> m_weaponStates3p;            // 0x38
  4007.         eastl::vector<DWORD> m_socketPointers;                  // 0x48 AttachableSocket (Size 0xA4)
  4008.         WeaponModifier m_weaponModifier;                        // 0x58
  4009.         PAD(0xC);                                               // 0x130
  4010.         DWORD m_cameraLagEffect;                                // 0x13C
  4011.         ClientSoldierAimingSimulation* m_authorativeAiming;     // 0x140 WeaponLagEffect*
  4012.         ClientAimingReplication* m_replicatedAiming;            // 0x144
  4013.         ClientLockingController* m_lockingController;           // 0x148
  4014.         ClientLockingController* m_secondaryLockingController;  // 0x14C
  4015.         ClientWeapon* m_weapon;                                 // 0x150
  4016.         ClientWeaponFiringReplication* m_replicatedFiring;      // 0x154
  4017.         CorrectionCallbackHandler* m_correctionCallbackHandler; // 0x158
  4018.         WeaponFiring* m_predictedFiring;                        // 0x15C
  4019.         WeaponFiring* m_correctedFiring;                        // 0x160
  4020.         ResourceCompartment m_compartment;                      // 0x164
  4021.         WORD m_weaponInstanceId;                                // 0x168
  4022.         PAD(0x2);                                               // 0x16A
  4023.         INT m_projectileBoneIndex;                              // 0x16C
  4024.         DWORD m_1pResourceCompartment;                          // 0x170 SoldierWeaponResourceCompartment**/
  4025.  
  4026.     class AmmunitionDepot
  4027.     {
  4028.     public:
  4029.         LPVOID vftable;     // 0x00
  4030.     }; // 0x04
  4031.  
  4032.     class AimAssist
  4033.     {
  4034.     public:
  4035.         class UpdateContext
  4036.         {
  4037.         public:
  4038.             FLOAT deltaTime;                // 0x00
  4039.             Vec2 movementInput;             // 0x04
  4040.             Vec2 aimingInput;               // 0x0C
  4041.             FLOAT minimumPitch;             // 0x14
  4042.             FLOAT maximumPitch;             // 0x18
  4043.             FLOAT lookSpeedmUltiplier;      // 0x1C
  4044.             FLOAT aimScale;                 // 0x20
  4045.             PAD(0xC);                       // 0x24
  4046.             D3DXMATRIX reticuleSpace;   // 0x30
  4047.             D3DXVECTOR4 reticuleSpeed;              // 0x70
  4048.             FLOAT reticuleFieldOfView;      // 0x80
  4049.             CHAR hasStickyTarget;           // 0x84
  4050.             CHAR hasSnapTarget;             // 0x85
  4051.             CHAR forceAimSnap;              // 0x86
  4052.             CHAR usePitchZoomSnap;          // 0x87
  4053.             FLOAT attractZoomMultiplier;    // 0x88
  4054.             FLOAT targetRadius;             // 0x8C
  4055.             D3DXVECTOR4 targetPosition;         // 0x90
  4056.             D3DXVECTOR4 targetSpeed;                // 0xA0
  4057.             DWORD zoomLevel;                // 0xB0
  4058.             FLOAT zoomTransitionTimer;      // 0xB4
  4059.             INT isMouseInput;               // 0xB8
  4060.         }; // 0xBC
  4061.  
  4062.         SoldierAimAssistData* m_data;               // 0x00
  4063.         AimingConstraints* m_aimingConstraints;     // 0x04
  4064.         DWORD m_lastZoomLevel;                      // 0x08
  4065.         FLOAT m_yaw;                                // 0x0C
  4066.         FLOAT m_pitch;                              // 0x10
  4067.         Vec2 m_speed;                               // 0x14
  4068.         FLOAT m_acceleration;                       // 0x1C
  4069.         FLOAT m_accelerationTimer;                  // 0x20
  4070.         FLOAT m_attractZoomPostTimer;               // 0x24
  4071.         FLOAT m_targetDistance;                     // 0x28
  4072.         FLOAT m_softZoneLambda;                     // 0x2C
  4073.         FLOAT m_polynomialFactor;                   // 0x30
  4074.         CHAR m_useAimAssist;                        // 0x34
  4075.         CHAR m_useInputPolynomials;                 // 0x35
  4076.         CHAR m_hasChangedZoomed;                    // 0x36
  4077.         CHAR m_isSnapZoom;                          // 0x37
  4078.     }; // 0x38
  4079.  
  4080.  
  4081.     class ClientSoldierAimingSimulation
  4082.     {
  4083.     public:
  4084.         enum ZoomFadeState
  4085.         {
  4086.             NoFade,
  4087.             Fading,
  4088.         };
  4089.  
  4090.         SoldierAimingSimulationData* m_data;                    // 0x00
  4091.         SoldierAimingEnvironment* m_environment;                // 0x04
  4092.         AimAssist* m_fpsAimer;                                  // 0x08
  4093.         FLOAT m_yaw;                                            // 0x0C
  4094.         FLOAT m_pitch;                                          // 0x10
  4095.         FLOAT m_aimYawTimer;                                    // 0x14
  4096.         FLOAT m_aimPitchTimer;                                  // 0x18
  4097.         Vec2 m_sway;                                            // 0x1C
  4098.         PAD(0xC);                                               // 0x24
  4099.         AimAssist::UpdateContext m_updateContext;               // 0x30
  4100.         PAD(0x4);                                               // 0xEC
  4101.         DWORD m_zoomLevel;                                      // 0xF0
  4102.         DWORD m_oldZoomLevel;                                   // 0xF4
  4103.         DWORD m_switchToZoomLevel;                              // 0xF8
  4104.         FLOAT m_zoomTransitionTimer;                            // 0xFC
  4105.         FLOAT m_fovMultiplier;                                  // 0x100
  4106.         FLOAT m_fovTransitionTimer;                             // 0x104
  4107.         PAD(0x4);                                               // 0x108
  4108.         ZoomFadeState m_fadeState;                              // 0x10C
  4109.         FLOAT m_fadeTimer;                                      // 0x110
  4110.         eastl::vector<AimerModifierData*> m_modifierData;       // 0x114
  4111.         FLOAT m_currentZoomTransitionTime;                      // 0x124
  4112.         FLOAT m_currentFovTransitionTime;                       // 0x128
  4113.     }; // 0x12C
  4114.  
  4115.     class ZoomLevelData
  4116.         : public DataContainer
  4117.     {
  4118.     public:
  4119.         FLOAT m_fieldOfView;                                // 0x08
  4120.         FLOAT m_timeYawMultiplier;                          // 0x0C
  4121.         FLOAT m_lookSpeedMultiplier;                        // 0x10
  4122.         FLOAT m_sprintLookSpeedMultiplier;                  // 0x14
  4123.         FLOAT m_moveSpeedMultiplier;                        // 0x18
  4124.         FLOAT m_swayPitchMultiplier;                        // 0x1C
  4125.         FLOAT m_swayYawMultiplier;                          // 0x20
  4126.         FLOAT m_supportedSwayPitchMultiplier;               // 0x24
  4127.         FLOAT m_supportedSwayYawMultiplier;                 // 0x28
  4128.         FLOAT m_timePitchMultiplier;                        // 0x2C
  4129.         FLOAT m_dispersionMultiplier;                       // 0x30
  4130.         FLOAT m_startFadeToBlackAtTime;                     // 0x34
  4131.         FLOAT m_recoilMultiplier;                           // 0x38
  4132.         FLOAT m_recoilFovMultiplier;                        // 0x3C
  4133.         FLOAT m_cameraImpulseMultiplier;                    // 0x40
  4134.         ZoomLevelActivateEventType m_onActivateEventType;   // 0x44
  4135.         FLOAT m_startFadeFromBlackAtTime;                   // 0x48
  4136.         FLOAT m_fadeToBlackDuration;                        // 0x4C
  4137.         FLOAT m_fadeFromBlackDuration;                      // 0x50
  4138.         FLOAT m_unknown;                                    // 0x54
  4139.         CHAR m_fadeToBlackInZoomTransition;                 // 0x58
  4140.         CHAR m_useFovSpecialisation;                        // 0x59
  4141.         CHAR m_allowFieldOfViewScaling;                     // 0x5A
  4142.         PAD(0x1);                                           // 0x5B
  4143.     }; // 0x5C
  4144.  
  4145.     class AimingPoseData
  4146.     {
  4147.     public:
  4148.         FLOAT m_minimumPitch;       // 0x00
  4149.         FLOAT m_maximumPitch;       // 0x04
  4150.         FLOAT m_targetingFov;       // 0x08
  4151.         FLOAT m_aimSteadiness;      // 0x0C
  4152.         FLOAT m_speedMultiplier;    // 0x10
  4153.         FLOAT m_recoilMultiplier;   // 0x14
  4154.     }; // 0x18
  4155.  
  4156.     class AimerModifierData
  4157.         : public Asset                      // 0x00
  4158.     {
  4159.     public:
  4160.         FLOAT m_lookSpeedMultiplier;        // 0x0C
  4161.         INT m_onlyInSupportedShooting;      // 0x10
  4162.     }; // 0x14
  4163.  
  4164.     class SoldierAimingSimulationData
  4165.         : public GameDataContainer                  // 0x00
  4166.     {
  4167.     public:
  4168.         RefArray<ZoomLevelData> m_zoomLevels;       // 0x08
  4169.         FLOAT m_zoomTransitionTime;                 // 0x0C
  4170.         DataContainer* m_aimAssist;                 // 0x10
  4171.         AimingPoseData m_standPose;                 // 0x14
  4172.         AimingPoseData m_crouchPose;                // 0x2C
  4173.         AimingPoseData m_pronePose;                 // 0x44
  4174.         DWORD m_zoomTransitionTimeArray;            // 0x5C
  4175.         FLOAT m_fovTransitionTime;                  // 0x60
  4176.         FLOAT m_fovDelayTime;                       // 0x64
  4177.         Array<AimerModifierData*> m_modifiers;      // 0x68
  4178.         FLOAT m_aimingRange;                        // 0x6C
  4179.         FLOAT m_lockedAimToTargetSpeed;             // 0x70
  4180.         INT m_rootToZoomAfterReload;                // 0x74
  4181.     }; // 0x78
  4182.  
  4183.     class SoldierAimAssistData
  4184.         : public GameDataContainer                              // 0x00
  4185.     {
  4186.     public:
  4187.         PAD(0x8);                                               // 0x08
  4188.         D3DXVECTOR4 m_eyePosOffset;                                 // 0x10
  4189.         D3DXVECTOR4 m_stickyBoxScale;                                   // 0x20
  4190.         D3DXVECTOR4 m_snapDistanceScale;                                // 0x30
  4191.         D3DXVECTOR4 m_snapBoxScale;                                 // 0x40
  4192.         D3DXVECTOR4 m_stickyDistanceScale;                              // 0x50
  4193.         D3DXVECTOR4 m_maxAcceleration;                                  // 0x60
  4194.         FLOAT m_accelerationDamping;                            // 0x68
  4195.         FLOAT m_accelerationInputThreshold;                     // 0x6C
  4196.         FLOAT m_accelerationMultplier;                          // 0x70
  4197.         FLOAT m_squaredAcceleration;                            // 0x74
  4198.         FLOAT m_yawSpeedStrength;                               // 0x78
  4199.         Array<FLOAT> m_zoomedInputPolynomial;                   // 0x7C
  4200.         FLOAT m_accelerationTimeThreshold;                      // 0x80
  4201.         Array<FLOAT> m_attractDistanceFallOff;                  // 0x84
  4202.         FLOAT m_attractUserInputMultiplier;                     // 0x88
  4203.         FLOAT m_attractOwnSpeedInfluence;                       // 0x8C
  4204.         FLOAT m_attractTargetSpeedInfluence;                    // 0x90
  4205.         FLOAT m_attractOwnRequiredMovementForMaximumAttract;    // 0x94
  4206.         FLOAT m_attractStartInputThreshold;                     // 0x98
  4207.         FLOAT m_attractZoomingMultiplier;                       // 0x9C
  4208.         FLOAT m_attractZoomingPostTime;                         // 0xA0
  4209.         FLOAT m_attractYawStrength;                             // 0xA4
  4210.         FLOAT m_attractPitchStrength;                           // 0xA8
  4211.         FLOAT m_pitchSpeedStrength;                             // 0xAC
  4212.         FLOAT m_attractSoftZone;                                // 0xB0
  4213.         Array<FLOAT> m_inputPolynomial;                         // 0xB4
  4214.         CHAR m_useYawAcceleration;                              // 0xB8
  4215.         CHAR m_usePitchAcceleration;                            // 0xB9
  4216.         PAD(0x2);                                               // 0xBA
  4217.     }; // 0xBC
  4218.  
  4219.     class ClientAimingReplication
  4220.     {
  4221.     public:
  4222.         LPVOID vftable;         // 0x00
  4223.         FLOAT m_yaw;            // 0x04
  4224.         FLOAT m_pitch;          // 0x08
  4225.         FLOAT m_deltaYaw;       // 0x0C
  4226.         FLOAT m_deltaPitch;     // 0x10
  4227.         FLOAT m_activated;      // 0x14
  4228.     }; // 0x18
  4229.  
  4230.     class LockingController
  4231.     {
  4232.     public:
  4233.         enum LockState
  4234.         {
  4235.             Idle,
  4236.             Locking,
  4237.             Locked,
  4238.         };
  4239.  
  4240.         LPVOID vftable;                 // 0x00
  4241.         LockingControllerData* m_data;  // 0x04
  4242.         FLOAT m_currLockAmount;         // 0x08
  4243.         LockState m_lockState;          // 0x0C
  4244.         CHAR m_active;                  // 0x10
  4245.         CHAR m_lastLockSuccessful;      // 0x11
  4246.         PAD(0x2);                       // 0x12
  4247.         DWORD m_zoomLevel;              // 0x14
  4248.         LockType m_currentLockType;     // 0x18
  4249.     }; // 0x1C
  4250.  
  4251.     class ZoomLevelLockData
  4252.     {
  4253.     public:
  4254.         FLOAT m_outlineTaggedDistance;      // 0x00
  4255.         LockType m_lockType;                // 0x04
  4256.     }; // 0x08
  4257.  
  4258.     class LockingControllerData
  4259.         : public DataContainer
  4260.     {
  4261.     public:
  4262.         Array<ZoomLevelLockData> m_zoomLevelLock;   // 0x08
  4263.         FLOAT m_lockTime;                           // 0x0C
  4264.         FLOAT m_releaseTime;                        // 0x10
  4265.         FLOAT m_releaseOnNewTargetTime;             // 0x14
  4266.         FLOAT m_sampleRate;                         // 0x18
  4267.         FLOAT m_holdStillThreshold;                 // 0x1C
  4268.         FLOAT m_rayLength;                          // 0x20
  4269.         FLOAT m_minimumLockTime;                    // 0x24
  4270.         FLOAT m_acceptanceAngle;                    // 0x28
  4271.         FLOAT m_angleConstant;                      // 0x2C
  4272.         FLOAT m_sensitivity;                        // 0x30
  4273.         FLOAT m_distanceConstant;                   // 0x34
  4274.         CHAR m_positionOnly;                        // 0x38
  4275.         CHAR m_lockOnWorldSpacePos;                 // 0x39
  4276.         CHAR m_lockOnVisibleTargetsOnly;            // 0x3A
  4277.         CHAR m_lockOnEmptyVehicles;                 // 0x3B
  4278.     };
  4279.  
  4280.     class ClientLockingController
  4281.         : public LockingController                  // 0x00
  4282.     {
  4283.     public:
  4284.         WeakPtr<ClientPhysicsEntity> m_currTarget;  // 0x1C
  4285.         D3DXVECTOR4 m_targetPos;                            // 0x20
  4286.         WORD m_targetGhostId;                       // 0x30
  4287.         PAD(0x2);                                   // 0x32
  4288.     }; // 0x34
  4289.  
  4290.     class WeaponFiringCallbackHandler
  4291.     {
  4292.     public:
  4293.         class Event
  4294.         {
  4295.         public:
  4296.             WeaponFiringEvent call; // 0x00
  4297.             FLOAT powerModifier;    // 0x04
  4298.             DWORD ticks;            // 0x08
  4299.             CHAR trace;             // 0x0C
  4300.             CHAR detonatorActive;   // 0x0D
  4301.             CHAR needUpdate;        // 0x0E
  4302.             PAD(0x1);               // 0x0F
  4303.         }; // 0x10
  4304.  
  4305.         LPVOID vftable;     // 0x00
  4306.         PAD(0x88);          // 0x04
  4307.     }; // 0x8C
  4308.  
  4309.     class ClientWeaponFiringReplication
  4310.         : public WeaponFiringCallbackHandler    // 0x00
  4311.     {
  4312.     public:
  4313.         class AIWeaponData
  4314.         {
  4315.         public:
  4316.             INT fireCount;                  // 0x00
  4317.             INT releaseCount;               // 0x04
  4318.             INT autoFireCount;              // 0x08
  4319.             FLOAT timeSinceFiring;          // 0x0C
  4320.             FLOAT powerModifier;            // 0x10
  4321.             eastl::vector<UINT> tickBuffer; // 0x14
  4322.             CHAR wasAutomaticing;           // 0x24
  4323.             CHAR isHolding;                 // 0x25
  4324.             CHAR hasSpawnedShot;            // 0x26
  4325.             PAD(0x1);                       // 0x27
  4326.         }; // 0x28
  4327.  
  4328.         WeaponFiringData* m_data;               // 0x8C
  4329.         WeaponModifier* m_weaponModifier;       // 0x90
  4330.         CHAR m_networkFlagIsSingleFiring;       // 0x94
  4331.         CHAR m_networkFlagIsAutomaticFiring;    // 0x95
  4332.         CHAR m_networkFlagIsReloading;          // 0x96
  4333.         CHAR m_networkFlagBoltAction;           // 0x97
  4334.         AIWeaponData m_primary;                 // 0x98
  4335.         FLOAT m_timeUntilNextAutomaticShot;     // 0xC0
  4336.         INT m_reloadCount;                      // 0xC4
  4337.         INT m_boltActionCount;                  // 0xC8
  4338.         DWORD m_firedBullets;                   // 0xCC
  4339.         FLOAT m_heat;                           // 0xD0
  4340.         FLOAT m_timeToWait;                     // 0xD4
  4341.         eastl::vector<Event> m_events;          // 0xD8
  4342.         WeaponSway* m_weaponSway;               // 0xE8
  4343.         bool m_activated;                       // 0xEC
  4344.         bool m_detonatorActive;                 // 0xED
  4345.         bool m_oldDetonatorState;               // 0xEE
  4346.         bool m_firedCount;                      // 0xEF
  4347.         bool m_firstApply;                      // 0xF0
  4348.         bool m_useAIShootSpace;                 // 0xF1
  4349.         PAD(0x3E);                              // 0xF2
  4350.         D3DXMATRIX m_aiShootSpace;          // 0x130
  4351.         INT m_fireLogicType;                    // 0x170
  4352.         FLOAT m_simulatedTime;                  // 0x174
  4353.         FLOAT m_predictedTime;                  // 0x178
  4354.     }; // 0x17C
  4355.  
  4356.     class WeaponFiringData
  4357.         : public GameDataContainer              // 0x00
  4358.     {
  4359.     public:
  4360.         FiringFunctionData* m_primaryFire;      // 0x08
  4361.         FLOAT m_deployTime;                     // 0x0C
  4362.         FLOAT m_reactivateCooldownTime;         // 0x10
  4363.         FLOAT m_altDeployTime;                  // 0x14
  4364.         PAD(0x4);                               // 0x18
  4365.         INT m_shotLimit;                        // 0x1C
  4366.         DataContainer* m_weaponSway;            // 0x20
  4367.         FLOAT m_supportDelayProne;              // 0x24
  4368.     }; // 0x28
  4369.  
  4370.     class FiringDispersionData
  4371.     {
  4372.     public:
  4373.         FLOAT m_minAngle;           // 0x00
  4374.         FLOAT m_maxAngle;           // 0x04
  4375.         FLOAT m_increasePerShot;    // 0x08
  4376.         FLOAT m_decreasePerShot;    // 0x0C
  4377.     }; // 0x10
  4378.  
  4379.     class SoldierWeaponDispersion
  4380.     {
  4381.     public:
  4382.         FiringDispersionData m_standDispersion;     // 0x00
  4383.         FiringDispersionData m_crouchDispersion;    // 0x10
  4384.         FiringDispersionData m_proneDispersion;     // 0x20
  4385.         FLOAT m_jumpDispersionAngle;                // 0x30
  4386.         FLOAT m_proneTransitionDispersionAngle;     // 0x34
  4387.         FLOAT m_moveDispersionAngle;                // 0x38
  4388.         FLOAT m_moveZoomedDispersionAngle;          // 0x3C
  4389.         FLOAT m_decreasePerSecond;                  // 0x40
  4390.     }; // 0x44
  4391.  
  4392.     class ShotConfigData
  4393.     {
  4394.     public:
  4395.   /*              
  4396.         int field_InitialPosition;                     // constant 0x0
  4397.         int field_InitialDirection;                     // constant 0x1
  4398.         int field_InitialSpeed;                     // constant 0x2
  4399.         int field_InheritWeaponSpeedAmount;                     // constant 0x3
  4400.         int field_MuzzleExplosion;                     // constant 0x4
  4401.         int field_ProjectileData;                     // constant 0x5
  4402.         int field_SecondaryProjectileData;                     // constant 0x6
  4403.         int field_Projectile;                     // constant 0x7
  4404.         int field_SecondaryProjectile;                     // constant 0x8
  4405.         int field_SpawnDelay;                     // constant 0x9
  4406.         int field_NumberOfBulletsPerShell;                     // constant 0xA
  4407.         int field_NumberOfBulletsPerShot;                     // constant 0xB
  4408.         int field_NumberOfBulletsPerBurst;                     // constant 0xC
  4409.         int field_RelativeTargetAiming;                     // constant 0xD
  4410.         int field_ForceSpawnToCamera;                     // constant 0xE
  4411.         int field_SpawnVisualAtWeaponBone;                     // constant 0xF
  4412.         int field_ActiveForceSpawnToCamera;                     // constant 0x10
  4413.         int field__Count;                     // constant 0x11
  4414. */
  4415.  
  4416.         D3DXVECTOR4 m_initialPosition;                          // 0x00
  4417.         D3DXVECTOR4 m_initialDirection;                             // 0x10
  4418.         D3DXVECTOR4 m_initialSpeed;                                 // 0x20
  4419.         FLOAT m_inheritWeaponSpeedAmount;                   // 0x30
  4420.         DWORD m_muzzleExplosion;                            // 0x34
  4421.         ProjectileEntityData* m_projectileData;             // 0x38
  4422.         ProjectileEntityData* m_secondaryProjectileData;    // 0x3C
  4423.         DWORD m_projectile;                                 // 0x40
  4424.         DWORD m_secondaryProjectile;                        // 0x44
  4425.         FLOAT m_spawnDelay;                                 // 0x48
  4426.         DWORD m_numberOfBulletsPerShell;                    // 0x4C
  4427.         DWORD m_numberOfBulletsPerShot;                     // 0x50
  4428.         DWORD m_numberOfBulletsPerBurst;                    // 0x54
  4429.         CHAR m_relativeTargetAiming;                        // 0x58
  4430.         CHAR m_forceSpawnToCamera;                          // 0x59
  4431.         CHAR m_spawnVisualAtWeaponBone;                     // 0x5A
  4432.         CHAR m_activeForceSpawnToCamera;                    // 0x5B
  4433.     }; // 0x5C
  4434.  
  4435.     class ProjectileEntityData
  4436.         : public GamePhysicsEntityData              // 0x00
  4437.     {
  4438.     public:
  4439.         PAD(0xC);                                   // 0x64
  4440.         INT m_hitReactionWeaponType;                // 0x70
  4441.         FLOAT m_initialSpeed;                       // 0x74
  4442.         FLOAT m_timeToLive;                         // 0x78
  4443.         FLOAT m_initMeshHideTime;                   // 0x7C
  4444.         FLOAT m_visualConvergeDistance;             // 0x80
  4445.         FLOAT m_unknown;                            // 0x84
  4446.         MaterialContainerPair* m_materialPair;      // 0x88
  4447.         DataContainer* m_explosion;                 // 0x8C
  4448.         WeaponSuppressionData* m_suppressionData;   // 0x90
  4449.         String m_ammunitionType;                    // 0x94
  4450.         CHAR m_serverProjectileDisabled;            // 0x98
  4451.         CHAR m_detonateOnTimeout;                   // 0x99
  4452.         PAD(0x26);                                  // 0x9A
  4453.     }; // 0x9C
  4454.  
  4455.     class BulletEntityData : public ProjectileEntityData
  4456.     {
  4457.         public:
  4458.         float m_stamina;                     // this+0xC0
  4459.         void* m_flyBySound;                     // this+0xC4
  4460.         void* m_dudExplosion;                     // this+0xC8
  4461.         float m_gravity;                     // this+0xCC
  4462.         float m_impactImpulse;                     // this+0xD0
  4463.         float m_detonationTimeVariation;                     // this+0xD4
  4464.         float m_vehicleDetonationRadius;                     // this+0xD8
  4465.         float m_vehicleDetonationActivationDelay;                     // this+0xDC
  4466.         float m_flyBySoundRadius;                     // this+0xE0
  4467.         float m_flyBySoundSpeed;                     // this+0xE4
  4468.         float m_firstFrameTravelDistance;                     // this+0xE8
  4469.         float m_distributeDamageOverTime;                     // this+0xEC
  4470.         float m_startDamage;                     // this+0xF0
  4471.         float m_endDamage;                     // this+0xF4
  4472.         float m_damageFalloffStartDistance;                     // this+0xF8
  4473.         float m_damageFalloffEndDistance;                     // this+0xFC
  4474.         float m_timeToArmExplosion;                     // this+0x100
  4475.         bool m_hasVehicleDetonation;                     // this+0x104
  4476.         bool m_instantHit;                     // this+0x105
  4477.         bool m_stopTrailEffectOnUnspawn;                     // this+0x106
  4478.     };
  4479.  
  4480.     class WeaponSuppressionData
  4481.         : public DataContainer      // 0x00
  4482.     {
  4483.     public:
  4484.         FLOAT m_maxMultiplier;      // 0x08
  4485.         FLOAT m_minMultiplier;      // 0x0C
  4486.         FLOAT m_minDistance;        // 0x10
  4487.         FLOAT m_maxDistance;        // 0x14
  4488.     }; // 0x18
  4489.  
  4490.     class HoldAndReleaseData
  4491.     {
  4492.     public:
  4493.         FLOAT m_maxHoldTime;                    // 0x00
  4494.         FLOAT m_minPowerModifier;               // 0x04
  4495.         FLOAT m_maxPowerModifier;               // 0x08
  4496.         FLOAT m_powerIncreasePerSecond;         // 0x0C
  4497.         FLOAT m_delay;                          // 0x10
  4498.         FLOAT m_killedHoldingPowerModifier;     // 0x14
  4499.         INT m_forceFireWhenKilledHolding;       // 0x18
  4500.     }; // 0x1C
  4501.  
  4502.     class BoltActionData
  4503.     {
  4504.     public:
  4505.         FLOAT m_boltActionDelay;                // 0x00
  4506.         FLOAT m_boltActionTime;                 // 0x04
  4507.         CHAR m_holdBoltActionUntilFireRelease;  // 0x08
  4508.         CHAR m_holdBoltActionUntilZoomRelease;  // 0x09
  4509.         CHAR m_forceBoltActionOnFireTrigger;    // 0x0A
  4510.         CHAR m_unZoomOnBoltAction;              // 0x0B
  4511.         CHAR m_returnToZoomAfterBoltAction;     // 0x0C
  4512.         PAD(3);                                 // 0x0D
  4513.     }; // 0x10
  4514.  
  4515.     class RecoilData
  4516.     {
  4517.     public:
  4518.         FLOAT m_maxRecoilAngleX;            // 0x00
  4519.         FLOAT m_minRecoilAngleX;            // 0x04
  4520.         FLOAT m_maxRecoilAngleY;            // 0x08
  4521.         FLOAT m_minRecoilAngleY;            // 0x0C
  4522.         FLOAT m_maxRecoilAngleZ;            // 0x10
  4523.         FLOAT m_minRecoilAngleZ;            // 0x14
  4524.         FLOAT m_maxRecoilFov;               // 0x18
  4525.         FLOAT m_minRecoilFov;               // 0x1C
  4526.         INT m_recoilFollowsDispersion;      // 0x20
  4527.     }; // 0x24
  4528.  
  4529.     class FireLogicData
  4530.     {
  4531.     public:
  4532.         HoldAndReleaseData m_holdAndRelease;                // 0x00
  4533.         BoltActionData m_boltAction;                        // 0x1C
  4534.         RecoilData m_recoil;                                // 0x2C
  4535.         EntryInputActionEnum m_fireInputAction;             // 0x50
  4536.         EntryInputActionEnum m_reloadInputAction;           // 0x54
  4537.         EntryInputActionEnum m_cycleFireModeInputAction;    // 0x58
  4538.         FLOAT m_triggerPullWeight;                          // 0x5C
  4539.         FLOAT m_rateOfFire;                                 // 0x60
  4540.         FLOAT m_rateOfFireForBurst;                         // 0x64
  4541.         FLOAT m_clientFireRateMultiplier;                   // 0x68
  4542.         FLOAT m_reloadDelay;                                // 0x6C
  4543.         Array<FireLogicType> m_fireLogicTypeArray;          // 0x70
  4544.         FLOAT m_reloadThreshold;                            // 0x74
  4545.         FLOAT m_preFireDelay;                               // 0x78
  4546.         FLOAT m_reloadTime;                                 // 0x7C
  4547.         FLOAT m_reloadTimeBulletsLeft;                      // 0x80
  4548.         FireLogicType m_fireLogicType;                      // 0x84
  4549.         ReloadLogic m_reloadLogic;                          // 0x88
  4550.         FLOAT m_automaticDelay;                             // 0x8C
  4551.         ReloadType m_reloadType;                            // 0x90
  4552.         CHAR m_holdOffReloadUntilZoomRelease;               // 0x94
  4553.         CHAR m_forceReloadActionOnFireTrigger;              // 0x95
  4554.         CHAR m_holdOffReloadUntilFireRelease;               // 0x96
  4555.         CHAR m_alwaysAutoReload;                            // 0x97
  4556.     }; // 0x98
  4557.  
  4558.     class AmmoConfigData
  4559.     {
  4560.     public:
  4561.         INT m_magazineCapacity;                 // 0x00
  4562.         INT m_numberOfMagazines;                // 0x04
  4563.         DWORD m_traceFrequency;                 // 0x08
  4564.         DWORD m_ammoPickupMinAmount;            // 0x0C
  4565.         DWORD m_ammoPickupMaxAmount;            // 0x10
  4566.         FLOAT m_autoReplenishDelay;             // 0x14
  4567.         INT m_ammoBagPickupAmount;              // 0x18
  4568.         FLOAT m_ammoBagPickupDelayMultiplier;   // 0x1C
  4569.         INT m_autoReplenishMagazine;            // 0x20
  4570.     }; // 0x24
  4571.  
  4572.     class OverHeatData
  4573.     {
  4574.     public:
  4575.         FLOAT m_heatPerBullet;              // 0x00
  4576.         FLOAT m_heatDropPerSecond;          // 0x04
  4577.         FLOAT m_overHeatPenaltyTime;        // 0x08
  4578.         FLOAT m_overHeatThreshold;          // 0x0C
  4579.         FireEffectData m_overHeatEffect;    // 0x10
  4580.     }; // 0x5C
  4581.  
  4582.     class FiringFunctionData
  4583.         : public DataContainer                      // 0x00
  4584.     {
  4585.     public:
  4586.         Array<FiringDispersionData> m_dispersion;   // 0x08
  4587.         SoldierWeaponDispersion m_weaponDispersion; // 0x0C
  4588.         Array<FireEffectData> m_fireEffects1p;      // 0x50
  4589.         Array<FireEffectData> m_fireEffects3p;      // 0x54
  4590.         DataContainer* m_sound;                     // 0x58
  4591.         PAD(0x4);                                   // 0x5C
  4592.         ShotConfigData m_shot;                      // 0x60
  4593.         PAD(0x4);                                   // 0xBC
  4594.         FireLogicData m_fireLogic;                  // 0xC0
  4595.         AmmoConfigData m_ammo;                      // 0x158
  4596.         PAD(0x4);                                   // 0x17C
  4597.         OverHeatData m_overHeat;                    // 0x180
  4598.         PAD(0x4);                                   // 0x1DC
  4599.         FLOAT m_selfHealTimeWhenDeployed;           // 0x1E0
  4600.         FLOAT m_ammoCrateReloadDelay;               // 0x1E4
  4601.         CHAR m_unlimitedAmmoForAI;                  // 0x1E8
  4602.         CHAR m_usePrimaryAmmo;                      // 0x1E9
  4603.         PAD(0x2);                                   // 0x1EA
  4604.     }; // 0x1EC
  4605.  
  4606.     class RefillableAmmunitionDepot
  4607.         : public AmmunitionDepot
  4608.     {
  4609.     };
  4610.  
  4611.     class WeaponFiring
  4612.         : public WeaponFiringCallbackHandler,           // 0x00
  4613.         public RefillableAmmunitionDepot                // 0x8C
  4614.     {
  4615.     public:
  4616.         enum WeaponState
  4617.         {
  4618.             Deploy,
  4619.             AltDeploy,
  4620.             TriggerReleaseWait,
  4621.             NoTrigger,
  4622.             PreFireDelay,
  4623.             PrimarySingleDelay,
  4624.             PrimarySingle,
  4625.             BoltActionDelay,
  4626.             BoltAction,
  4627.             PrimaryAutomaticFire,
  4628.             ReloadDelay,
  4629.             Reload,
  4630.             PostReload,
  4631.             PrimaryHoldAndRelease_Hold,
  4632.             PrimaryHoldAndRelease_ReleaseDelay,
  4633.             PrimaryHoldAndRelease_Release,
  4634.             NumWeaponStates,
  4635.             WeaponStateSizeInBits,
  4636.         };
  4637.  
  4638.         class Function
  4639.         {
  4640.         public:
  4641.             INT projectilesLoaded;                      // 0x00
  4642.             INT projectilesInMagazines;                 // 0x04
  4643.             INT numberOfProjectilesToFire;              // 0x08
  4644.             CHAR hasStoppedFiring;                      // 0x0C
  4645.             CHAR primaryFireTriggeredLastFrame;         // 0x0D
  4646.             CHAR isOverheated;                          // 0x0E
  4647.             PAD(0x1);                                   // 0x0F
  4648.             FLOAT heat;                                 // 0x10
  4649.             FLOAT overheatTimer;                        // 0x14
  4650.             DWORD ticks;                                // 0x18
  4651.             DWORD currentFireModeIndex;                 // 0x1C
  4652.             INT externalMagazineCapacity;               // 0x20
  4653.             GameObjectData* m_firingHolderData;         // 0x24
  4654.             eastl::vector<FireLogicType> m_fireModes;   // 0x28
  4655.         };
  4656.  
  4657.         MemoryArena* m_arena;                           // 0x90
  4658.         WeaponFiringData* m_data;                       // 0x94
  4659.         AmmoConfigData* m_ammoData;                     // 0x98
  4660.         GameObjectData* m_firingHolderData;             // 0x9C
  4661.         WeaponSway* m_weaponSway;                       // 0xA0
  4662.         WeaponState m_weaponState;                      // 0xA4
  4663.         WeaponState m_lastWeaponState;                  // 0xA8
  4664.         WeaponState m_nextWeaponState;                  // 0xAC
  4665.         FLOAT m_switchCooldownTimer;                    // 0xB0
  4666.         FLOAT m_autoReplenishTime;                      // 0xB4
  4667.         FLOAT m_timeToWait;                             // 0xB8
  4668.         FLOAT m_stateData;                              // 0xBC
  4669.         FLOAT m_holdReleaseMinDelay;                    // 0xC0
  4670.         FLOAT m_recoilTimer;                            // 0xC4
  4671.         FLOAT m_recoilAngleX;                           // 0xC8
  4672.         FLOAT m_recoilAngleY;                           // 0xCC
  4673.         FLOAT m_recoilAngleZ;                           // 0xD0
  4674.         FLOAT m_recoilFovAngle;                         // 0xD4
  4675.         FLOAT m_primaryAmmoReplenishDelay;              // 0xD8
  4676.         FLOAT m_reloadTimeMultiplier;                   // 0xDC
  4677.         FLOAT m_overheatDropMultiplier;                 // 0xE0
  4678.         INT m_primaryAmmoToFill;                        // 0xE4
  4679.         WeakPtr<Entity> m_characterMeleeEntity;         // 0xE8
  4680.         INT m_externalPrimaryMagazineCapacity;          // 0xEC
  4681.         Function m_primaryFire;                         // 0xF0
  4682.         WeaponModifier* m_weaponModifier;               // 0x128
  4683.         DWORD m_activeContext;                          // 0x12C
  4684.         DWORD m_additionMagazines;                      // 0x130
  4685.         DWORD m_impulseDelay;                           // 0x134
  4686.     }; // 0x138
  4687.  
  4688.     class Tool
  4689.         : public ITypedObject           // 0x00
  4690.     {
  4691.     public:
  4692.         WeaponData* m_firingData;       // 0x04
  4693.         CHAR m_isPlayerControlled;      // 0x08
  4694.         PAD(0x3);                       // 0x09
  4695.     }; // 0xC
  4696.  
  4697.     class ToolData
  4698.         : public DataContainer      // 0x00
  4699.     {
  4700.     public:
  4701.         INT m_isAlwaysActive;       // 0x08
  4702.     }; // 0x0C
  4703.  
  4704.     class WeaponData
  4705.         : public ToolData                   // 0x00
  4706.     {
  4707.     public:
  4708.         INT m_showLaserPaintedVehicles;     // 0x0C
  4709.     }; // 0x10
  4710.  
  4711.     class FiringDispersion
  4712.     {
  4713.     public:
  4714.         FLOAT m_currAngle;              // 0x00
  4715.         FLOAT m_multiplier;             // 0x04
  4716.         FiringDispersionData* m_data;   // 0x08
  4717.         PAD(0x10);                      // 0x0C
  4718.     }; // 0x1C
  4719.  
  4720.     class Weapon
  4721.         : public Tool                                               // 0x00
  4722.     {
  4723.     public:
  4724.         WeaponFiringData* m_firingData;                             // 0x0C
  4725.         WeaponModifier* m_modifier;                                 // 0x10
  4726.         PAD(0xC);                                                   // 0x14
  4727.         D3DXVECTOR4 m_moveSpeed;                                            // 0x20
  4728.         D3DXMATRIX m_shootSpace;                                // 0x30
  4729.         D3DXMATRIX m_shootSpaceDelta;                           // 0x70
  4730.         eastl::fixed_vector<FiringDispersion, 3, 2> m_dispersion;   // 0xB0
  4731.         FLOAT m_externalDispersionAngle;                            // 0x118
  4732.         CHAR m_currPose;                                            // 0x11C
  4733.         CHAR m_useSecondaryProjectile;                              // 0x11D
  4734.         PAD(0x2);                                                   // 0x11E
  4735.     }; // 0x120
  4736.  
  4737.     class RayCastHit
  4738.     {
  4739.     public:
  4740.         D3DXVECTOR4 m_position;                 // 0x00
  4741.         D3DXVECTOR4 m_normal;                       // 0x10
  4742.         PhysicsEntityBase* m_rigidBody;     // 0x20
  4743.         MaterialContainerPair* m_material;  // 0x24
  4744.         DWORD m_part;                       // 0x28
  4745.         INT m_bone;                         // 0x2C
  4746.         FLOAT m_lambda;                     // 0x30
  4747.         PAD(0xC);                           // 0x34
  4748.     }; // 0x40
  4749.  
  4750.     class ControllableFinder
  4751.     {
  4752.     public:
  4753.         PAD(0x468);                                             // 0x00
  4754.         GameWorld* m_gameWorld;                                 // 0x468
  4755.         WeakPtr<ClientPlayer> m_ignoredPlayer;                  // 0x46C
  4756.         WeakPtr<ClientControllableEntity> m_controllableInAim;  // 0x470
  4757.         PAD(0xC);                                               // 0x474
  4758.         D3DXVECTOR4 m_lastRayBegin;                                 // 0x480
  4759.         D3DXVECTOR4 m_lastRayEnd;                                       // 0x490
  4760.         RayCastHit m_lastHIt;                                   // 0x4A0
  4761.     }; // 0x4E0
  4762.  
  4763. template <class T>
  4764.     class fb_array
  4765.     {
  4766.     public:
  4767.         T* mpBegin;
  4768.         T* mpEnd;
  4769.         T* mpCapacity;
  4770.         void* allocator;
  4771.     };
  4772.  
  4773. class EntityWorld
  4774. {
  4775. public:
  4776.     virtual void addSpatialEntity(void *); // 0x00 #0
  4777.  
  4778.       struct SpatialSize
  4779.     {
  4780.         float halfSizeXZ;     // 0x000
  4781.         float minY;     // 0x004
  4782.     };
  4783.     struct RemovedEntityInfo
  4784.     {
  4785.         Entity* entity;     // 0x000
  4786.         void* func;     // 0x004
  4787.         void* creator;     // 0x008
  4788.         void* userData;     // 0x00C
  4789.     };
  4790.     struct EntityCollectionSegment
  4791.     {
  4792.         fb_array<Entity *> ents;     // 0x000
  4793.         class SubLevel* m_subLevel;     // 0x010
  4794.         EntityCollectionSegment* m_prev;     // 0x014
  4795.         EntityCollectionSegment* m_next;     // 0x018
  4796.         int m_iterableSize;     // 0x01C
  4797.         int m_collectionIndex;     // 0x020
  4798.         int m_locked;     // 0x024
  4799.     };
  4800.     struct EntityCollection
  4801.     {
  4802.         EntityCollectionSegment* firstSegment;     // 0x000
  4803.         void* creator;     // 0x004
  4804.     };
  4805.     SpatialSize m_spatialSize;     // 0x004
  4806.     struct
  4807.     {
  4808.         fb_array<RemovedEntityInfo> Array;     // 0x000
  4809.         RemovedEntityInfo* Ptr;     // 0x010
  4810.         RemovedEntityInfo Buffer[128];     // 0x014
  4811.     }
  4812.     m_removedEntities;     // 0x00C
  4813.     fb_array<EntityCollection> m_collections;     // 0x820
  4814.     class SubLevel* m_rootLevel;     // 0x830
  4815.     short m_entityRuntimeId;     // 0x834
  4816.     UCHAR unknown_836[2];     // 0x836
  4817.     int m_realm;     // 0x838
  4818.     bool m_isDeletingAllEntities;     // 0x83C
  4819.     bool m_isLoadingSaveGame;     // 0x83D
  4820.     UCHAR unknown_83E[2];     // 0x83E
  4821. };
  4822.  
  4823.     class EntityCreator
  4824.     {
  4825.     public:
  4826.         LPVOID vftable;                     // 0x00
  4827.         EntityCreator* m_previousCreator;   // 0x04
  4828.         EntityCreator* m_nextCreator;       // 0x08
  4829.         Realm m_realm;                      // 0x0C
  4830.         INT m_linked;                       // 0x10
  4831.     }; // 0x14
  4832.  
  4833.  
  4834.  
  4835.     //class GameWorld
  4836.     //  : public EntityWorld,           // 0x00
  4837.     //  public IPhysicsRayCaster        // 0x840
  4838.     //{
  4839.     //public:
  4840.     //  DWORD m_spatialQueryManager;    // 0x844 SpatialQueryManager*
  4841.     //  DWORD m_physicsManager;         // 0x848 IPhysicsManager*
  4842.     //  LPVOID m_terrainHeightFunc;     // 0x84C
  4843.     //  LPVOID m_hasTerrainFunc;        // 0x850
  4844.     //  LPVOID m_terrainMaterial;       // 0x854
  4845.     //  LPVOID m_getSoldierFunc;        // 0x858
  4846.     //}; // 0x85C
  4847.  
  4848.     class ObjectBlueprint
  4849.         : public Blueprint          // 0x00
  4850.     {
  4851.     public:
  4852.         DataContainer* m_object;    // 0x20
  4853.     }; // 0x24
  4854.  
  4855.     class ProjectileBlueprint
  4856.         : public ObjectBlueprint    // 0x00
  4857.     {
  4858.     }; // 0x24
  4859.  
  4860.     class ClientWeapon
  4861.         : public Weapon,                                                        // 0x00
  4862.         public WeaponFiringCallbacks,                                           // 0x120
  4863.         public WeaponFiringCallbackHandler                                      // 0x124
  4864.     {
  4865.     public:
  4866.         class ProjectileSyncInfo
  4867.         {
  4868.         public:
  4869.             ProjectileBlueprint* projectile;        // 0x00
  4870.             ProjectileEntityData* projectileData;   // 0x04
  4871.             INT localPlayer;                        // 0x08
  4872.             WeaponFiringShooter* shooterArg;        // 0x0C
  4873.             D3DXMATRIX shootSpace;              // 0x10
  4874.             D3DXMATRIX visualShootSpace;        // 0x50
  4875.             D3DXVECTOR4 initialSpeed;                       // 0x90
  4876.             DWORD randomSeed;                       // 0xA0
  4877.             INT trace;                              // 0xA4
  4878.             D3DXVECTOR4* targetPosition;                    // 0xA8
  4879.             ClientPhysicsEntity* targetObject;      // 0xAC
  4880.             FLOAT damageMultiplier;                 // 0xB0
  4881.             FLOAT explosionDamageMultiplier;        // 0xB4
  4882.             DWORD weaponUnlockAsset;                // 0xB8
  4883.         }; // 0xBC
  4884.  
  4885.         EntityBus* m_entityBus;                                                 // 0x1B0
  4886.         AmmunitionDepot* m_ammoDepot;                                           // 0x1B4
  4887.         FLOAT m_cameraFov;                                                      // 0x1B8
  4888.         FLOAT m_weaponFov;                                                      // 0x1BC
  4889.         FLOAT m_fovScaleFactor;                                                 // 0x1C0
  4890.         DataContainer* m_primaryWeaponSound;                                    // 0x1C4
  4891.         DWORD m_zoomLevel;                                                      // 0x1C8
  4892.         CHAR m_zoomLevelLocked;                                                 // 0x1CC
  4893.         CHAR m_playFire;                                                        // 0x1CD
  4894.         CHAR m_stopFire;                                                        // 0x1CE
  4895.         PAD(0x1);                                                               // 0x1CF
  4896.         // ClientWeapon, I had to pad ControllableFinder by 10. Might be somewhere else in ClientWeapon but I pad where I need it.
  4897.         // Patch 03.12.12
  4898.         ControllableFinder m_controllableFinder;                                // 0x1D0
  4899.         DWORD m_overheatEffectHandle;                                           // 0x6B0
  4900.         eastl::pair<UINT, FireEffectData*> m_fireFxHandles[8];                  // 0x6B4
  4901.         DWORD m_fireFxEffectHandleSz;                                           // 0x6F4
  4902.         CHAR m_callbackCalledThisFrame[2];                                      // 0x6F8
  4903.         PAD(0x2);                                                               // 0x6FA
  4904.         WeakPtr<WeaponFiringShooter> m_shooter;                                 // 0x6FC
  4905.         WeakPtr<ClientGameEntity> m_targetEntity;                               // 0x700
  4906.         FLOAT m_lockTime;                                                       // 0x704
  4907.         FLOAT m_aimUpdateTimer;                                                 // 0x708
  4908.         FLOAT m_fireRateCount;                                                  // 0x70C
  4909.         CHAR m_hasFriendlyTarget;                                               // 0x710
  4910.         CHAR m_hasEnemyTarget;                                                  // 0x711
  4911.         CHAR m_hasVehicleTarget;                                                // 0x712
  4912.         CHAR m_hasSoldierTarget;                                                // 0x713
  4913.         DWORD m_weakTokenHolder;                                                // 0x714
  4914.         eastl::vector<ProjectileSyncInfo> m_bulletsToSpawnOnSyncUpdate;         // 0x718
  4915.     }; // 0x728
  4916.  
  4917.     class VehicleEntity
  4918.     {
  4919.     public:
  4920.         PhysicsEntity* m_physicsEntity;     // 0x00
  4921.         FLOAT m_waterLevel;                 // 0x04
  4922.         FLOAT m_terrainLevel;               // 0x08
  4923.         FLOAT m_waterLevelUpdateTimer;      // 0x0C
  4924.         FLOAT m_terrainLevelUpdateTimer;    // 0x10
  4925.     }; // 0x14
  4926.  
  4927.     class DynamicBitSet
  4928.     {
  4929.     public:
  4930.         LPVOID data;        // 0x00
  4931.         INT bitCount;       // 0x04
  4932.     }; // 0x08
  4933.  
  4934.     class PhysicsEntityParts
  4935.     {
  4936.     public:
  4937.         DynamicBitSet m_enabled;            // 0x00
  4938.         D3DXMATRIX* m_base;         // 0x08
  4939.         EntityBusPeer** m_transformNodes;   // 0x0C
  4940.         hkpShape** m_detailShapes;          // 0x10
  4941.         LPBYTE m_transformIndices;          // 0x14
  4942.     }; // 0x18
  4943.  
  4944.     template <class T>
  4945.     class TntObject
  4946.         : public T          // 0x00
  4947.     {
  4948.     public:
  4949.         UINT m_refCnt;      // sizeof(T) + 0x00
  4950.     }; // sizeof(T) + 0x04
  4951.  
  4952.     class IResourceObject
  4953.     {
  4954.     public:
  4955.         LPVOID vftable;     // 0x00
  4956.     }; // 0x04
  4957.  
  4958.     class HavokPhysicsData
  4959.         : public TntObject<IResourceObject>
  4960.     {
  4961.     public:
  4962.         class LoadedData
  4963.         {
  4964.         public:
  4965.             DWORD partCount;                            // 0x00
  4966.             RelocArray<D3DXVECTOR4> partTranslations;           // 0x04
  4967.             PAD(0x4);                                   // 0x0C
  4968.             RelocArray<AxisAlignedBox> localAabbs;      // 0x10
  4969.             PAD(0x4);                                   // 0x18
  4970.             RelocArray<BYTE> materialIndices;           // 0x1C
  4971.             PAD(0x4);                                   // 0x24
  4972.             RelocArray<UINT> materialFlagsAndIndices;   // 0x28
  4973.             FLOAT scale;                                // 0x34
  4974.             BYTE materialCountUsed;                     // 0x38
  4975.             BYTE highestMaterialIndex;                  // 0x39
  4976.             PAD(0x2);                                   // 0x3A
  4977.         }; // 0x3C
  4978.  
  4979.         MemoryArena* m_arena;               // 0x08
  4980.         LoadedData* m_loadedData;           // 0x0C
  4981.         LPVOID m_nativeData;                // 0x10
  4982.         INT m_nativeDataSize;               // 0x14
  4983.         DWORD m_rootContainer;              // 0x18
  4984.         LPUINT m_materialFlagsAndIndices;   // 0x1C
  4985.         UINT m_runtimeFlags;                // 0x20
  4986.     }; // 0x24
  4987.  
  4988.     class PhysicsEntity
  4989.         : public PhysicsEntityBase      // 0x00
  4990.     {
  4991.     public:
  4992.         PAD(0x8);                               // 0x58
  4993.         AxisAlignedBox m_rbAabb;                // 0x60
  4994.         PhysicsEntityParts m_parts;             // 0x80
  4995.         PhysicsEntityData* m_data;              // 0x98
  4996.         HavokPhysicsData* m_havokPhysicsPart;   // 0x9C
  4997.         DWORD m_rb;                             // 0xA0 hkpRigidBody*
  4998.         hkpShape* m_raycastShape;               // 0xA4
  4999.         DWORD m_rbProxy;                        // 0xA8 hkpRigidBody*
  5000.         DWORD m_characterBody;                  // 0xAC hkpRigidBody*
  5001.         INT m_simulationType;                   // 0xB0
  5002.     }; // 0xB4
  5003.  
  5004.     class HavokAsset
  5005.         : public Asset                              // 0x00
  5006.     {
  5007.     public:
  5008.         FLOAT m_scale;                              // 0x0C
  5009.         RefArray<DataContainer> m_externalAssets;   // 0x10
  5010.     }; // 0x14
  5011.  
  5012.     class PhysicsEntityData
  5013.         : public EntityData                     // 0x00
  5014.     {
  5015.     public:
  5016.         PAD(0x4);                               // 0x0C
  5017.         D3DXVECTOR4 m_intertiaModifier;             // 0x10
  5018.         RefArray<HavokAsset> m_scaledAssets;    // 0x20
  5019.         RefArray<DWORD> m_rigidBodies;          // 0x24
  5020.         DataContainer* m_asset;                 // 0x28
  5021.         DataContainer* m_floatPhysics;          // 0x2C
  5022.         FLOAT m_mass;                           // 0x30
  5023.         FLOAT m_restitution;                    // 0x34
  5024.         FLOAT m_friction;                       // 0x38
  5025.         FLOAT m_linearVelocityDamping;          // 0x3C
  5026.         FLOAT m_angularVelocityDamping;         // 0x40
  5027.         DataContainer* m_proximity;             // 0x44
  5028.         RefArray<DWORD> m_constraints;          // 0x48
  5029.         CHAR m_encapsulatePartsInLists;         // 0x4C
  5030.         CHAR m_movableParts;                    // 0x4D
  5031.         PAD(0x2);                               // 0x4E
  5032.  
  5033.         __forceinline char *GetObjectName()//pEntity->m_physicsEntity->m_data->m_scaledAssets.At(0)
  5034.         {
  5035.             static char szVehicleName[20] = {0};
  5036.             bool asdf = false;
  5037.  
  5038.             HavokAsset *pAsset = m_scaledAssets.At(0);
  5039.             if( !pAsset )
  5040.                 return NULL;
  5041.  
  5042.             char *name = pAsset->m_name.GetString();
  5043.  
  5044.             if( name )
  5045.             {
  5046.                 for( int i = 0, j = 0; i < (int)strlen(name); i++ )
  5047.                 {
  5048.                     if( asdf && name[i] == '/' )
  5049.                     {
  5050.                         szVehicleName[j] = 0;
  5051.                         break;
  5052.                     }
  5053.  
  5054.                     if( name[i] == '/' && !asdf )
  5055.                     {
  5056.                         asdf = true;
  5057.                         continue;
  5058.                     }
  5059.  
  5060.                     if( asdf )
  5061.                     {
  5062.                         szVehicleName[j] = name[i];
  5063.                         j++;
  5064.                     }
  5065.                 }
  5066.             }
  5067.             return szVehicleName;
  5068.         }
  5069.     }; // 0x50
  5070.  
  5071.     class ClientVehicleEntity
  5072.         : public ClientControllableEntity,                              // 0x00
  5073.         public network::Interpolator<LPVOID>,                           // 0xB4
  5074.         public VehicleEntity                                            // 0xF4
  5075.     {
  5076.     public:
  5077.         class LockableCallback
  5078.         {
  5079.         public:
  5080.             LPVOID vftable;     // 0x00
  5081.         }; // 0x04
  5082.  
  5083.         PAD(0x8);                                                       // 0x108
  5084.         AxisAlignedBox m_childrenAabb;                                  // 0x110
  5085.         D3DXVECTOR4 m_dirtColor;                                                // 0x130
  5086.         D3DXVECTOR4 m_prevSpeed;                                                // 0x140
  5087.         D3DXVECTOR4 m_prev2Speed;                                               // 0x150
  5088.         FLOAT m_prevDeltaTime;                                          // 0x160
  5089.         network::ClientNetworkableGroup m_networkableGroup;             // 0x164
  5090.         ClientChassisComponent* m_chassis;                              // 0x1FC
  5091.         ClientVehicleEntityHealth* m_vehicleHealth;                     // 0x200
  5092.         WeakPtr<ClientPlayer> m_remoteControlledDamageGiverPlayer;      // 0x204
  5093.         DWORD m_meshModel;                                              // 0x208 MeshModel*
  5094.         DWORD m_cockpitMeshModel;                                       // 0x20C MeshModel*
  5095.         DWORD m_vehicleSound;                                           // 0x210 VehicleSound*
  5096.         LockableCallback* m_lockableCallback;                           // 0x214
  5097.         DWORD m_upgradableCallback;                                     // 0x218
  5098.     };
  5099.  
  5100.     template <class T>
  5101.     class PartComponent
  5102.         : public T                          // 0x00
  5103.     {
  5104.     public:
  5105.         PhysicsEntity* m_physicsEntity;     // sizeof(T) + 0x00
  5106.         CHAR m_isNetworkable;               // sizeof(T) + 0x04
  5107.         PAD(0x7);                           // sizeof(T) + 0x05
  5108.         INT m_healthStateIndex;             // sizeof(T) + 0x0C
  5109.     }; // sizeof(T) + 0x10
  5110.  
  5111.     class HealthStateEntityManager
  5112.     {
  5113.     public:
  5114.         LPVOID vftable;                         // 0x00
  5115.         GameWorld* m_world;                     // 0x04
  5116.         DWORD m_masterManager;                  // 0x08
  5117.         PartComponentData* m_partComponent;     // 0x0C
  5118.         DWORD m_instanceId;                     // 0x10
  5119.     }; // 0x14
  5120.  
  5121.     class PartComponentData
  5122.         : public ComponentData      // 0x00
  5123.     {
  5124.     public:
  5125.         PAD(0x8);                   // 0x58
  5126.         DWORD m_healthStates;       // 0x60 RefArray<HealthStateData>
  5127.         DWORD m_partLinks;          // 0x64 RefArray<PartLinkData>
  5128.         CHAR m_isSupported;         // 0x68
  5129.         CHAR m_isFragile;           // 0x69
  5130.         CHAR m_isNetworkable;       // 0x6A
  5131.         CHAR m_isWindow;            // 0x6B
  5132.         CHAR m_animatePhysics;      // 0x6C
  5133.         PAD(0x3);                   // 0x6D
  5134.     }; // 0x70
  5135.  
  5136.     class ClientHealthStateEntityManager
  5137.         : public HealthStateEntityManager   // 0x00
  5138.     {
  5139.     public:
  5140.     }; // 0x14
  5141.  
  5142.     class ClientPartComponent
  5143.         : public PartComponent<ClientComponent>,                        // 0x00
  5144.         public network::IClientNetworkableGroupMember                   // 0x20
  5145.     {
  5146.     public:
  5147.         DWORD m_meshModel;                                              // 0x28 MeshModel*
  5148.         DWORD m_interpolationObject;                                    // 0x2C ClientPartComponent::InterpolationObject*
  5149.         PAD(0x4);                                                       // 0x30
  5150.         ClientHealthStateEntityManager m_healthStateEntityManager;      // 0x34
  5151.         PAD(0x8);                                                       // 0x48
  5152.     }; // 0x50
  5153.  
  5154.     class ChassisComponent
  5155.     {
  5156.     public:
  5157.         LPVOID vftable;                         // 0x00
  5158.         PAD(0xC);                               // 0x04
  5159.         D3DXVECTOR4 m_initialWorldPosition;         // 0x10
  5160.         PhysicsEntity* m_physics;               // 0x20
  5161.         DWORD m_vehiclePhysics;                 // 0x24 vehicle::IVehicle (vftable)
  5162.         DWORD m_gearboxPhysics;                 // 0x28 vehicle::IGearbox (vftable)
  5163.         FLOAT m_timeDisabledByEMP;              // 0x2C
  5164.         D3DXMATRIX m_localTransform;        // 0x30
  5165.         DWORD m_inputModifierIndex;             // 0x70
  5166.         DWORD m_playerCount;                    // 0x74
  5167.         FLOAT m_inputSwayTimer;                 // 0x78
  5168.         FLOAT m_inputSwayYaw;                   // 0x7C
  5169.         FLOAT m_inputSwayPitch;                 // 0x80
  5170.         FLOAT m_inputSwayRoll;                  // 0x84
  5171.         DWORD m_landingGears;                   // 0x88
  5172.     }; // 0x8C
  5173.  
  5174.     class ClientChassisComponent
  5175.         : public ClientPartComponent,                           // 0x00
  5176.         public ChassisComponent                                 // 0x50
  5177.     {
  5178.     public:
  5179.         class EffectInfo
  5180.         {
  5181.         public:
  5182.             D3DXVECTOR4 position;           // 0x00
  5183.             D3DXVECTOR4 normal;         // 0x10
  5184.             Asset* effectAsset;     // 0x20
  5185.         }; // 0x24
  5186.  
  5187.         PAD(0x4);                                               // 0xDC
  5188.         AxisAlignedBox m_cachedBox;                             // 0xE0
  5189.         D3DXVECTOR4 m_linearVelocity;                                   // 0x100
  5190.         D3DXVECTOR4 m_angularVelocity;                                  // 0x110
  5191.         D3DXVECTOR4 m_prevLinearVelocity;                               // 0x120
  5192.         DWORD m_chassisEffectHandle;                            // 0x130
  5193.         DWORD m_effectCount;                                    // 0x134
  5194.         PAD(0x8);                                               // 0x138
  5195.         EffectInfo m_effects;                                   // 0x140
  5196.         PAD(0xEC);                                              // 0x164
  5197.         eastl::vector<UINT> m_waterEffectHandles;               // 0x250
  5198.         eastl::vector<UINT> m_waterStreakEffectHandles;         // 0x260
  5199.         ClientChassisComponentSimulation* m_controller;         // 0x270
  5200.         ClientChassisComponentReplication* m_replicatedBody;        // 0x274
  5201.         ClientChassisComponentPrediction* m_predictedBody;      // 0x278
  5202.         DWORD m_updater;                                        // 0x27C ClientChassisComponent::PredictionUpdater
  5203.         DWORD m_repUpdater;                                     // 0x280 ClientChassisComponent::ReplicationUpdater
  5204.         MaterialContainerPair* m_groundMaterial;                // 0x284
  5205.         DWORD m_speedField;                                     // 0x28C
  5206.         FLOAT m_gForce;                                         // 0x290
  5207.     }; // 0x164
  5208.  
  5209.     class CollisionState
  5210.     {
  5211.     public:
  5212.         D3DXVECTOR4 m_position;         // 0x00
  5213.         D3DXVECTOR4 m_normal;               // 0x10
  5214.         UINT m_materialIndex;       // 0x20
  5215.         UINT m_ownMaterialIndex;    // 0x24
  5216.         FLOAT m_speed;              // 0x28
  5217.         INT m_valid;                // 0x2C
  5218.     }; // 0x30
  5219.  
  5220.     class ClientChassisComponentReplicationState
  5221.     {
  5222.     public:
  5223.       D3DXVECTOR4 m_position;                       // 0x00
  5224.       D3DXVECTOR4 m_orientation;                    // 0x10
  5225.       D3DXVECTOR4 m_velocity;                       // 0x20
  5226.       D3DXVECTOR4 m_angularVelocity;                // 0x30
  5227.       fb::CollisionState m_collision;       // 0x40
  5228.     }; // 0x70
  5229.  
  5230.     class ClientChassisComponentSimulation
  5231.     {
  5232.     public:
  5233.         LPVOID vftable;         // 0x00
  5234.     }; // 0x04
  5235.  
  5236.     class ClientChassisComponentReplication
  5237.         : public ClientChassisComponentSimulation       // 0x00
  5238.     {
  5239.     public:
  5240.         class BodyInfo
  5241.         {
  5242.         public:
  5243.             LPVOID vftable;     // 0x00
  5244.         }; // 0x04
  5245.  
  5246.         class Interpolator
  5247.             : public network::Interpolator<ClientChassisComponentReplicationState>      // 0x00
  5248.         {
  5249.         public:
  5250.             ClientChassisComponentReplication* m_replication;                           // 0x40
  5251.         }; // 0x44
  5252.  
  5253.         BodyInfo* m_info;                               // 0x04
  5254.         Interpolator* m_interpolationObject;            // 0x08
  5255.         FLOAT m_interpolationFactor;                    // 0x0C
  5256.         INT m_hasLowVelocityTimer;                      // 0x10
  5257.         FLOAT m_aheadOfTime;                            // 0x14
  5258.     }; // 0x18
  5259.  
  5260.     class RigidBodyState
  5261.     {
  5262.     public:
  5263.         D3DXVECTOR4 m_orientation;          // 0x00
  5264.         D3DXVECTOR4 m_position;         // 0x10
  5265.         D3DXVECTOR4 m_linearVelocity;       // 0x20
  5266.         D3DXVECTOR4 m_angularVelocity;      // 0x30
  5267.         CHAR m_isSleeping;          // 0x40
  5268.         PAD(0x3);                   // 0x41
  5269.     }; // 0x44
  5270.  
  5271.     class FloatPhysicsState
  5272.     {
  5273.     public:
  5274.         LPVOID vftable;     // 0x00
  5275.     }; // 0x04
  5276.  
  5277.     class ClientChassisComponentPrediction
  5278.         : public ClientChassisComponentSimulation       // 0x00
  5279.     {
  5280.     public:
  5281.         class State
  5282.         {
  5283.         public:
  5284.             RigidBodyState rigidBodyState;          // 0x00
  5285.             PAD(0xC);                               // 0x44
  5286.             FloatPhysicsState floatPhysicsState;    // 0x50
  5287.             DWORD vehicleState;                     // 0x54 vehicle::VehicleState
  5288.             DWORD gearboxState;                     // 0x58 vehicle::GearboxState
  5289.             DWORD aerodynamicPhysicsState;          // 0x5C vehicle::AeroDynamicPhysicsState
  5290.         }; // 0x60
  5291.  
  5292.         class CorrectionInterpolationDelta
  5293.         {
  5294.         public:
  5295.             D3DXVECTOR4 deltaTrans;         // 0x00
  5296.             D3DXVECTOR4 deltaOrientation;       // 0x10
  5297.         }; // 0x20
  5298.  
  5299.         class Updater
  5300.         {
  5301.         public:
  5302.             LPVOID vftable;     // 0x00
  5303.         }; // 0x04
  5304.  
  5305.         State* m_currentState;                          // 0x04
  5306.         PAD(0x8);                                       // 0x08
  5307.         State m_predictionState;                        // 0x10
  5308.         State m_correctionState;                        // 0x70
  5309.         RigidBodyState m_prevRigidBodyState;            // 0xD0
  5310.         PAD(0xC);
  5311.         CorrectionInterpolationDelta m_correctionInterpolationDelta;
  5312.         CorrectionInterpolationDelta m_frameCorrectionDelta;
  5313.         FLOAT m_correctionInterpolationTimer;
  5314.         FLOAT m_correctionInterpolationTime;
  5315.         FLOAT m_frameInterpolationFactor;
  5316.         Updater* m_updater;
  5317.     };
  5318.  
  5319.     class VehicleEntityHealth
  5320.     {
  5321.     public:
  5322.         class VehicleEntityHealthZone
  5323.         {
  5324.         public:
  5325.             VehicleHealthZoneData* data;        // 0x00
  5326.             FLOAT health;                       // 0x04
  5327.             FLOAT shieldHealth;                 // 0x08
  5328.             CHAR useProtectedShields;           // 0x0C
  5329.             PAD(0x3);                           // 0x0D
  5330.         }; // 0x10
  5331.  
  5332.         LPVOID vftable;                                         // 0x00
  5333.         eastl::vector<Component*> m_components;                 // 0x04
  5334.         eastl::vector<VehicleEntityHealthZone> m_healthZones;   // 0x14
  5335.     }; // 0x24
  5336.  
  5337.     class VehicleHealthZoneData
  5338.     {
  5339.     public:
  5340.         FLOAT m_maxHealth;                  // 0x00
  5341.         FLOAT m_maxShieldHealth;            // 0x04
  5342.         FLOAT m_damageAngleMultiplier;      // 0x08
  5343.         FLOAT m_minDamageAngle;             // 0x0C
  5344.         INT m_useDamageAngleCalculation;    // 0x10
  5345.     }; // 0x14
  5346.  
  5347.     class ClientVehicleEntityHealth
  5348.         : public VehicleEntityHealth    // 0x00
  5349.     {
  5350.     }; // 0x14
  5351.  
  5352.     class RenderScreenInfo
  5353.     {
  5354.     public:
  5355.         UINT m_nWidth;                  // this+0x0
  5356.         UINT m_nHeight;                 // this+0x4
  5357.         UINT m_nWindowWidth;            // this+0x8
  5358.         UINT m_nWindowHeight;           // this+0xC
  5359.         FLOAT fRefreshRate;             // this+0x10
  5360.     };
  5361.  
  5362.     class DxRenderer
  5363.     {
  5364.     public:
  5365.         BYTE Pad_000[0x8];              // 0x00
  5366.         UINT m_nFrameCounter;           // 0x08
  5367.         BOOL m_bFrameInProgress;        // 0x0C
  5368.         HWND m_hWnd;                    // 0x10
  5369.         BYTE Pad_014[0x4];              // 0x14
  5370.         BYTE m_bFullscreenWanted;       // 0x18
  5371.         BYTE m_bFullscreenActive;       // 0x19
  5372.         BYTE m_bMinimized;              // 0x1A
  5373.         BYTE m_bMinimizing;             // 0x1B
  5374.         BYTE m_bResizing;               // 0x1C
  5375.         BYTE m_bOccluded;               // 0x1D
  5376.         BYTE m_bVSync;                  // 0x1E
  5377.         PAD(0x1);                       // 0x1F
  5378.         RenderScreenInfo m_screenInfo;  // 0x20
  5379.         PAD(0xA4);                      // 0x34
  5380.         ID3D11Device* pDevice;          // 0xD8
  5381.         ID3D11DeviceContext* pContext;  // 0xDC
  5382.         PAD(0x14);                      // 0xE0
  5383.         IDXGISwapChain* pSwapChain;     // 0xF4
  5384.  
  5385.     public:
  5386.         static DxRenderer* Singleton()
  5387.         {
  5388.             return *(DxRenderer**)OFFSET_DXRENDERER;
  5389.         }
  5390.     };
  5391.  
  5392.     class RenderViewDesc
  5393.     {
  5394.     public:
  5395.         D3DXMATRIX m_transform; //0x0000
  5396.         __int32 type; //0x0040
  5397.         char _0x0044[4];
  5398.         float fovY; //0x0048
  5399.         float defaultFovY; //0x004C
  5400.         float nearPlane; //0x0050
  5401.         float farPlane; //0x0054
  5402.         float aspect; //0x0058
  5403.         float orthoWidth; //0x005C
  5404.         float orthoHeight; //0x0060
  5405.         float stereoSeparation; //0x0064
  5406.         float stereoConvergence; //0x0068
  5407.         fb::Vec2 viewportOffset; //0x006C
  5408.         fb::Vec2 viewportScale; //0x0074
  5409.  
  5410.     };//Size=0x007C
  5411.  
  5412.  
  5413.     class RenderView
  5414.     {
  5415.     public:
  5416.         RenderViewDesc m_desc; //0x0000
  5417.         char _0x007C[4];
  5418.         unsigned int m_dirtyFlags; //0x0080
  5419.         char _0x0084[364];
  5420.         float m_fovX; //0x01F0
  5421.         float m_depthToWidthRatio; //0x01F4
  5422.         float m_fovScale; //0x01F8
  5423.         float m_fovScaleSqr; //0x01FC
  5424.         D3DXMATRIX m_viewMatrix;                    // 0x200
  5425.         D3DXMATRIX m_viewMatrixTranspose;           // 0x240
  5426.         D3DXMATRIX m_viewMatrixInverse;         // 0x280
  5427.         D3DXMATRIX m_projectionMatrix;              // 0x2C0
  5428.         D3DXMATRIX m_viewMatrixAtOrigin;            // 0x300
  5429.         D3DXMATRIX m_projectionMatrixTranspose; // 0x340
  5430.         D3DXMATRIX m_projectionMatrixInverse;       // 0x380
  5431.         D3DXMATRIX m_viewProjectionMatrix;          // 0x3C0
  5432.         D3DXMATRIX m_viewProjectionMatrixTranspose;// 0x400
  5433.         D3DXMATRIX m_viewProjectionMatrixInverse;   // 0x440
  5434.  
  5435.     public:
  5436.         bool Update()
  5437.         {
  5438.             DxRenderer* dxRenderer = DxRenderer::Singleton();
  5439.             if (!VD(dxRenderer)) return false;
  5440.  
  5441.             float screenX = (float) dxRenderer->m_screenInfo.m_nWindowWidth;
  5442.             float screenY = (float) dxRenderer->m_screenInfo.m_nWindowHeight;
  5443.  
  5444.             this->m_desc.aspect = screenX / screenY;
  5445.             ((void (__fastcall *)(RenderView* pRV, void* _void ))OFFSET_UPDATEMATRICES)(this, NULL);
  5446.  
  5447.             return true;
  5448.         }
  5449.  
  5450.     };
  5451.  
  5452.     class GameRenderViewParams
  5453.     {
  5454.     public:
  5455.         RenderView view; //0x0000
  5456.         RenderView m_prevView; //0x0480
  5457.         RenderView m_secondaryStreamingView; //0x0900
  5458.         __int32 secondaryStreamingViewEnable; //0x0D80
  5459.     char _0x0D84[12];
  5460.         //fb::Mat4 firstPersonTransform; //0x0D90
  5461.  
  5462.     };//Size=0x0DD0
  5463.  
  5464.     class IGameRenderModule
  5465.     {
  5466.     public:
  5467.         enum ModuleId
  5468.         {
  5469.             UIRenderTarget,
  5470.             World,
  5471.             UI,
  5472.             Count
  5473.         };
  5474.     };
  5475.  
  5476.     class IRefCount // Inherited class at offset 0x0
  5477.     {
  5478.     public:
  5479.         virtual int addRef();   // V: 0x0
  5480.         virtual int release();  // V: 0x4
  5481.                        
  5482.     }; // fb::IRefCount
  5483.  
  5484.     class IGameRenderer
  5485.     {
  5486.     public:
  5487.         virtual void Function0(); //
  5488.         virtual void Function1(); //
  5489.         virtual void Function2(); //
  5490.         virtual void Function3(); //
  5491.         virtual void Function4(); //
  5492.         virtual void Function5(); //
  5493.         virtual void Function6(); //
  5494.         virtual void Function7(); //
  5495.         virtual void Function8(); //
  5496.         virtual void Function9(); //
  5497.         virtual fb::Vec2 getResolution(); //
  5498.         virtual void Function11(); //
  5499.         virtual void Function12(); //
  5500.         virtual void* getSettings(); //
  5501.         virtual void* getScreenRenderer(); //
  5502.         virtual void Function15(); //
  5503.  
  5504.         int m_refCount; //0x0004
  5505.  
  5506.     };//Size=0x0008
  5507.  
  5508.     class GameRenderer : public IGameRenderer
  5509.     {
  5510.     public:
  5511.     char _0x0004[72];
  5512.         GameRenderViewParams m_viewParams; //0x004C
  5513.  
  5514.     public:
  5515.         static GameRenderer* Singleton()
  5516.         {
  5517.             return *( GameRenderer** )( OFFSET_GAMERENDERER );
  5518.         }
  5519.  
  5520.     };//Size=0x0E1C
  5521.  
  5522. class UILocalization
  5523. {
  5524.  
  5525.     //enum DateFormat
  5526.     //{
  5527.  
  5528.     //  int DateFormat_YYYYMMDD;                     // constant 0x0
  5529.     //  int DateFormat_MMDDYYYY;                     // constant 0x1
  5530.     //  int DateFormat_DDMMYYYY;                     // constant 0x2
  5531.  
  5532.     //}; // DateFormat
  5533.  
  5534.     bool m_initialized;                     // this+0x0
  5535.     //struct fb::AsyncResultHandle m_binaryChunkResult;                     // this+0x4
  5536.     //struct fb::AsyncResultHandle m_histogramChunkResult;                     // this+0x8
  5537.     PAD(0xC);
  5538.     bool m_binaryChunkLoaded;                     // this+0xC
  5539.     bool m_histogramChunkLoaded;                     // this+0xD
  5540.    
  5541. }; // fb::UILocalization
  5542.  
  5543.  
  5544. class IUISystem
  5545. {
  5546.  
  5547. public:
  5548.     virtual void addRef(); //0x00
  5549.     virtual void release(); //0x04
  5550.     virtual void createUpdateJob(); //0x08
  5551.     virtual void draw(); //0x10
  5552.     virtual void __vecDelDtor();
  5553.     //virtual void func6();
  5554.     virtual void init();    // V: 0x1C
  5555.     virtual void reset();   // V: 0x20
  5556.     virtual  UILocalization * getLocalization();    // V: 0x24
  5557.     virtual  void* getInputManager();   // V: 0x28
  5558.     virtual  void * getClient();    // V: 0x2C
  5559.     virtual  void createJob(/*float, bool,  EA::Jobs::JobInstanceHandle*/); // V: 0x30
  5560.     virtual void getDataCopy(/*const int,  UIDataValue &*/);    // V: 0x34
  5561.     virtual void getData1(/*const int,  UIDataValue * &, bool*/);   // V: 0x38
  5562.     virtual void setData2(/*const int, const char *, enum UINotifyType, enum UIDataValue::UISetType*/); // V: 0x3C
  5563.     virtual void setData3(/*const int, const double, enum UINotifyType, enum UIDataValue::UISetType*/); // V: 0x40
  5564.     virtual void setData4(/*const int, const int, enum UINotifyType, enum UIDataValue::UISetType*/);    // V: 0x44
  5565.     virtual void setData5(/*const int, const bool, enum UINotifyType, enum UIDataValue::UISetType*/);   // V: 0x48
  5566.     virtual void setDataValue(/*const int, const  UIDataValue &, enum UINotifyType, enum UIDataValue::UISetType*/); // V: 0x4C
  5567.     virtual bool isProcessingQueue();   // V: 0x50
  5568.     virtual void refreshData(const int, bool);  // V: 0x54
  5569.     virtual void resetHasChanged(const int, bool);  // V: 0x58
  5570.     virtual void enterGraph( /*ClientUIGraphEntity &, const  UIGraphAsset &, const  InstanceInputNode *, enum UIGraphPriority*/);   // V: 0x5C
  5571.     virtual void exitGraph(/*const  UIGraphAsset **/);  // V: 0x60
  5572.     virtual unsigned int getNrOfStackedGraphs();    // V: 0x64
  5573.     virtual bool fireWidgetEvent(/*struct WidgetEventData *, const  UIGraphAsset **/);  // V: 0x68
  5574.     virtual void fireGraphEventForTopGraph(/*const  eastl::basic_string<char,eastl_arena_allocator> &, const  UIGraphAsset **/);    // V: 0x6C
  5575.     virtual void fireGraphEvent(/*const  eastl::basic_string<char,eastl_arena_allocator> &, const  UIGraphAsset *, const struct Guid &*/);  // V: 0x70
  5576.     virtual bool eventToAllGraphs(const char *);    // V: 0x74
  5577.     virtual bool isUIGraphManagerAlive();   // V: 0x78
  5578.     virtual bool handleInputPressed1(/*const  UIGraphAsset *, const enum UIInputActionEventType, const enum UIInputAction*/);   // V: 0x7C
  5579.     virtual bool handleInputPressed2(/*const enum UIInputActionEventType, const enum UIInputAction*/);  // V: 0x80
  5580.     virtual void notifyDataListeners(/*const int, const  eastl::basic_string<char,eastl_arena_allocator> &,  UIDataValue *, const  eastl::vector<eastl::basic_string<char,eastl_arena_allocator>,eastl_arena_allocator> **/);   // V: 0x84
  5581.     virtual void popScreen(const char *);   // V: 0x88
  5582.     virtual void popScreen(/*const unsigned int, const  UIGraphAsset **/);  // V: 0x8C
  5583.     virtual bool pushScreen(/*const struct Guid &, const  UIScreenAsset &, enum UIGraphPriority, const  UIGraphAsset *, bool*/);    // V: 0x90
  5584.     virtual bool showScreen(/*const struct Guid &, bool*/); // V: 0x94
  5585.     virtual void eventToWidget(/*const struct Guid &, enum UIWidgetEventID,  UIDataValue &*/);  // V: 0x98
  5586.     virtual void setWidgetFocus(/*const char *, const char **/);    // V: 0x9C
  5587.     virtual void screenEnterCompleted(const char *);    // V: 0xA0
  5588.     virtual void screenExitCompleted(const char *); // V: 0xA4
  5589.     virtual void screenLoaded(const char *);    // V: 0xA8
  5590.     virtual void setDataBindingFactory(/* IUIDataBindingFactory **/);   // V: 0xAC
  5591.     virtual bool screenExists(const char *);    // V: 0xB0
  5592.     virtual bool resolveWidgetPath(/*const char *, struct WidgetPath &*/);  // V: 0xB4
  5593.     virtual bool isGraphOnQueuedStack(/*const  UIGraphAsset &*/);   // V: 0xB8
  5594.     virtual bool isGraphOnStack(/*const  UIGraphAsset &*/); // V: 0xBC
  5595.     virtual void reduceNrOfScreensInGraph(/*const  UIGraphAsset *, unsigned int*/); // V: 0xC0
  5596.     virtual /* IUIComponent **/ void* getComponentForData(const  TypeInfo *, bool); // V: 0xC4
  5597.     virtual bool isIngame();    // V: 0xC8
  5598.     virtual void setSafeArea(float, float); // V: 0xCC
  5599.     virtual void * __vecDelDtor(unsigned int);  // V: 0x18
  5600.  
  5601. }; // fb::IUISystem
  5602.  
  5603.     class DebugRenderer2
  5604.     {
  5605.     public:
  5606.         static DebugRenderer2* Singleton(void)
  5607.         {
  5608.             typedef fb::DebugRenderer2* (__stdcall* fb__DebugRenderManager_getThreadContext_t)(void);
  5609.             fb__DebugRenderManager_getThreadContext_t fb__DebugRenderManager_getThreadContext=(fb__DebugRenderManager_getThreadContext_t)OFFSET_DBGRENDERER2;
  5610.             return fb__DebugRenderManager_getThreadContext();
  5611.         }
  5612.  
  5613.         void drawText(int x, int y, Color32 color, char* text, float scale)
  5614.         {
  5615.             typedef void (__thiscall *tdrawText)(fb::DebugRenderer2*,int, int, char*, Color32,float);
  5616.             tdrawText mdrawText=(tdrawText)OFFSET_DBGRENDRAWTEXT;
  5617.             mdrawText(this,(int)x,(int)y,text,color,scale);
  5618.         }
  5619.  
  5620.         void drawLine2d(Tuple2<float>* pos1, Tuple2<float>* pos2, Color32 color)
  5621.         {
  5622.             typedef void (__thiscall *tdrawLine2d)(fb::DebugRenderer2*,Tuple2<float>*, Tuple2<float>*, Color32);
  5623.             tdrawLine2d mdrawLine2d=(tdrawLine2d)OFFSET_DBGRENDRAW2DLINE;
  5624.             mdrawLine2d(this,pos1,pos2,color);
  5625.         }
  5626.  
  5627.         void drawLineRect2d(Tuple2<float>* minpos, Tuple2<float>* maxpos, Color32 color)
  5628.         {
  5629.             typedef void (__thiscall *tdrawLineRect2d)(fb::DebugRenderer2*,Tuple2<float>*, Tuple2<float>*, Color32);
  5630.             tdrawLineRect2d mdrawLineRect2d=(tdrawLineRect2d)OFFSET_DBGRENDRAWRECTLINE;
  5631.             mdrawLineRect2d(this,minpos,maxpos,color);
  5632.         }
  5633.  
  5634.         void drawRect2d(Tuple2<float>* minpos, Tuple2<float>* maxpos, Color32 color)
  5635.         {
  5636.             typedef void (__thiscall *tdrawRect2d)(fb::DebugRenderer2*,Tuple2<float>*, Tuple2<float>*, Color32);
  5637.             tdrawRect2d mdrawRect2d=(tdrawRect2d)OFFSET_DBGRENDRAWRECT;
  5638.             mdrawRect2d(this,minpos,maxpos,color);
  5639.         }
  5640.  
  5641.         void drawSphere( fb::Vec3 pos, float radius, Color32 color )
  5642.         {
  5643.             typedef void( __thiscall* tdrawSphere )( fb::DebugRenderer2*, fb::Vec3*, float, Color32, bool, bool );
  5644.             tdrawSphere drawSphere = ( tdrawSphere )OFFSET_DBGRENDRAWSPHERE;
  5645.  
  5646.             drawSphere( this, &pos, radius, color, false, false );
  5647.         }  
  5648.  
  5649.     };
  5650. };
  5651.  
  5652. #endif // __ClientHeader_h
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement