474 lines
14 KiB
Lua
474 lines
14 KiB
Lua
require(GlobalDependencys:GetDependency("StandardBase"):GetPackageName())
|
|
|
|
--GAME VARS
|
|
fAdditionalFOV = 0
|
|
fDefaultAspectRatio = 1.777777791
|
|
fFOV = 0
|
|
fDOF = 0
|
|
fDefaultFOV = 90
|
|
fFactor1 = 0.01745329238
|
|
fFactor2 = 0.5
|
|
fcbIndex = 0
|
|
fAspectRatio = DisplayInfo:GetWidth() / DisplayInfo:GetHeight()
|
|
fDefaultPhotoFOV = 0
|
|
fPhotoFOV = 0
|
|
|
|
--ControlVars
|
|
bFixEnabled = true
|
|
bFOV = true
|
|
bPhotoFOV = true
|
|
bAspect = true
|
|
bAspectRatio = true
|
|
bDOF = true
|
|
bFringe = true
|
|
bBarrelDistortion = true
|
|
|
|
--PROCESS VARS
|
|
Process_FriendlyName = Module:GetFriendlyName()
|
|
Process_WindowName = "Uncharted: Legacy of Thieves Collection"
|
|
Process_ClassName = "Uncharted: Legacy of Thieves Collection"
|
|
Process_EXEName = "u4.exe;tll.exe"
|
|
|
|
--INJECTION BEHAVIOUR
|
|
InjectDelay = 500
|
|
WriteInterval = 500
|
|
SearchInterval = 500
|
|
SuspendThread = true
|
|
|
|
NearToAddress = 0
|
|
|
|
--Name Manual/Auto/Hybrid Steam/Origin/Any IncludeFile:Configure;Enable;Periodic;Disable;
|
|
SupportedVersions = {
|
|
{"Automatically Detect", "Hybrid", "Any", "Configure_SignatureScan;Enable_Inject;Periodic;Disable_Inject;"},
|
|
}
|
|
|
|
function Init_Controls()
|
|
|
|
DefaultControls.AddHeader("Header_FixesEnableDisable","Individual Fixes",245,70,210,17)
|
|
|
|
DefaultControls.AddHeader("Header_FOV","FOV fine adjustment",15,70,215,17)
|
|
DefaultControls.AddFOVSlider("FOVSlider","FOVSlider_Changed",55,90,125,35)
|
|
DefaultControls.AddFixToggle("CKFOVFix_Enable","FOV fix","CKFOVFix_Changed",255,101,180,14)
|
|
DefaultControls.AddFixToggle("CKPHOTOFOVFix_Enable","Photo FOV fix","CKPHOTOFOVFix_Changed",255,121,180,14)
|
|
DefaultControls.AddFixToggle("CKAspectFix_Enable","Cinematics aspect fix","CKAspectFix_Changed",255,141,180,14)
|
|
DefaultControls.AddFixToggle("CKARatioFix_Enable","Aspect ratio fix","CKARatioFix_Changed",255,161,180,14)
|
|
DefaultControls.AddFixToggle("CKDOFFix_Enable","Depth of field fix","CKDOFFix_Changed",255,181,180,14)
|
|
DefaultControls.AddFixToggle("CKFRINGEFix_Enable","Chromatic aberrations fix","CKFRINGEFix_Changed",255,201,180,14)
|
|
DefaultControls.AddFixToggle("CKBARRELFix_Enable","Barrel distortion fix","CKBARRELFix_Changed",255,221,180,14)
|
|
|
|
DefaultControls.AddHeader("Header_PHOTOFOV","Photo mode FOV fine adjustment",15,150,215,17)
|
|
DefaultControls.AddFixedFOVSlider("PHOTOFOVSlider","PhotoFOVSlider_Changed",55,170,125,35,10,170,0,1)
|
|
PHOTOFOVSlider:SetTickFrequency(20)
|
|
PHOTOFOVSlider:SetLabel1Text("10")
|
|
PHOTOFOVSlider:SetLabel2Text("170")
|
|
|
|
DefaultControls.AddHeader("HeaderAspectRatio","Game aspect ratio",15,230,215,17)
|
|
AspectScalingOptions = {"Automatic detection","Custom value"}
|
|
DefaultControls.AddComboBox("AspectScalingCombo","AspectScalingCombo_Changed",AspectScalingOptions,15,255,140,250)
|
|
DefaultControls.AddParameterBox("ARatio",DisplayInfo:GetWidth() / DisplayInfo:GetHeight(),"ARatio_Changed",170,257,50,20)
|
|
|
|
end
|
|
|
|
function Configure_SignatureScan()
|
|
|
|
NearToAddress = HackTool:GetBaseAddress()
|
|
|
|
local tAddress = HackTool:AddAddress("FOV")
|
|
|
|
if HackTool:SignatureScan("C6 83 ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? C5 8A",tAddress,PAGE_EXECUTE_READ,0x07,Process_EXEName) == 0 then
|
|
if HackTool:SignatureScan("C5 F2 ?? ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? C5 92",tAddress,PAGE_EXECUTE_READ,0x08,Process_EXEName) == 0 then
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
|
else
|
|
print( tAddress:GetInfo(TYPE_ADDRESS) )
|
|
--C5 FA 59 0D 8C 08 4C 01 - vmulss xmm1,xmm0,[tll.exe+2BF3384]
|
|
--C5 F2 59 05 3C 0C 4C 01 - vmulss xmm0,xmm1,[tll.exe+2BF373C]
|
|
--E8 53 39 DC 00 - call tll.exe+24F6458
|
|
--C5 92 5E C8 - vdivss xmm1,xmm13,xmm0
|
|
--C5 FA 10 05 53 0C 4C 01 - vmovss xmm0,[tll.exe+2BF3764]
|
|
end
|
|
else
|
|
print( tAddress:GetInfo(TYPE_ADDRESS) )
|
|
--C5 7A 11 AB D0 03 00 00 - vmovss [rbx+000003D0],xmm13
|
|
--C6 83 20 04 00 00 00 - mov byte ptr [rbx+00000420],00
|
|
--E8 A4 6F D7 00 - call u4.exe+23B6418
|
|
--C5 8A 5E C8 - vdivss xmm1,xmm14,xmm0
|
|
--C5 FA 10 05 DC B6 45 01 - vmovss xmm0,[u4.exe+2A9AB5C]
|
|
end
|
|
|
|
local tAddress = HackTool:AddAddress("PHOTOFOV")
|
|
|
|
if HackTool:SignatureScan("C5 FA ?? ?? ?? ?? ?? ?? C5 FA ?? ?? ?? ?? ?? ?? 41 ?? ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 48 83",tAddress,PAGE_EXECUTE_READ,0x0,Process_EXEName) == 0 then
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
|
else
|
|
--C5 FA 11 3D 25 D4 A5 02 - vmovss [tll.exe+36732FC],xmm7
|
|
--C5 FA 11 3D 19 D4 A5 02 - vmovss [tll.exe+36732F8],xmm7
|
|
--C5 FA 10 05 2D C7 2A 03 - vmovss xmm0,[tll.exe+3EC2614]
|
|
--C5 FA 11 05 BD D3 A5 02 - vmovss [tll.exe+36732AC],xmm0
|
|
--41 BF 01 00 00 00 - mov r15d,00000001
|
|
print( tAddress:GetInfo(TYPE_ADDRESS) )
|
|
|
|
local PhotoDefaultFOV = HackTool:AddAddress("PhotoDefaultFOV", tAddress)
|
|
PhotoDefaultFOV:AcquireAddress(0x4)
|
|
print( PhotoDefaultFOV:GetInfo(TYPE_FLOAT) )
|
|
end
|
|
|
|
|
|
local tAddress = HackTool:AddAddress("ASPECT")
|
|
|
|
if HackTool:SignatureScan("48 8B ?? ?? ?? ?? ?? 4C 8B ?? ?? ?? ?? ?? ?? 4C 8B ?? 49 C1",tAddress,PAGE_EXECUTE_READ,0x0,Process_EXEName) == 0 then
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
|
else
|
|
print( tAddress:GetInfo(TYPE_ADDRESS) )
|
|
--u4.exe+152D5D2 - C6 87 A9 14 01 00 01 - mov byte ptr [rdi+000114A9],01
|
|
--u4.exe+152D5D9 - C6 87 B8 11 01 00 01 - mov byte ptr [rdi+000111B8],01
|
|
--u4.exe+152D5E0 - 48 8B 0D 99 0A 01 05 - mov rcx,[u4.exe+653E080]
|
|
--u4.exe+152D5E7 - 4C 8B AC 24 A0 00 00 00 - mov r13,[rsp+000000A0]
|
|
--u4.exe+152D5EF - 4C 8B C1 - mov r8,rcx
|
|
end
|
|
|
|
local tAddress = HackTool:AddAddress("ARATIO")
|
|
|
|
if HackTool:SignatureScan("44 8B ?? ?? ?? ?? ?? 48 ?? ?? 48 89 ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? C5",tAddress,PAGE_EXECUTE_READ,0x11,Process_EXEName) == 0 then
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
|
else
|
|
print( tAddress:GetInfo(TYPE_ADDRESS) )
|
|
end
|
|
|
|
local tAddress = HackTool:AddAddress("DOF")
|
|
|
|
if HackTool:SignatureScan("41 8B 87 ?? ?? ?? ?? 41 89 86 ?? ?? ?? ?? 41 C7 86",tAddress,PAGE_EXECUTE_READ,0x0,Process_EXEName) == 0 then
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
|
else
|
|
print( tAddress:GetInfo(TYPE_ADDRESS) )
|
|
--41 8B 87 BC 0C 00 00 - mov eax,[r15+00000CBC]
|
|
--41 89 86 D0 27 01 00 - mov [r14+000127D0],eax
|
|
--41 8B 87 B0 0C 00 00 - mov eax,[r15+00000CB0]
|
|
--41 89 86 D8 27 01 00 - mov [r14+000127D8],eax
|
|
--41 C7 86 D4 27 01 00 33 33 33 3F - mov [r14+000127D4],3F333333
|
|
end
|
|
|
|
local tAddress = HackTool:AddAddress("EFFECTS")
|
|
|
|
if HackTool:SignatureScan("41 8B 86 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 41 8B 86 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 41 8B 86 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 41 8B 87",tAddress,PAGE_EXECUTE_READ,0x0,Process_EXEName) == 0 then
|
|
if HackTool:SignatureScan("41 8B 87 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 41 8B 87 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 41 8B 87 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 41 8B 86",tAddress,PAGE_EXECUTE_READ,0x0,Process_EXEName) == 0 then
|
|
return ErrorOccurred(string.format(SigScanError,tAddress:GetName()))
|
|
else
|
|
local Barrel_Distortion_1 = HackTool:AddAddress("BARREL1", tAddress)
|
|
local Barrel_Distortion_2 = HackTool:AddAddress("BARREL2", tAddress)
|
|
local Fringe = HackTool:AddAddress("FRINGE", tAddress)
|
|
Barrel_Distortion_2:OffsetAddress(0x0d)
|
|
Fringe:OffsetAddress(0x1a)
|
|
|
|
print( Barrel_Distortion_1:GetInfo(TYPE_ADDRESS) )
|
|
print( Barrel_Distortion_2:GetInfo(TYPE_ADDRESS) )
|
|
print( Fringe:GetInfo(TYPE_ADDRESS) )
|
|
end
|
|
else
|
|
local Barrel_Distortion_1 = HackTool:AddAddress("BARREL1", tAddress)
|
|
local Barrel_Distortion_2 = HackTool:AddAddress("BARREL2", tAddress)
|
|
local Fringe = HackTool:AddAddress("FRINGE", tAddress)
|
|
Barrel_Distortion_2:OffsetAddress(0x0d)
|
|
Fringe:OffsetAddress(0x1a)
|
|
|
|
print( Barrel_Distortion_1:GetInfo(TYPE_ADDRESS) )
|
|
print( Barrel_Distortion_2:GetInfo(TYPE_ADDRESS) )
|
|
print( Fringe:GetInfo(TYPE_ADDRESS) )
|
|
--u4.exe+1733F80 - 41 8B 86 4C 0D 00 00 - mov eax,[r14+00000D4C]
|
|
--u4.exe+1733F87 - 89 86 3C 01 00 00 - mov [rsi+0000013C],eax
|
|
--u4.exe+1733F8D - 41 8B 86 50 0D 00 00 - mov eax,[r14+00000D50]
|
|
--u4.exe+1733F94 - 89 86 40 01 00 00 - mov [rsi+00000140],eax
|
|
--u4.exe+1733F9A - 41 8B 87 A8 10 01 00 - mov eax,[r15+000110A8]
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
function Enable_Inject()
|
|
|
|
local Variables = HackTool:AllocateMemory("Variables",0)
|
|
Variables:PushFloat("FOVInGame")
|
|
Variables:PushFloat("PhotoFOV")
|
|
Variables:PushFloat("AdditionalFOV")
|
|
Variables:PushFloat("Factor1")
|
|
Variables:PushFloat("Factor2")
|
|
Variables:PushFloat("DOF")
|
|
Variables:PushFloat("AspectRatio")
|
|
Variables:Allocate(NearToAddress)
|
|
Variables["FOVInGame"]:WriteFloat(fDefaultFOV)
|
|
Variables["AdditionalFOV"]:WriteFloat(fAdditionalFOV)
|
|
Variables["Factor1"]:WriteFloat(fFactor1)
|
|
Variables["Factor2"]:WriteFloat(fFactor2)
|
|
Variables["DOF"]:WriteFloat(fDOF)
|
|
Variables["AspectRatio"]:WriteFloat(fAspectRatio)
|
|
|
|
local asm = [[
|
|
|
|
(codecave:jmp)FOV,FOV_cc:
|
|
vmovss xmm0,[rbx+0x30]
|
|
vmovss [(allocation)Variables->FOVInGame],xmm0
|
|
vaddss xmm0,xmm0,[(allocation)Variables->AdditionalFOV]
|
|
vmulss xmm1,xmm0,[(allocation)Variables->Factor1]
|
|
vmulss xmm0,xmm1,[(allocation)Variables->Factor2]
|
|
%originalcode%
|
|
jmp %returnaddress%
|
|
%end%
|
|
|
|
(codecave:jmp)ARATIO,ARATIO_cc:
|
|
%originalcode%
|
|
vmovss xmm0,[(allocation)Variables->AspectRatio]
|
|
jmp %returnaddress%
|
|
%end%
|
|
|
|
(codecave)PHOTOFOV,PHOTOFOV_cc:
|
|
vmovss xmm0,[(allocation)Variables->PhotoFOV]
|
|
%end%
|
|
|
|
(codecave)ASPECT,ASPECT_cc:
|
|
$$0 $$1,[$$2-0x10] $ctx=1
|
|
%end%
|
|
|
|
(codecave)DOF,DOF_cc:
|
|
mov $$1,0x7F800000 $ctx=1
|
|
nop
|
|
nop
|
|
%end%
|
|
|
|
(codecave)BARREL1,BARREL1_cc:
|
|
xor $$1,$$1 $ctx=1
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
%end%
|
|
|
|
(codecave)BARREL2,BARREL2_cc:
|
|
$$0 $$1,(float)1.00 $ctx=1
|
|
nop
|
|
nop
|
|
%end%
|
|
|
|
(codecave)FRINGE,FRINGE_cc:
|
|
xor $$1,$$1 $ctx=1
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
%end%
|
|
|
|
]]
|
|
|
|
|
|
if HackTool:CompileAssembly(asm,"Fixes",NearToAddress) == nil then
|
|
return ErrorOccurred("Assembly compilation failed...")
|
|
else
|
|
Toggle_CodeCave("FOV_cc",bFOV)
|
|
Toggle_CodeCave("PHOTOFOV_cc",bPhotoFOV)
|
|
Toggle_CodeCave("ASPECT_cc",bAspect)
|
|
Toggle_CodeCave("ARATIO_cc",bAspectRatio)
|
|
Toggle_CodeCave("DOF_cc",bDOF)
|
|
Toggle_CodeCave("FRINGE_cc",bFringe)
|
|
Toggle_CodeCave("BARREL1_cc",bBarrelDistortion)
|
|
Toggle_CodeCave("BARREL2_cc",bBarrelDistortion)
|
|
end
|
|
|
|
Write_FOV()
|
|
Write_PhotoFOV()
|
|
Write_AspectRatio()
|
|
|
|
end
|
|
|
|
function Periodic()
|
|
|
|
local Variables = HackTool:GetAllocation("Variables")
|
|
|
|
if Variables and Variables["FOVInGame"] and Variables["AdditionalFOV"] then
|
|
fFOVInGame = Variables["FOVInGame"]:ReadFloat() + Variables["AdditionalFOV"]:ReadFloat()
|
|
PluginViewport:AppendStatusMessage( string.format("\r\n===== Fix informations =====\r\nFOV In: %0.f, FOV Out: %.0f\r\nPhoto mode default FOV: %.2f",Variables["FOVInGame"]:ReadFloat(), fFOVInGame, fDefaultPhotoFOV))
|
|
end
|
|
|
|
end
|
|
|
|
function Write_FOV()
|
|
|
|
local Variables = HackTool:GetAllocation("Variables")
|
|
if Variables and Variables["AdditionalFOV"] then
|
|
Variables["AdditionalFOV"]:WriteFloat(fFOV)
|
|
end
|
|
|
|
end
|
|
|
|
function Write_PhotoFOV()
|
|
|
|
local FOV = 0
|
|
local Variables = HackTool:GetAllocation("Variables")
|
|
if Variables and Variables["PhotoFOV"] then
|
|
if bFOV then
|
|
FOV = fFOV
|
|
end
|
|
Variables["PhotoFOV"]:WriteFloat(fPhotoFOV - FOV)
|
|
end
|
|
|
|
end
|
|
|
|
function Write_DOF()
|
|
|
|
local Variables = HackTool:GetAllocation("Variables")
|
|
if Variables and Variables["DOF"] then
|
|
Variables["DOF"]:WriteFloat(fDOF)
|
|
end
|
|
|
|
end
|
|
|
|
function FOVSlider_Changed(Sender)
|
|
|
|
fFOV = (Sender:GetScaledFloat(2)) + 7
|
|
lblFOVSlider.Caption:SetCaption( string.format("Additional FOV : %.2f",fFOV) )
|
|
Write_FOV()
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function PhotoFOVSlider_Changed(Sender)
|
|
|
|
fPhotoFOV = Sender:GetPosition()
|
|
lblPHOTOFOVSlider.Caption:SetCaption( string.format("Value: %.2f",fPhotoFOV) )
|
|
Write_PhotoFOV()
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function ARatio_Changed()
|
|
|
|
fAspectRatio = ARatio:GetText()
|
|
Write_AspectRatio()
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function Write_AspectRatio()
|
|
|
|
local Variables = HackTool:GetAllocation("Variables")
|
|
if Variables and Variables["AspectRatio"] then
|
|
Variables["AspectRatio"]:WriteFloat(fAspectRatio)
|
|
end
|
|
|
|
end
|
|
|
|
function DOFSlider_Changed(Sender)
|
|
|
|
fDOF = ((Sender:GetScaledFloat(2)) + 50) / 3
|
|
lblDOFSlider.Caption:SetCaption( string.format("Additional FOV : %.2f",fDOF) )
|
|
Write_DOF()
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function CKFOVFix_Changed(Sender)
|
|
|
|
bFOV = Toggle_CheckFix(Sender)
|
|
Toggle_CodeCave("FOV_cc",bFOV)
|
|
Write_PhotoFOV()
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function CKPHOTOFOVFix_Changed(Sender)
|
|
|
|
bPhotoFOV = Toggle_CheckFix(Sender)
|
|
local PhotoDefaultFOV = HackTool:GetAddress("PhotoDefaultFOV")
|
|
|
|
if PhotoDefaultFOV then
|
|
fDefaultPhotoFOV = PhotoDefaultFOV:ReadFloat()
|
|
end
|
|
|
|
Toggle_CodeCave("PHOTOFOV_cc",bPhotoFOV)
|
|
ForceUpdate()
|
|
end
|
|
|
|
function CKAspectFix_Changed(Sender)
|
|
|
|
bAspect= Toggle_CheckFix(Sender)
|
|
Toggle_CodeCave("ASPECT_cc",bAspect)
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function CKDOFFix_Changed(Sender)
|
|
|
|
bDOF = Toggle_CheckFix(Sender)
|
|
Toggle_CodeCave("DOF_cc",bDOF)
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function CKARatioFix_Changed(Sender)
|
|
|
|
bAspectRatio = Toggle_CheckFix(Sender)
|
|
Toggle_CodeCave("ARATIO_cc",bAspectRatio)
|
|
AspectScalingCombo:SetEnabled(bAspectRatio)
|
|
fcbIndex = AspectScalingCombo:GetSelectedIndex()
|
|
|
|
if bAspectRatio == false or fcbIndex == 1 then
|
|
ARatio:SetEnabled(bAspectRatio)
|
|
end
|
|
|
|
end
|
|
|
|
function CKFRINGEFix_Changed(Sender)
|
|
|
|
bFringe = Toggle_CheckFix(Sender)
|
|
Toggle_CodeCave("FRINGE_cc",bFringe)
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function CKBARRELFix_Changed(Sender)
|
|
|
|
bBarrelDistortion = Toggle_CheckFix(Sender)
|
|
Toggle_CodeCave("BARREL1_cc",bBarrelDistortion)
|
|
Toggle_CodeCave("BARREL2_cc",bBarrelDistortion)
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function AspectScalingCombo_Changed(Sender)
|
|
|
|
fcbIndex = AspectScalingCombo:GetSelectedIndex()
|
|
|
|
if fcbIndex == 0 then
|
|
ARatio:SetEnabled(false)
|
|
ARatio:SetText(DisplayInfo:GetWidth() / DisplayInfo:GetHeight())
|
|
else
|
|
ARatio:SetEnabled(true)
|
|
end
|
|
|
|
fAspectRatio = ARatio:GetText()
|
|
Write_AspectRatio()
|
|
ForceUpdate()
|
|
|
|
end
|
|
|
|
function ResolutionChanged()
|
|
|
|
SyncDisplayDetection()
|
|
|
|
end
|
|
|
|
function Disable_Inject()
|
|
|
|
CleanUp()
|
|
|
|
end
|
|
|
|
function Init()
|
|
Init_BaseControls()
|
|
Init_Controls()
|
|
end
|
|
|
|
function DeInit()
|
|
DisableFix()
|
|
end
|