MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / LoadHeader

Method LoadHeader

TombEngine/Game/savegame.cpp:3069–3128  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3067}
3068
3069bool SaveGame::LoadHeader(int slot, SaveGameHeader* header)
3070{
3071 if (!IsSaveGameSlotValid(slot))
3072 return false;
3073
3074 if (!DoesSaveGameExist(slot))
3075 return false;
3076
3077 auto fileName = GetSavegameFilename(slot);
3078
3079 std::ifstream file;
3080 file.open(fileName, std::ios_base::app | std::ios_base::binary);
3081
3082 file.seekg(0, std::ios::end);
3083 size_t length = file.tellg();
3084 file.seekg(0, std::ios::beg);
3085
3086 if (length == 0)
3087 {
3088 TENLog(fmt::format("Savegame #{} has no data.", slot), LogLevel::Warning);
3089 return false;
3090 }
3091
3092 try
3093 {
3094 int size;
3095 file.read(reinterpret_cast<char*>(&size), sizeof(size));
3096
3097 std::unique_ptr<char[]> buffer = std::make_unique<char[]>(size);
3098 file.read(buffer.get(), size);
3099 file.close();
3100
3101 bool bufferIsValid = Save::VerifySaveGameBuffer(flatbuffers::Verifier(reinterpret_cast<const unsigned char*>(buffer.get()), size));
3102
3103 if (size <= 0 || size >= length || !bufferIsValid)
3104 {
3105 TENLog(fmt::format("Incorrect data in savegame #{}. The level format may be outdated.", slot), LogLevel::Warning);
3106 return false;
3107 }
3108
3109 const Save::SaveGame* s = Save::GetSaveGame(buffer.get());
3110
3111 header->Level = s->header()->level();
3112 header->LevelName = s->header()->level_name()->str();
3113 header->LevelHash = s->header()->level_hash();
3114 header->Hours = s->header()->hours();
3115 header->Minutes = s->header()->minutes();
3116 header->Seconds = s->header()->seconds();
3117 header->Level = s->header()->level();
3118 header->Timer = s->header()->timer();
3119 header->Count = s->header()->count();
3120
3121 return true;
3122 }
3123 catch (std::exception& ex)
3124 {
3125 TENLog(fmt::format("Error reading savegame #{}. Exception: {}", slot, ex.what()), LogLevel::Error);
3126 return false;

Callers

nothing calls this directly

Calls 12

TENLogFunction · 0.85
VerifySaveGameBufferFunction · 0.85
VerifierClass · 0.85
GetSaveGameFunction · 0.85
openMethod · 0.80
formatFunction · 0.50
getMethod · 0.45
closeMethod · 0.45
levelMethod · 0.45
strMethod · 0.45
countMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected