[Scummvm-git-logs] scummvm master -> 5bb25ba122866373d8ae24b40266d092af2d4988

neuromancer noreply at scummvm.org
Sun Jun 12 12:09:32 UTC 2022


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

Summary:
fd71173beb HYPNO: added missing stats info collected during levels in boyz
6408c8c9e8 HYPNO: avoid always resetting stats and correctly count missed targets
feed1a4ce3 HYPNO: improved stats counting in boyz
26437f35f1 HYPNO: save and restore stats in boyz
1518bff4ab HYPNO: refactored arcade stats to use a class
e230ad0627 HYPNO: store and load global stats in boyz
5bb25ba122 HYPNO: make sure the bonus field is initialized


Commit: fd71173beb6bf93bc61763de717b696b080c8d61
    https://github.com/scummvm/scummvm/commit/fd71173beb6bf93bc61763de717b696b080c8d61
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: added missing stats info collected during levels in boyz

Changed paths:
    engines/hypno/boyz/arcade.cpp
    engines/hypno/boyz/boyz.cpp
    engines/hypno/hypno.h


diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 1cdaddf5119..99669e4abf8 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -103,6 +103,8 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
 		drawString("scifi08.fgx", Common::String::format("%d", _shootsFired), 240, 77, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", accuracyRatio()), 240, 92, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", -uint32(-1) - _lives), 240, 117, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d", _friendliesEncountered), 240, 142, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d", _infoReceived), 240, 158, 0, kHypnoColorWhiteOrBlue);
 
 		bool cont = true;
 		while (!shouldQuit() && cont) {
@@ -119,6 +121,7 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
 			drawScreen();
 			g_system->delayMillis(10);
 		}
+		resetStatistics();
 	}
 
 	_previousHealth = _health;
@@ -512,7 +515,10 @@ bool BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool
 				playSound(_soundPath + _shoots[i].animalSound, 1);
 				return false;
 			}
+			incFriendliesEncountered();
+
 			if (!_shoots[i].additionalVideo.empty()) {
+				incInfoReceived();
 				_background->decoder->pauseVideo(true);
 				MVideo video(_shoots[i].additionalVideo, Common::Point(0, 0), false, true, false);
 				disableCursor();
@@ -544,6 +550,7 @@ bool BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool
 						playSound(_music, 0, arc->musicRate); // restore music
 				}
 			} else if (_shoots[i].interactionFrame > 0) {
+				incInfoReceived();
 				_background->decoder->forceSeekToFrame(_shoots[i].interactionFrame);
 				_masks->decoder->forceSeekToFrame(_shoots[i].interactionFrame);
 				_additionalVideo = new MVideo(arc->missBoss2Video, Common::Point(0, 0), true, false, false);
@@ -559,6 +566,8 @@ bool BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool
 
 			if (checkCup(_shoots[i].name))
 				return false;
+
+			incFriendliesEncountered();
 			uint32 idx = _shoots[i].warningVideoIdx;
 			idx = idx == 0 ? 2 : idx;
 			Common::String filename = _warningVideosDay[idx];
@@ -650,6 +659,9 @@ void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc) {
 			return;  // Precondition was destroyed, so we ignore the missed shoot
 	}
 
+	if (s->nonHostile)
+		_targetsMissed--; // If the target was not hostile, it should *not* count as missed
+
 	if (s->name == "CAPTOR") {
 		_background->decoder->pauseVideo(true);
 		MVideo video(_warningHostage, Common::Point(0, 0), false, true, false);
@@ -760,4 +772,18 @@ bool BoyzEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
 	return true;
 }
 
+void BoyzEngine::resetStatistics() {
+	HypnoEngine::resetStatistics();
+	_friendliesEncountered = 0;
+	_infoReceived = 0;
+}
+
+void BoyzEngine::incFriendliesEncountered() {
+	_friendliesEncountered++;
+}
+
+void BoyzEngine::incInfoReceived() {
+	_infoReceived++;
+}
+
 } // namespace Hypno
\ No newline at end of file
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index ccc043c4980..b8ea8493676 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -71,6 +71,8 @@ BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine
 	_lastLevel = 0;
 	_selectedCorrectBox = 0;
 	_flashbackMode = false;
