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