bool NeverhoodEngine::loadgame(const char *filename) { Common::InSaveFile *in; if (!(in = g_system->getSavefileManager()->openForLoading(filename))) { warning("Can't open file '%s', game not loaded", filename); return false; } SaveHeader header; kReadSaveHeaderError errorCode = readSaveHeader(in, false, header); if (errorCode != kRSHENoError) { warning("Error loading savegame '%s'", filename); delete in; return false; } g_engine->setTotalPlayTime(header.playTime * 1000); _gameVars->loadState(in); _gameState.sceneNum = _gameVars->getGlobalVar(V_CURRENT_SCENE); _gameState.which = _gameVars->getGlobalVar(V_CURRENT_SCENE_WHICH); _gameModule->requestRestoreGame(); delete in; return true; }
void ToltecsEngine::loadgame(const char *filename) { Common::InSaveFile *in; if (!(in = g_system->getSavefileManager()->openForLoading(filename))) { warning("Can't open file '%s', game not loaded", filename); return; } SaveHeader header; kReadSaveHeaderError errorCode = readSaveHeader(in, false, header); if (errorCode != kRSHENoError) { warning("Error loading savegame '%s'", filename); delete in; return; } _sound->stopAll(); _music->stopSequence(); g_engine->setTotalPlayTime(header.playTime * 1000); _cameraX = in->readUint16LE(); _cameraY = in->readUint16LE(); _cameraHeight = in->readUint16LE(); _guiHeight = in->readUint16LE(); _sceneWidth = in->readUint16LE(); _sceneHeight = in->readUint16LE(); _sceneResIndex = in->readUint32LE(); _walkSpeedX = in->readUint16LE(); _walkSpeedY = in->readUint16LE(); _counter01 = in->readUint32LE(); _counter02 = in->readUint32LE(); _movieSceneFlag = in->readByte() != 0; _flag01 = in->readByte(); _mouseX = in->readUint16LE(); _mouseY = in->readUint16LE(); _mouseDisabled = in->readUint16LE(); _system->warpMouse(_mouseX, _mouseY); _system->showMouse(_mouseDisabled == 0); _palette->loadState(in); _script->loadState(in); _anim->loadState(in); _screen->loadState(in); if (header.version >= 2) _sound->loadState(in); if (header.version >= 3) _music->loadState(in); delete in; loadScene(_sceneResIndex); _newCameraX = _cameraX; _newCameraY = _cameraY; }
void BbvsEngine::loadgame(const char *filename) { Common::InSaveFile *in; if (!(in = g_system->getSavefileManager()->openForLoading(filename))) { warning("Can't open file '%s', game not loaded", filename); return; } SaveHeader header; kReadSaveHeaderError errorCode = readSaveHeader(in, false, header); if (errorCode != kRSHENoError) { warning("Error loading savegame '%s'", filename); delete in; return; } g_engine->setTotalPlayTime(header.playTime * 1000); memset(_sceneObjects, 0, sizeof(_sceneObjects)); for (int i = 0; i < kSceneObjectsCount; ++i) { _sceneObjects[i].walkDestPt.x = -1; _sceneObjects[i].walkDestPt.y = -1; } _currSceneNum = 0; _newSceneNum = in->readUint32LE(); initScene(false); _prevSceneNum = in->readUint32LE(); _gameState = in->readUint32LE(); _mouseCursorSpriteIndex = in->readUint32LE(); _mousePos.x = in->readUint16LE(); _mousePos.y = in->readUint16LE(); _currVerbNum = in->readUint32LE(); _activeItemType = in->readUint32LE(); _activeItemIndex = in->readUint32LE(); _verbPos.x = in->readUint16LE(); _verbPos.y = in->readUint16LE(); _inventoryButtonIndex = in->readUint32LE(); _currInventoryItem = in->readUint32LE(); _currTalkObjectIndex = in->readUint32LE(); _currCameraNum = in->readUint32LE(); _cameraPos.x = in->readUint16LE(); _cameraPos.y = in->readUint16LE(); _newCameraPos.x = in->readUint16LE(); _newCameraPos.y = in->readUint16LE(); _dialogSlotCount = in->readUint32LE(); _walkMousePos.x = in->readUint16LE(); _walkMousePos.y = in->readUint16LE(); in->read(_backgroundSoundsActive, kSceneSoundsCount); in->read(_inventoryItemStatus, kInventoryItemStatusCount); in->read(_dialogItemStatus, kDialogItemStatusCount); in->read(_gameVars, kGameVarsCount); in->read(_sceneVisited, kSceneVisitedCount); for (int i = 0; i < _gameModule->getSceneObjectDefsCount(); ++i) { SceneObject *obj = &_sceneObjects[i]; obj->x = in->readUint32LE(); obj->y = in->readUint32LE(); obj->animIndex = in->readUint32LE(); obj->frameIndex = in->readUint32LE(); obj->frameTicks = in->readUint32LE(); obj->walkCount = in->readUint32LE(); obj->xIncr = in->readUint32LE(); obj->yIncr = in->readUint32LE(); obj->turnValue = in->readUint32LE(); obj->turnCount = in->readUint32LE(); obj->turnTicks = in->readUint32LE(); obj->walkDestPt.x = in->readUint16LE(); obj->walkDestPt.y = in->readUint16LE(); obj->anim = obj->animIndex > 0 ? _gameModule->getAnimation(obj->animIndex) : 0; } updateWalkableRects(); // Restart scene background sounds for (int i = 0; i < _gameModule->getSceneSoundsCount(); ++i) { if (_backgroundSoundsActive[i]) { SceneSound *sceneSound = _gameModule->getSceneSound(i); playSound(sceneSound->soundNum, true); } } _currAction = 0; _currActionCommandIndex = -1; delete in; }