Make monkey swing auto jump a player setting; Lua formatting

This commit is contained in:
Sezz 2024-06-06 11:42:54 +10:00
parent d33d1ced19
commit 6fa494b093
17 changed files with 114 additions and 92 deletions

View file

@ -11,7 +11,6 @@ local anims = Flow.Animations.new()
anims.crawlExtended = true anims.crawlExtended = true
anims.crouchRoll = true anims.crouchRoll = true
anims.crawlspaceSwandive = true anims.crawlspaceSwandive = true
anims.monkeyAutoJump = false
anims.overhangClimb = false anims.overhangClimb = false
anims.slideExtended = false anims.slideExtended = false
anims.sprintJump = false anims.sprintJump = false

View file

@ -51,7 +51,8 @@ local strings =
ammo_used = { "Ammo Used" }, ammo_used = { "Ammo Used" },
antialiasing = { "Antialiasing" }, antialiasing = { "Antialiasing" },
apply = { "Apply" }, apply = { "Apply" },
automatic_targeting = { "Automatic Targeting" }, auto_monkey_swing_jump = { "Auto Monkey Jump" },
auto_targeting = { "Auto Targeting" },
back = { "Back" }, back = { "Back" },
cancel = { "Cancel" }, cancel = { "Cancel" },
caustics = { "Underwater Caustics" }, caustics = { "Underwater Caustics" },

View file

