diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp index 76d956fa6a1..32404608c40 100644 --- a/engines/twine/scene/scene.cpp +++ b/engines/twine/scene/scene.cpp @@ -303,15 +303,15 @@ bool Scene::loadSceneLBA1() { _sceneMusic = stream.readByte(); // load hero properties - _sceneHeroPos.x = stream.readUint16LE(); - _sceneHeroPos.y = stream.readUint16LE(); - _sceneHeroPos.z = stream.readUint16LE(); + _sceneHeroPos.x = (int16)stream.readUint16LE(); + _sceneHeroPos.y = (int16)stream.readUint16LE(); + _sceneHeroPos.z = (int16)stream.readUint16LE(); - _sceneHero->_moveScriptSize = stream.readUint16LE(); + _sceneHero->_moveScriptSize = (int16)stream.readUint16LE(); _sceneHero->_moveScript = _currentScene + stream.pos(); stream.skip(_sceneHero->_moveScriptSize); - _sceneHero->_lifeScriptSize = stream.readUint16LE(); + _sceneHero->_lifeScriptSize = (int16)stream.readUint16LE(); _sceneHero->_lifeScript = _currentScene + stream.pos(); stream.skip(_sceneHero->_lifeScriptSize); @@ -327,15 +327,15 @@ bool Scene::loadSceneLBA1() { act->_body = (BodyType)stream.readByte(); act->_anim = (AnimationTypes)stream.readByte(); - act->_sprite = stream.readUint16LE(); - act->_pos.x = stream.readUint16LE(); - act->_pos.y = stream.readUint16LE(); - act->_pos.z = stream.readUint16LE(); + act->_sprite = (int16)stream.readUint16LE(); + act->_pos.x = (int16)stream.readUint16LE(); + act->_pos.y = (int16)stream.readUint16LE(); + act->_pos.z = (int16)stream.readUint16LE(); act->_collisionPos = act->pos(); act->_strengthOfHit = stream.readByte(); setBonusParameterFlags(act, stream.readUint16LE()); - act->_angle = stream.readUint16LE(); - act->_speed = stream.readUint16LE(); + act->_angle = (int16)stream.readUint16LE(); + act->_speed = (int16)stream.readUint16LE(); act->_controlMode = (ControlMode)stream.readUint16LE(); act->_cropLeft = stream.readSint16LE(); act->_delayInMillis = act->_cropLeft; // TODO: this might not be needed @@ -348,11 +348,11 @@ bool Scene::loadSceneLBA1() { act->_armor = stream.readByte(); act->setLife(stream.readByte()); - act->_moveScriptSize = stream.readUint16LE(); + act->_moveScriptSize = (int16)stream.readUint16LE(); act->_moveScript = _currentScene + stream.pos(); stream.skip(act->_moveScriptSize); - act->_lifeScriptSize = stream.readUint16LE(); + act->_lifeScriptSize = (int16)stream.readUint16LE(); act->_lifeScript = _currentScene + stream.pos(); stream.skip(act->_lifeScriptSize); @@ -365,20 +365,20 @@ bool Scene::loadSceneLBA1() { _sceneNumZones = stream.readUint16LE(); for (int32 i = 0; i < _sceneNumZones; i++) { ZoneStruct *zone = &_sceneZones[i]; - zone->mins.x = stream.readUint16LE(); - zone->mins.y = stream.readUint16LE(); - zone->mins.z = stream.readUint16LE(); + zone->mins.x = (int16)stream.readUint16LE(); + zone->mins.y = (int16)stream.readUint16LE(); + zone->mins.z = (int16)stream.readUint16LE(); - zone->maxs.x = stream.readUint16LE(); - zone->maxs.y = stream.readUint16LE(); - zone->maxs.z = stream.readUint16LE(); + zone->maxs.x = (int16)stream.readUint16LE(); + zone->maxs.y = (int16)stream.readUint16LE(); + zone->maxs.z = (int16)stream.readUint16LE(); zone->type = (ZoneType)stream.readUint16LE(); - zone->infoData.generic.info0 = stream.readUint16LE(); - zone->infoData.generic.info1 = stream.readUint16LE(); - zone->infoData.generic.info2 = stream.readUint16LE(); - zone->infoData.generic.info3 = stream.readUint16LE(); + zone->infoData.generic.info0 = (int16)stream.readUint16LE(); + zone->infoData.generic.info1 = (int16)stream.readUint16LE(); + zone->infoData.generic.info2 = (int16)stream.readUint16LE(); + zone->infoData.generic.info3 = (int16)stream.readUint16LE(); zone->snap = stream.readUint16LE(); } @@ -386,9 +386,9 @@ bool Scene::loadSceneLBA1() { _sceneNumTracks = stream.readUint16LE(); for (int32 i = 0; i < _sceneNumTracks; i++) { IVec3 *point = &_sceneTracks[i]; - point->x = stream.readUint16LE(); - point->y = stream.readUint16LE(); - point->z = stream.readUint16LE(); + point->x = (int16)stream.readUint16LE(); + point->y = (int16)stream.readUint16LE(); + point->z = (int16)stream.readUint16LE(); } if (_engine->_debugScene->_useScenePatches) {