Skip to content

Commit

Permalink
tag assists, modifiers, ai, 9:16 camera
Browse files Browse the repository at this point in the history
  • Loading branch information
ermaccer committed Dec 10, 2024
1 parent 96e1ffa commit 06f2381
Show file tree
Hide file tree
Showing 21 changed files with 1,241 additions and 343 deletions.
Binary file modified I2Hook/I2Hook.rc
Binary file not shown.
3 changes: 3 additions & 0 deletions I2Hook/I2Hook.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
<ClInclude Include="mk\GameInfo.h" />
<ClInclude Include="mk\MKCamera.h" />
<ClInclude Include="mk\MKCharacter.h" />
<ClInclude Include="mk\MKModifier.h" />
<ClInclude Include="mk\MKObject.h" />
<ClInclude Include="mk\MKScript.h" />
<ClInclude Include="mk\MKStructs.h" />
Expand Down Expand Up @@ -223,6 +224,7 @@
<ClCompile Include="mk\GameInfo.cpp" />
<ClCompile Include="mk\MKCamera.cpp" />
<ClCompile Include="mk\MKCharacter.cpp" />
<ClCompile Include="mk\MKModifier.cpp" />
<ClCompile Include="mk\MKObject.cpp" />
<ClCompile Include="mk\MKScript.cpp" />
<ClCompile Include="mk\PlayerInfo.cpp" />
Expand All @@ -236,6 +238,7 @@
<ClCompile Include="plugin\API.cpp" />
<ClCompile Include="plugin\Hooks.cpp" />
<ClCompile Include="plugin\Menu.cpp" />
<ClCompile Include="plugin\ModifierList.cpp" />
<ClCompile Include="plugin\PatternSolver.cpp" />
<ClCompile Include="plugin\PluginInterface.cpp" />
<ClCompile Include="plugin\Settings.cpp" />
Expand Down
9 changes: 9 additions & 0 deletions I2Hook/I2Hook.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@
<ClInclude Include="mk\Scaleform.h">
<Filter>Header Files\mk</Filter>
</ClInclude>
<ClInclude Include="mk\MKModifier.h">
<Filter>Header Files\mk</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pch.cpp">
Expand Down Expand Up @@ -359,6 +362,12 @@
<ClCompile Include="mk\Scaleform.cpp">
<Filter>Header Files\mk</Filter>
</ClCompile>
<ClCompile Include="mk\MKModifier.cpp">
<Filter>Header Files\mk</Filter>
</ClCompile>
<ClCompile Include="plugin\ModifierList.cpp">
<Filter>Header Files\plugin</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="I2Hook.rc">
Expand Down
21 changes: 12 additions & 9 deletions I2Hook/dllmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

#include "mk/GameInfo.h"
#include "mk/Scaleform.h"
#include "mk/MKModifier.h"

#include "helper/eGamepadManager.h"

Expand All @@ -28,6 +29,7 @@
#pragma comment(lib, "Comctl32.lib")

using namespace Memory::VP;

int64 __fastcall GenericTrueReturn() { return 1; }
int64 __fastcall GenericFalseReturn() { return 0; }
void __fastcall GenericDummy() { }
Expand Down Expand Up @@ -67,7 +69,7 @@ void OnInitializeHook()
freopen("CONOUT$", "w", stderr);
}

eLog::Message(__FUNCTION__, "INFO: I2Hook Begin!");
eLog::Message(__FUNCTION__, "INFO: I2Hook (%s | %s) Begin!", I2HOOK_VERSION, __DATE__);

Notifications->Init();
FGGameInfo::FindGameInfo();
Expand All @@ -81,13 +83,11 @@ void OnInitializeHook()
if (SettingsMgr->bEnable60FPSFrontend)
{
if (int64 fs_pat = SetFrameSkip_GetPattern())
InjectHook(fs_pat, tramp->Jump(SetFrameskip_Hook), PATCH_JUMP);
InjectHook(fs_pat, tramp->Jump(SetFrameskip_Hook), HookType::Jump);
}

if (SettingsMgr->bDisableTOCChecks)
InjectHook(_pattern(PATID_TocCheck), tramp->Jump(GenericTrueReturn), PATCH_JUMP);


