MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / exportGameState

Function exportGameState

src/OpenLoco/src/S5/S5.cpp:282–330  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

280 }
281
282 static bool exportGameState(Stream& stream, const S5File& file, const std::vector<ObjectHeader>& packedObjects)
283 {
284 try
285 {
286 SawyerStreamWriter fs(stream);
287 fs.writeChunk(SawyerEncoding::rotate, file.header);
288 if (file.header.type == S5Type::scenario || file.header.type == S5Type::landscape)
289 {
290 fs.writeChunk(SawyerEncoding::rotate, *file.scenarioOptions);
291 }
292 if (file.header.hasFlags(HeaderFlags::hasSaveDetails))
293 {
294 fs.writeChunk(SawyerEncoding::rotate, *file.saveDetails);
295 }
296 if (file.header.numPackedObjects != 0)
297 {
298 ObjectManager::writePackedObjects(fs, packedObjects);
299 }
300 fs.writeChunk(SawyerEncoding::rotate, file.requiredObjects, sizeof(file.requiredObjects));
301
302 if (file.header.type == S5Type::scenario)
303 {
304 fs.writeChunk(SawyerEncoding::runLengthSingle, &file.gameState.general, sizeof(S5::GeneralState));
305 fs.writeChunk(SawyerEncoding::runLengthSingle, file.gameState.towns, 0x123480);
306 fs.writeChunk(SawyerEncoding::runLengthSingle, file.gameState.animations, 0x79D80);
307 }
308 else
309 {
310 fs.writeChunk(SawyerEncoding::runLengthSingle, file.gameState);
311 }
312
313 if (file.header.hasFlags(HeaderFlags::isRaw))
314 {
315 throw Exception::NotImplemented();
316 }
317 else
318 {
319 fs.writeChunk(SawyerEncoding::runLengthMulti, file.tileElements.data(), file.tileElements.size() * sizeof(TileElement));
320 }
321
322 fs.writeChecksum();
323 return true;
324 }
325 catch (const std::exception& e)
326 {
327 Logging::error("Unable to save S5: {}", e.what());
328 return false;
329 }
330 }
331
332 // 0x00441FC9
333 std::unique_ptr<S5File> loadSave(Stream& stream)

Callers 2

prepareGameStateFunction · 0.70
exportGameStateToFileFunction · 0.70

Calls 8

writePackedObjectsFunction · 0.85
errorFunction · 0.85
writeChecksumMethod · 0.80
whatMethod · 0.80
writeChunkMethod · 0.45
hasFlagsMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected