renamed _saveLoadCompatible to _saveTemporaryState; make use of requestLoad/requestSave
svn-id: r12691
This commit is contained in:
parent
a67aca5b19
commit
9fe1aaa921
8 changed files with 29 additions and 37 deletions
1
TODO
1
TODO
|
@ -174,7 +174,6 @@ SCUMM
|
||||||
Or constantly (well, at least whenever the camera moves) redraw the text.
|
Or constantly (well, at least whenever the camera moves) redraw the text.
|
||||||
That would require buffering the text; maybe the blast text code could be
|
That would require buffering the text; maybe the blast text code could be
|
||||||
reused for this...
|
reused for this...
|
||||||
* Rename _saveLoadCompatible variable to something sensible, like _saveTemporaryState
|
|
||||||
|
|
||||||
Broken Sword 2
|
Broken Sword 2
|
||||||
==============
|
==============
|
||||||
|
|
|
@ -214,9 +214,7 @@ bool ScummDebugger::Cmd_LoadGame(int argc, const char **argv) {
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
int slot = atoi(argv[1]);
|
int slot = atoi(argv[1]);
|
||||||
|
|
||||||
_vm->_saveLoadSlot = slot;
|
_vm->requestLoad(slot);
|
||||||
_vm->_saveLoadFlag = 2;
|
|
||||||
_vm->_saveLoadCompatible = false;
|
|
||||||
|
|
||||||
_detach_now = true;
|
_detach_now = true;
|
||||||
return false;
|
return false;
|
||||||
|
@ -230,10 +228,7 @@ bool ScummDebugger::Cmd_SaveGame(int argc, const char **argv) {
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
int slot = atoi(argv[1]);
|
int slot = atoi(argv[1]);
|
||||||
|
|
||||||
strcpy(_vm->_saveLoadName, argv[2]);
|
_vm->requestSave(slot, argv[2]);
|
||||||
_vm->_saveLoadSlot = slot;
|
|
||||||
_vm->_saveLoadFlag = 1;
|
|
||||||
_vm->_saveLoadCompatible = false;
|
|
||||||
} else
|
} else
|
||||||
DebugPrintf("Syntax: savegame <slotnum> <name>\n");
|
DebugPrintf("Syntax: savegame <slotnum> <name>\n");
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,9 @@ struct SaveGameHeader {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void ScummEngine::requestSave(int slot, const char *name) {
|
void ScummEngine::requestSave(int slot, const char *name, bool compatible) {
|
||||||
_saveLoadSlot = slot;
|
_saveLoadSlot = slot;
|
||||||
_saveLoadCompatible = false;
|
_saveTemporaryState = compatible;
|
||||||
_saveLoadFlag = 1; // 1 for save
|
_saveLoadFlag = 1; // 1 for save
|
||||||
assert(name);
|
assert(name);
|
||||||
strcpy(_saveLoadName, name);
|
strcpy(_saveLoadName, name);
|
||||||
|
@ -59,7 +59,7 @@ void ScummEngine::requestSave(int slot, const char *name) {
|
||||||
|
|
||||||
void ScummEngine::requestLoad(int slot) {
|
void ScummEngine::requestLoad(int slot) {
|
||||||
_saveLoadSlot = slot;
|
_saveLoadSlot = slot;
|
||||||
_saveLoadCompatible = false;
|
_saveTemporaryState = false;
|
||||||
_saveLoadFlag = 2; // 2 for load
|
_saveLoadFlag = 2; // 2 for load
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ bool ScummEngine::loadState(int slot, bool compat, SaveFileManager *mgr) {
|
||||||
// If we don't have iMUSE at all we may as well stop the sounds. The previous
|
// If we don't have iMUSE at all we may as well stop the sounds. The previous
|
||||||
// default behavior here was to stopAllSounds on all state restores.
|
// default behavior here was to stopAllSounds on all state restores.
|
||||||
|
|
||||||
if (!_imuse || _saveSound || !_saveLoadCompatible)
|
if (!_imuse || _saveSound || !_saveTemporaryState)
|
||||||
_sound->stopAllSounds();
|
_sound->stopAllSounds();
|
||||||
|
|
||||||
_sound->stopCD();
|
_sound->stopCD();
|
||||||
|
@ -767,7 +767,7 @@ void ScummEngine::saveOrLoad(Serializer *s, uint32 savegameVersion) {
|
||||||
AudioCD.play(info.track, info.numLoops, info.start, info.duration);
|
AudioCD.play(info.track, info.numLoops, info.start, info.duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_imuse && (_saveSound || !_saveLoadCompatible)) {
|
if (_imuse && (_saveSound || !_saveTemporaryState)) {
|
||||||
_imuse->save_or_load(s, this);
|
_imuse->save_or_load(s, this);
|
||||||
_imuse->setMasterVolume(ConfMan.getInt("master_volume"));
|
_imuse->setMasterVolume(ConfMan.getInt("master_volume"));
|
||||||
_imuse->set_music_volume(ConfMan.getInt("music_volume"));
|
_imuse->set_music_volume(ConfMan.getInt("music_volume"));
|
||||||
|
|
|
@ -1158,13 +1158,13 @@ void ScummEngine_v5::o5_saveLoadGame() {
|
||||||
result = 0;
|
result = 0;
|
||||||
break;
|
break;
|
||||||
case 0x40: // load
|
case 0x40: // load
|
||||||
if (loadState(slot, _saveLoadCompatible))
|
if (loadState(slot, _saveTemporaryState))
|
||||||
result = 3; // sucess
|
result = 3; // sucess
|
||||||
else
|
else
|
||||||
result = 5; // failed to load
|
result = 5; // failed to load
|
||||||
break;
|
break;
|
||||||
case 0x80: // save
|
case 0x80: // save
|
||||||
if (saveState(slot, _saveLoadCompatible))
|
if (saveState(slot, _saveTemporaryState))
|
||||||
result = 0;
|
result = 0;
|
||||||
else
|
else
|
||||||
result = 2;
|
result = 2;
|
||||||
|
@ -1899,7 +1899,7 @@ void ScummEngine_v5::o5_roomOps() {
|
||||||
_saveLoadFlag = getVarOrDirectByte(PARAM_1);
|
_saveLoadFlag = getVarOrDirectByte(PARAM_1);
|
||||||
_saveLoadSlot = getVarOrDirectByte(PARAM_2);
|
_saveLoadSlot = getVarOrDirectByte(PARAM_2);
|
||||||
_saveLoadSlot = 99; /* use this slot */
|
_saveLoadSlot = 99; /* use this slot */
|
||||||
_saveLoadCompatible = true;
|
_saveTemporaryState = true;
|
||||||
break;
|
break;
|
||||||
case 10: // SO_ROOM_FADE
|
case 10: // SO_ROOM_FADE
|
||||||
a = getVarOrDirectWord(PARAM_1);
|
a = getVarOrDirectWord(PARAM_1);
|
||||||
|
|
|
@ -1685,7 +1685,7 @@ void ScummEngine_v6::o6_roomOps() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 180: // SO_ROOM_SAVEGAME
|
case 180: // SO_ROOM_SAVEGAME
|
||||||
_saveLoadCompatible = true;
|
_saveTemporaryState = true;
|
||||||
_saveLoadSlot = pop();
|
_saveLoadSlot = pop();
|
||||||
_saveLoadFlag = pop();
|
_saveLoadFlag = pop();
|
||||||
if (_gameId == GID_TENTACLE)
|
if (_gameId == GID_TENTACLE)
|
||||||
|
@ -1768,7 +1768,7 @@ void ScummEngine_v6::o6_roomOps() {
|
||||||
_scriptPointer += len + 1;
|
_scriptPointer += len + 1;
|
||||||
_saveLoadFlag = pop();
|
_saveLoadFlag = pop();
|
||||||
_saveLoadSlot = 99;
|
_saveLoadSlot = 99;
|
||||||
_saveLoadCompatible = true;
|
_saveTemporaryState = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error("o6_roomOps: default case %d", op);
|
error("o6_roomOps: default case %d", op);
|
||||||
|
|
|
@ -914,12 +914,12 @@ void ScummEngine_v8::o8_roomOps() {
|
||||||
setPalette(a);
|
setPalette(a);
|
||||||
break;
|
break;
|
||||||
case 0x5D: // SO_ROOM_SAVE_GAME Save game
|
case 0x5D: // SO_ROOM_SAVE_GAME Save game
|
||||||
_saveLoadCompatible = true;
|
_saveTemporaryState = true;
|
||||||
_saveLoadSlot = 1;
|
_saveLoadSlot = 1;
|
||||||
_saveLoadFlag = 1;
|
_saveLoadFlag = 1;
|
||||||
break;
|
break;
|
||||||
case 0x5E: // SO_ROOM_LOAD_GAME Load game
|
case 0x5E: // SO_ROOM_LOAD_GAME Load game
|
||||||
_saveLoadCompatible = true;
|
_saveTemporaryState = true;
|
||||||
_saveLoadSlot = 1;
|
_saveLoadSlot = 1;
|
||||||
_saveLoadFlag = 2;
|
_saveLoadFlag = 2;
|
||||||
break;
|
break;
|
||||||
|
@ -1361,7 +1361,7 @@ void ScummEngine_v8::o8_kernelSetFunctions() {
|
||||||
// saveGameRead
|
// saveGameRead
|
||||||
_saveLoadSlot = args[1];
|
_saveLoadSlot = args[1];
|
||||||
_saveLoadFlag = 2;
|
_saveLoadFlag = 2;
|
||||||
_saveLoadCompatible = false;
|
_saveTemporaryState = false;
|
||||||
warning("Sgl: %d", args[1]);
|
warning("Sgl: %d", args[1]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -468,7 +468,7 @@ protected:
|
||||||
// Save/Load class - some of this may be GUI
|
// Save/Load class - some of this may be GUI
|
||||||
byte _saveLoadFlag, _saveLoadSlot;
|
byte _saveLoadFlag, _saveLoadSlot;
|
||||||
uint32 _lastSaveTime;
|
uint32 _lastSaveTime;
|
||||||
bool _saveLoadCompatible;
|
bool _saveTemporaryState;
|
||||||
char _saveLoadName[32];
|
char _saveLoadName[32];
|
||||||
|
|
||||||
bool saveState(int slot, bool compat, SaveFileManager *mgr);
|
bool saveState(int slot, bool compat, SaveFileManager *mgr);
|
||||||
|
@ -497,7 +497,7 @@ public:
|
||||||
bool getSavegameName(int slot, char *desc, SaveFileManager *mgr);
|
bool getSavegameName(int slot, char *desc, SaveFileManager *mgr);
|
||||||
void listSavegames(bool *marks, int num, SaveFileManager *mgr);
|
void listSavegames(bool *marks, int num, SaveFileManager *mgr);
|
||||||
|
|
||||||
void requestSave(int slot, const char *name);
|
void requestSave(int slot, const char *name, bool compatible = false);
|
||||||
void requestLoad(int slot);
|
void requestLoad(int slot);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -374,7 +374,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
|
||||||
_saveLoadFlag = 0;
|
_saveLoadFlag = 0;
|
||||||
_saveLoadSlot = 0;
|
_saveLoadSlot = 0;
|
||||||
_lastSaveTime = 0;
|
_lastSaveTime = 0;
|
||||||
_saveLoadCompatible = false;
|
_saveTemporaryState = false;
|
||||||
memset(_saveLoadName, 0, sizeof(_saveLoadName));
|
memset(_saveLoadName, 0, sizeof(_saveLoadName));
|
||||||
_maxHeapThreshold = 0;
|
_maxHeapThreshold = 0;
|
||||||
_minHeapThreshold = 0;
|
_minHeapThreshold = 0;
|
||||||
|
@ -771,9 +771,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
|
||||||
|
|
||||||
// Load game from specified slot, if any
|
// Load game from specified slot, if any
|
||||||
if (ConfMan.hasKey("save_slot")) {
|
if (ConfMan.hasKey("save_slot")) {
|
||||||
_saveLoadSlot = ConfMan.getInt("save_slot");
|
requestLoad(ConfMan.getInt("save_slot"));
|
||||||
_saveLoadFlag = 2;
|
|
||||||
_saveLoadCompatible = false;
|
|
||||||
}
|
}
|
||||||
loadLanguageBundle();
|
loadLanguageBundle();
|
||||||
|
|
||||||
|
@ -996,7 +994,7 @@ void ScummEngine::launch() {
|
||||||
|
|
||||||
|
|
||||||
// If requested, load a save game instead of running the boot script
|
// If requested, load a save game instead of running the boot script
|
||||||
if (_saveLoadFlag != 2 || !loadState(_saveLoadSlot, _saveLoadCompatible)) {
|
if (_saveLoadFlag != 2 || !loadState(_saveLoadSlot, _saveTemporaryState)) {
|
||||||
int args[16];
|
int args[16];
|
||||||
memset(args, 0, sizeof(args));
|
memset(args, 0, sizeof(args));
|
||||||
args[0] = _bootParam;
|
args[0] = _bootParam;
|
||||||
|
@ -1390,7 +1388,7 @@ int ScummEngine::scummLoop(int delta) {
|
||||||
_saveLoadSlot = 0;
|
_saveLoadSlot = 0;
|
||||||
sprintf(_saveLoadName, "Autosave %d", _saveLoadSlot);
|
sprintf(_saveLoadName, "Autosave %d", _saveLoadSlot);
|
||||||
_saveLoadFlag = 1;
|
_saveLoadFlag = 1;
|
||||||
_saveLoadCompatible = false;
|
_saveTemporaryState = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VAR_GAME_LOADED != 0xFF)
|
if (VAR_GAME_LOADED != 0xFF)
|
||||||
|
@ -1402,30 +1400,30 @@ load_game:
|
||||||
char filename[256];
|
char filename[256];
|
||||||
|
|
||||||
if (_saveLoadFlag == 1) {
|
if (_saveLoadFlag == 1) {
|
||||||
success = saveState(_saveLoadSlot, _saveLoadCompatible);
|
success = saveState(_saveLoadSlot, _saveTemporaryState);
|
||||||
if (!success)
|
if (!success)
|
||||||
errMsg = "Failed to save game state to file:\n\n%s";
|
errMsg = "Failed to save game state to file:\n\n%s";
|
||||||
|
|
||||||
// Ender: Disabled for small_header games, as can overwrite game
|
// Ender: Disabled for small_header games, as can overwrite game
|
||||||
// variables (eg, Zak256 cashcard values). Temp disabled for V8
|
// variables (eg, Zak256 cashcard values). Temp disabled for V8
|
||||||
// because of odd timing issue with scripts and the variable reset
|
// because of odd timing issue with scripts and the variable reset
|
||||||
if (success && _saveLoadCompatible && !(_features & GF_SMALL_HEADER) && _version < 8)
|
if (success && _saveTemporaryState && !(_features & GF_SMALL_HEADER) && _version < 8)
|
||||||
VAR(VAR_GAME_LOADED) = 201;
|
VAR(VAR_GAME_LOADED) = 201;
|
||||||
} else {
|
} else {
|
||||||
success = loadState(_saveLoadSlot, _saveLoadCompatible);
|
success = loadState(_saveLoadSlot, _saveTemporaryState);
|
||||||
if (!success)
|
if (!success)
|
||||||
errMsg = "Failed to load game state from file:\n\n%s";
|
errMsg = "Failed to load game state from file:\n\n%s";
|
||||||
|
|
||||||
// Ender: Disabled for small_header games, as can overwrite game
|
// Ender: Disabled for small_header games, as can overwrite game
|
||||||
// variables (eg, Zak256 cashcard values).
|
// variables (eg, Zak256 cashcard values).
|
||||||
if (success && _saveLoadCompatible && !(_features & GF_SMALL_HEADER))
|
if (success && _saveTemporaryState && !(_features & GF_SMALL_HEADER))
|
||||||
VAR(VAR_GAME_LOADED) = 203;
|
VAR(VAR_GAME_LOADED) = 203;
|
||||||
}
|
}
|
||||||
|
|
||||||
makeSavegameName(filename, _saveLoadSlot, _saveLoadCompatible);
|
makeSavegameName(filename, _saveLoadSlot, _saveTemporaryState);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
displayError(false, errMsg, filename);
|
displayError(false, errMsg, filename);
|
||||||
} else if (_saveLoadFlag == 1 && _saveLoadSlot != 0 && !_saveLoadCompatible) {
|
} else if (_saveLoadFlag == 1 && _saveLoadSlot != 0 && !_saveTemporaryState) {
|
||||||
// Display "Save successful" message, except for auto saves
|
// Display "Save successful" message, except for auto saves
|
||||||
#ifdef __PALM_OS__
|
#ifdef __PALM_OS__
|
||||||
char buf[256]; // 1024 is too big overflow the stack
|
char buf[256]; // 1024 is too big overflow the stack
|
||||||
|
@ -1607,7 +1605,7 @@ void ScummEngine::parseEvents() {
|
||||||
|
|
||||||
switch(event.event_code) {
|
switch(event.event_code) {
|
||||||
case OSystem::EVENT_KEYDOWN:
|
case OSystem::EVENT_KEYDOWN:
|
||||||
if (event.kbd.keycode >= '0' && event.kbd.keycode<='9'
|
if (event.kbd.keycode >= '0' && event.kbd.keycode <= '9'
|
||||||
&& (event.kbd.flags == OSystem::KBD_ALT ||
|
&& (event.kbd.flags == OSystem::KBD_ALT ||
|
||||||
event.kbd.flags == OSystem::KBD_CTRL)) {
|
event.kbd.flags == OSystem::KBD_CTRL)) {
|
||||||
_saveLoadSlot = event.kbd.keycode - '0';
|
_saveLoadSlot = event.kbd.keycode - '0';
|
||||||
|
@ -1618,7 +1616,7 @@ void ScummEngine::parseEvents() {
|
||||||
|
|
||||||
sprintf(_saveLoadName, "Quicksave %d", _saveLoadSlot);
|
sprintf(_saveLoadName, "Quicksave %d", _saveLoadSlot);
|
||||||
_saveLoadFlag = (event.kbd.flags == OSystem::KBD_ALT) ? 1 : 2;
|
_saveLoadFlag = (event.kbd.flags == OSystem::KBD_ALT) ? 1 : 2;
|
||||||
_saveLoadCompatible = false;
|
_saveTemporaryState = false;
|
||||||
} else if (event.kbd.flags == OSystem::KBD_CTRL) {
|
} else if (event.kbd.flags == OSystem::KBD_CTRL) {
|
||||||
if (event.kbd.keycode == 'f')
|
if (event.kbd.keycode == 'f')
|
||||||
_fastMode ^= 1;
|
_fastMode ^= 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue