MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / loadCF1Spt

Method loadCF1Spt

Source/Map/Original.cpp:90–134  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88}
89
90void cOriginalMap::loadCF1Spt(tSharedBuffer pSpriteData, bool pCF2) {
91 tool_EndianSwap((uint8*)pSpriteData->data(), pSpriteData->size());
92
93 uint16* SptPtr = (uint16*)pSpriteData->data();
94 uint16* SptFileEnd = SptPtr + (pSpriteData->size() / 2);
95
96 size_t Sprites = pSpriteData->size() / 8;
97 mSprites.resize(Sprites < g_Fodder->mParams->mSpritesMax ? g_Fodder->mParams->mSpritesMax : Sprites);
98 sSprite* Sprite = mSprites.data();
99
100
101 for (uint16 HumanCount = 0; SptPtr != SptFileEnd; ++Sprite) {
102 ++SptPtr;
103 Sprite->field_8 = 0x7C;
104
105 uint16 ax = HumanCount / 8;
106 Sprite->field_32 = ax;
107 ++SptPtr;
108
109 ax = SptPtr[0];
110 ++SptPtr;
111 Sprite->field_0 = ax + 0x10;
112 Sprite->field_26 = ax + 0x10;
113
114 ax = SptPtr[0];
115 ++SptPtr;
116 Sprite->field_4 = ax;
117 Sprite->field_28 = ax;
118
119 ax = SptPtr[0];
120 ++SptPtr;
121 Sprite->field_18 = ax;
122
123 // 114B
124
125 // HACK: Some SPT files don't contain enough null sprites between entries
126 // This causes some sprites to be overwritten by null/lights on later missions in CF2
127 if (pCF2) {
128 if (Sprite > mSprites.data())
129 if (Sprite->field_18 == 4 && (Sprite - 1)->field_18 >= 114 && (Sprite - 1)->field_18 <= 117) {
130 ++Sprite;
131 }
132 }
133 }
134}
135
136bool cOriginalMap::load(tSharedBuffer pMapFile, tSharedBuffer pSptFile, const bool pCF2) {
137 loadCF1Map(pMapFile);

Callers

nothing calls this directly

Calls 3

tool_EndianSwapFunction · 0.85
resizeMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected