[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