[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