[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