[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