[Scummvm-git-logs] scummvm master -> c672f55cc3bb724422db0b76bd9b8b813a1d0dfd

neuromancer noreply at scummvm.org
Wed Aug 9 13:52:52 UTC 2023


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7707506485 FREESCAPE: refactored image loading from engine archive and added basic support for indicators in driller and dark
6ded25e4fc FREESCAPE: stop frame limiter when engine is paused
1252d20cf7 FREESCAPE: free and delete indicators surface memory
c672f55cc3 FREESCAPE: added more indicators for dark (ega)


Commit: 7707506485fda55133e6ddf54491efe358a6f2cf
    https://github.com/scummvm/scummvm/commit/7707506485fda55133e6ddf54491efe358a6f2cf
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-08-09T15:52:15+02:00

Commit Message:
FREESCAPE: refactored image loading from engine archive and added basic support for indicators in driller and dark

Changed paths:
  A devtools/create_freescape/dark_jet_indicator_ega.bmp
  A devtools/create_freescape/dark_jet_indicator_zx.bmp
  A devtools/create_freescape/dark_walk_indicator_ega.bmp
  A devtools/create_freescape/dark_walk_indicator_zx.bmp
  A devtools/create_freescape/driller_ship_indicator_cga.bmp
  A devtools/create_freescape/driller_ship_indicator_ega.bmp
  A devtools/create_freescape/driller_tank_indicator_cga.bmp
  A devtools/create_freescape/driller_tank_indicator_ega.bmp
    devtools/create_freescape/version
    dists/engine-data/freescape.dat
    engines/freescape/assets.cpp
    engines/freescape/freescape.cpp
    engines/freescape/freescape.h
    engines/freescape/games/dark/dos.cpp
    engines/freescape/games/driller/c64.cpp
    engines/freescape/games/driller/dos.cpp
    engines/freescape/games/eclipse.cpp
    engines/freescape/loaders/8bitBinaryLoader.cpp


diff --git a/devtools/create_freescape/dark_jet_indicator_ega.bmp b/devtools/create_freescape/dark_jet_indicator_ega.bmp
new file mode 100644
index 00000000000..0bd325e8b2b
Binary files /dev/null and b/devtools/create_freescape/dark_jet_indicator_ega.bmp differ
diff --git a/devtools/create_freescape/dark_jet_indicator_zx.bmp b/devtools/create_freescape/dark_jet_indicator_zx.bmp
new file mode 100644
index 00000000000..df5fe38fb0d
Binary files /dev/null and b/devtools/create_freescape/dark_jet_indicator_zx.bmp differ
diff --git a/devtools/create_freescape/dark_walk_indicator_ega.bmp b/devtools/create_freescape/dark_walk_indicator_ega.bmp
new file mode 100644
index 00000000000..eb42785aed3
Binary files /dev/null and b/devtools/create_freescape/dark_walk_indicator_ega.bmp differ
diff --git a/devtools/create_freescape/dark_walk_indicator_zx.bmp b/devtools/create_freescape/dark_walk_indicator_zx.bmp
new file mode 100644
index 00000000000..7e62b9ae2c6
Binary files /dev/null and b/devtools/create_freescape/dark_walk_indicator_zx.bmp differ
diff --git a/devtools/create_freescape/driller_ship_indicator_cga.bmp b/devtools/create_freescape/driller_ship_indicator_cga.bmp
new file mode 100644
index 00000000000..6ddac40f3fc
Binary files /dev/null and b/devtools/create_freescape/driller_ship_indicator_cga.bmp differ
diff --git a/devtools/create_freescape/driller_ship_indicator_ega.bmp b/devtools/create_freescape/driller_ship_indicator_ega.bmp
new file mode 100644
index 00000000000..0faea452ae4
Binary files /dev/null and b/devtools/create_freescape/driller_ship_indicator_ega.bmp differ
diff --git a/devtools/create_freescape/driller_tank_indicator_cga.bmp b/devtools/create_freescape/driller_tank_indicator_cga.bmp
new file mode 100644
index 00000000000..a07c783c5be
Binary files /dev/null and b/devtools/create_freescape/driller_tank_indicator_cga.bmp differ
diff --git a/devtools/create_freescape/driller_tank_indicator_ega.bmp b/devtools/create_freescape/driller_tank_indicator_ega.bmp
new file mode 100644
index 00000000000..ec220eade78
Binary files /dev/null and b/devtools/create_freescape/driller_tank_indicator_ega.bmp differ
diff --git a/devtools/create_freescape/version b/devtools/create_freescape/version
index d8263ee9860..e440e5c8425 100644
--- a/devtools/create_freescape/version
+++ b/devtools/create_freescape/version
@@ -1 +1 @@
-2
\ No newline at end of file
+3
\ No newline at end of file
diff --git a/dists/engine-data/freescape.dat b/dists/engine-data/freescape.dat
index 4bae5edd3a7..accd6faeaf7 100644
Binary files a/dists/engine-data/freescape.dat and b/dists/engine-data/freescape.dat differ
diff --git a/engines/freescape/assets.cpp b/engines/freescape/assets.cpp
index 03369a113be..fe63bdd8710 100644
--- a/engines/freescape/assets.cpp
+++ b/engines/freescape/assets.cpp
@@ -23,6 +23,8 @@
 // available at https://github.com/TomHarte/Phantasma/ (MIT)
 
 #include "common/file.h"
