[Scummvm-git-logs] scummvm master -> 2cc9844c9e4bcd3359e3a8c933e0af729f7a2732

mgerhardy noreply at scummvm.org
Fri Jan 20 16:19:21 UTC 2023


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

Summary:
0aab461f60 TWINE: use original holomap rendering methods
6fc57dd947 TWINE: renamed clip methods
2cc9844c9e TWINE: fixed holomap arrow positions


Commit: 0aab461f60c9bee48a999e17deb316feb0e67028
    https://github.com/scummvm/scummvm/commit/0aab461f60c9bee48a999e17deb316feb0e67028
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2023-01-19T19:59:11+01:00

Commit Message:
TWINE: use original holomap rendering methods

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


diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index f6274ef6a1a..26d95a94313 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -209,7 +209,7 @@ void Holomap::computeGlobeProj() {
 	for (int32 alpha = -LBAAngles::ANGLE_90; alpha <= LBAAngles::ANGLE_90; alpha += LBAAngles::ANGLE_11_25) {
 		for (int32 beta = 0; beta < LBAAngles::ANGLE_11_25; ++beta) {
 			IVec3 *vec = &_holomapSurface[holomapSurfaceArrayIdx++];
-			const IVec3 &destPos = _engine->_renderer->longWorldRot(vec->x, vec->y, vec->z);
+			const IVec3 &destPos = _engine->_renderer->worldRotatePoint(*vec);
 			if (alpha != LBAAngles::ANGLE_90) {
 				_holomapSort[holomapSortArrayIdx].z = (int16)destPos.z;
 				_holomapSort[holomapSortArrayIdx].projectedPosIdx = _projectedSurfaceIndex;
@@ -221,7 +221,7 @@ void Holomap::computeGlobeProj() {
 			++_projectedSurfaceIndex;
 		}
 		IVec3 *vec = &_holomapSurface[holomapSurfaceArrayIdx++];
-		const IVec3 &destPos = _engine->_renderer->longWorldRot(vec->x, vec->y, vec->z);
+		const IVec3 &destPos = _engine->_renderer->worldRotatePoint(*vec);
 		const IVec3 &projPos = _engine->_renderer->projectPositionOnScreen(destPos);
 		_projectedSurfacePositions[_projectedSurfaceIndex].x1 = projPos.x;
 		_projectedSurfacePositions[_projectedSurfaceIndex].y1 = projPos.y;
@@ -256,7 +256,7 @@ void Holomap::drawHoloMap(uint8 *holomapImage, uint32 holomapImageSize) {
 			textureCoordinates[1].y = (int16)pos2.y2;
 			textureCoordinates[2].x = (int16)pos3.x2;
 			textureCoordinates[2].y = (int16)pos3.y2;
-			_engine->_renderer->renderHolomapVertices(vertexCoordinates, textureCoordinates, holomapImage, holomapImageSize);
+			_engine->_renderer->asmTexturedTriangleNoClip(vertexCoordinates, textureCoordinates, holomapImage, holomapImageSize);
 		}
 		const HolomapProjectedPos &pos4 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 0 + SURFACE_POS_OFFSET];
 		const HolomapProjectedPos &pos5 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 1 + SURFACE_POS_OFFSET];
@@ -275,7 +275,7 @@ void Holomap::drawHoloMap(uint8 *holomapImage, uint32 holomapImageSize) {
 			textureCoordinates[1].y = (int16)pos5.y2;
 			textureCoordinates[2].x = (int16)pos6.x2;
 			textureCoordinates[2].y = (int16)pos6.y2;
-			_engine->_renderer->renderHolomapVertices(vertexCoordinates, textureCoordinates, holomapImage, holomapImageSize);
+			_engine->_renderer->asmTexturedTriangleNoClip(vertexCoordinates, textureCoordinates, holomapImage, holomapImageSize);
 		}
 	}
 }
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 0e5055f824a..cd411132948 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1858,57 +1858,62 @@ void Renderer::fillHolomapTriangles(const ComputedVertex &vertex0, const Compute
 	}
 }
 
