diff options
-rw-r--r-- | engines/gob/draw.h | 4 | ||||
-rw-r--r-- | engines/gob/expression.cpp | 2 | ||||
-rw-r--r-- | engines/gob/game.h | 4 | ||||
-rw-r--r-- | engines/gob/inter_playtoons.cpp | 4 | ||||
-rw-r--r-- | engines/gob/inter_v1.cpp | 42 | ||||
-rw-r--r-- | engines/gob/inter_v2.cpp | 16 | ||||
-rw-r--r-- | engines/gob/inter_v6.cpp | 4 |
7 files changed, 45 insertions, 31 deletions
diff --git a/engines/gob/draw.h b/engines/gob/draw.h index 1da6ba4b74..c67299585b 100644 --- a/engines/gob/draw.h +++ b/engines/gob/draw.h @@ -119,8 +119,8 @@ public: int16 _cursorWidth; int16 _cursorHeight; - int16 _cursorHotspotXVar; - int16 _cursorHotspotYVar; + int32 _cursorHotspotXVar; + int32 _cursorHotspotYVar; SurfaceDescPtr _cursorSprites; SurfaceDescPtr _cursorSpritesBack; diff --git a/engines/gob/expression.cpp b/engines/gob/expression.cpp index 61376b2212..789ac3211d 100644 --- a/engines/gob/expression.cpp +++ b/engines/gob/expression.cpp @@ -655,7 +655,7 @@ int16 Expression::parseValExpr(byte stopToken) { // Load a value according to the operation void Expression::loadValue(byte operation, uint32 varBase, const StackFrame &stackFrame) { int16 dimCount; - int16 temp; + uint16 temp; int16 temp2; int16 offset; int16 dim; diff --git a/engines/gob/game.h b/engines/gob/game.h index 8b8be90ef4..a9985028cb 100644 --- a/engines/gob/game.h +++ b/engines/gob/game.h @@ -55,8 +55,8 @@ public: private: struct Environment { - int16 cursorHotspotX; - int16 cursorHotspotY; + int32 cursorHotspotX; + int32 cursorHotspotY; char curTotFile[14]; Variables *variables; Script *script; diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp index d7cb6b79c2..c2de34d07b 100644 --- a/engines/gob/inter_playtoons.cpp +++ b/engines/gob/inter_playtoons.cpp @@ -108,7 +108,7 @@ bool Inter_Playtoons::oPlaytoons_F_1B(OpFuncParams ¶ms) { bool Inter_Playtoons::oPlaytoons_checkData(OpFuncParams ¶ms) { int16 handle; - int16 varOff; + uint16 varOff; int32 size; SaveLoad::SaveMode mode; @@ -155,7 +155,7 @@ bool Inter_Playtoons::oPlaytoons_readData(OpFuncParams ¶ms) { int32 retSize; int32 size; int32 offset; - int16 dataVar; + uint16 dataVar; int16 handle; byte *buf; SaveLoad::SaveMode mode; diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index 446d86643d..d3bd11ab75 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -306,8 +306,8 @@ void Inter_v1::o1_initCursor() { int16 height; int16 count; - _vm->_draw->_cursorHotspotXVar = _vm->_game->_script->readVarIndex() / 4; - _vm->_draw->_cursorHotspotYVar = _vm->_game->_script->readVarIndex() / 4; + _vm->_draw->_cursorHotspotXVar = ((uint16) _vm->_game->_script->readVarIndex()) / 4; + _vm->_draw->_cursorHotspotYVar = ((uint16) _vm->_game->_script->readVarIndex()) / 4; width = _vm->_game->_script->readInt16(); if (width < 16) @@ -561,18 +561,32 @@ void Inter_v1::o1_getObjAnimSize() { _vm->_game->_script->evalExpr(&objIndex); - Mult::Mult_AnimData &animData = *(_vm->_mult->_objects[objIndex].pAnimData); - if (animData.isStatic == 0) - _vm->_scenery->updateAnim(animData.layer, animData.frame, - animData.animation, 0, *(_vm->_mult->_objects[objIndex].pPosX), - *(_vm->_mult->_objects[objIndex].pPosY), 0); - - _vm->_scenery->_toRedrawLeft = MAX(_vm->_scenery->_toRedrawLeft, (int16) 0); - _vm->_scenery->_toRedrawTop = MAX(_vm->_scenery->_toRedrawTop, (int16) 0); - WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawLeft); - WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawTop); - WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawRight); - WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawBottom); + uint16 varLeft = _vm->_game->_script->readVarIndex(); + uint16 varTop = _vm->_game->_script->readVarIndex(); + uint16 varRight = _vm->_game->_script->readVarIndex(); + uint16 varBottom = _vm->_game->_script->readVarIndex(); + + if ((objIndex < 0) || (objIndex >= _vm->_mult->_objCount)) { + warning("o1_getObjAnimSize(): objIndex = %d (%d)", objIndex, _vm->_mult->_objCount); + _vm->_scenery->_toRedrawLeft = 0; + _vm->_scenery->_toRedrawTop = 0; + _vm->_scenery->_toRedrawRight = 0; + _vm->_scenery->_toRedrawBottom = 0; + } else { + Mult::Mult_AnimData &animData = *(_vm->_mult->_objects[objIndex].pAnimData); + if (animData.isStatic == 0) + _vm->_scenery->updateAnim(animData.layer, animData.frame, + animData.animation, 0, *(_vm->_mult->_objects[objIndex].pPosX), + *(_vm->_mult->_objects[objIndex].pPosY), 0); + + _vm->_scenery->_toRedrawLeft = MAX<int16>(_vm->_scenery->_toRedrawLeft, 0); + _vm->_scenery->_toRedrawTop = MAX<int16>(_vm->_scenery->_toRedrawTop , 0); + } + + WRITE_VAR_OFFSET(varLeft , _vm->_scenery->_toRedrawLeft); + WRITE_VAR_OFFSET(varTop , _vm->_scenery->_toRedrawTop); + WRITE_VAR_OFFSET(varRight , _vm->_scenery->_toRedrawRight); + WRITE_VAR_OFFSET(varBottom, _vm->_scenery->_toRedrawBottom); } void Inter_v1::o1_loadStatic() { diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index da9e55685c..01b62b72b4 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -163,7 +163,7 @@ void Inter_v2::checkSwitchTable(uint32 &offset) { type = _vm->_game->_script->peekByte(); - value = _vm->_game->_script->readVarIndex(); + value = (uint16) _vm->_game->_script->readVarIndex(); switch (type) { case TYPE_VAR_INT8: @@ -284,9 +284,9 @@ void Inter_v2::o2_initMult() { int16 oldAnimHeight; int16 oldAnimWidth; int16 oldObjCount; - int16 posXVar; - int16 posYVar; - int16 animDataVar; + uint16 posXVar; + uint16 posYVar; + uint16 animDataVar; oldAnimWidth = _vm->_mult->_animWidth; oldAnimHeight = _vm->_mult->_animHeight; @@ -1278,14 +1278,14 @@ bool Inter_v2::o2_loadSound(OpFuncParams ¶ms) { } bool Inter_v2::o2_getFreeMem(OpFuncParams ¶ms) { - int16 freeVar; - int16 maxFreeVar; + uint16 freeVar; + uint16 maxFreeVar; - freeVar = _vm->_game->_script->readVarIndex(); + freeVar = _vm->_game->_script->readVarIndex(); maxFreeVar = _vm->_game->_script->readVarIndex(); // HACK - WRITE_VAR_OFFSET(freeVar, 1000000); + WRITE_VAR_OFFSET(freeVar , 1000000); WRITE_VAR_OFFSET(maxFreeVar, 1000000); WRITE_VAR(16, _vm->_game->_script->getVariablesCount() * 4); return false; diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp index a0c6a0ad1d..98747de099 100644 --- a/engines/gob/inter_v6.cpp +++ b/engines/gob/inter_v6.cpp @@ -274,7 +274,7 @@ bool Inter_v6::o6_loadCursor(OpFuncParams ¶ms) { bool Inter_v6::o6_assign(OpFuncParams ¶ms) { uint16 size, destType; - int16 dest = _vm->_game->_script->readVarIndex(&size, &destType); + uint16 dest = _vm->_game->_script->readVarIndex(&size, &destType); if (size != 0) { int16 src; @@ -284,7 +284,7 @@ bool Inter_v6::o6_assign(OpFuncParams ¶ms) { src = _vm->_game->_script->readVarIndex(&size, 0); memcpy(_vm->_inter->_variables->getAddressOff8(dest), - _vm->_inter->_variables->getAddressOff8(src), size * 4); + _vm->_inter->_variables->getAddressOff8((uint16) src), size * 4); _vm->_game->_script->pop(); |