[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