1 #include "Debug.h"
2 #include "FileMan.h"
3 #include "LoadSaveData.h"
4 #include "LoadSaveObjectType.h"
5 #include "LoadSaveRealObject.h"
6 #include "Overhead.h"
7 
8 
ExtractRealObjectFromFile(HWFILE const file,REAL_OBJECT * const o)9 void ExtractRealObjectFromFile(HWFILE const file, REAL_OBJECT* const o)
10 {
11 	BYTE data[256];
12 	FileRead(file, data, sizeof(data));
13 
14 	DataReader d{data};
15 	EXTR_BOOL(d, o->fAllocated)
16 	EXTR_BOOL(d, o->fAlive)
17 	EXTR_BOOL(d, o->fApplyFriction)
18 	EXTR_SKIP(d, 2)
19 	EXTR_BOOL(d, o->fVisible)
20 	EXTR_BOOL(d, o->fInWater)
21 	EXTR_BOOL(d, o->fTestObject)
22 	EXTR_BOOL(d, o->fTestEndedWithCollision)
23 	EXTR_BOOL(d, o->fTestPositionNotSet)
24 	EXTR_SKIP(d, 2)
25 	EXTR_FLOAT(d, o->TestZTarget)
26 	EXTR_FLOAT(d, o->OneOverMass)
27 	EXTR_FLOAT(d, o->AppliedMu)
28 	EXTR_VEC3(d, o->Position)
29 	EXTR_VEC3(d, o->TestTargetPosition)
30 	EXTR_VEC3(d, o->OldPosition)
31 	EXTR_VEC3(d, o->Velocity)
32 	EXTR_VEC3(d, o->OldVelocity)
33 	EXTR_VEC3(d, o->InitialForce)
34 	EXTR_VEC3(d, o->Force)
35 	EXTR_VEC3(d, o->CollisionNormal)
36 	EXTR_VEC3(d, o->CollisionVelocity)
37 	EXTR_FLOAT(d, o->CollisionElasticity)
38 	EXTR_I16(d, o->sGridNo)
39 	EXTR_SKIP(d, 6)
40 	EXTR_PTR(d, o->pNode)
41 	EXTR_PTR(d, o->pShadow)
42 	EXTR_I16(d, o->sConsecutiveCollisions)
43 	EXTR_I16(d, o->sConsecutiveZeroVelocityCollisions)
44 	EXTR_I32(d, o->iOldCollisionCode)
45 	EXTR_FLOAT(d, o->dLifeLength)
46 	EXTR_FLOAT(d, o->dLifeSpan)
47 	ExtractObject(d, &o->Obj);
48 	EXTR_BOOL(d, o->fFirstTimeMoved)
49 	EXTR_SKIP(d, 1)
50 	EXTR_I16(d, o->sFirstGridNo)
51 	EXTR_SOLDIER(d, o->owner)
52 	EXTR_U8(d, o->ubActionCode)
53 	EXTR_SKIP(d, 2)
54 	EXTR_SOLDIER(d, o->target)
55 	EXTR_SKIP(d, 3)
56 	EXTR_BOOL(d, o->fDropItem)
57 	EXTR_SKIP(d, 3)
58 	EXTR_U32(d, o->uiNumTilesMoved)
59 	EXTR_BOOL(d, o->fCatchGood)
60 	EXTR_BOOL(d, o->fAttemptedCatch)
61 	EXTR_BOOL(d, o->fCatchAnimOn)
62 	EXTR_BOOL(d, o->fCatchCheckDone)
63 	EXTR_BOOL(d, o->fEndedWithCollisionPositionSet)
64 	EXTR_SKIP(d, 3)
65 	EXTR_VEC3(d, o->EndedWithCollisionPosition)
66 	EXTR_BOOL(d, o->fHaveHitGround)
67 	EXTR_BOOL(d, o->fPotentialForDebug)
68 	EXTR_I16(d, o->sLevelNodeGridNo)
69 	EXTR_U32(d, o->uiSoundID)
70 	EXTR_U8(d, o->ubLastTargetTakenDamage)
71 	EXTR_SKIP(d, 3)
72 	Assert(d.getConsumed() == lengthof(data));
73 }
74 
75 
InjectRealObjectIntoFile(HWFILE const file,REAL_OBJECT const * const o)76 void InjectRealObjectIntoFile(HWFILE const file, REAL_OBJECT const* const o)
77 {
78 	BYTE data[256];
79 
80 	DataWriter d{data};
81 	INJ_BOOL(d, o->fAllocated)
82 	INJ_BOOL(d, o->fAlive)
83 	INJ_BOOL(d, o->fApplyFriction)
84 	INJ_SKIP(d, 2)
85 	INJ_BOOL(d, o->fVisible)
86 	INJ_BOOL(d, o->fInWater)
87 	INJ_BOOL(d, o->fTestObject)
88 	INJ_BOOL(d, o->fTestEndedWithCollision)
89 	INJ_BOOL(d, o->fTestPositionNotSet)
90 	INJ_SKIP(d, 2)
91 	INJ_FLOAT(d, o->TestZTarget)
92 	INJ_FLOAT(d, o->OneOverMass)
93 	INJ_FLOAT(d, o->AppliedMu)
94 	INJ_VEC3(d, o->Position)
95 	INJ_VEC3(d, o->TestTargetPosition)
96 	INJ_VEC3(d, o->OldPosition)
97 	INJ_VEC3(d, o->Velocity)
98 	INJ_VEC3(d, o->OldVelocity)
99 	INJ_VEC3(d, o->InitialForce)
100 	INJ_VEC3(d, o->Force)
101 	INJ_VEC3(d, o->CollisionNormal)
102 	INJ_VEC3(d, o->CollisionVelocity)
103 	INJ_FLOAT(d, o->CollisionElasticity)
104 	INJ_I16(d, o->sGridNo)
105 	INJ_SKIP(d, 6)
106 	INJ_PTR(d, o->pNode)
107 	INJ_PTR(d, o->pShadow)
108 	INJ_I16(d, o->sConsecutiveCollisions)
109 	INJ_I16(d, o->sConsecutiveZeroVelocityCollisions)
110 	INJ_I32(d, o->iOldCollisionCode)
111 	INJ_FLOAT(d, o->dLifeLength)
112 	INJ_FLOAT(d, o->dLifeSpan)
113 	InjectObject(d, &o->Obj);
114 	INJ_BOOL(d, o->fFirstTimeMoved)
115 	INJ_SKIP(d, 1)
116 	INJ_I16(d, o->sFirstGridNo)
117 	INJ_SOLDIER(d, o->owner)
118 	INJ_U8(d, o->ubActionCode)
119 	INJ_SKIP(d, 2)
120 	INJ_SOLDIER(d, o->target)
121 	INJ_SKIP(d, 3)
122 	INJ_BOOL(d, o->fDropItem)
123 	INJ_SKIP(d, 3)
124 	INJ_U32(d, o->uiNumTilesMoved)
125 	INJ_BOOL(d, o->fCatchGood)
126 	INJ_BOOL(d, o->fAttemptedCatch)
127 	INJ_BOOL(d, o->fCatchAnimOn)
128 	INJ_BOOL(d, o->fCatchCheckDone)
129 	INJ_BOOL(d, o->fEndedWithCollisionPositionSet)
130 	INJ_SKIP(d, 3)
131 	INJ_VEC3(d, o->EndedWithCollisionPosition)
132 	INJ_BOOL(d, o->fHaveHitGround)
133 	INJ_BOOL(d, o->fPotentialForDebug)
134 	INJ_I16(d, o->sLevelNodeGridNo)
135 	INJ_U32(d, o->uiSoundID)
136 	INJ_U8(d, o->ubLastTargetTakenDamage)
137 	INJ_SKIP(d, 3)
138 	Assert(d.getConsumed() == lengthof(data));
139 
140 	FileWrite(file, data, sizeof(data));
141 }
142