+	_friendliesEncountered = 0;
+	_infoReceived = 0;
 
     const chapterEntry *entry = rawChapterTable;
     while (entry->id) {
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index ae94675d668..142f7e76610 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -274,7 +274,7 @@ public:
 	virtual void findNextSegment(ArcadeShooting *arc);
 	virtual void initSegment(ArcadeShooting *arc);
 
-	void resetStatistics();
+	virtual void resetStatistics();
 
 	void incShotsFired();
 	uint32 _shootsFired;
@@ -578,6 +578,14 @@ public:
 	void loadFonts() override;
 	void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
 
+	// Stats
+	void resetStatistics() override;
+	void incFriendliesEncountered();
+	uint32 _friendliesEncountered;
+
+	void incInfoReceived();
+	uint32 _infoReceived;
+
 	// Saves
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
 	Common::Error loadGameStream(Common::SeekableReadStream *stream) override;


Commit: 6408c8c9e8575e3aff4363ef76658750b532e05a
    https://github.com/scummvm/scummvm/commit/6408c8c9e8575e3aff4363ef76658750b532e05a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: avoid always resetting stats and correctly count missed targets

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/spider/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index b602ec60957..02231e7bbb1 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -205,8 +205,6 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 	Common::Point mousePos;
 	Common::List<uint32> shootsToRemove;
 
-	// statistics
-	resetStatistics();
 
 	// segment/shoots
 	Segments segments = arc->segments;
@@ -496,8 +494,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 
 				uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame();
 				if (frame > 0 && frame >= (int)(bodyLastFrame - 3) && !it->destroyed) {
-					missedTarget(it, arc);
 					incTargetsMissed();
+					missedTarget(it, arc);
 					// No need to pop attackFrames or explosionFrames
 					skipVideo(*it->video);
 					shootsToRemove.push_back(i);
@@ -512,6 +510,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 				uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame();
 				if (frame > it->startFrame && frame - it->startFrame >= bodyLastFrame - 3)
 					if (!it->destroyed) {
+						incTargetsMissed();
 						missedTarget(it, arc);
 						shootsToRemove.push_back(i);
 					}
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index 6cca363fa77..ad6d9dc8685 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -36,7 +36,7 @@ static const int shootOriginIndex[9][2] = {
 void SpiderEngine::runBeforeArcade(ArcadeShooting *arc) {
 	_health = arc->health;
 	_maxHealth = _health;
-
+	resetStatistics();
 	_checkpoint = _currentLevel;
 	assert(!arc->player.empty());
 	_playerFrames = decodeFrames(arc->player);


Commit: feed1a4ce3b7c835b22a8a95f2ebf8cdd25ab1dd
    https://github.com/scummvm/scummvm/commit/feed1a4ce3b7c835b22a8a95f2ebf8cdd25ab1dd
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: improved stats counting in boyz

Changed paths:
    engines/hypno/boyz/arcade.cpp


diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 99669e4abf8..06f933cdb66 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -94,14 +94,15 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
 
 	if (_currentLevel == lastLevelTerritory(_currentLevel)) {
 		byte *palette;
-		int territory = getTerritory(_currentLevel) + 1;
+		int territory = getTerritory(_currentLevel) - 1;
 		Graphics::Surface *stats = decodeFrame("preload/stats.smk", territory, &palette);
 		loadPalette(palette, 0, 256);
 		drawImage(*stats, 0, 0, true);
-		drawString("scifi08.fgx", Common::String::format("%d", _targetsDestroyed + _targetsMissed), 240, 40, 0, kHypnoColorWhiteOrBlue);
-		drawString("scifi08.fgx", Common::String::format("%d", _targetsDestroyed), 240, 54, 0, kHypnoColorWhiteOrBlue);
+		uint32 enemyAvailable = _targetsDestroyed + _targetsMissed;
+		drawString("scifi08.fgx", Common::String::format("%d", enemyAvailable), 240, 40, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d%%", 100 * _targetsDestroyed / enemyAvailable), 240, 54, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", _shootsFired), 240, 77, 0, kHypnoColorWhiteOrBlue);
-		drawString("scifi08.fgx", Common::String::format("%d", accuracyRatio()), 240, 92, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d%%", accuracyRatio()), 240, 92, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", -uint32(-1) - _lives), 240, 117, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", _friendliesEncountered), 240, 142, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", _infoReceived), 240, 158, 0, kHypnoColorWhiteOrBlue);
@@ -618,6 +619,7 @@ bool BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool
 			playSound(_soundPath + _shoots[i].deathSound, 1);
 
 		if (_shoots[i].playInteractionAudio) {
+			incInfoReceived();
 			_additionalVideo = new MVideo(arc->missBoss2Video, Common::Point(0, 0), true, false, false);
 			playVideo(*_additionalVideo);
 		}
@@ -659,8 +661,10 @@ void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc) {
 			return;  // Precondition was destroyed, so we ignore the missed shoot
 	}
 
-	if (s->nonHostile)
+	if (s->nonHostile) {
+		incFriendliesEncountered();
 		_targetsMissed--; // If the target was not hostile, it should *not* count as missed
+	}
 
 	if (s->name == "CAPTOR") {
 		_background->decoder->pauseVideo(true);


Commit: 26437f35f12a01356b4f89097902e8d23d3045be
    https://github.com/scummvm/scummvm/commit/26437f35f12a01356b4f89097902e8d23d3045be
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: save and restore stats in boyz

Changed paths:
    engines/hypno/boyz/boyz.cpp


diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index b8ea8493676..1c1fafe54f2 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -1024,6 +1024,15 @@ Common::Error BoyzEngine::saveGameStream(Common::WriteStream *stream, bool isAut
 
 	stream->writeUint32LE(_lastLevel);
 
+	// Save current stats
+	stream->writeUint32LE(_shootsFired);
+	stream->writeUint32LE(_enemyHits);
+	stream->writeUint32LE(_enemyTargets);
+	stream->writeUint32LE(_targetsDestroyed);
+	stream->writeUint32LE(_targetsMissed);
+	stream->writeUint32LE(_friendliesEncountered);
+	stream->writeUint32LE(_infoReceived);
+
 	saveSceneState(stream);
 	return Common::kNoError;
 }
@@ -1036,6 +1045,15 @@ Common::Error BoyzEngine::loadGameStream(Common::SeekableReadStream *stream) {
 	_score = stream->readUint32LE();
 	_lastLevel = stream->readUint32LE();
 
+	// Load stats
+	_shootsFired = stream->readUint32LE();
+	_enemyHits = stream->readUint32LE();
+	_enemyTargets = stream->readUint32LE();
+	_targetsDestroyed = stream->readUint32LE();
+	_targetsMissed = stream->readUint32LE();
+	_friendliesEncountered = stream->readUint32LE();
+	_infoReceived = stream->readUint32LE();
+
 	loadSceneState(stream);
 	if (_unlockAllLevels) {
 		_nextLevel = "<select_t1>";


Commit: 1518bff4abfa3520952da853ff5b5c107987f570
    https://github.com/scummvm/scummvm/commit/1518bff4abfa3520952da853ff5b5c107987f570
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: refactored arcade stats to use a class

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/boyz/arcade.cpp
    engines/hypno/boyz/boyz.cpp
    engines/hypno/grammar.h
    engines/hypno/hypno.h
    engines/hypno/wet/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 02231e7bbb1..c2a3ee80295 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -733,44 +733,47 @@ void HypnoEngine::incScore(int inc) {
 }
 
 void HypnoEngine::incShotsFired() {
-	_shootsFired++;
+	_stats.shootsFired++;
 }
 
 void HypnoEngine::incEnemyHits() {
-	_enemyHits++;
+	_stats.enemyHits++;
 }
 
 void HypnoEngine::incEnemyTargets() {
-	_enemyTargets++;
+	_stats.enemyTargets++;
 }
 
 void HypnoEngine::incTargetsDestroyed() {
-	_targetsDestroyed++;
+	_stats.targetsDestroyed++;
 }
 
 void HypnoEngine::incTargetsMissed() {
-	_targetsMissed++;
+	_stats.targetsMissed++;
 }
 
 uint32 HypnoEngine::killRatio() {
-	if (_enemyTargets == 0)
+	if (_stats.enemyTargets == 0)
 		return 0;
-	return 100 * _targetsDestroyed / _enemyTargets;
+	return 100 * _stats.targetsDestroyed / _stats.enemyTargets;
 }
 
 uint32 HypnoEngine::accuracyRatio() {
-	if (_shootsFired == 0)
+	if (_stats.shootsFired == 0)
 		return 0;
-	return 100 * _enemyHits / _shootsFired;
+	return 100 * _stats.enemyHits / _stats.shootsFired;
+}
+
+void HypnoEngine::incFriendliesEncountered() {
+	_stats.friendliesEncountered++;
+}
+
+void HypnoEngine::incInfoReceived() {
+	_stats.infoReceived++;
 }
 
 void HypnoEngine::resetStatistics() {
-	_shootsFired = 0;
-	_enemyHits = 0;
-	_enemyTargets = 0;
-	_targetsDestroyed = 0;
-	_targetsMissed = 0;
-	_bonus = 0;
+	_stats = ArcadeStats();
 }
 
 bool HypnoEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 06f933cdb66..be21821d107 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -98,14 +98,14 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
 		Graphics::Surface *stats = decodeFrame("preload/stats.smk", territory, &palette);
 		loadPalette(palette, 0, 256);
 		drawImage(*stats, 0, 0, true);
-		uint32 enemyAvailable = _targetsDestroyed + _targetsMissed;
+		uint32 enemyAvailable = _stats.targetsDestroyed + _stats.targetsMissed;
 		drawString("scifi08.fgx", Common::String::format("%d", enemyAvailable), 240, 40, 0, kHypnoColorWhiteOrBlue);
-		drawString("scifi08.fgx", Common::String::format("%d%%", 100 * _targetsDestroyed / enemyAvailable), 240, 54, 0, kHypnoColorWhiteOrBlue);
-		drawString("scifi08.fgx", Common::String::format("%d", _shootsFired), 240, 77, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d%%", 100 * _stats.targetsDestroyed / enemyAvailable), 240, 54, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d", _stats.shootsFired), 240, 77, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d%%", accuracyRatio()), 240, 92, 0, kHypnoColorWhiteOrBlue);
 		drawString("scifi08.fgx", Common::String::format("%d", -uint32(-1) - _lives), 240, 117, 0, kHypnoColorWhiteOrBlue);
-		drawString("scifi08.fgx", Common::String::format("%d", _friendliesEncountered), 240, 142, 0, kHypnoColorWhiteOrBlue);
-		drawString("scifi08.fgx", Common::String::format("%d", _infoReceived), 240, 158, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d", _stats.friendliesEncountered), 240, 142, 0, kHypnoColorWhiteOrBlue);
+		drawString("scifi08.fgx", Common::String::format("%d", _stats.infoReceived), 240, 158, 0, kHypnoColorWhiteOrBlue);
 
 		bool cont = true;
 		while (!shouldQuit() && cont) {
@@ -663,7 +663,7 @@ void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc) {
 
 	if (s->nonHostile) {
 		incFriendliesEncountered();
-		_targetsMissed--; // If the target was not hostile, it should *not* count as missed
+		_stats.targetsMissed--; // If the target was not hostile, it should *not* count as missed
 	}
 
 	if (s->name == "CAPTOR") {
@@ -776,18 +776,4 @@ bool BoyzEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
 	return true;
 }
 
-void BoyzEngine::resetStatistics() {
-	HypnoEngine::resetStatistics();
-	_friendliesEncountered = 0;
-	_infoReceived = 0;
-}
-
-void BoyzEngine::incFriendliesEncountered() {
-	_friendliesEncountered++;
-}
-
-void BoyzEngine::incInfoReceived() {
-	_infoReceived++;
-}
-
 } // namespace Hypno
\ No newline at end of file
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 1c1fafe54f2..9e5206c4504 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -71,8 +71,6 @@ BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine
 	_lastLevel = 0;
 	_selectedCorrectBox = 0;
 	_flashbackMode = false;
-	_friendliesEncountered = 0;
-	_infoReceived = 0;
 
     const chapterEntry *entry = rawChapterTable;
     while (entry->id) {
@@ -1025,13 +1023,13 @@ Common::Error BoyzEngine::saveGameStream(Common::WriteStream *stream, bool isAut
 	stream->writeUint32LE(_lastLevel);
 
 	// Save current stats
-	stream->writeUint32LE(_shootsFired);
-	stream->writeUint32LE(_enemyHits);
-	stream->writeUint32LE(_enemyTargets);
-	stream->writeUint32LE(_targetsDestroyed);
-	stream->writeUint32LE(_targetsMissed);
-	stream->writeUint32LE(_friendliesEncountered);
-	stream->writeUint32LE(_infoReceived);
+	stream->writeUint32LE(_stats.shootsFired);
+	stream->writeUint32LE(_stats.enemyHits);
+	stream->writeUint32LE(_stats.enemyTargets);
+	stream->writeUint32LE(_stats.targetsDestroyed);
+	stream->writeUint32LE(_stats.targetsMissed);
+	stream->writeUint32LE(_stats.friendliesEncountered);
+	stream->writeUint32LE(_stats.infoReceived);
 
 	saveSceneState(stream);
 	return Common::kNoError;
@@ -1046,13 +1044,13 @@ Common::Error BoyzEngine::loadGameStream(Common::SeekableReadStream *stream) {
 	_lastLevel = stream->readUint32LE();
 
 	// Load stats
-	_shootsFired = stream->readUint32LE();
-	_enemyHits = stream->readUint32LE();
-	_enemyTargets = stream->readUint32LE();
-	_targetsDestroyed = stream->readUint32LE();
-	_targetsMissed = stream->readUint32LE();
-	_friendliesEncountered = stream->readUint32LE();
-	_infoReceived = stream->readUint32LE();
+	_stats.shootsFired = stream->readUint32LE();
+	_stats.enemyHits = stream->readUint32LE();
+	_stats.enemyTargets = stream->readUint32LE();
+	_stats.targetsDestroyed = stream->readUint32LE();
+	_stats.targetsMissed = stream->readUint32LE();
+	_stats.friendliesEncountered = stream->readUint32LE();
+	_stats.infoReceived = stream->readUint32LE();
 
 	loadSceneState(stream);
 	if (_unlockAllLevels) {
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index f031de1d7cb..c9ba7904c6b 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -731,6 +731,27 @@ typedef Common::HashMap<Filename, Level*> Levels;
 extern Hotspots *g_parsedHots;
 extern ArcadeShooting *g_parsedArc;
 
+class ArcadeStats {
+	public:
+	ArcadeStats()  {
+		shootsFired = 0;
+		enemyHits = 0;
+		enemyTargets = 0;
+		targetsDestroyed = 0;
+		targetsMissed = 0;
+		friendliesEncountered = 0;
+		infoReceived = 0;
+	}
+
+	uint32 shootsFired;
+	uint32 enemyHits;
+	uint32 enemyTargets;
+	uint32 targetsDestroyed;
+	uint32 targetsMissed;
+	uint32 friendliesEncountered;
+	uint32 infoReceived;
+};
+
 } // End of namespace Hypno
 
 #endif
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 142f7e76610..36afc391878 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -274,22 +274,15 @@ public:
 	virtual void findNextSegment(ArcadeShooting *arc);
 	virtual void initSegment(ArcadeShooting *arc);
 
-	virtual void resetStatistics();
-
+	ArcadeStats _stats;
+	void resetStatistics();
 	void incShotsFired();
-	uint32 _shootsFired;
-
 	void incEnemyHits();
-	uint32 _enemyHits;
-
 	void incEnemyTargets();
-	uint32 _enemyTargets;
-
 	void incTargetsDestroyed();
-	uint32 _targetsDestroyed;
-
 	void incTargetsMissed();
-	uint32 _targetsMissed;
+	void incFriendliesEncountered();
+	void incInfoReceived();
 
 	void incScore(int inc);
 	void incBonus(int inc);
@@ -578,14 +571,6 @@ public:
 	void loadFonts() override;
 	void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
 
-	// Stats
-	void resetStatistics() override;
-	void incFriendliesEncountered();
-	uint32 _friendliesEncountered;
-
-	void incInfoReceived();
-	uint32 _infoReceived;
-
 	// Saves
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
 	Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 4db5ccc012e..ec6bee07906 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -425,10 +425,10 @@ void WetEngine::runAfterArcade(ArcadeShooting *arc) {
 
 			drawImage(*frame, 0, 0, false);
 			drawString("scifi08.fgx", Common::String::format("Lives : %d", _lives), 36, 2, 0, c);
-			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "SHOTS FIRED", _shootsFired), 60, 46, 0, c);
-			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "ENEMY TARGETS", _enemyTargets), 60, 56, 0, c);
-			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "TARGETS DESTROYED", _targetsDestroyed), 60, 66, 0, c);
-			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "TARGETS MISSED", _targetsMissed), 60, 76, 0, c);
+			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "SHOTS FIRED", _stats.shootsFired), 60, 46, 0, c);
+			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "ENEMY TARGETS", _stats.enemyTargets), 60, 56, 0, c);
+			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "TARGETS DESTROYED", _stats.targetsDestroyed), 60, 66, 0, c);
+			drawString("scifi08.fgx", Common::String::format("%-20s = %7d", "TARGETS MISSED", _stats.targetsMissed), 60, 76, 0, c);
 			drawString("scifi08.fgx", Common::String::format("%-20s = %5d %%", "KILL RATIO", killRatio()), 60, 86, 0, c);
 			drawString("scifi08.fgx", Common::String::format("%-20s = %5d %%", "ACCURACY", accuracyRatio()), 60, 96, 0, c);
 			drawString("scifi08.fgx", Common::String::format("%-20s = %5d %%", "ENERGY", _health), 60, 106, 0, c);


