diff --git a/GGSTEnhancer/GGSTEnhancer/Badges.h b/GGSTEnhancer/GGSTEnhancer/Badges.h new file mode 100644 index 0000000..df8e09f --- /dev/null +++ b/GGSTEnhancer/GGSTEnhancer/Badges.h @@ -0,0 +1,3 @@ +#pragma once +//RED\Content\Shared\DataTable\Badges.uasset +int BADGES[] = {1000, 1001, 1002, 1003, 2010, 2021, 2031, 2041, 2052, 2062, 2072, 2083, 2093, 2103, 3009, 4001, 4002, 4003, 100009, 101009, 102009, 501000, 501001, 501002, 501003, 502019, 502029, 502039, 502049, 502059, 502069, 502079, 502089, 502099, 502109, 502119, 502129, 502139, 502149, 502159, 502169, 502179, 502189, 502199, 502209, 502219, 502229, 502239, 502249, 502259, 502269, 502279, 502289, 502299, 502309, 502319, 502329, 503009, 504000, 504001, 504002, 504003, 505001, 505002, 505003, 506011, 506012, 506013, 506021, 506022, 506023, 506031, 506032, 506033, 506041, 506042, 506043, 506051, 506052, 506053, 506061, 506062, 506063, 506071, 506072, 506073, 506081, 506082, 506083, 506091, 506092, 506093, 506101, 506102, 506103, 506111, 506112, 506113, 506121, 506122, 506123, 506131, 506132, 506133, 506141, 506142, 506143, 506151, 506152, 506153, 506161, 506162, 506163, 506171, 506172, 506173, 506181, 506182, 506183, 506191, 506192, 506193, 506201, 506202, 506203, 506211, 506212, 506213, 506221, 506222, 506223, 506231, 506232, 506233, 506241, 506242, 506243, 506251, 506252, 506253, 506261, 506262, 506263, 506271, 506272, 506273, 506281, 506282, 506283, 506291, 506292, 506293, 506301, 506302, 506303, 506311, 506312, 506313, 506321, 506322, 506323, 507001, 507002, 507003, 508001, 508002, 508003, 509001, 509002, 509003, 510001, 510002, 510003, 700019, 700029, 700039, 700049, 700059, 700069, 700079, 700089, 700099, 700109, 700119, 700129, 700139, 700149, 700159, 700169, 700179, 700189, 700199, 700209, 700219, 700229, 700239, 700249, 700259, 700269, 700279, 700289, 700299, 700309, 700319, 700329}; diff --git a/GGSTEnhancer/GGSTEnhancer/Characters.h b/GGSTEnhancer/GGSTEnhancer/Characters.h new file mode 100644 index 0000000..ffd4699 --- /dev/null +++ b/GGSTEnhancer/GGSTEnhancer/Characters.h @@ -0,0 +1,25 @@ +#pragma once +#define SOL 0 +#define KY 1 +#define MAY 2 +#define AXL 3 +#define CHIPP 4 +#define POTEMPKIN 5 +#define FAUST 6 +#define MILLIA 7 +#define ZATO 8 +#define RAM 9 +#define LEO 10 +#define NAGO 11 +#define GIOVANNA 12 +#define ANJI 13 +#define INO 14 +#define GOLDLEWIS 15 +#define JACKO 16 +#define HC 17 +#define BAIKEN 18 +#define TESTAMENT 19 +#define BRIDGET 20 +#define SIN 21 +#define BEDMAN 22 +#define ASUKA 23 diff --git a/GGSTEnhancer/GGSTEnhancer/Colors.h b/GGSTEnhancer/GGSTEnhancer/Colors.h new file mode 100644 index 0000000..e1bad0e --- /dev/null +++ b/GGSTEnhancer/GGSTEnhancer/Colors.h @@ -0,0 +1,10 @@ +#pragma once +#define COLORMIN 0 +#define COLORLIMIT 15 +#define TESTCOLOR 23 +#define BETACOLOR 27 +#define ALTCOLOR 69 +#define EXCOLOR 79 +#define SPCOLOR 89 +#define STORYCOLOR 98 +#define COLORMAX 99 diff --git a/GGSTEnhancer/GGSTEnhancer/Features.cpp b/GGSTEnhancer/GGSTEnhancer/Features.cpp index 484410d..9b656ad 100644 --- a/GGSTEnhancer/GGSTEnhancer/Features.cpp +++ b/GGSTEnhancer/GGSTEnhancer/Features.cpp @@ -1,5 +1,8 @@ #include "Features.h" #include "Helpers.h" +#include "Characters.h" +#include "Colors.h" +#include "Badges.h" bool UnlockColorSelection() { @@ -15,9 +18,10 @@ bool UnlockColorSelection() BYTE* MiniSelectionLimitIncrement = PatternScan("83 FA 4F 7E ? 89 B3 3C 04 00 00"); if (!MiniSelectionLimitIncrement) return false; - BYTE* Orig_IsSelectableCharaColorID = PatternScan("48 89 5C 24 08 48 89 74 24 10 55 57 41 54 41 56 41 57 48 8B EC 48 83 EC ? 33 DB"); + BYTE* Orig_IsSelectableCharaColorID = PatternScan("48 89 5C 24 08 48 89 74 24 10 48 89 7C 24 20 55 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC ? 45 33 ED 8B DA"); if (!Orig_IsSelectableCharaColorID) return false; + BYTE SelectionLimitIncrementPatch[] = { 0x83, 0x78, 0x0C, 0x62 }; //cmp dword ptr [rax+0Ch], 62h Patch(SelectionLimitIncrementPatch, SelectionLimitIncrement, sizeof(SelectionLimitIncrementPatch)); @@ -41,11 +45,16 @@ bool UnlockColorSelection() bool UncensorMuseum() { - BYTE* MuseumFigureNSFWFlagSetter = PatternScan("0F B6 43 61 48 8B 5C 24 30"); - if (!MuseumFigureNSFWFlagSetter) return false; + BYTE* MuseumFigureNSFWFlagSetterList = PatternScan("0F B6 43 61 48 8B 5C 24 30"); + if (!MuseumFigureNSFWFlagSetterList) return false; + + BYTE* MuseumFigureNSFWFlagSetterModal = PatternScan("0F B6 43 61 88 47 61 0F B6 43 68 88 47 68 0F B6 43 70 88 47 70 8B 43 74 89 47 74 8B 43 78 89 47 78 E8 ? ? ? ? 48 8B 83 90 00 00 00 48 89 87 90 00 00 00 48 8B 83 98 00 00 00 48 89 87 98 00 00 00 8B 83 A0 00 00 00 89 87 A0 00 00 00 8B 83 A4 00 00 00 89 87 A4 00 00 00 0F B6 83 A8 00 00 00 48 8B 5C 24 30 88 87 A8 00 00 00 48 8B C7 48 83 C4 ? 5F C3 CC CC CC CC CC 40 57"); + if (!MuseumFigureNSFWFlagSetterModal) return false; BYTE MuseumFigureNSFWFlagSetterPatch[] = { 0x30, 0xC0, 0x90, 0x90 }; //xor al, al (nop nop) - Patch(MuseumFigureNSFWFlagSetterPatch, MuseumFigureNSFWFlagSetter, sizeof(MuseumFigureNSFWFlagSetterPatch)); + + Patch(MuseumFigureNSFWFlagSetterPatch, MuseumFigureNSFWFlagSetterList, sizeof(MuseumFigureNSFWFlagSetterPatch)); + Patch(MuseumFigureNSFWFlagSetterPatch, MuseumFigureNSFWFlagSetterModal, sizeof(MuseumFigureNSFWFlagSetterPatch)); return true; } @@ -72,14 +81,17 @@ bool UnlockAura() BYTE* Orig_CheckRewardAura = PatternScan("48 89 5C 24 20 55 56 57 48 83 EC ? 48 8B D9 48 8D 4C 24 40"); if (!Orig_CheckRewardAura) return false; - //Find them with: 48 83 EC ? 8D 42 FF 45 8B D0 - Orig_SetRewardAvatarAura = reinterpret_cast(PatternScan("48 89 5C 24 10 57 48 83 EC ? 8B FA 48 8B D9 85 D2 0F 8E ? ? ? ? 48 8D 4C 24 40 48 89 74 24 30 E8 ? ? ? ? 48 8D 4C 24 40 E8 ? ? ? ? 8B F0 48 8D 4C 24 40 C1 E6 ? E8 ? ? ? ? 0B F0 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C7 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C6 48 8B 10 E8 ? ? ? ? 48 8B 74 24 30 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 8B 81 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 89 5C 24 10")); - if (!Orig_SetRewardAvatarAura) return false; + //Find them with: 48 83 EC ? 8D 42 FF 45 8B D0 (NetworkGiftManager::AddSaveDataParam) + //Case 2: + Orig_SetRewardAvatarAura = reinterpret_cast(PatternScan("48 89 5C 24 10 57 48 83 EC ? 8B FA 48 8B D9 85 D2 0F 8E ? ? ? ? 48 8D 4C 24 40 48 89 74 24 30 E8 ? ? ? ? 48 8D 4C 24 40 E8 ? ? ? ? 8B F0 48 8D 4C 24 40 C1 E6 ? E8 ? ? ? ? 0B F0 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C7 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C6 48 8B 10 E8 ? ? ? ? 48 8B 74 24 30 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 8B 81 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 89 5C 24 08 44 89 44 24 18")); + if (!Orig_SetRewardAvatarAura) return false;; - Orig_SetRewardNameAura = reinterpret_cast(PatternScan("48 89 5C 24 10 57 48 83 EC ? 8B FA 48 8B D9 85 D2 0F 8E ? ? ? ? 48 8D 4C 24 40 48 89 74 24 30 E8 ? ? ? ? 48 8D 4C 24 40 E8 ? ? ? ? 8B F0 48 8D 4C 24 40 C1 E6 ? E8 ? ? ? ? 0B F0 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C7 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C6 48 8B 10 E8 ? ? ? ? 48 8B 74 24 30 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 8B 81 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 89 5C 24 08")); + //Case 3: + Orig_SetRewardNameAura = reinterpret_cast(PatternScan("48 89 5C 24 10 57 48 83 EC ? 8B FA 48 8B D9 85 D2 0F 8E ? ? ? ? 48 8D 4C 24 40 48 89 74 24 30 E8 ? ? ? ? 48 8D 4C 24 40 E8 ? ? ? ? 8B F0 48 8D 4C 24 40 C1 E6 ? E8 ? ? ? ? 0B F0 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C7 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 48 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 44 8B C6 48 8B 10 E8 ? ? ? ? 48 8B 74 24 30 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 8B 81 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 83 28 01 00 00 48 85 C0 74 ? 48 8B 15 ? ? ? ? 48 8D 4C 24 40 41 B8 ? ? ? ? E8 ? ? ? ? 48 8B 8B 28 01 00 00 45 33 C0 48 8B 10 E8 ? ? ? ? 48 8B 5C 24 38 48 83 C4 ? 5F C3 48 89 5C 24 08 4C 8B 91 28 04 00 00")); if (!Orig_SetRewardNameAura) return false; - Orig_SetRewardBadge = reinterpret_cast(PatternScan("48 89 5C 24 10 55 56 41 54 41 56 41 57 48 83 EC")); + //Case 4: + Orig_SetRewardBadge = reinterpret_cast(PatternScan("48 89 5C 24 08 44 89 44 24 18 55 56 57 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC ? 4C 8B E9")); if (!Orig_SetRewardBadge) return false; Detour64(Orig_CheckRewardAura, (BYTE*)hk_CheckRewardAura, 12); @@ -91,15 +103,16 @@ char __fastcall hk_IsSelectableCharaColorID(unsigned int charaID, unsigned int c { if (bUnlockNonexistentColors) { - return (colorID >= 0 && colorID < 99); + return (colorID >= COLORMIN && colorID < COLORMAX); } - else { - return (colorID >= 0 && colorID < 12) || colorID == 89 || // Universal Colors - (charaID == 0 && colorID == 27) || // Color 28 for Sol - ((charaID == 7 || charaID == 8 || charaID == 9 || charaID == 10) && colorID == 23) || // Test Color for Millia, Zato, Ramlethal and Leo - (charaID == 18 && colorID == 69) || // Color 70 for Baiken - ((charaID == 0 || charaID == 1 || charaID == 14 || charaID == 18) && colorID == 79) || // EX Color for Sol, Ky, I-No and Baiken - ((charaID == 11 || charaID == 14 || charaID == 16) && colorID == 98) // Story Color for Nagoriyuki, I-No and Jack-O + else + { + return (colorID >= COLORMIN && colorID < COLORLIMIT) || colorID == SPCOLOR || + (charaID == SOL && colorID == BETACOLOR) || + ((charaID == MILLIA || charaID == ZATO || charaID == RAM || charaID == LEO) && colorID == TESTCOLOR) || + (charaID == BAIKEN && colorID == ALTCOLOR) || + ((charaID == SOL || charaID == KY || charaID == INO || charaID == BAIKEN) && colorID == EXCOLOR) || + ((charaID == NAGO || charaID == INO || charaID == JACKO || charaID == ASUKA) && colorID == STORYCOLOR) ; } } @@ -111,8 +124,10 @@ __int64 __fastcall hk_CheckRewardAura(__int64 UREDPlayerData) if (bGetRewardBadges) { - Orig_SetRewardBadge(UREDPlayerData, 3009, 1); //Times in top badge - Orig_SetRewardBadge(UREDPlayerData, 503009, 1); //Wins badge + for (int badgeID : BADGES) + { + Orig_SetRewardBadge(UREDPlayerData, badgeID, 1); + } } return 0; diff --git a/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj b/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj index d794d0c..f6a0170 100644 --- a/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj +++ b/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj @@ -145,6 +145,9 @@ + + + diff --git a/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj.filters b/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj.filters index 820d5b9..691b4d8 100644 --- a/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj.filters +++ b/GGSTEnhancer/GGSTEnhancer/GGSTEnhancer.vcxproj.filters @@ -21,6 +21,15 @@ Header Files + + Header Files + + + Header Files + + + Header Files +