Lua set level secrets (#862)

* Set Secrets for level
* Set NumberOfSecrets to TotalNumberOfSecrets
* Secrets for Level Display
* Get LevelSecrets with BitSet Count
* Change Short to Int
This commit is contained in:
Leif Melles 2022-11-23 13:31:32 +01:00 committed by GitHub
parent 53ce6192b9
commit 84a21c776b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 38 additions and 9 deletions

View file

@ -93,7 +93,8 @@ local strings =
save_game = { "Save Game" }, save_game = { "Save Game" },
savegame_timestamp = { "%02d Days %02d:%02d:%02d" }, savegame_timestamp = { "%02d Days %02d:%02d:%02d" },
screen_resolution = { "Screen Resolution" }, 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" }, select_level = { "Select Level" },
separate = { "Separate" }, separate = { "Separate" },
sfx_volume = { "SFX Volume" }, sfx_volume = { "SFX Volume" },

View file

@ -475,12 +475,22 @@ namespace TEN::Renderer
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_MEDIPACKS), PRINTSTRING_COLOR_WHITE, SF()); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_MEDIPACKS), PRINTSTRING_COLOR_WHITE, SF());
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Secrets found // Secrets found in Level
if (g_GameFlow->NumberOfSecrets > 0) 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(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(); DrawAllStrings();

View file

@ -16,7 +16,7 @@ public:
int SelectedLevelForNewGame{ 0 }; int SelectedLevelForNewGame{ 0 };
int SelectedSaveGame{ 0 }; int SelectedSaveGame{ 0 };
bool EnableLoadSave{ true }; bool EnableLoadSave{ true };
int NumberOfSecrets{ 0 }; int TotalNumberOfSecrets{ 0 };
std::string TitleScreenImagePath{}; std::string TitleScreenImagePath{};
TITLE_TYPE TitleType{ TITLE_TYPE::FLYBY }; TITLE_TYPE TitleType{ TITLE_TYPE::FLYBY };

View file

@ -43,4 +43,5 @@ public:
virtual short GetFogMinDistance() const = 0; virtual short GetFogMinDistance() const = 0;
virtual short GetFogMaxDistance() const = 0; virtual short GetFogMaxDistance() const = 0;
virtual short GetFarView() const = 0; virtual short GetFarView() const = 0;
virtual int GetSecrets() const = 0;
}; };

View file

@ -127,7 +127,8 @@
#define STRING_DISTANCE_TRAVELLED "distance_travelled" #define STRING_DISTANCE_TRAVELLED "distance_travelled"
#define STRING_USED_MEDIPACKS "used_medipacks" #define STRING_USED_MEDIPACKS "used_medipacks"
#define STRING_AMMO_USED "ammo_used" #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_EMPTY "waterskin_small_empty"
#define STRING_WATERSKIN_SMALL_1L "waterskin_small_1l" #define STRING_WATERSKIN_SMALL_1L "waterskin_small_1l"
#define STRING_WATERSKIN_SMALL_2L "waterskin_small_2l" #define STRING_WATERSKIN_SMALL_2L "waterskin_small_2l"

View file

@ -229,7 +229,7 @@ void FlowHandler::SetTitleScreenImagePath(std::string const& path)
void FlowHandler::SetTotalSecretCount(int secretsNumber) void FlowHandler::SetTotalSecretCount(int secretsNumber)
{ {
NumberOfSecrets = secretsNumber; TotalNumberOfSecrets = secretsNumber;
} }
void FlowHandler::LoadFlowScript() void FlowHandler::LoadFlowScript()

View file

@ -118,7 +118,11 @@ e.g. `myLevel.laraType = LaraType.Divesuit`
/// (table of @{Flow.InventoryItem}s) table of inventory object overrides /// (table of @{Flow.InventoryItem}s) table of inventory object overrides
//@mem objects //@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); return float(LevelFarView);
} }
void Level::SetSecrets(int secrets)
{
LevelSecrets = secrets;
}
int Level::GetSecrets() const
{
return LevelSecrets;
}

View file

@ -38,6 +38,7 @@ struct Level : public ScriptInterfaceLevel
int LevelFarView{ 0 }; int LevelFarView{ 0 };
bool UnlimitedAir{ false }; bool UnlimitedAir{ false };
std::vector<InventoryItem> InventoryObjects; std::vector<InventoryItem> InventoryObjects;
int LevelSecrets{ 0 };
RGBAColor8Byte GetFogColor() const override; RGBAColor8Byte GetFogColor() const override;
bool GetFogEnabled() const override; bool GetFogEnabled() const override;
@ -55,4 +56,6 @@ struct Level : public ScriptInterfaceLevel
short GetFogMinDistance() const override; short GetFogMinDistance() const override;
short GetFogMaxDistance() const override; short GetFogMaxDistance() const override;
short GetFarView() const override; short GetFarView() const override;
void SetSecrets(short secrets);
int GetSecrets() const override;
}; };