+#include "common/compression/unzip.h"
+#include "image/bmp.h"
 
 #include "freescape/freescape.h"
 
@@ -104,4 +106,37 @@ void FreescapeEngine::loadAssetsCPCFullGame() {
 void FreescapeEngine::loadAssetsC64FullGame() {
 }
 
+void FreescapeEngine::loadDataBundle() {
+	_dataBundle = Common::makeZipArchive(FREESCAPE_DATA_BUNDLE);
+	if (!_dataBundle) {
+		error("ENGINE: Couldn't load data bundle '%s'.", FREESCAPE_DATA_BUNDLE.c_str());
+	}
+	Common::String versionFilename = "version";
+	if (!_dataBundle->hasFile(versionFilename))
+		error("No version number in %s", FREESCAPE_DATA_BUNDLE.c_str());
+
+	Common::SeekableReadStream *versionFile = _dataBundle->createReadStreamForMember(versionFilename);
+	char *versionData = (char *)malloc((versionFile->size() + 1) * sizeof(char));
+	versionFile->read(versionData, versionFile->size());
+	versionData[versionFile->size()] = '\0';
+	Common::String expectedVersion = "3";
+	if (versionData != expectedVersion)
+		error("Unexpected version number for freescape.dat: expecting '%s' but found '%s'", expectedVersion.c_str(), versionData);
+	free(versionData);
+}
+
+Graphics::Surface *FreescapeEngine::loadBundledImage(const Common::String &name) {
+	Image::BitmapDecoder decoder;
+	Common::String bmpFilename = name + "_" + Common::getRenderModeDescription(_renderMode) + ".bmp";
+	debug("Loading %s from bundled archive", bmpFilename.c_str());
+	assert(_dataBundle->hasFile(bmpFilename));
+
+	Common::SeekableReadStream *bmpFile = _dataBundle->createReadStreamForMember(bmpFilename);
+	decoder.loadStream(*bmpFile);
+	Graphics::Surface *surface = new Graphics::Surface();
+	surface->copyFrom(*decoder.getSurface());
+	decoder.destroy();
+	return surface;
+}
+
 } // End of namespace Freescape
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index ff7e69c913b..d10735da515 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -22,7 +22,6 @@
 #include "common/config-manager.h"
 #include "common/events.h"
 #include "common/math.h"
-#include "common/compression/unzip.h"
 #include "common/random.h"
 #include "common/timer.h"
 #include "graphics/cursorman.h"
@@ -836,25 +835,6 @@ Common::Error FreescapeEngine::loadGameStreamExtended(Common::SeekableReadStream
 	return Common::kNoError;
 }
 
-void FreescapeEngine::loadDataBundle() {
-	_dataBundle = Common::makeZipArchive(FREESCAPE_DATA_BUNDLE);
-	if (!_dataBundle) {
-		error("ENGINE: Couldn't load data bundle '%s'.", FREESCAPE_DATA_BUNDLE.c_str());
-	}
-	Common::String versionFilename = "version";
-	if (!_dataBundle->hasFile(versionFilename))
-		error("No version number in %s", FREESCAPE_DATA_BUNDLE.c_str());
-
-	Common::SeekableReadStream *versionFile = _dataBundle->createReadStreamForMember(versionFilename);
-	char *versionData = (char *)malloc((versionFile->size() + 1) * sizeof(char));
-	versionFile->read(versionData, versionFile->size());
-	versionData[versionFile->size()] = '\0';
-	Common::String expectedVersion = "2";
-	if (versionData != expectedVersion)
-		error("Unexpected version number for freescape.dat: expecting '%s' but found '%s'", expectedVersion.c_str(), versionData);
-	free(versionData);
-}
-
 void FreescapeEngine::insertTemporaryMessage(const Common::String message, int deadline) {
 	_temporaryMessages.insert_at(0, message);
 	_temporaryMessageDeadlines.insert_at(0, deadline);
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 3ac4d4baf3a..d3bfa06692d 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -134,6 +134,7 @@ public:
 	Texture *_borderTexture;
 	Texture *_titleTexture;
 	Texture *_uiTexture;
+	Common::Array<Graphics::Surface *>_indicators;
 	Common::HashMap<uint16, Texture *> _borderCGAByArea;
 	Common::HashMap<uint16, byte *> _paletteCGAByArea;
 
@@ -169,7 +170,7 @@ public:
 
 	Common::Archive *_dataBundle;
 	void loadDataBundle();
-	void loadBundledImages();
+	Graphics::Surface *loadBundledImage(const Common::String &name);
 	byte *getPaletteFromNeoImage(Common::SeekableReadStream *stream, int offset);
 	Graphics::ManagedSurface *loadAndConvertNeoImage(Common::SeekableReadStream *stream, int offset, byte *palette = nullptr);
 	Graphics::ManagedSurface *loadAndCenterScrImage(Common::SeekableReadStream *stream);
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index 6a2cbb95528..c0cf04f63b9 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -66,7 +66,6 @@ void DarkEngine::loadAssetsDOSDemo() {
 			addSkanner(it._value);
 		}
 	} else if (_renderMode == Common::kRenderCGA) {
-		//loadBundledImages();
 		file.open("DSIDEC.EXE");
 
 		if (!file.isOpen())
@@ -75,6 +74,12 @@ void DarkEngine::loadAssetsDOSDemo() {
 		load8bitBinary(&file, 0x8a70, 4); // TODO
 	} else
 		error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
+
+	_indicators.push_back(loadBundledImage("dark_walk_indicator"));
+	_indicators.push_back(loadBundledImage("dark_jet_indicator"));
+
+	_indicators[0]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+	_indicators[1]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
 }
 
 void DarkEngine::loadAssetsDOSFullGame() {
@@ -98,14 +103,12 @@ void DarkEngine::loadAssetsDOSFullGame() {
 		_border = load8bitBinImage(&file, 0x210);
 		_border->setPalette((byte *)&kEGADefaultPaletteData, 0, 16);
 
-		// TODO: load objects
 		for (auto &it : _areaMap) {
 			addWalls(it._value);
 			addECDs(it._value);
 			addSkanner(it._value);
 		}
 	} else if (_renderMode == Common::kRenderCGA) {
-		loadBundledImages();
 		file.open("DSIDEC.EXE");
 
 		if (!file.isOpen())
@@ -113,6 +116,12 @@ void DarkEngine::loadAssetsDOSFullGame() {
 		load8bitBinary(&file, 0x7bb0, 4); // TODO
 	} else
 		error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
+
+	_indicators.push_back(loadBundledImage("dark_walk_indicator"));
+	_indicators.push_back(loadBundledImage("dark_jet_indicator"));
+
+	_indicators[0]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+	_indicators[1]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
 }
 
 void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
@@ -180,6 +189,11 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
 	}
 	uint32 clockColor = _gfx->_texturePixelFormat.ARGBToColor(0xFF, 0xFF, 0xFF, 0xFF);
 	drawBinaryClock(surface, 300, 124, clockColor, back);
