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

mgerhardy martin.gerhardy at gmail.com
Tue Mar 23 21:23:35 UTC 2021


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

Summary:
0195b1c127 TWINE: fixed header guard names
5b7fa92807 TWINE: extracted holomap trajectory parsing into own class
6d9363d70f TWINE: fixed fla frame number parsing
e8aa1b31fd TWINE: use unsigned in computeHolomapPolygon
e6d8edadd1 TWINE: unified with disassembly


Commit: 0195b1c12719a40da771af0e6b2b36d0b37b1461
    https://github.com/scummvm/scummvm/commit/0195b1c12719a40da771af0e6b2b36d0b37b1461
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-03-23T22:22:46+01:00

Commit Message:
TWINE: fixed header guard names

Changed paths:
    engines/twine/parser/anim.h
    engines/twine/parser/body.h
    engines/twine/parser/brick.h
    engines/twine/parser/entity.h
    engines/twine/parser/parser.h
    engines/twine/parser/sprite.h
    engines/twine/renderer/redraw.cpp


diff --git a/engines/twine/parser/anim.h b/engines/twine/parser/anim.h
index 1c859fbf7a..c73f48ad83 100644
--- a/engines/twine/parser/anim.h
+++ b/engines/twine/parser/anim.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TWINE_ANIM_H
-#define TWINE_ANIM_H
+#ifndef TWINE_PARSER_ANIM_H
+#define TWINE_PARSER_ANIM_H
 
 #include "common/array.h"
 #include "common/stream.h"
diff --git a/engines/twine/parser/body.h b/engines/twine/parser/body.h
index 87234bfded..76abcada26 100644
--- a/engines/twine/parser/body.h
+++ b/engines/twine/parser/body.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TWINE_BODY_H
-#define TWINE_BODY_H
+#ifndef TWINE_PARSER_BODY_H
+#define TWINE_PARSER_BODY_H
 
 #include "common/array.h"
 #include "common/memstream.h"
diff --git a/engines/twine/parser/brick.h b/engines/twine/parser/brick.h
index 1c3160b5a8..44608edcb3 100644
--- a/engines/twine/parser/brick.h
+++ b/engines/twine/parser/brick.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TWINE_BRICK_H
-#define TWINE_BRICK_H
+#ifndef TWINE_PARSER_BRICK_H
+#define TWINE_PARSER_BRICK_H
 
 #include "common/memstream.h"
 #include "common/stream.h"
diff --git a/engines/twine/parser/entity.h b/engines/twine/parser/entity.h
index 14a6ad05d8..5cef8863e4 100644
--- a/engines/twine/parser/entity.h
+++ b/engines/twine/parser/entity.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TWINE_ENTITY_H
-#define TWINE_ENTITY_H
+#ifndef TWINE_PARSER_ENTITY_H
+#define TWINE_PARSER_ENTITY_H
 
 #include "common/array.h"
 #include "common/memstream.h"
diff --git a/engines/twine/parser/parser.h b/engines/twine/parser/parser.h
index 6b09b029d3..d8d6b5343f 100644
--- a/engines/twine/parser/parser.h
+++ b/engines/twine/parser/parser.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TWINE_PARSER_H
-#define TWINE_PARSER_H
+#ifndef TWINE_PARSER_PARSER_H
+#define TWINE_PARSER_PARSER_H
 
 #include "common/array.h"
 #include "common/memstream.h"
