[Scummvm-git-logs] scummvm master -> 76fda24535af02395fd0ccefda8679a78400fe03
neuromancer
noreply at scummvm.org
Wed Jul 26 20:21:38 UTC 2023
This automated email contains information about 9 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
599b3b1c03 FREESCAPE: use colorToRGB instead of shifts
b6789c5c77 FREESCAPE: improved title and border screens handling
25db389919 FREESCAPE: movement and parsing fixes for dark
343722395a FREESCAPE: enable bit 31 when the player collides and cannot move anymore
eef723b207 FREESCAPE: fixed spacing in fullscreen messages for dark
eb16d389bc FREESCAPE: refactored drawFullscreenMessage
beaad0300a FREESCAPE: removed useless override
7348c2bb78 FREESCAPE: initial implementation of game over screen in dark
76fda24535 FREESCAPE: correctly load and display images in dark demo for zx
Commit: 599b3b1c03eb72e6a830329b2adc3a08232ae707
https://github.com/scummvm/scummvm/commit/599b3b1c03eb72e6a830329b2adc3a08232ae707
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: use colorToRGB instead of shifts
Changed paths:
engines/freescape/gfx.cpp
diff --git a/engines/freescape/gfx.cpp b/engines/freescape/gfx.cpp
index 10ff7bf9b3b..a84688dc44c 100644
--- a/engines/freescape/gfx.cpp
+++ b/engines/freescape/gfx.cpp
@@ -433,9 +433,7 @@ bool Renderer::getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2,
if (_renderMode == Common::kRenderAmiga || _renderMode == Common::kRenderAtariST) {
if (_colorRemaps && _colorRemaps->contains(index)) {
int color = (*_colorRemaps)[index];
- r1 = (color >> 16) & 0xff;
- g1 = (color >> 8) & 0xff;
- b1 = color & 0xff;
+ _texturePixelFormat.colorToRGB(color, r1, g1, b1);
} else
readFromPalette(index, r1, g1, b1);
Commit: b6789c5c7776ac9be76c0dc99555c889ca20b8c7
https://github.com/scummvm/scummvm/commit/b6789c5c7776ac9be76c0dc99555c889ca20b8c7
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: improved title and border screens handling
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/castle.cpp
engines/freescape/games/dark/dark.cpp
engines/freescape/games/driller/driller.cpp
engines/freescape/games/eclipse.cpp
engines/freescape/ui.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 9a00d706e69..94cfc02aa9e 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -555,7 +555,8 @@ Common::Error FreescapeEngine::run() {
initGameState();
loadColorPalette();
- g_system->lockMouse(true);
+ g_system->showMouse(true);
+ g_system->lockMouse(false);
// Simple main event loop
int saveSlot = ConfMan.getInt("save_slot");
@@ -575,6 +576,7 @@ Common::Error FreescapeEngine::run() {
bool endGame = false;
// Draw first frame
+ g_system->lockMouse(true);
resetInput();
_gfx->computeScreenViewport();
_gfx->clear(0, 0, 0, true);
@@ -607,9 +609,6 @@ Common::Error FreescapeEngine::run() {
return Common::kNoError;
}
-void FreescapeEngine::titleScreen() {}
-void FreescapeEngine::borderScreen() {}
-
void FreescapeEngine::loadBorder() {
if (_border) {
Graphics::Surface *border = _gfx->convertImageFormatIfNecessary(_border);
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index cc141fb4bda..00f8cc527a5 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -454,9 +454,6 @@ public:
void gotoArea(uint16 areaID, int entranceID) override;
- void borderScreen() override;
- void titleScreen() override;
-
void processBorder() override;
void drawInfoMenu() override;
@@ -525,7 +522,6 @@ public:
void initGameState() override;
void borderScreen() override;
- void titleScreen() override;
void gotoArea(uint16 areaID, int entranceID) override;
void pressedKey(const int keycode) override;
@@ -561,7 +557,6 @@ class EclipseEngine : public FreescapeEngine {
public:
EclipseEngine(OSystem *syst, const ADGameDescription *gd);
- void titleScreen() override;
void gotoArea(uint16 areaID, int entranceID) override;
void loadAssetsDOSFullGame() override;
@@ -578,7 +573,6 @@ public:
Graphics::ManagedSurface *_option;
void initGameState() override;
- void titleScreen() override;
void loadAssetsDOSFullGame() override;
void loadAssetsDOSDemo() override;
void loadAssetsAmigaDemo() override;
diff --git a/engines/freescape/games/castle.cpp b/engines/freescape/games/castle.cpp
index d934042c997..2ca3a549322 100644
--- a/engines/freescape/games/castle.cpp
+++ b/engines/freescape/games/castle.cpp
@@ -306,18 +306,6 @@ void CastleEngine::loadAssetsAmigaDemo() {
}
-void CastleEngine::titleScreen() {
- if (isAmiga() || isAtariST()) // These releases has their own screens
- return;
-
- if (_title) {
- drawTitle();
- _gfx->flipBuffer();
- g_system->updateScreen();
- g_system->delayMillis(3000);
- }
-}
-
void CastleEngine::gotoArea(uint16 areaID, int entranceID) {
debugC(1, kFreescapeDebugMove, "Jumping to area: %d, entrance: %d", areaID, entranceID);
if (!_gameStateBits.contains(areaID))
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index d0a36c145d0..e52bd9efc1d 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -54,18 +54,6 @@ DarkEngine::DarkEngine(OSystem *syst, const ADGameDescription *gd) : FreescapeEn
_initialShield = 15;
}
-void DarkEngine::titleScreen() {
- if (isAmiga() || isAtariST()) // These releases has their own screens
- return;
-
- if (_title) {
- drawTitle();
- _gfx->flipBuffer();
- g_system->updateScreen();
- g_system->delayMillis(3000);
- }
-}
-
void DarkEngine::addECDs(Area *area) {
if (!area->entranceWithID(255))
return;
@@ -260,9 +248,7 @@ void DarkEngine::borderScreen() {
drawFullscreenMessage(_messagesList[28]);
drawFullscreenMessage(_messagesList[29]);
} else {
- _gfx->flipBuffer();
- g_system->updateScreen();
- g_system->delayMillis(3000);
+ FreescapeEngine::borderScreen();
}
}
}
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 63af0163125..e8993935fa8 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -89,31 +89,6 @@ DrillerEngine::~DrillerEngine() {
delete _drillBase;
}
-void DrillerEngine::titleScreen() {
- if (isAmiga() || isAtariST()) // TODO: implement these with their own animations
- return;
-
- if (_title) {
- drawTitle();
- _gfx->flipBuffer();
- g_system->updateScreen();
- g_system->delayMillis(3000);
- _gfx->clear(0, 0, 0, true);
- }
-}
-void DrillerEngine::borderScreen() {
- if (isAmiga() || isAtariST()) // TODO: implement these with their own animations
- return;
-
- if (_border) {
- drawBorder();
- _gfx->flipBuffer();
- g_system->updateScreen();
- g_system->delayMillis(3000);
- _gfx->clear(0, 0, 0, true);
- }
-}
-
void DrillerEngine::gotoArea(uint16 areaID, int entranceID) {
int prevAreaID = _currentArea ? _currentArea->getAreaID(): -1;
debugC(1, kFreescapeDebugMove, "Jumping to area: %d, entrance: %d", areaID, entranceID);
diff --git a/engines/freescape/games/eclipse.cpp b/engines/freescape/games/eclipse.cpp
index 0eff0b8a1b3..0940f7fbf55 100644
--- a/engines/freescape/games/eclipse.cpp
+++ b/engines/freescape/games/eclipse.cpp
@@ -99,18 +99,6 @@ EclipseEngine::EclipseEngine(OSystem *syst, const ADGameDescription *gd) : Frees
}
}
-void EclipseEngine::titleScreen() {
- if (isAmiga() || isAtariST()) // These releases has their own screens
- return;
-
- if (_title) {
- drawTitle();
- _gfx->flipBuffer();
- g_system->updateScreen();
- g_system->delayMillis(3000);
- }
-}
-
extern byte kEGADefaultPaletteData[16][3];
void EclipseEngine::loadAssetsDOSFullGame() {
diff --git a/engines/freescape/ui.cpp b/engines/freescape/ui.cpp
index 9bc829e4b93..121137f3a88 100644
--- a/engines/freescape/ui.cpp
+++ b/engines/freescape/ui.cpp
@@ -23,6 +23,80 @@
namespace Freescape {
+void FreescapeEngine::titleScreen() {
+ int maxWait = 60 * 6;
+ for (int i = 0; i < maxWait; i++ ) {
+ Common::Event event;
+ while (g_system->getEventManager()->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ quitGame();
+ return;
+
+ case Common::EVENT_SCREEN_CHANGED:
+ _gfx->computeScreenViewport();
+ _gfx->clear(0, 0, 0, true);
+ break;
+ case Common::EVENT_KEYDOWN:
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_SPACE:
+ i = maxWait;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ drawTitle();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(15); // try to target ~60 FPS
+ }
+ _gfx->clear(0, 0, 0, true);
+}
+
+void FreescapeEngine::borderScreen() {
+ int maxWait = 6 * 60;
+ for (int i = 0; i < maxWait; i++ ) {
+ Common::Event event;
+ while (g_system->getEventManager()->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ quitGame();
+ return;
+
+ case Common::EVENT_SCREEN_CHANGED:
+ _gfx->computeScreenViewport();
+ _gfx->clear(0, 0, 0, true);
+ break;
+ case Common::EVENT_KEYDOWN:
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_SPACE:
+ i = maxWait;
+ break;
+ default:
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ drawBorder();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(15); // try to target ~60 FPS
+ }
+
+ _gfx->clear(0, 0, 0, true);
+}
+
void FreescapeEngine::drawUI() {
Graphics::Surface *surface = nullptr;
if (_border) { // This can be removed when all the borders are loaded
Commit: 25db3899197154aef8d42cdb03b9f04d8570c6e0
https://github.com/scummvm/scummvm/commit/25db3899197154aef8d42cdb03b9f04d8570c6e0
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: movement and parsing fixes for dark
Changed paths:
engines/freescape/games/dark/dark.cpp
engines/freescape/loaders/8bitBinaryLoader.cpp
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index e52bd9efc1d..0d8c136423f 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -175,18 +175,15 @@ void DarkEngine::gotoArea(uint16 areaID, int entranceID) {
if (entranceID > 0 || areaID == 127) {
traverseEntrance(entranceID);
} else if (entranceID == 0) {
- Math::Vector3d diff = _lastPosition - _position;
- // debug("dif: %f %f %f", diff.x(), diff.y(), diff.z());
- // diff should be used to determinate which entrance to use
int newPos = -1;
- if (ABS(diff.x()) < ABS(diff.z())) {
- if (diff.z() > 0)
+ if (_position.z() < 200 || _position.z() >= 3800) {
+ if (_position.z() < 200)
newPos = 4000;
else
newPos = 100;
_position.setValue(2, newPos);
- } else {
- if (diff.x() > 0)
+ } else if(_position.x() < 200 || _position.x() >= 3800) {
+ if (_position.x() < 200)
newPos = 4000;
else
newPos = 100;
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index f0ea401ebe0..b3b368b18f0 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -139,7 +139,7 @@ Object *FreescapeEngine::load8bitObject(Common::SeekableReadStream *file) {
byteSizeOfObject++;
while(--byteSizeOfObject > 0)
- connectionsArray.push_back(file->readByte());
+ connectionsArray.push_back(readField(file, 8));
return new AreaConnections(connectionsArray);
}
Commit: 343722395abbc38151cfe5892fe8f5d6b0e6a808
https://github.com/scummvm/scummvm/commit/343722395abbc38151cfe5892fe8f5d6b0e6a808
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: enable bit 31 when the player collides and cannot move anymore
Changed paths:
engines/freescape/movement.cpp
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index 3202e203824..ed22451984b 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -360,9 +360,10 @@ void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
newPosition = _currentArea->resolveCollisions(lastPosition, newPosition, _playerHeight);
}
- /*if ((lastPosition - newPosition).length() >= 1) { // Step up
+ if ((lastPosition - newPosition).length() < 1) { // Something is blocking the player
+ setGameBit(31);
playSound(4, false);
- }*/
+ }
lastPosition = newPosition;
newPosition.y() = -8192;
Commit: eef723b20714a9fd99647d99ba87d54e54ba161c
https://github.com/scummvm/scummvm/commit/eef723b20714a9fd99647d99ba87d54e54ba161c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: fixed spacing in fullscreen messages for dark
Changed paths:
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/dos.cpp
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index 0d8c136423f..f077994cdac 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -288,13 +288,13 @@ void DarkEngine::drawFullscreenMessage(Common::String message) {
uint32 front = _gfx->_texturePixelFormat.ARGBToColor(0xFF, r, g, b);
int x, y;
- x = 42;
- y = 30;
- for (int i = 0; i < 8; i++) {
+ x = 50;
+ y = 32;
+ for (int i = 0; i < 10; i++) {
Common::String line = message.substr(28 * i, 28);
debug("'%s' %d", line.c_str(), line.size());
drawStringInSurface(line, x, y, front, black, surface);
- y = y + 12;
+ y = y + 8;
}
if (!_uiTexture)
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index 28b5304478e..b4b8214bc2c 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -49,7 +49,7 @@ void DarkEngine::loadAssetsDOSDemo() {
if (!file.isOpen())
error("Failed to open DSIDEE.EXE");
loadMessagesFixedSize(&file, 0x4525, 16, 27);
- loadMessagesFixedSize(&file, 0x9959, 307, 5);
+ loadMessagesFixedSize(&file, 0x993f - 2, 308, 5);
loadFonts(&file, 0xa598);
loadGlobalObjects(&file, 0x3d04, 23);
load8bitBinary(&file, 0xa700, 16);
Commit: eb16d389bca23b8e871340a2ecaf8bc7ca50534c
https://github.com/scummvm/scummvm/commit/eb16d389bca23b8e871340a2ecaf8bc7ca50534c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: refactored drawFullscreenMessage
Changed paths:
engines/freescape/freescape.h
engines/freescape/games/dark/dark.cpp
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 00f8cc527a5..38239f3f680 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -542,7 +542,9 @@ public:
void drawDOSUI(Graphics::Surface *surface) override;
void drawZXUI(Graphics::Surface *surface) override;
- void drawFullscreenMessage(Common::String message);
+ void drawFullscreenMessageAndWait(Common::String message);
+ void drawFullscreenMessage(Common::String message, uint32 front, Graphics::Surface *surface);
+
Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index f077994cdac..418fef29a53 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -157,7 +157,7 @@ void DarkEngine::gotoArea(uint16 areaID, int entranceID) {
if (isDemo()) {
if (!_areaMap.contains(areaID)) {
- drawFullscreenMessage(_messagesList[30]);
+ drawFullscreenMessageAndWait(_messagesList[30]);
return;
}
}
@@ -241,9 +241,9 @@ void DarkEngine::borderScreen() {
if (_border) {
drawBorder();
if (isDemo() && isDOS()) {
- drawFullscreenMessage(_messagesList[27]);
- drawFullscreenMessage(_messagesList[28]);
- drawFullscreenMessage(_messagesList[29]);
+ drawFullscreenMessageAndWait(_messagesList[27]);
+ drawFullscreenMessageAndWait(_messagesList[28]);
+ drawFullscreenMessageAndWait(_messagesList[29]);
} else {
FreescapeEngine::borderScreen();
}
@@ -256,43 +256,25 @@ void DarkEngine::executePrint(FCLInstruction &instruction) {
_currentAreaMessages.clear();
if (index > 127) {
index = _messagesList.size() - (index - 254) - 2;
- drawFullscreenMessage(_messagesList[index]);
+ drawFullscreenMessageAndWait(_messagesList[index]);
return;
}
_currentAreaMessages.push_back(_messagesList[index]);
}
-void DarkEngine::drawFullscreenMessage(Common::String message) {
- _savedScreen = _gfx->getScreenshot();
-
+void DarkEngine::drawFullscreenMessage(Common::String message, uint32 front, Graphics::Surface *surface) {
+ uint32 black = _gfx->_texturePixelFormat.ARGBToColor(0xFF, 0x00, 0x00, 0x00);
uint32 color = _gfx->_texturePixelFormat.ARGBToColor(0x00, 0x00, 0x00, 0x00);
- Graphics::Surface *surface = new Graphics::Surface();
- surface->create(_screenW, _screenH, _gfx->_texturePixelFormat);
- surface->fillRect(_fullscreenViewArea, color);
- uint32 black = _gfx->_texturePixelFormat.ARGBToColor(0xFF, 0x00, 0x00, 0x00);
+ surface->fillRect(_fullscreenViewArea, color);
surface->fillRect(_viewArea, black);
-
- switch (_renderMode) {
- case Common::kRenderCGA:
- color = 1;
- break;
- case Common::kRenderZX:
- color = 6;
- break;
- default:
- color = 14;
- }
- uint8 r, g, b;
- _gfx->readFromPalette(color, r, g, b);
- uint32 front = _gfx->_texturePixelFormat.ARGBToColor(0xFF, r, g, b);
-
int x, y;
x = 50;
y = 32;
+
for (int i = 0; i < 10; i++) {
Common::String line = message.substr(28 * i, 28);
- debug("'%s' %d", line.c_str(), line.size());
+ //debug("'%s' %d", line.c_str(), line.size());
drawStringInSurface(line, x, y, front, black, surface);
y = y + 8;
}
@@ -305,9 +287,27 @@ void DarkEngine::drawFullscreenMessage(Common::String message) {
_gfx->setViewport(_fullscreenViewArea);
_gfx->drawTexturedRect2D(_fullscreenViewArea, _fullscreenViewArea, _uiTexture);
_gfx->setViewport(_viewArea);
+}
- _gfx->flipBuffer();
- g_system->updateScreen();
+void DarkEngine::drawFullscreenMessageAndWait(Common::String message) {
+ _savedScreen = _gfx->getScreenshot();
+ uint32 color = 0;
+ switch (_renderMode) {
+ case Common::kRenderCGA:
+ color = 1;
+ break;
+ case Common::kRenderZX:
+ color = 6;
+ break;
+ default:
+ color = 14;
+ }
+ uint8 r, g, b;
+ _gfx->readFromPalette(color, r, g, b);
+ uint32 front = _gfx->_texturePixelFormat.ARGBToColor(0xFF, r, g, b);
+
+ Graphics::Surface *surface = new Graphics::Surface();
+ surface->create(_screenW, _screenH, _gfx->_texturePixelFormat);
Common::Event event;
bool cont = true;
@@ -323,14 +323,17 @@ void DarkEngine::drawFullscreenMessage(Common::String message) {
break;
case Common::EVENT_SCREEN_CHANGED:
_gfx->computeScreenViewport();
- // TODO: properly refresh screen
break;
default:
break;
}
}
- g_system->delayMillis(10);
+ drawBorder();
+ drawFullscreenMessage(message, front, surface);
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(15); // try to target ~60 FPS
}
_savedScreen->free();
Commit: beaad0300ac294d8e036a0d1c1f0a6d8cf42efcb
https://github.com/scummvm/scummvm/commit/beaad0300ac294d8e036a0d1c1f0a6d8cf42efcb
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: removed useless override
Changed paths:
engines/freescape/freescape.h
engines/freescape/games/driller/driller.cpp
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 38239f3f680..92424380792 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -454,7 +454,6 @@ public:
void gotoArea(uint16 areaID, int entranceID) override;
- void processBorder() override;
void drawInfoMenu() override;
void pressedKey(const int keycode) override;
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index e8993935fa8..767d85c3b57 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -194,10 +194,6 @@ void DrillerEngine::loadAssetsFullGame() {
_areaMap[18]->_conditionSources.push_back(conditionSource);
}
-void DrillerEngine::processBorder() {
- FreescapeEngine::processBorder();
-}
-
void DrillerEngine::drawInfoMenu() {
_savedScreen = _gfx->getScreenshot();
Commit: 7348c2bb7841253f51ebd90323c37fd45b5d2774
https://github.com/scummvm/scummvm/commit/7348c2bb7841253f51ebd90323c37fd45b5d2774
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:34+02:00
Commit Message:
FREESCAPE: initial implementation of game over screen in dark
Changed paths:
engines/freescape/freescape.h
engines/freescape/games/dark/dark.cpp
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 92424380792..5454b8a929f 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -521,6 +521,7 @@ public:
void initGameState() override;
void borderScreen() override;
+ bool checkIfGameEnded() override;
void gotoArea(uint16 areaID, int entranceID) override;
void pressedKey(const int keycode) override;
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index 418fef29a53..bdd85cec5ce 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -150,6 +150,54 @@ void DarkEngine::initGameState() {
_demoEvents.clear();
}
+bool DarkEngine::checkIfGameEnded() {
+ if (_gameStateVars[k8bitVariableShield] == 0) {
+ insertTemporaryMessage(_messagesList[15], _countdown - 2);
+ _gameStateVars[28] = 1; // ??
+ drawFrame();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(2000);
+ gotoArea(1, 26);
+ }
+
+ if (_gameStateVars[k8bitVariableEnergy] == 0) {
+ insertTemporaryMessage(_messagesList[16], _countdown - 2);
+ drawFrame();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(2000);
+ gotoArea(1, 26);
+ }
+
+ if (_forceEndGame) {
+ _forceEndGame = false;
+ if (isDemo())
+ return true;
+ else {
+ drawFrame();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(2000);
+ gotoArea(1, 26);
+ }
+ }
+
+ if (_currentArea->getAreaID() == 1) {
+ rotate(0, 10);
+ drawFrame();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(20);
+ executeLocalGlobalConditions(false, true, false);
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(200);
+ return true;
+ }
+ return false;
+}
+
void DarkEngine::gotoArea(uint16 areaID, int entranceID) {
debugC(1, kFreescapeDebugMove, "Jumping to area: %d, entrance: %d", areaID, entranceID);
if (!_gameStateBits.contains(areaID))
Commit: 76fda24535af02395fd0ccefda8679a78400fe03
https://github.com/scummvm/scummvm/commit/76fda24535af02395fd0ccefda8679a78400fe03
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-26T22:23:35+02:00
Commit Message:
FREESCAPE: correctly load and display images in dark demo for zx
Changed paths:
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/zx.cpp
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index bdd85cec5ce..7a669a393e0 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -288,7 +288,7 @@ void DarkEngine::updateTimeVariables() {
void DarkEngine::borderScreen() {
if (_border) {
drawBorder();
- if (isDemo() && isDOS()) {
+ if (isDemo()) {
drawFullscreenMessageAndWait(_messagesList[27]);
drawFullscreenMessageAndWait(_messagesList[28]);
drawFullscreenMessageAndWait(_messagesList[29]);
@@ -316,12 +316,21 @@ void DarkEngine::drawFullscreenMessage(Common::String message, uint32 front, Gra
surface->fillRect(_fullscreenViewArea, color);
surface->fillRect(_viewArea, black);
- int x, y;
- x = 50;
- y = 32;
+ int x, y, letterPerLine, numberOfLines;
+ if (isDOS()) {
+ x = 50;
+ y = 32;
+ letterPerLine = 28;
+ numberOfLines = 10;
+ } else if (isSpectrum()) {
+ x = 58;
+ y = 32;
+ letterPerLine = 24;
+ numberOfLines = 12;
+ }
- for (int i = 0; i < 10; i++) {
- Common::String line = message.substr(28 * i, 28);
+ for (int i = 0; i < numberOfLines; i++) {
+ Common::String line = message.substr(letterPerLine * i, letterPerLine);
//debug("'%s' %d", line.c_str(), line.size());
drawStringInSurface(line, x, y, front, black, surface);
y = y + 8;
diff --git a/engines/freescape/games/dark/zx.cpp b/engines/freescape/games/dark/zx.cpp
index ce7800a8ae5..b5c74f98457 100644
--- a/engines/freescape/games/dark/zx.cpp
+++ b/engines/freescape/games/dark/zx.cpp
@@ -47,22 +47,20 @@ void DarkEngine::loadAssetsZXDemo() {
error("Unable to find driller.zx.border");
file.close();
-
file.open("darkside.zx.data");
-
if (!file.isOpen())
error("Failed to open darksize.zx.data");
- loadMessagesFixedSize(&file, 0x56c, 19, 24);
+ loadMessagesFixedSize(&file, 0x56b, 16, 27);
loadMessagesFixedSize(&file, 0x5761, 264, 5);
loadFonts(&file, 0x6164);
- //loadGlobalObjects(&file, 0x1d13, 8);
+ loadGlobalObjects(&file, 0x20, 23);
load8bitBinary(&file, 0x62c6, 4);
- /*for (auto &it : _areaMap) {
+ for (auto &it : _areaMap) {
addWalls(it._value);
addECDs(it._value);
- }*/
+ }
}
void DarkEngine::drawZXUI(Graphics::Surface *surface) {
More information about the Scummvm-git-logs
mailing list