[Scummvm-git-logs] scummvm master -> 9bcae0f2ee906ba921eb775e181acd6da270c6bf
mgerhardy
martin.gerhardy at gmail.com
Tue Aug 17 21:10:58 UTC 2021
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e6507e0664 TWINE: simplified Holomap::renderLocations
5360c16ed2 TWINE: fixed holomap palette fade
4146ef64a2 TWINE: fixed high res support for the holomap
9bcae0f2ee TWINE: fixed holomap path point model rendering
Commit: e6507e066437cc95e303dec4f3370cb6b84d8dc4
https://github.com/scummvm/scummvm/commit/e6507e066437cc95e303dec4f3370cb6b84d8dc4
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-08-17T22:57:50+02:00
Commit Message:
TWINE: simplified Holomap::renderLocations
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 5495e421fe..9544942a38 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -432,25 +432,17 @@ void Holomap::renderLocations(int xRot, int yRot, int zRot, bool lower) {
const Location &loc = _locations[locationIdx];
_engine->_renderer->setBaseRotation(loc.angle.x, loc.angle.y, 0);
const IVec3 &destPos = _engine->_renderer->getBaseRotationPosition(0, 0, loc.angle.z + 1000);
- int32 xpos1 = destPos.x;
- int32 ypos1 = destPos.y;
- int32 zpos1 = destPos.z;
const IVec3 &destPos2 = _engine->_renderer->getBaseRotationPosition(0, 0, 1500);
- int32 xpos2 = destPos2.x;
- int32 ypos2 = destPos2.y;
- int32 zpos2 = destPos2.z;
_engine->_renderer->setBaseRotation(xRot, yRot, zRot, true);
- int32 zpos1_copy = zpos1;
_engine->_renderer->setBaseRotationPos(0, 0, 9500);
- const IVec3 &destPos3 = _engine->_renderer->getBaseRotationPosition(xpos1, ypos1, zpos1);
- int32 zpos1_copy2 = destPos3.z;
- const IVec3 &destPos4 = _engine->_renderer->getBaseRotationPosition(xpos2, ypos2, zpos2);
+ const IVec3 &destPos3 = _engine->_renderer->getBaseRotationPosition(destPos);
+ const IVec3 &destPos4 = _engine->_renderer->getBaseRotationPosition(destPos2);
if (lower) {
- if (zpos1_copy2 > destPos4.z) {
+ if (destPos3.z > destPos4.z) {
continue;
}
} else {
- if (destPos4.z > zpos1_copy2) {
+ if (destPos4.z > destPos3.z) {
continue;
}
}
@@ -459,12 +451,12 @@ void Holomap::renderLocations(int xRot, int yRot, int zRot, bool lower) {
flags |= 2u; // model type
}
DrawListStruct &drawList = drawListArray[n];
- drawList.posValue = zpos1_copy2;
+ drawList.posValue = destPos3.z;
drawList.actorIdx = locationIdx;
drawList.type = flags;
- drawList.x = xpos1;
- drawList.y = ypos1;
- drawList.z = zpos1_copy;
+ drawList.x = destPos.x;
+ drawList.y = destPos.y;
+ drawList.z = destPos.z;
++n;
}
}
Commit: 5360c16ed2c1464c3d688eb84a0a30551fa48edb
https://github.com/scummvm/scummvm/commit/5360c16ed2c1464c3d688eb84a0a30551fa48edb
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-08-17T22:57:50+02:00
Commit Message:
TWINE: fixed holomap palette fade
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 9544942a38..deb558a101 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -123,7 +123,6 @@ void Holomap::loadHolomapGFX() {
prepareHolomapProjectedPositions();
prepareHolomapSurface();
_holomapPaletteIndex = 0;
- _engine->setPalette(_engine->_screens->_paletteRGBACustom);
}
static int sortHolomapSurfaceCoordsByDepth(const void *a1, const void *a2) {
@@ -320,9 +319,10 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
_engine->exitSceneryView();
_engine->_interface->resetClip();
_engine->_screens->clearScreen();
- _engine->setPalette(_engine->_screens->_paletteRGBA);
loadHolomapGFX();
+ _engine->setPalette(_engine->_screens->_paletteRGBACustom);
+
ScopedEngineFreeze timeFreeze(_engine);
const int32 cameraPosX = _engine->width() / 2 + 80;
const int32 cameraPosY = _engine->height() / 2;
@@ -393,8 +393,7 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
if (fadeInPalette) {
fadeInPalette = false;
- // TODO: this does a flip - which puts stuff onto the screen that shouldn't be there
- //_engine->_screens->fadeToPal(_engine->_screens->paletteRGBA);
+ //_engine->_screens->fadeToPal(_engine->_screens->_paletteRGBACustom);
}
++_engine->_lbaTime;
}
@@ -494,7 +493,7 @@ void Holomap::processHolomap() {
_engine->_interface->saveClip();
_engine->_interface->resetClip();
_engine->_screens->clearScreen();
- _engine->setPalette(_engine->_screens->_paletteRGBA);
+ _engine->_screens->fadeToBlack(_engine->_screens->_paletteRGBA);
loadHolomapGFX();
@@ -607,8 +606,7 @@ void Holomap::processHolomap() {
//_engine->restoreFrontBuffer();
if (fadeInPalette) {
fadeInPalette = false;
- // TODO: this does a flip - which puts stuff onto the screen that shouldn't be there
- //_engine->_screens->fadeToPal(_engine->_screens->_paletteRGBA);
+ _engine->_screens->fadeToPal(_engine->_screens->_paletteRGBACustom);
}
}
Commit: 4146ef64a20b4223dd5b558ad84435c9bb53c7b0
https://github.com/scummvm/scummvm/commit/4146ef64a20b4223dd5b558ad84435c9bb53c7b0
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-08-17T23:10:13+02:00
Commit Message:
TWINE: fixed high res support for the holomap
Changed paths:
engines/twine/holomap.cpp
engines/twine/holomap.h
engines/twine/twine.cpp
engines/twine/twine.h
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index deb558a101..5b5daebfa7 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -56,8 +56,25 @@ namespace TwinE {
#define HOLOMAP_RESET (HOLOMAP_VISITED | HOLOMAP_UNK3 | HOLOMAP_UNK4 | HOLOMAP_UNK5 | HOLOMAP_UNK6 | HOLOMAP_UNK7)
#define HOLOMAP_ACTIVE (HOLOMAP_CAN_FOCUS | HOLOMAP_ARROW)
+static const float zDistanceHolomap = 9500.0f;
+static const float zDistanceTrajectory = 5300.0f;
+
Holomap::Holomap(TwinEEngine *engine) : _engine(engine) {}
+int32 Holomap::distance(int32 distance) const {
+ const float w = (float)_engine->width() / (float)ORIGINAL_WIDTH;
+ const float h = (float)_engine->height() / (float)ORIGINAL_HEIGHT;
+ const float f = MIN<float>(w, h);
+ return (int32)((float)distance / f);
+}
+
+int32 Holomap::scale(int32 val) const {
+ const float w = (float)_engine->width() / (float)ORIGINAL_WIDTH;
+ const float h = (float)_engine->height() / (float)ORIGINAL_HEIGHT;
+ const float f = MIN<float>(w, h);
+ return (int32)((float)val * f);
+}
+
bool Holomap::loadLocations() {
uint8 *locationsPtr = nullptr;
const int32 locationsSize = HQR::getAllocEntry(&locationsPtr, Resources::HQR_RESS_FILE, RESSHQR_HOLOARROWINFO);
@@ -272,11 +289,10 @@ void Holomap::drawHolomapText(int32 centerx, int32 top, const char *title) {
void Holomap::renderHolomapPointModel(const IVec3 &angle, int32 x, int32 y) {
_engine->_renderer->setBaseRotation(x, y, 0);
- // we need a copy here
- const IVec3 destPos = _engine->_renderer->getBaseRotationPosition(0, 0, 1000);
+ const IVec3 &destPos = _engine->_renderer->getBaseRotationPosition(0, 0, 1000);
_engine->_renderer->setBaseTranslation(0, 0, 0);
_engine->_renderer->setBaseRotation(angle);
- _engine->_renderer->updateCameraAnglePositions(5300);
+ _engine->_renderer->updateCameraAnglePositions(distance(zDistanceTrajectory));
_engine->_interface->resetClip();
Common::Rect dummy;
_engine->_renderer->renderIsoModel(destPos, x, y, ANGLE_0, _engine->_resources->_holomapPointModelPtr, dummy);
@@ -326,9 +342,8 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
ScopedEngineFreeze timeFreeze(_engine);
const int32 cameraPosX = _engine->width() / 2 + 80;
const int32 cameraPosY = _engine->height() / 2;
- const int32 extraZRot = 5300;
_engine->_renderer->setCameraPosition(cameraPosX, cameraPosY, 128, 1024, 1024);
- _engine->_renderer->setCameraAngle(0, 0, 0, data->pos.x, data->pos.y, data->pos.z, extraZRot);
+ _engine->_renderer->setCameraAngle(0, 0, 0, data->pos.x, data->pos.y, data->pos.z, distance(zDistanceTrajectory));
renderHolomapSurfacePolygons();
@@ -368,7 +383,7 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
// now render the holomap path
_engine->_renderer->setCameraPosition(cameraPosX, cameraPosY, 128, 1024, 1024);
- _engine->_renderer->setCameraAngle(0, 0, 0, data->pos.x, data->pos.y, data->pos.z, extraZRot);
+ _engine->_renderer->setCameraAngle(0, 0, 0, data->pos.x, data->pos.y, data->pos.z, distance(zDistanceTrajectory));
_engine->_renderer->setLightVector(data->pos.x, data->pos.y, 0);
// animate the path from point 1 to point 2 by rendering a point model on each position
@@ -433,7 +448,7 @@ void Holomap::renderLocations(int xRot, int yRot, int zRot, bool lower) {
const IVec3 &destPos = _engine->_renderer->getBaseRotationPosition(0, 0, loc.angle.z + 1000);
const IVec3 &destPos2 = _engine->_renderer->getBaseRotationPosition(0, 0, 1500);
_engine->_renderer->setBaseRotation(xRot, yRot, zRot, true);
- _engine->_renderer->setBaseRotationPos(0, 0, 9500);
+ _engine->_renderer->setBaseRotationPos(0, 0, distance(zDistanceHolomap));
const IVec3 &destPos3 = _engine->_renderer->getBaseRotationPosition(destPos);
const IVec3 &destPos4 = _engine->_renderer->getBaseRotationPosition(destPos2);
if (lower) {
@@ -500,7 +515,7 @@ void Holomap::processHolomap() {
_engine->_text->initTextBank(TextBankId::Inventory_Intro_and_Holomap);
_engine->_text->setFontCrossColor(COLOR_9);
const int32 cameraPosX = _engine->width() / 2;
- const int32 cameraPosY = 190;
+ const int32 cameraPosY = scale(190);
_engine->_renderer->setCameraPosition(cameraPosX, cameraPosY, 128, 1024, 1024);
int32 currentLocation = _engine->_scene->_currentSceneIdx;
@@ -578,13 +593,13 @@ void Holomap::processHolomap() {
if (redraw) {
redraw = false;
- const Common::Rect &rect = _engine->centerOnScreenX(300, 0, 330);
+ const Common::Rect &rect = _engine->centerOnScreenX(scale(300), 0, scale(330));
_engine->_interface->drawFilledRect(rect, COLOR_BLACK);
_engine->_renderer->setBaseRotation(xRot, yRot, 0, true);
_engine->_renderer->setLightVector(xRot, yRot, 0);
renderLocations(xRot, yRot, 0, false);
_engine->_renderer->setBaseRotation(xRot, yRot, 0, true);
- _engine->_renderer->setBaseRotationPos(0, 0, 9500);
+ _engine->_renderer->setBaseRotationPos(0, 0, distance(zDistanceHolomap));
renderHolomapSurfacePolygons();
renderLocations(xRot, yRot, 0, true);
drawHolomapText(_engine->width() / 2, 25, "HoloMap");
diff --git a/engines/twine/holomap.h b/engines/twine/holomap.h
index 6582999cc8..1aa5c6d4be 100644
--- a/engines/twine/holomap.h
+++ b/engines/twine/holomap.h
@@ -67,6 +67,7 @@ private:
};
HolomapProjectedPos _projectedSurfacePositions[561];
int _projectedSurfaceIndex = 0;
+ float _distanceModifier = 1.0f;
int32 _numLocations = 0;
Location _locations[NUM_LOCATIONS];
@@ -89,6 +90,12 @@ private:
void renderHolomapSurfacePolygons();
void renderHolomapVehicle(uint &frameNumber, ActorMoveStruct &move, AnimTimerDataStruct &animTimerData, BodyData &bodyData, AnimData &animData);
+ /**
+ * Controls the size/zoom of the holomap planet
+ */
+ int32 distance(int32 distance) const;
+ int32 scale(int32 val) const;
+
public:
Holomap(TwinEEngine *engine);
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index db31aaf82f..bf1453a054 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -72,9 +72,6 @@
#include "twine/script/script_move_v1.h"
#include "twine/text.h"
-#define ORIGINAL_WIDTH 640
-#define ORIGINAL_HEIGHT 480
-
namespace TwinE {
ScopedEngineFreeze::ScopedEngineFreeze(TwinEEngine *engine) : _engine(engine) {
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index 8cd06d91ff..5631e8da10 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -53,6 +53,9 @@ namespace TwinE {
/** Number of colors used in the game */
#define NUMOFCOLORS 256
+#define ORIGINAL_WIDTH 640
+#define ORIGINAL_HEIGHT 480
+
static const struct TwinELanguage {
const char *name;
const char *id;
Commit: 9bcae0f2ee906ba921eb775e181acd6da270c6bf
https://github.com/scummvm/scummvm/commit/9bcae0f2ee906ba921eb775e181acd6da270c6bf
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-08-17T23:10:26+02:00
Commit Message:
TWINE: fixed holomap path point model rendering
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 5b5daebfa7..43dffb28d1 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -292,12 +292,11 @@ void Holomap::renderHolomapPointModel(const IVec3 &angle, int32 x, int32 y) {
const IVec3 &destPos = _engine->_renderer->getBaseRotationPosition(0, 0, 1000);
_engine->_renderer->setBaseTranslation(0, 0, 0);
_engine->_renderer->setBaseRotation(angle);
- _engine->_renderer->updateCameraAnglePositions(distance(zDistanceTrajectory));
+ _engine->_renderer->setBaseRotationPos(0, 0, distance(zDistanceTrajectory));
_engine->_interface->resetClip();
- Common::Rect dummy;
- _engine->_renderer->renderIsoModel(destPos, x, y, ANGLE_0, _engine->_resources->_holomapPointModelPtr, dummy);
- // debug(3, "renderHolomapPointModel(%i, %i): dirty(%i:%i:%i:%i)", x, y, dummy.left, dummy.top, dummy.right, dummy.bottom);
- // TODO: update the screen _engine->copyBlockPhys(_engine->rect());
+ Common::Rect dirtyRect;
+ _engine->_renderer->renderIsoModel(destPos, x, y, ANGLE_0, _engine->_resources->_holomapPointModelPtr, dirtyRect);
+ _engine->copyBlockPhys(dirtyRect);
}
void Holomap::renderHolomapVehicle(uint &frameNumber, ActorMoveStruct &move, AnimTimerDataStruct &animTimerData, BodyData &bodyData, AnimData &animData) {
More information about the Scummvm-git-logs
mailing list