MCPcopy Create free account
hub / github.com/diasurgical/DevilutionX / LoadGame

Function LoadGame

Source/loadsave.cpp:2321–2530  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2319}
2320
2321void LoadGame(bool firstflag)
2322{
2323 FreeGameMem();
2324
2325 LoadHelper file(OpenSaveArchive(gSaveNumber), "game");
2326 if (!file.IsValid())
2327 app_fatal(_("Unable to open save file archive"));
2328
2329 if (!IsHeaderValid(file.NextLE<uint32_t>()))
2330 app_fatal(_("Invalid save file"));
2331
2332 if (gbIsHellfireSaveGame) {
2333 giNumberOfLevels = 25;
2334 giNumberQuests = 24;
2335 giNumberOfSmithPremiumItems = 15;
2336 } else {
2337 // Todo initialize additional levels and quests if we are running Hellfire
2338 giNumberOfLevels = 17;
2339 giNumberQuests = 16;
2340 giNumberOfSmithPremiumItems = 6;
2341 }
2342
2343 pfile_remove_temp_files();
2344
2345 setlevel = file.NextBool8();
2346 setlvlnum = static_cast<_setlevels>(file.NextBE<uint32_t>());
2347 currlevel = file.NextBE<uint32_t>();
2348 leveltype = static_cast<dungeon_type>(file.NextBE<uint32_t>());
2349 if (!setlevel)
2350 leveltype = GetLevelType(currlevel);
2351 int viewX = file.NextBE<int32_t>();
2352 int viewY = file.NextBE<int32_t>();
2353 invflag = file.NextBool8();
2354 chrflag = file.NextBool8();
2355 int tmpNummonsters = file.NextBE<int32_t>();
2356 auto savedItemCount = file.NextBE<uint32_t>();
2357 int tmpNummissiles = file.NextBE<int32_t>();
2358 int tmpNobjects = file.NextBE<int32_t>();
2359
2360 if (!gbIsHellfire && IsAnyOf(leveltype, DTYPE_NEST, DTYPE_CRYPT))
2361 app_fatal(_("Player is on a Hellfire only level"));
2362
2363 for (uint8_t i = 0; i < giNumberOfLevels; i++) {
2364 glSeedTbl[i] = file.NextBE<uint32_t>();
2365 file.Skip(4); // Skip loading gnLevelTypeTbl
2366 }
2367
2368 Player &myPlayer = *MyPlayer;
2369
2370 LoadPlayer(file, myPlayer);
2371
2372 if (sgGameInitInfo.nDifficulty < DIFF_NORMAL || sgGameInitInfo.nDifficulty > DIFF_HELL)
2373 sgGameInitInfo.nDifficulty = DIFF_NORMAL;
2374
2375 for (int i = 0; i < giNumberQuests; i++)
2376 LoadQuest(&file, i);
2377 for (int i = 0; i < MAXPORTAL; i++)
2378 LoadPortal(&file, i);

Callers 2

ShowProgressFunction · 0.85
gamemenu_load_gameFunction · 0.85

Calls 15

FreeGameMemFunction · 0.85
OpenSaveArchiveFunction · 0.85
app_fatalFunction · 0.85
IsHeaderValidFunction · 0.85
pfile_remove_temp_filesFunction · 0.85
GetLevelTypeFunction · 0.85
IsAnyOfFunction · 0.85
LoadPlayerFunction · 0.85
LoadQuestFunction · 0.85
LoadPortalFunction · 0.85
pfile_convert_levelsFunction · 0.85
RemoveEmptyInventoryFunction · 0.85

Tested by

no test coverage detected