@ -1427,7 +1427,7 @@ std::optional<VaultTestResult> TestLaraLadderMount(ItemInfo* item, CollisionInfo
return std::nullopt; return std::nullopt;
} }
std::optional<VaultTestResult> TestLaraMonkeyAutoJump(ItemInfo* item, CollisionInfo* coll) std::optional<VaultTestResult> TestLaraAutoMonkeySwingJump(ItemInfo* item, CollisionInfo* coll)
{ {
auto* lara = GetLaraInfo(item); auto* lara = GetLaraInfo(item);
@ -1530,8 +1530,8 @@ std::optional<VaultTestResult> TestLaraVault(ItemInfo* item, CollisionInfo* coll
// In this case, they fail due to a reliance on ShiftItem(). @Sezz 2021.02.05 // In this case, they fail due to a reliance on ShiftItem(). @Sezz 2021.02.05
// Auto jump to monkey swing. // Auto jump to monkey swing.
vaultResult = TestLaraMonkeyAutoJump(item, coll); vaultResult = TestLaraAutoMonkeySwingJump(item, coll);
if (vaultResult.has_value() && g_GameFlow->HasMonkeyAutoJump()) if (vaultResult.has_value() && g_Configuration.EnableAutoMonkeySwingJump)
{ {
vaultResult->TargetState = LS_AUTO_JUMP; vaultResult->TargetState = LS_AUTO_JUMP;
if (!HasStateDispatch(item, vaultResult->TargetState)) if (!HasStateDispatch(item, vaultResult->TargetState))

View file

@ -56,7 +56,7 @@ std::optional<VaultTestResult> TestLaraVault3StepsToCrouch(ItemInfo* item, Colli
std::optional<VaultTestResult> TestLaraLedgeAutoJump(ItemInfo* item, CollisionInfo* coll); std::optional<VaultTestResult> TestLaraLedgeAutoJump(ItemInfo* item, CollisionInfo* coll);
std::optional<VaultTestResult> TestLaraLadderAutoJump(ItemInfo* item, CollisionInfo* coll); std::optional<VaultTestResult> TestLaraLadderAutoJump(ItemInfo* item, CollisionInfo* coll);
std::optional<VaultTestResult> TestLaraLadderMount(ItemInfo* item, CollisionInfo* coll); std::optional<VaultTestResult> TestLaraLadderMount(ItemInfo* item, CollisionInfo* coll);
std::optional<VaultTestResult> TestLaraMonkeyAutoJump(ItemInfo* item, CollisionInfo* coll); std::optional<VaultTestResult> TestLaraAutoMonkeySwingJump(ItemInfo* item, CollisionInfo* coll);
std::optional<VaultTestResult> TestLaraVault(ItemInfo* item, CollisionInfo* coll); std::optional<VaultTestResult> TestLaraVault(ItemInfo* item, CollisionInfo* coll);
bool TestAndDoLaraLadderClimb(ItemInfo* item, CollisionInfo* coll); bool TestAndDoLaraLadderClimb(ItemInfo* item, CollisionInfo* coll);

View file

@ -886,7 +886,9 @@ namespace TEN::Gui
Reverb, Reverb,
MusicVolume, MusicVolume,
SfxVolume, SfxVolume,
Subtitles, Subtitles,
AutoMonkeySwingJump,
AutoTargeting, AutoTargeting,
TargetHighlighter, TargetHighlighter,
ToggleRumble, ToggleRumble,
@ -895,12 +897,12 @@ namespace TEN::Gui
MouseSmoothing, MouseSmoothing,
Apply, Apply,
Cancel Cancel,
Count
}; };
static const auto numOtherSettingsOptions = 11; OptionCount = (int)OtherSettingsOption::Count - 1;
OptionCount = numOtherSettingsOptions;
if (GuiIsDeselected()) if (GuiIsDeselected())
{ {
@ -923,6 +925,11 @@ namespace TEN::Gui
CurrentSettings.Configuration.EnableReverb = !CurrentSettings.Configuration.EnableReverb; CurrentSettings.Configuration.EnableReverb = !CurrentSettings.Configuration.EnableReverb;
break; break;
case OtherSettingsOption::AutoMonkeySwingJump:
SoundEffect(SFX_TR4_MENU_CHOOSE, nullptr, SoundEnvironment::Always);
CurrentSettings.Configuration.EnableAutoMonkeySwingJump = !CurrentSettings.Configuration.EnableAutoMonkeySwingJump;
break;
case OtherSettingsOption::Subtitles: case OtherSettingsOption::Subtitles:
SoundEffect(SFX_TR4_MENU_CHOOSE, nullptr, SoundEnvironment::Always); SoundEffect(SFX_TR4_MENU_CHOOSE, nullptr, SoundEnvironment::Always);
CurrentSettings.Configuration.EnableSubtitles = !CurrentSettings.Configuration.EnableSubtitles; CurrentSettings.Configuration.EnableSubtitles = !CurrentSettings.Configuration.EnableSubtitles;

View file

@ -231,42 +231,47 @@ namespace TEN::Renderer
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableSubtitles), PRINTSTRING_COLOR_WHITE, SF(titleOption == 3)); AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableSubtitles), PRINTSTRING_COLOR_WHITE, SF(titleOption == 3));
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Auto monkey swing jump
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_AUTO_MONKEY_SWING_JUMP), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 4));
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableAutoMonkeySwingJump), PRINTSTRING_COLOR_WHITE, SF(titleOption == 4));
GetNextLinePosition(&y);
// Auto targeting // Auto targeting
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_AUTOMATIC_TARGETING), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 4)); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_AUTO_TARGETING), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 5));
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableAutoTargeting), PRINTSTRING_COLOR_WHITE, SF(titleOption == 4)); AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableAutoTargeting), PRINTSTRING_COLOR_WHITE, SF(titleOption == 5));
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Target highlighter // Target highlighter
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_TARGET_HIGHLIGHTER), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 5)); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_TARGET_HIGHLIGHTER), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 6));
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableTargetHighlighter), PRINTSTRING_COLOR_WHITE, SF(titleOption == 5)); AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableTargetHighlighter), PRINTSTRING_COLOR_WHITE, SF(titleOption == 6));
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Vibration // Vibration
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_RUMBLE), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 6)); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_RUMBLE), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 7));
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableRumble), PRINTSTRING_COLOR_WHITE, SF(titleOption == 6)); AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableRumble), PRINTSTRING_COLOR_WHITE, SF(titleOption == 7));
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Thumbstick camera // Thumbstick camera
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_THUMBSTICK_CAMERA), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 7)); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_THUMBSTICK_CAMERA), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 8));
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableThumbstickCamera), PRINTSTRING_COLOR_WHITE, SF(titleOption == 7)); AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().Configuration.EnableThumbstickCamera), PRINTSTRING_COLOR_WHITE, SF(titleOption == 8));
GetNextBlockPosition(&y); GetNextBlockPosition(&y);
// Mouse sensitivity // Mouse sensitivity
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_MOUSE_SENSITIVITY), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 8)); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_MOUSE_SENSITIVITY), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 9));
AddString(MenuRightSideEntry, y, std::to_string(g_Gui.GetCurrentSettings().Configuration.MouseSensitivity).c_str(), PRINTSTRING_COLOR_WHITE, SF(titleOption == 8)); AddString(MenuRightSideEntry, y, std::to_string(g_Gui.GetCurrentSettings().Configuration.MouseSensitivity).c_str(), PRINTSTRING_COLOR_WHITE, SF(titleOption == 9));
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Mouse smoothing // Mouse smoothing
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_MOUSE_SMOOTHING), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 9)); AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_MOUSE_SMOOTHING), PRINTSTRING_COLOR_ORANGE, SF(titleOption == 10));
AddString(MenuRightSideEntry, y, std::to_string(g_Gui.GetCurrentSettings().Configuration.MouseSmoothing).c_str(), PRINTSTRING_COLOR_WHITE, SF(titleOption == 9)); AddString(MenuRightSideEntry, y, std::to_string(g_Gui.GetCurrentSettings().Configuration.MouseSmoothing).c_str(), PRINTSTRING_COLOR_WHITE, SF(titleOption == 10));
GetNextBlockPosition(&y); GetNextBlockPosition(&y);
// Apply // Apply
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(titleOption == 10)); AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(titleOption == 11));
GetNextLinePosition(&y); GetNextLinePosition(&y);
// Cancel // Cancel
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(titleOption == 11)); AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(titleOption == 12));
break; break;
case Menu::GeneralActions: case Menu::GeneralActions:

