void G_UnSnapshotLevel (bool hubLoad) { if (level.info->Snapshot.mBuffer == nullptr) return; if (level.info->isValid()) { FSerializer arc; if (!arc.OpenReader(&level.info->Snapshot)) { I_Error("Failed to load savegame"); return; } G_SerializeLevel (arc, hubLoad); level.FromSnapshot = true; TThinkerIterator<APlayerPawn> it; APlayerPawn *pawn, *next; next = it.Next(); while ((pawn = next) != 0) { next = it.Next(); if (pawn->player == NULL || pawn->player->mo == NULL || !playeringame[pawn->player - players]) { int i; // If this isn't the unmorphed original copy of a player, destroy it, because it's extra. for (i = 0; i < MAXPLAYERS; ++i) { if (playeringame[i] && players[i].morphTics && players[i].mo->tracer == pawn) { break; } } if (i == MAXPLAYERS) { pawn->Destroy (); } } } } // No reason to keep the snapshot around once the level's been entered. level.info->Snapshot.Clean(); if (hubLoad) { // Unlock ACS global strings that were locked when the snapshot was made. FBehavior::StaticUnlockLevelVarStrings(); } }
void G_UnSnapshotLevel (bool hubLoad) { if (level.info->snapshot == NULL) return; if (level.info->isValid()) { SaveVersion = level.info->snapshotVer; level.info->snapshot->Reopen (); FArchive arc (*level.info->snapshot); if (hubLoad) arc.SetHubTravel (); G_SerializeLevel (arc, hubLoad); arc.Close (); level.FromSnapshot = true; TThinkerIterator<APlayerPawn> it; APlayerPawn *pawn, *next; next = it.Next(); while ((pawn = next) != 0) { next = it.Next(); if (pawn->player == NULL || pawn->player->mo == NULL || !playeringame[pawn->player - players]) { int i; // If this isn't the unmorphed original copy of a player, destroy it, because it's extra. for (i = 0; i < MAXPLAYERS; ++i) { if (playeringame[i] && players[i].morphTics && players[i].mo->tracer == pawn) { break; } } if (i == MAXPLAYERS) { pawn->Destroy (); } } } } // No reason to keep the snapshot around once the level's been entered. level.info->ClearSnapshot(); if (hubLoad) { // Unlock ACS global strings that were locked when the snapshot was made. FBehavior::StaticUnlockLevelVarStrings(); } }
void G_SnapshotLevel () { level.info->Snapshot.Clean(); if (level.info->isValid()) { FSerializer arc; if (arc.OpenWriter(save_formatted)) { SaveVersion = SAVEVER; G_SerializeLevel(arc, false); level.info->Snapshot = arc.GetCompressedOutput(); } } }
void G_SnapshotLevel () { if (level.info->snapshot) delete level.info->snapshot; if (level.info->isValid()) { level.info->snapshotVer = SAVEVER; level.info->snapshot = new FCompressedMemFile; level.info->snapshot->Open (); FArchive arc (*level.info->snapshot); SaveVersion = SAVEVER; G_SerializeLevel (arc, false); } }