[Scummvm-git-logs] scummvm master -> 705016c62734b533982c7319f6db26995305eb9f
mgerhardy
martin.gerhardy at gmail.com
Tue Feb 9 20:40:59 UTC 2021
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
585fe8745e TWINE: progress on holomap code
3d92c0f9c1 TWINE: fixed hero pos for lba2 scene parsing
004e4ee16f TWINE: camera angle is needed for holomap rendering already
6ff21ff321 TWINE: holomap progress
8ce16227e8 TWINE: really skip voice playback if playVox is false
705016c627 TWINE: input tweaks, recenter and holomap should be toggle actions
Commit: 585fe8745ece0e8977e4867025eda698afe02bc3
https://github.com/scummvm/scummvm/commit/585fe8745ece0e8977e4867025eda698afe02bc3
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-09T21:40:33+01:00
Commit Message:
TWINE: progress on holomap code
Changed paths:
engines/twine/holomap.cpp
engines/twine/holomap.h
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 5fc1753ad2..d2051b9248 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -101,6 +101,9 @@ void Holomap::loadHolomapGFX() {
}
holomapPaletteIndex = 0;
+
+ prepareHolomapProjectedPositions();
+ prepareHolomapSurface();
}
static int sortHolomapSurfaceCoordsByDepth(const void *a1, const void *a2) {
@@ -110,22 +113,39 @@ static int sortHolomapSurfaceCoordsByDepth(const void *a1, const void *a2) {
void Holomap::prepareHolomapSurface() {
Common::MemoryReadStream stream(_engine->_resources->holomapSurfacePtr, _engine->_resources->holomapSurfaceSize);
int holomapSurfaceArrayIdx = 0;
+ _engine->_renderer->setBaseRotation(0, 0, 0);
+ for (int32 angle = -ANGLE_90; angle <= ANGLE_90; angle += ANGLE_11_25) {
+ int rotation = 0;
+ for (int32 stepWidth = ANGLE_11_25; stepWidth != 0; --stepWidth) {
+ const int32 rotX = stream.readByte();
+ _engine->_movements->rotateActor(rotX * 2 + 1000, 0, angle);
+ const int32 tmpDestY = _engine->_renderer->destZ;
+ _engine->_movements->rotateActor(_engine->_renderer->destX, 0, rotation);
+ _engine->_renderer->getBaseRotationPosition(_engine->_renderer->destX, tmpDestY, _engine->_renderer->destZ);
+ _holomapSurface[holomapSurfaceArrayIdx].x = _engine->_renderer->destX;
+ _holomapSurface[holomapSurfaceArrayIdx].y = _engine->_renderer->destY;
+ _holomapSurface[holomapSurfaceArrayIdx].z = _engine->_renderer->destZ;
+ ++holomapSurfaceArrayIdx;
+ rotation += ANGLE_11_25;
+ }
+ const int32 rotX = stream.readByte();
+ _engine->_movements->rotateActor(rotX * 2 + 1000, 0, angle);
+ const int32 tmpDestY = _engine->_renderer->destZ;
+ _engine->_movements->rotateActor(_engine->_renderer->destX, 0, ANGLE_0);
+ _engine->_renderer->getBaseRotationPosition(_engine->_renderer->destX, tmpDestY, _engine->_renderer->destZ);
+ _holomapSurface[holomapSurfaceArrayIdx].x = _engine->_renderer->destX;
+ _holomapSurface[holomapSurfaceArrayIdx].y = _engine->_renderer->destY;
+ _holomapSurface[holomapSurfaceArrayIdx].z = _engine->_renderer->destZ;
+ ++holomapSurfaceArrayIdx;
+ }
+}
+
+void Holomap::prepareHolomapProjectedPositions() {
+ Common::MemoryReadStream stream(_engine->_resources->holomapSurfacePtr, _engine->_resources->holomapSurfaceSize);
int projectedIndex = 0;
for (int32 angle = -ANGLE_90; angle <= ANGLE_90; angle += ANGLE_11_25) {
int rotation = 0;
for (int32 stepWidth = ANGLE_11_25; stepWidth != 0; --stepWidth) {
- const int32 destX = stream.readSint16LE();
- const int32 destY = stream.readSint16LE();
- const int32 destZ = stream.readSint16LE();
- _engine->_renderer->getBaseRotationPosition(destX, destY, destZ);
- if (angle != ANGLE_90) {
- _holomapSurface[holomapSurfaceArrayIdx].z = destZ;
- _holomapSurface[holomapSurfaceArrayIdx].projectedPosIdx = projectedIndex;
- ++holomapSurfaceArrayIdx;
- }
- _engine->_renderer->projectPositionOnScreen(destX, destY, destZ);
- _projectedSurfacePositions[projectedIndex].x = _engine->_renderer->projPosX;
- _projectedSurfacePositions[projectedIndex].y = _engine->_renderer->projPosY;
_projectedSurfacePositions[projectedIndex].unk1 = _engine->_screens->crossDot(0, 0xffff, ANGLE_360 - 1, rotation);
if (angle == ANGLE_90) {
_projectedSurfacePositions[projectedIndex].unk2 = 0xffff;
@@ -135,13 +155,6 @@ void Holomap::prepareHolomapSurface() {
rotation += ANGLE_11_25;
++projectedIndex;
}
- const int32 destX = stream.readSint16LE();
- const int32 destY = stream.readSint16LE();
- const int32 destZ = stream.readSint16LE();
- _engine->_renderer->getBaseRotationPosition(destX, destY, destZ);
- _engine->_renderer->projectPositionOnScreen(destX, destY, destZ);
- _projectedSurfacePositions[projectedIndex].x = _engine->_renderer->projPosX;
- _projectedSurfacePositions[projectedIndex].y = _engine->_renderer->projPosY;
_projectedSurfacePositions[projectedIndex].unk1 = 0xffff;
if (angle == ANGLE_90) {
_projectedSurfacePositions[projectedIndex].unk2 = 0xffff;
@@ -150,16 +163,49 @@ void Holomap::prepareHolomapSurface() {
}
++projectedIndex;
}
+}
+
+void Holomap::prepareHolomapPolygons() {
+ Common::MemoryReadStream stream(_engine->_resources->holomapSurfacePtr, _engine->_resources->holomapSurfaceSize);
+ int holomapSortArrayIdx = 0;
+ int projectedIndex = 0;
+ _engine->_renderer->setBaseRotation(0, 0, 0);
+ for (int32 angle = -ANGLE_90; angle <= ANGLE_90; angle += ANGLE_11_25) {
+ int rotation = 0;
+ HolomapSurface* vec;
+ for (int32 stepWidth = ANGLE_11_25; stepWidth != 0; --stepWidth) {
+ vec = &_holomapSurface[holomapSortArrayIdx];
+ _engine->_renderer->getBaseRotationPosition(vec->x, vec->y, vec->z);
+ if (angle != ANGLE_90) {
+ _holomapSort[holomapSortArrayIdx].z = _engine->_renderer->destZ;
+ _holomapSort[holomapSortArrayIdx].projectedPosIdx = projectedIndex;
+ ++holomapSortArrayIdx;
+ }
+ _engine->_renderer->projectPositionOnScreen(_engine->_renderer->destX, _engine->_renderer->destY, _engine->_renderer->destZ);
+ _projectedSurfacePositions[projectedIndex].x = _engine->_renderer->projPosX;
+ _projectedSurfacePositions[projectedIndex].y = _engine->_renderer->projPosY;
+ rotation += ANGLE_11_25;
+ ++projectedIndex;
+ ++holomapSortArrayIdx;
+ }
+ _engine->_renderer->getBaseRotationPosition(vec->x, vec->y, vec->z);
+ _engine->_renderer->projectPositionOnScreen(_engine->_renderer->destX, _engine->_renderer->destY, _engine->_renderer->destZ);
+ _projectedSurfacePositions[projectedIndex].x = _engine->_renderer->projPosX;
+ _projectedSurfacePositions[projectedIndex].y = _engine->_renderer->projPosY;
+ rotation += ANGLE_11_25;
+ ++projectedIndex;
+ ++holomapSortArrayIdx;
+ }
qsort(_holomapSurface, ARRAYSIZE(_holomapSurface), sizeof(HolomapSurface), sortHolomapSurfaceCoordsByDepth);
}
void Holomap::renderHolomapSurfacePolygons() {
- prepareHolomapSurface();
- for (int32 i = 0; i < ARRAYSIZE(_holomapSurface); ++i) {
- // const HolomapProjectedPos &pos1 = _projectedSurfacePositions[_holomapSurface[i].projectedPosIdx + 0];
- // const HolomapProjectedPos &pos2 = _projectedSurfacePositions[_holomapSurface[i].projectedPosIdx + 1];
- // const HolomapProjectedPos &pos3 = _projectedSurfacePositions[_holomapSurface[i].projectedPosIdx + 2];
- // const HolomapProjectedPos &pos4 = _projectedSurfacePositions[_holomapSurface[i].projectedPosIdx + 3];
+ prepareHolomapPolygons();
+ for (int32 i = 0; i < ARRAYSIZE(_holomapSort); ++i) {
+ // const HolomapProjectedPos &pos1 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 0];
+ // const HolomapProjectedPos &pos2 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 1];
+ // const HolomapProjectedPos &pos3 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 2];
+ // const HolomapProjectedPos &pos4 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 3];
// TODO: build triangles from projected pos with texcoords from holomapimg
# if 0
v2 = _projectedSurfacePositions + 2 * *(_WORD *)(i + _holomapSurface + 2);
@@ -451,9 +497,6 @@ void Holomap::processHolomap() {
_engine->_text->drawHolomapLocation(_locations[currentLocation].textIndex);
_engine->flip();
- // TODO: load RESSHQR_HOLOSURFACE and project the texture to the surface
- //_engine->_screens->loadImage(RESSHQR_HOLOIMG, RESSHQR_HOLOPAL);
-
int32 time = _engine->lbaTime;
int32 xRot = 0;
int32 yRot = 0;
diff --git a/engines/twine/holomap.h b/engines/twine/holomap.h
index 8f6ec81469..208b3e4a9b 100644
--- a/engines/twine/holomap.h
+++ b/engines/twine/holomap.h
@@ -59,17 +59,24 @@ private:
ArmyBoat = 45,
HamalayiTransporter = 47
};
-
struct HolomapSurface {
- int16 z;
- uint16 projectedPosIdx;
+ int16 x = 0;
+ int16 y = 0;
+ int16 z = 0;
};
HolomapSurface _holomapSurface[512];
+
+ struct HolomapSort {
+ int16 z = 0;
+ uint16 projectedPosIdx = 0;
+ };
+ HolomapSort _holomapSort[512];
+
struct HolomapProjectedPos {
- int16 x;
- int16 y;
- uint16 unk1;
- uint16 unk2;
+ int16 x = 0;
+ int16 y = 0;
+ uint16 unk1 = 0;
+ uint16 unk2 = 0;
};
HolomapProjectedPos _projectedSurfacePositions[2048];
@@ -115,6 +122,8 @@ private:
void renderHolomapModel(const uint8 *bodyPtr, int32 x, int32 y, int32 zPos);
void prepareHolomapSurface();
+ void prepareHolomapProjectedPositions();
+ void prepareHolomapPolygons();
void renderHolomapSurfacePolygons();
public:
Commit: 3d92c0f9c184d05ec0a09a3d3bdf4cabfa9c3873
https://github.com/scummvm/scummvm/commit/3d92c0f9c184d05ec0a09a3d3bdf4cabfa9c3873
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-09T21:40:33+01:00
Commit Message:
TWINE: fixed hero pos for lba2 scene parsing
Changed paths:
engines/twine/scene/scene.cpp
diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 8ce4f75d59..2179e73a7a 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -173,9 +173,9 @@ bool Scene::loadSceneLBA2() {
_sceneMusic = stream.readByte();
// load hero properties
- _sceneHeroX = stream.readUint16LE();
- _sceneHeroY = stream.readUint16LE();
- _sceneHeroZ = stream.readUint16LE();
+ _sceneHeroX = stream.readSint16LE();
+ _sceneHeroY = stream.readSint16LE();
+ _sceneHeroZ = stream.readSint16LE();
sceneHero->moveScriptSize = stream.readUint16LE();
sceneHero->moveScript = currentScene + stream.pos();
Commit: 004e4ee16f1c01555d60f3551fc6ce659c67a547
https://github.com/scummvm/scummvm/commit/004e4ee16f1c01555d60f3551fc6ce659c67a547
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-09T21:40:33+01:00
Commit Message:
TWINE: camera angle is needed for holomap rendering already
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index d2051b9248..97931f2ce2 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -297,11 +297,11 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
const Holomap::TrajectoryData &data = loadTrajectoryData(trajectoryIndex);
ScopedEngineFreeze timeFreeze(_engine);
_engine->_renderer->setCameraPosition(400, 240, 128, 1024, 1024);
+ _engine->_renderer->setCameraAngle(0, 0, 0, data.x, data.y, data.z, 5300);
renderHolomapSurfacePolygons();
const Location &loc = _locations[data.locationIdx];
- _engine->_renderer->setCameraAngle(0, 0, 0, data.x, data.y, data.z, 5300);
renderHolomapModel(_engine->_resources->holomapPointModelPtr, loc.x, loc.y, 0);
_engine->flip();
Commit: 6ff21ff3218c5acc8bf02c9c838c8c05fede082e
https://github.com/scummvm/scummvm/commit/6ff21ff3218c5acc8bf02c9c838c8c05fede082e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-09T21:40:33+01:00
Commit Message:
TWINE: holomap progress
Changed paths:
engines/twine/holomap.cpp
engines/twine/text.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 97931f2ce2..e9f3307b21 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -300,6 +300,7 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
_engine->_renderer->setCameraAngle(0, 0, 0, data.x, data.y, data.z, 5300);
renderHolomapSurfacePolygons();
+ _engine->flip();
const Location &loc = _locations[data.locationIdx];
renderHolomapModel(_engine->_resources->holomapPointModelPtr, loc.x, loc.y, 0);
@@ -346,7 +347,7 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
}
_engine->_renderer->setCameraPosition(100, 400, 128, 900, 900);
_engine->_renderer->setCameraAngle(0, 0, 0, 60, 128, 0, 30000);
- _engine->_renderer->setLightVector(0xffffffc4, 128, 0);
+ _engine->_renderer->setLightVector(-60, 128, 0);
const Common::Rect rect(0, 200, 199, 479);
_engine->_interface->drawFilledRect(rect, COLOR_BLACK);
_engine->_renderer->renderIsoModel(0, 0, 0, 0, newAngle, 0, modelPtr);
@@ -487,19 +488,18 @@ void Holomap::processHolomap() {
_engine->setPalette(_engine->_screens->paletteRGBA);
loadHolomapGFX();
- renderHolomapSurfacePolygons();
- _engine->_renderer->setCameraPosition(_engine->width() / 2, 190, 128, 1024, 1024);
_engine->_text->initTextBank(TextBankId::Inventory_Intro_and_Holomap);
_engine->_text->setFontCrossColor(COLOR_9);
+ _engine->_renderer->setCameraPosition(_engine->width() / 2, 190, 128, 1024, 1024);
int currentLocation = _engine->_scene->currentSceneIdx;
_engine->_text->drawHolomapLocation(_locations[currentLocation].textIndex);
_engine->flip();
int32 time = _engine->lbaTime;
- int32 xRot = 0;
- int32 yRot = 0;
+ int32 xRot = ClampAngle(_locations[currentLocation].x);
+ int32 yRot = ClampAngle(_locations[currentLocation].y);
bool rotate = false;
bool redraw = true;
_engine->_input->enableKeyMap(holomapKeyMapId);
@@ -573,8 +573,7 @@ void Holomap::processHolomap() {
if (rotate) {
_engine->_menu->drawBox(300, 170, 340, 210);
}
- //_engine->copyBlockPhys(rect);
- _engine->flip();
+ _engine->copyBlockPhys(rect);
}
if (rotate && xRot == _locations[currentLocation].x && yRot == _locations[currentLocation].y) {
diff --git a/engines/twine/text.cpp b/engines/twine/text.cpp
index ba34c2ed86..e301029402 100644
--- a/engines/twine/text.cpp
+++ b/engines/twine/text.cpp
@@ -786,7 +786,10 @@ void Text::drawHolomapLocation(int32 index) {
textClipSmall();
setFontCrossColor(COLOR_WHITE);
_engine->_interface->drawFilledRect(_dialTextBox, COLOR_BLACK);
+ const bool displayText = _engine->cfgfile.FlagDisplayText;
+ _engine->cfgfile.FlagDisplayText = true;
drawTextProgressive(index, false, false);
+ _engine->cfgfile.FlagDisplayText = displayText;
}
} // namespace TwinE
Commit: 8ce16227e8b578c77e6eb0a2b95cfaca8437e451
https://github.com/scummvm/scummvm/commit/8ce16227e8b578c77e6eb0a2b95cfaca8437e451
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-09T21:40:33+01:00
Commit Message:
TWINE: really skip voice playback if playVox is false
Changed paths:
engines/twine/text.cpp
diff --git a/engines/twine/text.cpp b/engines/twine/text.cpp
index e301029402..2544273afa 100644
--- a/engines/twine/text.cpp
+++ b/engines/twine/text.cpp
@@ -637,10 +637,12 @@ bool Text::displayText(int32 index, bool showText, bool playVox, bool loop) {
break;
}
- playVoxSimple(currDialTextEntry);
+ if (playVox) {
+ playVoxSimple(currDialTextEntry);
+ }
}
}
- while (playVoxSimple(currDialTextEntry)) {
+ while (playVox && playVoxSimple(currDialTextEntry)) {
FrameMarker frame;
ScopedFPS scopedFps;
_engine->readKeys();
Commit: 705016c62734b533982c7319f6db26995305eb9f
https://github.com/scummvm/scummvm/commit/705016c62734b533982c7319f6db26995305eb9f
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-09T21:40:33+01:00
Commit Message:
TWINE: input tweaks, recenter and holomap should be toggle actions
Changed paths:
engines/twine/twine.cpp
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index a9c210d5ce..482611f0b3 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -810,7 +810,7 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration
}
// Recenter Screen
- if (_input->isActionActive(TwinEActionType::RecenterScreenOnTwinsen) && !disableScreenRecenter) {
+ if (_input->toggleActionIfActive(TwinEActionType::RecenterScreenOnTwinsen) && !disableScreenRecenter) {
const ActorStruct *currentlyFollowedActor = _scene->getActor(_scene->currentlyFollowedActor);
_grid->newCameraX = currentlyFollowedActor->x / BRICK_SIZE;
_grid->newCameraY = currentlyFollowedActor->y / BRICK_HEIGHT;
@@ -819,7 +819,7 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration
}
// Draw holomap
- if (_input->isActionActive(TwinEActionType::OpenHolomap) && _gameState->hasItem(InventoryItems::kiHolomap) && !_gameState->inventoryDisabled()) {
+ if (_input->toggleActionIfActive(TwinEActionType::OpenHolomap) && _gameState->hasItem(InventoryItems::kiHolomap) && !_gameState->inventoryDisabled()) {
freezeTime();
//TestRestoreModeSVGA(1);
_holomap->processHolomap();
More information about the Scummvm-git-logs
mailing list