[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