aboutsummaryrefslogtreecommitdiff
path: root/scumm/script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scumm/script.cpp')
-rw-r--r--scumm/script.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/scumm/script.cpp b/scumm/script.cpp
index 8282074d88..759e248784 100644
--- a/scumm/script.cpp
+++ b/scumm/script.cpp
@@ -477,13 +477,6 @@ int ScummEngine::fetchScriptWordSigned() {
}
int ScummEngine::readVar(uint var) {
- // HACK Seems to variable difference
- // Correct values for now
- if (_gameId == GID_PAJAMA && var == 32770)
- return 5;
- else if (_gameId == GID_WATER && var == 32770)
- return 23
-;
int a;
static byte copyprotbypassed;
if (!_copyProtection)
@@ -523,7 +516,12 @@ int ScummEngine::readVar(uint var) {
}
if (var & 0x8000) {
- if ((_gameId == GID_ZAK256) || (_features & GF_OLD_BUNDLE) ||
+ if (_gameId == GID_PAJAMA) {
+ var &= 0xFFF;
+ checkRange(_numBitVariables, 0, var, "Room variable %d out of range(w)");
+ return _roomVars[var];
+
+ } else if ((_gameId == GID_ZAK256) || (_features & GF_OLD_BUNDLE) ||
(_gameId == GID_LOOM && (_features & GF_FMTOWNS))) {
int bit = var & 0xF;
var = (var >> 4) & 0xFF;
@@ -557,7 +555,10 @@ int ScummEngine::readVar(uint var) {
var &= 0xFFF;
}
- checkRange(20, 0, var, "Local variable %d out of range(r)");
+ if (_heversion >= 72)
+ checkRange(24, 0, var, "Local variable %d out of range(r)");
+ else
+ checkRange(20, 0, var, "Local variable %d out of range(r)");
return vm.localvar[_currentScript][var];
}
@@ -598,7 +599,12 @@ void ScummEngine::writeVar(uint var, int value) {
}
if (var & 0x8000) {
- if ((_gameId == GID_ZAK256) || (_features & GF_OLD_BUNDLE) ||
+ if (_gameId == GID_PAJAMA) {
+ var &= 0xFFF;
+ checkRange(_numBitVariables, 0, var, "Room variable %d out of range(w)");
+ _roomVars[var] = value;
+
+ } else if ((_gameId == GID_ZAK256) || (_features & GF_OLD_BUNDLE) ||
(_gameId == GID_LOOM && (_features & GF_FMTOWNS))) {
// In the old games, the bit variables were using the same memory
// as the normal variables!
@@ -628,7 +634,11 @@ void ScummEngine::writeVar(uint var, int value) {
var &= 0xFFF;
}
- checkRange(20, 0, var, "Local variable %d out of range(w)");
+ if (_heversion >= 72)
+ checkRange(24, 0, var, "Local variable %d out of range(w)");
+ else
+ checkRange(20, 0, var, "Local variable %d out of range(w)");
+
vm.localvar[_currentScript][var] = value;
return;
}