diff --git a/Amalgam/src/Features/Configs/Configs.cpp b/Amalgam/src/Features/Configs/Configs.cpp index 57ba273e..37c98ef9 100644 --- a/Amalgam/src/Features/Configs/Configs.cpp +++ b/Amalgam/src/Features/Configs/Configs.cpp @@ -166,7 +166,7 @@ template <> void CConfigs::LoadJson(const boost::property_tree::ptree& t, const if (uHash == uHash2) i++; } - bValid = bValid && i <= 1; + bValid = i <= 1; } if (bValid) @@ -368,7 +368,7 @@ static inline void SaveMain(BaseVar*& pBase, boost::property_tree::ptree& tTree) boost::property_tree::ptree tMap; for (auto& [iBind, tValue] : pVar->Map) F::Configs.SaveJson(tMap, std::to_string(iBind), tValue); - tTree.put_child(pVar->m_sName, tMap); + tTree.put_child(pVar->Name(), tMap); } #define Save(t, j) if (IsType(t)) SaveMain(pBase, j); @@ -378,7 +378,7 @@ static inline void LoadMain(BaseVar*& pBase, boost::property_tree::ptree& tTree) auto pVar = pBase->As(); pVar->Map = { { DEFAULT_BIND, pVar->Default } }; - if (auto tMap = tTree.get_child_optional(pVar->m_sName)) + if (auto tMap = tTree.get_child_optional(pVar->Name())) { for (auto& [sKey, _] : *tMap) { @@ -392,7 +392,7 @@ static inline void LoadMain(BaseVar*& pBase, boost::property_tree::ptree& tTree) } } else if (!(pVar->m_iFlags & NOSAVE)) - SDK::Output("Amalgam", std::format("{} not found", pVar->m_sName).c_str(), ALTERNATE_COLOR, OUTPUT_CONSOLE | OUTPUT_MENU | OUTPUT_DEBUG); + SDK::Output("Amalgam", std::format("{} not found", pVar->Name()).c_str(), ALTERNATE_COLOR, OUTPUT_CONSOLE | OUTPUT_MENU | OUTPUT_DEBUG); } #define Load(t, j) if (IsType(t)) LoadMain(pBase, j); @@ -617,14 +617,14 @@ bool CConfigs::LoadConfig(const std::string& sConfigName, bool bNotify) template static inline void SaveMiscMain(BaseVar*& pBase, boost::property_tree::ptree& tTree) { - F::Configs.SaveJson(tTree, pBase->m_sName, pBase->As()->Map[DEFAULT_BIND]); + F::Configs.SaveJson(tTree, pBase->Name(), pBase->As()->Map[DEFAULT_BIND]); } #define SaveMisc(t, j) if (IsType(t)) SaveMiscMain(pBase, j); template static inline void LoadMiscMain(BaseVar*& pBase, boost::property_tree::ptree& tTree) { - F::Configs.LoadJson(tTree, pBase->m_sName, pBase->As(), DEFAULT_BIND); + F::Configs.LoadJson(tTree, pBase->Name(), pBase->As(), DEFAULT_BIND); } #define LoadMisc(t, j) if (IsType(t)) LoadMiscMain(pBase, j); diff --git a/Amalgam/src/Features/ImGui/Menu/Components.h b/Amalgam/src/Features/ImGui/Menu/Components.h index f3698e3b..d8b662e0 100644 --- a/Amalgam/src/Features/ImGui/Menu/Components.h +++ b/Amalgam/src/Features/ImGui/Menu/Components.h @@ -2153,7 +2153,7 @@ namespace ImGui } inline void FKeybind(ConfigVar& var, int iFlags = FKeybindEnum::None, std::vector vIgnore = { Vars::Menu::PrimaryKey[DEFAULT_BIND], Vars::Menu::SecondaryKey[DEFAULT_BIND] }, ImVec2 vSize = { 0, 30 }, int iSizeOffset = 0, bool* pHovered = nullptr) { - FKeybind(var.m_vTitle.front(), var[DEFAULT_BIND], iFlags, vIgnore, vSize, iSizeOffset, pHovered); + FKeybind(var.m_vNames.front(), var[DEFAULT_BIND], iFlags, vIgnore, vSize, iSizeOffset, pHovered); } // dropdown for materials @@ -2588,48 +2588,48 @@ namespace ImGui DebugDummy({ 0, GetStyle().WindowPadding.y }); } - #define WRAPPER(function, type, parameters, arguments)\ - inline bool function(ConfigVar& var, parameters, bool* pHovered = nullptr, int iBindOverride = -1, int iLabelOverride = -1)\ - {\ - const char* sLabel = iLabelOverride != -1 ? var.m_vTitle[iLabelOverride] : var.m_vTitle.front();\ - int iVarFlags = var.m_iFlags & ~(VISUAL | NOSAVE | NOBIND | DEBUGVAR);\ - iFlags |= iVarFlags;\ - auto val = FGet(var, true);\ - bool bHovered = false;\ - bool bReturn = function(std::format("{}## {}", sLabel, var.m_sName).c_str(), arguments, &bHovered);\ - FSet(var, val);\ - if (pHovered)\ - *pHovered = bHovered;\ - if (!(var.m_iFlags & (NOBIND | NOSAVE)) && !Disabled && CurrentBind == DEFAULT_BIND)\ - { /*probably a better way to do this*/\ - static auto staticVal = val;\ - bool bNewPopup = bHovered && IsMouseReleased(ImGuiMouseButton_Right) && !IsMouseDown(ImGuiMouseButton_Left) && !IsPopupOpen(nullptr, ImGuiPopupFlags_AnyPopupId);\ - if (bNewPopup)\ - {\ - OpenPopup(var.m_sName.c_str());\ - staticVal = val;\ - }\ - SetNextWindowSize({ H::Draw.Scale(300), 0 });\ - bool bPopup = FBeginPopup(var.m_sName.c_str());\ - if (bPopup)\ - {\ - std::string sBind = iBindOverride != -1 ? var.m_vTitle[iBindOverride] : var.m_vTitle.back();\ - std::transform(sBind.begin(), sBind.end(), sBind.begin(), ::tolower);\ - iFlags = iVarFlags; /*get rid of any visual flags*/\ - if (FNV1A::Hash32Const(#function) == FNV1A::Hash32Const("FColorPicker"))\ - iFlags |= FColorPickerEnum::Full | FColorPickerEnum::RemoveVisuals;\ - PushTransparent(false);\ - static bool bLastHovered = false;\ - DrawBindInfo(var, staticVal, StripDoubleHash(sBind.c_str()), bNewPopup, bLastHovered);\ - val = staticVal;\ - function(std::format("{}## Bind", var.m_vTitle.front()).c_str(), arguments, &bHovered);\ - bLastHovered = bLastHovered || bHovered;\ - staticVal = val;\ - PopTransparent(2);\ - EndPopup();\ - }\ - }\ - return bReturn;\ + #define WRAPPER(function, type, parameters, arguments) \ + inline bool function(ConfigVar& var, parameters, bool* pHovered = nullptr, int iBindOverride = -1, int iLabelOverride = -1) \ + { \ + const char* sLabel = iLabelOverride != -1 ? var.m_vNames[iLabelOverride] : var.m_vNames.front(); \ + int iVarFlags = var.m_iFlags & ~(VISUAL | NOSAVE | NOBIND | DEBUGVAR); \ + iFlags |= iVarFlags; \ + auto val = FGet(var, true); \ + bool bHovered = false; \ + bool bReturn = function(std::format("{}## {}", sLabel, var.Name()).c_str(), arguments, &bHovered); \ + FSet(var, val); \ + if (pHovered) \ + *pHovered = bHovered; \ + if (!(var.m_iFlags & (NOBIND | NOSAVE)) && !Disabled && CurrentBind == DEFAULT_BIND) \ + { /*probably a better way to do this*/ \ + static auto staticVal = val; \ + bool bNewPopup = bHovered && IsMouseReleased(ImGuiMouseButton_Right) && !IsMouseDown(ImGuiMouseButton_Left) && !IsPopupOpen(nullptr, ImGuiPopupFlags_AnyPopupId); \ + if (bNewPopup) \ + { \ + OpenPopup(var.Name()); \ + staticVal = val; \ + } \ + SetNextWindowSize({ H::Draw.Scale(300), 0 }); \ + bool bPopup = FBeginPopup(var.Name()); \ + if (bPopup) \ + { \ + std::string sBind = iBindOverride != -1 ? var.m_vNames[iBindOverride] : var.m_vNames.back(); \ + std::transform(sBind.begin(), sBind.end(), sBind.begin(), ::tolower); \ + iFlags = iVarFlags; /*get rid of any visual flags*/ \ + if (FNV1A::Hash32Const(#function) == FNV1A::Hash32Const("FColorPicker")) \ + iFlags |= FColorPickerEnum::Full | FColorPickerEnum::RemoveVisuals; \ + PushTransparent(false); \ + static bool bLastHovered = false; \ + DrawBindInfo(var, staticVal, StripDoubleHash(sBind.c_str()), bNewPopup, bLastHovered); \ + val = staticVal; \ + function(std::format("{}## Bind", var.m_vNames.front()).c_str(), arguments, &bHovered); \ + bLastHovered = bLastHovered || bHovered; \ + staticVal = val; \ + PopTransparent(2); \ + EndPopup(); \ + } \ + } \ + return bReturn; \ } WRAPPER(FToggle, bool, VA_LIST(int iFlags = 0), VA_LIST(&val, iFlags)) diff --git a/Amalgam/src/Features/ImGui/Menu/Menu.cpp b/Amalgam/src/Features/ImGui/Menu/Menu.cpp index 47efc740..2e9938d6 100644 --- a/Amalgam/src/Features/ImGui/Menu/Menu.cpp +++ b/Amalgam/src/Features/ImGui/Menu/Menu.cpp @@ -3195,7 +3195,7 @@ void CMenu::MenuSettings(int iTab) { int i = 0; for (auto& pBase : G::Vars) { - if (pBase->m_sName.find("Vars::Hooks::") == std::string::npos) + if (std::string(pBase->Name()).find("Vars::Hooks::") == std::string::npos) continue; FToggle(*pBase->As(), !(i % 2) ? FToggleEnum::Left : FToggleEnum::Right); @@ -3230,8 +3230,8 @@ void CMenu::MenuSearch(std::string sSearch) if (!Vars::Debug::Options[DEFAULT_BIND] && pBase->m_iFlags & DEBUGVAR) continue; - std::vector vSearch = { pBase->m_sName.c_str(), pBase->m_sSection }; - vSearch.insert(vSearch.end(), pBase->m_vTitle.begin(), pBase->m_vTitle.end()); + std::vector vSearch = { pBase->Name(), pBase->Section() }; + vSearch.insert(vSearch.end(), pBase->m_vNames.begin(), pBase->m_vNames.end()); vSearch.insert(vSearch.end(), pBase->m_vValues.begin(), pBase->m_vValues.end()); for (auto pSearch : vSearch) { @@ -3264,7 +3264,7 @@ void CMenu::MenuSearch(std::string sSearch) else if (auto pVar = pBase->As()) { if (!pVar->m_vValues.empty() - || FNV1A::Hash32(pVar->m_sName.c_str()) == FNV1A::Hash32Const("Vars::ESP::ActiveGroups")) + || FNV1A::Hash32(pVar->Name()) == FNV1A::Hash32Const("Vars::ESP::ActiveGroups")) iWidgetEnum = iTypeEnum = WidgetEnum::FDropdown; else if (pVar->m_sExtra) iWidgetEnum = WidgetEnum::FISlider, iTypeEnum = WidgetEnum::FSlider; @@ -3288,12 +3288,12 @@ void CMenu::MenuSearch(std::string sSearch) else continue; - uint32_t uSection = FNV1A::Hash32(pBase->m_sSection); + uint32_t uSection = FNV1A::Hash32(pBase->Section()); if (uSection != uLastSection) { if (uLastSection) EndSection(); - Section(std::format("{}## {}", pBase->m_sSection, pBase->m_sName).c_str()); + Section(std::format("{}## {}", pBase->Section(), pBase->Name()).c_str()); i = 0; } uLastSection = uSection; @@ -3341,7 +3341,7 @@ void CMenu::MenuSearch(std::string sSearch) auto pVar = pBase->As(); if (FToggle(*pVar, !(i % 2) ? FToggleEnum::Left : FToggleEnum::Right, nullptr, iOverride/*, iOverride*/)) { - if (FNV1A::Hash32(pVar->m_sName.c_str()) == FNV1A::Hash32Const("Vars::Debug::Options")) + if (FNV1A::Hash32(pVar->Name()) == FNV1A::Hash32Const("Vars::Debug::Options")) uStaticHash = 0; } break; @@ -3356,7 +3356,7 @@ void CMenu::MenuSearch(std::string sSearch) { auto pVar = pBase->As(); const char* sFormat = pVar->m_sExtra; - switch (FNV1A::Hash32(pVar->m_sName.c_str())) + switch (FNV1A::Hash32(pVar->Name())) { case FNV1A::Hash32Const("Vars::Aimbot::Projectile::SplashRotateX"): case FNV1A::Hash32Const("Vars::Aimbot::Projectile::SplashRotateY"): @@ -3413,7 +3413,7 @@ void CMenu::MenuSearch(std::string sSearch) { auto pVar = pBase->As(); std::vector vIgnore; - switch (FNV1A::Hash32(pVar->m_sName.c_str())) + switch (FNV1A::Hash32(pVar->Name())) { case FNV1A::Hash32Const("Vars::Menu::PrimaryKey"): vIgnore = { Vars::Menu::SecondaryKey[DEFAULT_BIND], VK_LBUTTON, VK_RBUTTON }; @@ -3424,7 +3424,7 @@ void CMenu::MenuSearch(std::string sSearch) default: vIgnore = { Vars::Menu::PrimaryKey[DEFAULT_BIND], Vars::Menu::SecondaryKey[DEFAULT_BIND] }; } - FKeybind(iOverride != -1 ? pVar->m_vTitle[iOverride] : pVar->m_vTitle.front(), pVar->Map[DEFAULT_BIND], !(i % 2) ? FButtonEnum::Left : FButtonEnum::Right | FButtonEnum::SameLine, vIgnore); + FKeybind(iOverride != -1 ? pVar->m_vNames[iOverride] : pVar->m_vNames.front(), pVar->Map[DEFAULT_BIND], !(i % 2) ? FButtonEnum::Left : FButtonEnum::Right | FButtonEnum::SameLine, vIgnore); break; } } diff --git a/Amalgam/src/SDK/Vars.h b/Amalgam/src/SDK/Vars.h index 54ebd2a6..c8081eb4 100644 --- a/Amalgam/src/SDK/Vars.h +++ b/Amalgam/src/SDK/Vars.h @@ -8,19 +8,14 @@ #define DEFAULT_BIND -1 -// forward declartion of ConfigVar template class ConfigVar; class BaseVar { public: - size_t m_iType; - std::string m_sName; + std::vector m_vNames; int m_iFlags = 0; - - std::vector m_vTitle; - const char* m_sSection; union { int i = 0; float f; @@ -36,7 +31,23 @@ public: std::vector m_vValues = {}; const char* m_sExtra = nullptr; - // getter for ConfigVar +protected: + std::string m_sName; + const char* m_sSection; + +public: + constexpr const char* Name() const + { + return m_sName.c_str(); + } + constexpr const char* Section() const + { + return m_sSection; + } + +public: + size_t m_iType; + template inline ConfigVar* As() { @@ -56,38 +67,35 @@ template class ConfigVar : public BaseVar { public: - T Default; T Value; + T Default; std::unordered_map Map = {}; - ConfigVar(T tValue, std::string sName, const char* sSection, std::vector vTitle, int iFlags = 0, std::vector vValues = {}, const char* sNone = nullptr) + + ConfigVar(T tValue, std::vector vNames, const char* sName, const char* sSection, int iFlags = 0, std::vector vValues = {}, const char* sNone = nullptr) { - Default = tValue; - Value = tValue; - Map[DEFAULT_BIND] = tValue; - + Value = Default = Map[DEFAULT_BIND] = tValue; m_iType = typeid(T).hash_code(); - m_sName = sName; - m_iFlags = iFlags; - m_vTitle = vTitle; + m_vNames = vNames; + m_sName = std::string(sName).replace(strlen(sName) - 1, 1, ""); m_sSection = sSection; + + m_iFlags = iFlags; m_vValues = vValues; m_sExtra = sNone; G::Vars.push_back(this); } - ConfigVar(T tValue, std::string sName, const char* sSection, std::vector vTitle, int iFlags, int iMin, int iMax, int iStep = 1, const char* sFormat = "%i") + ConfigVar(T tValue, std::vector vNames, const char* sName, const char* sSection, int iFlags, int iMin, int iMax, int iStep = 1, const char* sFormat = "%i") { - Default = tValue; - Value = tValue; - Map[DEFAULT_BIND] = tValue; - + Value = Default = Map[DEFAULT_BIND] = tValue; m_iType = typeid(T).hash_code(); - m_sName = sName; - m_iFlags = iFlags; - m_vTitle = vTitle; + m_vNames = vNames; + m_sName = std::string(sName).replace(strlen(sName) - 1, 1, ""); m_sSection = sSection; + + m_iFlags = iFlags; m_unMin.i = iMin; m_unMax.i = iMax; m_unStep.i = iStep; @@ -95,18 +103,16 @@ public: G::Vars.push_back(this); } - ConfigVar(T tValue, std::string sName, const char* sSection, std::vector vTitle, int iFlags, float flMin, float flMax, float flStep = 1.f, const char* sFormat = "%g") + ConfigVar(T tValue, std::vector vNames, const char* sName, const char* sSection, int iFlags, float flMin, float flMax, float flStep = 1.f, const char* sFormat = "%g") { - Default = tValue; - Value = tValue; - Map[DEFAULT_BIND] = tValue; - + Value = Default = Map[DEFAULT_BIND] = tValue; m_iType = typeid(T).hash_code(); - m_sName = sName; - m_iFlags = iFlags; - m_vTitle = vTitle; + m_vNames = vNames; + m_sName = std::string(sName).replace(strlen(sName) - 1, 1, ""); m_sSection = sSection; + + m_iFlags = iFlags; m_unMin.f = flMin; m_unMax.f = flMax; m_unStep.f = flStep; @@ -125,30 +131,22 @@ public: } }; -#define NAMESPACE_BEGIN(name, ...)\ - namespace name {\ - inline const char* GetNamespace() { return "Vars::"#name"::"; }\ - inline const char* GetSubname() { return ""; }\ - inline const char* GetSection() { return !std::string(#__VA_ARGS__).empty() ? ""#__VA_ARGS__ : #name; } - -#define SUBNAMESPACE_BEGIN(name, ...)\ - namespace name {\ - inline const char* GetSubname() { return #name"::"; }\ - inline const char* GetSection() { return !std::string(#__VA_ARGS__).empty() ? ""#__VA_ARGS__ : #name; } - -#define NAMESPACE_END(name)\ - } -#define SUBNAMESPACE_END(name)\ +#define NAMESPACE_BEGIN(name, ...) \ + namespace name { \ + constexpr inline const char* Section() { return !std::string(#__VA_ARGS__).empty() ? ""#__VA_ARGS__ : #name; } +#define NAMESPACE_END(name) \ } -#define CVar(name, title, value, ...)\ - inline ConfigVar name = { value, std::format("{}{}{}", GetNamespace(), GetSubname(), #name), GetSection(), { title }, __VA_ARGS__ } -#define CVarValues(name, title, value, flags, none, ...)\ - inline ConfigVar name = { value, std::format("{}{}{}", GetNamespace(), GetSubname(), #name), GetSection(), { title }, flags, { __VA_ARGS__ }, none } -#define Enum(name, ...)\ +#define CVar(name, title, value, ...) \ + constexpr inline const char* name##_() { return __FUNCTION__; } \ + inline ConfigVar name = { value, { title }, name##_(), Section(), __VA_ARGS__ } +#define CVarValues(name, title, value, flags, none, ...) \ + constexpr inline const char* name##_() { return __FUNCTION__; } \ + inline ConfigVar name = { value, { title }, name##_(), Section(), flags, { __VA_ARGS__ }, none } +#define Enum(name, ...) \ namespace name##Enum { enum name##Enum { __VA_ARGS__ }; } -#define CVarEnum(name, title, value, flags, none, values, ...)\ - CVarValues(name, title, value, flags, none, values);\ +#define CVarEnum(name, title, value, flags, none, values, ...) \ + CVarValues(name, title, value, flags, none, values); \ Enum(name, __VA_ARGS__); #define NONE 0 @@ -169,8 +167,7 @@ public: #define DROPDOWN_CUSTOM (1 << 2) #define DROPDOWN_AUTOUPDATE (1 << 3) -namespace Vars -{ +NAMESPACE_BEGIN(Vars) NAMESPACE_BEGIN(Menu) CVar(CheatTitle, "Cheat title", std::string("Amalgam"), VISUAL | DROPDOWN_AUTOUPDATE); CVar(CheatTag, "Cheat tag", std::string("[Amalgam]"), VISUAL); @@ -196,13 +193,13 @@ namespace Vars CVar(Scale, "Scale", 1.f, NOBIND | SLIDER_MIN | SLIDER_PRECISION | SLIDER_NOAUTOUPDATE, 0.75f, 2.f, 0.25f); CVar(CheapText, "Cheap text", false); - SUBNAMESPACE_BEGIN(Theme) + NAMESPACE_BEGIN(Theme) CVar(Accent, "Accent color", Color_t(175, 150, 255, 255), VISUAL); CVar(Background, "Background color", Color_t(0, 0, 0, 250), VISUAL); CVar(Active, "Active color", Color_t(255, 255, 255, 255), VISUAL); CVar(Inactive, "Inactive color", Color_t(150, 150, 150, 255), VISUAL); - SUBNAMESPACE_END(Theme); - NAMESPACE_END(Menu); + NAMESPACE_END(Theme) + NAMESPACE_END(Menu) NAMESPACE_BEGIN(Colors) CVar(FOVCircle, "FOV circle color", Color_t(255, 255, 255, 100), VISUAL); @@ -253,10 +250,10 @@ namespace Vars CVar(BoundHitboxFaceIgnoreZ, "Bound hitbox face ignore Z color", Color_t(255, 255, 255, 0), VISUAL); CVar(SpellFootstep, "Spell footstep color", Color_t(255, 255, 255, 255), VISUAL); - NAMESPACE_END(Colors); + NAMESPACE_END(Colors) NAMESPACE_BEGIN(Aimbot) - SUBNAMESPACE_BEGIN(General, Aimbot) + NAMESPACE_BEGIN(General, Aimbot) CVarEnum(AimType, "Aim type", 0, NONE, nullptr, VA_LIST("Off", "Plain", "Smooth", "Silent", "Locking", "Assistive"), Off, Plain, Smooth, Silent, Locking, Assistive); @@ -286,9 +283,9 @@ namespace Vars CVar(NoSpreadAverage, "No spread average", 5, NOSAVE | DEBUGVAR | SLIDER_MIN, 1, 25); CVar(NoSpreadInterval, "No spread interval", 0.1f, NOSAVE | DEBUGVAR | SLIDER_MIN, 0.05f, 5.f, 0.1f, "%gs"); CVar(NoSpreadBackupInterval, "No spread backup interval", 2.f, NOSAVE | DEBUGVAR | SLIDER_MIN, 2.f, 10.f, 0.1f, "%gs"); - SUBNAMESPACE_END(Global); + NAMESPACE_END(Global) - SUBNAMESPACE_BEGIN(Hitscan) + NAMESPACE_BEGIN(Hitscan) CVarEnum(Hitboxes, VA_LIST("Hitboxes", "Hitscan hitboxes"), 0b000111, DROPDOWN_MULTI, nullptr, VA_LIST("Head", "Body", "Pelvis", "Arms", "Legs", "##Divider", "Bodyaim if lethal", "Headshot only"), Head = 1 << 0, Body = 1 << 1, Pelvis = 1 << 2, Arms = 1 << 3, Legs = 1 << 4, BodyaimIfLethal = 1 << 5, HeadshotOnly = 1 << 6); @@ -306,9 +303,9 @@ namespace Vars CVar(PeekAmount, "Peek amount", 1, NOSAVE | DEBUGVAR, 0, 5); CVar(BoneSizeSubtract, "Bone size subtract", 1.f, NOSAVE | DEBUGVAR | SLIDER_MIN, 0.f, 4.f, 0.25f); CVar(BoneSizeMinimumScale, "Bone size minimum scale", 1.f, NOSAVE | DEBUGVAR | SLIDER_CLAMP, 0.f, 1.f, 0.1f); - SUBNAMESPACE_END(HITSCAN); + NAMESPACE_END(HITSCAN) - SUBNAMESPACE_BEGIN(Projectile) + NAMESPACE_BEGIN(Projectile) CVarEnum(StrafePrediction, VA_LIST("Predict", "Strafe prediction"), 0b11, DROPDOWN_MULTI, "Off", VA_LIST("Air strafing", "Ground strafing"), Air = 1 << 0, Ground = 1 << 1); @@ -387,9 +384,9 @@ namespace Vars CVarEnum(MovesimFrictionFlags, "Movesim friction flags", 0b01, NOSAVE | DEBUGVAR | DROPDOWN_MULTI, nullptr, VA_LIST("Run reduce", "Calculate increase"), RunReduce = 1 << 0, CalculateIncrease = 1 << 1); - SUBNAMESPACE_END(Projectile); + NAMESPACE_END(Projectile) - SUBNAMESPACE_BEGIN(Melee) + NAMESPACE_BEGIN(Melee) CVar(AutoBackstab, "Auto backstab", true); CVar(IgnoreRazorback, "Ignore razorback", true); CVar(SwingPrediction, "Swing prediction", false); @@ -399,9 +396,9 @@ namespace Vars CVar(SwingPredictLag, "Swing predict lag", true, NOSAVE | DEBUGVAR); CVar(BackstabAccountPing, "Backstab account ping", true, NOSAVE | DEBUGVAR); CVar(BackstabDoubleTest, "Backstab double test", true, NOSAVE | DEBUGVAR); - SUBNAMESPACE_END(Melee); + NAMESPACE_END(Melee) - SUBNAMESPACE_BEGIN(Healing) + NAMESPACE_BEGIN(Healing) CVarEnum(HealPriority, "Heal Priority", 0, NONE, nullptr, VA_LIST("None", "Prioritize team", "Prioritize friends", "Friends only"), None, PrioritizeTeam, PrioritizeFriends, FriendsOnly); @@ -416,14 +413,14 @@ namespace Vars CVar(AutoVaccinatorBlastScale, "Auto vaccinator blast scale", 100.f, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 0.f, 200.f, 10.f, "%g%%"); CVar(AutoVaccinatorFireScale, "Auto vaccinator fire scale", 100.f, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 0.f, 200.f, 10.f, "%g%%"); CVar(AutoVaccinatorFlamethrowerDamageOnly, "Auto vaccinator flamethrower damage only", false, NOSAVE | DEBUGVAR); - SUBNAMESPACE_END(Healing); - NAMESPACE_END(Aimbot); + NAMESPACE_END(Healing) + NAMESPACE_END(Aimbot) NAMESPACE_BEGIN(CritHack, Crit Hack) CVar(ForceCrits, "Force crits", false); CVar(AvoidRandomCrits, "Avoid random crits", false); CVar(AlwaysMeleeCrit, "Always melee crit", false); - NAMESPACE_END(CritHack); + NAMESPACE_END(CritHack) NAMESPACE_BEGIN(Backtrack) CVar(Latency, "Fake latency", 0, SLIDER_CLAMP, 0, 1000, 5); @@ -432,7 +429,7 @@ namespace Vars CVar(PreferOnShot, "Prefer on shot", false); CVar(Offset, "Offset", 0, NOSAVE | DEBUGVAR, -1, 1); - NAMESPACE_END(Backtrack); + NAMESPACE_END(Backtrack) NAMESPACE_BEGIN(Doubletap) CVar(Doubletap, "Doubletap", false); @@ -458,16 +455,16 @@ namespace Vars CVar(RetainBlastJump, "Retain blastjump", false); CVar(RetainSoldierOnly, "Retain blastjump soldier only", true, NOSAVE | DEBUGVAR); - NAMESPACE_END(FakeLag); + NAMESPACE_END(FakeLag) NAMESPACE_BEGIN(AutoPeek, Auto Peek) CVar(Enabled, VA_LIST("Enabled", "Auto peek"), false); - NAMESPACE_END(AutoPeek); + NAMESPACE_END(AutoPeek) NAMESPACE_BEGIN(Speedhack) CVar(Enabled, VA_LIST("Enabled", "Speedhack enabled"), false); CVar(Amount, VA_LIST("Amount", "SpeedHack amount"), 1, NONE, 1, 50); - NAMESPACE_END(Speedhack); + NAMESPACE_END(Speedhack) NAMESPACE_BEGIN(AntiAim, Antiaim) CVar(Enabled, VA_LIST("Enabled", "Antiaim enabled"), false); @@ -495,7 +492,7 @@ namespace Vars CVar(MinWalk, "Minwalk", true); CVar(AntiOverlap, "Anti-overlap", false); CVar(InvalidShootPitch, "Hide pitch on shot", false); - NAMESPACE_END(AntiAim); + NAMESPACE_END(AntiAim) NAMESPACE_BEGIN(Resolver) CVar(Enabled, VA_LIST("Enabled", "Resolver enabled"), false); @@ -508,7 +505,7 @@ namespace Vars CVar(CyclePitch, "Cycle pitch", 0.f, SLIDER_CLAMP, -180.f, 180.f, 90.f); CVar(CycleView, "Cycle view", false); CVar(CycleMinwalk, "Cycle minwalk", false); - NAMESPACE_END(Resolver); + NAMESPACE_END(Resolver) NAMESPACE_BEGIN(CheaterDetection, Cheater Detection) CVarEnum(Methods, "Detection methods", 0b0000, DROPDOWN_MULTI, nullptr, @@ -518,14 +515,14 @@ namespace Vars CVar(MinimumChoking, "Minimum choking", 20, SLIDER_MIN, 4, 22); CVar(MinimumFlick, "Minimum flick angle", 20.f, SLIDER_PRECISION, 10.f, 30.f); // min flick size to suspect CVar(MaximumNoise, "Maximum flick noise", 1.f, SLIDER_PRECISION, 1.f, 10.f); // max difference between angles before and after flick - NAMESPACE_END(CheaterDetection); + NAMESPACE_END(CheaterDetection) NAMESPACE_BEGIN(ESP) CVarValues(ActiveGroups, "Active groups", int(0b11111111111111111111111111111111), VISUAL | DROPDOWN_MULTI | DROPDOWN_NOSANITIZATION, nullptr); - NAMESPACE_END(ESP); + NAMESPACE_END(ESP) NAMESPACE_BEGIN(Visuals) - SUBNAMESPACE_BEGIN(UI) + NAMESPACE_BEGIN(UI) CVarEnum(StreamerMode, "Streamer mode", 0, VISUAL, nullptr, VA_LIST("Off", "Local", "Friends", "Party", "All"), Off, Local, Friends, Party, All); @@ -539,9 +536,9 @@ namespace Vars CVar(ScoreboardUtility, "Scoreboard utility", false); CVar(ScoreboardColors, "Scoreboard colors", false, VISUAL); CVar(CleanScreenshots, "Clean screenshots", true); - SUBNAMESPACE_END(UI); + NAMESPACE_END(UI) - SUBNAMESPACE_BEGIN(Thirdperson) + NAMESPACE_BEGIN(Thirdperson) CVar(Enabled, "Thirdperson", false, VISUAL); CVar(Crosshair, VA_LIST("Crosshair", "Thirdperson crosshair"), false, VISUAL); CVar(Distance, "Thirdperson distance", 150.f, VISUAL | SLIDER_PRECISION, 0.f, 400.f, 10.f); @@ -550,9 +547,9 @@ namespace Vars CVar(Scale, "Thirdperson scales", true, NOSAVE | DEBUGVAR); CVar(Collide, "Thirdperson collides", true, NOSAVE | DEBUGVAR); - SUBNAMESPACE_END(ThirdPerson); + NAMESPACE_END(ThirdPerson) - SUBNAMESPACE_BEGIN(Removals) + NAMESPACE_BEGIN(Removals) CVar(Interpolation, VA_LIST("Interpolation", "Remove interpolation"), false); CVar(Lerp, VA_LIST("Lerp", "Remove lerp"), true); CVar(Disguises, VA_LIST("Disguises", "Remove disguises"), false, VISUAL); @@ -566,9 +563,9 @@ namespace Vars CVar(Ragdolls, VA_LIST("Ragdolls", "Remove ragdoll"), false, VISUAL); CVar(Gibs, VA_LIST("Gibs", "Remove gibs"), false, VISUAL); CVar(MOTD, VA_LIST("MOTD", "Remove MOTD"), false, VISUAL); - SUBNAMESPACE_END(Removals); + NAMESPACE_END(Removals) - SUBNAMESPACE_BEGIN(Effects) + NAMESPACE_BEGIN(Effects) CVarValues(BulletTracer, "Bullet tracer", std::string("Default"), VISUAL | DROPDOWN_CUSTOM, nullptr, "Default", "None", "Big nasty", "Distortion trail", "Machina", "Sniper rail", "Short circuit", "C.A.P.P.E.R", "Merasmus ZAP", "Merasmus ZAP 2", "Black ink", "Line", "Line ignore Z", "Beam"); CVarValues(CritTracer, "Crit tracer", std::string("Default"), VISUAL | DROPDOWN_CUSTOM, nullptr, @@ -587,9 +584,9 @@ namespace Vars Burning = 1 << 0, Electrocuted = 1 << 1, Ash = 1 << 2, Dissolve = 1 << 3, Gold = 1 << 4, Ice = 1 << 5); CVar(DrawIconsThroughWalls, "Draw icons through walls", false, VISUAL); CVar(DrawDamageNumbersThroughWalls, "Draw damage numbers through walls", false, VISUAL); - SUBNAMESPACE_END(Tracers); + NAMESPACE_END(Tracers) - SUBNAMESPACE_BEGIN(Viewmodel) + NAMESPACE_BEGIN(Viewmodel) CVar(CrosshairAim, "Crosshair aim position", false, VISUAL); CVar(ViewmodelAim, "Viewmodel aim position", false, VISUAL); CVar(OffsetX, VA_LIST("Offset X", "Viewmodel offset X"), 0.f, VISUAL | SLIDER_PRECISION, -45.f, 45.f, 5.f); @@ -600,9 +597,9 @@ namespace Vars CVar(Roll, VA_LIST("Roll", "Viewmodel roll"), 0.f, VISUAL | SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f); CVar(SwayScale, VA_LIST("Sway scale", "Viewmodel sway scale"), 0.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 5.f, 0.5f); CVar(SwayInterp, VA_LIST("Sway interp", "Viewmodel sway interp"), 0.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 1.f, 0.1f); - SUBNAMESPACE_END(Viewmodel); + NAMESPACE_END(Viewmodel) - SUBNAMESPACE_BEGIN(World) + NAMESPACE_BEGIN(World) CVarEnum(Modulations, "Modulations", 0b00000, VISUAL | DROPDOWN_MULTI, nullptr, VA_LIST("World", "Sky", "Prop", "Particle", "Fog"), World = 1 << 0, Sky = 1 << 1, Prop = 1 << 2, Particle = 1 << 3, Fog = 1 << 4); @@ -612,9 +609,9 @@ namespace Vars "Default", "Dev", "Camo", "Black", "White", "Gray", "Flat"); CVar(NearPropFade, "Near prop fade", false, VISUAL); CVar(NoPropFade, "No prop fade", false, VISUAL); - SUBNAMESPACE_END(World); + NAMESPACE_END(World) - SUBNAMESPACE_BEGIN(Beams) // as of now, these will stay out of the menu + NAMESPACE_BEGIN(Beams) // as of now, these will stay out of the menu CVar(Model, "Model", std::string("sprites/physbeam.vmt"), VISUAL); CVar(Life, "Life", 2.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 10.f); CVar(Width, "Width", 2.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 10.f); @@ -628,14 +625,14 @@ namespace Vars CVarEnum(Flags, "Flags", 0b10000000100000000, VISUAL | DROPDOWN_MULTI, nullptr, VA_LIST("Start entity", "End entity", "Fade in", "Fade out", "Sine noise", "Solid", "Shade in", "Shade out", "Only noise once", "No tile", "Use hitboxes", "Start visible", "End visible", "Is active", "Forever", "Halobeam", "Reverse"), StartEntity = 1 << 0, EndEntity = 1 << 1, FadeIn = 1 << 2, FadeOut = 1 << 3, SineNoise = 1 << 4, Solid = 1 << 5, ShadeIn = 1 << 6, ShadeOut = 1 << 7, OnlyNoiseOnce = 1 << 8, NoTile = 1 << 9, UseHitboxes = 1 << 10, StartVisible = 1 << 11, EndVisible = 1 << 12, IsActive = 1 << 13, Forever = 1 << 14, Halobeam = 1 << 15, Reverse = 1 << 16); - SUBNAMESPACE_END(Beams); + NAMESPACE_END(Beams) - SUBNAMESPACE_BEGIN(Line) + NAMESPACE_BEGIN(Line) CVar(Enabled, "Line tracers", false, VISUAL); CVar(DrawDuration, VA_LIST("Draw duration", "Line draw duration"), 5.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 10.f); - SUBNAMESPACE_END(Line); + NAMESPACE_END(Line) - SUBNAMESPACE_BEGIN(Hitbox) + NAMESPACE_BEGIN(Hitbox) CVarEnum(BonesEnabled, VA_LIST("Bones enabled", "Hitbox bones enabled"), 0b00, VISUAL | DROPDOWN_MULTI, "Off", VA_LIST("On shot", "On hit"), OnShot = 1 << 0, OnHit = 1 << 1); @@ -643,9 +640,9 @@ namespace Vars VA_LIST("On shot", "On hit", "Aim point"), OnShot = 1 << 0, OnHit = 1 << 1, AimPoint = 1 << 2); CVar(DrawDuration, VA_LIST("Draw duration", "Hitbox draw duration"), 5.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 10.f); - SUBNAMESPACE_END(Hitbox); + NAMESPACE_END(Hitbox) - SUBNAMESPACE_BEGIN(Simulation) + NAMESPACE_BEGIN(Simulation) Enum(Style, Off, Line, Separators, Spaced, Arrows, Boxes); CVarValues(PlayerPath, "Player path", 0, VISUAL, nullptr, "Off", "Line", "Separators", "Spaced", "Arrows", "Boxes"); @@ -670,9 +667,9 @@ namespace Vars "Off", "Line", "Separators", "Spaced", "Arrows", "Boxes"); CVar(SeparatorSpacing, "Separator spacing", 4, NOSAVE | DEBUGVAR, 1, 16); CVar(SeparatorLength, "Separator length", 12.f, NOSAVE | DEBUGVAR, 2.f, 16.f); - SUBNAMESPACE_END(Simulation); + NAMESPACE_END(Simulation) - SUBNAMESPACE_BEGIN(Trajectory) + NAMESPACE_BEGIN(Trajectory) CVar(Override, "Simulation override", false, NOSAVE | DEBUGVAR); CVar(OffsetX, "Offset X", 16.f, NOSAVE | DEBUGVAR | SLIDER_PRECISION, -25.f, 25.f, 0.5f); CVar(OffsetY, "Offset Y", 8.f, NOSAVE | DEBUGVAR | SLIDER_PRECISION, -25.f, 25.f, 0.5f); @@ -695,11 +692,11 @@ namespace Vars CVar(AngularDragZ, "Angular drag Z", 0.001514f, NOSAVE | DEBUGVAR | SLIDER_PRECISION, 0.f, 0.1f, 0.01f, "%.15g"); CVar(MaxVelocity, "Max velocity", 2000.f, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 0.f, 4000.f, 50.f); CVar(MaxAngularVelocity, "Max angular velocity", 3600.f, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 0.f, 7200.f, 50.f); - SUBNAMESPACE_END(ProjectileTrajectory); - NAMESPACE_END(Visuals); + NAMESPACE_END(ProjectileTrajectory) + NAMESPACE_END(Visuals) NAMESPACE_BEGIN(Misc) - SUBNAMESPACE_BEGIN(Movement) + NAMESPACE_BEGIN(Movement) CVarEnum(AutoStrafe, "Auto strafe", 0, NONE, nullptr, VA_LIST("Off", "Legit", "Directional"), Off, Legit, Directional); @@ -724,9 +721,9 @@ namespace Vars CVar(AutoRocketJumpSkipAir, "Skip air", 1, NOSAVE | DEBUGVAR, 0, 3); CVar(AutoRocketJumpTimingOffset, "Timing offset", 0, NOSAVE | DEBUGVAR, 0, 3); CVar(AutoRocketJumpApplyAbove, "Apply offset above", 0, NOSAVE | DEBUGVAR, 0, 10); - SUBNAMESPACE_END(Movement); + NAMESPACE_END(Movement) - SUBNAMESPACE_BEGIN(Automation) + NAMESPACE_BEGIN(Automation) CVarEnum(AntiBackstab, "Anti-backstab", 0, NONE, nullptr, VA_LIST("Off", "Yaw", "Pitch", "Fake"), Off, Yaw, Pitch, Fake); @@ -737,9 +734,9 @@ namespace Vars CVar(AutoF2Ignored, "Auto F2 ignored", false); CVar(AutoF1Priority, "Auto F1 priority", false); CVar(AcceptItemDrops, "Auto accept item drops", false); - SUBNAMESPACE_END(Automation); + NAMESPACE_END(Automation) - SUBNAMESPACE_BEGIN(Exploits) + NAMESPACE_BEGIN(Exploits) CVar(PureBypass, "Pure bypass", false); CVar(CheatsBypass, "Cheats bypass", false); CVar(EquipRegionUnlock, "Equip region unlock", false); @@ -747,18 +744,18 @@ namespace Vars CVar(NoisemakerSpam, "Noisemaker spam", false); CVar(PingReducer, "Ping reducer", false); CVar(PingTarget, "cl_cmdrate", 1, SLIDER_CLAMP, 1, 66); - SUBNAMESPACE_END(Exploits); + NAMESPACE_END(Exploits) - SUBNAMESPACE_BEGIN(Game) + NAMESPACE_BEGIN(Game) CVar(AntiCheatCompatibility, "Anti-cheat compatibility", false); CVar(F2PChatBypass, "F2P chat bypass", false); CVar(NetworkFix, "Network fix", false); CVar(SetupBonesOptimization, "Bones optimization", false); CVar(AntiCheatCritHack, "Anti-cheat crit hack", false, NOSAVE | DEBUGVAR); - SUBNAMESPACE_END(Game); + NAMESPACE_END(Game) - SUBNAMESPACE_BEGIN(Queueing) + NAMESPACE_BEGIN(Queueing) CVarEnum(ForceRegions, "Force regions", 0b0, DROPDOWN_MULTI, nullptr, // i'm not sure all of these are actually used for tf2 servers VA_LIST("Atlanta", "Chicago", "Dallas", "Los Angeles", "Seattle", "Virginia", "##Divider", "Amsterdam", "Falkenstein", "Frankfurt", "Helsinki", "London", "Madrid", "Paris", "Stockholm", "Vienna", "Warsaw", "##Divider", "Buenos Aires", "Lima", "Santiago", "Sao Paulo", "##Divider", "Chennai", "Dubai", "Hong Kong", "Mumbai", "Seoul", "Singapore", "Tokyo", "##Divider", "Sydney", "##Divider", "Johannesburg"), // North America @@ -799,23 +796,23 @@ namespace Vars ); CVar(FreezeQueue, "Freeze queue", false); CVar(AutoCasualQueue, "Auto casual queue", false); - SUBNAMESPACE_END(Queueing); + NAMESPACE_END(Queueing) - SUBNAMESPACE_BEGIN(MannVsMachine, Mann vs. Machine) + NAMESPACE_BEGIN(MannVsMachine, Mann vs. Machine) CVar(InstantRespawn, "Instant respawn", false); CVar(InstantRevive, "Instant revive", false); CVar(AllowInspect, "Allow inspect", false); - SUBNAMESPACE_END(Sound); + NAMESPACE_END(Sound) - SUBNAMESPACE_BEGIN(Sound) + NAMESPACE_BEGIN(Sound) CVarEnum(Block, VA_LIST("Block", "Sound block"), 0b0000, DROPDOWN_MULTI, nullptr, VA_LIST("Footsteps", "Noisemaker", "Frying pan", "Water"), Footsteps = 1 << 0, Noisemaker = 1 << 1, FryingPan = 1 << 2, Water = 1 << 3); CVar(HitsoundAlways, "Hitsound always", false); CVar(RemoveDSP, "Remove DSP", false); CVar(GiantWeaponSounds, "Giant weapon sounds", false); - SUBNAMESPACE_END(Sound); - NAMESPACE_END(Misc); + NAMESPACE_END(Sound) + NAMESPACE_END(Misc) NAMESPACE_BEGIN(Logging) CVarEnum(Logs, "Logs", 0b0000011, DROPDOWN_MULTI, "Off", @@ -827,46 +824,46 @@ namespace Vars TopLeft, TopRight, BottomLeft, BottomRight); CVar(Lifetime, "Notification time", 5.f, VISUAL, 0.5f, 5.f, 0.5f); - SUBNAMESPACE_BEGIN(VoteStart, Logging) + NAMESPACE_BEGIN(VoteStart, Logging) CVarValues(LogTo, VA_LIST("Log to", "Vote start log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(VoteStart); + NAMESPACE_END(VoteStart) - SUBNAMESPACE_BEGIN(VoteCast, Logging) + NAMESPACE_BEGIN(VoteCast, Logging) CVarValues(LogTo, VA_LIST("Log to", "Vote cast log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(VoteCast); + NAMESPACE_END(VoteCast) - SUBNAMESPACE_BEGIN(ClassChange, Logging) + NAMESPACE_BEGIN(ClassChange, Logging) CVarValues(LogTo, VA_LIST("Log to", "Class change log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(ClassChange); + NAMESPACE_END(ClassChange) - SUBNAMESPACE_BEGIN(Damage, Logging) + NAMESPACE_BEGIN(Damage, Logging) CVarValues(LogTo, VA_LIST("Log to", "Damage log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(Damage); + NAMESPACE_END(Damage) - SUBNAMESPACE_BEGIN(CheatDetection, Logging) + NAMESPACE_BEGIN(CheatDetection, Logging) CVarValues(LogTo, VA_LIST("Log to", "Cheat detection log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(CheatDetection); + NAMESPACE_END(CheatDetection) - SUBNAMESPACE_BEGIN(Tags, Logging) + NAMESPACE_BEGIN(Tags, Logging) CVarValues(LogTo, VA_LIST("Log to", "Tags log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(Tags); + NAMESPACE_END(Tags) - SUBNAMESPACE_BEGIN(Aliases, Logging) + NAMESPACE_BEGIN(Aliases, Logging) CVarValues(LogTo, VA_LIST("Log to", "Aliases log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(Aliases); + NAMESPACE_END(Aliases) - SUBNAMESPACE_BEGIN(Resolver, Logging) + NAMESPACE_BEGIN(Resolver, Logging) CVarValues(LogTo, VA_LIST("Log to", "Resolver log to"), 0b000001, DROPDOWN_MULTI, nullptr, "Toasts", "Chat", "Party", "Console", "Menu", "Debug"); - SUBNAMESPACE_END(Resolver); - NAMESPACE_END(Logging); + NAMESPACE_END(Resolver) + NAMESPACE_END(Logging) NAMESPACE_BEGIN(Debug) CVar(Info, "Debug info", false, NOSAVE); @@ -879,6 +876,5 @@ namespace Vars CVar(VisualizeTraces, "Visualize traces", false, NOSAVE); CVar(VisualizeTraceHits, "Visualize trace hits", false, NOSAVE); #endif - NAMESPACE_END(Debug); - -} \ No newline at end of file + NAMESPACE_END(Debug) +NAMESPACE_END(Vars) \ No newline at end of file