[Scummvm-git-logs] scummvm master -> fcbee4f724b5028cd1778aff375031b56b50dc40
mgerhardy
martin.gerhardy at gmail.com
Sat Feb 6 17:55:20 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:
bc7f12d0da TWINE: clamp angles of holomap locations
c43c95a4a9 TWINE: fixed previous holomap location
7b4cbec07b TWINE: integration some disassembly findings
7c3d226778 TWINE: replaced magic number
986aa94154 TWINE: use delta time to show the credits from original game
fcbee4f724 TWINE: fla disassembly findings
Commit: bc7f12d0da63537b2b711a0c297e28966bb971c0
https://github.com/scummvm/scummvm/commit/bc7f12d0da63537b2b711a0c297e28966bb971c0
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-06T18:55:09+01:00
Commit Message:
TWINE: clamp angles of holomap locations
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 5cbcb7cbb6..0560ecfeb2 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -61,9 +61,9 @@ bool Holomap::loadLocations() {
}
for (int i = 0; i < _numLocations; i++) {
- _locations[i].x = stream.readUint16LE();
- _locations[i].y = stream.readUint16LE();
- _locations[i].z = stream.readUint16LE();
+ _locations[i].x = ClampAngle(stream.readSint16LE());
+ _locations[i].y = ClampAngle(stream.readSint16LE());
+ _locations[i].z = ClampAngle(stream.readSint16LE());
_locations[i].textIndex = stream.readUint16LE();
}
return true;
@@ -502,8 +502,8 @@ void Holomap::processHolomap() {
if (rotate) {
const int32 dt = _engine->lbaTime - time;
- xRot = _engine->_collision->getAverageValue(xRot, _locations[currentLocation].x, 75, dt);
- yRot = _engine->_collision->getAverageValue(yRot, _locations[currentLocation].y, 75, dt);
+ xRot = _engine->_collision->getAverageValue(ClampAngle(xRot), _locations[currentLocation].x, 75, dt);
+ yRot = _engine->_collision->getAverageValue(ClampAngle(yRot), _locations[currentLocation].y, 75, dt);
redraw = true;
}
Commit: c43c95a4a943244d3d11dd67bf853d844bd780a2
https://github.com/scummvm/scummvm/commit/c43c95a4a943244d3d11dd67bf853d844bd780a2
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-06T18:55:09+01:00
Commit Message:
TWINE: fixed previous holomap location
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 0560ecfeb2..22ca249790 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -343,9 +343,15 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
}
int32 Holomap::getNextHolomapLocation(int32 currentLocation, int32 dir) const {
- const uint32 idx = currentLocation;
- for (uint32 i = currentLocation + dir; i != idx; i = (i + dir) % NUM_LOCATIONS) {
- if (_engine->_gameState->holomapFlags[i % NUM_LOCATIONS] & 0x81) {
+ const int32 idx = currentLocation;
+ int32 i = currentLocation + dir;
+ if (i < 0) {
+ i = NUM_LOCATIONS - 1;
+ } else {
+ i %= NUM_LOCATIONS;
+ }
+ for (; i != idx; i = (i + dir) % NUM_LOCATIONS) {
+ if (_engine->_gameState->holomapFlags[i] & 0x81) {
return i;
}
}
Commit: 7b4cbec07b742bb1e5254f80093b47ed73ea2696
https://github.com/scummvm/scummvm/commit/7b4cbec07b742bb1e5254f80093b47ed73ea2696
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-06T18:55:09+01:00
Commit Message:
TWINE: integration some disassembly findings
Changed paths:
engines/twine/holomap.cpp
engines/twine/renderer/redraw.h
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 22ca249790..d913aed69a 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -377,24 +377,24 @@ void Holomap::renderLocations(int xRot, int yRot, int zRot, bool lower) {
int32 ypos2 = _engine->_renderer->destY;
int32 zpos2 = _engine->_renderer->destZ;
_engine->_renderer->setBaseRotation(xRot, yRot, zRot, true);
+ int32 zpos1_copy = zpos1;
_engine->_renderer->baseRotPosX = 0;
_engine->_renderer->baseRotPosY = 0;
_engine->_renderer->baseRotPosZ = 9500;
_engine->_renderer->getBaseRotationPosition(xpos1, ypos1, zpos1);
- int zpos1_copy = _engine->_renderer->destZ;
+ int zpos1_copy2 = _engine->_renderer->destZ;
_engine->_renderer->getBaseRotationPosition(xpos2, ypos2, zpos2);
if (lower) {
- if (zpos1_copy > _engine->_renderer->destY) {
+ if (zpos1_copy2 <= _engine->_renderer->destZ) {
continue;
}
} else {
- if (zpos1_copy < _engine->_renderer->destY) {
+ if (_engine->_renderer->destZ <= zpos1_copy2) {
continue;
}
}
-
DrawListStruct &drawList = _engine->_redraw->drawList[n];
- drawList.posValue = zpos1_copy;
+ drawList.posValue = zpos1_copy2;
drawList.actorIdx = locationIdx;
drawList.type = 0;
drawList.x = xpos1;
@@ -518,10 +518,13 @@ void Holomap::processHolomap() {
const Common::Rect rect(170, 0, 470, 330);
_engine->_interface->drawFilledRect(rect, COLOR_BLACK);
drawHolomapText(_engine->width() / 2, 25, "HoloMap");
- _engine->_renderer->setBaseRotation(xRot, yRot, 0);
+ _engine->_renderer->setBaseRotation(xRot, yRot, 0, true);
_engine->_renderer->setLightVector(xRot, yRot, 0);
renderLocations(xRot, yRot, 0, false);
- _engine->_renderer->setBaseRotation(xRot, yRot, 0);
+ _engine->_renderer->setBaseRotation(xRot, yRot, 0, true);
+ _engine->_renderer->baseRotPosX = 0;
+ _engine->_renderer->baseRotPosY = 0;
+ _engine->_renderer->baseRotPosZ = 9500;
renderHolomapSurfacePolygons();
renderLocations(xRot, yRot, 0, true);
if (rotate) {
diff --git a/engines/twine/renderer/redraw.h b/engines/twine/renderer/redraw.h
index cbfed13346..e5707c74ba 100644
--- a/engines/twine/renderer/redraw.h
+++ b/engines/twine/renderer/redraw.h
@@ -55,7 +55,7 @@ struct OverlayListStruct {
};
struct DrawListStruct {
- int16 posValue = 0;
+ int16 posValue = 0; // sorting value
uint32 type = 0;
uint16 actorIdx = 0;
uint16 x = 0;
Commit: 7c3d2267782b3be302b703e7470469dd70e84a93
https://github.com/scummvm/scummvm/commit/7c3d2267782b3be302b703e7470469dd70e84a93
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-06T18:55:09+01:00
Commit Message:
TWINE: replaced magic number
Changed paths:
engines/twine/holomap.cpp
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index d913aed69a..5fc1753ad2 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -132,7 +132,7 @@ void Holomap::prepareHolomapSurface() {
} else {
_projectedSurfacePositions[projectedIndex].unk2 = (int16)(((angle + ANGLE_90) * ANGLE_90) / 2);
}
- rotation = rotation + ANGLE_11_25;
+ rotation += ANGLE_11_25;
++projectedIndex;
}
const int32 destX = stream.readSint16LE();
@@ -487,7 +487,7 @@ void Holomap::processHolomap() {
}
if (_engine->_input->isActionActive(TwinEActionType::HolomapLeft)) {
- xRot += 8;
+ xRot += ANGLE_1;
rotate = true;
time = _engine->lbaTime;
} else if (_engine->_input->isActionActive(TwinEActionType::HolomapRight)) {
Commit: 986aa94154e7f651ecd4ded1e8ec0a4cd97a0b42
https://github.com/scummvm/scummvm/commit/986aa94154e7f651ecd4ded1e8ec0a4cd97a0b42
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-06T18:55:09+01:00
Commit Message:
TWINE: use delta time to show the credits from original game
also added the other actions found in the disassembly that the original game
did during the waiting loop
Changed paths:
engines/twine/menu/menu.cpp
engines/twine/resources/resources.h
diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index 177f1966a1..96dddce15c 100644
--- a/engines/twine/menu/menu.cpp
+++ b/engines/twine/menu/menu.cpp
@@ -558,8 +558,17 @@ int32 Menu::processMenu(MenuSettings *menuSettings, bool showCredits) {
}
startMillis = loopMillis;
}
- if (showCredits && loopMillis - startMillis > 15000) {
+ if (showCredits && loopMillis - startMillis > 11650) {
_engine->_menuOptions->showCredits();
+ // TODO the original game also performs these actions:
+ // play FLA_DRAGON3 fla
+ // display RESSHQR_INTROSCREEN1IMG
+ // display RESSHQR_INTROSCREEN2IMG
+ // display RESSHQR_INTROSCREEN3IMG
+ // play FLA_BATEAU fla
+ // if version == EUROPE_VERSION display RESSHQR_LBAIMG else display RESSHQR_RELLENTIMG
+ // display adeline logo
+ // pressing any key during these actions will abort everything and return to the menu
startMillis = _engine->_system->getMillis();
_engine->_screens->loadMenuImage(false);
}
diff --git a/engines/twine/resources/resources.h b/engines/twine/resources/resources.h
index 2453e48f52..93fe88c597 100644
--- a/engines/twine/resources/resources.h
+++ b/engines/twine/resources/resources.h
@@ -75,6 +75,7 @@ namespace TwinE {
#define FLA_DRAGON3 "dragon3"
#define FLA_INTROD "introd"
#define FLA_THEEND "the_end"
+#define FLA_BATEAU "bateau"
#define FILE3DHQR_HERONORMAL 0
#define FILE3DHQR_HEROATHLETIC 1
Commit: fcbee4f724b5028cd1778aff375031b56b50dc40
https://github.com/scummvm/scummvm/commit/fcbee4f724b5028cd1778aff375031b56b50dc40
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-06T18:55:09+01:00
Commit Message:
TWINE: fla disassembly findings
looks like they are unused in the fla movies that i've tried so far...
Changed paths:
engines/twine/flamovies.cpp
engines/twine/flamovies.h
diff --git a/engines/twine/flamovies.cpp b/engines/twine/flamovies.cpp
index 3b3b50584b..4645f7b63c 100644
--- a/engines/twine/flamovies.cpp
+++ b/engines/twine/flamovies.cpp
@@ -36,12 +36,16 @@ namespace TwinE {
/** FLA Frame Opcode types */
enum FlaFrameOpcode {
- kLoadPalette = 0,
- kFade = 1,
- kPlaySample = 2,
- kStopSample = 4,
- kDeltaFrame = 5,
- kKeyFrame = 7
+ kLoadPalette = 1,
+ kFade = 2,
+ kPlaySample = 3,
+ kFlaUnknown4 = 4,
+ kStopSample = 5,
+ kDeltaFrame = 6,
+ kFlaUnknown7 = 7,
+ kKeyFrame = 8,
+ kFlaUnknown9 = 9,
+ kFlaUnknown16SameAs9 = 16
};
/** FLA movie sample structure */
@@ -172,12 +176,11 @@ void FlaMovies::processFrame() {
Common::MemoryReadStream stream(outBuf, frameData.frameVar0);
for (int32 frame = 0; frame < frameData.videoSize; ++frame) {
- const uint8 opcode = stream.readByte();
- stream.skip(1);
- const uint32 opcodeBlockSize = stream.readUint16LE();
+ const uint16 opcode = stream.readUint16LE();
+ const uint16 opcodeBlockSize = stream.readUint16LE();
const int32 pos = stream.pos();
- switch (opcode - 1) {
+ switch (opcode) {
case kLoadPalette: {
int16 numOfColor = stream.readSint16LE();
int16 startColor = stream.readSint16LE();
@@ -186,12 +189,25 @@ void FlaMovies::processFrame() {
break;
}
case kFade: {
- // FLA movies don't use cross fade
- // fade out tricky
- if (_fadeOut != 1) {
- _engine->_screens->convertPalToRGBA(_engine->_screens->palette, _engine->_screens->paletteRGBACustom);
- _engine->_screens->fadeToBlack(_engine->_screens->paletteRGBACustom);
- _fadeOut = 1;
+ int16 innerOpcpde = stream.readSint16LE();
+ switch (innerOpcpde) {
+ case 1:
+ _engine->_music->playMidiMusic(26);
+ break;
+ case 2:
+ // FLA movies don't use cross fade
+ // fade out tricky
+ if (_fadeOut != 1) {
+ _engine->_screens->convertPalToRGBA(_engine->_screens->palette, _engine->_screens->paletteRGBACustom);
+ _engine->_screens->fadeToBlack(_engine->_screens->paletteRGBACustom);
+ _fadeOut = 1;
+ }
+ break;
+ case 3:
+ _flaPaletteVar = true;
+ break;
+ case 4:
+ _engine->_music->stopMidiMusic();
}
break;
}
@@ -220,6 +236,28 @@ void FlaMovies::processFrame() {
drawKeyFrame(stream, FLASCREEN_WIDTH, FLASCREEN_HEIGHT);
break;
}
+ case kFlaUnknown7: {
+ byte *ptr = (byte *)_engine->frontVideoBuffer.getPixels();
+ for (int y = 0; y < 200; ++y) {
+ for (int x = 0; x < 80; ++x) {
+ *ptr++ = 0;
+ }
+ ptr = ptr + 80;
+ }
+ break;
+ }
+ case kFlaUnknown9:
+ case kFlaUnknown16SameAs9: {
+ byte *ptr = (byte *)_engine->frontVideoBuffer.getPixels();
+ for (int y = 0; y < 200; ++y) {
+ for (int x = 0; x < 80; ++x) {
+ *ptr++ = stream.readByte();
+ }
+ ptr = ptr + 80;
+ }
+ break;
+ }
+ case kFlaUnknown4:
default: {
break;
}
@@ -348,6 +386,7 @@ void FlaMovies::playFlaMovie(const char *flaName) {
ScopedKeyMap scopedKeyMap(_engine, cutsceneKeyMapId);
+ _flaPaletteVar = true;
do {
FrameMarker frame;
ScopedFPS scopedFps(flaHeaderData.speed);
diff --git a/engines/twine/flamovies.h b/engines/twine/flamovies.h
index c3cdf56e9d..be76a8f27d 100644
--- a/engines/twine/flamovies.h
+++ b/engines/twine/flamovies.h
@@ -72,6 +72,7 @@ private:
int32 _fadeOut = 0;
/** Auxiliar FLA fade out variable to count frames between the fade */
int32 fadeOutFrames = 0;
+ bool _flaPaletteVar = false;
/** FLA movie file buffer */
uint8 flaBuffer[FLASCREEN_WIDTH * FLASCREEN_HEIGHT] {0};
More information about the Scummvm-git-logs
mailing list