本文整理汇总了C++中common::OutSaveFile类的典型用法代码示例。如果您正苦于以下问题:C++ OutSaveFile类的具体用法?C++ OutSaveFile怎么用?C++ OutSaveFile使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了OutSaveFile类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: saveSavegameData
Common::Error saveSavegameData(int saveGameIdx, const Common::String &saveName, DraciEngine &vm) {
Common::String filename = vm.getSavegameFile(saveGameIdx);
Common::SaveFileManager *saveMan = g_system->getSavefileManager();
Common::OutSaveFile *f = saveMan->openForSaving(filename);
if (f == NULL)
return Common::kNoGameDataFoundError;
TimeDate curTime;
vm._system->getTimeAndDate(curTime);
// Save the savegame header
DraciSavegameHeader header;
header.saveName = saveName;
header.date = ((curTime.tm_mday & 0xFF) << 24) | (((curTime.tm_mon + 1) & 0xFF) << 16) | ((curTime.tm_year + 1900) & 0xFFFF);
header.time = ((curTime.tm_hour & 0xFF) << 8) | ((curTime.tm_min) & 0xFF);
header.playtime = vm.getTotalPlayTime() / 1000;
writeSavegameHeader(f, header);
if (f->err()) {
delete f;
saveMan->removeSavefile(filename);
return Common::kWritingFailed;
} else {
// Create the remainder of the savegame
Common::Serializer s(NULL, f);
vm._game->DoSync(s);
f->finalize();
delete f;
return Common::kNoError;
}
}
示例2: saveGame
bool StarTrekEngine::saveGame(int slot, Common::String desc) {
Common::String filename = getSavegameFilename(slot);
Common::OutSaveFile *out;
if (!(out = _saveFileMan->openForSaving(filename))) {
warning("Can't create file '%s', game not saved", filename.c_str());
return false;
} else {
debug(3, "Successfully opened %s for writing", filename.c_str());
}
SavegameMetadata meta;
meta.version = CURRENT_SAVEGAME_VERSION;
memset(meta.description, 0, sizeof(meta.description));
strncpy(meta.description, desc.c_str(), SAVEGAME_DESCRIPTION_LEN);
TimeDate curTime;
_system->getTimeAndDate(curTime);
meta.setSaveTimeAndDate(curTime);
meta.playTime = g_engine->getTotalPlayTime();
if (!saveOrLoadMetadata(nullptr, out, &meta)) {
delete out;
return false;
}
if (!saveOrLoadGameData(nullptr, out, &meta)) {
delete out;
return false;
}
out->finalize();
delete out;
return true;
}
示例3: saveGameState
Common::Error CineEngine::saveGameState(int slot, const Common::String &desc) {
// Load savegame descriptions from index file
loadSaveDirectory();
// Set description for selected slot making sure it ends with a trailing zero
strncpy(currentSaveName[slot], desc.c_str(), 20);
currentSaveName[slot][sizeof(CommandeType) - 1] = 0;
// Update savegame descriptions
Common::String indexFile = _targetName + ".dir";
Common::OutSaveFile *fHandle = _saveFileMan->openForSaving(indexFile);
if (!fHandle) {
warning("Unable to open file %s for saving", indexFile.c_str());
return Common::kUnknownError;
}
fHandle->write(currentSaveName, 10 * 20);
delete fHandle;
// Save game
char saveFileName[256];
sprintf(saveFileName, "%s.%1d", _targetName.c_str(), slot);
makeSave(saveFileName);
checkDataDisk(-1);
return Common::kNoError;
}
示例4: saveGameState
Common::Error SavesManager::saveGameState(int slot, const Common::String &desc) {
Common::OutSaveFile *out = g_system->getSavefileManager()->openForSaving(
generateSaveName(slot));
if (!out)
return Common::kCreatingFileFailed;
// Push map and party data to the save archives
Map &map = *g_vm->_map;
map.saveMaze();
// Write the savegame header
XeenSavegameHeader header;
header._saveName = desc;
writeSavegameHeader(out, header);
// Loop through saving the sides' save archives
SaveArchive *archives[2] = { File::_xeenSave, File::_darkSave };
for (int idx = 0; idx < 2; ++idx) {
if (archives[idx]) {
archives[idx]->save(*out);
} else {
// Side isn't present
out->writeUint32LE(0);
}
}
// Write out miscellaneous
FileManager &files = *g_vm->_files;
files.save(*out);
out->finalize();
delete out;
return Common::kNoError;
}
示例5: savegame
void Script::savegame(uint slot) {
char save[15];
char newchar;
Common::OutSaveFile *file = SaveLoad::openForSaving(ConfMan.getActiveDomainName(), slot);
if (!file) {
debugC(9, kGroovieDebugScript, "Save file pointer is null");
GUI::MessageDialog dialog(_("Failed to save game"), _("OK"));
dialog.runModal();
return;
}
// Saving the variables. It is endian safe because they're byte variables
file->write(_variables, 0x400);
delete file;
// Cache the saved name
for (int i = 0; i < 15; i++) {
newchar = _variables[i] + 0x30;
if ((newchar < 0x30 || newchar > 0x39) && (newchar < 0x41 || newchar > 0x7A)) {
save[i] = '\0';
break;
} else {
save[i] = newchar;
}
}
_saveNames[slot] = save;
}
示例6: saveAnimDataTable
void saveAnimDataTable(Common::OutSaveFile &out) {
out.writeUint16BE(NUM_MAX_ANIMDATA); // Entry count
out.writeUint16BE(0x1E); // Entry size
for (int i = 0; i < NUM_MAX_ANIMDATA; i++) {
g_cine->_animDataTable[i].save(out);
}
}
示例7: saveScreenParams
void saveScreenParams(Common::OutSaveFile &out) {
// Screen parameters, unhandled
out.writeUint16BE(0);
out.writeUint16BE(0);
out.writeUint16BE(0);
out.writeUint16BE(0);
out.writeUint16BE(0);
out.writeUint16BE(0);
}
示例8: saveCommandBuffer
/** Save the 80 bytes long command buffer padded to that length with zeroes. */
void saveCommandBuffer(Common::OutSaveFile &out) {
// Let's make sure there's space for the trailing zero
// (That's why we subtract one from the maximum command buffer size here).
uint32 size = MIN<uint32>(g_cine->_commandBuffer.size(), kMaxCommandBufferSize - 1);
out.write(g_cine->_commandBuffer.c_str(), size);
// Write the rest as zeroes (Here we also write the string's trailing zero)
for (uint i = 0; i < kMaxCommandBufferSize - size; i++) {
out.writeByte(0);
}
}
示例9: saveGame
bool AvalancheEngine::saveGame(const int16 slot, const Common::String &desc) {
Common::String fileName = getSaveFileName(slot);
Common::OutSaveFile *f = g_system->getSavefileManager()->openForSaving(fileName);
if (!f) {
warning("Can't create file '%s', game not saved.", fileName.c_str());
return false;
}
f->writeUint32LE(MKTAG('A', 'V', 'A', 'L'));
// Write version. We can't restore from obsolete versions.
f->writeByte(kSavegameVersion);
f->writeUint32LE(desc.size());
f->write(desc.c_str(), desc.size());
Graphics::saveThumbnail(*f);
TimeDate t;
_system->getTimeAndDate(t);
f->writeSint16LE(t.tm_mday);
f->writeSint16LE(t.tm_mon);
f->writeSint16LE(t.tm_year);
_totalTime += getTimeInSeconds() - _startTime;
Common::Serializer sz(NULL, f);
synchronize(sz);
f->finalize();
delete f;
return true;
}
示例10: save
bool SaveLoadManager::save(const Common::String &file, const void *buf, size_t n) {
Common::OutSaveFile *savefile = g_system->getSavefileManager()->openForSaving(file);
if (savefile) {
size_t bytesWritten = savefile->write(buf, n);
savefile->finalize();
delete savefile;
return bytesWritten == n;
} else
return false;
}
示例11: saveHiscore
void Minigame::saveHiscore(int minigameNum, int score) {
Common::String filename = _vm->getTargetName() + "-highscore.dat";
Common::OutSaveFile *file = g_system->getSavefileManager()->openForSaving(filename);
if (file) {
// Reserve a byte for future usage (rarely a bad idea, you never know...)
file->writeByte(0);
_hiScoreTable[minigameNum] = score;
for (int i = 0; i < kMinigameCount; ++i)
file->writeUint32LE(_hiScoreTable[i]);
delete file;
}
}
示例12: flushStream
void SaveLoad::flushStream(GameId id) {
Common::OutSaveFile *save = openForSaving(id);
if (!save)
error("SaveLoad::flushStream: cannot open savegame (%s)!", getFilename(id).c_str());
if (!_savegame)
error("SaveLoad::flushStream: savegame stream is invalid");
save->write(_savegame->getData(), (uint32)_savegame->size());
delete save;
}
示例13: DoSave
/**
* DoSave
*/
static void DoSave() {
Common::OutSaveFile *f;
const char *fname;
// Next getList() must do its stuff again
NeedLoad = true;
if (SaveSceneName == NULL)
SaveSceneName = NewName();
if (SaveSceneDesc[0] == 0)
SaveSceneDesc = "unnamed";
fname = SaveSceneName;
f = _vm->getSaveFileMan()->openForSaving(fname);
Common::Serializer s(0, f);
if (f == NULL)
goto save_failure;
// Write out a savegame header
SaveGameHeader hdr;
hdr.id = SAVEGAME_ID;
hdr.size = SAVEGAME_HEADER_SIZE;
hdr.ver = CURRENT_VER;
memcpy(hdr.desc, SaveSceneDesc, SG_DESC_LEN);
hdr.desc[SG_DESC_LEN - 1] = 0;
g_system->getTimeAndDate(hdr.dateTime);
if (!syncSaveGameHeader(s, hdr) || f->err()) {
goto save_failure;
}
DoSync(s);
// Write out the special Id for Discworld savegames
f->writeUint32LE(0xFEEDFACE);
if (f->err())
goto save_failure;
f->finalize();
delete f;
return;
save_failure:
if (f) {
delete f;
_vm->getSaveFileMan()->removeSavefile(fname);
}
GUI::MessageDialog dialog("Failed to save game state to file.");
dialog.runModal();
}
示例14:
int16 GameDatabaseV2::savegame(const char *filename, const char *description, int16 version) {
Common::OutSaveFile *out;
int16 result = 0;
if (!(out = g_system->getSavefileManager()->openForSaving(filename))) {
warning("Can't create file '%s', game not saved", filename);
return 6;
}
// Variable 0 is not saved
out->write(_gameState + 2, _gameStateSize - 2);
for (uint i = 0; i < _objects.size(); i++)
_objects[i]->save(*out);
delete out;
return result;
}
示例15: savePalette
/**
* Write active and backup palette to save
* @param fHandle Savefile open for writing
* @todo Add support for saving the palette in the 16 color version of Operation Stealth.
* Possibly combine with FWRenderer's savePalette-method?
*/
void OSRenderer::savePalette(Common::OutSaveFile &fHandle) {
byte buf[kHighPalNumBytes];
// We can have 16 color palette in many cases
fHandle.writeUint16LE(_activePal.colorCount());
// Write the active 256 color palette.
_activePal.save(buf, sizeof(buf), CINE_LITTLE_ENDIAN);
fHandle.write(buf, kHighPalNumBytes);
// Write the active 256 color palette a second time.
// FIXME: The backup 256 color palette should be saved here instead of the active one.
fHandle.write(buf, kHighPalNumBytes);
}