<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>31</ID>
      <Description>"Patch2 [PASSIVE]"</Description>
      <Options moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
      <Color>C08000</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{$lua}
do OpenProcess("NewTales.exe") end
{$asm}
[ENABLE]
// Prepare new aspect ratio
globalalloc(AspectRatio,8)

AspectRatio:
dq (float)1.77

// Get static value [Patch2]
aobscanmodule(GetStatic_AOB,NewTales.exe,F3 0F 59 05 32 D8 8E 01)
registersymbol(Static)
label(Static)
GetStatic_AOB+4(long)+[GetStatic_AOB+4]+4:
Static:
[DISABLE]
unregistersymbol(Static)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1</ID>
          <Description>"Patch0 [ACTIVE]"</Description>
          <Color>0000FF</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript Async="1">[ENABLE]
aobscanmodule(INJECT,NewTales.exe,F3 0F 11 83 28 02 00 00 0F)
alloc(newmem,$1000,INJECT)
label(code return)

newmem:
       mov eax,[AspectRatio]
code:
     mov [rbx+00000228],eax
     jmp return

INJECT:
       jmp newmem
       nop 3
return:
registersymbol(INJECT)

[DISABLE]
INJECT:
  db F3 0F 11 83 28 02 00 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 7FF6C7CE5288

7FF6C7CE5252: F3 0F 59 05 32 D8 8E 01  - mulss xmm0,[7FF6C95D2A8C]
7FF6C7CE525A: EB 03                    - jmp 7FF6C7CE525F
7FF6C7CE525C: 0F 57 C0                 - xorps xmm0,xmm0
7FF6C7CE525F: F3 0F 10 8B C0 08 00 00  - movss xmm1,[rbx+000008C0]
7FF6C7CE5267: 0F 2F CE                 - comiss xmm1,xmm6
7FF6C7CE526A: F3 0F 11 83 18 02 00 00  - movss [rbx+00000218],xmm0
7FF6C7CE5272: 76 27                    - jna 7FF6C7CE529B
7FF6C7CE5274: F3 0F 10 83 BC 08 00 00  - movss xmm0,[rbx+000008BC]
7FF6C7CE527C: F3 0F 5E C1              - divss xmm0,xmm1
7FF6C7CE5280: F3 0F 11 83 C4 08 00 00  - movss [rbx+000008C4],xmm0
// ---------- INJECTING HERE ----------
7FF6C7CE5288: F3 0F 11 83 28 02 00 00  - movss [rbx+00000228],xmm0
// ---------- DONE INJECTING  ----------
7FF6C7CE5290: 0F 28 74 24 20           - movaps xmm6,[rsp+20]
7FF6C7CE5295: 48 83 C4 30              - add rsp,30
7FF6C7CE5299: 5B                       - pop rbx
7FF6C7CE529A: C3                       - ret 
7FF6C7CE529B: F3 0F 11 B3 C4 08 00 00  - movss [rbx+000008C4],xmm6
7FF6C7CE52A3: F3 0F 11 B3 28 02 00 00  - movss [rbx+00000228],xmm6
7FF6C7CE52AB: 0F 28 74 24 20           - movaps xmm6,[rsp+20]
7FF6C7CE52B0: 48 83 C4 30              - add rsp,30
7FF6C7CE52B4: 5B                       - pop rbx
7FF6C7CE52B5: C3                       - ret 
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>30</ID>
          <Description>"Patch3 [ACTIVE]"</Description>
          <Color>0000FF</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
aobscanmodule(Patch3,NewTales.exe,89 47 30 0F B6 83 2C 02 00 00)
alloc(bnewmem,$1000,Patch3)
label(code return)

bnewmem:
        mov eax,[AspectRatio]
code:
     mov [rdi+30],eax
     movzx eax,byte ptr [rbx+0000022C]
     jmp return

Patch3:
       jmp bnewmem
       nop 5
return:
registersymbol(Patch3)

[DISABLE]
Patch3:
  db 89 47 30 0F B6 83 2C 02 00 00

unregistersymbol(Patch3)
dealloc(bnewmem)

{
// ORIGINAL CODE - INJECTION POINT: NewTales.exe+2A7A924

NewTales.exe+2A7A8EB: 0F 28 B4 24 70 02 00 00  - movaps xmm6,[rsp+00000270]
NewTales.exe+2A7A8F3: 89 47 14                 - mov [rdi+14],eax
NewTales.exe+2A7A8F6: F6 83 38 02 00 00 08     - test byte ptr [rbx+00000238],08
NewTales.exe+2A7A8FD: 74 12                    - je NewTales.exe+2A7A911
NewTales.exe+2A7A8FF: F3 0F 10 83 74 02 00 00  - movss xmm0,[rbx+00000274]
NewTales.exe+2A7A907: F3 0F 58 83 18 02 00 00  - addss xmm0,[rbx+00000218]
NewTales.exe+2A7A90F: EB 08                    - jmp NewTales.exe+2A7A919
NewTales.exe+2A7A911: F3 0F 10 83 18 02 00 00  - movss xmm0,[rbx+00000218]
NewTales.exe+2A7A919: F3 0F 11 47 18           - movss [rdi+18],xmm0
NewTales.exe+2A7A91E: 8B 83 28 02 00 00        - mov eax,[rbx+00000228]
// ---------- INJECTING HERE ----------
NewTales.exe+2A7A924: 89 47 30                 - mov [rdi+30],eax
// ---------- DONE INJECTING  ----------
NewTales.exe+2A7A927: 0F B6 83 2C 02 00 00     - movzx eax,byte ptr [rbx+0000022C]
NewTales.exe+2A7A92E: 33 47 3C                 - xor eax,[rdi+3C]
NewTales.exe+2A7A931: 83 E0 01                 - and eax,01
NewTales.exe+2A7A934: 31 47 3C                 - xor [rdi+3C],eax
NewTales.exe+2A7A937: 0F B6 8B 38 02 00 00     - movzx ecx,byte ptr [rbx+00000238]
NewTales.exe+2A7A93E: 03 C9                    - add ecx,ecx
NewTales.exe+2A7A940: 33 4F 3C                 - xor ecx,[rdi+3C]
NewTales.exe+2A7A943: 83 E1 02                 - and ecx,02
NewTales.exe+2A7A946: 31 4F 3C                 - xor [rdi+3C],ecx
NewTales.exe+2A7A949: 0F B6 83 39 02 00 00     - movzx eax,byte ptr [rbx+00000239]
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"Patch1 [ACTIVE]"</Description>
          <Color>0000FF</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
alloc(newmem,2048,"NewTales.exe"+E12F35) 
label(returnhere originalcode exit)

newmem:
       mov eax,[AspectRatio]

originalcode:
             mov [rcx+30],eax
             mov eax,[rdx+34]

exit:
     jmp returnhere

"NewTales.exe"+E12F35:
                      jmp newmem
                      nop
returnhere:

[DISABLE]
dealloc(newmem)
"NewTales.exe"+E12F35:
db 89 41 30 8B 42 34
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>24</ID>
              <Description>"(Alternative) to Patch1"</Description>
              <Color>00FFFF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{$lua}
luascan = createMemScan(true);
input1='89 41 30 8B ? ? 89 ? ? 0F ? ? ? 88 ? ? 8B ? ? 33 ? ? 83 ? ? 31 ? ? 8B ? ? 33 ? ? 83 ? ? 31 ? ? 48 8D 4F'
input2=nil
luascan.firstScan(soExactValue,vtByteArray,rtRounded,input1,input2,getAddress(process),getAddress(process)+getAddress(getModuleSize(process)),"",fsmNotAligned,nil,true,false,false,false);
luascan.waitTillDone();

foundlist=createFoundList(scan);
foundlist.initialize();

for i=0,foundlist.Count-1 do
Scanresult=foundlist.Address[i]
registerSymbol("Patch0",Scanresult);
end

foundlist.deinitialize();
foundlist.destroy();
foundlist=nil;
luascan.destroy();
luascan=nil;

{$asm}
[ENABLE]

alloc(Memory,1000,Patch0)
registersymbol(Memory SafeReturn)
label(returnhere SafeReturn exit OC)

Memory:
       cmp eax,3FE38E39
       jne OC
       mov eax,(float)2.4

OC:
   mov [rcx+30],eax
   mov eax,[rdx+34]

exit:
     jmp returnhere

Memory+64:
SafeReturn:
readmem(Patch0,25)

Patch0:
       jmp Memory
       nop
returnhere:

[DISABLE]
Patch0:
readmem(SafeReturn,25)
unregistersymbol(Patch0 Memory SafeReturn)
dealloc(Memory)


{
NewTales.exe+E12F35 - 89 41 30              - mov [rcx+30],eax &lt;&lt;--- HERE
NewTales.exe+E12F38 - 8B 42 34              - mov eax,[rdx+34]
NewTales.exe+E12F3B - 89 41 34              - mov [rcx+34],eax
NewTales.exe+E12F3E - 0FB6 42 38            - movzx eax,byte ptr [rdx+38]
NewTales.exe+E12F42 - 88 41 38              - mov [rcx+38],al
NewTales.exe+E12F45 - 8B 41 3C              - mov eax,[rcx+3C]
NewTales.exe+E12F48 - 33 42 3C              - xor eax,[rdx+3C]
NewTales.exe+E12F4B - 83 E0 01              - and eax,01
NewTales.exe+E12F4E - 31 41 3C              - xor [rcx+3C],eax
NewTales.exe+E12F51 - 8B 49 3C              - mov ecx,[rcx+3C]
NewTales.exe+E12F54 - 33 4A 3C              - xor ecx,[rdx+3C]
NewTales.exe+E12F57 - 83 E1 02              - and ecx,02
NewTales.exe+E12F5A - 31 4F 3C              - xor [rdi+3C],ecx
NewTales.exe+E12F5D - 48 8D 4F 50           - lea rcx,[rdi+50] &lt;&lt;-- note at two bytes after 48 ..
NewTales.exe+E12F61 - 0FB6 42 40            - movzx eax,byte ptr [rdx+40]
NewTales.exe+E12F65 - 88 47 40              - mov [rdi+40],al
NewTales.exe+E12F68 - 8B 42 44              - mov eax,[rdx+44]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>33</ID>
                  <Description>""</Description>
                  <GroupHeader>1</GroupHeader>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>32</ID>
                      <Description>"Aspect Ratio"</Description>
                      <DropDownList DescriptionOnly="1">1.777777791:[1920x1080]
2.13:[1920x900]
2.37:[2560x1080]
2.389:[3440x1440]
2.4:[3840x1600]
2.370:[5120x2160]
2.38:[6880x2880]
</DropDownList>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>AspectRatio</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>22</ID>
                      <Description>"FOV"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>00FFFF</Color>
                      <VariableType>Float</VariableType>
                      <Address>Static</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
