aboutsummaryrefslogtreecommitdiff
path: root/saga/saveload.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saga/saveload.cpp')
-rw-r--r--saga/saveload.cpp299
1 files changed, 0 insertions, 299 deletions
diff --git a/saga/saveload.cpp b/saga/saveload.cpp
deleted file mode 100644
index 761ae49521..0000000000
--- a/saga/saveload.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2004-2006 The ScummVM project
- *
- * The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "common/stdafx.h"
-
-#include "common/config-manager.h"
-#include "common/savefile.h"
-#include "common/system.h"
-#include "common/file.h"
-
-#include "saga/saga.h"
-#include "saga/actor.h"
-#include "saga/events.h"
-#include "saga/interface.h"
-#include "saga/isomap.h"
-#include "saga/music.h"
-#include "saga/render.h"
-#include "saga/resnames.h"
-#include "saga/scene.h"
-#include "saga/script.h"
-
-#define CURRENT_SAGA_VER 5
-
-namespace Saga {
-
-static SaveFileData emptySlot = {
- "", 0
-};
-
-//TODO:
-// - delete savegame
-
-char* SagaEngine::calcSaveFileName(uint slotNumber) {
- static char name[MAX_FILE_NAME];
- sprintf(name, "%s.s%02d", _targetName.c_str(), slotNumber);
- return name;
-}
-
-SaveFileData *SagaEngine::getSaveFile(uint idx) {
- if (idx >= _saveFilesMaxCount) {
- error("getSaveFileName wrong idx");
- }
- if (isSaveListFull()) {
- return &_saveFiles[_saveFilesCount - idx - 1];
- } else {
- if (!emptySlot.name[0])
- strcpy(emptySlot.name, getTextString(kTextNewSave));
-
- return (idx == 0) ? &emptySlot : &_saveFiles[_saveFilesCount - idx];
- }
-}
-
-bool SagaEngine::locateSaveFile(char *saveName, uint &titleNumber) {
- uint i;
- for (i = 0; i < _saveFilesCount; i++) {
- if (strcmp(saveName, _saveFiles[i].name) == 0) {
- if (isSaveListFull()) {
- titleNumber = _saveFilesCount - i - 1;
- } else {
- titleNumber = _saveFilesCount - i;
- }
- return true;
- }
- }
- return false;
-}
-
-uint SagaEngine::getNewSaveSlotNumber() {
- uint i, j;
- bool found;
- if (isSaveListFull()) {
- error("getNewSaveSlotNumber save list is full");
- }
- for (i = 0; i < MAX_SAVES; i++) {
- if (_saveMarks[i]) {
- found = false;
- for (j = 0; j < _saveFilesCount; j++) {
- if (_saveFiles[j].slotNumber == i) {
- found = true;
- break;
- }
- }
- if (!found) {
- return i;
- }
- }
- }
-
- error("getNewSaveSlotNumber save list is full");
-}
-
-void SagaEngine::fillSaveList() {
- int i;
- Common::InSaveFile *in;
- char *name;
-
- name = calcSaveFileName(MAX_SAVES);
- name[strlen(name) - 2] = 0;
- _saveFileMan->listSavefiles(name, _saveMarks, MAX_SAVES);
-
- _saveFilesMaxCount = 0;
- for (i = 0; i < MAX_SAVES; i++) {
- if (_saveMarks[i]) {
- _saveFilesMaxCount++;
- }
- _saveFiles[i].name[0] = 0;
- _saveFiles[i].slotNumber = (uint)-1;
- }
-
- _saveFilesCount = 0;
-
- i = 0;
- while (i < MAX_SAVES) {
- if (_saveMarks[i]) {
- name = calcSaveFileName(i);
- if ((in = _saveFileMan->openForLoading(name)) != NULL) {
- in->read(&_saveHeader, sizeof(_saveHeader));
-
- if (_saveHeader.type != MKID('SAGA')) {
- error("SagaEngine::load wrong format");
- }
- strcpy(_saveFiles[_saveFilesCount].name, _saveHeader.name);
- _saveFiles[_saveFilesCount].slotNumber = i;
- delete in;
- _saveFilesCount++;
- }
- }
- i++;
- }
-/* 4debug
- for (i = 0; i < 14; i++) {
- sprintf(_saveFiles[i].name,"test%i", i);
- _saveFiles[i].slotNumber = i;
- }
- _saveFilesCount = 14;
- _saveFilesMaxCount = 14;
- */
-}
-
-
-#define TITLESIZE 80
-void SagaEngine::save(const char *fileName, const char *saveName) {
- Common::OutSaveFile *out;
- char title[TITLESIZE];
-
- if (!(out = _saveFileMan->openForSaving(fileName))) {
- return;
- }
-
- _saveHeader.type = MKID('SAGA');
- _saveHeader.size = 0;
- _saveHeader.version = TO_LE_32(CURRENT_SAGA_VER);
- strncpy(_saveHeader.name, saveName, SAVE_TITLE_SIZE);
-
- out->write(&_saveHeader, sizeof(_saveHeader));
-
- // Original game title
- memset(title, 0, TITLESIZE);
- strncpy(title, getGameDescription()->title, TITLESIZE);
- out->write(title, TITLESIZE);
-
- // Surrounding scene
- out->writeSint32LE(_scene->getOutsetSceneNumber());
-
- // Inset scene
- out->writeSint32LE(_scene->currentSceneNumber());
-
- if (getGameType() != GType_ITE) {
- out->writeUint32LE(_globalFlags);
- for (int i = 0; i < ARRAYSIZE(_ethicsPoints); i++)
- out->writeSint16LE(_ethicsPoints[i]);
- }
-
- _interface->saveState(out);
-
- _actor->saveState(out);
-
- out->writeSint16LE(_script->_commonBufferSize);
-
- out->write(_script->_commonBuffer, _script->_commonBufferSize);
-
- out->writeSint16LE(_isoMap->getMapPosition().x);
- out->writeSint16LE(_isoMap->getMapPosition().y);
-
- out->flush();
-
- // TODO: Check out->ioFailed()
-
- delete out;
-}
-
-void SagaEngine::load(const char *fileName) {
- Common::InSaveFile *in;
- int commonBufferSize;
- int sceneNumber, insetSceneNumber;
- int mapx, mapy;
- char title[TITLESIZE];
-
- if (!(in = _saveFileMan->openForLoading(fileName))) {
- return;
- }
-
- in->read(&_saveHeader, sizeof(_saveHeader));
-
- _saveHeader.size = FROM_LE_32(_saveHeader.size);
- _saveHeader.version = FROM_LE_32(_saveHeader.version);
-
- // This save was written in native endianness (fix that, so warning will show up)
- if (_saveHeader.version > CURRENT_SAGA_VER) {
-#ifdef SCUMM_LITTLE_ENDIAN
- _saveHeader.version = TO_BE_32(_saveHeader.version);
-#else
- _saveHeader.version = TO_LE_32(_saveHeader.version);
-#endif
- }
-
- debug(2, "Save version: %x", _saveHeader.version);
-
- if (_saveHeader.version < 4)
- warning("This savegame is not endian-safe. There may be problems");
-
- if (_saveHeader.type != MKID('SAGA')) {
- error("SagaEngine::load wrong format");
- }
-
- if (_saveHeader.version > 4) {
- in->read(title, TITLESIZE);
- debug(0, "Save is for: %s", title);
- }
-
- // Surrounding scene
- sceneNumber = in->readSint32LE();
-
- // Inset scene
- insetSceneNumber = in->readSint32LE();
-
- if (getGameType() != GType_ITE) {
- _globalFlags = in->readUint32LE();
- for (int i = 0; i < ARRAYSIZE(_ethicsPoints); i++)
- _ethicsPoints[i] = in->readSint16LE();
- }
-
- _interface->loadState(in);
-
- _actor->loadState(in);
-
- commonBufferSize = in->readSint16LE();
- in->read(_script->_commonBuffer, commonBufferSize);
-
- mapx = in->readSint16LE();
- mapy = in->readSint16LE();
-
- delete in;
-
- // Mute volume to prevent outScene music play
- int volume = _music->getVolume();
- _music->setVolume(0);
-
- _isoMap->setMapPosition(mapx, mapy);
-
- _scene->clearSceneQueue();
- _scene->changeScene(sceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);
-
- _events->handleEvents(0); //dissolve backgrounds
-
- if (insetSceneNumber != sceneNumber) {
- _render->setFlag(RF_DISABLE_ACTORS);
- _render->drawScene();
- _render->clearFlag(RF_DISABLE_ACTORS);
- _scene->changeScene(insetSceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);
- }
-
- _music->setVolume(volume);
-
- _interface->draw();
-}
-
-} // End of namespace Saga