aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/gob/draw.cpp5
-rw-r--r--engines/gob/game_v1.cpp2
-rw-r--r--engines/gob/game_v2.cpp4
-rw-r--r--engines/gob/script.cpp16
-rw-r--r--engines/gob/script.h11
5 files changed, 20 insertions, 18 deletions
diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp
index 66f046339f..f0a84bbdcc 100644
--- a/engines/gob/draw.cpp
+++ b/engines/gob/draw.cpp
@@ -390,8 +390,9 @@ void Draw::printTextCentered(int16 id, int16 left, int16 top, int16 right,
adjustCoords(1, &left, &top);
adjustCoords(1, &right, &bottom);
- if (_vm->_game->_script->getCenterOffset() != 0) {
- _vm->_game->_script->call(_vm->_game->_script->getCenterOffset());
+ uint16 centerOffset = _vm->_game->_script->getFunctionOffset(Script::kFunctionCenter);
+ if (centerOffset != 0) {
+ _vm->_game->_script->call(centerOffset);
WRITE_VAR(17, (uint32) id);
WRITE_VAR(18, (uint32) left);
diff --git a/engines/gob/game_v1.cpp b/engines/gob/game_v1.cpp
index 92679cb568..31847075bc 100644
--- a/engines/gob/game_v1.cpp
+++ b/engines/gob/game_v1.cpp
@@ -164,7 +164,7 @@ void Game_v1::playTot(int16 skipPlay) {
if (!_vm->_inter->_variables)
_vm->_inter->allocateVars(_script->getVariablesCount() & 0xFFFF);
- _script->seek(_script->getStartOffset());
+ _script->seek(_script->getFunctionOffset(Script::kFunctionStart));
_vm->_inter->renewTimeInVars();
diff --git a/engines/gob/game_v2.cpp b/engines/gob/game_v2.cpp
index e4b4b73661..54a70949bf 100644
--- a/engines/gob/game_v2.cpp
+++ b/engines/gob/game_v2.cpp
@@ -199,7 +199,7 @@ void Game_v2::playTot(int16 skipPlay) {
if (!_vm->_inter->_variables)
_vm->_inter->allocateVars(_script->getVariablesCount() & 0xFFFF);
- _script->seek(_script->getStartOffset());
+ _script->seek(_script->getFunctionOffset(Script::kFunctionStart));
_vm->_inter->renewTimeInVars();
@@ -269,7 +269,7 @@ void Game_v2::playTot(int16 skipPlay) {
} else {
_vm->_inter->initControlVars(0);
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
- _script->seek(READ_LE_UINT16(_script->getData() + (skipPlay << 1) + 0x66));
+ _script->seek(_script->getFunctionOffset(skipPlay + 1));
_menuLevel++;
_vm->_inter->callSub(2);
diff --git a/engines/gob/script.cpp b/engines/gob/script.cpp
index 4bed65704e..72085ed756 100644
--- a/engines/gob/script.cpp
+++ b/engines/gob/script.cpp
@@ -422,10 +422,6 @@ bool Script::getTOTProperties() {
_exFileNumber = _totData[60];
_communHandling = _totData[61];
- _startOffset = READ_LE_UINT32(_totData + 100);
-
- _centerOffset = READ_LE_UINT16(_totData + 126);
-
return true;
}
@@ -538,12 +534,14 @@ uint8 Script::getCommunHandling() const {
return _communHandling;
}
-uint32 Script::getStartOffset() const {
- return _startOffset;
-}
+uint16 Script::getFunctionOffset(uint8 function) const {
+ if (!_totData)
+ return 0;
+
+ // Offsets 100-128, 2 bytes per function
+ assert(function <= 13);
-uint32 Script::getCenterOffset() const {
- return _centerOffset;
+ return READ_LE_UINT16(_totData + 100 + function * 2);
}
uint32 Script::getVariablesCount(const char *fileName, GobEngine *vm) {
diff --git a/engines/gob/script.h b/engines/gob/script.h
index a1200a7ce4..f2f0571a3a 100644
--- a/engines/gob/script.h
+++ b/engines/gob/script.h
@@ -36,6 +36,11 @@ class Expression;
class Script {
public:
+ enum Function {
+ kFunctionStart = 0,
+ kFunctionCenter = 13
+ };
+
Script(GobEngine *vm);
~Script();
@@ -126,8 +131,8 @@ public:
uint8 getImFileNumber () const;
uint8 getExFileNumber () const;
uint8 getCommunHandling () const;
- uint32 getStartOffset () const;
- uint32 getCenterOffset () const;
+
+ uint16 getFunctionOffset (uint8 function) const;
static uint32 getVariablesCount(const char *fileName, GobEngine *vm);
@@ -158,8 +163,6 @@ private:
uint8 _imFileNumber;
uint8 _exFileNumber;
uint8 _communHandling;
- uint32 _startOffset;
- uint16 _centerOffset;
Common::Stack<CallEntry> _callStack;