[Scummvm-git-logs] scummvm master -> 4506b1d48c453f534c12a1a784243489f02038bf

alxpnv a04198622 at gmail.com
Mon Aug 16 12:18:41 UTC 2021


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

Summary:
477cae38bc ASYLUM: add support for Steam achievements
4506b1d48c ACHIEVEMENTS: add Sanitarium support


Commit: 477cae38bc3548cee8803f79be6d355c9f269519
    https://github.com/scummvm/scummvm/commit/477cae38bc3548cee8803f79be6d355c9f269519
Author: alxpnv (alxpnv22 at yahoo.com)
Date: 2021-08-16T14:49:53+03:00

Commit Message:
ASYLUM: add support for Steam achievements

Changed paths:
    engines/asylum/asylum.cpp
    engines/asylum/asylum.h
    engines/asylum/metaengine.cpp
    engines/asylum/resources/script.cpp
    engines/asylum/shared.h


diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp
index 31a2dd0d3a..9d3b0ccaae 100644
--- a/engines/asylum/asylum.cpp
+++ b/engines/asylum/asylum.cpp
@@ -22,6 +22,7 @@
 
 #include "backends/keymapper/keymapper.h"
 
+#include "common/achievements.h"
 #include "common/debug-channels.h"
 #include "common/rect.h"
 
