void Items::save(SaveFileWriteStream &f) { int size = (int)_items.size(); f.writeInt(size); int i; for (i = 0; i != size; ++i) { _items[i]->save(f); } // Always write out 100 items for (; i != 100; ++i) { f.padBytes(0x174); // bbox + rect + 18 float fields } }
bool BladeRunnerEngine::saveGame(const Common::String &filename, byte *thumbnail) { warning("BladeRunnerEngine::saveGame not finished"); if (!playerHasControl() || _sceneScript->isInsideScript() || _aiScripts->isInsideScript()) { return false; } Common::OutSaveFile *commonSaveFile = getSaveFileManager()->openForSaving(filename, false); if (commonSaveFile->err()) { return false; } SaveFileWriteStream s; s.padBytes(9600); // TODO: thumbnail s.writeFloat(-1.0f); _settings->save(s); _scene->save(s); _scene->_exits->save(s); _scene->_regions->save(s); _scene->_set->save(s); for (uint i = 0; i != _gameInfo->getGlobalVarCount(); ++i) { s.writeInt(_gameVars[i]); } _music->save(s); // _audioPlayer->save(s) // zero func // _audioSpeech->save(s) // zero func _combat->save(s); _gameFlags->save(s); _items->save(s); _sceneObjects->save(s); _ambientSounds->save(s); _overlays->save(s); _spinner->save(s); _scores->save(s); _dialogueMenu->save(s); _obstacles->save(s); _actorDialogueQueue->save(s); _waypoints->save(s); for (uint i = 0; i != _gameInfo->getActorCount(); ++i) { _actors[i]->save(s); int animationState, animationFrame, animationStateNext, nextAnimation; _aiScripts->queryAnimationState(i, &animationState, &animationFrame, &animationStateNext, &nextAnimation); s.writeInt(animationState); s.writeInt(animationFrame); s.writeInt(animationStateNext); s.writeInt(nextAnimation); } _actors[kActorVoiceOver]->save(s); _policeMaze->save(s); _crimesDatabase->save(s); s.finalize(); assert(0 && "ok"); commonSaveFile->writeUint32LE(s.size() + 4); commonSaveFile->write(s.getData(), s.size()); return !commonSaveFile->err(); }