bool StarTrekEngine::loadGame(int slot) { Common::String filename = getSavegameFilename(slot); Common::InSaveFile *in; if (!(in = _saveFileMan->openForLoading(filename))) { warning("Can't open file '%s', game not loaded", filename.c_str()); return false; } else { debug(3, "Successfully opened %s for loading", filename.c_str()); } SavegameMetadata meta; if (!saveOrLoadMetadata(in, nullptr, &meta)) { delete in; return false; } if (meta.version > CURRENT_SAVEGAME_VERSION) { delete in; error("Savegame version (%u) is newer than current version (%u). A newer version of ScummVM is needed", meta.version, CURRENT_SAVEGAME_VERSION); } if (!saveOrLoadGameData(in, nullptr, &meta)) { delete in; return false; } delete in; _lastGameMode = _gameMode; if (_gameMode == GAMEMODE_AWAYMISSION) { for (int i = 0; i < NUM_ACTORS; i++) { Actor *a = &_actorList[i]; if (a->spriteDrawn) { if (a->animType != 1) a->animFile = loadFile(Common::String(a->animFilename) + ".anm"); _gfx->addSprite(&a->sprite); a->sprite.setBitmap(loadAnimationFrame(a->bitmapFilename, a->scale)); } } } else if (_gameMode == -1) { initBridge(true); _lastGameMode = GAMEMODE_BRIDGE; // TODO: mode change } else { _txtFilename = _missionToLoad; initBridge(false); // TODO: mode change } return true; }
bool ComponentAnim::loadAnimation(StandardEnemyAnimation anim, Direction direction, std::string name, FILE* from) { // Cargar animación indicada de from if (from == NULL || name == "") return false; int numFrames, speed; int* frameList; EnemyFrameData frameData; EnemyAnimData animData; // Leemos datos de la animación // 0.Speed if (fscanf(from, "%d", &speed) < 1) return false; // 1.Nº frames if (fscanf(from, "%d", &numFrames) < 1) return false; animData.animSpeed = speed; animData.numFrames = numFrames; // Se instancia el contenedor de frames frameList = new int[numFrames]; // Se carga cada frame for (int i = 0; i < numFrames; i++) { frameData = loadAnimationFrame(from); frameList[i] = frameData.frameId; animData.frameData.push_back(frameData); } // Se añade la animación al graphic con el nombre indicado SpriteMap* gfx = ((SpriteMap*) e->graphic); gfx->addAnim(name, frameList, numFrames, speed, true); // Se mappea la anim animList.insert(make_pair(make_pair(anim, direction), name)); // Y se agrega su info animDataList.insert(make_pair(make_pair(anim, direction), animData)); delete frameList; return true; };