InjectHook(_pattern(PATID_TocCheck), tramp->Jump(GenericTrueReturn), HookType::Jump);

InjectHook(_pattern(PATID_MKProcDispatch_Hook), tramp->Jump(MKProcDispatch_Hook));
InjectHook(_pattern(PATID_RecordEvent_Hook), tramp->Jump(RecordEvent_Hook));
Expand All @@ -98,12 +98,15 @@ void OnInitializeHook()
InjectHook(_pattern(PATID_CameraPositionHook), tramp->Jump(&MKCamera::HookedSetPosition));
InjectHook(_pattern(PATID_CameraRotationHook), tramp->Jump(&MKCamera::HookedSetRotation));


InjectHook(_pattern(PATID_Dispatch_Hook), tramp->Jump(Dispatch_Hook));


ReadCall(_pattern(PATID_ProcessDOFSettings), pProcessDOFSettings);
InjectHook(_pattern(PATID_ProcessDOFSettings), tramp->Jump(ProcessDOFSettings), PATCH_CALL);
InjectHook(_pattern(PATID_ProcessDOFSettings), tramp->Jump(ProcessDOFSettings));

ReadCall(_pattern(PATID_PlayerInfo_GetDrone), pPlayerInfo_GetDrone);
ReadCall(_pattern(PATID_PlayerInfo_MakeDrone), pPlayerInfo_MakeDrone);

InjectHook(_pattern(PATID_FightStartupAddModifiers), tramp->Jump(PluginFightStartupAddModifiers));

//gamepad
if (SettingsMgr->bEnableGamepadSupport)
Expand All @@ -114,7 +117,7 @@ void OnInitializeHook()
uintptr_t xinput_addr = _pattern(PATID_XInputGetState_Hook);
xinput_addr += *(unsigned int*)(xinput_addr)+4;

InjectHook(xinput_addr, tramp->Jump(XInputGetState_Hook), PATCH_JUMP);
InjectHook(xinput_addr, tramp->Jump(XInputGetState_Hook), HookType::Jump);
}

}
Expand Down
19 changes: 19 additions & 0 deletions I2Hook/mk/Engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,22 @@ void SetCharacterMKX(PLAYER_NUM plr, char* name)
CharacterDefinition* chr = (CharacterDefinition*)(ptr + 192);
chr->Set(name, 0, 0);
}

void SetCharacterAI(PLAYER_NUM plr, char* script, int level)
{
PlayerInfo* info = GetInfo(plr);

if (!info)
return;

info->MakeDrone();

AIDrone* drone = info->GetDrone();

if (!drone)
return;

drone->Set(script, 0);
float difficultyLevel = level;
drone->SetLevel(difficultyLevel);
}
3 changes: 2 additions & 1 deletion I2Hook/mk/Engine.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ unsigned int _hash(const char* input);
void GetCharacterPosition(FVector* vec, PLAYER_NUM plr);
char* GetCharacterName(PLAYER_NUM plr);

void SetCharacterMKX(PLAYER_NUM plr, char* name);
void SetCharacterMKX(PLAYER_NUM plr, char* name);
void SetCharacterAI(PLAYER_NUM plr, char* script, int level);
4 changes: 4 additions & 0 deletions I2Hook/mk/MKCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,10 @@ void MKCamera::HookedSetRotation(FRotator * rot)
rot->Pitch -= 1258;
TheMenu->camRot = *rot;
break;
case CAMERA_9_16:
rot->Roll += (int)(float)((float)(90.0 * 32767.0) / 180.0);
TheMenu->camRot = *rot;
break;
}
}
SetRotation(rot);
Expand Down
52 changes: 52 additions & 0 deletions I2Hook/mk/MKModifier.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include "MKModifier.h"

Modifier::Modifier(const char* name)
{
static uintptr_t pat = _pattern(PATID_MKModifier_Constructor);
if (pat)
((void(__fastcall*)(Modifier*, const char*))pat)(this, name);
}

void Modifier::Activate(MKCharacter* character)
{
static uintptr_t pat = _pattern(PATID_MKModifier_Activate);
if (pat)
((void(__fastcall*)(Modifier*, MKCharacter*))pat)(this, character);
}

