[Scummvm-git-logs] scummvm master -> 88c4713e46a5adb2093fa536b0f76013e7e9b2fd

neuromancer noreply at scummvm.org
Thu Dec 22 11:26:00 UTC 2022


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

Summary:
88c4713e46 FREESCAPE: adding/removing score when drilling in driller


Commit: 88c4713e46a5adb2093fa536b0f76013e7e9b2fd
    https://github.com/scummvm/scummvm/commit/88c4713e46a5adb2093fa536b0f76013e7e9b2fd
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-12-22T08:24:06-03:00

Commit Message:
FREESCAPE: adding/removing score when drilling in driller

Changed paths:
    engines/freescape/freescape.h
    engines/freescape/games/driller.cpp


diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index c2876c7168f..18f419b610c 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -353,7 +353,9 @@ public:
 
 	bool _useAutomaticDrilling;
 
-	Common::HashMap<uint16, uint32> _areaScores;
+	Common::HashMap<uint16, uint32> _drillStatusByArea;
+	Common::HashMap<uint16, uint32> _drillMaxScoreByArea;
+	Common::HashMap<uint16, uint32> _drillScoreByArea;
 
 	void initGameState() override;
 	bool checkIfGameEnded() override;
@@ -375,7 +377,6 @@ private:
 	void addDrill(const Math::Vector3d position, bool gasFound);
 	bool checkDrill(const Math::Vector3d position);
 	void removeDrill(Area *area);
-	StateBits _drilledAreas;
 
 	void loadAssetsDemo();
 	void loadAssetsFullGame();
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index b719d059adb..f84817d2b85 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -575,7 +575,7 @@ void DrillerEngine::drawDOSUI(Graphics::Surface *surface) {
 	} else {
 		if (_currentArea->_gasPocketRadius == 0)
 			message = _messagesList[2];
-		else if (_drilledAreas[_currentArea->getAreaID()])
+		else if (_drillStatusByArea[_currentArea->getAreaID()])
 			message = _messagesList[0];
 		else
 			message = _messagesList[1];
@@ -650,7 +650,7 @@ void DrillerEngine::drawAmigaAtariSTUI(Graphics::Surface *surface) {
 	} else {
 		if (_currentArea->_gasPocketRadius == 0)
 			message = _messagesList[2];
-		else if (_drilledAreas[_currentArea->getAreaID()])
+		else if (_drillStatusByArea[_currentArea->getAreaID()])
 			message = _messagesList[0];
 		else
 			message = _messagesList[1];
@@ -742,18 +742,22 @@ void DrillerEngine::pressedKey(const int keycode) {
 			return;
 		}
 		Common::String maxScoreMessage = _messagesList[5];
-		maxScoreMessage.replace(2, 6, Common::String::format("%d", _areaScores[_currentArea->getAreaID()]));
+		int maxScore = _drillMaxScoreByArea[_currentArea->getAreaID()];
+		maxScoreMessage.replace(2, 6, Common::String::format("%d", maxScore));
 		insertTemporaryMessage(maxScoreMessage, _countdown - 4);
 		Common::String successMessage = _messagesList[6];
 		successMessage.replace(0, 4, Common::String::format("%d", int(success)));
 		while (successMessage.size() < 14)
 			successMessage += " ";
 		insertTemporaryMessage(successMessage, _countdown - 6);
+		_drillScoreByArea[_currentArea->getAreaID()] = uint32(maxScore * success) / 100;
+		_gameStateVars[k8bitVariableScore] += _drillScoreByArea[_currentArea->getAreaID()];
+
 		if (success >= 50.0) {
-			_drilledAreas[_currentArea->getAreaID()] = kDrillerRigInPlace;
+			_drillStatusByArea[_currentArea->getAreaID()] = kDrillerRigInPlace;
 			_gameStateVars[32]++;
 		} else
-			_drilledAreas[_currentArea->getAreaID()] = kDrillerRigOutOfPlace;
+			_drillStatusByArea[_currentArea->getAreaID()] = kDrillerRigOutOfPlace;
 	} else if (keycode == Common::KEYCODE_c) {
 		if (isDOS() && isDemo()) // No support for drilling here yet
 			return;
@@ -782,13 +786,15 @@ void DrillerEngine::pressedKey(const int keycode) {
 		_gameStateVars[k8bitVariableEnergy] = _gameStateVars[k8bitVariableEnergy] - 5;
 
 		uint16 areaID = _currentArea->getAreaID();
-		if (_drilledAreas[areaID] > 0) {
-			if (_drilledAreas[areaID] == kDrillerRigInPlace)
+		if (_drillStatusByArea[areaID] > 0) {
+			if (_drillStatusByArea[areaID] == kDrillerRigInPlace)
 				_gameStateVars[32]--;
-			_drilledAreas[areaID] = kDrillerNoRig;
+			_drillStatusByArea[areaID] = kDrillerNoRig;
 		}
 		removeDrill(_currentArea);
 		insertTemporaryMessage(_messagesList[10], _countdown - 2);
+
+		_gameStateVars[k8bitVariableScore] -= _drillScoreByArea[_currentArea->getAreaID()];
 	}
 }
 
@@ -990,12 +996,13 @@ void DrillerEngine::initGameState() {
 	for (auto &it : _areaMap) {
 		it._value->resetArea();
 		_gameStateBits[it._key] = 0;
-		if (_drilledAreas[it._key] != kDrillerNoRig)
+		if (_drillStatusByArea[it._key] != kDrillerNoRig)
 			removeDrill(it._value);
-		_drilledAreas[it._key] = kDrillerNoRig;
+		_drillStatusByArea[it._key] = kDrillerNoRig;
 		if (it._key != 255) {
-			_areaScores[it._key] = (10 + _rnd->getRandomNumber(89)) * 1000;
+			_drillMaxScoreByArea[it._key] = (10 + _rnd->getRandomNumber(89)) * 1000;
 		}
+		_drillScoreByArea[it._key] = 0;
 	}
 
 	_gameStateVars[k8bitVariableEnergy] = _initialTankEnergy;
@@ -1066,8 +1073,9 @@ Common::Error DrillerEngine::saveGameStreamExtended(Common::WriteStream *stream,
 		if (it._key == 255)
 			continue;
 		stream->writeUint16LE(it._key);
-		stream->writeUint32LE(_drilledAreas[it._key]);
-		stream->writeUint32LE(_areaScores[it._key]);
+		stream->writeUint32LE(_drillStatusByArea[it._key]);
+		stream->writeUint32LE(_drillMaxScoreByArea[it._key]);
+		stream->writeUint32LE(_drillScoreByArea[it._key]);
 	}
 
 	return Common::kNoError;
@@ -1078,12 +1086,13 @@ Common::Error DrillerEngine::loadGameStreamExtended(Common::SeekableReadStream *
 		uint16 key = stream->readUint16LE();
 		assert(key != 255);
 		assert(_areaMap.contains(key));
-		_drilledAreas[key] = stream->readUint32LE();
-		if (_drilledAreas[key] == kDrillerNoRig)
+		_drillStatusByArea[key] = stream->readUint32LE();
+		if (_drillStatusByArea[key] == kDrillerNoRig)
 			if (drillDeployed(_areaMap[key]))
 				removeDrill(_areaMap[key]);
 
-		_areaScores[key] = stream->readUint32LE();
+		_drillMaxScoreByArea[key] = stream->readUint32LE();
+		_drillScoreByArea[key] = stream->readUint32LE();
 	}
 
 	return Common::kNoError;




More information about the Scummvm-git-logs mailing list