aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2009-09-28 20:21:09 +0000
committerWillem Jan Palenstijn2009-09-28 20:21:09 +0000
commit88a9099949ebd2409878cdb9ee7d3d329ead1ad8 (patch)
tree9ab29e12b8cc3d15ded5bd9ef65d319b032025d2 /engines/sci
parentf413356bed8399e93aa9cdfc48f574e157d9fcb1 (diff)
downloadscummvm-rg350-88a9099949ebd2409878cdb9ee7d3d329ead1ad8.tar.gz
scummvm-rg350-88a9099949ebd2409878cdb9ee7d3d329ead1ad8.tar.bz2
scummvm-rg350-88a9099949ebd2409878cdb9ee7d3d329ead1ad8.zip
SCI: Remove unsafe unmarkDeleted function.
It did not undo all effects of a script being deleted (specifically its superclasses remain unlocked), causing an inconsistent state. Also removed EcoQuest CD hack that worked around a specific instance of this problem. svn-id: r44449
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/engine/kscripts.cpp6
-rw-r--r--engines/sci/engine/segment.h7
-rw-r--r--engines/sci/engine/vm.cpp4
3 files changed, 1 insertions, 16 deletions
diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp
index f9ec052d0f..e868a58836 100644
--- a/engines/sci/engine/kscripts.cpp
+++ b/engines/sci/engine/kscripts.cpp
@@ -218,12 +218,6 @@ reg_t kDisposeScript(EngineState *s, int, int argc, reg_t *argv) {
if (scr) {
if (s->_executionStack.back().addr.pc.segment != id)
scr->setLockers(1);
-
- // HACK for EcoQuest CD
- if (s->_gameName == "ecoquest" && script == 821) {
- warning("kDisposeScript hack for EcoQuest 1 CD: not disposing script 821");
- scr->setLockers(2);
- }
}
script_uninstantiate(s->segMan, script);
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index a93aaa1f69..d88c0dac17 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -433,13 +433,6 @@ public:
}
/**
- * Marks the script as not deleted.
- */
- void unmarkDeleted() {
- _markedAsDeleted = false;
- }
-
- /**
* Determines whether the script is marked as being deleted.
*/
bool isMarkedAsDeleted() const {
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 78f2d24a1c..d5188665f6 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -208,10 +208,8 @@ ExecStack *execute_method(EngineState *s, uint16 script, uint16 pubfunct, StackP
int seg = s->segMan->getScriptSegment(script);
Script *scr = s->segMan->getScriptIfLoaded(seg);
- if (!scr) // Script not present yet?
+ if (!scr || scr->isMarkedAsDeleted()) // Script not present yet?
seg = script_instantiate(s->resMan, s->segMan, script);
- else
- scr->unmarkDeleted();
const int temp = s->segMan->validateExportFunc(pubfunct, seg);
if (!temp) {