View file

@ -39,7 +39,7 @@ public:
virtual bool HasCrawlExtended() const = 0; virtual bool HasCrawlExtended() const = 0;
virtual bool HasCrouchRoll() const = 0; virtual bool HasCrouchRoll() const = 0;
virtual bool HasCrawlspaceDive() const = 0; virtual bool HasCrawlspaceDive() const = 0;
virtual bool HasMonkeyAutoJump() const = 0; virtual bool HasAutoMonkeySwingJump() const = 0;
virtual bool HasSprintJump() const = 0; virtual bool HasSprintJump() const = 0;
virtual bool HasAFKPose() const = 0; virtual bool HasAFKPose() const = 0;
virtual bool HasOverhangClimb() const = 0; virtual bool HasOverhangClimb() const = 0;

View file

@ -80,7 +80,8 @@
#define STRING_SOUND "sound" #define STRING_SOUND "sound"
#define STRING_ENABLE_SOUND "enable_sound" #define STRING_ENABLE_SOUND "enable_sound"
#define STRING_REVERB "reverb" #define STRING_REVERB "reverb"
#define STRING_AUTOMATIC_TARGETING "automatic_targeting" #define STRING_AUTO_MONKEY_SWING_JUMP "auto_monkey_swing_jump"
#define STRING_AUTO_TARGETING "auto_targeting"
#define STRING_TARGET_HIGHLIGHTER "target_highlighter" #define STRING_TARGET_HIGHLIGHTER "target_highlighter"
#define STRING_RUMBLE "rumble" #define STRING_RUMBLE "rumble"
#define STRING_THUMBSTICK_CAMERA "thumbstick_camera" #define STRING_THUMBSTICK_CAMERA "thumbstick_camera"

View file