Commit: e230ad0627fb72a4f8270d99f1a99e96670e574b
    https://github.com/scummvm/scummvm/commit/e230ad0627fb72a4f8270d99f1a99e96670e574b
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: store and load global stats in boyz

Changed paths:
    engines/hypno/boyz/arcade.cpp
    engines/hypno/boyz/boyz.cpp
    engines/hypno/boyz/hard.cpp
    engines/hypno/hypno.h


diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index be21821d107..8b82bf299ff 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -28,6 +28,7 @@ namespace Hypno {
 
 void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
 	_checkpoint = _currentLevel;
+	_lastStats = _stats;
 	if (!_name.empty()) // if name is name, then we are testing some level
 		saveProfile(_name, int(arc->id));
 
@@ -85,7 +86,7 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
 	if (_health <= 0) {
 		if (_arcadeMode == "YS")
 			return;
-
+		_stats = _lastStats;
 		MVideo video(_deathDay[_currentActor], Common::Point(0, 0), false, true, false);
 		disableCursor();
 		runIntro(video);
@@ -122,6 +123,16 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
 			drawScreen();
 			g_system->delayMillis(10);
 		}
+
+		// Merge current stats with the global ones
+		_globalStats.shootsFired = _stats.shootsFired + _globalStats.shootsFired;
+		_globalStats.enemyHits = _stats.enemyHits + _globalStats.enemyHits;
+		_globalStats.enemyTargets = _stats.enemyTargets + _globalStats.enemyTargets;
+		_globalStats.targetsDestroyed = _stats.targetsDestroyed + _globalStats.targetsDestroyed;
+		_globalStats.targetsMissed = _stats.targetsMissed + _globalStats.targetsMissed;
+		_globalStats.friendliesEncountered = _stats.friendliesEncountered + _globalStats.friendliesEncountered;
+		_globalStats.infoReceived = _stats.infoReceived + _globalStats.infoReceived;
+		// After that, we can reset the current stats
 		resetStatistics();
 	}
 
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 9e5206c4504..5ca524d7c1c 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -1031,6 +1031,14 @@ Common::Error BoyzEngine::saveGameStream(Common::WriteStream *stream, bool isAut
 	stream->writeUint32LE(_stats.friendliesEncountered);
 	stream->writeUint32LE(_stats.infoReceived);
 
+	stream->writeUint32LE(_globalStats.shootsFired);
+	stream->writeUint32LE(_globalStats.enemyHits);
+	stream->writeUint32LE(_globalStats.enemyTargets);
+	stream->writeUint32LE(_globalStats.targetsDestroyed);
+	stream->writeUint32LE(_globalStats.targetsMissed);
+	stream->writeUint32LE(_globalStats.friendliesEncountered);
+	stream->writeUint32LE(_globalStats.infoReceived);
+
 	saveSceneState(stream);
 	return Common::kNoError;
 }
@@ -1052,6 +1060,14 @@ Common::Error BoyzEngine::loadGameStream(Common::SeekableReadStream *stream) {
 	_stats.friendliesEncountered = stream->readUint32LE();
 	_stats.infoReceived = stream->readUint32LE();
 
+	_globalStats.shootsFired = stream->readUint32LE();
+	_globalStats.enemyHits = stream->readUint32LE();
+	_globalStats.enemyTargets = stream->readUint32LE();
+	_globalStats.targetsDestroyed = stream->readUint32LE();
+	_globalStats.targetsMissed = stream->readUint32LE();
+	_globalStats.friendliesEncountered = stream->readUint32LE();
+	_globalStats.infoReceived = stream->readUint32LE();
+
 	loadSceneState(stream);
 	if (_unlockAllLevels) {
 		_nextLevel = "<select_t1>";
diff --git a/engines/hypno/boyz/hard.cpp b/engines/hypno/boyz/hard.cpp
index 16889327739..1617674303f 100644
--- a/engines/hypno/boyz/hard.cpp
+++ b/engines/hypno/boyz/hard.cpp
@@ -50,6 +50,9 @@ void BoyzEngine::runCode(Code *code) {
 
 void BoyzEngine::runMainMenu(Code *code) {
 	resetSceneState();
+	resetStatistics();
+	_globalStats = ArcadeStats();
+
 	Common::Event event;
 	byte *palette;
 	Graphics::Surface *menu = decodeFrame("preload/mainmenu.smk", 0, &palette);
@@ -239,6 +242,7 @@ void BoyzEngine::runRetryMenu(Code *code) {
 				} else if (restartTerritoryBox.contains(mousePos)) {
 					// Restore initial health for the team
 					_health = _maxHealth;
+					_stats = _globalStats;
 					_nextLevel = firstLevelTerritory(_checkpoint);
 					cont = false;
 				} else if (restartMissionBox.contains(mousePos)) {
@@ -258,6 +262,7 @@ void BoyzEngine::runRetryMenu(Code *code) {
 				} else if (event.kbd.keycode == Common::KEYCODE_t) {
 					// Restore initial health for the team
 					_health = _maxHealth;
+					_stats = _globalStats;
 					_nextLevel = firstLevelTerritory(_checkpoint);
 					cont = false;
 				} else if (event.kbd.keycode == Common::KEYCODE_q)
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 36afc391878..02b252efde7 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -557,6 +557,8 @@ public:
 	bool shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool secondary) override;
 	bool clickedSecondaryShoot(const Common::Point &mousePos) override;
 	void showCredits() override;
+	ArcadeStats _lastStats;
+	ArcadeStats _globalStats;
 
 	void missedTarget(Shoot *s, ArcadeShooting *arc) override;
 	void drawHealth() override;


Commit: 5bb25ba122866373d8ae24b40266d092af2d4988
    https://github.com/scummvm/scummvm/commit/5bb25ba122866373d8ae24b40266d092af2d4988
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-06-12T14:10:04+02:00

Commit Message:
HYPNO: make sure the bonus field is initialized

Changed paths:
    engines/hypno/hypno.cpp


diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index 2dde4b125a0..f58d337afb9 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -52,7 +52,7 @@ HypnoEngine::HypnoEngine(OSystem *syst, const ADGameDescription *gd)
 	  _nextHotsToAdd(nullptr), _nextHotsToRemove(nullptr),
 	  _levelId(0), _skipLevel(false), _health(0), _maxHealth(0),
 	  _playerFrameIdx(0), _playerFrameSep(0), _refreshConversation(false),
-	  _countdown(0), _timerStarted(false), _score(0), _lives(0),
+	  _countdown(0), _timerStarted(false), _score(0), _bonus(0), _lives(0),
 	  _defaultCursor(""), _defaultCursorIdx(0),  _skipDefeatVideo(false),
 	  _background(nullptr), _masks(nullptr), _musicRate(0), _skipNextVideo(false),
 	  _additionalVideo(nullptr), _ammo(0), _maxAmmo(0),




More information about the Scummvm-git-logs mailing list