-void Renderer::renderHolomapVertices(const ComputedVertex vertexCoordinates[3], const ComputedVertex textureCoordinates[3], uint8 *holomapImage, uint32 holomapImageSize) {
+void Renderer::asmTexturedTriangleNoClip(const ComputedVertex vertexCoordinates[3], const ComputedVertex textureCoordinates[3], const uint8 *holomapImage, uint32 holomapImageSize) {
 	int32 lymin = SCENE_SIZE_MAX;
 	int32 lymax = SCENE_SIZE_MIN;
 	fillHolomapTriangles(vertexCoordinates[0], vertexCoordinates[1], textureCoordinates[0], textureCoordinates[1], lymin, lymax);
 	fillHolomapTriangles(vertexCoordinates[1], vertexCoordinates[2], textureCoordinates[1], textureCoordinates[2], lymin, lymax);
 	fillHolomapTriangles(vertexCoordinates[2], vertexCoordinates[0], textureCoordinates[2], textureCoordinates[0], lymin, lymax);
-	renderHolomapPolygons(lymin, lymax, holomapImage, holomapImageSize);
+	fillTextPolyNoClip(lymin, lymax, holomapImage, holomapImageSize);
 }
 
-void Renderer::renderHolomapPolygons(int32 ymin, int32 ymax, uint8 *holomapImage, uint32 holomapImageSize) {
-	if (ymin < 0 || ymin >= _engine->_frontVideoBuffer.h) {
+void Renderer::fillTextPolyNoClip(int32 yMin, int32 yMax, const uint8 *holomapImage, uint32 holomapImageSize) {
+	if (yMin < 0 || yMin >= _engine->_frontVideoBuffer.h) {
 		return;
 	}
-	uint8 *pDestLine = (uint8 *)_engine->_frontVideoBuffer.getBasePtr(0, ymin);
-
-	const int16 *pVerticG = _tabVerticG + ymin;
-	const int16 *pVerticD = _tabVerticD + ymin;
-	const uint16 *pu0 = (const uint16 *)(_tabx0 + ymin);
-	const uint16 *pv0 = (const uint16 *)(_taby0 + ymin);
-	const uint16 *pu1 = (const uint16 *)(_tabx1 + ymin);
-	const uint16 *pv1 = (const uint16 *)(_taby1 + ymin);
-
-	int32 yHeight = ymax - ymin;
-	while (yHeight > -1) {
-		int32 u;
-		int32 v;
-		const int16 xmin = *pVerticG++;
-		const int16 xmax = *pVerticD++;
-		const uint32 u0 = u = *pu0++;
-		const uint32 v0 = v = *pv0++;
-		const uint32 u1 = *pu1++;
-		const uint32 v1 = *pv1++;
-		const int16 width = xmax - xmin;
-		if (width > 0) {
-			uint8 *pixelBufPtr = pDestLine + xmin;
-
-			int32 ustep = ((int32)u1 - (int32)u0 + 1) / width;
-			int32 vstep = ((int32)v1 - (int32)v0 + 1) / width;
-
-			for (int16 i = 0; i < width; ++i) {
-				// u0 & 0xFF00 is the x position on the image * 256
-				// v0 & 0xFF00 is the y position on the image * 256
-				const uint32 idx = ((u >> 8) & 0xff) | (v & 0xff00);
-				assert(idx < holomapImageSize);
-				*pixelBufPtr++ = holomapImage[idx];
+	const int screenWidth = _engine->width();
+	uint8 *pDestLine = (uint8 *)_engine->_frontVideoBuffer.getBasePtr(0, yMin);
+
+	const int16 *pVerticG = &_tabVerticG[yMin];
+	const int16 *pVerticD = &_tabVerticD[yMin];
+	const uint16 *pU0 = (const uint16 *)&_tabx0[yMin];
+	const uint16 *pV0 = (const uint16 *)&_taby0[yMin];
+	const uint16 *pU1 = (const uint16 *)&_tabx1[yMin];
+	const uint16 *pV1 = (const uint16 *)&_taby1[yMin];
+	byte *pDest;
+	int32 ustep, vstep;
+	int16 xMin, xMax;
+	uint32 u0, v0, u1, v1, idx;
+	int32 u, v;
+
+	yMax -= yMin;
+
+	for (; yMax >= 0; yMax--) {
+		xMin = *pVerticG++;
+		xMax = *pVerticD++;
+		xMax -= xMin;
+
+		u = u0 = *pU0++;
+		v = v0 = *pV0++;
+		u1 = *pU1++;
+		v1 = *pV1++;
+
+		if (xMax > 0) {
+			pDest = pDestLine + xMin;
+
+			ustep = ((int32)u1 - (int32)u0 + 1) / xMax;
+			vstep = ((int32)v1 - (int32)v0 + 1) / xMax;
+
+			for (; xMax > 0; xMax--) {
+				idx = ((u >> 8) & 0xFF) | (v & 0xFF00); // u0&0xFF00=column*256, v0&0xFF00 = line*256
+				*pDest++ = holomapImage[idx];
+
 				u += ustep;
 				v += vstep;
 			}
 		}
-		pDestLine += _engine->_frontVideoBuffer.pitch;
-		--yHeight;
+
+		pDestLine += screenWidth;
 	}
 }
 
diff --git a/engines/twine/renderer/renderer.h b/engines/twine/renderer/renderer.h
index ec08d1af513..cc4798406f1 100644
--- a/engines/twine/renderer/renderer.h
+++ b/engines/twine/renderer/renderer.h
@@ -216,7 +216,7 @@ private:
 
 	void flipMatrix();
 
-	void renderHolomapPolygons(int32 top, int32 bottom, uint8 *holomapImage, uint32 holomapImageSize);
+	void fillTextPolyNoClip(int32 top, int32 bottom, const uint8 *holomapImage, uint32 holomapImageSize);
 	void fillHolomapTriangle(int16 *pDest, int32 x1, int32 y1, int32 x2, int32 y2);
 	void fillHolomapTriangles(const ComputedVertex &vertex1, const ComputedVertex &vertex2, const ComputedVertex &texCoord1, const ComputedVertex &texCoord2, int32 &top, int32 &bottom);
 
@@ -284,7 +284,7 @@ public:
 	 */
 	void draw3dObject(int32 x, int32 y, const BodyData &bodyData, int32 angle, int32 cameraZoom);
 
-	void renderHolomapVertices(const ComputedVertex vertexCoordinates[3], const ComputedVertex textureCoordinates[3], uint8 *holomapImage, uint32 holomapImageSize);
+	void asmTexturedTriangleNoClip(const ComputedVertex vertexCoordinates[3], const ComputedVertex textureCoordinates[3], const uint8 *holomapImage, uint32 holomapImageSize);
 };
 
 inline void Renderer::setCameraRotation(int32 x, int32 y, int32 z) {


Commit: 6fc57dd9477e966a117d1aae25b8e59f1fc1ea51
    https://github.com/scummvm/scummvm/commit/6fc57dd9477e966a117d1aae25b8e59f1fc1ea51
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2023-01-20T17:06:11+01:00

Commit Message:
TWINE: renamed clip methods

and synced drawHoloObj with original source code

Changed paths:
    engines/twine/holomap.cpp
    engines/twine/menu/interface.cpp
    engines/twine/menu/interface.h
    engines/twine/menu/menu.cpp
    engines/twine/renderer/redraw.cpp
    engines/twine/renderer/renderer.cpp
    engines/twine/scene/gamestate.cpp
    engines/twine/text.cpp
    engines/twine/twine.cpp


diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 26d95a94313..4308275f115 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -288,15 +288,13 @@ void Holomap::drawHolomapText(int32 centerx, int32 top, const char *title) {
 	_engine->_text->drawText(x, y, title);
 }
 
-void Holomap::drawHoloObj(const IVec3 &angle, int32 x, int32 y) {
-	_engine->_renderer->setAngleCamera(x, y, 0);
-	const IVec3 &destPos = _engine->_renderer->longWorldRot(0, 0, 1000);
-	_engine->_renderer->setPosCamera(0, 0, 0);
-	_engine->_renderer->setBaseRotation(angle);
-	_engine->_renderer->setCameraRotation(0, 0, distance(zDistanceTrajectory));
-	_engine->_interface->resetClip();
+void Holomap::drawHoloObj(const IVec3 &angle, int32 alpha, int32 beta) {
+	_engine->_renderer->setAngleCamera(alpha, beta, 0);
+	const IVec3 &m = _engine->_renderer->worldRotatePoint(IVec3(0, 0, 1000));
+	_engine->_renderer->setFollowCamera(0, 0, 0, angle.x, angle.y, angle.z, distance(zDistanceTrajectory));
+	_engine->_interface->unsetClip();
 	Common::Rect dirtyRect;
-	_engine->_renderer->renderIsoModel(destPos, x, y, LBAAngles::ANGLE_0, _engine->_resources->_holomapPointModelPtr, dirtyRect);
+	_engine->_renderer->renderIsoModel(m, alpha, beta, LBAAngles::ANGLE_0, _engine->_resources->_holomapPointModelPtr, dirtyRect);
 	_engine->copyBlockPhys(dirtyRect);
 }
 
@@ -336,7 +334,7 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
 	}
 
 	_engine->exitSceneryView();
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 	_engine->_screens->clearScreen();
 
 	initHoloDatas();
@@ -425,7 +423,7 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
 	_engine->_screens->clearScreen();
 	_engine->setPalette(_engine->_screens->_paletteRGBA);
 	_engine->_gameState->init3DGame();
-	_engine->_interface->loadClip();
+	_engine->_interface->restoreClip();
 
 	_engine->_text->initSceneTextBank();
 	_engine->_input->enableKeyMap(mainKeyMapId);
@@ -520,7 +518,7 @@ void Holomap::holoMap() {
 
 	_engine->_screens->fadeToBlack(_engine->_screens->_paletteRGBA);
 	_engine->_sound->stopSamples();
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 	_engine->_screens->clearScreen();
 	_engine->_screens->fadeToBlack(_engine->_screens->_paletteRGBA);
 
@@ -618,7 +616,7 @@ void Holomap::holoMap() {
 			const Common::Rect &rect = _engine->centerOnScreenX(scale(300), 0, scale(330));
 			// clip reduces the bad effect of https://bugs.scummvm.org/ticket/12074
 			// but it's not part of the original code
-			_engine->_interface->saveClip();
+			_engine->_interface->memoClip();
 			_engine->_interface->setClip(rect);
 			_engine->_interface->drawFilledRect(rect, COLOR_BLACK);
 			_engine->_renderer->setInverseAngleCamera(xRot, yRot, 0);
@@ -628,7 +626,7 @@ void Holomap::holoMap() {
 			_engine->_renderer->setCameraRotation(0, 0, distance(ZOOM_BIG_HOLO));
 			drawHoloMap(holomapImagePtr, holomapImageSize);
 			drawListPos(xRot, yRot, 0, true);
-			_engine->_interface->loadClip();
+			_engine->_interface->restoreClip();
 			drawHolomapText(_engine->width() / 2, 25, "HoloMap");
 			if (automove) {
 				// draw cursor
@@ -656,7 +654,7 @@ void Holomap::holoMap() {
 	_engine->_scene->_betaLight = betaLightTmp;
 
 	_engine->_gameState->init3DGame();
-	_engine->_interface->loadClip();
+	_engine->_interface->restoreClip();
 
 	_engine->_input->enableKeyMap(mainKeyMapId);
 	_engine->_text->initSceneTextBank();
diff --git a/engines/twine/menu/interface.cpp b/engines/twine/menu/interface.cpp
index f77ecdb40f5..09bf3627f57 100644
--- a/engines/twine/menu/interface.cpp
+++ b/engines/twine/menu/interface.cpp
@@ -196,15 +196,15 @@ bool Interface::setClip(const Common::Rect &rect) {
 	return true;
 }
 
-void Interface::saveClip() {
-	_savedClip = _clip;
+void Interface::memoClip() {
+	_memoClip = _clip;
 }
 
-void Interface::loadClip() {
-	_clip = _savedClip;
+void Interface::restoreClip() {
+	_clip = _memoClip;
 }
 
-void Interface::resetClip() {
+void Interface::unsetClip() {
 	_clip = _engine->rect();
 }
 
diff --git a/engines/twine/menu/interface.h b/engines/twine/menu/interface.h
index 748d4c8a3b7..1b60a59c95f 100644
--- a/engines/twine/menu/interface.h
+++ b/engines/twine/menu/interface.h
@@ -36,7 +36,7 @@ class TwinEEngine;
 class Interface {
 private:
 	TwinEEngine *_engine;
-	Common::Rect _savedClip;
+	Common::Rect _memoClip;
 
 public:
 	Interface(TwinEEngine *engine);
@@ -67,9 +67,9 @@ public:
 	void drawFilledRect(const Common::Rect &rect, uint8 colorIndex);
 
 	bool setClip(const Common::Rect &rect);
-	void saveClip(); // saveTextWindow
-	void loadClip(); // loadSavedTextWindow
-	void resetClip();
+	void memoClip(); // saveTextWindow
+	void restoreClip(); // loadSavedTextWindow
+	void unsetClip();
 };
 
 } // namespace TwinE
diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index 514d01ea1c5..fc84a885318 100644
--- a/engines/twine/menu/menu.cpp
+++ b/engines/twine/menu/menu.cpp
@@ -971,7 +971,7 @@ void Menu::drawKeys(int32 left, int32 top) {
 }
 
 void Menu::drawInfoMenu(int16 left, int16 top, int16 width) {
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 	const int16 height = 80;
 	const Common::Rect rect(left, top, left + width, top + height);
 	drawRectBorders(rect);
@@ -1035,8 +1035,8 @@ void Menu::drawBehaviour(int32 left, int32 top, HeroBehaviourType behaviour, int
 		drawRectBorders(boxRectCopy);
 	}
 
-	_engine->_interface->saveClip();
-	_engine->_interface->resetClip();
+	_engine->_interface->memoClip();
+	_engine->_interface->unsetClip();
 
 	if (behaviour == _engine->_actor->_heroBehaviour) {
 		const int titleOffset = 10;
@@ -1067,7 +1067,7 @@ void Menu::drawBehaviour(int32 left, int32 top, HeroBehaviourType behaviour, int
 
 	_engine->_renderer->renderBehaviourModel(boxRect, -600, angle, *_behaviourEntity, _moveMenu);
 
-	_engine->_interface->loadClip();
+	_engine->_interface->restoreClip();
 }
 
 void Menu::prepareAndDrawBehaviour(int32 left, int32 top, int32 angle, HeroBehaviourType behaviour) {
@@ -1217,7 +1217,7 @@ void Menu::drawItem(int32 left, int32 top, int32 item) {
 		_itemAngle[item] += LBAAngles::ANGLE_2;
 		_engine->_interface->setClip(rect);
 		_engine->_renderer->draw3dObject(itemX, itemY, _engine->_resources->_inventoryTable[item], _itemAngle[item], 15000);
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 		if (item == InventoryItems::kGasItem) {
 			_engine->_text->setFontColor(COLOR_WHITE);
 			const Common::String &inventoryNumGas = Common::String::format("%d", _engine->_gameState->_inventoryNumGas);
@@ -1236,7 +1236,7 @@ void Menu::drawInventoryItems(int32 left, int32 top) {
 	for (int32 item = 0; item < NUM_INVENTORY_ITEMS; item++) {
 		drawItem(left, top, item);
 	}
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 }
 
 void Menu::processInventoryMenu() {
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index a40581bd246..eed4e630703 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -339,7 +339,7 @@ void Redraw::processDrawListShadows(const DrawListStruct &drawCmd) {
 	addRedrawArea(_engine->_interface->_clip);
 
 	_engine->_debugScene->drawClip(renderRect);
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 }
 
 void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw) {
@@ -360,7 +360,7 @@ void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw)
 	}
 
 	if (!_engine->_renderer->affObjetIso(delta.x, delta.y, delta.z, LBAAngles::ANGLE_0, actor->_beta, LBAAngles::ANGLE_0, _engine->_resources->_bodyData[actor->_body], renderRect)) {
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 		return;
 	}
 
@@ -384,7 +384,7 @@ void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw)
 
 		_engine->_debugScene->drawClip(_engine->_interface->_clip);
 	}
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 }
 
 void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgRedraw) {
@@ -444,7 +444,7 @@ void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgR
 		}
 
 		_engine->_debugScene->drawClip(renderRect);
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 	}
 }
 
@@ -482,7 +482,7 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) {
 
 		// show clipping area
 		//drawRectBorders(renderRect);
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 	}
 }
 
@@ -617,7 +617,7 @@ void Redraw::processDrawList(DrawListStruct *drawList, int32 drawListPos, bool b
 			processDrawListExtras(drawCmd);
 		}
 
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 	}
 }
 
@@ -689,7 +689,7 @@ void Redraw::renderOverlays() {
 
 				addRedrawArea(_engine->_interface->_clip);
 
-				_engine->_interface->resetClip();
+				_engine->_interface->unsetClip();
 				break;
 			}
 			case OverlayType::koNumberRange: {
@@ -714,7 +714,7 @@ void Redraw::renderOverlays() {
 				_engine->_text->drawText(renderRect.left, renderRect.top, text);
 
 				addRedrawArea(_engine->_interface->_clip);
-				_engine->_interface->resetClip();
+				_engine->_interface->unsetClip();
 				break;
 			}
 			case OverlayType::koInventoryItem: {
@@ -730,7 +730,7 @@ void Redraw::renderOverlays() {
 				_engine->_menu->drawRectBorders(rect);
 				addRedrawArea(rect);
 				_engine->_gameState->init3DGame();
-				_engine->_interface->resetClip();
+				_engine->_interface->unsetClip();
 				break;
 			}
 			case OverlayType::koText: {
@@ -755,7 +755,7 @@ void Redraw::renderOverlays() {
 				_engine->_text->drawText(renderRect.left, renderRect.top, text);
 
 				addRedrawArea(_engine->_interface->_clip);
-				_engine->_interface->resetClip();
+				_engine->_interface->unsetClip();
 				break;
 			}
 			}
@@ -796,7 +796,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
 	int32 tmp_projPosX = _projPosScreen.x;
 	int32 tmp_projPosY = _projPosScreen.y;
 
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 
 	if (bgRedraw) {
 		_engine->freezeTime(false);
@@ -836,7 +836,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
 	renderOverlays();
 	renderText();
 
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 
 	// need to be here to fade after drawing all actors in scene
 	if (_engine->_scene->_needChangeScene == SCENE_CEILING_GRID_FADE_2) {
@@ -892,7 +892,7 @@ void Redraw::drawBubble(int32 actorIdx) {
 
 	if (_engine->_interface->setClip(renderRect)) {
 		_engine->_grid->drawSprite(renderRect.left, renderRect.top, spritePtr);
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 	}
 }
 
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index cd411132948..dafcc89c3c7 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1771,7 +1771,7 @@ void Renderer::renderBehaviourModel(const Common::Rect &rect, int32 y, int32 ang
 	} else {
 		affObjetIso(0, y, 0, LBAAngles::ANGLE_0, angle, LBAAngles::ANGLE_0, bodyData, dummy);
 	}
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 }
 
 void Renderer::draw3dObject(int32 x, int32 y, const BodyData &bodyData, int32 angle, int32 cameraZoom) {
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index ca796e6c262..90c9ba56fd8 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -102,7 +102,7 @@ void GameState::initHeroVars() {
 
 void GameState::initEngineVars() {
 	debug(2, "Init engine variables");
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 
 	_engine->_scene->_alphaLight = LBAAngles::ANGLE_315;
 	_engine->_scene->_betaLight = LBAAngles::ANGLE_334;
@@ -349,7 +349,7 @@ void GameState::doFoundObj(InventoryItems item) {
 	_engine->_music->stopMusic();
 	_engine->_text->initDial(TextBankId::Inventory_Intro_and_Holomap);
 
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 	_engine->_text->initItemFoundText(item);
 	_engine->_text->initDialogueBox();
 
@@ -372,7 +372,7 @@ void GameState::doFoundObj(InventoryItems item) {
 	int16 itemAngle = LBAAngles::ANGLE_0;
 	for (;;) {
 		FrameMarker frame(_engine, 66);
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 		_engine->_redraw->_currNumOfRedrawBox = 0;
 		_engine->_redraw->blitBackgroundAreas();
 		_engine->_interface->drawTransparentBox(boxRect, 4);
@@ -385,7 +385,7 @@ void GameState::doFoundObj(InventoryItems item) {
 
 		_engine->_menu->drawRectBorders(boxRect);
 		_engine->_redraw->addRedrawArea(boxRect);
-		_engine->_interface->resetClip();
+		_engine->_interface->unsetClip();
 		init3DGame();
 
 		if (_engine->_animations->setModelAnimation(currentAnimState, currentAnimData, bodyData, &_engine->_scene->_sceneHero->_animTimerData)) {
@@ -401,7 +401,7 @@ void GameState::doFoundObj(InventoryItems item) {
 		_engine->_redraw->addRedrawArea(modelRect);
 
 		if (textState == ProgressiveTextState::ContinueRunning) {
-			_engine->_interface->resetClip();
+			_engine->_interface->unsetClip();
 			textState = _engine->_text->updateProgressiveText();
 		} else {
 			_engine->_text->fadeInRemainingChars();
@@ -443,7 +443,7 @@ void GameState::doFoundObj(InventoryItems item) {
 	_engine->_text->stopVox(_engine->_text->_currDialTextEntry);
 
 	_engine->_scene->_sceneHero->_animTimerData = tmpAnimTimer;
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 }
 
 void GameState::processGameChoices(TextId choiceIdx) {
@@ -528,7 +528,7 @@ void GameState::processGameoverAnimation() {
 
 	_engine->delaySkip(2000);
 
-	_engine->_interface->resetClip();
+	_engine->_interface->unsetClip();
 	_engine->restoreFrontBuffer();
 	init3DGame();
 
diff --git a/engines/twine/text.cpp b/engines/twine/text.cpp
index 16dac63ee74..25bc297ff68 100644
--- a/engines/twine/text.cpp
+++ b/engines/twine/text.cpp
@@ -659,11 +659,11 @@ bool Text::displayText(TextId index, bool showText, bool playVox, bool loop) {
 
 bool Text::drawTextProgressive(TextId index, bool playVox, bool loop) {
 	_engine->exitSceneryView();
-	_engine->_interface->saveClip();
-	_engine->_interface->resetClip();
+	_engine->_interface->memoClip();
+	_engine->_interface->unsetClip();
 	_engine->saveFrontBuffer();
 	const bool aborted = displayText(index, _engine->_cfgfile.FlagDisplayText, playVox, loop);
-	_engine->_interface->loadClip();
+	_engine->_interface->restoreClip();
 	return aborted;
 }
 
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index 571f4cd9020..9d3372d84b2 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -597,7 +597,7 @@ void TwinEEngine::initAll() {
 	_scene->_sceneHero = _scene->getActor(OWN_ACTOR_SCENE_INDEX);
 
 	// Set clip to fullscreen by default, allows main menu to render properly after load
-	_interface->resetClip();
+	_interface->unsetClip();
 
 	// getting configuration file
 	initConfigurations();


Commit: 2cc9844c9e4bcd3359e3a8c933e0af729f7a2732
    https://github.com/scummvm/scummvm/commit/2cc9844c9e4bcd3359e3a8c933e0af729f7a2732
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2023-01-20T17:17:37+01:00

Commit Message:
TWINE: fixed holomap arrow positions

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


diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 4308275f115..2795dd2ddeb 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -454,9 +454,8 @@ void Holomap::drawListPos(int xRot, int yRot, int zRot, bool pos) {
 			continue;
 		}
 		const Location &loc = _locations[locationIdx];
-		const IVec3 &cameraRot = _engine->_renderer->setAngleCamera(loc.angleX, loc.angleY, 0);
-		IVec3 m = _engine->_renderer->worldRotatePoint(IVec3(0, 0, 1000 + loc.size));
-		m.x = cameraRot.x;
+		_engine->_renderer->setAngleCamera(loc.angleX, loc.angleY, 0);
+		const IVec3 &m = _engine->_renderer->worldRotatePoint(IVec3(0, 0, 1000 + loc.size));
 		const IVec3 &m1 = _engine->_renderer->worldRotatePoint(IVec3(0, 0, 1500));
 		_engine->_renderer->setInverseAngleCamera(xRot, yRot, zRot);
 		_engine->_renderer->setCameraRotation(0, 0, distance(ZOOM_BIG_HOLO));
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index dafcc89c3c7..4e4ff9757dd 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -165,13 +165,20 @@ IVec3 Renderer::setAngleCamera(int32 x, int32 y, int32 z) {
 	return _cameraRot;
 }
 
-IVec3 Renderer::longWorldRot(int32 x, int32 y, int32 z) {
-	const int32 vx = (_matrixWorld.row1.x * x + _matrixWorld.row1.y * y + _matrixWorld.row1.z * z) / SCENE_SIZE_HALF;
-	const int32 vy = (_matrixWorld.row2.x * x + _matrixWorld.row2.y * y + _matrixWorld.row2.z * z) / SCENE_SIZE_HALF;
-	const int32 vz = (_matrixWorld.row3.x * x + _matrixWorld.row3.y * y + _matrixWorld.row3.z * z) / SCENE_SIZE_HALF;
+IVec3 Renderer::worldRotatePoint(const IVec3& vec) {
+	const int32 vx = (_matrixWorld.row1.x * vec.x + _matrixWorld.row1.y * vec.y + _matrixWorld.row1.z * vec.z) / SCENE_SIZE_HALF;
+	const int32 vy = (_matrixWorld.row2.x * vec.x + _matrixWorld.row2.y * vec.y + _matrixWorld.row2.z * vec.z) / SCENE_SIZE_HALF;
+	const int32 vz = (_matrixWorld.row3.x * vec.x + _matrixWorld.row3.y * vec.y + _matrixWorld.row3.z * vec.z) / SCENE_SIZE_HALF;
 	return IVec3(vx, vy, vz);
 }
 
+IVec3 Renderer::longWorldRot(int32 x, int32 y, int32 z) {
+	const int64 vx = ((int64)_matrixWorld.row1.x * (int64)x + (int64)_matrixWorld.row1.y * (int64)y + (int64)_matrixWorld.row1.z * (int64)z) / SCENE_SIZE_HALF;
+	const int64 vy = ((int64)_matrixWorld.row2.x * (int64)x + (int64)_matrixWorld.row2.y * (int64)y + (int64)_matrixWorld.row2.z * (int64)z) / SCENE_SIZE_HALF;
+	const int64 vz = ((int64)_matrixWorld.row3.x * (int64)x + (int64)_matrixWorld.row3.y * (int64)y + (int64)_matrixWorld.row3.z * (int64)z) / SCENE_SIZE_HALF;
+	return IVec3((int32)vx, (int32)vy, (int32)vz);
+}
+
 IVec3 Renderer::longInverseRot(int32 x, int32 y, int32 z) {
 	const int32 vx = (_matrixWorld.row1.x * x + _matrixWorld.row2.x * y + _matrixWorld.row3.x * z) / SCENE_SIZE_HALF;
 	const int32 vy = (_matrixWorld.row1.y * x + _matrixWorld.row2.y * y + _matrixWorld.row3.y * z) / SCENE_SIZE_HALF;
diff --git a/engines/twine/renderer/renderer.h b/engines/twine/renderer/renderer.h
index cc4798406f1..98d06058203 100644
--- a/engines/twine/renderer/renderer.h
+++ b/engines/twine/renderer/renderer.h
@@ -239,9 +239,7 @@ public:
 	void setLightVector(int32 angleX, int32 angleY, int32 angleZ);
 	IVec3 longWorldRot(int32 x, int32 y, int32 z);
 
-	inline IVec3 worldRotatePoint(const IVec3& vec) {
-		return longWorldRot(vec.x, vec.y, vec.z);
-	}
+	IVec3 worldRotatePoint(const IVec3& vec);
 
 	void fillVertices(int16 vtop, int16 vbottom, uint8 renderType, uint16 color);
 	void renderPolygons(const CmdRenderPolygon &polygon, ComputedVertex *vertices, int vtop, int vbottom);




More information about the Scummvm-git-logs mailing list