@ -4,18 +4,18 @@
#include <filesystem> #include <filesystem>
#include "Scripting/Internal/LuaHandler.h" #include "Scripting/Internal/LuaHandler.h"
LuaHandler::LuaHandler(sol::state* lua) : m_lua{ lua } LuaHandler::LuaHandler(sol::state* lua) : _lua{ lua }
{ {
} }
void LuaHandler::ResetGlobals() void LuaHandler::ResetGlobals()
{ {
auto mt = sol::table{ *m_lua, sol::create }; auto mt = sol::table{ *_lua, sol::create };
m_globals = sol::table{ *m_lua, sol::create }; _globals = sol::table{ *_lua, sol::create };
mt.set(sol::meta_function::new_index, m_globals); mt.set(sol::meta_function::new_index, _globals);
mt.set(sol::meta_function::index, m_globals); mt.set(sol::meta_function::index, _globals);
m_lua->set(sol::metatable_key, mt); _lua->set(sol::metatable_key, mt);
} }
void LuaHandler::ExecuteScript(const std::string& luaFilename, bool isOptional) void LuaHandler::ExecuteScript(const std::string& luaFilename, bool isOptional)
@ -23,7 +23,7 @@ void LuaHandler::ExecuteScript(const std::string& luaFilename, bool isOptional)
if (isOptional && !std::filesystem::is_regular_file(luaFilename)) if (isOptional && !std::filesystem::is_regular_file(luaFilename))
return; return;
auto result = m_lua->safe_script_file(luaFilename, sol::script_pass_on_error); auto result = _lua->safe_script_file(luaFilename, sol::script_pass_on_error);
if (!result.valid()) if (!result.valid())
{ {
sol::error error = result; sol::error error = result;
@ -33,7 +33,7 @@ void LuaHandler::ExecuteScript(const std::string& luaFilename, bool isOptional)
void LuaHandler::ExecuteString(const std::string& command) void LuaHandler::ExecuteString(const std::string& command)
{ {
auto result = m_lua->safe_script(command, sol::environment(m_lua->lua_state(), sol::create, m_lua->globals()), sol::script_pass_on_error); auto result = _lua->safe_script(command, sol::environment(_lua->lua_state(), sol::create, _lua->globals()), sol::script_pass_on_error);
if (!result.valid()) if (!result.valid())
{ {
sol::error error = result; sol::error error = result;

View file

@ -6,8 +6,8 @@
class LuaHandler class LuaHandler
{ {
protected: protected:
sol::state* m_lua; sol::state* _lua;
sol::table m_globals; sol::table _globals;
public: public:
LuaHandler(sol::state* lua); LuaHandler(sol::state* lua);
@ -22,17 +22,17 @@ public:
sol::state* GetState() sol::state* GetState()
{ {
return m_lua; return _lua;
}; };
template <typename T>void MakeReadOnlyTable(sol::table parent, const std::string& tableName, const T& container) template <typename T>void MakeReadOnlyTable(sol::table parent, const std::string& tableName, const T& container)
{ {
// Put all data into metatable. // Put all data into metatable.
auto metatable = tableName + "Meta"; auto metatable = tableName + "Meta";
m_lua->set(metatable, sol::as_table(container)); _lua->set(metatable, sol::as_table(container));
auto mtmt = tableName + "MetaMeta"; auto mtmt = tableName + "MetaMeta";
auto mtmtTable = m_lua->create_named_table(mtmt); auto mtmtTable = _lua->create_named_table(mtmt);
// Make metatable's metatable's __index fail an assert to generate warning/error when trying to use missing variable. // Make metatable's metatable's __index fail an assert to generate warning/error when trying to use missing variable.
auto lam = [tableName](sol::table tab, std::string const& key) auto lam = [tableName](sol::table tab, std::string const& key)
@ -41,29 +41,29 @@ public:
}; };
mtmtTable[sol::meta_method::index] = lam; mtmtTable[sol::meta_method::index] = lam;
m_lua->safe_script("setmetatable(" + metatable + ", " + mtmt + ")"); _lua->safe_script("setmetatable(" + metatable + ", " + mtmt + ")");
// Make metatable's __index refer to itself so that requests to main table will go through to metatable // Make metatable's __index refer to itself so that requests to main table will go through to metatable
// (and thus container's members). // (and thus container's members).
m_lua->safe_script(metatable + ".__index = " + metatable); _lua->safe_script(metatable + ".__index = " + metatable);
m_lua->safe_script(metatable + ".__type = \"readonly\""); _lua->safe_script(metatable + ".__type = \"readonly\"");
// Don't allow table to have new elements put into it. // Don't allow table to have new elements put into it.
m_lua->safe_script(metatable + ".__newindex = function() error('" + tableName + " is read-only') end"); _lua->safe_script(metatable + ".__newindex = function() error('" + tableName + " is read-only') end");
// Protect metatable. // Protect metatable.
m_lua->safe_script(metatable + ".__metatable = 'metatable is protected'"); _lua->safe_script(metatable + ".__metatable = 'metatable is protected'");
auto tab = m_lua->create_named_table(tableName); auto tab = _lua->create_named_table(tableName);
m_lua->safe_script("setmetatable(" + tableName + ", " + metatable + ")"); _lua->safe_script("setmetatable(" + tableName + ", " + metatable + ")");
// Point initial metatable variable away from its contents. This is just for cleanliness. // Point initial metatable variable away from its contents. This is just for cleanliness.
parent.set(tableName, tab); parent.set(tableName, tab);
m_lua->safe_script(tableName + " = nil"); _lua->safe_script(tableName + " = nil");
m_lua->safe_script(metatable + " = nil"); _lua->safe_script(metatable + " = nil");
m_lua->safe_script(mtmt + " = nil"); _lua->safe_script(mtmt + " = nil");
} }
}; };

View file

@ -15,11 +15,12 @@ void Animations::Register(sol::table& parent)
"crawlExtended", &Animations::HasCrawlExtended, "crawlExtended", &Animations::HasCrawlExtended,
"crouchRoll", &Animations::HasCrouchRoll, "crouchRoll", &Animations::HasCrouchRoll,
"crawlspaceSwandive", &Animations::HasCrawlspaceDive, "crawlspaceSwandive", &Animations::HasCrawlspaceDive,
"monkeyAutoJump", &Animations::HasMonkeyAutoJump,
"overhangClimb", &Animations::HasOverhangClimb, "overhangClimb", &Animations::HasOverhangClimb,
"slideExtended", &Animations::HasSlideExtended, "slideExtended", &Animations::HasSlideExtended,
"sprintJump", &Animations::HasSprintJump, "sprintJump", &Animations::HasSprintJump,
"pose", &Animations::HasPose, "pose", &Animations::HasPose,
"ledgeJumps", &Animations::HasLedgeJumps "ledgeJumps", &Animations::HasLedgeJumps,
);
// NOTE: Removed. Keep for now to maintain compatibility. -- Sezz 2024.06.06
"monkeyAutoJump", & Animations::HasAutoMonkeySwingJump);
} }

View file

