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

Method saveCF1Sprites

Source/Map/Original.cpp:169–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

167}
168
169bool cOriginalMap::saveCF1Sprites(std::string pFilename) {
170
171 // Replace .map with .spt
172 pFilename.replace(pFilename.length() - 3, pFilename.length(), "spt");
173 std::ofstream outfile(pFilename, std::ofstream::binary);
174
175 // Number of sprites in use
176 size_t SpriteCount = std::count_if(std::begin(mSprites), std::end(mSprites), [](sSprite& l) {
177 return l.field_0 != -32768 && l.field_0 != -1;
178 });
179
180 auto MapSpt = tSharedBuffer(new std::vector<uint8>());
181 MapSpt->resize(SpriteCount * 0x0A);
182
183 uint8* SptPtr = MapSpt->data();
184
185 // Cheap way of writing human players first
186 for (const auto& SpriteIT : mSprites) {
187
188 if (SpriteIT.field_0 == -1 || SpriteIT.field_0 == -32768)
189 continue;
190
191 if (SpriteIT.field_18 != eSprite_Player)
192 continue;
193
194 writeBEWord(SptPtr, 0x7C); SptPtr += 2; // Direction
195 writeBEWord(SptPtr, 0x00); SptPtr += 2; // Ignored
196 writeBEWord(SptPtr, SpriteIT.field_0 - 0x10); SptPtr += 2; // X
197 writeBEWord(SptPtr, SpriteIT.field_4); SptPtr += 2; // Y
198 writeBEWord(SptPtr, SpriteIT.field_18); SptPtr += 2; // Type
199 }
200
201 // Now write out all other players
202 for (const auto& SpriteIT : mSprites) {
203
204 if (SpriteIT.field_0 == -1 || SpriteIT.field_0 == -32768)
205 continue;
206
207 if (SpriteIT.field_18 == eSprite_Player)
208 continue;
209
210 writeBEWord(SptPtr, 0x7C); SptPtr += 2; // Direction
211 writeBEWord(SptPtr, 0x00); SptPtr += 2; // Ignored
212 writeBEWord(SptPtr, SpriteIT.field_0 - 0x10); SptPtr += 2; // X
213 writeBEWord(SptPtr, SpriteIT.field_4); SptPtr += 2; // Y
214 writeBEWord(SptPtr, SpriteIT.field_18); SptPtr += 2; // Type
215 }
216 outfile.write((const char*)MapSpt->data(), MapSpt->size());
217 outfile.close();
218 return true;
219}

Callers

nothing calls this directly

Calls 6

writeBEWordFunction · 0.85
resizeMethod · 0.80
closeMethod · 0.80
beginFunction · 0.50
endFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected