From 234c58161ef121b10d65dd37907842a4c980738a Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Wed, 28 Jul 2021 00:34:56 +0200 Subject: [PATCH 01/16] colorblind friendly team colors! --- src/Components/Modules/Colors.cpp | 33 +++++++++++++++++++++++++++++++ src/Components/Modules/Colors.hpp | 1 + 2 files changed, 34 insertions(+) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 863cd821..cc98da81 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -218,8 +218,41 @@ namespace Components } } + + // Patches team overhead normally + signed int __cdecl Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) { + + if (Dvar::Var("r_colorBlindTeams").get()) { + auto str = std::string(name); + if (str.compare("g_TeamColor_EnemyTeam") == 0) { + // A dark red + color[0] = 0.659f; + color[1] = 0.088f; + color[2] = 0.145f; + return 0; + } + else if (str.compare("g_TeamColor_MyTeam") == 0) { + // A bright yellow + color[0] = 1.f; + color[1] = 0.859f; + color[2] = 0.125f; + return 0; + } + } + + return Utils::Hook::Call(0x406530)(name, color); + } + Colors::Colors() { + // Add a colorblind mode for team colors + Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); + Utils::Hook(0x4C09BE, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); + Utils::Hook(0x583661, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); + Utils::Hook(0x5836A5, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); + Utils::Hook(0x4264FC, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); + Utils::Hook(0x4264E5, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); + // Disable SV_UpdateUserinfo_f, to block changing the name ingame Utils::Hook::Set(0x6258D0, 0xC3); diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index 84dd1bc8..b63aa51d 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -35,6 +35,7 @@ namespace Components static void LookupColor(DWORD* color, char index); static void LookupColorStub(); static char* CleanStrStub(char* string); + static signed int Dvar_GetUnpackedColorByName(const char* name, float* color); static std::vector ColorTable; }; } From 86a2159c17f251ad631fd47154543a232bcb1524 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 28 Jul 2021 09:33:49 +0200 Subject: [PATCH 02/16] Color dvar --- src/Components/Modules/Colors.cpp | 18 +++++++++++------- src/Components/Modules/Colors.hpp | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index cc98da81..a64b9f3f 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -3,6 +3,7 @@ namespace Components { Dvar::Var Colors::NewColors; + Dvar::Var Colors::ColorBlind; std::vector Colors::ColorTable; DWORD Colors::HsvToRgb(Colors::HsvColor hsv) @@ -220,18 +221,21 @@ namespace Components // Patches team overhead normally - signed int __cdecl Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) { - - if (Dvar::Var("r_colorBlindTeams").get()) { + signed int __cdecl Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) + { + if (Colors::ColorBlind.get()) + { auto str = std::string(name); - if (str.compare("g_TeamColor_EnemyTeam") == 0) { + if (str.compare("g_TeamColor_EnemyTeam") == 0) + { // A dark red color[0] = 0.659f; color[1] = 0.088f; color[2] = 0.145f; return 0; } - else if (str.compare("g_TeamColor_MyTeam") == 0) { + else if (str.compare("g_TeamColor_MyTeam") == 0) + { // A bright yellow color[0] = 1.f; color[1] = 0.859f; @@ -246,7 +250,7 @@ namespace Components Colors::Colors() { // Add a colorblind mode for team colors - Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); + Colors::ColorBlind = Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); Utils::Hook(0x4C09BE, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); Utils::Hook(0x583661, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); Utils::Hook(0x5836A5, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); @@ -272,7 +276,7 @@ namespace Components Utils::Hook(0x4AD470, Colors::CleanStrStub, HOOK_JUMP).install()->quick(); // Register dvar - Colors::NewColors = Dvar::Register("cg_newColors", true, Game::dvar_flag::DVAR_FLAG_SAVED, "Use Warfare² color code style."); + Colors::NewColors = Dvar::Register("cg_newColors", true, Game::dvar_flag::DVAR_FLAG_SAVED, "Use Warfare� color code style."); Game::Dvar_RegisterColor("sv_customTextColor", 1, 0.7f, 0, 1, Game::dvar_flag::DVAR_FLAG_REPLICATED, "Color for the extended color code."); Dvar::Register("sv_allowColoredNames", true, Game::dvar_flag::DVAR_FLAG_NONE, "Allow colored names on the server"); diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index b63aa51d..638ce070 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -22,6 +22,7 @@ namespace Components }; static Dvar::Var NewColors; + static Dvar::Var ColorBlind; static DWORD HsvToRgb(HsvColor hsv); From ff50ecfddf6b1478a141c2c6db8f7e28f1c24d2c Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 28 Jul 2021 09:35:21 +0200 Subject: [PATCH 03/16] 2 --- src/Components/Modules/Colors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index a64b9f3f..fef490fb 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -276,7 +276,7 @@ namespace Components Utils::Hook(0x4AD470, Colors::CleanStrStub, HOOK_JUMP).install()->quick(); // Register dvar - Colors::NewColors = Dvar::Register("cg_newColors", true, Game::dvar_flag::DVAR_FLAG_SAVED, "Use Warfare� color code style."); + Colors::NewColors = Dvar::Register("cg_newColors", true, Game::dvar_flag::DVAR_FLAG_SAVED, "Use Warfare² color code style."); Game::Dvar_RegisterColor("sv_customTextColor", 1, 0.7f, 0, 1, Game::dvar_flag::DVAR_FLAG_REPLICATED, "Color for the extended color code."); Dvar::Register("sv_allowColoredNames", true, Game::dvar_flag::DVAR_FLAG_NONE, "Allow colored names on the server"); From ecf44c85803adaaf40c31a9cd5904014b2aaa70c Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 28 Jul 2021 13:48:46 +0200 Subject: [PATCH 04/16] Jump hook --- src/Components/Modules/Colors.cpp | 42 +++++++++++++++++++++++++------ src/Components/Modules/Colors.hpp | 3 ++- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index fef490fb..9fe4c4f4 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -221,7 +221,7 @@ namespace Components // Patches team overhead normally - signed int __cdecl Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) + int Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) { if (Colors::ColorBlind.get()) { @@ -244,18 +244,46 @@ namespace Components } } - return Utils::Hook::Call(0x406530)(name, color); + return 1; + } + + __declspec(naked) void Colors::GetUnpackedColorByNameStub() + { + __asm + { + push eax + pushad + + push [esp + 2Ch] + push [esp + 2Ch]; + call Colors::Dvar_GetUnpackedColorByName + add esp, 8h + + mov [esp + 20h], eax + + popad + pop eax + + test eax, eax + jnz continue + + xor eax, eax + retn + + continue: + push edi + mov edi, dword ptr[esp + 4h] + + push 406535h + retn + } } Colors::Colors() { // Add a colorblind mode for team colors Colors::ColorBlind = Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); - Utils::Hook(0x4C09BE, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); - Utils::Hook(0x583661, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); - Utils::Hook(0x5836A5, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); - Utils::Hook(0x4264FC, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); - Utils::Hook(0x4264E5, Colors::Dvar_GetUnpackedColorByName, HOOK_CALL).install()->quick(); + Utils::Hook(0x406530, Colors::GetUnpackedColorByNameStub, HOOK_JUMP).install()->quick(); // Disable SV_UpdateUserinfo_f, to block changing the name ingame Utils::Hook::Set(0x6258D0, 0xC3); diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index 638ce070..bc38391a 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -36,7 +36,8 @@ namespace Components static void LookupColor(DWORD* color, char index); static void LookupColorStub(); static char* CleanStrStub(char* string); - static signed int Dvar_GetUnpackedColorByName(const char* name, float* color); + static int Dvar_GetUnpackedColorByName(const char* name, float* color); + static void GetUnpackedColorByNameStub(); static std::vector ColorTable; }; } From b728729ceb0aa8a2734ce7eeb8fa2270cb4ae229 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 28 Jul 2021 14:40:43 +0200 Subject: [PATCH 05/16] Correct one mistake --- src/Components/Modules/Colors.cpp | 25 +++++++++++++------------ src/Components/Modules/Colors.hpp | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 9fe4c4f4..a80c958b 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -221,7 +221,7 @@ namespace Components // Patches team overhead normally - int Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) + bool Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) { if (Colors::ColorBlind.get()) { @@ -232,7 +232,7 @@ namespace Components color[0] = 0.659f; color[1] = 0.088f; color[2] = 0.145f; - return 0; + return false; } else if (str.compare("g_TeamColor_MyTeam") == 0) { @@ -240,11 +240,11 @@ namespace Components color[0] = 1.f; color[1] = 0.859f; color[2] = 0.125f; - return 0; + return false; } } - return 1; + return true; } __declspec(naked) void Colors::GetUnpackedColorByNameStub() @@ -255,7 +255,7 @@ namespace Components pushad push [esp + 2Ch] - push [esp + 2Ch]; + push [esp + 2Ch] call Colors::Dvar_GetUnpackedColorByName add esp, 8h @@ -264,17 +264,18 @@ namespace Components popad pop eax - test eax, eax - jnz continue + test al, al + jz dontContinue - xor eax, eax - retn - - continue: + mov eax, [esp + 8] push edi mov edi, dword ptr[esp + 4h] - push 406535h + mov ecx, 406535h + jmp ecx + + dontContinue: + xor eax, eax retn } } diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index bc38391a..9729dc2f 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -36,7 +36,7 @@ namespace Components static void LookupColor(DWORD* color, char index); static void LookupColorStub(); static char* CleanStrStub(char* string); - static int Dvar_GetUnpackedColorByName(const char* name, float* color); + static bool Dvar_GetUnpackedColorByName(const char* name, float* color); static void GetUnpackedColorByNameStub(); static std::vector ColorTable; }; From e025f3420e95af0f358a84207231a5bc0de25213 Mon Sep 17 00:00:00 2001 From: Edoardo Sanguineti Date: Wed, 28 Jul 2021 14:57:13 +0200 Subject: [PATCH 06/16] Removed unnecessary spaces --- src/Components/Modules/Colors.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index a80c958b..7c0172ba 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -219,7 +219,6 @@ namespace Components } } - // Patches team overhead normally bool Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) { @@ -260,7 +259,6 @@ namespace Components add esp, 8h mov [esp + 20h], eax - popad pop eax @@ -270,7 +268,6 @@ namespace Components mov eax, [esp + 8] push edi mov edi, dword ptr[esp + 4h] - mov ecx, 406535h jmp ecx From 22f33921b6127375efc706c6fe96457621c7ad03 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 28 Jul 2021 21:44:17 +0200 Subject: [PATCH 07/16] Use push ecx is not destroyed --- src/Components/Modules/Colors.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 7c0172ba..c1b338c4 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -268,8 +268,8 @@ namespace Components mov eax, [esp + 8] push edi mov edi, dword ptr[esp + 4h] - mov ecx, 406535h - jmp ecx + push 406535h + retn dontContinue: xor eax, eax From 8b4f177fccaddd8a7dc9317580f7a254252ef089 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Thu, 29 Jul 2021 10:11:27 +0200 Subject: [PATCH 08/16] Minor --- src/Components/Modules/AssetHandler.cpp | 6 +++--- src/Components/Modules/Colors.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Components/Modules/AssetHandler.cpp b/src/Components/Modules/AssetHandler.cpp index aa3d2faf..cd507f14 100644 --- a/src/Components/Modules/AssetHandler.cpp +++ b/src/Components/Modules/AssetHandler.cpp @@ -286,7 +286,7 @@ namespace Components push [esp + 2Ch] push [esp + 2Ch] call AssetHandler::IsAssetEligible - add esp, 08h + add esp, 8h mov [esp + 20h], eax popad @@ -295,13 +295,13 @@ namespace Components test al, al jz doNotLoad - mov eax, [esp + 8] + mov eax, [esp + 8h] sub esp, 14h mov ecx, 5BB657h jmp ecx doNotLoad: - mov eax, [esp + 8] + mov eax, [esp + 8h] retn } } diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index c1b338c4..070a769b 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -265,7 +265,7 @@ namespace Components test al, al jz dontContinue - mov eax, [esp + 8] + mov eax, [esp + 8h] push edi mov edi, dword ptr[esp + 4h] push 406535h From a3d9c9bd756433d8f22d90670824be8908689917 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Thu, 29 Jul 2021 10:47:16 +0200 Subject: [PATCH 09/16] Remove asm instruction I shamelessly copied --- src/Components/Modules/Colors.cpp | 1 - src/Components/Modules/Localization.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 070a769b..e8b81b6b 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -265,7 +265,6 @@ namespace Components test al, al jz dontContinue - mov eax, [esp + 8h] push edi mov edi, dword ptr[esp + 4h] push 406535h diff --git a/src/Components/Modules/Localization.cpp b/src/Components/Modules/Localization.cpp index 242c4cb5..2d996b0d 100644 --- a/src/Components/Modules/Localization.cpp +++ b/src/Components/Modules/Localization.cpp @@ -193,6 +193,7 @@ namespace Components "Killera", "Lithium", "Louvenarde", + "FutureRave", "OneFourOne", "quaK", "RaidMax", From e2d3f0aa3583f0b4eebf7b158675c98542ae1a3e Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sat, 31 Jul 2021 19:28:08 +0200 Subject: [PATCH 10/16] Finally a working stub --- src/Components/Modules/Colors.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index e8b81b6b..8f846ea7 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -225,7 +225,7 @@ namespace Components if (Colors::ColorBlind.get()) { auto str = std::string(name); - if (str.compare("g_TeamColor_EnemyTeam") == 0) + if (!str.compare("g_TeamColor_EnemyTeam")) { // A dark red color[0] = 0.659f; @@ -233,7 +233,7 @@ namespace Components color[2] = 0.145f; return false; } - else if (str.compare("g_TeamColor_MyTeam") == 0) + else if (!str.compare("g_TeamColor_MyTeam")) { // A bright yellow color[0] = 1.f; @@ -250,28 +250,20 @@ namespace Components { __asm { - push eax - pushad - - push [esp + 2Ch] - push [esp + 2Ch] + push [esp + 8h] + push [esp + 8h] call Colors::Dvar_GetUnpackedColorByName add esp, 8h - mov [esp + 20h], eax - popad - pop eax - test al, al - jz dontContinue + jnz continue - push edi - mov edi, dword ptr[esp + 4h] - push 406535h retn - dontContinue: - xor eax, eax + continue: + push edi + mov edi, [esp + 8h] + push 406535h retn } } From 7d8f01b223a1f49268fbfa9023859f05c4094404 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sat, 31 Jul 2021 19:31:37 +0200 Subject: [PATCH 11/16] The game does not display this character --- src/Components/Modules/Colors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 8f846ea7..52ad1f77 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -293,7 +293,7 @@ namespace Components Utils::Hook(0x4AD470, Colors::CleanStrStub, HOOK_JUMP).install()->quick(); // Register dvar - Colors::NewColors = Dvar::Register("cg_newColors", true, Game::dvar_flag::DVAR_FLAG_SAVED, "Use Warfare² color code style."); + Colors::NewColors = Dvar::Register("cg_newColors", true, Game::dvar_flag::DVAR_FLAG_SAVED, "Use Warfare 2 color code style."); Game::Dvar_RegisterColor("sv_customTextColor", 1, 0.7f, 0, 1, Game::dvar_flag::DVAR_FLAG_REPLICATED, "Color for the extended color code."); Dvar::Register("sv_allowColoredNames", true, Game::dvar_flag::DVAR_FLAG_NONE, "Allow colored names on the server"); From de0c3b2762f3cb7462d98a82392dcd56905b121a Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 1 Aug 2021 10:35:59 +0200 Subject: [PATCH 12/16] Color blind dvars --- src/Components/Modules/Colors.cpp | 19 +++++++++++++------ src/Components/Modules/Colors.hpp | 2 ++ src/Game/Functions.cpp | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 52ad1f77..e54af12c 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -4,6 +4,9 @@ namespace Components { Dvar::Var Colors::NewColors; Dvar::Var Colors::ColorBlind; + Dvar::Var Colors::ColorAlly; + Dvar::Var Colors::ColorEnemy; + std::vector Colors::ColorTable; DWORD Colors::HsvToRgb(Colors::HsvColor hsv) @@ -228,17 +231,19 @@ namespace Components if (!str.compare("g_TeamColor_EnemyTeam")) { // A dark red - color[0] = 0.659f; - color[1] = 0.088f; - color[2] = 0.145f; + auto* colorlindEnemy = Colors::ColorEnemy.get(); + color[0] = colorlindEnemy[0]; + color[1] = colorlindEnemy[1]; + color[2] = colorlindEnemy[2]; return false; } else if (!str.compare("g_TeamColor_MyTeam")) { // A bright yellow - color[0] = 1.f; - color[1] = 0.859f; - color[2] = 0.125f; + auto* colorblindAlly = Colors::ColorAlly.get(); + color[0] = colorblindAlly[0]; + color[1] = colorblindAlly[1]; + color[2] = colorblindAlly[2]; return false; } } @@ -272,6 +277,8 @@ namespace Components { // Add a colorblind mode for team colors Colors::ColorBlind = Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); + Colors::ColorEnemy = Game::Dvar_RegisterVec4("g_TeamColor_EnemyTeam_Color", 0.659f, 0.088f, 0.145f, 1, 0, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Enemy team color"); + Colors::ColorAlly = Game::Dvar_RegisterVec4("g_TeamColor_MyTeam_Color", 1, 0.859f, 0.125f, 1, 0, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Allied team color"); Utils::Hook(0x406530, Colors::GetUnpackedColorByNameStub, HOOK_JUMP).install()->quick(); // Disable SV_UpdateUserinfo_f, to block changing the name ingame diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index 9729dc2f..a964c674 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -23,6 +23,8 @@ namespace Components static Dvar::Var NewColors; static Dvar::Var ColorBlind; + static Dvar::Var ColorAlly; + static Dvar::Var ColorEnemy; static DWORD HsvToRgb(HsvColor hsv); diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index cb4a819f..0ed7b3cc 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -99,11 +99,11 @@ namespace Game Dvar_RegisterFloat_t Dvar_RegisterFloat = Dvar_RegisterFloat_t(0x648440); Dvar_RegisterVec2_t Dvar_RegisterVec2 = Dvar_RegisterVec2_t(0x4F6070); Dvar_RegisterVec3_t Dvar_RegisterVec3 = Dvar_RegisterVec3_t(0x4EF8E0); - Dvar_RegisterVec4_t Dvar_RegisterVec4 = Dvar_RegisterVec4_t(0x4F28E0); + Dvar_RegisterVec4_t Dvar_RegisterVec4 = Dvar_RegisterVec4_t(0x471500); Dvar_RegisterInt_t Dvar_RegisterInt = Dvar_RegisterInt_t(0x479830); Dvar_RegisterEnum_t Dvar_RegisterEnum = Dvar_RegisterEnum_t(0x412E40); Dvar_RegisterString_t Dvar_RegisterString = Dvar_RegisterString_t(0x4FC7E0); - Dvar_RegisterColor_t Dvar_RegisterColor = Dvar_RegisterColor_t(0x4F28E0);//0x471500; + Dvar_RegisterColor_t Dvar_RegisterColor = Dvar_RegisterColor_t(0x4F28E0); Dvar_GetUnpackedColorByName_t Dvar_GetUnpackedColorByName = Dvar_GetUnpackedColorByName_t(0x406530); Dvar_FindVar_t Dvar_FindVar = Dvar_FindVar_t(0x4D5390); From b9087698dfb08f82ec74128e1989e58c0dc17492 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 1 Aug 2021 10:39:40 +0200 Subject: [PATCH 13/16] forgot about alpha value --- src/Components/Modules/Colors.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index e54af12c..15407879 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -235,6 +235,7 @@ namespace Components color[0] = colorlindEnemy[0]; color[1] = colorlindEnemy[1]; color[2] = colorlindEnemy[2]; + color[3] = colorlindEnemy[3]; return false; } else if (!str.compare("g_TeamColor_MyTeam")) @@ -244,6 +245,7 @@ namespace Components color[0] = colorblindAlly[0]; color[1] = colorblindAlly[1]; color[2] = colorblindAlly[2]; + color[3] = colorblindAlly[3]; return false; } } From a5680fdc619e25672dae611b03f4ff488d2347cb Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 1 Aug 2021 13:30:11 +0200 Subject: [PATCH 14/16] Color dvar --- src/Components/Modules/Colors.cpp | 30 +++++++++++++++--------------- src/Components/Modules/Colors.hpp | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 15407879..6951a95e 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -4,8 +4,8 @@ namespace Components { Dvar::Var Colors::NewColors; Dvar::Var Colors::ColorBlind; - Dvar::Var Colors::ColorAlly; - Dvar::Var Colors::ColorEnemy; + Game::dvar_t* Colors::ColorAlly; + Game::dvar_t* Colors::ColorEnemy; std::vector Colors::ColorTable; @@ -223,7 +223,7 @@ namespace Components } // Patches team overhead normally - bool Colors::Dvar_GetUnpackedColorByName(const char* name, float* color) + bool Colors::Dvar_GetUnpackedColorByName(const char* name, float* expandedColor) { if (Colors::ColorBlind.get()) { @@ -231,21 +231,21 @@ namespace Components if (!str.compare("g_TeamColor_EnemyTeam")) { // A dark red - auto* colorlindEnemy = Colors::ColorEnemy.get(); - color[0] = colorlindEnemy[0]; - color[1] = colorlindEnemy[1]; - color[2] = colorlindEnemy[2]; - color[3] = colorlindEnemy[3]; + auto* colorblindEnemy = Colors::ColorEnemy->current.color; + *expandedColor = (float)(unsigned __int8)colorblindEnemy[0] / 255.0f; + expandedColor[1] = (float)(unsigned __int8)colorblindEnemy[1] / 255.0f; + expandedColor[2] = (float)(unsigned __int8)colorblindEnemy[2] / 255.0f; + expandedColor[3] = (float)(unsigned __int8)colorblindEnemy[3] / 255.0f; return false; } else if (!str.compare("g_TeamColor_MyTeam")) { // A bright yellow - auto* colorblindAlly = Colors::ColorAlly.get(); - color[0] = colorblindAlly[0]; - color[1] = colorblindAlly[1]; - color[2] = colorblindAlly[2]; - color[3] = colorblindAlly[3]; + auto* colorblindAlly = Colors::ColorAlly->current.color; + *expandedColor = (float)(unsigned __int8)colorblindAlly[0] / 255.0f; + expandedColor[1] = (float)(unsigned __int8)colorblindAlly[1] / 255.0f; + expandedColor[2] = (float)(unsigned __int8)colorblindAlly[2] / 255.0f; + expandedColor[3] = (float)(unsigned __int8)colorblindAlly[3] / 255.0f; return false; } } @@ -279,8 +279,8 @@ namespace Components { // Add a colorblind mode for team colors Colors::ColorBlind = Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); - Colors::ColorEnemy = Game::Dvar_RegisterVec4("g_TeamColor_EnemyTeam_Color", 0.659f, 0.088f, 0.145f, 1, 0, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Enemy team color"); - Colors::ColorAlly = Game::Dvar_RegisterVec4("g_TeamColor_MyTeam_Color", 1, 0.859f, 0.125f, 1, 0, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Allied team color"); + Colors::ColorEnemy = Game::Dvar_RegisterColor("g_ColorBlind_EnemyTeam", 0.659f, 0.088f, 0.145f, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Enemy team color for colorblind mode"); + Colors::ColorAlly = Game::Dvar_RegisterColor("g_ColorBlind_MyTeam", 1, 0.859f, 0.125f, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Ally team color for colorblind mode"); Utils::Hook(0x406530, Colors::GetUnpackedColorByNameStub, HOOK_JUMP).install()->quick(); // Disable SV_UpdateUserinfo_f, to block changing the name ingame diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index a964c674..657d47d7 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -23,8 +23,8 @@ namespace Components static Dvar::Var NewColors; static Dvar::Var ColorBlind; - static Dvar::Var ColorAlly; - static Dvar::Var ColorEnemy; + static Game::dvar_t* ColorAlly; + static Game::dvar_t* ColorEnemy; static DWORD HsvToRgb(HsvColor hsv); @@ -38,7 +38,7 @@ namespace Components static void LookupColor(DWORD* color, char index); static void LookupColorStub(); static char* CleanStrStub(char* string); - static bool Dvar_GetUnpackedColorByName(const char* name, float* color); + static bool Dvar_GetUnpackedColorByName(const char* name, float* expandedColor); static void GetUnpackedColorByNameStub(); static std::vector ColorTable; }; From 1bd4bcba0579051c6924566d79eab36ba307f160 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 1 Aug 2021 14:22:42 +0200 Subject: [PATCH 15/16] Color dvar --- src/Components/Modules/Colors.cpp | 38 +++++++++++++++---------------- src/Components/Modules/Colors.hpp | 4 ++-- src/Game/Structs.hpp | 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 6951a95e..8b857600 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -4,8 +4,8 @@ namespace Components { Dvar::Var Colors::NewColors; Dvar::Var Colors::ColorBlind; - Game::dvar_t* Colors::ColorAlly; - Game::dvar_t* Colors::ColorEnemy; + Game::dvar_t* Colors::ColorAllyColorBlind; + Game::dvar_t* Colors::ColorEnemyColorBlind; std::vector Colors::ColorTable; @@ -227,25 +227,23 @@ namespace Components { if (Colors::ColorBlind.get()) { - auto str = std::string(name); - if (!str.compare("g_TeamColor_EnemyTeam")) + const auto str = std::string(name); + if (str == "g_TeamColor_EnemyTeam") { - // A dark red - auto* colorblindEnemy = Colors::ColorEnemy->current.color; - *expandedColor = (float)(unsigned __int8)colorblindEnemy[0] / 255.0f; - expandedColor[1] = (float)(unsigned __int8)colorblindEnemy[1] / 255.0f; - expandedColor[2] = (float)(unsigned __int8)colorblindEnemy[2] / 255.0f; - expandedColor[3] = (float)(unsigned __int8)colorblindEnemy[3] / 255.0f; + auto* colorblindEnemy = Colors::ColorEnemyColorBlind->current.color; + expandedColor[0] = static_cast(colorblindEnemy[0]) / 255.0f; + expandedColor[1] = static_cast(colorblindEnemy[1]) / 255.0f; + expandedColor[2] = static_cast(colorblindEnemy[2]) / 255.0f; + expandedColor[3] = static_cast(colorblindEnemy[3]) / 255.0f; return false; } - else if (!str.compare("g_TeamColor_MyTeam")) + else if (str == "g_TeamColor_MyTeam") { - // A bright yellow - auto* colorblindAlly = Colors::ColorAlly->current.color; - *expandedColor = (float)(unsigned __int8)colorblindAlly[0] / 255.0f; - expandedColor[1] = (float)(unsigned __int8)colorblindAlly[1] / 255.0f; - expandedColor[2] = (float)(unsigned __int8)colorblindAlly[2] / 255.0f; - expandedColor[3] = (float)(unsigned __int8)colorblindAlly[3] / 255.0f; + auto* colorblindAlly = Colors::ColorAllyColorBlind->current.color; + expandedColor[0] = static_cast(colorblindAlly[0]) / 255.0f; + expandedColor[1] = static_cast(colorblindAlly[1]) / 255.0f; + expandedColor[2] = static_cast(colorblindAlly[2]) / 255.0f; + expandedColor[3] = static_cast(colorblindAlly[3]) / 255.0f; return false; } } @@ -279,8 +277,10 @@ namespace Components { // Add a colorblind mode for team colors Colors::ColorBlind = Dvar::Register("r_colorBlindTeams", false, Game::dvar_flag::DVAR_FLAG_SAVED, "Use color-blindness-friendly colors for ingame team names"); - Colors::ColorEnemy = Game::Dvar_RegisterColor("g_ColorBlind_EnemyTeam", 0.659f, 0.088f, 0.145f, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Enemy team color for colorblind mode"); - Colors::ColorAlly = Game::Dvar_RegisterColor("g_ColorBlind_MyTeam", 1, 0.859f, 0.125f, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Ally team color for colorblind mode"); + // A dark red + Colors::ColorEnemyColorBlind = Game::Dvar_RegisterColor("g_ColorBlind_EnemyTeam", 0.659f, 0.088f, 0.145f, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Enemy team color for colorblind mode"); + // A bright yellow + Colors::ColorAllyColorBlind = Game::Dvar_RegisterColor("g_ColorBlind_MyTeam", 1, 0.859f, 0.125f, 1, Game::dvar_flag::DVAR_FLAG_SAVED, "Ally team color for colorblind mode"); Utils::Hook(0x406530, Colors::GetUnpackedColorByNameStub, HOOK_JUMP).install()->quick(); // Disable SV_UpdateUserinfo_f, to block changing the name ingame diff --git a/src/Components/Modules/Colors.hpp b/src/Components/Modules/Colors.hpp index 657d47d7..be1f24de 100644 --- a/src/Components/Modules/Colors.hpp +++ b/src/Components/Modules/Colors.hpp @@ -23,8 +23,8 @@ namespace Components static Dvar::Var NewColors; static Dvar::Var ColorBlind; - static Game::dvar_t* ColorAlly; - static Game::dvar_t* ColorEnemy; + static Game::dvar_t* ColorAllyColorBlind; + static Game::dvar_t* ColorEnemyColorBlind; static DWORD HsvToRgb(HsvColor hsv); diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index 7fdf309a..e64e5d09 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -2347,7 +2347,7 @@ namespace Game float value; float vector[4]; const char *string; - char color[4]; + unsigned char color[4]; }; struct $BFBB53559BEAC4289F32B924847E59CB From 320412551b764d7a1f0896c2488ec2d4fd55a384 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 1 Aug 2021 14:31:32 +0200 Subject: [PATCH 16/16] Added comments --- src/Components/Modules/Colors.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Components/Modules/Colors.cpp b/src/Components/Modules/Colors.cpp index 8b857600..e13f914b 100644 --- a/src/Components/Modules/Colors.cpp +++ b/src/Components/Modules/Colors.cpp @@ -230,6 +230,7 @@ namespace Components const auto str = std::string(name); if (str == "g_TeamColor_EnemyTeam") { + // Dvar_GetUnpackedColor auto* colorblindEnemy = Colors::ColorEnemyColorBlind->current.color; expandedColor[0] = static_cast(colorblindEnemy[0]) / 255.0f; expandedColor[1] = static_cast(colorblindEnemy[1]) / 255.0f; @@ -239,6 +240,7 @@ namespace Components } else if (str == "g_TeamColor_MyTeam") { + // Dvar_GetUnpackedColor auto* colorblindAlly = Colors::ColorAllyColorBlind->current.color; expandedColor[0] = static_cast(colorblindAlly[0]) / 255.0f; expandedColor[1] = static_cast(colorblindAlly[1]) / 255.0f;