summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVittorio Romeo <vittorio.romeo@outlook.com>2021-10-27 22:43:57 +0100
committerVittorio Romeo <vittorio.romeo@outlook.com>2021-10-27 22:43:57 +0100
commit54c83e59fa22fd90a1c9db85975eb3348647b30d (patch)
treefe90857956873c026410ed7adf29584021586691
parent8eaf89e2b292a55097ad454c0515fa29b5c863bc (diff)
Add hypercube god achievement to steam hardcoded achievements
-rw-r--r--src/SSVOpenHexagon/Core/Steam.cpp120
1 files changed, 69 insertions, 51 deletions
diff --git a/src/SSVOpenHexagon/Core/Steam.cpp b/src/SSVOpenHexagon/Core/Steam.cpp
index 3fb5a140..ba490a5b 100644
--- a/src/SSVOpenHexagon/Core/Steam.cpp
+++ b/src/SSVOpenHexagon/Core/Steam.cpp
@@ -104,6 +104,7 @@ private:
bool update_hardcoded_achievement_cube_master();
bool update_hardcoded_achievement_hypercube_master();
bool update_hardcoded_achievement_cube_god();
+ bool update_hardcoded_achievement_hypercube_god();
void load_workshop_data();
@@ -139,6 +140,7 @@ public:
bool set_and_store_stat(std::string_view name, int data);
[[nodiscard]] bool get_achievement(bool* out, std::string_view name);
[[nodiscard]] bool get_stat(int* out, std::string_view name);
+ [[nodiscard]] std::optional<bool> is_achievement_unlocked(const char* name);
bool update_hardcoded_achievements();
@@ -429,31 +431,30 @@ bool steam_manager::steam_manager_impl::set_and_store_stat(
return false;
}
-bool steam_manager::steam_manager_impl::
- update_hardcoded_achievement_cube_master()
+[[nodiscard]] std::optional<bool>
+steam_manager::steam_manager_impl::is_achievement_unlocked(const char* name)
{
- if(!_initialized)
+ bool res{false};
+ const bool rc = get_achievement(&res, name);
+
+ if(!rc)
{
- return false;
+ return std::nullopt;
}
- if(!_got_stats)
+ return res;
+}
+
+bool steam_manager::steam_manager_impl::
+ update_hardcoded_achievement_cube_master()
+{
+ if(!_initialized || !_got_stats)
{
return false;
}
const auto unlocked = [this](const char* name) -> int
- {
- bool res{false};
- const bool rc = get_achievement(&res, name);
-
- if(!rc)
- {
- return 0;
- }
-
- return res ? 1 : 0;
- };
+ { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; };
// "Cube Master"
{
@@ -491,28 +492,13 @@ bool steam_manager::steam_manager_impl::
bool steam_manager::steam_manager_impl::
update_hardcoded_achievement_hypercube_master()
{
- if(!_initialized)
- {
- return false;
- }
-
- if(!_got_stats)
+ if(!_initialized || !_got_stats)
{
return false;
}
const auto unlocked = [this](const char* name) -> int
- {
- bool res{false};
- const bool rc = get_achievement(&res, name);
-
- if(!rc)
- {
- return 0;
- }
-
- return res ? 1 : 0;
- };
+ { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; };
// "Hypercube Master"
{
@@ -547,31 +533,15 @@ bool steam_manager::steam_manager_impl::
return true;
}
-
bool steam_manager::steam_manager_impl::update_hardcoded_achievement_cube_god()
{
- if(!_initialized)
- {
- return false;
- }
-
- if(!_got_stats)
+ if(!_initialized || !_got_stats)
{
return false;
}
const auto unlocked = [this](const char* name) -> int
- {
- bool res{false};
- const bool rc = get_achievement(&res, name);
-
- if(!rc)
- {
- return 0;
- }
-
- return res ? 1 : 0;
- };
+ { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; };
// "Cube God"
{
@@ -605,6 +575,49 @@ bool steam_manager::steam_manager_impl::update_hardcoded_achievement_cube_god()
return true;
}
+bool steam_manager::steam_manager_impl::
+ update_hardcoded_achievement_hypercube_god()
+{
+ if(!_initialized || !_got_stats)
+ {
+ return false;
+ }
+
+ const auto unlocked = [this](const char* name) -> int
+ { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; };
+
+ // "Hypercube Master"
+ {
+ int stat;
+ const bool rc = get_stat(&stat, "s3_packprogress_hypercubegod");
+
+ if(!rc)
+ {
+ return false;
+ }
+
+ const int acc = unlocked("a38_disco_hard") + //
+ unlocked("a39_acceleradiant_hard") + //
+ unlocked("a40_gforce_hard") + //
+ unlocked("a41_incongruence_hard") + //
+ unlocked("a42_slither_hard") + //
+ unlocked("a43_polyhedrug_hard") + //
+ unlocked("a44_reppaws_hard") + //
+ unlocked("a45_centrifugalforce_hard") + //
+ unlocked("a46_massacre_hard");
+
+ if(acc > stat)
+ {
+ if(!set_and_store_stat("s3_packprogress_hypercubegod", acc))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
bool steam_manager::steam_manager_impl::update_hardcoded_achievements()
{
bool success = true;
@@ -624,6 +637,11 @@ bool steam_manager::steam_manager_impl::update_hardcoded_achievements()
success = false;
}
+ if(!update_hardcoded_achievement_hypercube_god())
+ {
+ success = false;
+ }
+
return success;
}