@ -13,12 +13,14 @@ struct Animations
bool HasPose; // Crossed arms AFK posing. bool HasPose; // Crossed arms AFK posing.
bool HasSlideExtended; // Extended slope sliding functionality (not ready yet). bool HasSlideExtended; // Extended slope sliding functionality (not ready yet).
bool HasSprintJump; // Sprint jump. bool HasSprintJump; // Sprint jump.
bool HasMonkeyAutoJump; // Auto jump to monkey swing when pressing UP + ACTION. TODO: Make this a player setting.
bool HasCrawlspaceDive; // Dive into crawlspaces. bool HasCrawlspaceDive; // Dive into crawlspaces.
bool HasCrawlExtended; // Extended crawl moveset. bool HasCrawlExtended; // Extended crawl moveset.
bool HasCrouchRoll; // Crouch roll. bool HasCrouchRoll; // Crouch roll.
bool HasOverhangClimb; // Overhang functionality. bool HasOverhangClimb; // Overhang functionality.
bool HasLedgeJumps; // Jump up or back from a ledge. bool HasLedgeJumps; // Jump up or back from a ledge.
// NOTE: Removed. Keep for now to maintain compatibility. -- Sezz 2024.06.06
bool HasAutoMonkeySwingJump;
static void Register(sol::table&); static void Register(sol::table&);
}; };

View file

