aboutsummaryrefslogtreecommitdiff
path: root/scumm/script.cpp
diff options
context:
space:
mode:
authorTravis Howell2003-12-11 06:08:43 +0000
committerTravis Howell2003-12-11 06:08:43 +0000
commit3d6461d30f9ec9a1be822a426304360b372f650a (patch)
treeb5aeb0f17a3d3be9b8150438d0ae458a7c3306c5 /scumm/script.cpp
parent2ef887fd445b5226da99bf2a0e1917d02806325c (diff)
downloadscummvm-rg350-3d6461d30f9ec9a1be822a426304360b372f650a.tar.gz
scummvm-rg350-3d6461d30f9ec9a1be822a426304360b372f650a.tar.bz2
scummvm-rg350-3d6461d30f9ec9a1be822a426304360b372f650a.zip
Add option to enable copy protection in SCUMM games, which ScummVM disable it by default.
svn-id: r11571
Diffstat (limited to 'scumm/script.cpp')
-rw-r--r--scumm/script.cpp60
1 files changed, 30 insertions, 30 deletions
diff --git a/scumm/script.cpp b/scumm/script.cpp
index 7293899ced..6cf7673d3e 100644
--- a/scumm/script.cpp
+++ b/scumm/script.cpp
@@ -116,10 +116,6 @@ void ScummEngine::runObjectScript(int object, int entry, bool freezeResistant, b
runScriptNested(slot);
}
-#ifndef BYPASS_COPY_PROT
-#define BYPASS_COPY_PROT
-#endif
-
void ScummEngine::initializeLocals(int slot, int *vars) {
int i;
if (!vars) {
@@ -451,9 +447,11 @@ int ScummEngine::fetchScriptWordSigned() {
int ScummEngine::readVar(uint var) {
int a;
-#if defined(BYPASS_COPY_PROT)
- static byte copyprotbypassed = false;
-#endif
+ static byte copyprotbypassed;
+ if (!_copyProtection)
+ copyprotbypassed = false;
+ else
+ copyprotbypassed = true;
debug(9, "readvar(%d)", var);
@@ -467,15 +465,16 @@ int ScummEngine::readVar(uint var) {
}
if (!(var & 0xF000)) {
-#if defined(BYPASS_COPY_PROT)
- if (var == 490 && _gameId == GID_MONKEY2 && !copyprotbypassed) {
- copyprotbypassed = true;
- var = 518;
- } else if (var == 179 && (_gameId == GID_MONKEY_VGA || _gameId == GID_MONKEY_EGA) && !copyprotbypassed) {
- copyprotbypassed = true;
- var = 266;
+ if (!_copyProtection) {
+ if (var == 490 && _gameId == GID_MONKEY2 && !copyprotbypassed) {
+ copyprotbypassed = true;
+ var = 518;
+ } else if (var == 179 && (_gameId == GID_MONKEY_VGA || _gameId == GID_MONKEY_EGA) && !copyprotbypassed) {
+ copyprotbypassed = true;
+ var = 266;
+ }
}
-#endif
+
if (_gameId == GID_LOOM256 && var == VAR_NOSUBTITLES) {
return _noSubtitles;
}
@@ -490,27 +489,28 @@ int ScummEngine::readVar(uint var) {
int bit = var & 0xF;
var = (var >> 4) & 0xFF;
-#if defined(BYPASS_COPY_PROT)
- // INDY3, EGA Loom and, apparently, Zak256 check this
- // during the game...
- if (_gameId == GID_INDY3 && (_features & GF_OLD_BUNDLE) && var == 94 && bit == 4) {
- return 0;
-// } else if (_gameId == GID_LOOM && var == 221 && bit == 14) { // For Mac Loom
- } else if (_gameId == GID_LOOM && var == 214 && bit == 15) { // For PC Loom
- return 0;
- } else if (_gameId == GID_ZAK256 && var == 151 && bit == 8) {
- return 0;
+ if (!_copyProtection) {
+ // INDY3, EGA Loom and, apparently, Zak256 check this
+ // during the game...
+ if (_gameId == GID_INDY3 && (_features & GF_OLD_BUNDLE) && var == 94 && bit == 4) {
+ return 0;
+// } else if (_gameId == GID_LOOM && var == 221 && bit == 14) { // For Mac Loom
+ } else if (_gameId == GID_LOOM && var == 214 && bit == 15) { // For PC Loom
+ return 0;
+ } else if (_gameId == GID_ZAK256 && var == 151 && bit == 8) {
+ return 0;
+ }
}
-#endif
+
checkRange(_numVariables - 1, 0, var, "Variable %d out of range(rzb)");
return (_scummVars[ var ] & ( 1 << bit ) ) ? 1 : 0;
} else {
var &= 0x7FFF;
-#if defined(BYPASS_COPY_PROT)
- if (_gameId == GID_INDY3 && (_features & GF_FMTOWNS) && var == 1508) {
- return 0;
+ if (!_copyProtection) {
+ if (_gameId == GID_INDY3 && (_features & GF_FMTOWNS) && var == 1508)
+ return 0;
}
-#endif
+
checkRange(_numBitVariables - 1, 0, var, "Bit variable %d out of range(r)");
return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;
}