@@ -144,6 +145,10 @@ Common::Error AsylumEngine::run() {
 	// Setup mixer
 	syncSoundSettings();
 
+	// Set up achievements system
+	Common::String gameTarget = ConfMan.getActiveDomainName();
+	AchMan.setActiveDomain(getMetaEngine()->getAchievementsInfo(gameTarget));
+
 	// Send init event to our default event handler
 	AsylumEvent initEvt(EVENT_ASYLUM_INIT);
 	if (_handler)
@@ -156,6 +161,9 @@ Common::Error AsylumEngine::run() {
 		_system->delayMillis(10);
 
 		_system->updateScreen();
+
+		if (_scene)
+			checkAchievements();
 	}
 
 	return Common::kNoError;
@@ -550,6 +558,75 @@ bool AsylumEngine::isGameFlagNotSet(GameFlag flag) const {
 	return ((1 << (flag % 32)) & _gameFlags[flag / 32]) >> (flag % 32) == 0;
 }
 
+bool AsylumEngine::areGameFlagsSet(uint from, uint to) const {
+	while (from <= to)
+		if (isGameFlagNotSet((GameFlag)from++))
+			return false;
+
+	return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Steam achievements
+//////////////////////////////////////////////////////////////////////////
+void AsylumEngine::unlockAchievement(const Common::String &id) {
+	AchMan.setAchievement(id);
+}
+
+void AsylumEngine::checkAchievements() {
+	switch (_scene->worldstats()->chapter) {
+	default:
+		return;
+
+	case kChapter2:
+		if (isGameFlagSet(kGameFlag128) && !isGameFlagSet(kGameFlag3189)) {
+			unlockAchievement("ASYLUM_HIDE_AND_SEEK");
+			setGameFlag(kGameFlag3189);
+		}
+		break;
+
+	case kChapter3:
+		if (isGameFlagSet(kGameFlag86) && !isGameFlagSet(kGameFlag3386))
+			setGameFlag(kGameFlag3386);
+		if (isGameFlagSet(kGameFlag87) && !isGameFlagSet(kGameFlag3387))
+			setGameFlag(kGameFlag3387);
+		if (isGameFlagSet(kGameFlag88) && !isGameFlagSet(kGameFlag3388))
+			setGameFlag(kGameFlag3388);
+
+		if (areGameFlagsSet(kGameFlag3386, kGameFlag3388) && !isGameFlagSet(kGameFlag3389)) {
+			unlockAchievement("ASYLUM_DANCE");
+			setGameFlag(kGameFlag3389);
+		}
+		break;
+
+	case kChapter5:
+		if (!isGameFlagSet(kGameFlag3351) && areGameFlagsSet(kGameFlag284, kGameFlag289)) {
+			unlockAchievement("ASYLUM_PASSWORD");
+			setGameFlag(kGameFlag3351);
+		}
+		break;
+
+	case kChapter6:
+		if (!isGameFlagSet(kGameFlag3754) && isGameFlagSet(kGameFlagSolveHiveMachine) && !isGameFlagSet(kGameFlag3755)) {
+			unlockAchievement("ASYLUM_MELODY");
+			setGameFlag(kGameFlag3755);
+		}
+		break;
+
+	case kChapter8:
+		if (!isGameFlagSet(kGameFlag3842) && areGameFlagsSet(kGameFlag3810, kGameFlag3823)) {
+			unlockAchievement("ASYLUM_SOCIAL");
+			setGameFlag(kGameFlag3842);
+		}
+
+		if (!isGameFlagSet(kGameFlag3843) && isGameFlagSet(kGameFlag899)) {
+			unlockAchievement("ASYLUM_SORT");
+			setGameFlag(kGameFlag3843);
+		}
+		break;
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////
 // Misc
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/asylum/asylum.h b/engines/asylum/asylum.h
index 8e227855ae..f36aa3b622 100644
--- a/engines/asylum/asylum.h
+++ b/engines/asylum/asylum.h
@@ -162,6 +162,7 @@ public:
 	void toggleGameFlag(GameFlag flag);
 	bool isGameFlagSet(GameFlag flag) const;
 	bool isGameFlagNotSet(GameFlag flag) const;
+	bool areGameFlagsSet(uint from, uint to) const;
 	void resetFlags();
 
 	// Misc
@@ -170,6 +171,10 @@ public:
 
 	bool rectContains(const int16 (*rectPtr)[4], const Common::Point &p) const;
 
+	// Steam achievements
+	void unlockAchievement(const Common::String &id);
+	void checkAchievements();
+
 	/**
 	 * Switch message handler.
 	 *
diff --git a/engines/asylum/metaengine.cpp b/engines/asylum/metaengine.cpp
index aa63ea57c2..8e97c00c6c 100644
--- a/engines/asylum/metaengine.cpp
+++ b/engines/asylum/metaengine.cpp
@@ -26,6 +26,7 @@
 #include "backends/keymapper/action.h"
 #include "backends/keymapper/keymap.h"
 
+#include "common/achievements.h"
 #include "common/translation.h"
 
 #include "asylum/asylum.h"
@@ -44,6 +45,7 @@ public:
 	bool hasFeature(MetaEngineFeature f) const override;
 	Common::Error createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const override;
 	Common::KeymapArray initKeymaps(const char *target) const override;
+	const Common::AchievementDescriptionList *getAchievementDescriptionList() const override;
 };
 
 bool AsylumMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -98,6 +100,16 @@ Common::KeymapArray AsylumMetaEngine::initKeymaps(const char *target) const {
 	return Keymap::arrayOf(engineKeyMap);
 }
 
+const Common::AchievementDescriptionList *AsylumMetaEngine::getAchievementDescriptionList() const {
+	static const Common::AchievementDescriptionList achievementDescriptionList[] = {
+		{"asylum", Common::STEAM_ACHIEVEMENTS, "284050"},
+
+		ACHIEVEMENT_DESC_TABLE_END_MARKER
+	};
+
+	return achievementDescriptionList;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(ASYLUM)
 	REGISTER_PLUGIN_DYNAMIC(ASYLUM, PLUGIN_TYPE_ENGINE, AsylumMetaEngine);
 #else
diff --git a/engines/asylum/resources/script.cpp b/engines/asylum/resources/script.cpp
index bda990b321..62e54e1805 100644
--- a/engines/asylum/resources/script.cpp
+++ b/engines/asylum/resources/script.cpp
@@ -947,6 +947,8 @@ IMPLEMENT_OPCODE(ChangeScene)
 	getSound()->stopAll();
 	getSound()->stopMusic();
 
+	_vm->unlockAchievement(Common::String::format("ASYLUM_LEVEL_%d", getWorld()->chapter));
+
 	// Switch the scene
 	_vm->switchScene((ResourcePackId)(cmd->param1 + 4));
 
@@ -1328,6 +1330,9 @@ IMPLEMENT_OPCODE(PlaySpeech)
 		return;
 
 	if (cmd->param4 != 2) {
+		if (cmd->param1 == 153 && getWorld()->chapter == kChapter2)
+			_vm->unlockAchievement("ASYLUM_FIND_CHILDREN");
+
 		cmd->param5 = (int32)getSpeech()->playPlayer((ResourceId)cmd->param1);
 
 		if (cmd->param2) {
@@ -1893,6 +1898,10 @@ END_OPCODE
 //////////////////////////////////////////////////////////////////////////
 // Opcode 0x62
 IMPLEMENT_OPCODE(ShowMenu)
+	if (!_vm->isGameFlagSet(kGameFlag3931)) {
+		_vm->unlockAchievement("ASYLUM_LEVEL_13");
+		_vm->setGameFlag(kGameFlag3931);
+	}
 	_vm->menu()->show();
 END_OPCODE
 
diff --git a/engines/asylum/shared.h b/engines/asylum/shared.h
index 69afd04e37..9c26d6ae71 100644
--- a/engines/asylum/shared.h
+++ b/engines/asylum/shared.h
@@ -34,8 +34,12 @@ enum GameFlag {
 	kGameFlag4                    = 4,
 	kGameFlag12                   = 12,
 	kGameFlag52                   = 52,
+	kGameFlag86                   = 86,
+	kGameFlag87                   = 87,
+	kGameFlag88                   = 88,
 	kGameFlag114                  = 114,
 	kGameFlag115                  = 115,
+	kGameFlag128                  = 128,
 	kGameFlag169                  = 169,
 	kGameFlagScriptProcessing     = 183,
 	kGameFlag186                  = 186,
@@ -81,6 +85,8 @@ enum GameFlag {
 	kGameFlag281                  = 281,
 	kGameFlag282                  = 282,
 	kGameFlag283                  = 283,
+	kGameFlag284                  = 284,
+	kGameFlag289                  = 289,
 	kGameFlag319                  = 319,
 	kGameFlag320                  = 320,
 	kGameFlag321                  = 321,
@@ -227,6 +233,7 @@ enum GameFlag {
 	kGameFlag880                  = 880,
 	kGameFlag881                  = 881,
 	kGameFlag897                  = 897,
+	kGameFlag899                  = 899,
 	kGameFlagFinishGame           = 901,
 	kGameFlag925                  = 925,
 	kGameFlag937                  = 937,
@@ -254,7 +261,20 @@ enum GameFlag {
 	kGameFlag1122                 = 1122,
 	kGameFlag1131                 = 1131,
 	kGameFlag1137                 = 1137,
-	kGameFlag1144                 = 1144
+	kGameFlag1144                 = 1144,
+	kGameFlag3189                 = 3189,
+	kGameFlag3351                 = 3351,
+	kGameFlag3386                 = 3386,
+	kGameFlag3387                 = 3387,
+	kGameFlag3388                 = 3388,
+	kGameFlag3389                 = 3389,
+	kGameFlag3754                 = 3754,
+	kGameFlag3755                 = 3755,
+	kGameFlag3810                 = 3810,
+	kGameFlag3823                 = 3823,
+	kGameFlag3842                 = 3842,
+	kGameFlag3843                 = 3843,
+	kGameFlag3931                 = 3931
 };
 
 enum ChapterIndex {


Commit: 4506b1d48c453f534c12a1a784243489f02038bf
    https://github.com/scummvm/scummvm/commit/4506b1d48c453f534c12a1a784243489f02038bf
Author: alxpnv (alxpnv22 at yahoo.com)
Date: 2021-08-16T15:06:21+03:00

Commit Message:
ACHIEVEMENTS: add Sanitarium support

Changed paths:
  A devtools/create_achievements/gen/steam-284050.ini
    devtools/create_achievements/create_achievements.sh


diff --git a/devtools/create_achievements/create_achievements.sh b/devtools/create_achievements/create_achievements.sh
index 8f187e26da..7a98e6d4a6 100644
--- a/devtools/create_achievements/create_achievements.sh
+++ b/devtools/create_achievements/create_achievements.sh
@@ -132,6 +132,9 @@ add_steam 405780
 add_steam 574420
 add_steam 1064660
 
+#ASYLUM games:
+add_steam 284050
+
 #TODO: check for 7zip, since it produces smaller files
 
 touch --date="2000-01-01 00:00:00" gen/* static/*
diff --git a/devtools/create_achievements/gen/steam-284050.ini b/devtools/create_achievements/gen/steam-284050.ini
new file mode 100644
index 0000000000..f9a99a958d
--- /dev/null
+++ b/devtools/create_achievements/gen/steam-284050.ini
@@ -0,0 +1,61 @@
+[achievements:en]
+item_0_id=ASYLUM_LEVEL_1
+item_0_title=Exhaustion
+item_0_comment=Finish Level 1
+item_1_id=ASYLUM_LEVEL_2
+item_1_title=Fever
+item_1_comment=Finish Level 2
+item_2_id=ASYLUM_LEVEL_3
+item_2_title=Headache
+item_2_comment=Finish Level 3
+item_3_id=ASYLUM_LEVEL_4
+item_3_title=Migraine
+item_3_comment=Finish Level 4
+item_4_id=ASYLUM_LEVEL_5
+item_4_title=Vertigo
+item_4_comment=Finish Level 5
+item_5_id=ASYLUM_LEVEL_6
+item_5_title=Blackout
+item_5_comment=Finish Level 6
+item_6_id=ASYLUM_LEVEL_7
+item_6_title=Hallucination
+item_6_comment=Finish Level 7
+item_7_id=ASYLUM_LEVEL_8
+item_7_title=Major Depression
+item_7_comment=Finish Level 8
+item_8_id=ASYLUM_LEVEL_9
+item_8_title=Behavior Disorder
+item_8_comment=Finish Level 9
+item_9_id=ASYLUM_LEVEL_10
+item_9_title=Senility
+item_9_comment=Finish Level 10
+item_10_id=ASYLUM_LEVEL_11
+item_10_title=Schizophrenia
+item_10_comment=Finish Level 11
+item_11_id=ASYLUM_LEVEL_12
+item_11_title=Madness
+item_11_comment=Finish level 12
+item_12_id=ASYLUM_LEVEL_13
+item_12_title=Insanity
+item_12_comment=Finish level 13
+item_13_id=ASYLUM_FIND_CHILDREN
+item_13_title=Limbo
+item_13_comment=Find the children in the wood
+item_14_id=ASYLUM_HIDE_AND_SEEK
+item_14_title=Hide and seek
+item_14_comment=Win "Hide and seek"
+item_15_id=ASYLUM_DANCE
+item_15_title=Dance, dance crazy
+item_15_comment=Make dancing three friends
+item_16_id=ASYLUM_PASSWORD
+item_16_title=Redemption
+item_16_comment=Find the sentence
+item_17_id=ASYLUM_MELODY
+item_17_title=Remember you
+item_17_comment=Play the good melody for the first time
+item_18_id=ASYLUM_SOCIAL
+item_18_title=You are not alone
+item_18_comment=Speak with everyone
+item_19_id=ASYLUM_SORT
+item_19_title=From life to death
+item_19_comment=Sort them




More information about the Scummvm-git-logs mailing list