[Scummvm-git-logs] scummvm master -> 4c99013f34642b4132729989a57a99b5d67ad5ed

mgerhardy noreply at scummvm.org
Sat Jun 11 10:41:35 UTC 2022


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3dbb423b1b TWINE: fixed zone struct parsing
4c99013f34 TWINE: reduced code duplication


Commit: 3dbb423b1ba5ade41758b7b5aecc82a157a40caa
    https://github.com/scummvm/scummvm/commit/3dbb423b1ba5ade41758b7b5aecc82a157a40caa
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-11T12:41:31+02:00

Commit Message:
TWINE: fixed zone struct parsing

would be a problem in combination with lba2

Changed paths:
    engines/twine/scene/scene.cpp
    engines/twine/scene/scene.h


diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 77ff51644a7..88a3adc4bd2 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -258,7 +258,7 @@ bool Scene::loadSceneLBA2() {
 		zone->infoData.generic.info7 = stream.readSint32LE();
 
 		zone->type = (ZoneType)stream.readUint16LE();
-		zone->snap = stream.readUint16LE();
+		zone->num = stream.readSint16LE();
 	}
 
 	_sceneNumTracks = (int16)stream.readUint16LE();
@@ -366,30 +366,29 @@ bool Scene::loadSceneLBA1() {
 	_sceneNumZones = (int16)stream.readUint16LE();
 	for (int32 i = 0; i < _sceneNumZones; i++) {
 		ZoneStruct *zone = &_sceneZones[i];
-		zone->mins.x = (int16)stream.readUint16LE();
-		zone->mins.y = (int16)stream.readUint16LE();
-		zone->mins.z = (int16)stream.readUint16LE();
+		zone->mins.x = stream.readSint16LE();
+		zone->mins.y = stream.readSint16LE();
+		zone->mins.z = stream.readSint16LE();
 
-		zone->maxs.x = (int16)stream.readUint16LE();
-		zone->maxs.y = (int16)stream.readUint16LE();
-		zone->maxs.z = (int16)stream.readUint16LE();
+		zone->maxs.x = stream.readSint16LE();
+		zone->maxs.y = stream.readSint16LE();
+		zone->maxs.z = stream.readSint16LE();
 
 		zone->type = (ZoneType)stream.readUint16LE();
+		zone->num = stream.readSint16LE();
 
-		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();
+		zone->infoData.generic.info0 = stream.readSint16LE();
+		zone->infoData.generic.info1 = stream.readSint16LE();
+		zone->infoData.generic.info2 = stream.readSint16LE();
+		zone->infoData.generic.info3 = stream.readSint16LE();
 	}
 
 	_sceneNumTracks = stream.readUint16LE();
 	for (int32 i = 0; i < _sceneNumTracks; i++) {
 		IVec3 *point = &_sceneTracks[i];
-		point->x = (int16)stream.readUint16LE();
-		point->y = (int16)stream.readUint16LE();
-		point->z = (int16)stream.readUint16LE();
+		point->x = stream.readSint16LE();
+		point->y = stream.readSint16LE();
+		point->z = stream.readSint16LE();
 	}
 
 	if (_enableEnhancements) {
@@ -716,7 +715,7 @@ void Scene::processActorZones(int32 actorIdx) {
 			switch (zone->type) {
 			case ZoneType::kCube:
 				if (IS_HERO(actorIdx) && actor->_life > 0) {
-					_needChangeScene = zone->infoData.ChangeScene.newSceneIdx;
+					_needChangeScene = zone->num;
 					_zoneHeroPos.x = actor->_pos.x - zone->mins.x + zone->infoData.ChangeScene.x;
 					_zoneHeroPos.y = actor->_pos.y - zone->mins.y + zone->infoData.ChangeScene.y;
 					_zoneHeroPos.z = actor->_pos.z - zone->mins.z + zone->infoData.ChangeScene.z;
@@ -735,17 +734,17 @@ void Scene::processActorZones(int32 actorIdx) {
 				}
 				break;
 			case ZoneType::kSceneric:
-				actor->_zone = zone->infoData.Sceneric.zoneIdx;
+				actor->_zone = zone->num;
 				break;
 			case ZoneType::kGrid:
 				if (_currentlyFollowedActor == actorIdx) {
 					tmpCellingGrid = true;
-					if (_engine->_grid->_useCellingGrid != zone->infoData.CeillingGrid.newGrid) {
-						if (zone->infoData.CeillingGrid.newGrid != -1) {
+					if (_engine->_grid->_useCellingGrid != zone->num) {
+						if (zone->num != -1) {
 							_engine->_grid->createGridMap();
 						}
 
-						_engine->_grid->_useCellingGrid = zone->infoData.CeillingGrid.newGrid;
+						_engine->_grid->_useCellingGrid = zone->num;
 						_engine->_grid->_cellingGridIdx = z;
 						ScopedEngineFreeze freeze(_engine);
 						_engine->_grid->initCellingGrid(_engine->_grid->_useCellingGrid);
@@ -764,7 +763,7 @@ void Scene::processActorZones(int32 actorIdx) {
 					_engine->exitSceneryView();
 					_engine->_text->setFontCrossColor(zone->infoData.DisplayText.textColor);
 					_talkingActor = actorIdx;
-					_engine->_text->drawTextProgressive(zone->infoData.DisplayText.textIdx);
+					_engine->_text->drawTextProgressive((TextId)zone->num);
 					_engine->_redraw->redrawEngineActions(true);
 				}
 				break;
diff --git a/engines/twine/scene/scene.h b/engines/twine/scene/scene.h
index bff0b73ee27..fe63b842d13 100644
--- a/engines/twine/scene/scene.h
+++ b/engines/twine/scene/scene.h
@@ -51,34 +51,23 @@ struct ZoneStruct {
 	IVec3 mins;
 	IVec3 maxs;
 	ZoneType type = ZoneType::kCube;
-	int16 snap = 0;
+	int32 num;
 	union {
 		struct {
-			int32 newSceneIdx;
 			int32 x;
 			int32 y;
 			int32 z;
 		} ChangeScene;
 		struct {
-			int32 dummy;
 			int32 x;
 			int32 y;
 			int32 z;
 		} CameraView;
-		struct {
-			int32 zoneIdx;
-		} Sceneric;
-		struct {
-			int32 newGrid;
-		} CeillingGrid;
-
 		/** show a text (e.g. when reading a sign) */
 		struct {
-			TextId textIdx;   /*!< text index in the current active text bank */
 			int32 textColor; /*!< text color (see @c ActorStruct::talkColor) */
 		} DisplayText;
 		struct {
-			int32 info0;
 			BonusParameter typesFlag;
 			int32 amount;
 			/**


Commit: 4c99013f34642b4132729989a57a99b5d67ad5ed
    https://github.com/scummvm/scummvm/commit/4c99013f34642b4132729989a57a99b5d67ad5ed
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-11T12:41:31+02:00

Commit Message:
TWINE: reduced code duplication

Changed paths:
    engines/twine/scene/collision.cpp


diff --git a/engines/twine/scene/collision.cpp b/engines/twine/scene/collision.cpp
index 7894d020ddd..ef83195d84f 100644
--- a/engines/twine/scene/collision.cpp
+++ b/engines/twine/scene/collision.cpp
@@ -255,15 +255,12 @@ int32 Collision::checkCollisionWithActors(int32 actorIdx) {
 					if (actor->_dynamicFlags.bIsFalling || standingOnActor(actorIdx, a)) {
 						processActor.y = maxsTest.y - actor->_boundingBox.mins.y + 1;
 						actor->_carryBy = a;
-					} else {
-						handlePushing(minsTest, maxsTest, actor, actorTest);
+						continue;
 					}
-				} else {
-					if (standingOnActor(actorIdx, a)) {
-						_engine->_actor->hitActor(actorIdx, a, 1, -1);
-					}
-					handlePushing(minsTest, maxsTest, actor, actorTest);
+				} else if (standingOnActor(actorIdx, a)) {
+					_engine->_actor->hitActor(actorIdx, a, 1, -1);
 				}
+				handlePushing(minsTest, maxsTest, actor, actorTest);
 			}
 		}
 	}




More information about the Scummvm-git-logs mailing list