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

mgerhardy noreply at scummvm.org
Wed Nov 6 17:06:37 UTC 2024


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:
e9cef50975 TWINE: extracted into own method to match original sources
fe50ac1fda TWINE: add holomap variable debugging to the imgui windows
a5e06bdbed TWINE: Added detection entry submitted in #15113


Commit: e9cef50975dd39165a833819157ee114d0d5b7b8
    https://github.com/scummvm/scummvm/commit/e9cef50975dd39165a833819157ee114d0d5b7b8
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-11-06T18:06:09+01:00

Commit Message:
TWINE: extracted into own method to match original sources

Changed paths:
    engines/twine/audio/sound.cpp
    engines/twine/holomap_v1.cpp
    engines/twine/holomap_v1.h


diff --git a/engines/twine/audio/sound.cpp b/engines/twine/audio/sound.cpp
index 128e9288eb8..b8d758e2cb1 100644
--- a/engines/twine/audio/sound.cpp
+++ b/engines/twine/audio/sound.cpp
@@ -214,7 +214,7 @@ void Sound::pauseSamples() {
 	_engine->_system->getMixer()->pauseAll(true);
 }
 
-void Sound::stopSamples() {
+void Sound::stopSamples() { // HQ_StopSample
 	if (!_engine->_cfgfile.Sound) {
 		return;
 	}
diff --git a/engines/twine/holomap_v1.cpp b/engines/twine/holomap_v1.cpp
index 8572f119e2f..24d1f9887eb 100644
--- a/engines/twine/holomap_v1.cpp
+++ b/engines/twine/holomap_v1.cpp
@@ -113,7 +113,6 @@ bool HolomapV1::setHoloPos(int32 locationIdx) {
 		_engine->_gameState->_holomapFlags[locationIdx] = HOLOMAP_ACTIVE;
 		return true;
 	}
-	// TODO: lba2
 	_engine->_gameState->_holomapFlags[locationIdx] = HOLOMAP_ACTIVE | HOLOMAP_VISITED;
 	return true;
 }
@@ -534,6 +533,13 @@ void HolomapV1::drawListPos(int calpha, int cbeta, int cgamma, bool pos) {
 	}
 }
 
