diff --git a/Scripts/Strings.lua b/Scripts/Strings.lua index 7c2a713ec..78f1bc822 100644 --- a/Scripts/Strings.lua +++ b/Scripts/Strings.lua @@ -93,7 +93,8 @@ local strings = save_game = { "Save Game" }, savegame_timestamp = { "%02d Days %02d:%02d:%02d" }, screen_resolution = { "Screen Resolution" }, - secrets_found = { "Secrets Found" }, + level_secrets_found = { "Secrets Found in Level" }, + total_secrets_found = { "Secrets Found Total" }, select_level = { "Select Level" }, separate = { "Separate" }, sfx_volume = { "SFX Volume" }, diff --git a/TombEngine/Renderer/Renderer11DrawMenu.cpp b/TombEngine/Renderer/Renderer11DrawMenu.cpp index fbc18cdf4..1032c9dd7 100644 --- a/TombEngine/Renderer/Renderer11DrawMenu.cpp +++ b/TombEngine/Renderer/Renderer11DrawMenu.cpp @@ -475,12 +475,22 @@ namespace TEN::Renderer AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_MEDIPACKS), PRINTSTRING_COLOR_WHITE, SF()); GetNextLinePosition(&y); - // Secrets found - if (g_GameFlow->NumberOfSecrets > 0) + // Secrets found in Level + if (g_GameFlow->GetLevel(CurrentLevel)->GetSecrets() > 0) { - sprintf(buffer, "%d / %d", Statistics.Game.Secrets, g_GameFlow->NumberOfSecrets); + std::bitset<32> LevelSecretBitSet(Statistics.Level.Secrets); + sprintf(buffer, "%d / %d", LevelSecretBitSet.count(), g_GameFlow->GetLevel(CurrentLevel)->GetSecrets()); AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF()); - AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SECRETS_FOUND), PRINTSTRING_COLOR_WHITE, SF()); + AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_LEVEL_SECRETS_FOUND), PRINTSTRING_COLOR_WHITE, SF()); + GetNextLinePosition(&y); + } + + // Secrets found total + if (g_GameFlow->TotalNumberOfSecrets > 0) + { + sprintf(buffer, "%d / %d", Statistics.Game.Secrets, g_GameFlow->TotalNumberOfSecrets); + AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF()); + AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_TOTAL_SECRETS_FOUND), PRINTSTRING_COLOR_WHITE, SF()); } DrawAllStrings(); diff --git a/TombEngine/Scripting/Include/Flow/ScriptInterfaceFlowHandler.h b/TombEngine/Scripting/Include/Flow/ScriptInterfaceFlowHandler.h index 17afa4af1..0ea2ac7bc 100644 --- a/TombEngine/Scripting/Include/Flow/ScriptInterfaceFlowHandler.h +++ b/TombEngine/Scripting/Include/Flow/ScriptInterfaceFlowHandler.h @@ -16,7 +16,7 @@ public: int SelectedLevelForNewGame{ 0 }; int SelectedSaveGame{ 0 }; bool EnableLoadSave{ true }; - int NumberOfSecrets{ 0 }; + int TotalNumberOfSecrets{ 0 }; std::string TitleScreenImagePath{}; TITLE_TYPE TitleType{ TITLE_TYPE::FLYBY }; diff --git a/TombEngine/Scripting/Include/ScriptInterfaceLevel.h b/TombEngine/Scripting/Include/ScriptInterfaceLevel.h index ed6c4ce45..fa82a8c85 100644 --- a/TombEngine/Scripting/Include/ScriptInterfaceLevel.h +++ b/TombEngine/Scripting/Include/ScriptInterfaceLevel.h @@ -43,4 +43,5 @@ public: virtual short GetFogMinDistance() const = 0; virtual short GetFogMaxDistance() const = 0; virtual short GetFarView() const = 0; + virtual int GetSecrets() const = 0; }; diff --git a/TombEngine/Scripting/Internal/LanguageScript.h b/TombEngine/Scripting/Internal/LanguageScript.h index edc897bed..40405e426 100644 --- a/TombEngine/Scripting/Internal/LanguageScript.h +++ b/TombEngine/Scripting/Internal/LanguageScript.h @@ -127,7 +127,8 @@ #define STRING_DISTANCE_TRAVELLED "distance_travelled" #define STRING_USED_MEDIPACKS "used_medipacks" #define STRING_AMMO_USED "ammo_used" -#define STRING_SECRETS_FOUND "secrets_found" +#define STRING_TOTAL_SECRETS_FOUND "total_secrets_found" +#define STRING_LEVEL_SECRETS_FOUND "level_secrets_found" #define STRING_WATERSKIN_SMALL_EMPTY "waterskin_small_empty" #define STRING_WATERSKIN_SMALL_1L "waterskin_small_1l" #define STRING_WATERSKIN_SMALL_2L "waterskin_small_2l" diff --git a/TombEngine/Scripting/Internal/TEN/Flow/FlowHandler.cpp b/TombEngine/Scripting/Internal/TEN/Flow/FlowHandler.cpp index e6d164078..3658283b1 100644 --- a/TombEngine/Scripting/Internal/TEN/Flow/FlowHandler.cpp +++ b/TombEngine/Scripting/Internal/TEN/Flow/FlowHandler.cpp @@ -229,7 +229,7 @@ void FlowHandler::SetTitleScreenImagePath(std::string const& path) void FlowHandler::SetTotalSecretCount(int secretsNumber) { - NumberOfSecrets = secretsNumber; + TotalNumberOfSecrets = secretsNumber; } void FlowHandler::LoadFlowScript() diff --git a/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.cpp b/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.cpp index 9bbcdbf4a..834f6016f 100644 --- a/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.cpp +++ b/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.cpp @@ -118,7 +118,11 @@ e.g. `myLevel.laraType = LaraType.Divesuit` /// (table of @{Flow.InventoryItem}s) table of inventory object overrides //@mem objects - "objects", &Level::InventoryObjects + "objects", &Level::InventoryObjects, + +/// (short) Set Secrets for Level +//@mem secrets + "secrets", sol::property(&Level::SetSecrets) ); } @@ -256,3 +260,12 @@ short Level::GetFarView() const return float(LevelFarView); } +void Level::SetSecrets(int secrets) +{ + LevelSecrets = secrets; +} + +int Level::GetSecrets() const +{ + return LevelSecrets; +} diff --git a/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.h b/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.h index d0a4717b4..56ee6e714 100644 --- a/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.h +++ b/TombEngine/Scripting/Internal/TEN/Flow/Level/FlowLevel.h @@ -38,6 +38,7 @@ struct Level : public ScriptInterfaceLevel int LevelFarView{ 0 }; bool UnlimitedAir{ false }; std::vector InventoryObjects; + int LevelSecrets{ 0 }; RGBAColor8Byte GetFogColor() const override; bool GetFogEnabled() const override; @@ -55,4 +56,6 @@ struct Level : public ScriptInterfaceLevel short GetFogMinDistance() const override; short GetFogMaxDistance() const override; short GetFarView() const override; + void SetSecrets(short secrets); + int GetSecrets() const override; };