diff --git a/engines/twine/parser/sprite.h b/engines/twine/parser/sprite.h
index fd6f0f6d87..f8c61cde2d 100644
--- a/engines/twine/parser/sprite.h
+++ b/engines/twine/parser/sprite.h
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TWINE_SPRITE_H
-#define TWINE_SPRITE_H
+#ifndef TWINE_PARSER_SPRITE_H
+#define TWINE_PARSER_SPRITE_H
 
 #include "common/array.h"
 #include "common/memstream.h"
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index 6a10ca0100..1856bdd342 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -457,13 +457,13 @@ void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgR
 }
 
 void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) {
-	int32 actorIdx = drawCmd.actorIdx;
-	ExtraListStruct *extra = &_engine->_extra->extraList[actorIdx];
+	int32 extraIdx = drawCmd.actorIdx;
+	ExtraListStruct *extra = &_engine->_extra->extraList[extraIdx];
 
 	_engine->_renderer->projectPositionOnScreen(extra->pos - _engine->_grid->camera);
 
 	if (extra->info0 & EXTRA_SPECIAL_MASK) {
-		_engine->_extra->drawExtraSpecial(actorIdx, _engine->_renderer->projPos.x, _engine->_renderer->projPos.y);
+		_engine->_extra->drawExtraSpecial(extraIdx, _engine->_renderer->projPos.x, _engine->_renderer->projPos.y);
 	} else {
 		const SpriteData &spritePtr = _engine->_resources->spriteData[extra->info0];
 		const int32 spriteWidth = spritePtr.surface().w;


Commit: 5b7fa92807c57f53b6d835a8001f64dd11717003
    https://github.com/scummvm/scummvm/commit/5b7fa92807c57f53b6d835a8001f64dd11717003
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-03-23T22:22:46+01:00

Commit Message:
TWINE: extracted holomap trajectory parsing into own class

Changed paths:
    engines/twine/holomap.cpp
    engines/twine/holomap.h
    engines/twine/module.mk
    engines/twine/resources/resources.cpp
    engines/twine/resources/resources.h


diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index a6790a5ccc..741652cebe 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -28,6 +28,7 @@
 #include "twine/audio/sound.h"
 #include "twine/menu/interface.h"
 #include "twine/parser/anim.h"
+#include "twine/parser/holomap.h"
 #include "twine/renderer/redraw.h"
 #include "twine/renderer/renderer.h"
 #include "twine/renderer/screens.h"
@@ -267,37 +268,11 @@ void Holomap::renderHolomapModel(const uint8 *bodyPtr, int32 x, int32 y, int32 z
 	_engine->_renderer->renderIsoModel(_engine->_renderer->destPos.x, _engine->_renderer->destPos.y, _engine->_renderer->destPos.z, x, y, 0, bodyPtr);
 }
 
-Holomap::TrajectoryData Holomap::loadTrajectoryData(int32 trajectoryIdx) {
-	Common::MemoryReadStream stream(_engine->_resources->holomapPointAnimPtr, _engine->_resources->holomapPointAnimSize);
-	for (int32 trajIdx = 0; trajIdx < trajectoryIdx; ++trajIdx) {
-		if (stream.eos() || stream.err()) {
-			return TrajectoryData();
-		}
-		stream.skip(12);
-		const int16 animVal = stream.readSint16LE();
-		stream.skip(4 * animVal);
-	}
-	TrajectoryData data;
-	data.locationIdx = stream.readSint16LE();
-	data.trajLocationIdx = stream.readSint16LE();
-	data.vehicleIdx = stream.readSint16LE();
-	data.pos.x = stream.readSint16LE();
-	data.pos.y = stream.readSint16LE();
-	data.pos.z = stream.readSint16LE();
-	data.numAnimFrames = stream.readSint16LE();
-	assert(data.numAnimFrames < ARRAYSIZE(data.positions));
-	for (int32 i = 0; i < data.numAnimFrames; ++i) {
-		data.positions[i].x = stream.readSint16LE();
-		data.positions[i].y = stream.readSint16LE();
-	}
-	return data;
-}
-
 void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
 	debug("Draw trajectory index %i", trajectoryIndex);
 
-	const Holomap::TrajectoryData &data = loadTrajectoryData(trajectoryIndex);
-	if (!data.isValid()) {
+	const Trajectory *data = _engine->_resources->getTrajectory(trajectoryIndex);
+	if (data == nullptr) {
 		warning("Failed to load trajectory data for index %i", trajectoryIndex);
 		return;
 	}
@@ -310,20 +285,20 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
 	loadHolomapGFX();
 	ScopedEngineFreeze timeFreeze(_engine);
 	_engine->_renderer->setCameraPosition(400, 240, 128, 1024, 1024);
-	_engine->_renderer->setCameraAngle(0, 0, 0, data.pos.x, data.pos.y, data.pos.z, 5300);
+	_engine->_renderer->setCameraAngle(0, 0, 0, data->pos.x, data->pos.y, data->pos.z, 5300);
 
 	renderHolomapSurfacePolygons();
 
-	const Location &loc = _locations[data.locationIdx];
+	const Location &loc = _locations[data->locationIdx];
 	renderHolomapModel(_engine->_resources->holomapPointModelPtr, loc.angle.x, loc.angle.y, 0);
 
 	_engine->flip();
 	ActorMoveStruct move;
 	AnimTimerDataStruct animTimerData;
 	AnimData animData;
-	animData.loadFromHQR(Resources::HQR_RESS_FILE, data.getAnimation());
+	animData.loadFromHQR(Resources::HQR_RESS_FILE, data->getAnimation());
 	uint8 *modelPtr = nullptr;
-	HQR::getAllocEntry(&modelPtr, Resources::HQR_RESS_FILE, data.getModel());
+	HQR::getAllocEntry(&modelPtr, Resources::HQR_RESS_FILE, data->getModel());
 	uint frameNumber = 0;
 	int32 frameTime = _engine->lbaTime;
 	int16 trajAnimFrameIdx = 0;
@@ -369,21 +344,21 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
 		_engine->_renderer->renderIsoModel(0, 0, 0, 0, newAngle, 0, modelPtr);
 		_engine->copyBlockPhys(rect);
 		_engine->_renderer->setCameraPosition(400, 240, 128, 1024, 1024);
-		_engine->_renderer->setCameraAngle(0, 0, 0, data.pos.x, data.pos.y, data.pos.z, 5300);
-		_engine->_renderer->setLightVector(data.pos.x, data.pos.y, 0);
+		_engine->_renderer->setCameraAngle(0, 0, 0, data->pos.x, data->pos.y, data->pos.z, 5300);
+		_engine->_renderer->setLightVector(data->pos.x, data->pos.y, 0);
 		if (frameTime + 40 <= _engine->lbaTime) {
 			frameTime = _engine->lbaTime;
 			int32 modelX;
 			int32 modelY;
-			if (trajAnimFrameIdx < data.numAnimFrames) {
-				modelX = data.positions[trajAnimFrameIdx].x;
-				modelY = data.positions[trajAnimFrameIdx].y;
+			if (trajAnimFrameIdx < data->numAnimFrames) {
+				modelX = data->positions[trajAnimFrameIdx].x;
+				modelY = data->positions[trajAnimFrameIdx].y;
 			} else {
-				if (data.numAnimFrames < trajAnimFrameIdx) {
+				if (data->numAnimFrames < trajAnimFrameIdx) {
 					break;
 				}
-				modelX = _locations[data.trajLocationIdx].angle.x;
-				modelY = _locations[data.trajLocationIdx].angle.y;
+				modelX = _locations[data->trajLocationIdx].angle.x;
+				modelY = _locations[data->trajLocationIdx].angle.y;
 			}
 			renderHolomapModel(_engine->_resources->holomapPointModelPtr, modelX, modelY, 0);
 			++trajAnimFrameIdx;
diff --git a/engines/twine/holomap.h b/engines/twine/holomap.h
index dae01cf949..369204440c 100644
--- a/engines/twine/holomap.h
+++ b/engines/twine/holomap.h
@@ -50,18 +50,6 @@ private:
 		char name[30] = "";
 	};
 
-	enum HolomapVehicle {
-		FerryBoat = 31,
-		Motorbike = 33,
-		Car = 35,
-		FishingBoat = 37,
-		Catamaran = 39,
-		Hovercraft = 41,
-		Dino = 43,
-		ArmyBoat = 45,
-		HamalayiTransporter = 47
-	};
-
 	IVec3 _holomapSurface[561];
 
 	// original game size: 2244 (lba1)
@@ -80,35 +68,6 @@ private:
 	HolomapProjectedPos _projectedSurfacePositions[561];
 	int _projectedSurfaceIndex = 0;
 
-	struct TrajectoryData {
-		int16 locationIdx = -1;
-		int16 trajLocationIdx = -1;
-		int16 vehicleIdx = -1;
-		IVec3 pos;
-		int16 numAnimFrames = 0;
-		struct TrajectoryPos {
-			int16 x = 0;
-			int16 y = 0;
-		};
-		TrajectoryPos positions[512];
-
-		bool isValid() const {
-			return locationIdx != -1;
-		}
-
-		/**
-		 * The HQR index of the vehicle model for the holomap
-		 * @note Multiplied by 2 because the model index is always followed by the corresponding animation index for that model
-		 */
-		int32 getModel() const {
-			return 2 * vehicleIdx + HolomapVehicle::FerryBoat;
-		}
-
-		int32 getAnimation() const {
-			return getModel() + 1;
-		}
-	};
-
 	int32 _numLocations = 0;
 	Location _locations[NUM_LOCATIONS];
 
@@ -119,7 +78,6 @@ private:
 	int32 getNextHolomapLocation(int32 currentLocation, int32 dir) const;
 
 	void renderLocations(int xRot, int yRot, int zRot, bool lower);
-	TrajectoryData loadTrajectoryData(int32 trajectoryIdx);
 
 	void renderHolomapModel(const uint8 *bodyPtr, int32 x, int32 y, int32 zPos);
 
diff --git a/engines/twine/module.mk b/engines/twine/module.mk
index 6ca7858dff..7719c0595e 100644
--- a/engines/twine/module.mk
+++ b/engines/twine/module.mk
@@ -15,8 +15,9 @@ MODULE_OBJS := \
 	\
 	parser/anim.o \
 	parser/body.o \
-	parser/entity.o \
 	parser/brick.o \
+	parser/entity.o \
+	parser/holomap.o \
 	parser/parser.o \
 	parser/sprite.o \
 	\
diff --git a/engines/twine/resources/resources.cpp b/engines/twine/resources/resources.cpp
index 1931c0397b..2ff14cd1a4 100644
--- a/engines/twine/resources/resources.cpp
+++ b/engines/twine/resources/resources.cpp
@@ -51,6 +51,7 @@ Resources::~Resources() {
 	free(holomapSurfacePtr);
 	free(holomapImagePtr);
 	free(holomapTwinsenModelPtr);
+	free(holomapPointModelPtr);
 	free(holomapTwinsenArrowPtr);
 	free(holomapArrowPtr);
 	free(_engine->_screens->mainPalette);
@@ -198,10 +199,10 @@ void Resources::initResources() {
 		error("Failed to load holomap twinsen arrow model");
 	}
 
-	holomapPointAnimSize = HQR::getAllocEntry(&holomapPointAnimPtr, Resources::HQR_RESS_FILE, RESSHQR_HOLOPOINTANIM);
-	if (holomapPointAnimSize == 0) {
-		error("Failed to load holomap point anim data");
+	if (!_trajectories.loadFromHQR(Resources::HQR_RESS_FILE, RESSHQR_HOLOPOINTANIM)) {
+		error("Failed to parse trajectory data");
 	}
+	debug("preload %i trajectories", (int)_trajectories.getTrajectories().size());
 
 	preloadSprites();
 	preloadAnimations();
@@ -211,6 +212,10 @@ void Resources::initResources() {
 	loadFlaInfo();
 }
 
+const Trajectory *Resources::getTrajectory(int index) const {
+	return _trajectories.getTrajectory(index);
+}
+
 void Resources::loadFlaInfo() {
 	uint8 *content = nullptr;
 	const int32 size = HQR::getAllocEntry(&content, Resources::HQR_RESS_FILE, RESSHQR_FLAINFO);
diff --git a/engines/twine/resources/resources.h b/engines/twine/resources/resources.h
index bad5cfa3ff..7e88964e44 100644
--- a/engines/twine/resources/resources.h
+++ b/engines/twine/resources/resources.h
@@ -26,6 +26,7 @@
 #include "common/hashmap.h"
 #include "common/scummsys.h"
 #include "twine/parser/sprite.h"
+#include "twine/parser/holomap.h"
 #include "twine/scene/gamestate.h"
 #include "twine/resources/hqr.h"
 #include "twine/scene/scene.h"
@@ -150,6 +151,8 @@ private:
 	using MovieInfoMap = Common::HashMap<Common::String, Common::Array<int32>>;
 	MovieInfoMap _flaMovieFrames;
 
+	TrajectoryData _trajectories;
+
 public:
 	Resources(TwinEEngine *engine) : _engine(engine) {}
 	~Resources();
@@ -199,12 +202,12 @@ public:
 	uint8 *holomapTwinsenArrowPtr = nullptr;
 	uint32 holomapArrowSize = 0;
 	uint8 *holomapArrowPtr = nullptr;
-	uint32 holomapPointAnimSize = 0;
-	uint8 *holomapPointAnimPtr = nullptr;
 
 	/** Initialize resource pointers */
 	void initResources();
 
+	const Trajectory* getTrajectory(int index) const;
+
 	// main palette
 	static constexpr const char *HQR_RESS_FILE = "ress.hqr";
 	// dialoges


Commit: 6d9363d70ffc222011bb43009de4ea1807253ec3
    https://github.com/scummvm/scummvm/commit/6d9363d70ffc222011bb43009de4ea1807253ec3
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-03-23T22:22:46+01:00

Commit Message:
TWINE: fixed fla frame number parsing

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


diff --git a/engines/twine/flamovies.cpp b/engines/twine/flamovies.cpp
index a1a867c305..cfd0772c8f 100644
--- a/engines/twine/flamovies.cpp
+++ b/engines/twine/flamovies.cpp
@@ -159,8 +159,7 @@ void FlaMovies::scaleFla2x() {
 void FlaMovies::processFrame() {
 	FLASampleStruct sample;
 
-	_file.read(&_frameData.videoSize, 1);
-	_file.read(&_frameData.dummy, 1);
+	_file.read(&_frameData.videoSize, 2);
 	_file.read(&_frameData.frameVar0, 4);
 	if (_frameData.frameVar0 > _engine->imageBuffer.w * _engine->imageBuffer.h) {
 		warning("Skipping video frame - it would exceed the screen buffer: %i", _frameData.frameVar0);
diff --git a/engines/twine/flamovies.h b/engines/twine/flamovies.h
index f45dd7b29b..a761076c49 100644
--- a/engines/twine/flamovies.h
+++ b/engines/twine/flamovies.h
@@ -53,9 +53,7 @@ struct FLAHeaderStruct {
 /** FLA movie frame structure */
 struct FLAFrameDataStruct {
 	/** Current frame size */
-	int8 videoSize = 0;
-	/** Dummy variable */
-	int8 dummy = 0;
+	int16 videoSize = 0;
 	/** Unknown frameVar0 */
 	int32 frameVar0 = 0;
 };


Commit: e8aa1b31fdecd0af8f215769557ef287733ff23b
    https://github.com/scummvm/scummvm/commit/e8aa1b31fdecd0af8f215769557ef287733ff23b
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-03-23T22:22:46+01:00

Commit Message:
TWINE: use unsigned in computeHolomapPolygon

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


diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 0eea9135d5..873c106156 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -213,23 +213,24 @@ void Renderer::setCameraAngle(int32 transPosX, int32 transPosY, int32 transPosZ,
 }
 
 IVec3 Renderer::getHolomapRotation(const int32 angleX, const int32 angleY, const int32 angleZ) const {
-	int32 rotX;
-	int32 rotY;
-	int32 rotZ;
+	int32 rotX = angleX * 2 + 1000;
 
-	rotX = angleX * 2 + 1000;
+	int32 rotY;
 	if (angleY == ANGLE_0) {
 		rotY = ANGLE_0;
 	} else {
 		rotY = -shadeAngleTable[ClampAngle(angleY)] * rotX / SCENE_SIZE_HALF;
 		rotX = shadeAngleTable[ClampAngle(angleY + ANGLE_90)] * rotX / SCENE_SIZE_HALF;
 	}
+
+	int32 rotZ;
 	if (angleZ == ANGLE_0) {
 		rotZ = ANGLE_0;
 	} else {
 		rotZ = -shadeAngleTable[ClampAngle(angleZ)] * rotX / SCENE_SIZE_HALF;
 		rotX = shadeAngleTable[ClampAngle(angleZ + ANGLE_90)] * rotX / SCENE_SIZE_HALF;
 	}
+
 	const int32 row1X = _baseMatrix.row1[0] * rotX;
 	const int32 row1Y = _baseMatrix.row1[1] * rotY;
 	const int32 row1Z = _baseMatrix.row1[2] * rotZ;
@@ -1559,7 +1560,7 @@ void Renderer::computeHolomapPolygon(int32 top, int32 x1, int32 bottom, int32 x2
 	if (minX < x2) {
 		const uint32 deltaX = (x2 - minX) * 0x10000;
 		const uint32 deltaRatio = deltaX / deltaY;
-		int32 iVar01 = (deltaRatio % deltaY >> 1) + 0x7fff;
+		uint32 iVar01 = (deltaRatio % deltaY >> 1) + 0x7fff;
 		for (uint32 y = 0; y <= deltaY; ++y) {
 			if (currentPolygonTabEntry < _polyTab || currentPolygonTabEntry >= _polyTab + _polyTabSize) {
 				currentPolygonTabEntry++;
@@ -1576,7 +1577,7 @@ void Renderer::computeHolomapPolygon(int32 top, int32 x1, int32 bottom, int32 x2
 	} else {
 		const uint32 deltaX = (minX - x2) * 0x10000;
 		const uint32 deltaRatio = deltaX / deltaY;
-		int32 iVar01 = (deltaX % deltaY >> 1) + 0x7fff;
+		uint32 iVar01 = (deltaX % deltaY >> 1) + 0x7fff;
 		for (uint32 y = 0; y <= deltaY; ++y) {
 			if (currentPolygonTabEntry < _polyTab || currentPolygonTabEntry >= _polyTab + _polyTabSize) {
 				currentPolygonTabEntry++;


Commit: e6d8edadd1500b39268e7cd2e8ca68ef956c3e26
    https://github.com/scummvm/scummvm/commit/e6d8edadd1500b39268e7cd2e8ca68ef956c3e26
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-03-23T22:22:46+01:00

Commit Message:
TWINE: unified with disassembly

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


diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 873c106156..2ffde2e119 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1597,6 +1597,10 @@ void Renderer::computeHolomapPolygon(int32 top, int32 x1, int32 bottom, int32 x2
 void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2, const Vertex &angles1, const Vertex &angles2, int32 &top, int32 &bottom) {
 	const int32 yBottom = vertex1.y;
 	const int32 yTop = vertex2.y;
+	if (yBottom == yTop) {
+		return;
+	}
+
 	if (yBottom < yTop) {
 		if (yBottom < top) {
 			top = yBottom;
@@ -1604,20 +1608,19 @@ void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2,
 		if (bottom < yTop) {
 			bottom = yTop;
 		}
-		computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, _holomap_polytab_1_1);
-		computeHolomapPolygon(yTop, (uint16)angles2.x, yBottom, (uint16)angles1.x, _holomap_polytab_1_2);
-		computeHolomapPolygon(yTop, (uint16)angles2.y, yBottom, (uint16)angles1.y, _holomap_polytab_1_3);
-	} else if (yBottom > yTop) {
+		computeHolomapPolygon(yTop, vertex2.x, yBottom, vertex1.x, _holomap_polytab_1_1);
+		computeHolomapPolygon(yTop, (uint32)(uint16)angles2.x, yBottom, (uint32)(uint16)angles1.x, _holomap_polytab_1_2);
+	} else {
 		if (bottom < yBottom) {
 			bottom = yBottom;
 		}
 		if (yTop < top) {
 			top = yTop;
 		}
-		computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, _holomap_polytab_2_1);
-		computeHolomapPolygon(yTop, (uint16)angles2.x, yBottom, (uint16)angles1.x, _holomap_polytab_2_2);
-		computeHolomapPolygon(yTop, (uint16)angles2.y, yBottom, (uint16)angles1.y, _holomap_polytab_2_3);
+		computeHolomapPolygon(yTop, vertex2.x, yBottom, vertex1.x, _holomap_polytab_2_1);
+		computeHolomapPolygon(yTop, (uint32)(uint16)angles2.x, yBottom, (uint32)(uint16)angles1.x, _holomap_polytab_2_2);
 	}
+	computeHolomapPolygon(yTop, (uint32)(uint16)angles2.y, yBottom, (uint32)(uint16)angles1.y, _holomap_polytab_2_3);
 }
 
 void Renderer::renderHolomapVertices(const Vertex vertexCoordinates[3], const Vertex vertexAngles[3]) {




More information about the Scummvm-git-logs mailing list