[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