+
+	if (!_flyMode)
+		surface->copyRectToSurface(*_indicators[0], 160, 136, Common::Rect(_indicators[0]->w, _indicators[0]->h));
+	else
+		surface->copyRectToSurface(*_indicators[1], 160, 136, Common::Rect(_indicators[1]->w, _indicators[1]->h));
 }
 
 } // End of namespace Freescape
\ No newline at end of file
diff --git a/engines/freescape/games/driller/c64.cpp b/engines/freescape/games/driller/c64.cpp
index e52decdc5a7..3f1f7447e51 100644
--- a/engines/freescape/games/driller/c64.cpp
+++ b/engines/freescape/games/driller/c64.cpp
@@ -33,7 +33,6 @@ void DrillerEngine::initC64() {
 void DrillerEngine::loadAssetsC64FullGame() {
 	Common::File file;
 	if (_targetName.hasPrefix("spacestationoblivion")) {
-		loadBundledImages();
 		file.open("spacestationoblivion.c64.data");
 		loadMessagesFixedSize(&file, 0x167a, 14, 20);
 		//loadFonts(&file, 0xae54);
diff --git a/engines/freescape/games/driller/dos.cpp b/engines/freescape/games/driller/dos.cpp
index 0cad8a75326..06aeb9bec4a 100644
--- a/engines/freescape/games/driller/dos.cpp
+++ b/engines/freescape/games/driller/dos.cpp
@@ -317,6 +317,12 @@ void DrillerEngine::loadAssetsDOSFullGame() {
 		swapPalette(1);
 	} else
 		error("Unsupported video mode for DOS");
+
+	_indicators.push_back(loadBundledImage("driller_tank_indicator"));
+	_indicators.push_back(loadBundledImage("driller_ship_indicator"));
+
+	_indicators[0]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+	_indicators[1]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
 }
 
 void DrillerEngine::loadAssetsDOSDemo() {
@@ -343,11 +349,17 @@ void DrillerEngine::loadAssetsDOSDemo() {
 	_border = load8bitDemoImage(&file, 0x6220);
 	_border->setPalette((byte*)&kCGAPalettePinkBlueWhiteData, 0, 4);
 
-	// Fixed for a corrupted area names in the demo data
+	// Fixes corrupted area names in the demo data
 	_areaMap[2]->_name = "LAPIS LAZULI";
 	_areaMap[3]->_name = "EMERALD";
 	_areaMap[8]->_name = "TOPAZ";
 	file.close();
+
+	_indicators.push_back(loadBundledImage("driller_tank_indicator"));
+	_indicators.push_back(loadBundledImage("driller_ship_indicator"));
+
+	_indicators[0]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+	_indicators[1]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
 }
 
 void DrillerEngine::drawDOSUI(Graphics::Surface *surface) {
@@ -420,6 +432,11 @@ void DrillerEngine::drawDOSUI(Graphics::Surface *surface) {
 		Common::Rect shieldBar(87 - shield, 177, 88, 183);
 		surface->fillRect(shieldBar, front);
 	}
+
+	if (!_flyMode)
+		surface->copyRectToSurface(*_indicators[0], 132, 128, Common::Rect(_indicators[0]->w, _indicators[0]->h));
+	else
+		surface->copyRectToSurface(*_indicators[1], 132, 128, Common::Rect(_indicators[1]->w, _indicators[1]->h));
 }
 
 } // End of namespace Freescape
\ No newline at end of file
diff --git a/engines/freescape/games/eclipse.cpp b/engines/freescape/games/eclipse.cpp
index e6f160d170e..314ea8ff9bf 100644
--- a/engines/freescape/games/eclipse.cpp
+++ b/engines/freescape/games/eclipse.cpp
@@ -122,7 +122,6 @@ void EclipseEngine::loadAssetsDOSFullGame() {
 		_border = load8bitBinImage(&file, 0x210);
 		_border->setPalette((byte *)&kEGADefaultPaletteData, 0, 16);
 	} else if (_renderMode == Common::kRenderCGA) {
-		loadBundledImages();
 		file.open("TOTEC.EXE");
 
 		if (!file.isOpen())
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index b76e0b81ed4..5569cd2688b 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -22,8 +22,6 @@
 // Based on Phantasma code by Thomas Harte (2013),
 // available at https://github.com/TomHarte/Phantasma/ (MIT)
 
-#include "image/bmp.h"
-
 #include "freescape/freescape.h"
 #include "freescape/language/8bitDetokeniser.h"
 #include "freescape/objects/connections.h"
@@ -770,32 +768,6 @@ void FreescapeEngine::load8bitBinary(Common::SeekableReadStream *file, int offse
 	_binaryBits = 8;
 }
 
-void FreescapeEngine::loadBundledImages() {
-	/*Image::BitmapDecoder decoder;
-	Common::String targetName = Common::String(_gameDescription->gameId);
-	if (isDOS() && isDemo())
-		Common::replace(targetName, "-demo", "");
-
-	Common::String borderFilename = targetName + "_" + Common::getRenderModeCode(_renderMode) + ".bmp";
-	if (_dataBundle->hasFile(borderFilename)) {
-		Common::SeekableReadStream *borderFile = _dataBundle->createReadStreamForMember(borderFilename);
-		decoder.loadStream(*borderFile);
-		_border = new Graphics::Surface();
-		_border->copyFrom(*decoder.getSurface());
-		decoder.destroy();
-	} else
-		error("Missing border file '%s' in data bundle", borderFilename.c_str());
-
-	Common::String titleFilename = targetName + "_" + Common::getRenderModeDescription(_renderMode) + "_title.bmp";
-	if (_dataBundle->hasFile(titleFilename)) {
-		Common::SeekableReadStream *titleFile = _dataBundle->createReadStreamForMember(titleFilename);
-		decoder.loadStream(*titleFile);
-		_title = new Graphics::Surface();
-		_title->copyFrom(*decoder.getSurface());
-		decoder.destroy();
-	}*/
-}
-
 void FreescapeEngine::loadFonts(byte *font, int charNumber) {
 	if (isDOS() || isSpectrum() || isCPC() || isC64()) {
 		_font.set_size(64 * charNumber);


Commit: 6ded25e4fc0ed8c93330c4035fb981dab644aa20
    https://github.com/scummvm/scummvm/commit/6ded25e4fc0ed8c93330c4035fb981dab644aa20
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-08-09T15:52:15+02:00

Commit Message:
FREESCAPE: stop frame limiter when engine is paused

Changed paths:
    engines/freescape/freescape.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index d10735da515..f77768ed5d9 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -920,6 +920,8 @@ void FreescapeEngine::pauseEngineIntern(bool pause) {
 	Engine::pauseEngineIntern(pause);
 
 	// TODO: Handle the viewport here
+	if (_frameLimiter)
+		_frameLimiter->pause(pause);
 
 	// Unlock the mouse so that the cursor is usable when the GMM opens
 	if (!_shootMode) {


Commit: 1252d20cf76b9d60f71ed3d1d2fe3b9c1ed065e1
    https://github.com/scummvm/scummvm/commit/1252d20cf76b9d60f71ed3d1d2fe3b9c1ed065e1
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-08-09T15:52:15+02:00

Commit Message:
FREESCAPE: free and delete indicators surface memory

Changed paths:
    engines/freescape/freescape.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index f77768ed5d9..6f8381d70b0 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -183,6 +183,11 @@ FreescapeEngine::~FreescapeEngine() {
 	delete _gfx;
 	delete _dataBundle;
 	delete _speaker;
+
+	for (auto &it : _indicators) {
+		it->free();
+		delete it;
+	}
 }
 
 void FreescapeEngine::drawBorder() {


Commit: c672f55cc3bb724422db0b76bd9b8b813a1d0dfd
    https://github.com/scummvm/scummvm/commit/c672f55cc3bb724422db0b76bd9b8b813a1d0dfd
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-08-09T15:52:15+02:00

Commit Message:
FREESCAPE: added more indicators for dark (ega)

Changed paths:
  A devtools/create_freescape/dark_crouch_indicator_ega.bmp
  A devtools/create_freescape/dark_fallen_indicator_ega.bmp
    dists/engine-data/freescape.dat
    engines/freescape/games/dark/dark.cpp
    engines/freescape/games/dark/dos.cpp


diff --git a/devtools/create_freescape/dark_crouch_indicator_ega.bmp b/devtools/create_freescape/dark_crouch_indicator_ega.bmp
new file mode 100644
index 00000000000..a80cd626c56
Binary files /dev/null and b/devtools/create_freescape/dark_crouch_indicator_ega.bmp differ
diff --git a/devtools/create_freescape/dark_fallen_indicator_ega.bmp b/devtools/create_freescape/dark_fallen_indicator_ega.bmp
new file mode 100644
index 00000000000..5b19862d375
Binary files /dev/null and b/devtools/create_freescape/dark_fallen_indicator_ega.bmp differ
diff --git a/dists/engine-data/freescape.dat b/dists/engine-data/freescape.dat
index accd6faeaf7..dbb19a2f134 100644
Binary files a/dists/engine-data/freescape.dat and b/dists/engine-data/freescape.dat differ
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index 13fa4950073..e2e2cbb16de 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -153,6 +153,7 @@ bool DarkEngine::checkECD(uint16 areaID, int index) {
 
 void DarkEngine::initGameState() {
 	_flyMode = false;
+	_hasFallen = false;
 	_noClipMode = false;
 	_playerWasCrushed = false;
 	_shootingFrames = 0;
@@ -370,7 +371,6 @@ bool DarkEngine::checkIfGameEnded() {
 	}
 
 	if (_hasFallen) {
-		_hasFallen = false;
 		_gameStateVars[kVariableDarkEnding] = kDarkEndingEvathDestroyed;
 		playSound(14, false);
 		insertTemporaryMessage(_messagesList[17], _countdown - 4);
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index c0cf04f63b9..2e55a3cebcb 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -117,11 +117,13 @@ void DarkEngine::loadAssetsDOSFullGame() {
 	} else
 		error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
 
+	_indicators.push_back(loadBundledImage("dark_fallen_indicator"));
+	_indicators.push_back(loadBundledImage("dark_crouch_indicator"));
 	_indicators.push_back(loadBundledImage("dark_walk_indicator"));
 	_indicators.push_back(loadBundledImage("dark_jet_indicator"));
 
-	_indicators[0]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
-	_indicators[1]->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+	for (auto &it : _indicators)
+		it->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
 }
 
 void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
@@ -190,10 +192,14 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
 	uint32 clockColor = _gfx->_texturePixelFormat.ARGBToColor(0xFF, 0xFF, 0xFF, 0xFF);
 	drawBinaryClock(surface, 300, 124, clockColor, back);
 
-	if (!_flyMode)
+	if (_hasFallen)
 		surface->copyRectToSurface(*_indicators[0], 160, 136, Common::Rect(_indicators[0]->w, _indicators[0]->h));
-	else
+	else if (_flyMode)
+		surface->copyRectToSurface(*_indicators[3], 160, 136, Common::Rect(_indicators[3]->w, _indicators[3]->h));
+	else if (_playerHeightNumber == 0)
 		surface->copyRectToSurface(*_indicators[1], 160, 136, Common::Rect(_indicators[1]->w, _indicators[1]->h));
+	else
+		surface->copyRectToSurface(*_indicators[2], 160, 136, Common::Rect(_indicators[2]->w, _indicators[2]->h));
 }
 
 } // End of namespace Freescape
\ No newline at end of file




More information about the Scummvm-git-logs mailing list