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