1 #ifndef __PHYSICS_H 2 #define __PHYSICS_H 3 4 #include "Item_Types.h" 5 #include "JA2Types.h" 6 #include "Phys_Math.h" 7 #include "WorldDef.h" 8 9 10 extern UINT32 guiNumObjectSlots; 11 12 struct REAL_OBJECT 13 { 14 BOOLEAN fAllocated; 15 BOOLEAN fAlive; 16 BOOLEAN fApplyFriction; 17 BOOLEAN fVisible; 18 BOOLEAN fInWater; 19 BOOLEAN fTestObject; 20 BOOLEAN fTestEndedWithCollision; 21 BOOLEAN fTestPositionNotSet; 22 23 float TestZTarget; 24 float OneOverMass; 25 float AppliedMu; 26 27 vector_3 Position; 28 vector_3 TestTargetPosition; 29 vector_3 OldPosition; 30 vector_3 Velocity; 31 vector_3 OldVelocity; 32 vector_3 InitialForce; 33 vector_3 Force; 34 vector_3 CollisionNormal; 35 vector_3 CollisionVelocity; 36 float CollisionElasticity; 37 38 INT16 sGridNo; 39 LEVELNODE *pNode; 40 LEVELNODE *pShadow; 41 42 INT16 sConsecutiveCollisions; 43 INT16 sConsecutiveZeroVelocityCollisions; 44 INT32 iOldCollisionCode; 45 46 FLOAT dLifeLength; 47 FLOAT dLifeSpan; 48 OBJECTTYPE Obj; 49 SOLDIERTYPE* owner; 50 INT16 sFirstGridNo; 51 BOOLEAN fFirstTimeMoved; 52 UINT8 ubActionCode; 53 SOLDIERTYPE* target; 54 BOOLEAN fDropItem; 55 UINT32 uiNumTilesMoved; 56 BOOLEAN fCatchGood; 57 BOOLEAN fAttemptedCatch; 58 BOOLEAN fCatchAnimOn; 59 BOOLEAN fCatchCheckDone; 60 BOOLEAN fEndedWithCollisionPositionSet; 61 vector_3 EndedWithCollisionPosition; 62 BOOLEAN fHaveHitGround; 63 BOOLEAN fPotentialForDebug; 64 INT16 sLevelNodeGridNo; 65 UINT32 uiSoundID; 66 UINT8 ubLastTargetTakenDamage; 67 }; 68 69 70 // OBJECT LIST STUFF 71 REAL_OBJECT* CreatePhysicalObject(const OBJECTTYPE* pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, SOLDIERTYPE* owner, UINT8 ubActionCode, SOLDIERTYPE* target); 72 void RemoveAllPhysicsObjects(void); 73 74 75 BOOLEAN CalculateLaunchItemChanceToGetThrough(const SOLDIERTYPE* pSoldier, const OBJECTTYPE* pItem, INT16 sGridNo, UINT8 ubLevel, INT16 sEndZ, INT16* psFinalGridNo, BOOLEAN fArmed, INT8* pbLevel, BOOLEAN fFromUI); 76 77 void CalculateLaunchItemParamsForThrow(SOLDIERTYPE* pSoldier, INT16 sGridNo, UINT8 ubLevel, INT16 sZPos, OBJECTTYPE* pItem, INT8 bMissBy, UINT8 ubActionCode, SOLDIERTYPE* target); 78 79 80 // SIMULATE WORLD 81 void SimulateWorld(void); 82 83 84 void SavePhysicsTableToSaveGameFile(HWFILE); 85 void LoadPhysicsTableFromSavedGameFile(HWFILE); 86 87 #endif 88