[Scummvm-git-logs] scummvm master -> 2000b07b6b865bb477822d9ab7a5c876fe6258f5

mgerhardy martin.gerhardy at gmail.com
Fri Jan 8 18:50:44 UTC 2021


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

Summary:
b1bc4a7f0c TWINE: fixed typo
dc3cebc6d1 TWINE: added SCENE_SIZE_HALF define
4f500d942c TWINE: replaced a new bit shifts
baaeafd3ae TWINE: cleanup in extra code
7f473240b0 TWINE: named unknown flag and replaced magic number
7f0d8864e5 TWINE: renamed method parameters
f27f279342 TWINE: replaced magic numbers
25b9cdfb3a TWINE: fixed doxygen
e402827f3b TWINE: introduced color constants
ea82317891 TWINE: fixed credits scene scripted text
2000b07b6b TWINE: renamed global variable


Commit: b1bc4a7f0c53003d0adbeca921a8bc1a2734ec21
    https://github.com/scummvm/scummvm/commit/b1bc4a7f0c53003d0adbeca921a8bc1a2734ec21
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: fixed typo

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


diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 56214331fb..064b2d8860 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -56,7 +56,7 @@ void Renderer::init(int32 w, int32 h) {
 }
 
 int32 Renderer::projectPositionOnScreen(int32 cX, int32 cY, int32 cZ) {
-	if (isUsingOrhoProjection) {
+	if (isUsingOrthoProjection) {
 		projPosX = ((cX - cZ) * 24) / BRICK_SIZE + orthoProjX;
 		projPosY = (((cX + cZ) * 12) - cY * 30) / BRICK_SIZE + orthoProjY;
 		projPosZ = cZ - cY - cX;
@@ -93,7 +93,7 @@ void Renderer::setCameraPosition(int32 x, int32 y, int32 cX, int32 cY, int32 cZ)
 	cameraPosY = cY;
 	cameraPosZ = cZ;
 
-	isUsingOrhoProjection = false;
+	isUsingOrthoProjection = false;
 }
 
 void Renderer::setBaseTranslation(int32 x, int32 y, int32 z) {
@@ -107,7 +107,7 @@ void Renderer::setOrthoProjection(int32 x, int32 y, int32 z) {
 	orthoProjY = y;
 	orthoProjZ = z;
 
-	isUsingOrhoProjection = true;
+	isUsingOrthoProjection = true;
 }
 
 void Renderer::getBaseRotationPosition(int32 x, int32 y, int32 z) {
@@ -1183,7 +1183,7 @@ bool Renderer::renderModelElements(int32 numOfPrimitives, const uint8 *polygonPt
 			CmdRenderSphere *sphere = (CmdRenderSphere *)pointer;
 			int32 radius = sphere->radius;
 
-			//if (isUsingOrhoProjection) {
+			//if (isUsingOrthoProjection) {
 				radius = (radius * 34) >> 9;
 			//} else {
 			//	radius = (radius * cameraPosY) / (cameraPosX + *(const int16 *)pointer); // TODO: this does not make sense.
@@ -1259,7 +1259,7 @@ bool Renderer::renderAnimatedModel(ModelData *modelData, const uint8 *bodyPtr, R
 	const pointTab *pointPtr = &modelData->computedPoints[0];
 	pointTab *pointPtrDest = &modelData->flattenPoints[0];
 
-	if (isUsingOrhoProjection) { // use standard projection
+	if (isUsingOrthoProjection) { // use standard projection
 		do {
 			const int32 coX = pointPtr->x + renderX;
 			const int32 coY = pointPtr->y + renderY;
@@ -1439,7 +1439,7 @@ bool Renderer::renderIsoModel(int32 x, int32 y, int32 z, int32 angleX, int32 ang
 	_engine->_redraw->renderRect.right = SCENE_SIZE_MIN;
 	_engine->_redraw->renderRect.bottom = SCENE_SIZE_MIN;
 
-	if (isUsingOrhoProjection) {
+	if (isUsingOrthoProjection) {
 		renderX = x;
 		renderY = y;
 		renderZ = z;
diff --git a/engines/twine/renderer/renderer.h b/engines/twine/renderer/renderer.h
index 36f030888f..18c4994702 100644
--- a/engines/twine/renderer/renderer.h
+++ b/engines/twine/renderer/renderer.h
@@ -367,7 +367,7 @@ private:
 	int16 *_polyTab = nullptr;
 	int16 *_polyTab2 = nullptr;
 
-	bool isUsingOrhoProjection = false;
+	bool isUsingOrthoProjection = false;
 
 	void renderPolygonsCopper(uint8 *out, int vtop, int32 vsize, int32 color) const;
 	void renderPolygonsBopper(uint8 *out, int vtop, int32 vsize, int32 color) const;


Commit: dc3cebc6d10f3186f6a86d899ebe8939129e1856
    https://github.com/scummvm/scummvm/commit/dc3cebc6d10f3186f6a86d899ebe8939129e1856
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: added SCENE_SIZE_HALF define

Changed paths:
    engines/twine/renderer/renderer.cpp
    engines/twine/scene/grid.h
    engines/twine/scene/movements.cpp


diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 064b2d8860..312ab7bf21 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -111,9 +111,9 @@ void Renderer::setOrthoProjection(int32 x, int32 y, int32 z) {
 }
 
 void Renderer::getBaseRotationPosition(int32 x, int32 y, int32 z) {
-	destX = (baseMatrix.row1[0] * x + baseMatrix.row1[1] * y + baseMatrix.row1[2] * z) / 16384;
-	destY = (baseMatrix.row2[0] * x + baseMatrix.row2[1] * y + baseMatrix.row2[2] * z) / 16384;
-	destZ = (baseMatrix.row3[0] * x + baseMatrix.row3[1] * y + baseMatrix.row3[2] * z) / 16384;
+	destX = (baseMatrix.row1[0] * x + baseMatrix.row1[1] * y + baseMatrix.row1[2] * z) / SCENE_SIZE_HALF;
+	destY = (baseMatrix.row2[0] * x + baseMatrix.row2[1] * y + baseMatrix.row2[2] * z) / SCENE_SIZE_HALF;
+	destZ = (baseMatrix.row3[0] * x + baseMatrix.row3[1] * y + baseMatrix.row3[2] * z) / SCENE_SIZE_HALF;
 }
 
 void Renderer::setBaseRotation(int32 x, int32 y, int32 z) {
@@ -121,23 +121,23 @@ void Renderer::setBaseRotation(int32 x, int32 y, int32 z) {
 	const double Yradians = (double)((ANGLE_90 - y) % ANGLE_360) * 2 * M_PI / ANGLE_360;
 	const double Zradians = (double)((ANGLE_90 - z) % ANGLE_360) * 2 * M_PI / ANGLE_360;
 
-	baseMatrix.row1[0] = (int32)(sin(Zradians) * sin(Yradians) * 16384);
-	baseMatrix.row1[1] = (int32)(-cos(Zradians) * 16384);
-	baseMatrix.row1[2] = (int32)(sin(Zradians) * cos(Yradians) * 16384);
-	baseMatrix.row2[0] = (int32)(cos(Zradians) * sin(Xradians) * 16384);
-	baseMatrix.row2[1] = (int32)(sin(Zradians) * sin(Xradians) * 16384);
-	baseMatrix.row3[0] = (int32)(cos(Zradians) * cos(Xradians) * 16384);
-	baseMatrix.row3[1] = (int32)(sin(Zradians) * cos(Xradians) * 16384);
+	baseMatrix.row1[0] = (int32)(sin(Zradians) * sin(Yradians) * SCENE_SIZE_HALFF);
+	baseMatrix.row1[1] = (int32)(-cos(Zradians) * SCENE_SIZE_HALFF);
+	baseMatrix.row1[2] = (int32)(sin(Zradians) * cos(Yradians) * SCENE_SIZE_HALFF);
+	baseMatrix.row2[0] = (int32)(cos(Zradians) * sin(Xradians) * SCENE_SIZE_HALFF);
+	baseMatrix.row2[1] = (int32)(sin(Zradians) * sin(Xradians) * SCENE_SIZE_HALFF);
+	baseMatrix.row3[0] = (int32)(cos(Zradians) * cos(Xradians) * SCENE_SIZE_HALFF);
+	baseMatrix.row3[1] = (int32)(sin(Zradians) * cos(Xradians) * SCENE_SIZE_HALFF);
 
 	int32 matrixElem = baseMatrix.row2[0];
 
-	baseMatrix.row2[0] = (int32)(sin(Yradians) * matrixElem + 16384 * cos(Yradians) * cos(Xradians));
-	baseMatrix.row2[2] = (int32)(cos(Yradians) * matrixElem - 16384 * sin(Yradians) * cos(Xradians));
+	baseMatrix.row2[0] = (int32)(sin(Yradians) * matrixElem + SCENE_SIZE_HALFF * cos(Yradians) * cos(Xradians));
+	baseMatrix.row2[2] = (int32)(cos(Yradians) * matrixElem - SCENE_SIZE_HALFF * sin(Yradians) * cos(Xradians));
 
 	matrixElem = baseMatrix.row3[0];
 
-	baseMatrix.row3[0] = (int32)(sin(Yradians) * matrixElem - 16384 * sin(Xradians) * cos(Yradians));
-	baseMatrix.row3[2] = (int32)(cos(Yradians) * matrixElem + 16384 * sin(Xradians) * sin(Yradians));
+	baseMatrix.row3[0] = (int32)(sin(Yradians) * matrixElem - SCENE_SIZE_HALFF * sin(Xradians) * cos(Yradians));
+	baseMatrix.row3[2] = (int32)(cos(Yradians) * matrixElem + SCENE_SIZE_HALFF * sin(Xradians) * sin(Yradians));
 
 	getBaseRotationPosition(baseTransPosX, baseTransPosY, baseTransPosZ);
 
@@ -147,9 +147,9 @@ void Renderer::setBaseRotation(int32 x, int32 y, int32 z) {
 }
 
 void Renderer::getCameraAnglePositions(int32 x, int32 y, int32 z) {
-	destX = (baseMatrix.row1[0] * x + baseMatrix.row2[0] * y + baseMatrix.row3[0] * z) / 16384;
-	destY = (baseMatrix.row1[1] * x + baseMatrix.row2[1] * y + baseMatrix.row3[1] * z) / 16384;
-	destZ = (baseMatrix.row1[2] * x + baseMatrix.row2[2] * y + baseMatrix.row3[2] * z) / 16384;
+	destX = (baseMatrix.row1[0] * x + baseMatrix.row2[0] * y + baseMatrix.row3[0] * z) / SCENE_SIZE_HALF;
+	destY = (baseMatrix.row1[1] * x + baseMatrix.row2[1] * y + baseMatrix.row3[1] * z) / SCENE_SIZE_HALF;
+	destZ = (baseMatrix.row1[2] * x + baseMatrix.row2[2] * y + baseMatrix.row3[2] * z) / SCENE_SIZE_HALF;
 }
 
 void Renderer::setCameraAngle(int32 transPosX, int32 transPosY, int32 transPosZ, int32 rotPosX, int32 rotPosY, int32 rotPosZ, int32 param6) {
@@ -182,12 +182,12 @@ void Renderer::applyRotation(Matrix *targetMatrix, const Matrix *currentMatrix)
 		matrix1.row2[0] = currentMatrix->row2[0];
 		matrix1.row3[0] = currentMatrix->row3[0];
 
-		matrix1.row1[1] = (currentMatrix->row1[2] * angleVar2 + currentMatrix->row1[1] * angleVar1) / 16384;
-		matrix1.row1[2] = (currentMatrix->row1[2] * angleVar1 - currentMatrix->row1[1] * angleVar2) / 16384;
-		matrix1.row2[1] = (currentMatrix->row2[2] * angleVar2 + currentMatrix->row2[1] * angleVar1) / 16384;
-		matrix1.row2[2] = (currentMatrix->row2[2] * angleVar1 - currentMatrix->row2[1] * angleVar2) / 16384;
-		matrix1.row3[1] = (currentMatrix->row3[2] * angleVar2 + currentMatrix->row3[1] * angleVar1) / 16384;
-		matrix1.row3[2] = (currentMatrix->row3[2] * angleVar1 - currentMatrix->row3[1] * angleVar2) / 16384;
+		matrix1.row1[1] = (currentMatrix->row1[2] * angleVar2 + currentMatrix->row1[1] * angleVar1) / SCENE_SIZE_HALF;
+		matrix1.row1[2] = (currentMatrix->row1[2] * angleVar1 - currentMatrix->row1[1] * angleVar2) / SCENE_SIZE_HALF;
+		matrix1.row2[1] = (currentMatrix->row2[2] * angleVar2 + currentMatrix->row2[1] * angleVar1) / SCENE_SIZE_HALF;
+		matrix1.row2[2] = (currentMatrix->row2[2] * angleVar1 - currentMatrix->row2[1] * angleVar2) / SCENE_SIZE_HALF;
+		matrix1.row3[1] = (currentMatrix->row3[2] * angleVar2 + currentMatrix->row3[1] * angleVar1) / SCENE_SIZE_HALF;
+		matrix1.row3[2] = (currentMatrix->row3[2] * angleVar1 - currentMatrix->row3[1] * angleVar2) / SCENE_SIZE_HALF;
 	} else {
 		matrix1 = *currentMatrix;
 	}
@@ -202,12 +202,12 @@ void Renderer::applyRotation(Matrix *targetMatrix, const Matrix *currentMatrix)
 		matrix2.row2[2] = matrix1.row2[2];
 		matrix2.row3[2] = matrix1.row3[2];
 
-		matrix2.row1[0] = (matrix1.row1[1] * angleVar2 + matrix1.row1[0] * angleVar1) / 16384;
-		matrix2.row1[1] = (matrix1.row1[1] * angleVar1 - matrix1.row1[0] * angleVar2) / 16384;
-		matrix2.row2[0] = (matrix1.row2[1] * angleVar2 + matrix1.row2[0] * angleVar1) / 16384;
-		matrix2.row2[1] = (matrix1.row2[1] * angleVar1 - matrix1.row2[0] * angleVar2) / 16384;
-		matrix2.row3[0] = (matrix1.row3[1] * angleVar2 + matrix1.row3[0] * angleVar1) / 16384;
-		matrix2.row3[1] = (matrix1.row3[1] * angleVar1 - matrix1.row3[0] * angleVar2) / 16384;
+		matrix2.row1[0] = (matrix1.row1[1] * angleVar2 + matrix1.row1[0] * angleVar1) / SCENE_SIZE_HALF;
+		matrix2.row1[1] = (matrix1.row1[1] * angleVar1 - matrix1.row1[0] * angleVar2) / SCENE_SIZE_HALF;
+		matrix2.row2[0] = (matrix1.row2[1] * angleVar2 + matrix1.row2[0] * angleVar1) / SCENE_SIZE_HALF;
+		matrix2.row2[1] = (matrix1.row2[1] * angleVar1 - matrix1.row2[0] * angleVar2) / SCENE_SIZE_HALF;
+		matrix2.row3[0] = (matrix1.row3[1] * angleVar2 + matrix1.row3[0] * angleVar1) / SCENE_SIZE_HALF;
+		matrix2.row3[1] = (matrix1.row3[1] * angleVar1 - matrix1.row3[0] * angleVar2) / SCENE_SIZE_HALF;
 	} else {
 		matrix2 = matrix1;
 	}
@@ -222,13 +222,13 @@ void Renderer::applyRotation(Matrix *targetMatrix, const Matrix *currentMatrix)
 		targetMatrix->row2[1] = matrix2.row2[1];
 		targetMatrix->row3[1] = matrix2.row3[1];
 
-		targetMatrix->row1[0] = (matrix2.row1[0] * angleVar1 - matrix2.row1[2] * angleVar2) / 16384;
-		targetMatrix->row1[2] = (matrix2.row1[0] * angleVar2 + matrix2.row1[2] * angleVar1) / 16384;
-		targetMatrix->row2[0] = (matrix2.row2[0] * angleVar1 - matrix2.row2[2] * angleVar2) / 16384;
-		targetMatrix->row2[2] = (matrix2.row2[0] * angleVar2 + matrix2.row2[2] * angleVar1) / 16384;
+		targetMatrix->row1[0] = (matrix2.row1[0] * angleVar1 - matrix2.row1[2] * angleVar2) / SCENE_SIZE_HALF;
+		targetMatrix->row1[2] = (matrix2.row1[0] * angleVar2 + matrix2.row1[2] * angleVar1) / SCENE_SIZE_HALF;
+		targetMatrix->row2[0] = (matrix2.row2[0] * angleVar1 - matrix2.row2[2] * angleVar2) / SCENE_SIZE_HALF;
+		targetMatrix->row2[2] = (matrix2.row2[0] * angleVar2 + matrix2.row2[2] * angleVar1) / SCENE_SIZE_HALF;
 
-		targetMatrix->row3[0] = (matrix2.row3[0] * angleVar1 - matrix2.row3[2] * angleVar2) / 16384;
-		targetMatrix->row3[2] = (matrix2.row3[0] * angleVar2 + matrix2.row3[2] * angleVar1) / 16384;
+		targetMatrix->row3[0] = (matrix2.row3[0] * angleVar1 - matrix2.row3[2] * angleVar2) / SCENE_SIZE_HALF;
+		targetMatrix->row3[2] = (matrix2.row3[0] * angleVar2 + matrix2.row3[2] * angleVar1) / SCENE_SIZE_HALF;
 	} else {
 		*targetMatrix = matrix2;
 	}
@@ -242,9 +242,9 @@ void Renderer::applyPointsRotation(const pointTab *pointsPtr, int32 numPoints, p
 		const int32 tmpY = pointsPtr->y;
 		const int32 tmpZ = pointsPtr->z;
 
-		destPoints->x = ((rotationMatrix->row1[0] * tmpX + rotationMatrix->row1[1] * tmpY + rotationMatrix->row1[2] * tmpZ) / 16384) + destX;
-		destPoints->y = ((rotationMatrix->row2[0] * tmpX + rotationMatrix->row2[1] * tmpY + rotationMatrix->row2[2] * tmpZ) / 16384) + destY;
-		destPoints->z = ((rotationMatrix->row3[0] * tmpX + rotationMatrix->row3[1] * tmpY + rotationMatrix->row3[2] * tmpZ) / 16384) + destZ;
+		destPoints->x = ((rotationMatrix->row1[0] * tmpX + rotationMatrix->row1[1] * tmpY + rotationMatrix->row1[2] * tmpZ) / SCENE_SIZE_HALF) + destX;
+		destPoints->y = ((rotationMatrix->row2[0] * tmpX + rotationMatrix->row2[1] * tmpY + rotationMatrix->row2[2] * tmpZ) / SCENE_SIZE_HALF) + destY;
+		destPoints->z = ((rotationMatrix->row3[0] * tmpX + rotationMatrix->row3[1] * tmpY + rotationMatrix->row3[2] * tmpZ) / SCENE_SIZE_HALF) + destZ;
 
 		destPoints++;
 		pointsPtr++;
@@ -295,9 +295,9 @@ void Renderer::applyPointsTranslation(const pointTab *pointsPtr, int32 numPoints
 		const int32 tmpY = pointsPtr->y + renderAngleY;
 		const int32 tmpZ = pointsPtr->z + renderAngleX;
 
-		destPoints->x = ((translationMatrix->row1[0] * tmpX + translationMatrix->row1[1] * tmpY + translationMatrix->row1[2] * tmpZ) / 16384) + destX;
-		destPoints->y = ((translationMatrix->row2[0] * tmpX + translationMatrix->row2[1] * tmpY + translationMatrix->row2[2] * tmpZ) / 16384) + destY;
-		destPoints->z = ((translationMatrix->row3[0] * tmpX + translationMatrix->row3[1] * tmpY + translationMatrix->row3[2] * tmpZ) / 16384) + destZ;
+		destPoints->x = ((translationMatrix->row1[0] * tmpX + translationMatrix->row1[1] * tmpY + translationMatrix->row1[2] * tmpZ) / SCENE_SIZE_HALF) + destX;
+		destPoints->y = ((translationMatrix->row2[0] * tmpX + translationMatrix->row2[1] * tmpY + translationMatrix->row2[2] * tmpZ) / SCENE_SIZE_HALF) + destY;
+		destPoints->z = ((translationMatrix->row3[0] * tmpX + translationMatrix->row3[1] * tmpY + translationMatrix->row3[2] * tmpZ) / SCENE_SIZE_HALF) + destZ;
 
 		destPoints++;
 		pointsPtr++;
@@ -342,7 +342,7 @@ void Renderer::translateGroup(int16 ax, int16 bx, int16 cx) {
 	eax = shadeMatrix.row1[2];
 	eax *= ecx;
 	eax += edi;
-	eax /= 16384;
+	eax /= SCENE_SIZE_HALF;
 
 	destX = eax;
 
@@ -354,7 +354,7 @@ void Renderer::translateGroup(int16 ax, int16 bx, int16 cx) {
 	eax = shadeMatrix.row2[2];
 	eax *= ecx;
 	eax += edi;
-	eax /= 16384;
+	eax /= SCENE_SIZE_HALF;
 	destY = eax;
 	destZ = eax;
 }
diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h
index ae1c1dd682..a6a0f9c4ae 100644
--- a/engines/twine/scene/grid.h
+++ b/engines/twine/scene/grid.h
@@ -78,6 +78,8 @@ struct BrickEntry {
 #define SCENE_SIZE_MAX (BRICK_SIZE * GRID_SIZE_X - 1)
 // short min
 #define SCENE_SIZE_MIN (-BRICK_SIZE * GRID_SIZE_X)
+#define SCENE_SIZE_HALF (BRICK_SIZE * GRID_SIZE_X / 2)
+#define SCENE_SIZE_HALFF (BRICK_SIZE * GRID_SIZE_X / 2.0f)
 
 #define BRICK_SIZE 512
 #define BRICK_HEIGHT 256
diff --git a/engines/twine/scene/movements.cpp b/engines/twine/scene/movements.cpp
index ca20159c9e..a6e0e273a0 100644
--- a/engines/twine/scene/movements.cpp
+++ b/engines/twine/scene/movements.cpp
@@ -112,7 +112,7 @@ int32 Movements::getAngleAndSetTargetActorDistance(int32 x1, int32 z1, int32 x2,
 		return 0;
 	}
 
-	const int32 destAngle = (difZ * 16384) / targetActorDistance;
+	const int32 destAngle = (difZ * SCENE_SIZE_HALF) / targetActorDistance;
 
 	int32 startAngle = ANGLE_0;
 	//	stopAngle  = 0x100;


Commit: 4f500d942cb6c9f69bc935d089297939ff315a3a
    https://github.com/scummvm/scummvm/commit/4f500d942cb6c9f69bc935d089297939ff315a3a
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: replaced a new bit shifts

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


diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 312ab7bf21..2a7848ef77 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -436,14 +436,14 @@ void Renderer::computePolygons(int16 polyRenderType, Vertex *vertices, int32 num
 		if (direction * oldVertexX > direction * currentVertexX) { // if we are going up right
 			xpos = currentVertexX;
 			ypos = currentVertexY;
-			cvalue = (vertexParam2 << 8) + ((oldVertexParam - vertexParam2) << 8) % vsize;
-			cdelta = ((oldVertexParam - vertexParam2) << 8) / vsize;
+			cvalue = (vertexParam2 * 256) + ((oldVertexParam - vertexParam2) * 256) % vsize;
+			cdelta = ((oldVertexParam - vertexParam2) * 256) / vsize;
 			direction = -direction; // we will draw by going down the tab
 		} else {
 			xpos = oldVertexX;
 			ypos = oldVertexY;
-			cvalue = (oldVertexParam << 8) + ((vertexParam2 - oldVertexParam) << 8) % vsize;
-			cdelta = ((vertexParam2 - oldVertexParam) << 8) / vsize;
+			cvalue = (oldVertexParam * 256) + ((vertexParam2 - oldVertexParam) * 256) % vsize;
+			cdelta = ((vertexParam2 - oldVertexParam) * 256) / vsize;
 		}
 		const int32 polyTabIndex = ypos + (up ? _engine->height() : 0);
 		int16 *outPtr = &_polyTab[polyTabIndex]; // outPtr is the output ptr in the renderTab
@@ -499,12 +499,12 @@ void Renderer::renderPolygonsCopper(uint8 *out, int vtop, int32 vsize, int32 col
 
 				for (int32 j = startCopy; j < hsize + startCopy; j++) {
 					start += mask;
-					start = (start & 0xFF00) | ((start & 0xFF) & (uint8)(dx >> 8));
+					start = (start & 0xFF00) | ((start & 0xFF) & (uint8)(dx / 256));
 					start = (start & 0xFF00) | ((start & 0xFF) + (dx & 0xFF));
 					if (j >= 0 && j < _engine->width()) {
 						out[j] = start & 0xFF;
 					}
-					mask = (mask << 2) | (mask >> 14);
+					mask = (mask * 4) | (mask / SCENE_SIZE_HALF);
 					mask++;
 				}
 			}
@@ -583,7 +583,7 @@ void Renderer::renderPolygonsTele(uint8 *out, int vtop, int32 vsize, int32 color
 			}
 
 			uint8 *out2 = start + out;
-			*out2 = ((unsigned short)(bx >> 0x18)) & 0x0F;
+			*out2 = ((unsigned short)(bx / 24)) & 0x0F;
 
 			color = *(out2 + 1);
 
@@ -597,11 +597,11 @@ void Renderer::renderPolygonsTele(uint8 *out, int vtop, int32 vsize, int32 color
 
 		if (stop >= start) {
 			hsize++;
-			bx = (unsigned short)(color >> 0x10);
+			bx = (unsigned short)(color / 16);
 			uint8 *out2 = start + out;
 
-			int ax = (bx & 0xF0) << 8;
-			bx = bx << 8;
+			int ax = (bx & 0xF0) * 256;
+			bx = bx * 256;
 			ax += (bx & 0x0F);
 			ax -= bx;
 			ax++;
@@ -609,7 +609,7 @@ void Renderer::renderPolygonsTele(uint8 *out, int vtop, int32 vsize, int32 color
 
 			ax = ax / hsize;
 			uint16 temp = (ax & 0xF0);
-			temp = temp >> 8;
+			temp = temp / 256;
 			temp += (ax & 0x0F);
 			ax = temp;
 
@@ -660,9 +660,9 @@ void Renderer::renderPolygonsTras(uint8 *out, int vtop, int32 vsize, int32 color
 			hsize++;
 			uint8 *out2 = start + out;
 
-			if ((hsize >> 1) < 0) {
+			if (hsize / 2 < 0) {
 				bx = color & 0xFF;
-				bx = bx << 8;
+				bx = bx * 256;
 				bx += color & 0xFF;
 				for (int32 j = 0; j < hsize; j++) {
 					*(out2) = (*(out2)&0x0F0F) | bx;
@@ -743,28 +743,28 @@ void Renderer::renderPolygonsGouraud(uint8 *out, int vtop, int32 vsize, int32 co
 
 			if (hsize == 0) {
 				if (start >= 0 && start < _engine->width()) {
-					*out2 = ((startColor + stopColor) / 2) >> 8; // moyenne des 2 couleurs
+					*out2 = ((startColor + stopColor) / 2) / 256; // moyenne des 2 couleurs
 				}
 			} else if (hsize > 0) {
 				if (hsize == 1) {
 					if (start >= -1 && start < _engine->width() - 1) {
-						*(out2 + 1) = stopColor >> 8;
+						*(out2 + 1) = stopColor / 256;
 					}
 
 					if (start >= 0 && start < _engine->width()) {
-						*(out2) = startColor >> 8;
+						*(out2) = startColor / 256;
 					}
 				} else if (hsize == 2) {
 					if (start >= -2 && start < _engine->width() - 2) {
-						*(out2 + 2) = stopColor >> 8;
+						*(out2 + 2) = stopColor / 256;
 					}
 
 					if (start >= -1 && start < _engine->width() - 1) {
-						*(out2 + 1) = ((startColor + stopColor) / 2) >> 8;
+						*(out2 + 1) = ((startColor + stopColor) / 2) / 256;
 					}
 
 					if (start >= 0 && start < _engine->width()) {
-						*(out2) = startColor >> 8;
+						*(out2) = startColor / 256;
 					}
 				} else {
 					int32 currentXPos = start;
@@ -774,7 +774,7 @@ void Renderer::renderPolygonsGouraud(uint8 *out, int vtop, int32 vsize, int32 co
 					if (hsize % 2) {
 						hsize /= 2;
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2) = startColor >> 8;
+							*(out2) = startColor / 256;
 						}
 						out2++;
 						currentXPos++;
@@ -785,14 +785,14 @@ void Renderer::renderPolygonsGouraud(uint8 *out, int vtop, int32 vsize, int32 co
 
 					do {
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2) = startColor >> 8;
+							*(out2) = startColor / 256;
 						}
 
 						currentXPos++;
 						startColor += colorSize;
 
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2 + 1) = startColor >> 8;
+							*(out2 + 1) = startColor / 256;
 						}
 
 						currentXPos++;
@@ -830,7 +830,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 
 				if (hsize == 0) {
 					if (currentXPos >= 0 && currentXPos < _engine->width()) {
-						*(out2) = (uint8)(((startColor + stopColor) / 2) >> 8);
+						*(out2) = (uint8)(((startColor + stopColor) / 2) / 256);
 					}
 				} else {
 					int16 colorSize = stopColor - startColor;
@@ -842,7 +842,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 						currentColor &= 0xFF;
 						currentColor += startColor;
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2) = currentColor >> 8;
+							*(out2) = currentColor / 256;
 						}
 
 						currentColor &= 0xFF;
@@ -852,7 +852,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 
 						currentXPos++;
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2 + 1) = currentColor >> 8;
+							*(out2 + 1) = currentColor / 256;
 						}
 					} else if (hsize == 2) {
 						uint16 currentColor = startColor;
@@ -864,7 +864,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 						currentColor = ((currentColor & (0xFF00)) | ((((currentColor & 0xFF) << (hsize & 0xFF))) & 0xFF));
 						currentColor += startColor;
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2) = currentColor >> 8;
+							*(out2) = currentColor / 256;
 						}
 
 						out2++;
@@ -875,7 +875,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 						currentColor += startColor;
 
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2) = currentColor >> 8;
+							*(out2) = currentColor / 256;
 						}
 
 						currentColor &= 0xFF;
@@ -885,7 +885,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 
 						currentXPos++;
 						if (currentXPos >= 0 && currentXPos < _engine->width()) {
-							*(out2 + 1) = currentColor >> 8;
+							*(out2 + 1) = currentColor / 256;
 						}
 					} else {
 						uint16 currentColor = startColor;
@@ -898,7 +898,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 							currentColor = ((currentColor & (0xFF00)) | ((((currentColor & 0xFF) << (hsize & 0xFF))) & 0xFF));
 							currentColor += startColor;
 							if (currentXPos >= 0 && currentXPos < _engine->width()) {
-								*(out2) = currentColor >> 8;
+								*(out2) = currentColor / 256;
 							}
 							out2++;
 							currentXPos++;
@@ -910,7 +910,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 							currentColor &= 0xFF;
 							currentColor += startColor;
 							if (currentXPos >= 0 && currentXPos < _engine->width()) {
-								*(out2) = currentColor >> 8;
+								*(out2) = currentColor / 256;
 							}
 							currentXPos++;
 							currentColor &= 0xFF;
@@ -918,7 +918,7 @@ void Renderer::renderPolygonsDither(uint8 *out, int vtop, int32 vsize, int32 col
 							currentColor = ((currentColor & (0xFF00)) | ((((currentColor & 0xFF) << (hsize & 0xFF))) & 0xFF));
 							currentColor += startColor;
 							if (currentXPos >= 0 && currentXPos < _engine->width()) {
-								*(out2 + 1) = currentColor >> 8;
+								*(out2 + 1) = currentColor / 256;
 							}
 							currentXPos++;
 							out2 += 2;
@@ -1184,7 +1184,7 @@ bool Renderer::renderModelElements(int32 numOfPrimitives, const uint8 *polygonPt
 			int32 radius = sphere->radius;
 
 			//if (isUsingOrthoProjection) {
-				radius = (radius * 34) >> 9;
+				radius = (radius * 34) / 512;
 			//} else {
 			//	radius = (radius * cameraPosY) / (cameraPosX + *(const int16 *)pointer); // TODO: this does not make sense.
 			//}
diff --git a/engines/twine/scene/movements.cpp b/engines/twine/scene/movements.cpp
index a6e0e273a0..7a7155acd8 100644
--- a/engines/twine/scene/movements.cpp
+++ b/engines/twine/scene/movements.cpp
@@ -161,12 +161,12 @@ void Movements::moveActor(int32 angleFrom, int32 angleTo, int32 speed, ActorMove
 	movePtr->from = from;
 	movePtr->to = to;
 
-	const int16 numOfStep = (from - to) << 6;
+	const int16 numOfStep = (from - to) * 64;
 	int32 numOfStepInt = ABS(numOfStep);
-	numOfStepInt >>= 6;
+	numOfStepInt /= 64;
 
 	numOfStepInt *= speed;
-	numOfStepInt >>= 8;
+	numOfStepInt /= 256;
 
 	movePtr->numOfStep = (int16)numOfStepInt;
 	movePtr->timeOfChange = _engine->lbaTime;


Commit: baaeafd3ae821adaaab748462beca38647e8c3e4
    https://github.com/scummvm/scummvm/commit/baaeafd3ae821adaaab748462beca38647e8c3e4
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: cleanup in extra code

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


diff --git a/engines/twine/scene/extra.cpp b/engines/twine/scene/extra.cpp
index 976898930c..d442fdacf3 100644
--- a/engines/twine/scene/extra.cpp
+++ b/engines/twine/scene/extra.cpp
@@ -35,13 +35,14 @@
 #include "twine/scene/grid.h"
 #include "twine/scene/movements.h"
 #include "twine/scene/scene.h"
+#include "twine/shared.h"
 #include "twine/twine.h"
 
 namespace TwinE {
 
 /** Hit Stars shape info */
 static const int16 hitStarsShapeTable[] = {
-    10,
+    10, // num entries of x and z rotation values
     0,
     -20,
     4,
@@ -65,7 +66,7 @@ static const int16 hitStarsShapeTable[] = {
 
 /** Explode Cloud shape info */
 static const int16 explodeCloudShapeTable[] = {
-    18,
+    18, // num entries of x and z rotation values
     0,
     -20,
     6,
@@ -432,10 +433,10 @@ void Extra::addExtraThrowMagicball(int32 x, int32 y, int32 z, int32 xAngle, int3
 }
 
 void Extra::drawSpecialShape(const int16 *shapeTable, int32 x, int32 y, int32 color, int32 angle, int32 size) {
-	int16 currentShapeTable = *(shapeTable++);
+	int16 currentShapeTable = *shapeTable++;
 
-	int16 var_x = ((*(shapeTable++)) * size) >> 4;
-	int16 var_z = ((*(shapeTable++)) * size) >> 4;
+	int16 var_x = (*shapeTable++) * size / 16;
+	int16 var_z = (*shapeTable++) * size / 16;
 
 	_engine->_redraw->renderRect.left = 0x7D00;
 	_engine->_redraw->renderRect.right = -0x7D00;
@@ -444,8 +445,8 @@ void Extra::drawSpecialShape(const int16 *shapeTable, int32 x, int32 y, int32 co
 
 	_engine->_movements->rotateActor(var_x, var_z, angle);
 
-	int32 computedX = _engine->_renderer->destX + x;
-	int32 computedY = _engine->_renderer->destZ + y;
+	const int32 computedX = _engine->_renderer->destX + x;
+	const int32 computedY = _engine->_renderer->destZ + y;
 
 	if (computedX < _engine->_redraw->renderRect.left) {
 		_engine->_redraw->renderRect.left = computedX;
@@ -463,17 +464,15 @@ void Extra::drawSpecialShape(const int16 *shapeTable, int32 x, int32 y, int32 co
 		_engine->_redraw->renderRect.bottom = computedY;
 	}
 
-	int32 numEntries = 1;
-
 	int32 currentX = computedX;
 	int32 currentY = computedY;
 
-	while (numEntries < currentShapeTable) {
-		var_x = ((*(shapeTable++)) * size) >> 4;
-		var_z = ((*(shapeTable++)) * size) >> 4;
+	for (int32 numEntries = 1; numEntries < currentShapeTable; ++numEntries) {
+		var_x = (*shapeTable++) * size / 16;
+		var_z = (*shapeTable++) * size / 16;
 
-		int32 oldComputedX = currentX;
-		int32 oldComputedY = currentY;
+		const int32 oldComputedX = currentX;
+		const int32 oldComputedY = currentY;
 
 		_engine->_renderer->projPosX = currentX;
 		_engine->_renderer->projPosY = currentY;
@@ -504,8 +503,6 @@ void Extra::drawSpecialShape(const int16 *shapeTable, int32 x, int32 y, int32 co
 
 		_engine->_interface->drawLine(oldComputedX, oldComputedY, currentX, currentY, color);
 
-		numEntries++;
-
 		currentX = _engine->_renderer->projPosX;
 		currentY = _engine->_renderer->projPosY;
 	}
@@ -521,7 +518,7 @@ void Extra::drawExtraSpecial(int32 extraIdx, int32 x, int32 y) {
 
 	switch (specialType) {
 	case ExtraSpecialType::kHitStars:
-		drawSpecialShape(hitStarsShapeTable, x, y, 15, (_engine->lbaTime << 5) & ANGLE_270, 4);
+		drawSpecialShape(hitStarsShapeTable, x, y, 15, (_engine->lbaTime * 32) & ANGLE_270, 4);
 		break;
 	case ExtraSpecialType::kExplodeCloud: {
 		int32 cloudTime = 1 + _engine->lbaTime - extra->spawnTime;
@@ -579,9 +576,10 @@ void Extra::processExtras() {
 			extra->info0 = -1;
 			continue;
 		}
+		const int32 deltaT = _engine->lbaTime - extra->spawnTime;
 		//
 		if (extra->type & ExtraType::UNK12) {
-			extra->info0 = _engine->_collision->getAverageValue(97, 100, 30, _engine->lbaTime - extra->spawnTime);
+			extra->info0 = _engine->_collision->getAverageValue(97, 100, 30, deltaT);
 			continue;
 		}
 		// process extra moving
@@ -590,14 +588,13 @@ void Extra::processExtras() {
 			currentExtraY = extra->y;
 			currentExtraZ = extra->z;
 
-			int32 currentExtraSpeedX = extra->destX * (_engine->lbaTime - extra->spawnTime);
+			const int32 currentExtraSpeedX = extra->destX * deltaT;
 			extra->x = currentExtraSpeedX + extra->lastX;
 
-			int32 currentExtraSpeedY = extra->destY * (_engine->lbaTime - extra->spawnTime);
-			currentExtraSpeedY += extra->lastY;
-			extra->y = currentExtraSpeedY - ABS(((extra->angle * (_engine->lbaTime - extra->spawnTime)) * (_engine->lbaTime - extra->spawnTime)) >> 4);
+			const int32 currentExtraSpeedY = extra->destY * deltaT;
+			extra->y = currentExtraSpeedY + extra->lastY - ABS(extra->angle * deltaT * deltaT / 16);
 
-			extra->z = extra->destZ * (_engine->lbaTime - extra->spawnTime) + extra->lastZ;
+			extra->z = extra->destZ * deltaT + extra->lastZ;
 
 			// check if extra is out of scene
 			if (extra->y < 0 || extra->x < 0 || extra->x > 0x7E00 || extra->z < 0 || extra->z > 0x7E00) {
@@ -642,8 +639,8 @@ void Extra::processExtras() {
 			currentExtraY = actor->y + 1000;
 			currentExtraZ = actor->z;
 
-			int32 tmpAngle = _engine->_movements->getAngleAndSetTargetActorDistance(extra->x, extra->z, currentExtraX, currentExtraZ);
-			int32 angle = ClampAngle(tmpAngle - extra->angle);
+			const int32 tmpAngle = _engine->_movements->getAngleAndSetTargetActorDistance(extra->x, extra->z, currentExtraX, currentExtraZ);
+			const int32 angle = ClampAngle(tmpAngle - extra->angle);
 
 			if (angle > ANGLE_140 && angle < ANGLE_210) {
 				if (extra->strengthOfHit) {
@@ -686,13 +683,13 @@ void Extra::processExtras() {
 		if (extra->type & ExtraType::UNK9) {
 			//				int32 actorIdxAttacked = extra->lifeTime;
 			ExtraListStruct *extraKey = &extraList[extra->payload.extraIdx];
-			int32 extraIdx = extra->payload.extraIdx;
+			const int32 extraIdx = extra->payload.extraIdx;
 
-			int32 tmpAngle = _engine->_movements->getAngleAndSetTargetActorDistance(extra->x, extra->z, extraKey->x, extraKey->z);
-			int32 angle = ClampAngle(tmpAngle - extra->angle);
+			const int32 tmpAngle = _engine->_movements->getAngleAndSetTargetActorDistance(extra->x, extra->z, extraKey->x, extraKey->z);
+			const int32 angle = ClampAngle(tmpAngle - extra->angle);
 
-			if (angle > ToAngle(400) && angle < ToAngle(600)) {
-				_engine->_sound->playSample(Samples::ItemFound, 1, _engine->_scene->sceneHero->x, _engine->_scene->sceneHero->y, _engine->_scene->sceneHero->z, 0);
+			if (angle > ANGLE_140 && angle < ANGLE_210) {
+				_engine->_sound->playSample(Samples::ItemFound, 1, _engine->_scene->sceneHero->x, _engine->_scene->sceneHero->y, _engine->_scene->sceneHero->z, OWN_ACTOR_SCENE_INDEX);
 
 				if (extraKey->info1 > 1) {
 					_engine->_renderer->projectPositionOnScreen(extraKey->x - _engine->_grid->cameraX, extraKey->y - _engine->_grid->cameraY, extraKey->z - _engine->_grid->cameraZ);
@@ -708,7 +705,7 @@ void Extra::processExtras() {
 				_engine->_gameState->magicBallIdx = addExtra(-1, extra->x, extra->y, extra->z, SPRITEHQR_KEY, 0, 8000, 0);
 				continue;
 			}
-			int32 angle2 = _engine->_movements->getAngleAndSetTargetActorDistance(extra->y, 0, extraKey->y, _engine->_movements->targetActorDistance);
+			const int32 angle2 = _engine->_movements->getAngleAndSetTargetActorDistance(extra->y, 0, extraKey->y, _engine->_movements->targetActorDistance);
 			int32 pos = extra->trackActorMove.getRealAngle(_engine->lbaTime);
 
 			if (!pos) {
@@ -725,7 +722,7 @@ void Extra::processExtras() {
 			_engine->_movements->setActorAngle(ANGLE_0, extra->destZ, ANGLE_17, &extra->trackActorMove);
 
 			if (extraIdx == _engine->_collision->checkExtraCollisionWithExtra(extra, _engine->_gameState->magicBallIdx)) {
-				_engine->_sound->playSample(Samples::ItemFound, 1, _engine->_scene->sceneHero->x, _engine->_scene->sceneHero->y, _engine->_scene->sceneHero->z, 0);
+				_engine->_sound->playSample(Samples::ItemFound, 1, _engine->_scene->sceneHero->x, _engine->_scene->sceneHero->y, _engine->_scene->sceneHero->z, OWN_ACTOR_SCENE_INDEX);
 
 				if (extraKey->info1 > 1) {
 					_engine->_renderer->projectPositionOnScreen(extraKey->x - _engine->_grid->cameraX, extraKey->y - _engine->_grid->cameraY, extraKey->z - _engine->_grid->cameraZ);
@@ -875,7 +872,8 @@ void Extra::processExtras() {
 
 				if (extra->info1 > 1 && !_engine->_input->isActionActive(TwinEActionType::MoveBackward)) {
 					_engine->_renderer->projectPositionOnScreen(extra->x - _engine->_grid->cameraX, extra->y - _engine->_grid->cameraY, extra->z - _engine->_grid->cameraZ);
-					_engine->_redraw->addOverlay(OverlayType::koNumber, extra->info1, _engine->_renderer->projPosX, _engine->_renderer->projPosY, 158, OverlayPosType::koNormal, 2);
+					const int16 fontColor = 158;
+					_engine->_redraw->addOverlay(OverlayType::koNumber, extra->info1, _engine->_renderer->projPosX, _engine->_renderer->projPosY, fontColor, OverlayPosType::koNormal, 2);
 				}
 
 				_engine->_redraw->addOverlay(OverlayType::koSprite, extra->info0, 10, 30, 0, OverlayPosType::koNormal, 2);


Commit: 7f473240b0ef6359c9b862ea5801a5b39efe3b45
    https://github.com/scummvm/scummvm/commit/7f473240b0ef6359c9b862ea5801a5b39efe3b45
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: named unknown flag and replaced magic number

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


diff --git a/engines/twine/scene/extra.cpp b/engines/twine/scene/extra.cpp
index d442fdacf3..475ed1d270 100644
--- a/engines/twine/scene/extra.cpp
+++ b/engines/twine/scene/extra.cpp
@@ -138,7 +138,7 @@ int32 Extra::addExtraExplode(int32 x, int32 y, int32 z) {
 			continue;
 		}
 		extra->info0 = SPRITEHQR_EXPLOSION_FIRST_FRAME;
-		extra->type = ExtraType::TIME_OUT | ExtraType::UNK12;
+		extra->type = ExtraType::TIME_OUT | ExtraType::EXPLOSION;
 		extra->info1 = 0;
 		extra->x = x;
 		extra->y = y;
@@ -578,8 +578,8 @@ void Extra::processExtras() {
 		}
 		const int32 deltaT = _engine->lbaTime - extra->spawnTime;
 		//
-		if (extra->type & ExtraType::UNK12) {
-			extra->info0 = _engine->_collision->getAverageValue(97, 100, 30, deltaT);
+		if (extra->type & ExtraType::EXPLOSION) {
+			extra->info0 = _engine->_collision->getAverageValue(SPRITEHQR_EXPLOSION_FIRST_FRAME, 100, 30, deltaT);
 			continue;
 		}
 		// process extra moving
diff --git a/engines/twine/scene/extra.h b/engines/twine/scene/extra.h
index d30e6b98ba..26978dd74d 100644
--- a/engines/twine/scene/extra.h
+++ b/engines/twine/scene/extra.h
@@ -43,14 +43,14 @@ enum ExtraType {
 	UNK9 = 1 << 9,         // 0x0200
 	TIME_IN = 1 << 10,     // 0x0400
 	UNK11 = 1 << 11,       // 0x0800
-	UNK12 = 1 << 12,       // 0x1000
+	EXPLOSION = 1 << 12,   // 0x1000
 	WAIT_NO_COL = 1 << 13, // 0x2000
 	BONUS = 1 << 14,       // 0x4000
 	UNK15 = 1 << 15        // 0x8000
 };
 
 struct ExtraListStruct {
-	int16 info0 = 0; // field_0
+	int16 info0 = 0; /**< a value of -1 indicates that this instance is free to use */
 	int16 x = 0;
 	int16 y = 0;
 	int16 z = 0;


Commit: 7f0d8864e502fce3a39fb80d7789e61b09a54241
    https://github.com/scummvm/scummvm/commit/7f0d8864e502fce3a39fb80d7789e61b09a54241
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: renamed method parameters

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


diff --git a/engines/twine/scene/collision.cpp b/engines/twine/scene/collision.cpp
index 2b6abcc867..bc9c221d73 100644
--- a/engines/twine/scene/collision.cpp
+++ b/engines/twine/scene/collision.cpp
@@ -95,16 +95,16 @@ bool Collision::standingOnActor(int32 actorIdx1, int32 actorIdx2) {
 	return true; // standing
 }
 
-int32 Collision::getAverageValue(int32 var0, int32 var1, int32 var2, int32 var3) {
-	if (var3 <= 0) {
-		return var0;
+int32 Collision::getAverageValue(int32 start, int32 end, int32 maxDelay, int32 delay) {
+	if (delay <= 0) {
+		return start;
 	}
 
-	if (var3 >= var2) {
-		return var1;
+	if (delay >= maxDelay) {
+		return end;
 	}
 
-	return (((var1 - var0) * var3) / var2) + var0;
+	return (((end - start) * delay) / maxDelay) + start;
 }
 
 void Collision::reajustActorPosition(ShapeType brickShape) {
diff --git a/engines/twine/scene/collision.h b/engines/twine/scene/collision.h
index b6021584f9..346bd07b83 100644
--- a/engines/twine/scene/collision.h
+++ b/engines/twine/scene/collision.h
@@ -60,7 +60,7 @@ public:
 	 */
 	bool standingOnActor(int32 actorIdx1, int32 actorIdx2);
 
-	int32 getAverageValue(int32 var0, int32 var1, int32 var2, int32 var3);
+	int32 getAverageValue(int32 start, int32 end, int32 maxDelay, int32 delay);
 
 	/**
 	 * Reajust actor position in scene according with brick shape bellow actor


Commit: f27f2793422d8e48d6fcb3742acfa1ecc3567c6e
    https://github.com/scummvm/scummvm/commit/f27f2793422d8e48d6fcb3742acfa1ecc3567c6e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: replaced magic numbers

Changed paths:
    engines/twine/renderer/redraw.cpp
    engines/twine/scene/gamestate.cpp


diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index d07a447c07..ae3d253e4e 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -344,7 +344,7 @@ void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw)
 	const int32 x = actor->x - _engine->_grid->cameraX;
 	const int32 y = actor->y - _engine->_grid->cameraY;
 	const int32 z = actor->z - _engine->_grid->cameraZ;
-	if (!_engine->_renderer->renderIsoModel(x, y, z, 0, actor->angle, 0, _engine->_actor->bodyTable[actor->entity])) {
+	if (!_engine->_renderer->renderIsoModel(x, y, z, ANGLE_0, actor->angle, ANGLE_0, _engine->_actor->bodyTable[actor->entity])) {
 		return;
 	}
 
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index be3400e183..3bcc036603 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -274,7 +274,7 @@ void GameState::processFoundItem(int32 item) {
 	const int32 itemCameraY = _engine->_grid->newCameraY * BRICK_HEIGHT;
 	const int32 itemCameraZ = _engine->_grid->newCameraZ * BRICK_SIZE;
 
-	_engine->_renderer->renderIsoModel(_engine->_scene->sceneHero->x - itemCameraX, _engine->_scene->sceneHero->y - itemCameraY, _engine->_scene->sceneHero->z - itemCameraZ, 0, 0x80, 0, _engine->_actor->bodyTable[_engine->_scene->sceneHero->entity]);
+	_engine->_renderer->renderIsoModel(_engine->_scene->sceneHero->x - itemCameraX, _engine->_scene->sceneHero->y - itemCameraY, _engine->_scene->sceneHero->z - itemCameraZ, ANGLE_0, ANGLE_45, ANGLE_0, _engine->_actor->bodyTable[_engine->_scene->sceneHero->entity]);
 	_engine->_interface->setClip(_engine->_redraw->renderRect);
 
 	const int32 itemX = (_engine->_scene->sceneHero->x + BRICK_HEIGHT) / BRICK_SIZE;
@@ -430,7 +430,7 @@ void GameState::processGameChoices(int32 choiceIdx) {
 }
 
 void GameState::processGameoverAnimation() {
-	int32 tmpLbaTime = _engine->lbaTime;
+	const int32 tmpLbaTime = _engine->lbaTime;
 
 	// workaround to fix hero redraw after drowning
 	_engine->_scene->sceneHero->staticFlags.bIsHidden = 1;
@@ -470,7 +470,7 @@ void GameState::processGameoverAnimation() {
 
 		_engine->_interface->blitBox(rect, _engine->workVideoBuffer, _engine->frontVideoBuffer);
 		_engine->_renderer->setCameraAngle(0, 0, 0, 0, -cdot, 0, avg);
-		_engine->_renderer->renderIsoModel(0, 0, 0, 0, 0, 0, gameOverPtr);
+		_engine->_renderer->renderIsoModel(0, 0, 0, ANGLE_0, ANGLE_0, ANGLE_0, gameOverPtr);
 		_engine->copyBlockPhys(rect);
 
 		_engine->lbaTime++;
@@ -479,7 +479,7 @@ void GameState::processGameoverAnimation() {
 	_engine->_sound->playSample(Samples::Explode);
 	_engine->_interface->blitBox(rect, _engine->workVideoBuffer, _engine->frontVideoBuffer);
 	_engine->_renderer->setCameraAngle(0, 0, 0, 0, 0, 0, 3200);
-	_engine->_renderer->renderIsoModel(0, 0, 0, 0, 0, 0, gameOverPtr);
+	_engine->_renderer->renderIsoModel(0, 0, 0, ANGLE_0, ANGLE_0, ANGLE_0, gameOverPtr);
 	_engine->copyBlockPhys(rect);
 
 	_engine->delaySkip(2000);


Commit: 25b9cdfb3a879fb1e560b7cd40cdd97bcfcf73c3
    https://github.com/scummvm/scummvm/commit/25b9cdfb3a879fb1e560b7cd40cdd97bcfcf73c3
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: fixed doxygen

Changed paths:
    engines/twine/twine.h


diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index c97803ce74..debe32e7e1 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -305,7 +305,7 @@ public:
 
 	/**
 	 * Deplay certain seconds till proceed - Can also Skip this delay
-	 * @param time time in seconds to delay
+	 * @param time time in milliseconds to delay
 	 */
 	bool delaySkip(uint32 time);
 


Commit: e402827f3b419af46cf5e1e824aee2e4cd5d46d5
    https://github.com/scummvm/scummvm/commit/e402827f3b419af46cf5e1e824aee2e4cd5d46d5
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:44:43+01:00

Commit Message:
TWINE: introduced color constants

Changed paths:
    engines/twine/menu/menu.cpp
    engines/twine/menu/menuoptions.cpp
    engines/twine/renderer/redraw.cpp
    engines/twine/script/script_life_v1.cpp
    engines/twine/text.h
    engines/twine/twine.cpp


diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index 685ef89ef1..45a1fc7a83 100644
--- a/engines/twine/menu/menu.cpp
+++ b/engines/twine/menu/menu.cpp
@@ -297,7 +297,7 @@ void Menu::drawButtonGfx(const MenuSettings *menuSettings, const Common::Rect &r
 
 	drawBox(rect);
 
-	_engine->_text->setFontColor(15);
+	_engine->_text->setFontColor(COLOR_WHITE);
 	_engine->_text->setFontParameters(2, 8);
 	const int32 textSize = _engine->_text->getTextSize(dialText);
 	_engine->_text->drawText((_engine->width() / 2) - (textSize / 2), rect.top + 7, dialText);
@@ -832,13 +832,13 @@ void Menu::drawInfoMenu(int16 left, int16 top, int16 width) {
 
 	/** draw coin sprite */
 	_engine->_grid->drawSprite(boxLeft, top + 15, _engine->_resources->spriteData[SPRITEHQR_KASHES]);
-	_engine->_text->setFontColor(155);
+	_engine->_text->setFontColor(COLOR_GOLD);
 	Common::String inventoryNumKashes = Common::String::format("%d", _engine->_gameState->inventoryNumKashes);
 	_engine->_text->drawText(left + 370, top + 5, inventoryNumKashes.c_str());
 
 	/** draw key sprite */
 	_engine->_grid->drawSprite(boxLeft, top + 55, _engine->_resources->spriteData[SPRITEHQR_KEY]);
-	_engine->_text->setFontColor(155);
+	_engine->_text->setFontColor(COLOR_GOLD);
 	Common::String inventoryNumKeys = Common::String::format("%d", _engine->_gameState->inventoryNumKeys);
 	_engine->_text->drawText(left + 370, top + 40, inventoryNumKeys.c_str());
 
@@ -916,7 +916,7 @@ void Menu::drawBehaviour(HeroBehaviourType behaviour, int32 angle, bool cantDraw
 		_engine->_interface->drawSplittedBox(titleRect, 0);
 		drawBox(titleRect);
 
-		_engine->_text->setFontColor(15);
+		_engine->_text->setFontColor(COLOR_WHITE);
 
 		char dialText[256];
 		_engine->_text->getMenuText(_engine->_actor->getTextIdForBehaviour(), dialText, sizeof(dialText));
@@ -1076,7 +1076,7 @@ void Menu::drawItem(int32 item, Common::Rect &dirtyRect) {
 		_engine->_renderer->renderInventoryItem(itemX, itemY, _engine->_resources->inventoryTable[item], itemAngle[item], 15000);
 
 		if (item == InventoryItems::kGasItem) { // has GAS
-			_engine->_text->setFontColor(15);
+			_engine->_text->setFontColor(COLOR_WHITE);
 			Common::String inventoryNumGas = Common::String::format("%d", _engine->_gameState->inventoryNumGas);
 			_engine->_text->drawText(left + 3, top + 32, inventoryNumGas.c_str());
 		}
diff --git a/engines/twine/menu/menuoptions.cpp b/engines/twine/menu/menuoptions.cpp
index b3b1290cca..2e9222ad44 100644
--- a/engines/twine/menu/menuoptions.cpp
+++ b/engines/twine/menu/menuoptions.cpp
@@ -158,7 +158,7 @@ void MenuOptions::drawSelectableCharacter(int32 x, int32 y, Common::Rect &dirtyR
 
 	_engine->_menu->drawBox(rect);
 
-	_engine->_text->setFontColor(15);
+	_engine->_text->setFontColor(COLOR_WHITE);
 	const uint8 character = (uint8)allowedCharIndex[idx];
 	const int32 textX = centerX - _engine->_text->getCharWidth(character) / 2;
 	const int32 textY = centerY - _engine->_text->getCharHeight(character) / 2;
@@ -253,7 +253,7 @@ bool MenuOptions::enterPlayerName(int32 textIdx) {
 	_engine->_text->initTextBank(TextBankId::Options_and_menus);
 	char buffer[256];
 	_engine->_text->getMenuText(textIdx, buffer, sizeof(buffer));
-	_engine->_text->setFontColor(15);
+	_engine->_text->setFontColor(COLOR_WHITE);
 	const int halfScreenWidth = (_engine->width() / 2);
 	_engine->_text->drawText(halfScreenWidth - (_engine->_text->getTextSize(buffer) / 2), 20, buffer);
 	_engine->copyBlockPhys(0, 0, _engine->width() - 1, 99);
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index ae3d253e4e..38dfbe8c72 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -604,7 +604,7 @@ void Redraw::renderOverlays() {
 
 				_engine->_interface->setClip(renderRect);
 
-				_engine->_text->setFontColor(155);
+				_engine->_text->setFontColor(COLOR_GOLD);
 
 				_engine->_text->drawText(renderRect.left, renderRect.top, text);
 
diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index 7a32750b96..ef789b459e 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -1737,7 +1737,7 @@ static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
 		engine->_text->getMenuText(textIdx, textStr, sizeof(textStr));
 		int32 textSize = engine->_text->getTextSize(textStr);
 		int32 textBoxRight = textSize;
-		engine->_text->setFontColor(15);
+		engine->_text->setFontColor(COLOR_WHITE);
 		engine->_text->drawText(0, drawVar1, textStr);
 		if (textSize > engine->width() - 1) {
 			textBoxRight = engine->width() - 1;
diff --git a/engines/twine/text.h b/engines/twine/text.h
index dbd08930ac..7f9c48efee 100644
--- a/engines/twine/text.h
+++ b/engines/twine/text.h
@@ -107,6 +107,9 @@ enum _TextId {
 
 #define TEXT_MAX_FADE_IN_CHR 32
 
+#define COLOR_WHITE 15
+#define COLOR_GOLD 155
+
 enum class ProgressiveTextState {
 	End = 0,				/**< Text has reached its end and we are waiting for user input */
 	ContinueRunning = 1,	/**< Text is fading in */
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index d877baccf3..b3d0d9378b 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -791,7 +791,7 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration
 		// Process Pause
 		if (_input->toggleActionIfActive(TwinEActionType::Pause)) {
 			freezeTime();
-			_text->setFontColor(15);
+			_text->setFontColor(COLOR_WHITE);
 			_text->drawText(5, 446, "Pause"); // no key for pause in Text Bank
 			copyBlockPhys(5, 446, 100, 479);
 			do {


Commit: ea82317891ad18fc177ac742b9989a8953d3df56
    https://github.com/scummvm/scummvm/commit/ea82317891ad18fc177ac742b9989a8953d3df56
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:45:00+01:00

Commit Message:
TWINE: fixed credits scene scripted text

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


diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index ef789b459e..c9181c5d9b 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -1726,7 +1726,8 @@ static int32 lPROJ_3D(TwinEEngine *engine, LifeScriptContext &ctx) {
 static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
 	int32 textIdx = ctx.stream.readSint16LE();
 
-	if (drawVar1 < 440) {
+	const int32 textHeight = 40;
+	if (drawVar1 < engine->height() - textHeight) {
 		if (engine->cfgfile.Version == USA_VERSION) {
 			if (!textIdx) {
 				textIdx = TextId::kSaveSettings;
@@ -1737,15 +1738,15 @@ static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
 		engine->_text->getMenuText(textIdx, textStr, sizeof(textStr));
 		int32 textSize = engine->_text->getTextSize(textStr);
 		int32 textBoxRight = textSize;
+		int32 textBoxBottom = drawVar1 + textHeight;
 		engine->_text->setFontColor(COLOR_WHITE);
 		engine->_text->drawText(0, drawVar1, textStr);
 		if (textSize > engine->width() - 1) {
 			textBoxRight = engine->width() - 1;
 		}
 
-		drawVar1 += 40;
-		// TODO: this looks wrong, top and bottom var are the same coordinates - the text height might be missing here
-		engine->copyBlockPhys(0, drawVar1, textBoxRight, drawVar1);
+		engine->copyBlockPhys(0, drawVar1, textBoxRight, textBoxBottom);
+		drawVar1 += textHeight;
 	}
 
 	return 0;


Commit: 2000b07b6b865bb477822d9ab7a5c876fe6258f5
    https://github.com/scummvm/scummvm/commit/2000b07b6b865bb477822d9ab7a5c876fe6258f5
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-08T19:49:59+01:00

Commit Message:
TWINE: renamed global variable

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


diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index c9181c5d9b..981904139a 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -46,9 +46,9 @@
 
 namespace TwinE {
 
-// TODO: validate that lTEXTCLEAR is called before lTEXT - if that is the case
-// move this into the LifeScriptContext
-static int32 drawVar1;
+// the y position for lTEXT opcode - see lCLEAR (used in credits scene)
+// TODO: move into scene class?
+static int32 lTextYPos;
 
 struct LifeScriptContext {
 	int32 actorIdx;
@@ -1727,7 +1727,7 @@ static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
 	int32 textIdx = ctx.stream.readSint16LE();
 
 	const int32 textHeight = 40;
-	if (drawVar1 < engine->height() - textHeight) {
+	if (lTextYPos < engine->height() - textHeight) {
 		if (engine->cfgfile.Version == USA_VERSION) {
 			if (!textIdx) {
 				textIdx = TextId::kSaveSettings;
@@ -1738,15 +1738,15 @@ static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
 		engine->_text->getMenuText(textIdx, textStr, sizeof(textStr));
 		int32 textSize = engine->_text->getTextSize(textStr);
 		int32 textBoxRight = textSize;
-		int32 textBoxBottom = drawVar1 + textHeight;
+		int32 textBoxBottom = lTextYPos + textHeight;
 		engine->_text->setFontColor(COLOR_WHITE);
-		engine->_text->drawText(0, drawVar1, textStr);
+		engine->_text->drawText(0, lTextYPos, textStr);
 		if (textSize > engine->width() - 1) {
 			textBoxRight = engine->width() - 1;
 		}
 
-		engine->copyBlockPhys(0, drawVar1, textBoxRight, textBoxBottom);
-		drawVar1 += textHeight;
+		engine->copyBlockPhys(0, lTextYPos, textBoxRight, textBoxBottom);
+		lTextYPos += textHeight;
 	}
 
 	return 0;
@@ -1757,7 +1757,7 @@ static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
  * @note Opcode @c 0x68
  */
 static int32 lCLEAR_TEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
-	drawVar1 = 0;
+	lTextYPos = 0;
 	const Common::Rect rect(0, 0, engine->width() - 1, engine->height() / 2);
 	engine->_interface->drawSplittedBox(rect, 0);
 	engine->copyBlockPhys(rect);
@@ -1882,7 +1882,7 @@ static const ScriptLifeFunction function_map[] = {
     /*0x69*/ MAPFUNC("BRUTAL_EXIT", lBRUTAL_EXIT)};
 
 ScriptLife::ScriptLife(TwinEEngine *engine) : _engine(engine) {
-	drawVar1 = 0;
+	lTextYPos = 0;
 }
 
 void ScriptLife::processLifeScript(int32 actorIdx) {




More information about the Scummvm-git-logs mailing list