Exemple #1
0
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;
}
Exemple #2
0
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));
}