aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/sci.cpp102
1 files changed, 42 insertions, 60 deletions
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index a073e0626a..3ffb33f934 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -226,28 +226,22 @@ Common::Error SciEngine::run() {
_gamestate = new EngineState(segMan);
_eventMan = new EventManager(_resMan->detectFontExtended());
- if (getSciVersion() == SCI_VERSION_3) {
- // TODO: SCI3 equivalent
- warning("SCI3 game - skipping VM initialization");
- _gamestate->_msgState = NULL; // for proper engine destruction
- } else {
- // The game needs to be initialized before the graphics system is initialized, as
- // the graphics code checks parts of the seg manager upon initialization (e.g. for
- // the presence of the fastCast object)
- if (!initGame()) { /* Initialize */
- warning("Game initialization failed: Aborting...");
- // TODO: Add an "init failed" error?
- return Common::kUnknownError;
- }
+ // The game needs to be initialized before the graphics system is initialized, as
+ // the graphics code checks parts of the seg manager upon initialization (e.g. for
+ // the presence of the fastCast object)
+ if (!initGame()) { /* Initialize */
+ warning("Game initialization failed: Aborting...");
+ // TODO: Add an "init failed" error?
+ return Common::kUnknownError;
+ }
- // we try to find the super class address of the game object, we can't do that earlier
- const Object *gameObject = segMan->getObject(_gameObjectAddress);
- if (!gameObject) {
- warning("Could not get game object, aborting...");
- return Common::kUnknownError;
- }
- _gameSuperClassAddress = gameObject->getSuperClassSelector();
+ // we try to find the super class address of the game object, we can't do that earlier
+ const Object *gameObject = segMan->getObject(_gameObjectAddress);
+ if (!gameObject) {
+ warning("Could not get game object, aborting...");
+ return Common::kUnknownError;
}
+ _gameSuperClassAddress = gameObject->getSuperClassSelector();
script_adjust_opcode_formats();
@@ -262,40 +256,38 @@ Common::Error SciEngine::run() {
debug("Emulating SCI version %s\n", getSciVersionDesc(getSciVersion()));
- if (getSciVersion() <= SCI_VERSION_2_1) { // TODO/FIXME: Enable for SCI3 once the VM is done
- // Patch in our save/restore code, so that dialogs are replaced
- patchGameSaveRestore(segMan);
-
- if (_gameDescription->flags & ADGF_ADDENGLISH) {
- // if game is multilingual
- Common::Language selectedLanguage = Common::parseLanguage(ConfMan.get("language"));
- if (selectedLanguage == Common::EN_ANY) {
- // and english was selected as language
- if (SELECTOR(printLang) != -1) // set text language to english
- writeSelectorValue(segMan, _gameObjectAddress, SELECTOR(printLang), 1);
- if (SELECTOR(parseLang) != -1) // and set parser language to english as well
- writeSelectorValue(segMan, _gameObjectAddress, SELECTOR(parseLang), 1);
- }
+ // Patch in our save/restore code, so that dialogs are replaced
+ patchGameSaveRestore(segMan);
+
+ if (_gameDescription->flags & ADGF_ADDENGLISH) {
+ // if game is multilingual
+ Common::Language selectedLanguage = Common::parseLanguage(ConfMan.get("language"));
+ if (selectedLanguage == Common::EN_ANY) {
+ // and english was selected as language
+ if (SELECTOR(printLang) != -1) // set text language to english
+ writeSelectorValue(segMan, _gameObjectAddress, SELECTOR(printLang), 1);
+ if (SELECTOR(parseLang) != -1) // and set parser language to english as well
+ writeSelectorValue(segMan, _gameObjectAddress, SELECTOR(parseLang), 1);
}
+ }
- // Check whether loading a savestate was requested
- int directSaveSlotLoading = ConfMan.getInt("save_slot");
- if (directSaveSlotLoading >= 0) {
- // call GameObject::play (like normally)
- initStackBaseWithSelector(SELECTOR(play));
- // We set this, so that the game automatically quit right after init
- _gamestate->variables[VAR_GLOBAL][4] = TRUE_REG;
+ // Check whether loading a savestate was requested
+ int directSaveSlotLoading = ConfMan.getInt("save_slot");
+ if (directSaveSlotLoading >= 0) {
+ // call GameObject::play (like normally)
+ initStackBaseWithSelector(SELECTOR(play));
+ // We set this, so that the game automatically quit right after init
+ _gamestate->variables[VAR_GLOBAL][4] = TRUE_REG;
- _gamestate->_executionStackPosChanged = false;
- run_vm(_gamestate);
+ _gamestate->_executionStackPosChanged = false;
+ run_vm(_gamestate);
- // As soon as we get control again, actually restore the game
- reg_t restoreArgv[2] = { NULL_REG, make_reg(0, directSaveSlotLoading) }; // special call (argv[0] is NULL)
- kRestoreGame(_gamestate, 2, restoreArgv);
+ // As soon as we get control again, actually restore the game
+ reg_t restoreArgv[2] = { NULL_REG, make_reg(0, directSaveSlotLoading) }; // special call (argv[0] is NULL)
+ kRestoreGame(_gamestate, 2, restoreArgv);
- // this indirectly calls GameObject::init, which will setup menu, text font/color codes etc.
- // without this games would be pretty badly broken
- }
+ // this indirectly calls GameObject::init, which will setup menu, text font/color codes etc.
+ // without this games would be pretty badly broken
}
// Show any special warnings for buggy scripts with severe game bugs,
@@ -358,17 +350,7 @@ Common::Error SciEngine::run() {
"having unexpected errors and/or issues later on.");
}
-
- // TODO/FIXME: Remove once SCI3 support is improved
- if (getSciVersion() == SCI_VERSION_3) {
- // Attach the console to use resource manager functionality
- _console->attach();
- _console->DebugPrintf("\nSCI3 game, stopping before actual game entry point.\n"
- "Resource-related functionality should be usable at this point\n\n");
- _console->onFrame();
- } else {
- runGame();
- }
+ runGame();
ConfMan.flushToDisk();