* When setting the first two game variables (room and gate), first convert them back to 1-based indexing so they play well with the rest of the scripts. This fixes a number of bugs, e.g. the dragon now appears automatically when the game starts and the question mark animation in the intro is played / stopped at an appropriate time.

* Removed hack from Script::start() which loaded animation 657 before playing it to stop a crash. The fix above seems to fix this bug as well.

svn-id: r43308
This commit is contained in:
Denis Kasak 2009-08-12 05:20:25 +00:00
parent 303085c66b
commit 534158af87
2 changed files with 13 additions and 21 deletions

View file

@ -168,8 +168,10 @@ void Game::start() {
if (_newRoom != _currentRoom._roomNum) {
// Set the first two variables to the new room / gate
_variables[0] = _newGate;
_variables[1] = _newRoom;
// Before setting these variables we have to convert the values to
// 1-based indexing because this is how everything is stored in the data files
_variables[0] = _newGate + 1;
_variables[1] = _newRoom + 1;
// If the new room is the map room, set the appropriate coordinates
// for the dragon in the persons array
@ -263,8 +265,10 @@ void Game::init() {
_newRoom = _currentRoom._roomNum;
_newGate = _currentGate;
_variables[0] = _currentGate;
_variables[1] = _currentRoom._roomNum;
// Before setting these variables we have to convert the values to 1-based indexing
// because this is how everything is stored in the data files
_variables[0] = _currentGate + 1;
_variables[1] = _currentRoom._roomNum + 1;
changeRoom(_currentRoom._roomNum);
runGateProgram(_currentGate);

View file

@ -394,20 +394,8 @@ void Script::start(Common::Queue<int> &params) {
return;
}
int objID = params.pop();
int animID = params.pop();
// Fixes bug in the data files which makes the game crash in the intro
// TODO: This is possibly exclusive to the English version, so check for that
if (animID == 657) {
Common::Queue<int> tmp;
tmp.push(objID);
tmp.push(animID);
this->load(tmp);
}
objID -= 1;
animID -= 1;
int objID = params.pop() - 1;
int animID = params.pop() - 1;
GameObject *obj = _vm->_game->getObject(objID);
@ -780,12 +768,12 @@ int Script::handleMathExpression(Common::MemoryReadStream &reader) {
break;
case kMathVariable:
value = reader.readSint16LE();
value = reader.readSint16LE() - 1;
stk.push(_vm->_game->getVariable(value-1));
stk.push(_vm->_game->getVariable(value));
debugC(3, kDraciBytecodeDebugLevel, "\t\tvariable: %d (%d)", value,
_vm->_game->getVariable(value-1));
_vm->_game->getVariable(value));
break;
case kMathFunctionCall: