aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2017-02-21 23:32:10 +0100
committerGitHub2017-02-21 23:32:10 +0100
commitb44b297a8466a1e518502072dc60ede27da459e3 (patch)
treee3f22ab92b18547e9fdaf29ba74ad05dabb0bd1b /engines
parent8216fd8ea6edaeb46983f04d00979d82de403dc1 (diff)
parent56caa6f0a7669cf14798148b995031e3f681a4bf (diff)
downloadscummvm-rg350-b44b297a8466a1e518502072dc60ede27da459e3.tar.gz
scummvm-rg350-b44b297a8466a1e518502072dc60ede27da459e3.tar.bz2
scummvm-rg350-b44b297a8466a1e518502072dc60ede27da459e3.zip
Merge pull request #903 from segrax/Fix_4112
SCUMM: Fix bug #4112 (MANIAC: Power never returns)
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/script_v2.cpp35
1 files changed, 24 insertions, 11 deletions
diff --git a/engines/scumm/script_v2.cpp b/engines/scumm/script_v2.cpp
index 756e0b44de..8160c5e30a 100644
--- a/engines/scumm/script_v2.cpp
+++ b/engines/scumm/script_v2.cpp
@@ -31,6 +31,10 @@
namespace Scumm {
+ // Helper functions for ManiacMansion workarounds
+#define MM_SCRIPT(script) (script + (_game.version == 0 ? 0 : 5))
+#define MM_VALUE(v0,v1) (_game.version == 0 ? v0 : v1)
+
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v2, x)
void ScummEngine_v2::setupOpcodes() {
@@ -1178,13 +1182,8 @@ void ScummEngine_v2::o2_startScript() {
// (which makes Ted go answer the door bell) is simply ignored. This
// way, the door bell still chimes, but Ted ignores it.
if (_game.id == GID_MANIAC) {
- if (_game.version >= 1 && script == 87) {
- if (isScriptRunning(88) || isScriptRunning(89))
- return;
- }
- // Script numbers are different in V0
- if (_game.version == 0 && script == 82) {
- if (isScriptRunning(83) || isScriptRunning(84))
+ if (script == MM_SCRIPT(82)) {
+ if (isScriptRunning(MM_SCRIPT(83)) || isScriptRunning(MM_SCRIPT(84)))
return;
}
}
@@ -1193,14 +1192,28 @@ void ScummEngine_v2::o2_startScript() {
}
void ScummEngine_v2::stopScriptCommon(int script) {
+
+ // WORKAROUND bug #4112: If you enter the lab while Dr. Fred has the powered turned off
+ // to repair the Zom-B-Matic, the script will be stopped and the power will never turn
+ // back on. This fix forces the power on, when the player enters the lab,
+ // if the script which turned it off is running
+ if (_game.id == GID_MANIAC && _roomResource == 4 && isScriptRunning(MM_SCRIPT(138))) {
+
+ if (vm.slot[_currentScript].number == MM_VALUE(130, 163)) {
+
+ if (script == MM_SCRIPT(138)) {
+
+ int obj = MM_VALUE(124, 157);
+ putState(obj, getState(obj) & ~kObjectState_08);
+ }
+ }
+ }
+
if (_game.id == GID_MANIAC && _roomResource == 26 && vm.slot[_currentScript].number == 10001) {
// FIXME: Nasty hack for bug #915575
// Don't let the exit script for room 26 stop the script (116), when
// switching to the dungeon (script 89)
- if (_game.version >= 1 && script == 116 && isScriptRunning(89))
- return;
- // Script numbers are different in V0
- if (_game.version == 0 && script == 111 && isScriptRunning(84))
+ if (script == MM_SCRIPT(111) && isScriptRunning(MM_SCRIPT(84)))
return;
}