+void HolomapV1::drawCursor() {
+	// draw cursor
+	const int32 cameraPosY = scale(190);
+	const Common::Rect &targetRect = _engine->centerOnScreenX(SIZE_CURSOR * 2, 170, SIZE_CURSOR * 2);
+	_engine->_menu->drawRectBorders(targetRect.left, cameraPosY - 20, targetRect.right, cameraPosY + 20, 15, 15);
+}
+
 void HolomapV1::holoMap() {
 	const int32 alphaLightTmp = _engine->_scene->_alphaLight;
 	const int32 betaLightTmp = _engine->_scene->_betaLight;
@@ -668,9 +674,7 @@ void HolomapV1::holoMap() {
 			drawListPos(calpha, cbeta, cgamma, true);
 			_engine->_interface->restoreClip();
 			if (automove) {
-				// draw cursor
-				const Common::Rect &targetRect = _engine->centerOnScreenX(SIZE_CURSOR * 2, 170, SIZE_CURSOR * 2);
-				_engine->_menu->drawRectBorders(targetRect.left, cameraPosY - 20, targetRect.right, cameraPosY + 20, 15, 15);
+				drawCursor();
 			}
 		}
 
diff --git a/engines/twine/holomap_v1.h b/engines/twine/holomap_v1.h
index eef8097cbe5..e8d564641fd 100644
--- a/engines/twine/holomap_v1.h
+++ b/engines/twine/holomap_v1.h
@@ -75,7 +75,7 @@ private:
 	void drawTitle(int32 centerx, int32 top, const char *title);
 	int32 searchNextArrow(int32 num) const;
 	int32 searchPrevArrow(int32 num) const;
-
+	void drawCursor(); // DrawCurseur
 	void drawListPos(int xRot, int yRot, int zRot, bool lower);
 
 	/**


Commit: fe50ac1fdab8027f3c16249f2b185ef91c3ea1d0
    https://github.com/scummvm/scummvm/commit/fe50ac1fdab8027f3c16249f2b185ef91c3ea1d0
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-11-06T18:06:09+01:00

Commit Message:
TWINE: add holomap variable debugging to the imgui windows

Changed paths:
    engines/twine/debugger/debugtools.cpp
    engines/twine/detection.cpp
    engines/twine/holomap_v1.cpp
    engines/twine/holomap_v1.h
    engines/twine/renderer/renderer.cpp
    engines/twine/shared.h


diff --git a/engines/twine/debugger/debugtools.cpp b/engines/twine/debugger/debugtools.cpp
index 7f4be59ac7b..654a71b706b 100644
--- a/engines/twine/debugger/debugtools.cpp
+++ b/engines/twine/debugger/debugtools.cpp
@@ -33,6 +33,7 @@
 #include "twine/debugger/debug_state.h"
 #include "twine/debugger/dt-internal.h"
 #include "twine/holomap.h"
+#include "twine/holomap_v1.h"
 #include "twine/parser/entity.h"
 #include "twine/renderer/redraw.h"
 #include "twine/renderer/screens.h"
@@ -187,6 +188,25 @@ static void holomapFlagsWindow(TwinEEngine *engine) {
 			}
 			ImGui::EndTable();
 		}
+
+		if (engine->isLBA1()) {
+			HolomapV1 *holomap = (HolomapV1*)engine->_holomap;
+
+			ImGuiEx::InputInt("current", &holomap->_current);
+			ImGuiEx::InputInt("otimer", &holomap->_otimer);
+			ImGuiEx::InputInt("dalpha", &holomap->_dalpha);
+			ImGuiEx::InputInt("dbeta", &holomap->_dbeta);
+			ImGuiEx::InputInt("calpha", &holomap->_calpha);
+			ImGuiEx::InputInt("cbeta", &holomap->_cbeta);
+			ImGuiEx::InputInt("cgamma", &holomap->_cgamma);
+			ImGuiEx::InputInt("oalpha", &holomap->_oalpha);
+			ImGuiEx::InputInt("obeta", &holomap->_obeta);
+
+			ImGui::Checkbox("automove", &holomap->_automove);
+			ImGui::Checkbox("flagredraw", &holomap->_flagredraw);
+			ImGui::Checkbox("dialstat", &holomap->_dialstat);
+			ImGui::Checkbox("flagpal", &holomap->_flagpal);
+		}
 	}
 	ImGui::End();
 }
diff --git a/engines/twine/detection.cpp b/engines/twine/detection.cpp
index f36f8239755..0a063ac7b79 100644
--- a/engines/twine/detection.cpp
+++ b/engines/twine/detection.cpp
@@ -44,6 +44,7 @@ static const DebugChannelDef debugFlagList[] = {
 	{TwinE::kDebugPalette, "palette", "Palette debugging"},
 	{TwinE::kDebugCollision, "collision", "Collision debugging"},
 	{TwinE::kDebugAnimation, "animation", "Animation debugging"},
+	{TwinE::kDebugHolomap, "holomap", "Holomap debugging"},
 	DEBUG_CHANNEL_END
 };
 
diff --git a/engines/twine/holomap_v1.cpp b/engines/twine/holomap_v1.cpp
index 24d1f9887eb..6daef4931ae 100644
--- a/engines/twine/holomap_v1.cpp
+++ b/engines/twine/holomap_v1.cpp
@@ -301,8 +301,9 @@ void HolomapV1::drawHoloObj(const IVec3 &angle, int32 alpha, int32 beta, int16 s
 	const IVec3 &m = _engine->_renderer->worldRotatePoint(IVec3(0, 0, 1000 + size));
 	_engine->_renderer->setFollowCamera(0, 0, 0, angle.x, angle.y, angle.z, distance(zDistanceTrajectory));
 	_engine->_interface->unsetClip();
+	const IVec3 &m1 = _engine->_renderer->worldRotatePoint(m);
 	Common::Rect dirtyRect;
-	_engine->_renderer->renderIsoModel(m, alpha, beta, LBAAngles::ANGLE_0, _engine->_resources->_holomapPointModelPtr, dirtyRect);
+	_engine->_renderer->renderIsoModel(m1, alpha, beta, LBAAngles::ANGLE_0, _engine->_resources->_holomapPointModelPtr, dirtyRect);
 	_engine->copyBlockPhys(dirtyRect);
 }
 
@@ -570,20 +571,21 @@ void HolomapV1::holoMap() {
 		error("Failed to load holomap image");
 	}
 
-	int32 current = _engine->_scene->_numCube;
-	int32 otimer = _engine->timerRef;
-	int32 dalpha = ClampAngle(_listHoloPos[current].alpha);
-	int32 dbeta = ClampAngle(_listHoloPos[current].beta);
-	int32 calpha = dalpha;
-	int32 cbeta = dbeta;
-	int32 cgamma = 0;
-	int32 oalpha = dalpha;
-	int32 obeta = dbeta;
-	bool automove = false;
-	bool flagredraw = true;
-	bool dialstat = true;
-	bool flagpal = true;
+	_current = _engine->_scene->_numCube;
+	_otimer = _engine->timerRef;
+	_dalpha = ClampAngle(_listHoloPos[_current].alpha);
+	_dbeta = ClampAngle(_listHoloPos[_current].beta);
+	_calpha = _dalpha;
+	_cbeta = _dbeta;
+	_cgamma = 0;
+	_oalpha = _dalpha;
+	_obeta = _dbeta;
+	_automove = false;
+	_flagredraw = true;
+	_dialstat = true;
+	_flagpal = true;
 	_engine->_input->enableKeyMap(holomapKeyMapId);
+
 	for (;;) {
 		FrameMarker frame(_engine);
 		_engine->_input->readKeys();
@@ -592,106 +594,111 @@ void HolomapV1::holoMap() {
 		}
 
 		if (_engine->_input->toggleActionIfActive(TwinEActionType::HolomapPrev)) {
-			current = searchPrevArrow(current);
-			if (current == -1) {
-				current = _engine->_scene->_numCube;
+			_current = searchPrevArrow(_current);
+			if (_current == -1) {
+				_current = _engine->_scene->_numCube;
 			}
-			dialstat = true;
-			oalpha = calpha;
-			obeta = cbeta;
-			otimer = _engine->timerRef;
-			dalpha = _listHoloPos[current].alpha;
-			dbeta = _listHoloPos[current].beta;
-			automove = true;
-			flagredraw = true;
+			_dialstat = true;
+			_oalpha = _calpha;
+			_obeta = _cbeta;
+			_otimer = _engine->timerRef;
+			_dalpha = _listHoloPos[_current].alpha;
+			_dbeta = _listHoloPos[_current].beta;
+			_automove = true;
+			_flagredraw = true;
+			debugC(1, TwinE::kDebugHolomap, "Holomap prev: %i (target angles: alpha %d, beta: %d)", _current, _dalpha, _dbeta);
 		} else if (_engine->_input->toggleActionIfActive(TwinEActionType::HolomapNext)) {
-			current = searchNextArrow(current);
-			if (current == -1) {
-				current = _engine->_scene->_numCube;
+			_current = searchNextArrow(_current);
+			if (_current == -1) {
+				_current = _engine->_scene->_numCube;
 			}
-			dialstat = true;
-			oalpha = calpha;
-			obeta = cbeta;
-			otimer = _engine->timerRef;
-			dalpha = _listHoloPos[current].alpha;
-			dbeta = _listHoloPos[current].beta;
-			automove = true;
-			flagredraw = true;
+			_dialstat = true;
+			_oalpha = _calpha;
+			_obeta = _cbeta;
+			_otimer = _engine->timerRef;
+			_dalpha = _listHoloPos[_current].alpha;
+			_dbeta = _listHoloPos[_current].beta;
+			_automove = true;
+			_flagredraw = true;
+			debugC(1, TwinE::kDebugHolomap, "Holomap next: %i (target angles: alpha %d, beta: %d)", _current, _dalpha, _dbeta);
 		}
 
-		if (!automove) {
+		if (!_automove) {
 			if (_engine->_input->isActionActive(TwinEActionType::HolomapDown)) {
-				calpha += LBAAngles::ANGLE_2;
-				calpha = ClampAngle(calpha);
-				flagredraw = true;
+				_calpha += LBAAngles::ANGLE_2;
+				_calpha = ClampAngle(_calpha);
+				_flagredraw = true;
 			} else if (_engine->_input->isActionActive(TwinEActionType::HolomapUp)) {
-				calpha -= LBAAngles::ANGLE_2;
-				calpha = ClampAngle(calpha);
-				flagredraw = true;
+				_calpha -= LBAAngles::ANGLE_2;
+				_calpha = ClampAngle(_calpha);
+				_flagredraw = true;
 			}
 			if (_engine->_input->isActionActive(TwinEActionType::HolomapRight)) {
-				cbeta += LBAAngles::ANGLE_2;
-				cbeta = ClampAngle(cbeta);
-				flagredraw = true;
+				_cbeta += LBAAngles::ANGLE_2;
+				_cbeta = ClampAngle(_cbeta);
+				_flagredraw = true;
 			} else if (_engine->_input->isActionActive(TwinEActionType::HolomapLeft)) {
-				cbeta -= LBAAngles::ANGLE_2;
-				cbeta = ClampAngle(cbeta);
-				flagredraw = true;
+				_cbeta -= LBAAngles::ANGLE_2;
+				_cbeta = ClampAngle(_cbeta);
+				_flagredraw = true;
 			}
 		}
 
-		if (automove) {
-			const int32 dt = _engine->timerRef - otimer;
-			calpha = boundRuleThree(oalpha, dalpha, 75, dt);
-			cbeta = boundRuleThree(obeta, dbeta, 75, dt);
-			flagredraw = true;
+		if (_automove) {
+			const int32 dt = _engine->timerRef - _otimer;
+			_calpha = boundRuleThree(_oalpha, _dalpha, 75, dt);
+			_cbeta = boundRuleThree(_obeta, _dbeta, 75, dt);
+			_flagredraw = true;
+			debugC(1, TwinE::kDebugHolomap, "Holomap move: %i (target angles: alpha %d, beta: %d, current: alpha %d, beta %d)", _current, _dalpha, _dbeta, _calpha, _cbeta);
 		}
 
-		if (!flagpal) {
+		if (!_flagpal) {
 			// animate the water surface
 			_engine->setPalette(HOLOMAP_PALETTE_INDEX, NUM_HOLOMAPCOLORS, &_rotPal[3 * _rotPalPos]);
 			_rotPalPos++;
 			if (_rotPalPos == NUM_HOLOMAPCOLORS) {
 				_rotPalPos = 0;
 			}
-			flagredraw = true;
+			_flagredraw = true;
 		}
 
-		if (flagredraw) {
-			flagredraw = false;
+		if (_flagredraw) {
+			_flagredraw = false;
 			const Common::Rect &rect = _engine->centerOnScreenX(scale(300), 50, scale(280));
 			// clip reduces the bad effect of https://bugs.scummvm.org/ticket/12074
 			// but it's not part of the original code
 			_engine->_interface->memoClip();
 			_engine->_interface->setClip(rect);
 			_engine->_interface->box(rect, COLOR_BLACK);
-			_engine->_renderer->setInverseAngleCamera(calpha, cbeta, cgamma);
-			_engine->_renderer->setLightVector(calpha, cbeta, 0);
-			drawListPos(calpha, cbeta, cgamma, false);
-			_engine->_renderer->setInverseAngleCamera(calpha, cbeta, cgamma);
+			_engine->_renderer->setInverseAngleCamera(_calpha, _cbeta, _cgamma);
+			_engine->_renderer->setLightVector(_calpha, _cbeta, 0);
+			drawListPos(_calpha, _cbeta, _cgamma, false);
+			_engine->_renderer->setInverseAngleCamera(_calpha, _cbeta, _cgamma);
 			_engine->_renderer->setCameraRotation(0, 0, distance(ZOOM_BIG_HOLO));
 			drawHoloMap(holomapImagePtr, holomapImageSize);
-			drawListPos(calpha, cbeta, cgamma, true);
+			drawListPos(_calpha, _cbeta, _cgamma, true);
 			_engine->_interface->restoreClip();
-			if (automove) {
+			if (_automove) {
 				drawCursor();
 			}
+			_engine->copyBlockPhys(rect);
 		}
 
-		if (automove && dalpha == calpha && dbeta == cbeta) {
-			automove = false;
+		if (_automove && _dalpha == _calpha && _dbeta == _cbeta) {
+			_automove = false;
+			debugC(1, TwinE::kDebugHolomap, "Holomap stop auto move");
 		}
 
-		if (dialstat) {
-			_engine->_text->drawHolomapLocation(_listHoloPos[current].mess);
-			dialstat = false;
+		if (_dialstat) {
+			_engine->_text->drawHolomapLocation(_listHoloPos[_current].mess);
+			_dialstat = false;
 		}
 
 		++_engine->timerRef;
 		debugC(3, kDebugLevels::kDebugTimers, "Holomap time: %i", _engine->timerRef);
 
-		if (flagpal) {
-			flagpal = false;
+		if (_flagpal) {
+			_flagpal = false;
 			_engine->_screens->fadeToPal(_engine->_screens->_palettePcx);
 		}
 	}
diff --git a/engines/twine/holomap_v1.h b/engines/twine/holomap_v1.h
index e8d564641fd..6c3f1671897 100644
--- a/engines/twine/holomap_v1.h
+++ b/engines/twine/holomap_v1.h
@@ -98,6 +98,20 @@ public:
 	HolomapV1(TwinEEngine *engine) : Super(engine) {}
 	virtual ~HolomapV1() = default;
 
+	int32 _current = 0;
+	int32 _otimer = 0;
+	int32 _dalpha = 0;
+	int32 _dbeta = 0;
+	int32 _calpha = 0;
+	int32 _cbeta = 0;
+	int32 _cgamma = 0;
+	int32 _oalpha = 0;
+	int32 _obeta = 0;
+	bool _automove = false;
+	bool _flagredraw = false;
+	bool _dialstat = false;
+	bool _flagpal = false;
+
 	/**
 	 * Set Holomap location position
 	 * @param locationIdx Scene where position must be set
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 201233b6763..60df7dd9171 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1856,8 +1856,8 @@ void Renderer::fillHolomapTriangles(const ComputedVertex &vertex0, const Compute
 }
 
 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;
+	int32 lymin = 32000;
+	int32 lymax = -32000;
 	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);
diff --git a/engines/twine/shared.h b/engines/twine/shared.h
index e6d5fa9402e..ce4b5e7cf77 100644
--- a/engines/twine/shared.h
+++ b/engines/twine/shared.h
@@ -810,7 +810,8 @@ enum kDebugLevels {
 	kDebugMovies = 1 << 6,
 	kDebugPalette = 1 << 7,
 	kDebugCollision = 1 << 8,
-	kDebugAnimation = 1 << 9
+	kDebugAnimation = 1 << 9,
+	kDebugHolomap = 1 << 10
 };
 
 } // namespace TwinE


Commit: a5e06bdbeda588d04bba08b3e2d205a8d0193b6d
    https://github.com/scummvm/scummvm/commit/a5e06bdbeda588d04bba08b3e2d205a8d0193b6d
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-11-06T18:06:09+01:00

Commit Message:
TWINE: Added detection entry submitted in #15113

https://bugs.scummvm.org/ticket/15113

Changed paths:
    engines/twine/detection.cpp


diff --git a/engines/twine/detection.cpp b/engines/twine/detection.cpp
index 0a063ac7b79..37e0f80db60 100644
--- a/engines/twine/detection.cpp
+++ b/engines/twine/detection.cpp
@@ -155,6 +155,11 @@ static const ADGameDescription twineGameDescriptions[] = {
 	// 14 Oct 1994 at 13:22
 	TWINE_DETECTION_ENTRY("lba", "Relentless: Twinsen's Adventure - CD Original North America Version", AD_ENTRY1s("RELENT.EXE", "c1a887e38283d43f271249ad9f2a73ef", 258513), Common::kPlatformDOS, TwinE::TF_VERSION_USA | ADGF_CD),
 
+	// Relentless: Little Big Adventure (Europe) (EN, FR, DE, IT, ES)
+	// text.hqr
+	// 22 February 1997 at 14:20
+	TWINE_DETECTION_ENTRY("lba", "", AD_ENTRY1s("text.hqr", "c30df57432c324a5f4673e013f88acf9", 258513), Common::kPlatformUnknown, 0),
+
 	// Little Big Adventure - Demo Version (FR)
 	// LBA.EXE
 	// 21 October 1994 at 15:25




More information about the Scummvm-git-logs mailing list