void MKModifier::ActivateModifier(const char* name, PLAYER_NUM player)
{
Modifier mod(name);
MKCharacter* obj = GetObj(player);
if (obj)
mod.Activate(obj);
}

void LoadModifierAssets()
{
static uintptr_t pat = _pattern(PATID_LoadModifierAssets);
if (pat)
((void(__fastcall*)(FGGameInfo*))pat)(GetGameInfo());
}

TagAssistModifier::TagAssistModifier(const char* character)
{
static uintptr_t pat = _pattern(PATID_MKTagModifier_Constructor);
if (pat)
((void(__fastcall*)(TagAssistModifier*, const char*))pat)(this, character);
}

void TagAssistModifier::Activate(PLAYER_NUM player)
{
static uintptr_t pat = _pattern(PATID_MKTagModifier_Activate);
if (pat)
((void(__fastcall*)(TagAssistModifier*, PlayerInfo*))pat)(this, GetInfo(player));
}

void TagAssistModifier::ActivateObject(PLAYER_NUM player)
{
static uintptr_t pat = _pattern(PATID_MKTagModifier_Activate2);
if (pat)
((void(__fastcall*)(TagAssistModifier*, MKCharacter*))pat)(this, GetObj(player));
}

33 changes: 33 additions & 0 deletions I2Hook/mk/MKModifier.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#pragma once
#include "../mk/MKCharacter.h"
#include "../mk/Engine.h"
#include "../utils.h"

class BaseModifier {
public:
char data[72] = {};
};


class Modifier : public BaseModifier {
public:
Modifier(const char* name);
void Activate(MKCharacter* character);
};


class TagAssistModifier : public BaseModifier {
public:
TagAssistModifier(const char* character);
void Activate(PLAYER_NUM player);
void ActivateObject(PLAYER_NUM player);
};


class MKModifier {
public:
static void ActivateModifier(const char* name, PLAYER_NUM player);
};


void LoadModifierAssets();
37 changes: 37 additions & 0 deletions I2Hook/mk/PlayerInfo.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#include "PlayerInfo.h"

AIDrone* (*pPlayerInfo_GetDrone)(PlayerInfo*) = nullptr;
AIDrone* (*pPlayerInfo_MakeDrone)(PlayerInfo*) = nullptr;

void PlayerInfo::SetMeter(float value)
{
static uintptr_t pat = _pattern(PATID_PlayerInfo_SetMeter);
Expand All @@ -12,3 +15,37 @@ void PlayerInfo::SetDamageMult(float value)
*(float*)(this + 0x338) = value;
*(float*)(this + 0x338 + 4) = value;
}

void PlayerInfo::MakeDrone()
{
if (pPlayerInfo_MakeDrone)
pPlayerInfo_MakeDrone(this);
}

void PlayerInfo::MakeHuman()
{
static uintptr_t pat = _pattern(PATID_PlayerInfo_MakeHuman);
if (pat)
((void(__fastcall*)(PlayerInfo*))pat)(this);
}

AIDrone* PlayerInfo::GetDrone()
{
if (pPlayerInfo_GetDrone)
return pPlayerInfo_GetDrone(this);
return nullptr;
}

void AIDrone::Set(const char* script, int unk)
{
static uintptr_t pat = _pattern(PATID_AIDrone_Set);
if (pat)
((void(__fastcall*)(AIDrone*, const char*, int))pat)(this, script, unk);
}

void AIDrone::SetLevel(float level)
{
static uintptr_t pat = _pattern(PATID_AIDrone_SetLevel);
if (pat)
((void(__fastcall*)(AIDrone*, float))pat)(this, level);
}
15 changes: 14 additions & 1 deletion I2Hook/mk/PlayerInfo.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
#pragma once
#include "../utils.h"

class AIDrone {
public:
void Set(const char* script, int unk);
void SetLevel(float level);
};

class PlayerInfo {
public:
void SetMeter(float value);
void SetDamageMult(float value);
};
void MakeDrone();
void MakeHuman();

AIDrone* GetDrone();
};

extern AIDrone*(*pPlayerInfo_GetDrone)(PlayerInfo*);
extern AIDrone* (*pPlayerInfo_MakeDrone)(PlayerInfo*);
Loading

0 comments on commit 06f2381

Please sign in to comment.