HUGO: Get rid of initial savegame

svn-id: r54503
This commit is contained in:
Arnaud Boutonné 2010-11-26 23:17:16 +00:00
parent a0cc07268d
commit bab5aa433b
7 changed files with 16 additions and 69 deletions

View File

@ -194,8 +194,7 @@ void HugoEngine::initGame(const HugoGameDescription *gd) {
_packedFl = (getFeatures() & GF_PACKED); _packedFl = (getFeatures() & GF_PACKED);
_gameVariant = _gameType - 1 + ((_platform == Common::kPlatformWindows) ? 0 : 3); _gameVariant = _gameType - 1 + ((_platform == Common::kPlatformWindows) ? 0 : 3);
// Generate filenames // Generate filename
_initFilename = _targetName + "-00.SAV";
_saveFilename = _targetName + "-%d.SAV"; _saveFilename = _targetName + "-%d.SAV";
} }

View File

@ -297,19 +297,13 @@ bool FileManager::fileExists(char *filename) {
} }
/** /**
* Save game to supplied slot (-1 is INITFILE) * Save game to supplied slot
*/ */
void FileManager::saveGame(int16 slot, const char *descrip) { void FileManager::saveGame(int16 slot, const char *descrip) {
debugC(1, kDebugFile, "saveGame(%d, %s)", slot, descrip); debugC(1, kDebugFile, "saveGame(%d, %s)", slot, descrip);
// Get full path of saved game file - note test for INITFILE // Get full path of saved game file - note test for INITFILE
Common::String path; // Full path of saved game Common::String path = Common::String::format(_vm->_saveFilename.c_str(), slot);
if (slot == -1)
path = _vm->_initFilename;
else
path = Common::String::format(_vm->_saveFilename.c_str(), slot);
Common::WriteStream *out = _vm->getSaveFileManager()->openForSaving(path); Common::WriteStream *out = _vm->getSaveFileManager()->openForSaving(path);
if (!out) { if (!out) {
warning("Can't create file '%s', game not saved", path.c_str()); warning("Can't create file '%s', game not saved", path.c_str());
@ -374,7 +368,7 @@ void FileManager::saveGame(int16 slot, const char *descrip) {
} }
/** /**
* Restore game from supplied slot number (-1 is INITFILE) * Restore game from supplied slot number
*/ */
void FileManager::restoreGame(int16 slot) { void FileManager::restoreGame(int16 slot) {
debugC(1, kDebugFile, "restoreGame(%d)", slot); debugC(1, kDebugFile, "restoreGame(%d)", slot);
@ -385,10 +379,7 @@ void FileManager::restoreGame(int16 slot) {
// Get full path of saved game file - note test for INITFILE // Get full path of saved game file - note test for INITFILE
Common::String path; // Full path of saved game Common::String path; // Full path of saved game
if (slot == -1) path = Common::String::format(_vm->_saveFilename.c_str(), slot);
path = _vm->_initFilename;
else
path = Common::String::format(_vm->_saveFilename.c_str(), slot);
Common::SeekableReadStream *in = _vm->getSaveFileManager()->openForLoading(path); Common::SeekableReadStream *in = _vm->getSaveFileManager()->openForLoading(path);
if (!in) if (!in)
@ -457,41 +448,6 @@ void FileManager::restoreGame(int16 slot) {
delete in; delete in;
} }
/**
* Initialize the size of a saved game (from the fixed initial game).
* If status.initsave is TRUE, or the initial saved game is not found,
* force a save to create one. Normally the game will be shipped with
* the initial game file but useful to force a write during development
* when the size is changeable.
* The net result is a valid INITFILE, with status.savesize initialized.
*/
void FileManager::initSavedGame() {
debugC(1, kDebugFile, "initSavedGame");
// Force save of initial game
if (_vm->getGameStatus().initSaveFl)
saveGame(-1, "");
// If initial game doesn't exist, create it
Common::SeekableReadStream *in = _vm->getSaveFileManager()->openForLoading(_vm->_initFilename);
if (!in) {
saveGame(-1, "");
in = _vm->getSaveFileManager()->openForLoading(_vm->_initFilename);
if (!in) {
warning("Unable to write file: %s", _vm->_initFilename.c_str());
return;
}
}
// Must have an open saved game now
_vm->getGameStatus().saveSize = in->size();
delete in;
// Check sanity - maybe disk full or path set to read-only drive?
if (_vm->getGameStatus().saveSize <= 0)
warning("Unable to write file: %s", _vm->_initFilename.c_str());
}
/** /**
* Read the encrypted text from the boot file and print it * Read the encrypted text from the boot file and print it
*/ */

View File

@ -58,7 +58,6 @@ public:
bool fileExists(char *filename); bool fileExists(char *filename);
sound_pt getSound(short sound, uint16 *size); sound_pt getSound(short sound, uint16 *size);
void initSavedGame();
void instructions(); void instructions();
void readBootFile(); void readBootFile();
void readImage(int objNum, object_t *objPtr); void readImage(int objNum, object_t *objPtr);

View File

@ -818,11 +818,9 @@ struct hotspot_t {
}; };
struct status_t { // Game status (not saved) struct status_t { // Game status (not saved)
bool initSaveFl; // Force save of initial game
bool storyModeFl; // Game is telling story - no commands bool storyModeFl; // Game is telling story - no commands
bool gameOverFl; // Game is over - hero knobbled bool gameOverFl; // Game is over - hero knobbled
bool demoFl; // Game is in demo mode bool demoFl; // Game is in demo mode
bool debugFl; // Game is in debug mode
bool textBoxFl; // Game is (halted) in text box bool textBoxFl; // Game is (halted) in text box
bool lookFl; // Toolbar "look" button pressed bool lookFl; // Toolbar "look" button pressed
bool recallFl; // Toolbar "recall" button pressed bool recallFl; // Toolbar "recall" button pressed
@ -842,16 +840,16 @@ struct status_t { // Game status (not saved)
go_t go_for; // Purpose of an automatic route go_t go_for; // Purpose of an automatic route
int16 go_id; // Index of exit of object walking to int16 go_id; // Index of exit of object walking to
fpath_t path; // Alternate path for saved files fpath_t path; // Alternate path for saved files
long saveSize; // Size of a saved game
int16 saveSlot; // Current slot to save/restore game int16 saveSlot; // Current slot to save/restore game
int16 screenWidth; // Desktop screen width
int16 song; // Current song int16 song; // Current song
int16 cx, cy; // Cursor position (dib coords) int16 cx, cy; // Cursor position (dib coords)
// Strangerke - Suppress as related to playback // Strangerke - Suppress as related to playback
// bool playbackFl; // Game is in playback mode // bool playbackFl; // Game is in playback mode
// bool recordFl; // Game is in record mode // bool recordFl; // Game is in record mode
// Strangerke - Not used ? // Strangerke - Not used ?
// bool mmtimeFl; // Multimedia timer supported // bool mmtimeFl; // Multimedia timer supported
// int16 screenWidth; // Desktop screen width
// uint32 saveTick; // Time of last save in ticks // uint32 saveTick; // Time of last save in ticks
}; };

View File

@ -254,8 +254,6 @@ Common::Error HugoEngine::run() {
initialize(); initialize();
initConfig(RESET); // Reset user's config initConfig(RESET); // Reset user's config
_file->restoreGame(-1);
initMachine(); initMachine();
// Start the state machine // Start the state machine
@ -903,16 +901,10 @@ void HugoEngine::initPlaylist(bool playlist[MAX_TUNES]) {
*/ */
void HugoEngine::initStatus() { void HugoEngine::initStatus() {
debugC(1, kDebugEngine, "initStatus"); debugC(1, kDebugEngine, "initStatus");
_status.initSaveFl = true; // Force initial save
_status.storyModeFl = false; // Not in story mode _status.storyModeFl = false; // Not in story mode
_status.gameOverFl = false; // Hero not knobbled yet _status.gameOverFl = false; // Hero not knobbled yet
// Strangerke - Suppress as related to playback
// _status.recordFl = false; // Not record mode
// _status.playbackFl = false; // Not playback mode
_status.demoFl = false; // Not demo mode _status.demoFl = false; // Not demo mode
_status.textBoxFl = false; // Not processing a text box _status.textBoxFl = false; // Not processing a text box
// Strangerke - Not used ?
// _status.mmtime = false; // Multimedia timer support
_status.lookFl = false; // Toolbar "look" button _status.lookFl = false; // Toolbar "look" button
_status.recallFl = false; // Toolbar "recall" button _status.recallFl = false; // Toolbar "recall" button
_status.leftButtonFl = false; // Left mouse button pressed _status.leftButtonFl = false; // Left mouse button pressed
@ -924,11 +916,9 @@ void HugoEngine::initStatus() {
_status.doQuitFl = false; _status.doQuitFl = false;
_status.path[0] = 0; // Path to write files _status.path[0] = 0; // Path to write files
_status.saveSlot = 0; // Slot to save/restore game _status.saveSlot = 0; // Slot to save/restore game
_status.screenWidth = 0; // Desktop screen width
// Initialize every start of new game // Initialize every start of new game
_status.tick = 0; // Tick count _status.tick = 0; // Tick count
// _status.saveTick = 0; // Time of last save
_status.viewState = V_IDLE; // View state _status.viewState = V_IDLE; // View state
_status.inventoryState = I_OFF; // Inventory icon bar state _status.inventoryState = I_OFF; // Inventory icon bar state
_status.inventoryHeight = 0; // Inventory icon bar pos _status.inventoryHeight = 0; // Inventory icon bar pos
@ -936,6 +926,14 @@ void HugoEngine::initStatus() {
_status.routeIndex = -1; // Hero not following a route _status.routeIndex = -1; // Hero not following a route
_status.go_for = GO_SPACE; // Hero walking to space _status.go_for = GO_SPACE; // Hero walking to space
_status.go_id = -1; // Hero not walking to anything _status.go_id = -1; // Hero not walking to anything
// Strangerke - Suppress as related to playback
// _status.recordFl = false; // Not record mode
// _status.playbackFl = false; // Not playback mode
// Strangerke - Not used ?
// _status.mmtime = false; // Multimedia timer support
// _status.screenWidth = 0; // Desktop screen width
// _status.saveTick = 0; // Time of last save
} }
/** /**
@ -965,8 +963,6 @@ void HugoEngine::initConfig(inst_t action) {
break; break;
} }
} }
_file->initSavedGame(); // Initialize saved game
break; break;
case RESTORE: case RESTORE:
warning("Unhandled action RESTORE"); warning("Unhandled action RESTORE");

View File

@ -165,7 +165,7 @@ public:
const char *_episode; const char *_episode;
const char *_picDir; const char *_picDir;
Common::String _initFilename, _saveFilename; Common::String _saveFilename;
command_t _statusLine; command_t _statusLine;
command_t _scoreLine; command_t _scoreLine;

View File

@ -49,7 +49,6 @@ intro_v1w::~intro_v1w() {
* Auto-start a new game * Auto-start a new game
*/ */
void intro_v1w::preNewGame() { void intro_v1w::preNewGame() {
_vm->_file->restoreGame(-1);
_vm->getGameStatus().viewState = V_INTROINIT; _vm->getGameStatus().viewState = V_INTROINIT;
} }