aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/gob/draw.h4
-rw-r--r--engines/gob/expression.cpp2
-rw-r--r--engines/gob/game.h4
-rw-r--r--engines/gob/inter_playtoons.cpp4
-rw-r--r--engines/gob/inter_v1.cpp42
-rw-r--r--engines/gob/inter_v2.cpp16
-rw-r--r--engines/gob/inter_v6.cpp4
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 &params) {
bool Inter_Playtoons::oPlaytoons_checkData(OpFuncParams &params) {
int16 handle;
- int16 varOff;
+ uint16 varOff;
int32 size;
SaveLoad::SaveMode mode;
@@ -155,7 +155,7 @@ bool Inter_Playtoons::oPlaytoons_readData(OpFuncParams &params) {
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 &params) {
}
bool Inter_v2::o2_getFreeMem(OpFuncParams &params) {
- 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 &params) {
bool Inter_v6::o6_assign(OpFuncParams &params) {
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 &params) {
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();