@ -30,7 +30,7 @@ ScriptInterfaceStringsHandler* g_GameStringsHandler;
ScriptInterfaceFlowHandler* g_GameFlow; ScriptInterfaceFlowHandler* g_GameFlow;
FlowHandler::FlowHandler(sol::state* lua, sol::table& parent) : FlowHandler::FlowHandler(sol::state* lua, sol::table& parent) :
m_handler(lua) _handler(lua)
{ {
/*** gameflow.lua. /*** gameflow.lua.
These functions are called in gameflow.lua, a file loosely equivalent to winroomedit's SCRIPT.DAT. These functions are called in gameflow.lua, a file loosely equivalent to winroomedit's SCRIPT.DAT.
@ -38,7 +38,7 @@ They handle a game's 'metadata'; i.e., things such as level titles, loading scre
ambient tracks. ambient tracks.
@section Flowlua @section Flowlua
*/ */
sol::table tableFlow{ m_handler.GetState()->lua_state(), sol::create }; sol::table tableFlow{ _handler.GetState()->lua_state(), sol::create };
parent.set(ScriptReserved_Flow, tableFlow); parent.set(ScriptReserved_Flow, tableFlow);
/*** /***
@ -265,12 +265,12 @@ Specify which translations in the strings table correspond to which languages.
Settings::Register(tableFlow); Settings::Register(tableFlow);
Fog::Register(tableFlow); Fog::Register(tableFlow);
m_handler.MakeReadOnlyTable(tableFlow, ScriptReserved_WeatherType, WEATHER_TYPES); _handler.MakeReadOnlyTable(tableFlow, ScriptReserved_WeatherType, WEATHER_TYPES);
m_handler.MakeReadOnlyTable(tableFlow, ScriptReserved_LaraType, PLAYER_TYPES); _handler.MakeReadOnlyTable(tableFlow, ScriptReserved_LaraType, PLAYER_TYPES);
m_handler.MakeReadOnlyTable(tableFlow, ScriptReserved_RotationAxis, ROTATION_AXES); _handler.MakeReadOnlyTable(tableFlow, ScriptReserved_RotationAxis, ROTATION_AXES);
m_handler.MakeReadOnlyTable(tableFlow, ScriptReserved_ItemAction, ITEM_MENU_ACTIONS); _handler.MakeReadOnlyTable(tableFlow, ScriptReserved_ItemAction, ITEM_MENU_ACTIONS);
m_handler.MakeReadOnlyTable(tableFlow, ScriptReserved_ErrorMode, ERROR_MODES); _handler.MakeReadOnlyTable(tableFlow, ScriptReserved_ErrorMode, ERROR_MODES);
m_handler.MakeReadOnlyTable(tableFlow, ScriptReserved_GameStatus, GAME_STATUSES); _handler.MakeReadOnlyTable(tableFlow, ScriptReserved_GameStatus, GAME_STATUSES);
} }
FlowHandler::~FlowHandler() FlowHandler::~FlowHandler()
@ -281,35 +281,35 @@ FlowHandler::~FlowHandler()
std::string FlowHandler::GetGameDir() std::string FlowHandler::GetGameDir()
{ {
return m_gameDir; return _gameDir;
} }
void FlowHandler::SetGameDir(const std::string& assetDir) void FlowHandler::SetGameDir(const std::string& assetDir)
{ {
m_gameDir = assetDir; _gameDir = assetDir;
} }
void FlowHandler::SetLanguageNames(sol::as_table_t<std::vector<std::string>>&& src) void FlowHandler::SetLanguageNames(sol::as_table_t<std::vector<std::string>>&& src)
{ {
m_languageNames = std::move(src); _languageNames = std::move(src);
} }
void FlowHandler::SetStrings(sol::nested<std::unordered_map<std::string, std::vector<std::string>>>&& src) void FlowHandler::SetStrings(sol::nested<std::unordered_map<std::string, std::vector<std::string>>>&& src)
{ {
if (m_translationsMap.empty()) if (_translationMap.empty())
{ {
m_translationsMap = std::move(src); _translationMap = std::move(src);
} }
else else
{ {
for (auto& stringPair : src.value()) for (auto& stringPair : src.value())
m_translationsMap.insert_or_assign(stringPair.first, stringPair.second); _translationMap.insert_or_assign(stringPair.first, stringPair.second);
} }
} }
void FlowHandler::SetSettings(Settings const & src) void FlowHandler::SetSettings(Settings const & src)
{ {
m_settings = src; _settings = src;
} }
void FlowHandler::SetAnimations(Animations const& src) void FlowHandler::SetAnimations(Animations const& src)
@ -339,10 +339,10 @@ void FlowHandler::SetTotalSecretCount(int secretsNumber)
void FlowHandler::LoadFlowScript() void FlowHandler::LoadFlowScript()
{ {
m_handler.ExecuteScript(m_gameDir + "Scripts/Gameflow.lua"); _handler.ExecuteScript(_gameDir + "Scripts/Gameflow.lua");
m_handler.ExecuteScript(m_gameDir + "Scripts/SystemStrings.lua", true); _handler.ExecuteScript(_gameDir + "Scripts/SystemStrings.lua", true);
m_handler.ExecuteScript(m_gameDir + "Scripts/Strings.lua", true); _handler.ExecuteScript(_gameDir + "Scripts/Strings.lua", true);
m_handler.ExecuteScript(m_gameDir + "Scripts/Settings.lua", true); _handler.ExecuteScript(_gameDir + "Scripts/Settings.lua", true);
SetScriptErrorMode(GetSettings()->ErrorMode); SetScriptErrorMode(GetSettings()->ErrorMode);
@ -359,19 +359,19 @@ void FlowHandler::LoadFlowScript()
char const * FlowHandler::GetString(const char* id) const char const * FlowHandler::GetString(const char* id) const
{ {
if (!ScriptAssert(m_translationsMap.find(id) != m_translationsMap.end(), std::string{ "Couldn't find string " } + id)) if (!ScriptAssert(_translationMap.find(id) != _translationMap.end(), std::string{ "Couldn't find string " } + id))
{ {
return id; return id;
} }
else else
{ {
return m_translationsMap.at(std::string(id)).at(0).c_str(); return _translationMap.at(std::string(id)).at(0).c_str();
} }
} }
Settings* FlowHandler::GetSettings() Settings* FlowHandler::GetSettings()
{ {
return &m_settings; return &_settings;
} }
Level* FlowHandler::GetLevel(int id) Level* FlowHandler::GetLevel(int id)

View file

@ -1,29 +1,27 @@
#pragma once #pragma once
#include <string_view> #include <string_view>
#include "Scripting/Include/Flow/ScriptInterfaceFlowHandler.h"
#include "Scripting/Include/ScriptInterfaceGame.h"
#include "Scripting/Internal/LanguageScript.h" #include "Scripting/Internal/LanguageScript.h"
#include "Scripting/Internal/LuaHandler.h" #include "Scripting/Internal/LuaHandler.h"
#include "Scripting/Internal/TEN/Logic/LogicHandler.h"
#include "Scripting/Internal/TEN/Color/Color.h" #include "Scripting/Internal/TEN/Color/Color.h"
#include "Scripting/Internal/TEN/Logic/LogicHandler.h"
#include "Scripting/Internal/TEN/Flow/Animations/Animations.h"
#include "Scripting/Internal/TEN/Flow/Level/FlowLevel.h" #include "Scripting/Internal/TEN/Flow/Level/FlowLevel.h"
#include "Scripting/Internal/TEN/Flow/Settings/Settings.h" #include "Scripting/Internal/TEN/Flow/Settings/Settings.h"
#include "Scripting/Internal/TEN/Flow/Animations/Animations.h"
#include "Scripting/Include/ScriptInterfaceGame.h"
#include "Scripting/Include/Flow/ScriptInterfaceFlowHandler.h"
class FlowHandler : public ScriptInterfaceFlowHandler class FlowHandler : public ScriptInterfaceFlowHandler
{ {
private: private:
Settings m_settings; LuaHandler _handler;
Settings _settings = {};
std::string _gameDir = {};
std::unordered_map<std::string, std::vector<std::string>> m_translationsMap; std::map<int, int> _moveableMap = {};
std::vector<std::string> m_languageNames;
std::map<short, short> m_itemsMap; std::unordered_map<std::string, std::vector<std::string>> _translationMap = {};
std::vector<std::string> _languageNames = {};
std::string m_gameDir;
LuaHandler m_handler;
void PrepareInventoryObjects(); void PrepareInventoryObjects();
@ -91,12 +89,13 @@ public:
bool HasCrawlExtended() const override { return Anims.HasCrawlExtended; } bool HasCrawlExtended() const override { return Anims.HasCrawlExtended; }
bool HasCrouchRoll() const override { return Anims.HasCrouchRoll; } bool HasCrouchRoll() const override { return Anims.HasCrouchRoll; }
bool HasCrawlspaceDive() const override { return Anims.HasCrawlspaceDive; } bool HasCrawlspaceDive() const override { return Anims.HasCrawlspaceDive; }
bool HasMonkeyAutoJump() const override { return Anims.HasMonkeyAutoJump; }
bool HasAFKPose() const override { return Anims.HasPose; } bool HasAFKPose() const override { return Anims.HasPose; }
bool HasOverhangClimb() const override { return Anims.HasOverhangClimb; } bool HasOverhangClimb() const override { return Anims.HasOverhangClimb; }
bool HasSlideExtended() const override { return Anims.HasSlideExtended; } bool HasSlideExtended() const override { return Anims.HasSlideExtended; }
bool HasSprintJump() const override { return Anims.HasSprintJump; } bool HasSprintJump() const override { return Anims.HasSprintJump; }
bool HasLedgeJumps() const override { return Anims.HasLedgeJumps; } bool HasLedgeJumps() const override { return Anims.HasLedgeJumps; }
bool DoFlow() override; bool DoFlow() override;
};
// NOTE: Removed. Keep for now to maintain compatibility. -- Sezz 2024.06.06
bool HasAutoMonkeySwingJump() const override { return Anims.HasAutoMonkeySwingJump; }
};

View file

@ -16,7 +16,7 @@ Display strings.
StringsHandler::StringsHandler(sol::state* lua, sol::table& parent) : StringsHandler::StringsHandler(sol::state* lua, sol::table& parent) :
LuaHandler(lua) LuaHandler(lua)
{ {
auto table = sol::table(m_lua->lua_state(), sol::create); auto table = sol::table(_lua->lua_state(), sol::create);
parent.set(ScriptReserved_Strings, table); parent.set(ScriptReserved_Strings, table);
/*** /***

View file

@ -230,6 +230,7 @@ bool SaveConfiguration()
// Set Gameplay keys. // Set Gameplay keys.
if (SetBoolRegKey(gameplayKey, REGKEY_ENABLE_SUBTITLES, g_Configuration.EnableSubtitles) != ERROR_SUCCESS || if (SetBoolRegKey(gameplayKey, REGKEY_ENABLE_SUBTITLES, g_Configuration.EnableSubtitles) != ERROR_SUCCESS ||
SetBoolRegKey(gameplayKey, REGKEY_ENABLE_AUTO_MONKEY_JUMP, g_Configuration.EnableAutoMonkeySwingJump) != ERROR_SUCCESS ||
SetBoolRegKey(gameplayKey, REGKEY_ENABLE_AUTO_TARGETING, g_Configuration.EnableAutoTargeting) != ERROR_SUCCESS || SetBoolRegKey(gameplayKey, REGKEY_ENABLE_AUTO_TARGETING, g_Configuration.EnableAutoTargeting) != ERROR_SUCCESS ||
SetBoolRegKey(gameplayKey, REGKEY_ENABLE_TARGET_HIGHLIGHTER, g_Configuration.EnableTargetHighlighter) != ERROR_SUCCESS || SetBoolRegKey(gameplayKey, REGKEY_ENABLE_TARGET_HIGHLIGHTER, g_Configuration.EnableTargetHighlighter) != ERROR_SUCCESS ||
SetBoolRegKey(gameplayKey, REGKEY_ENABLE_RUMBLE, g_Configuration.EnableRumble) != ERROR_SUCCESS || SetBoolRegKey(gameplayKey, REGKEY_ENABLE_RUMBLE, g_Configuration.EnableRumble) != ERROR_SUCCESS ||
@ -322,6 +323,7 @@ void InitDefaultConfiguration()
g_Configuration.SfxVolume = 100; g_Configuration.SfxVolume = 100;
g_Configuration.EnableSubtitles = true; g_Configuration.EnableSubtitles = true;
g_Configuration.EnableAutoMonkeySwingJump = false;
g_Configuration.EnableAutoTargeting = true; g_Configuration.EnableAutoTargeting = true;
g_Configuration.EnableTargetHighlighter = true; g_Configuration.EnableTargetHighlighter = true;
g_Configuration.EnableRumble = true; g_Configuration.EnableRumble = true;
@ -419,6 +421,7 @@ bool LoadConfiguration()
return false; return false;
} }
bool enableAutoMonkeySwingJump = false;
bool enableSubtitles = true; bool enableSubtitles = true;
bool enableAutoTargeting = true; bool enableAutoTargeting = true;
bool enableTargetHighlighter = true; bool enableTargetHighlighter = true;
@ -426,7 +429,8 @@ bool LoadConfiguration()
bool enableThumbstickCamera = true; bool enableThumbstickCamera = true;
// Load Gameplay keys. // Load Gameplay keys.
if (GetBoolRegKey(gameplayKey, REGKEY_ENABLE_SUBTITLES, &enableSubtitles, true) != ERROR_SUCCESS || if (GetBoolRegKey(gameplayKey, REGKEY_ENABLE_AUTO_MONKEY_JUMP, &enableAutoMonkeySwingJump, true) != ERROR_SUCCESS ||
GetBoolRegKey(gameplayKey, REGKEY_ENABLE_SUBTITLES, &enableSubtitles, true) != ERROR_SUCCESS ||
GetBoolRegKey(gameplayKey, REGKEY_ENABLE_AUTO_TARGETING, &enableAutoTargeting, true) != ERROR_SUCCESS || GetBoolRegKey(gameplayKey, REGKEY_ENABLE_AUTO_TARGETING, &enableAutoTargeting, true) != ERROR_SUCCESS ||
GetBoolRegKey(gameplayKey, REGKEY_ENABLE_TARGET_HIGHLIGHTER, &enableTargetHighlighter, true) != ERROR_SUCCESS || GetBoolRegKey(gameplayKey, REGKEY_ENABLE_TARGET_HIGHLIGHTER, &enableTargetHighlighter, true) != ERROR_SUCCESS ||
GetBoolRegKey(gameplayKey, REGKEY_ENABLE_RUMBLE, &enableRumble, true) != ERROR_SUCCESS || GetBoolRegKey(gameplayKey, REGKEY_ENABLE_RUMBLE, &enableRumble, true) != ERROR_SUCCESS ||
@ -507,11 +511,12 @@ bool LoadConfiguration()
g_Configuration.SfxVolume = sfxVolume; g_Configuration.SfxVolume = sfxVolume;
g_Configuration.SoundDevice = soundDevice; g_Configuration.SoundDevice = soundDevice;
g_Configuration.EnableSubtitles = enableSubtitles;
g_Configuration.EnableAutoMonkeySwingJump = enableAutoMonkeySwingJump;
g_Configuration.EnableAutoTargeting = enableAutoTargeting; g_Configuration.EnableAutoTargeting = enableAutoTargeting;
g_Configuration.EnableTargetHighlighter = enableTargetHighlighter; g_Configuration.EnableTargetHighlighter = enableTargetHighlighter;
g_Configuration.EnableRumble = enableRumble; g_Configuration.EnableRumble = enableRumble;
g_Configuration.EnableThumbstickCamera = enableThumbstickCamera; g_Configuration.EnableThumbstickCamera = enableThumbstickCamera;
g_Configuration.EnableSubtitles = enableSubtitles;
g_Configuration.MouseSensitivity = mouseSensitivity; g_Configuration.MouseSensitivity = mouseSensitivity;
g_Configuration.MouseSmoothing = mouseSmoothing; g_Configuration.MouseSmoothing = mouseSmoothing;

View file

@ -33,6 +33,7 @@ constexpr auto REGKEY_SFX_VOLUME = "SfxVolume";
// Gameplay keys // Gameplay keys
constexpr auto REGKEY_ENABLE_SUBTITLES = "EnableSubtitles"; constexpr auto REGKEY_ENABLE_SUBTITLES = "EnableSubtitles";
constexpr auto REGKEY_ENABLE_AUTO_MONKEY_JUMP = "EnableAutoMonkeySwingJump";
constexpr auto REGKEY_ENABLE_AUTO_TARGETING = "EnableAutoTargeting"; constexpr auto REGKEY_ENABLE_AUTO_TARGETING = "EnableAutoTargeting";
constexpr auto REGKEY_ENABLE_TARGET_HIGHLIGHTER = "EnableTargetHighlighter"; constexpr auto REGKEY_ENABLE_TARGET_HIGHLIGHTER = "EnableTargetHighlighter";
constexpr auto REGKEY_ENABLE_RUMBLE = "EnableRumble"; constexpr auto REGKEY_ENABLE_RUMBLE = "EnableRumble";
@ -69,6 +70,7 @@ struct GameConfiguration
// Gameplay // Gameplay
bool EnableSubtitles = false; bool EnableSubtitles = false;
bool EnableAutoMonkeySwingJump = false;
bool EnableAutoTargeting = false; bool EnableAutoTargeting = false;
bool EnableTargetHighlighter = false; bool EnableTargetHighlighter = false;
bool EnableRumble = false; bool EnableRumble = false;