From 71ebfb4a80c647917cf699e0f1ea96887f3bb7e5 Mon Sep 17 00:00:00 2001 From: FigmentBoy <17240592+FigmentBoy@users.noreply.github.com> Date: Sun, 10 Jan 2021 21:05:32 -0600 Subject: [PATCH] Add Options Toggle to show map packs again --- GameManager.cpp | 8 ++++++++ GameManager.h | 7 +++++++ MenuOptions.cpp | 25 +++++++++++++++++++++++++ MenuOptions.h | 9 +++++++++ NO-MAP-PACKS.vcxproj | 4 ++++ NO-MAP-PACKS.vcxproj.filters | 12 ++++++++++++ TargetLayer.cpp | 35 +++++++++++++++++++---------------- dllmain.cpp | 4 ++++ 8 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 GameManager.cpp create mode 100644 GameManager.h create mode 100644 MenuOptions.cpp create mode 100644 MenuOptions.h diff --git a/GameManager.cpp b/GameManager.cpp new file mode 100644 index 0000000..332da44 --- /dev/null +++ b/GameManager.cpp @@ -0,0 +1,8 @@ +#include "GameManager.h" +#include + +void GameManager::mem_init() { + size_t base = reinterpret_cast(GetModuleHandle(0)); + getSharedState = reinterpret_cast(base + 0xC4A50); + getGameVariable = reinterpret_cast(base + 0xC9D30); +} \ No newline at end of file diff --git a/GameManager.h b/GameManager.h new file mode 100644 index 0000000..9f08114 --- /dev/null +++ b/GameManager.h @@ -0,0 +1,7 @@ +#pragma once + +namespace GameManager { + inline void* (__cdecl* getSharedState)(); + inline bool(__thiscall* getGameVariable)(void* self, const char* key); + void mem_init(); +} \ No newline at end of file diff --git a/MenuOptions.cpp b/MenuOptions.cpp new file mode 100644 index 0000000..6f75d12 --- /dev/null +++ b/MenuOptions.cpp @@ -0,0 +1,25 @@ +#include "MenuOptions.h" +#include "MinHook.h" + +bool __fastcall MenuOptions::initHook(void* self) +{ + bool result = MenuOptions::init(self); + + MenuOptions::addToggle( + self, + "Show Map Packs", + "mp-show", + "Re-adds Map Packs to the game"); + + return result; +} + +void MenuOptions::mem_init() { + size_t base = reinterpret_cast(GetModuleHandle(0)); + MH_CreateHook( + (PVOID)(base + 0x1DE8F0), + MenuOptions::initHook, + (PVOID*)&MenuOptions::init); + + MenuOptions::addToggle = reinterpret_cast(base + 0x1DF6B0); +} \ No newline at end of file diff --git a/MenuOptions.h b/MenuOptions.h new file mode 100644 index 0000000..ac228db --- /dev/null +++ b/MenuOptions.h @@ -0,0 +1,9 @@ +#pragma once + +namespace MenuOptions { + + inline int(__thiscall* addToggle)(void* self, const char* display, const char* key, const char* extraInfo); + inline bool(__thiscall* init)(void*); + bool __fastcall initHook(void* self); + void mem_init(); +} \ No newline at end of file diff --git a/NO-MAP-PACKS.vcxproj b/NO-MAP-PACKS.vcxproj index 3883f61..b903395 100644 --- a/NO-MAP-PACKS.vcxproj +++ b/NO-MAP-PACKS.vcxproj @@ -536,6 +536,8 @@ + + @@ -556,6 +558,8 @@ + + diff --git a/NO-MAP-PACKS.vcxproj.filters b/NO-MAP-PACKS.vcxproj.filters index 4ae8a30..6d48e82 100644 --- a/NO-MAP-PACKS.vcxproj.filters +++ b/NO-MAP-PACKS.vcxproj.filters @@ -1155,6 +1155,12 @@ Header Files + + Header Files + + + Header Files + @@ -1208,6 +1214,12 @@ Source Files + + Source Files + + + Source Files + diff --git a/TargetLayer.cpp b/TargetLayer.cpp index 3d44dd0..2a10d45 100644 --- a/TargetLayer.cpp +++ b/TargetLayer.cpp @@ -1,32 +1,35 @@ #include "TargetLayer.h" #include "MinHook.h" +#include "GameManager.h" bool __fastcall TargetLayer::initHook(CCLayer* self) { + void* gm = GameManager::getSharedState(); bool result = init(self); - auto children = self->getChildren(); - CCMenu* menu = (CCMenu*)children->objectAtIndex(1); + if (!GameManager::getGameVariable(gm, "mp-show")) { + auto children = self->getChildren(); + CCMenu* menu = (CCMenu*)children->objectAtIndex(1); - auto menuObjs = menu->getChildren(); + auto menuObjs = menu->getChildren(); - CCNode* mapPack = (CCNode*)menuObjs->objectAtIndex(8); + CCNode* mapPack = (CCNode*)menuObjs->objectAtIndex(8); - menu->removeChild(mapPack, true); + menu->removeChild(mapPack, true); - CCNode* Featured = (CCNode*)menuObjs->objectAtIndex(6); - CCNode* HOF = (CCNode*)menuObjs->objectAtIndex(7); - CCNode* Search = (CCNode*)menuObjs->objectAtIndex(8); + CCNode* Featured = (CCNode*)menuObjs->objectAtIndex(6); + CCNode* HOF = (CCNode*)menuObjs->objectAtIndex(7); + CCNode* Search = (CCNode*)menuObjs->objectAtIndex(8); - CCNode* Create = (CCNode*)menuObjs->objectAtIndex(0); - CCNode* Saved = (CCNode*)menuObjs->objectAtIndex(1); - CCNode* Scores = (CCNode*)menuObjs->objectAtIndex(2); + CCNode* Create = (CCNode*)menuObjs->objectAtIndex(0); + CCNode* Saved = (CCNode*)menuObjs->objectAtIndex(1); + CCNode* Scores = (CCNode*)menuObjs->objectAtIndex(2); - - float width = HOF->getScaledContentSize().width; - Featured->setPositionX(Create->getPositionX()); - HOF->setPositionX(Saved->getPositionX()); - Search->setPositionX(Scores->getPositionX()); + float width = HOF->getScaledContentSize().width; + Featured->setPositionX(Create->getPositionX()); + HOF->setPositionX(Saved->getPositionX()); + Search->setPositionX(Scores->getPositionX()); + } return result; } diff --git a/dllmain.cpp b/dllmain.cpp index b7e047f..3d97c40 100644 --- a/dllmain.cpp +++ b/dllmain.cpp @@ -1,10 +1,14 @@ // dllmain.cpp : Defines the entry point for the DLL application. #include #include "MinHook.h" +#include "GameManager.h"; +#include "MenuOptions.h"; #include "TargetLayer.h"; DWORD WINAPI my_thread(void* hModule) { MH_Initialize(); + GameManager::mem_init(); + MenuOptions::mem_init(); TargetLayer::mem_init(); MH_EnableHook(MH_ALL_HOOKS);