[Scummvm-git-logs] scummvm master -> a9a6d2957da070d2eae013db6a748958f238bc60

mgerhardy noreply at scummvm.org
Fri Dec 31 11:04:09 UTC 2021


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

Summary:
8f590c5288 TWINE: reduced code duplication in move script - door handling
7080e9bfe9 TWINE: added more scene patches - but disable them by default
0df0beadc9 TWINE: simplified scene patches
a9a6d2957d TWINE: minor comments


Commit: 8f590c5288379457fd174b563710d468489d62fe
    https://github.com/scummvm/scummvm/commit/8f590c5288379457fd174b563710d468489d62fe
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-12-31T12:01:19+01:00

Commit Message:
TWINE: reduced code duplication in move script - door handling

Changed paths:
    engines/twine/script/script_move_v1.cpp


diff --git a/engines/twine/script/script_move_v1.cpp b/engines/twine/script/script_move_v1.cpp
index 3fdeca543c6..11eb6e41a27 100644
--- a/engines/twine/script/script_move_v1.cpp
+++ b/engines/twine/script/script_move_v1.cpp
@@ -406,14 +406,10 @@ static int32 mBETA(TwinEEngine *engine, MoveScriptContext &ctx) {
 	return 0;
 }
 
-/**
- * Open the door (left way) (Parameter = distance to open).
- * @note Opcode @c 0x15
- */
-static int32 mOPEN_LEFT(TwinEEngine *engine, MoveScriptContext &ctx) {
+static int32 mOPEN_GENERIC(TwinEEngine *engine, MoveScriptContext &ctx, int32 angle) {
 	const int16 doorStatus = ctx.stream.readSint16LE();
 	if (ctx.actor->_staticFlags.bIsSpriteActor && ctx.actor->_staticFlags.bUsesClipping) {
-		ctx.actor->_angle = ANGLE_270;
+		ctx.actor->_angle = angle;
 		ctx.actor->_doorStatus = doorStatus;
 		ctx.actor->_dynamicFlags.bIsSpriteMoving = 1;
 		ctx.actor->_speed = 1000;
@@ -425,23 +421,21 @@ static int32 mOPEN_LEFT(TwinEEngine *engine, MoveScriptContext &ctx) {
 	return 0;
 }
 
+/**
+ * Open the door (left way) (Parameter = distance to open).
+ * @note Opcode @c 0x15
+ */
+static int32 mOPEN_LEFT(TwinEEngine *engine, MoveScriptContext &ctx) {
+	return mOPEN_GENERIC(engine, ctx, ANGLE_270);
+}
+
 /**
  * Open the door (right way) (Parameter = distance to open).
  * @note Opcode @c 0x16
  */
 static int32 mOPEN_RIGHT(TwinEEngine *engine, MoveScriptContext &ctx) {
-	const int16 doorStatus = ctx.stream.readSint16LE();
-	if (ctx.actor->_staticFlags.bIsSpriteActor && ctx.actor->_staticFlags.bUsesClipping) {
-		ctx.actor->_angle = ANGLE_90;
-		ctx.actor->_doorStatus = doorStatus;
-		ctx.actor->_dynamicFlags.bIsSpriteMoving = 1;
-		ctx.actor->_speed = 1000;
-		engine->_movements->setActorAngle(ANGLE_0, ANGLE_351, ANGLE_17, &ctx.actor->_move);
-	}
-	if (engine->_scene->_currentSceneIdx == LBA1SceneId::Proxima_Island_Museum && ctx.actor->_actorIdx == 16) {
-		engine->unlockAchievement("LBA_ACH_009");
-	}
-	return 0;
+	return mOPEN_GENERIC(engine, ctx, ANGLE_90);
+
 }
 
 /**
@@ -449,18 +443,8 @@ static int32 mOPEN_RIGHT(TwinEEngine *engine, MoveScriptContext &ctx) {
  * @note Opcode @c 0x17
  */
 static int32 mOPEN_UP(TwinEEngine *engine, MoveScriptContext &ctx) {
-	const int16 doorStatus = ctx.stream.readSint16LE();
-	if (ctx.actor->_staticFlags.bIsSpriteActor && ctx.actor->_staticFlags.bUsesClipping) {
-		ctx.actor->_angle = ANGLE_180;
-		ctx.actor->_doorStatus = doorStatus;
-		ctx.actor->_dynamicFlags.bIsSpriteMoving = 1;
-		ctx.actor->_speed = 1000;
-		engine->_movements->setActorAngle(ANGLE_0, ANGLE_351, ANGLE_17, &ctx.actor->_move);
-	}
-	if (engine->_scene->_currentSceneIdx == LBA1SceneId::Proxima_Island_Museum && ctx.actor->_actorIdx == 16) {
-		engine->unlockAchievement("LBA_ACH_009");
-	}
-	return 0;
+	return mOPEN_GENERIC(engine, ctx, ANGLE_180);
+
 }
 
 /**
@@ -468,18 +452,7 @@ static int32 mOPEN_UP(TwinEEngine *engine, MoveScriptContext &ctx) {
  * @note Opcode @c 0x18
  */
 static int32 mOPEN_DOWN(TwinEEngine *engine, MoveScriptContext &ctx) {
-	const int16 doorStatus = ctx.stream.readSint16LE();
-	if (ctx.actor->_staticFlags.bIsSpriteActor && ctx.actor->_staticFlags.bUsesClipping) {
-		ctx.actor->_angle = ANGLE_0;
-		ctx.actor->_doorStatus = doorStatus;
-		ctx.actor->_dynamicFlags.bIsSpriteMoving = 1;
-		ctx.actor->_speed = 1000;
-		engine->_movements->setActorAngle(ANGLE_0, ANGLE_351, ANGLE_17, &ctx.actor->_move);
-	}
-	if (engine->_scene->_currentSceneIdx == LBA1SceneId::Proxima_Island_Museum && ctx.actor->_actorIdx == 16) {
-		engine->unlockAchievement("LBA_ACH_009");
-	}
-	return 0;
+	return mOPEN_GENERIC(engine, ctx, ANGLE_0);
 }
 
 /**


Commit: 7080e9bfe912d77e1d9058bd4f1ecb2942e4746a
    https://github.com/scummvm/scummvm/commit/7080e9bfe912d77e1d9058bd4f1ecb2942e4746a
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-12-31T12:03:25+01:00

Commit Message:
TWINE: added more scene patches - but disable them by default

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


diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index a78771b2219..01b91b813ba 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -392,41 +392,41 @@ bool Scene::loadSceneLBA1() {
 	}
 
 	if (_useScenePatches) {
-#if 0
-		// TODO: these were found in the disassembly and might be some script fixes - check me and activate me
 		switch (_currentSceneIdx) {
 		case LBA1SceneId::Hamalayi_Mountains_landing_place:
-			assert(_sceneNumActors >= 22);
-			_sceneActors[21]._pos.x = _sceneActors[21]._collisionPos.x = 0x1b00;
-			_sceneActors[21]._pos.z = _sceneActors[21]._collisionPos.z = 0x300;
+			if (_sceneNumActors >= 22) {
+				_sceneActors[21]._pos.x = _sceneActors[21]._collisionPos.x = 6656 + 256;
+				_sceneActors[21]._pos.z = _sceneActors[21]._collisionPos.z = 768;
+			}
 			break;
 		case LBA1SceneId::Principal_Island_outside_the_fortress:
-			assert(sceneNumActors >= 30);
-			_sceneActors[29].pos.z = _sceneActors[29].collisionPos.z = 0x703;
-			assert(sceneNumZones >= 23);
-			// each scene zone entry has 24 bytes
-			sceneZones[15].mins.y = 0x450; // [zone:15] 362 (mod:2) offset relative to sceneNumZones
-			sceneZones[15].type = 0x2ce0; // [zone:15] 372 (mod:12) offset relative to sceneNumZones
-			sceneZones[16].mins.y = 0x5270; // [zone:16] 386 (mod:2) offset relative to sceneNumZones
-			sceneZones[16].type = 0x1f90; // [zone:16] 396 (mod:12) offset relative to sceneNumZones
-			sceneZones[22].mins.y = 0x1800; // [zone:22] 530 (mod:2) offset relative to sceneNumZones
-			sceneZones[15].maxs.x = 0x10f0;
-			sceneZones[15].maxs.y = 0x2100; // [zone:15] 366 (mod:6) offset relative to sceneNumZones (4 bytes)
-			sceneZones[16].maxs.x = 0x5d10;
-			sceneZones[16].maxs.y = 0x1200; // [zone:16] 390 (mod:6) offset relative to sceneNumZones (4 bytes)
-			sceneZones[22].maxs.x = 0x22a1;
-			sceneZones[22].maxs.y = 0x1800; // [zone:22] 534 (mod:6) offset relative to sceneNumZones (4 bytes)
-			sceneZones[22].type = 0x1ae1; // [zone:22] 540 (mod:12) offset relative to sceneNumZones
+			if (_sceneNumActors >= 30) {
+				_sceneActors[29]._pos.z = _sceneActors[29]._collisionPos.z = 1795;
+			}
+#if 0
+			if (sceneNumZones >= 23) {
+				_sceneZones[15].mins.x = 1104;
+				_sceneZones[15].mins.z = 8448;
+				_sceneZones[15].maxs.x = 4336;
+				_sceneZones[15].maxs.z = 11488;
+				_sceneZones[16].mins.x = 21104;
+				_sceneZones[16].mins.z = 4608;
+				_sceneZones[16].maxs.x = 23824;
+				_sceneZones[16].maxs.z = 8080;
+				_sceneZones[22].mins.x = 6144;
+				_sceneZones[22].mins.z = 6144;
+				_sceneZones[22].maxs.x = 8865;
+				_sceneZones[22].maxs.z = 6881;
+			}
+#endif
 			break;
 		case LBA1SceneId::Tippet_Island_Secret_passage_scene_1:
-			// puVar4 is the position of sceneNumZones
-			//(ushort*)puVar4[78] = 0xe20;
+			_sceneZones[6].maxs.z = 3616;
 			break;
 		case LBA1SceneId::Principal_Island_inside_the_fortress:
-			//(ushort*)puVar4[140] = 0x32;
+			_sceneZones[11].type = (ZoneType)50;
 			break;
 		}
-#endif
 	}
 
 	return true;
@@ -469,15 +469,17 @@ void Scene::reloadCurrentScene() {
 void Scene::changeScene() {
 	if (_engine->isLBA1()) {
 		if (_useScenePatches) {
-			if (_currentSceneIdx == LBA1SceneId::Citadel_Island_Harbor && _needChangeScene == LBA1SceneId::Principal_Island_Harbor && _sceneNumZones > 14) {
-				const ZoneStruct *zone = &_sceneZones[15];
-				const IVec3 &track = _sceneTracks[8];
-				IVec3 &pos = _zoneHeroPos;
-				pos.x = zone->infoData.ChangeScene.x - zone->mins.x + track.x;
-				pos.y = zone->infoData.ChangeScene.y - zone->mins.y + track.y;
-				pos.z = zone->infoData.ChangeScene.z - zone->mins.z + track.z;
-				_engine->_scene->_heroPositionType = ScenePositionType::kZone;
-				debug(3, "Using zone position %i:%i:%i", pos.x, pos.y, pos.z);
+			if (_currentSceneIdx == LBA1SceneId::Citadel_Island_Harbor && _needChangeScene == LBA1SceneId::Principal_Island_Harbor) {
+				if (_sceneNumZones >= 15) {
+					const ZoneStruct *zone = &_sceneZones[15];
+					const IVec3 &track = _sceneTracks[8];
+					IVec3 &pos = _zoneHeroPos;
+					pos.x = zone->infoData.ChangeScene.x - zone->mins.x + track.x;
+					pos.y = zone->infoData.ChangeScene.y - zone->mins.y + track.y;
+					pos.z = zone->infoData.ChangeScene.z - zone->mins.z + track.z;
+					_engine->_scene->_heroPositionType = ScenePositionType::kZone;
+					debug(3, "Using zone position %i:%i:%i", pos.x, pos.y, pos.z);
+				}
 			}
 		}
 
diff --git a/engines/twine/scene/scene.h b/engines/twine/scene/scene.h
index 95a636a5a8e..ede7fa01ced 100644
--- a/engines/twine/scene/scene.h
+++ b/engines/twine/scene/scene.h
@@ -194,7 +194,7 @@ public:
 	int16 _currentlyFollowedActor = OWN_ACTOR_SCENE_INDEX;
 	/** Current actor in zone - climbing a ladder */
 	bool _currentActorInZone = false;
-	bool _useScenePatches = true;
+	bool _useScenePatches = false;
 	/** Current actor manipulated in scripts */
 	int16 _currentScriptValue = 0;
 
diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index 57b9caca3ad..cdee1f99831 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -1115,6 +1115,15 @@ static int32 lZOOM(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 static int32 lPOS_POINT(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const int32 trackIdx = ctx.stream.readByte();
+	if (engine->_scene->_useScenePatches) {
+		if (IS_HERO(ctx.actorIdx) && engine->_scene->_currentSceneIdx == LBA1SceneId::Citadel_Island_Harbor && trackIdx == 8) {
+			ctx.stream.rewind(2);
+			ctx.stream.writeByte(0x34); // CHANGE_CUBE
+			ctx.stream.writeByte(LBA1SceneId::Principal_Island_Harbor);
+			ctx.stream.rewind(2);
+			return 0;
+		}
+	}
 	ctx.actor->_pos = engine->_scene->_sceneTracks[trackIdx];
 	return 0;
 }


Commit: 0df0beadc94f89aa722f40ccd39a79a9c5f78764
    https://github.com/scummvm/scummvm/commit/0df0beadc94f89aa722f40ccd39a79a9c5f78764
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-12-31T12:03:29+01:00

Commit Message:
TWINE: simplified scene patches

those are fixed sized arrays

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


diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 01b91b813ba..7fe14f977ab 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -394,30 +394,24 @@ bool Scene::loadSceneLBA1() {
 	if (_useScenePatches) {
 		switch (_currentSceneIdx) {
 		case LBA1SceneId::Hamalayi_Mountains_landing_place:
-			if (_sceneNumActors >= 22) {
-				_sceneActors[21]._pos.x = _sceneActors[21]._collisionPos.x = 6656 + 256;
-				_sceneActors[21]._pos.z = _sceneActors[21]._collisionPos.z = 768;
-			}
+			_sceneActors[21]._pos.x = _sceneActors[21]._collisionPos.x = 6656 + 256;
+			_sceneActors[21]._pos.z = _sceneActors[21]._collisionPos.z = 768;
 			break;
 		case LBA1SceneId::Principal_Island_outside_the_fortress:
-			if (_sceneNumActors >= 30) {
-				_sceneActors[29]._pos.z = _sceneActors[29]._collisionPos.z = 1795;
-			}
+			_sceneActors[29]._pos.z = _sceneActors[29]._collisionPos.z = 1795;
 #if 0
-			if (sceneNumZones >= 23) {
-				_sceneZones[15].mins.x = 1104;
-				_sceneZones[15].mins.z = 8448;
-				_sceneZones[15].maxs.x = 4336;
-				_sceneZones[15].maxs.z = 11488;
-				_sceneZones[16].mins.x = 21104;
-				_sceneZones[16].mins.z = 4608;
-				_sceneZones[16].maxs.x = 23824;
-				_sceneZones[16].maxs.z = 8080;
-				_sceneZones[22].mins.x = 6144;
-				_sceneZones[22].mins.z = 6144;
-				_sceneZones[22].maxs.x = 8865;
-				_sceneZones[22].maxs.z = 6881;
-			}
+			_sceneZones[15].mins.x = 1104;
+			_sceneZones[15].mins.z = 8448;
+			_sceneZones[15].maxs.x = 4336;
+			_sceneZones[15].maxs.z = 11488;
+			_sceneZones[16].mins.x = 21104;
+			_sceneZones[16].mins.z = 4608;
+			_sceneZones[16].maxs.x = 23824;
+			_sceneZones[16].maxs.z = 8080;
+			_sceneZones[22].mins.x = 6144;
+			_sceneZones[22].mins.z = 6144;
+			_sceneZones[22].maxs.x = 8865;
+			_sceneZones[22].maxs.z = 6881;
 #endif
 			break;
 		case LBA1SceneId::Tippet_Island_Secret_passage_scene_1:
@@ -470,7 +464,7 @@ void Scene::changeScene() {
 	if (_engine->isLBA1()) {
 		if (_useScenePatches) {
 			if (_currentSceneIdx == LBA1SceneId::Citadel_Island_Harbor && _needChangeScene == LBA1SceneId::Principal_Island_Harbor) {
-				if (_sceneNumZones >= 15) {
+				if (_sceneNumZones >= 15 && _sceneNumTracks >= 8) {
 					const ZoneStruct *zone = &_sceneZones[15];
 					const IVec3 &track = _sceneTracks[8];
 					IVec3 &pos = _zoneHeroPos;


Commit: a9a6d2957da070d2eae013db6a748958f238bc60
    https://github.com/scummvm/scummvm/commit/a9a6d2957da070d2eae013db6a748958f238bc60
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-12-31T12:03:38+01:00

Commit Message:
TWINE: minor comments

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


diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h
index 4f30522f267..6ee00acc42c 100644
--- a/engines/twine/scene/grid.h
+++ b/engines/twine/scene/grid.h
@@ -75,7 +75,9 @@ struct BrickEntry {
 #define GRID_SIZE_Z GRID_SIZE_X
 
 #define ISO_SCALE 512
+// xz
 #define BRICK_SIZE 512
+// y
 #define BRICK_HEIGHT 256
 
 // short max 32767 0x7FFF




More information about the Scummvm-git-logs mailing list