dboolean P_WriteSaveGame(char* description, int slot) { //char name[256]; // setup game save file // sprintf(name, SAVEGAMENAME"%d.dsg", slot); save_stream = fopen(P_GetSaveGameName(slot), "wb"); // success? if(save_stream == NULL) { return false; } save_offset = 0; saveg_write_header(description); P_ArchiveMobjs(); P_ArchivePlayers(); P_ArchiveWorld(); P_ArchiveSpecials(); P_ArchiveMacros(); saveg_write_marker(SAVEGAME_EOF); // close out file fclose(save_stream); return true; }
void G_WriteSaveData(pbuf_t *savebuffer) { int i; char name2[VERSIONSIZE]; byte game_options[GAME_OPTION_SIZE]; //e6y: numeric version number of package unsigned int packageversion = GetPackageVersion(); char *description = savedescription; M_PBufWriteBytes(savebuffer, description, SAVESTRINGSIZE); memset(name2, 0, sizeof(name2)); // CPhipps - scan for the version header for (i = 0; i < num_version_headers; i++) { if (version_headers[i].comp_level == best_compatibility) { // killough 2/22/98: "proprietary" version string :-) sprintf(name2, version_headers[i].ver_printf, version_headers[i].version); i = num_version_headers + 1; } } M_PBufWriteBytes(savebuffer, name2, VERSIONSIZE); /* killough 3/16/98, 12/98: store lump name checksum */ if (MULTINET) M_PBufWriteLong(savebuffer, 1); else M_PBufWriteLong(savebuffer, G_Signature()); M_PBufWriteUInt(savebuffer, packageversion); M_PBufWriteInt(savebuffer, compatibility_level); M_PBufWriteInt(savebuffer, gameskill); M_PBufWriteInt(savebuffer, gameepisode); M_PBufWriteInt(savebuffer, gamemap); M_PBufWriteInt(savebuffer, gametic); M_PBufWriteBool(savebuffer, levelTimer); M_PBufWriteInt(savebuffer, levelTimeCount); M_PBufWriteBool(savebuffer, levelFragLimit); M_PBufWriteInt(savebuffer, levelFragLimitCount); for (i = 0; i < MAXPLAYERS; i++) M_PBufWriteBool(savebuffer, playeringame[i]); for (i = MAXPLAYERS; i < MIN_MAXPLAYERS; i++) M_PBufWriteBool(savebuffer, false); M_PBufWriteInt(savebuffer, idmusnum); G_WriteOptions(game_options); // killough 3/1/98: save game options if (mbf_features) { M_PBufWriteArray(savebuffer, GAME_OPTION_SIZE); for (i = 0; i < GAME_OPTION_SIZE; i++) M_PBufWriteUChar(savebuffer, game_options[i]); } else { M_PBufWriteArray(savebuffer, OLD_GAME_OPTION_SIZE); for (i = 0; i < OLD_GAME_OPTION_SIZE; i++) M_PBufWriteUChar(savebuffer, game_options[i]); } M_PBufWriteInt(savebuffer, leveltime); M_PBufWriteInt(savebuffer, totalleveltimes); // killough 11/98: save revenant tracer state M_PBufWriteInt(savebuffer, basetic); P_ArchiveWorld(savebuffer); P_ArchivePlayers(savebuffer); P_ArchiveThinkers(savebuffer); P_ArchiveSpecials(savebuffer); P_ArchiveRNG(savebuffer); // killough 1/18/98: save RNG information P_ArchiveMap(savebuffer); // killough 1/22/98: save automap information M_PBufWriteUChar(savebuffer, 0xe6); // consistency marker G_UpdateAverageSaveSize(M_PBufGetCapacity(savebuffer)); }