[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