287 lines
10 KiB
Lua
287 lines
10 KiB
Lua
|
|
require(GlobalDependencys:GetDependency("StandardBase"):GetPackageName())
|
||
|
|
|
||
|
|
--GAME VARS
|
||
|
|
fAdditionalHUDWidth = 1
|
||
|
|
fAdditionalHUDHeight = 1
|
||
|
|
|
||
|
|
--ControlVars
|
||
|
|
bFixEnabled = true
|
||
|
|
bHUDSafeZone = true
|
||
|
|
bArFix = true
|
||
|
|
bArFix2 = true
|
||
|
|
bArFix3 = true
|
||
|
|
|
||
|
|
--PROCESS VARS
|
||
|
|
Process_FriendlyName = Module:GetFriendlyName()
|
||
|
|
Process_WindowName = "*"
|
||
|
|
Process_ClassName = "*"
|
||
|
|
Process_EXEName = "MassEffectAndromeda.exe"
|
||
|
|
|
||
|
|
--INJECTION BEHAVIOUR
|
||
|
|
InjectDelay = 200
|
||
|
|
WriteInterval = 5000
|
||
|
|
SearchInterval = 1000
|
||
|
|
SuspendThread = true
|
||
|
|
|
||
|
|
--Name Manual/Auto/Hybrid Steam/Origin/Any IncludeFile:Configure;Enable;Periodic;Disable;
|
||
|
|
SupportedVersions = {
|
||
|
|
{"Automatically Detect", "Manual", "Any", "Configure_SignatureScan;Enable_Inject;Periodic;Disable_Inject;"},
|
||
|
|
}
|
||
|
|
|
||
|
|
function Init_Controls()
|
||
|
|
DefaultControls.AddHeader("Header_FOV","HUD safe zone adjustment",15,70,210,17)
|
||
|
|
DefaultControls.AddFOVSlider("HUDWidthSlider","HUD_Width_SafeZone_Changed",55,100,125,35)
|
||
|
|
DefaultControls.AddFOVSlider("HUDHeightSlider","HUD_Height_SafeZone_Changed",55,160,125,35)
|
||
|
|
DefaultControls.AddHeader("Ind_fixes","Individual fixes",245,70,210,17)
|
||
|
|
DefaultControls.AddFixToggle("CKARatio","Aspect ratio","CKARatio_Changed",250,95,180,14)
|
||
|
|
DefaultControls.AddFixToggle("CKHUD","HUD safe zones","CKHUD_Changed",250,115,180,14)
|
||
|
|
end
|
||
|
|
|
||
|
|
function Configure_SignatureScan()
|
||
|
|
local tAddress = HackTool:AddAddress("HUDHeightFix")
|
||
|
|
if HackTool:SignatureScan("488B88A08700000F28DC",tAddress,PAGE_EXECUTE_READ,0x00,Process_EXEName) == 0 then
|
||
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
||
|
|
else
|
||
|
|
print( tAddress:GetInfo(TYPE_ADDRESS))
|
||
|
|
end
|
||
|
|
|
||
|
|
local tAddress = HackTool:AddAddress("HUDWidthFix")
|
||
|
|
if HackTool:SignatureScan("488B88A087000048894D67",tAddress,PAGE_EXECUTE_READ,0x00,Process_EXEName) == 0 then
|
||
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
||
|
|
else
|
||
|
|
print( tAddress:GetInfo(TYPE_ADDRESS))
|
||
|
|
end
|
||
|
|
|
||
|
|
local tAddress = HackTool:AddAddress("ArFix")
|
||
|
|
if HackTool:SignatureScan("0F2FB0????????0F92",tAddress,PAGE_EXECUTE_READ,0x00,Process_EXEName) == 0 then
|
||
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
||
|
|
else
|
||
|
|
print( tAddress:GetInfo(TYPE_ADDRESS))
|
||
|
|
end
|
||
|
|
|
||
|
|
local tAddress = HackTool:AddAddress("ArFix2")
|
||
|
|
if HackTool:SignatureScan("C780DC00000000000000E86C",tAddress,PAGE_EXECUTE_READ,0x00,Process_EXEName) == 0 then
|
||
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
||
|
|
else
|
||
|
|
print( tAddress:GetInfo(TYPE_ADDRESS))
|
||
|
|
end
|
||
|
|
|
||
|
|
local tAddress = HackTool:AddAddress("ArFix3")
|
||
|
|
if HackTool:SignatureScan("C780DC000000398EE33F",tAddress,PAGE_EXECUTE_READ,0x00,Process_EXEName) == 0 then
|
||
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
||
|
|
else
|
||
|
|
print( tAddress:GetInfo(TYPE_ADDRESS))
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
|
||
|
|
function Enable_Inject()
|
||
|
|
local Variables = HackTool:AllocateMemory("Variables",0)
|
||
|
|
Variables:PushFloat("HUDRender_Width")
|
||
|
|
Variables:PushFloat("HUDRender_Height")
|
||
|
|
Variables:PushFloat("AspectRatio")
|
||
|
|
Variables:PushFloat("AspectRatioZero")
|
||
|
|
Variables:PushFloat("GameWidth")
|
||
|
|
Variables:PushFloat("GameHeight")
|
||
|
|
Variables:PushFloat("AspectRatioPointer")
|
||
|
|
Variables:Allocate()
|
||
|
|
|
||
|
|
ResolutionChanged()
|
||
|
|
|
||
|
|
local asm = [[
|
||
|
|
(codecave:jmp)HUDWidthFix,HUDWidthFix_cc:
|
||
|
|
mov rcx,[(allocation)Variables->HUDRender_Width]
|
||
|
|
jmp %returnaddress%
|
||
|
|
%end%
|
||
|
|
|
||
|
|
; MassEffectAndromeda.exe+11EE59A: 45 85 FF - test r15d,r15d
|
||
|
|
; MassEffectAndromeda.exe+11EE59D: 74 3C - je MassEffectAndromeda.exe+11EE5DB
|
||
|
|
; MassEffectAndromeda.exe+11EE59F: 48 8B 05 A2 82 0E 03 - mov rax,[MassEffectAndromeda.exe+42D6848]
|
||
|
|
; ---------- INJECTING HERE ----------
|
||
|
|
; MassEffectAndromeda.exe+11EE5A6: 48 8B 88 A0 87 00 00 - mov rcx,[rax+000087A0]
|
||
|
|
; ---------- DONE INJECTING ----------
|
||
|
|
; MassEffectAndromeda.exe+11EE5AD: 48 89 4D 67 - mov [rbp+67],rcx
|
||
|
|
; MassEffectAndromeda.exe+11EE5B1: F3 0F 10 35 07 FC E7 01 - movss xmm6,[MassEffectAndromeda.exe+306E1C0]
|
||
|
|
; MassEffectAndromeda.exe+11EE5B9: F3 0F 5C 75 67 - subss xmm6,[rbp+67]
|
||
|
|
|
||
|
|
(codecave:jmp)HUDHeightFix,HUDHeightFix_cc:
|
||
|
|
mov rcx,[(allocation)Variables->HUDRender_Width]
|
||
|
|
movss [(allocation)Variables->GameWidth],xmm4
|
||
|
|
movss [(allocation)Variables->GameHeight],xmm0
|
||
|
|
jmp %returnaddress%
|
||
|
|
%end%
|
||
|
|
|
||
|
|
; MassEffectAndromeda.exe+A824F8: F3 0F 10 35 C0 BC 5E 02 - movss xmm6,[MassEffectAndromeda.exe+306E1C0]
|
||
|
|
; MassEffectAndromeda.exe+A82500: 48 8B 05 41 43 85 03 - mov rax,[MassEffectAndromeda.exe+42D6848]
|
||
|
|
; MassEffectAndromeda.exe+A82507: 48 8B 3D 62 81 86 03 - mov rdi,[MassEffectAndromeda.exe+42EA670]
|
||
|
|
; ---------- INJECTING HERE ----------
|
||
|
|
; MassEffectAndromeda.exe+A8250E: 48 8B 88 A0 87 00 00 - mov rcx,[rax+000087A0]
|
||
|
|
; ---------- DONE INJECTING ----------
|
||
|
|
; MassEffectAndromeda.exe+A82515: 0F 28 DC - movaps xmm3,xmm4
|
||
|
|
; MassEffectAndromeda.exe+A82518: 0F 28 D0 - movaps xmm2,xmm0
|
||
|
|
; MassEffectAndromeda.exe+A8251B: 44 0F 28 CE - movaps xmm9,xmm6
|
||
|
|
|
||
|
|
(codecave:jmp)ArFix,ArFix_cc:
|
||
|
|
push rbx
|
||
|
|
mov rbx,[(allocation)Variables->AspectRatioZero]
|
||
|
|
cmp [(allocation)Variables->AspectRatioPointer],rbx
|
||
|
|
jne ARFix
|
||
|
|
mov [(allocation)Variables->AspectRatioPointer],rax
|
||
|
|
|
||
|
|
ARFix:
|
||
|
|
sub esp, 16 ; allocate space on stack
|
||
|
|
movdqu dqword [esp], xmm0 ; push xmm0
|
||
|
|
sub esp, 16 ; allocate space on stack
|
||
|
|
movdqu dqword [esp], xmm1 ; push xmm1
|
||
|
|
movss xmm0,[(allocation)Variables->GameWidth]
|
||
|
|
movss xmm1,[(allocation)Variables->GameHeight]
|
||
|
|
divss xmm0,xmm1 ; calculate aspect ratio based on game window resolution
|
||
|
|
movss [(allocation)Variables->AspectRatio],xmm0
|
||
|
|
movdqu xmm1, dqword [esp] ; pop xmm1
|
||
|
|
add esp, 16 ; re-align stack
|
||
|
|
movdqu xmm0, dqword [esp] ; pop xmm0
|
||
|
|
add esp, 16 ; re-align stack
|
||
|
|
mov rbx,[(allocation)Variables->AspectRatio]
|
||
|
|
mov [rax+0x000000DC],rbx
|
||
|
|
pop rbx
|
||
|
|
comiss xmm6,[rax+0x000000DC]
|
||
|
|
jmp %returnaddress%
|
||
|
|
%end%
|
||
|
|
|
||
|
|
; MassEffectAndromeda.exe+F28B5E: 48 89 05 2B B9 4D 03 - mov [MassEffectAndromeda.exe+4404490],rax
|
||
|
|
; MassEffectAndromeda.exe+F28B65: 48 85 C0 - test rax,rax
|
||
|
|
; MassEffectAndromeda.exe+F28B68: 74 1F - je MassEffectAndromeda.exe+F28B89
|
||
|
|
; ---------- INJECTING HERE ----------
|
||
|
|
;MassEffectAndromeda.exe+F28B6A: 0F 2F B0 DC 00 00 00 - comiss xmm6,[rax+000000DC]
|
||
|
|
; ---------- DONE INJECTING ----------
|
||
|
|
; MassEffectAndromeda.exe+F28B71: 0F 92 C1 - setb cl
|
||
|
|
; MassEffectAndromeda.exe+F28B74: 3A 8B 56 F8 01 00 - cmp cl,[rbx+0001F856]
|
||
|
|
; MassEffectAndromeda.exe+F28B7A: 88 8B 56 F8 01 00 - mov [rbx+0001F856],cl
|
||
|
|
|
||
|
|
(codecave)ArFix2,ArFix2_cc:
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
%end%
|
||
|
|
|
||
|
|
; MassEffectAndromeda.exe+5BBA4F: 48 8B D3 - mov rdx,rbx
|
||
|
|
; MassEffectAndromeda.exe+5BBA52: 48 8B CF - mov rcx,rdi
|
||
|
|
; ---------- INJECTING HERE ----------
|
||
|
|
; MassEffectAndromeda.exe+5BBA55: C7 80 DC 00 00 00 00 00 00 00 - mov [rax+000000DC],00000000
|
||
|
|
; ---------- DONE INJECTING ----------
|
||
|
|
; MassEffectAndromeda.exe+5BBA5F: E8 6C 52 FF FF - call MassEffectAndromeda.exe+5B0CD0
|
||
|
|
; MassEffectAndromeda.exe+5BBA64: 48 85 C0 - test rax,rax
|
||
|
|
|
||
|
|
(codecave)ArFix3,ArFix3_cc:
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
nop
|
||
|
|
%end%
|
||
|
|
|
||
|
|
; MassEffectAndromeda.exe+5BB9B7: 48 8B 0D E2 09 AF 03 - mov rcx,[MassEffectAndromeda.exe+40AC3A0]
|
||
|
|
; MassEffectAndromeda.exe+5BB9BE: E8 ED B9 CE FF - call MassEffectAndromeda.ANTITAMPER_TESTVALUE_CODEMARKER+2120
|
||
|
|
; ---------- INJECTING HERE ----------
|
||
|
|
; MassEffectAndromeda.exe+5BB9C3: C7 80 DC 00 00 00 39 8E E3 3F - mov [rax+000000DC],3FE38E39 (16/9 ratio)
|
||
|
|
; ---------- DONE INJECTING ----------
|
||
|
|
; MassEffectAndromeda.exe+5BB9CD: 48 8B 0D DC 0C D1 03 - mov rcx,[MassEffectAndromeda.exe+42CC6B0]
|
||
|
|
; MassEffectAndromeda.exe+5BB9D4: 48 8B D3 - mov rdx,rbx
|
||
|
|
|
||
|
|
]]
|
||
|
|
|
||
|
|
if HackTool:CompileAssembly(asm,"HUDWidthFix") == nil then
|
||
|
|
return ErrorOccurred("Assembly compilation failed...")
|
||
|
|
else
|
||
|
|
Toggle_CodeCave("HUDWidthFix_cc",bHUDSafeZone)
|
||
|
|
Toggle_CodeCave("HUDHeightFix_cc",bHUDSafeZone)
|
||
|
|
Toggle_CodeCave("ArFix_cc",bArFix)
|
||
|
|
Toggle_CodeCave("ArFix2_cc",bArFix2)
|
||
|
|
Toggle_CodeCave("ArFix3_cc",bArFix3)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function Periodic()
|
||
|
|
local Variables = HackTool:GetAllocation("Variables")
|
||
|
|
local HUD_Width_Safe_Zone = (fAdditionalHUDWidth + 75) / 100
|
||
|
|
local HUD_Height_Safe_Zone = (fAdditionalHUDHeight + 80) / 100
|
||
|
|
|
||
|
|
if Variables and Variables["HUDRender_Width"] and Variables["HUDRender_Height"] then
|
||
|
|
Variables["HUDRender_Width"]:WriteFloat( HUD_Width_Safe_Zone )
|
||
|
|
Variables["HUDRender_Height"]:WriteFloat( HUD_Height_Safe_Zone )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function Disable_Inject()
|
||
|
|
CleanUp()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ResolutionChanged()
|
||
|
|
end
|
||
|
|
|
||
|
|
function HUDSafeZone()
|
||
|
|
end
|
||
|
|
|
||
|
|
function HK_IncreaseFOV()
|
||
|
|
HUDWidthSlider:OffsetPosition(1)
|
||
|
|
end
|
||
|
|
|
||
|
|
function HK_DecreaseFOV()
|
||
|
|
HUDWidthSlider:OffsetPosition(-1)
|
||
|
|
end
|
||
|
|
|
||
|
|
function HUD_Width_SafeZone_Changed(Sender)
|
||
|
|
fAdditionalHUDWidth = Sender:GetScaledFloat(4)
|
||
|
|
fAdditionalHUDWidth = Round(fAdditionalHUDWidth,2)
|
||
|
|
lblHUDWidthSlider.Caption:SetCaption( string.format("HUD width safe zone : %.2f",(fAdditionalHUDWidth + 75)))
|
||
|
|
|
||
|
|
ForceUpdate()
|
||
|
|
end
|
||
|
|
|
||
|
|
function HUD_Height_SafeZone_Changed(Sender)
|
||
|
|
fAdditionalHUDHeight = Sender:GetScaledFloat(6)
|
||
|
|
fAdditionalHUDHeight = Sender:GetScaledFloat(5)
|
||
|
|
fAdditionalHUDHeight = Round(fAdditionalHUDHeight,2)
|
||
|
|
lblHUDHeightSlider.Caption:SetCaption( string.format("HUD height safe zone : %.2f",fAdditionalHUDHeight + 80))
|
||
|
|
|
||
|
|
ForceUpdate()
|
||
|
|
end
|
||
|
|
|
||
|
|
function CKARatio_Changed(Sender)
|
||
|
|
local Variables = HackTool:GetAllocation("Variables")
|
||
|
|
bArFix = Toggle_CheckFix(Sender)
|
||
|
|
bArFix2 = Toggle_CheckFix(Sender)
|
||
|
|
bArFix3 = Toggle_CheckFix(Sender)
|
||
|
|
Toggle_CodeCave("ArFix_cc",bArFix)
|
||
|
|
Toggle_CodeCave("ArFix2_cc",bArFix2)
|
||
|
|
Toggle_CodeCave("ArFix3_cc",bArFix3)
|
||
|
|
end
|
||
|
|
|
||
|
|
function CKHUD_Changed(Sender)
|
||
|
|
bHUDSafeZone = Toggle_CheckFix(Sender)
|
||
|
|
Toggle_CodeCave("HUDWidthFix_cc",bHUDSafeZone)
|
||
|
|
Toggle_CodeCave("HUDHeightFix_cc",bHUDSafeZone)
|
||
|
|
end
|
||
|
|
|
||
|
|
function Init()
|
||
|
|
Init_BaseControls()
|
||
|
|
Init_Controls()
|
||
|
|
end
|
||
|
|
|
||
|
|
function DeInit()
|
||
|
|
DisableFix()
|
||
|
|
end
|