<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>1</ID>
      <Description>"Stop timer"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : 4Elements2.exe
  Version: 
  Date   : 2022-04-26
  Author : bbfox @ https://opencheattables.org
}

[ENABLE]

aobscanmodule(INJECT_STOP_TIMER,4elements2.exe,F3 0F 5C C8 0F 57 C0 0F 2F C1 F3 0F 11 89 B0) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(i_base_timer_addr)
label(is_stop_timer)

newmem:
  mov [i_base_timer_addr], ecx
  cmp dword ptr [is_stop_timer], 1
  jne code
  addss xmm1,xmm0
code:
  subss xmm1,xmm0
  xorps xmm0,xmm0
  jmp return

align 10 cc
  i_base_timer_addr:
  dd 0
  is_stop_timer:
  dd 1

INJECT_STOP_TIMER:
  jmp newmem
  nop 2
return:
registersymbol(is_stop_timer)
registersymbol(i_base_timer_addr)
registersymbol(INJECT_STOP_TIMER)

[DISABLE]

INJECT_STOP_TIMER:
  db F3 0F 5C C8 0F 57 C0

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 4elements2.exe+B9478

4elements2.exe+B944B: B9 38 2B DC 00           - mov ecx,4elements2.exe+402B38
4elements2.exe+B9450: E8 A7 C7 F4 FF           - call 4elements2.exe+5BFC
4elements2.exe+B9455: 84 C0                    - test al,al
4elements2.exe+B9457: 74 5E                    - je 4elements2.exe+B94B7
4elements2.exe+B9459: 8B 45 C0                 - mov eax,[ebp-40]
4elements2.exe+B945C: F3 0F 10 55 08           - movss xmm2,[ebp+08]
4elements2.exe+B9461: F3 0F 10 80 34 94 0D 00  - movss xmm0,[eax+000D9434]
4elements2.exe+B9469: 8B 4D C4                 - mov ecx,[ebp-3C]
4elements2.exe+B946C: F3 0F 59 C2              - mulss xmm0,xmm2
4elements2.exe+B9470: F3 0F 10 89 B0 00 00 00  - movss xmm1,[ecx+000000B0]
// ---------- INJECTING HERE ----------
4elements2.exe+B9478: F3 0F 5C C8              - subss xmm1,xmm0
// ---------- DONE INJECTING  ----------
4elements2.exe+B947C: 0F 57 C0                 - xorps xmm0,xmm0
4elements2.exe+B947F: 0F 2F C1                 - comiss xmm0,xmm1
4elements2.exe+B9482: F3 0F 11 89 B0 00 00 00  - movss [ecx+000000B0],xmm1
4elements2.exe+B948A: 76 2E                    - jna 4elements2.exe+B94BA
4elements2.exe+B948C: F3 0F 10 80 20 01 00 00  - movss xmm0,[eax+00000120]
4elements2.exe+B9494: F3 0F 58 C2              - addss xmm0,xmm2
4elements2.exe+B9498: F3 0F 11 80 20 01 00 00  - movss [eax+00000120],xmm0
4elements2.exe+B94A0: 83 A1 B0 00 00 00 00     - and dword ptr [ecx+000000B0],00
4elements2.exe+B94A7: 80 B8 45 16 0D 00 00     - cmp byte ptr [eax+000D1645],00
4elements2.exe+B94AE: 75 0A                    - jne 4elements2.exe+B94BA
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>3</ID>
          <Description>"Enabled?"</Description>
          <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">0:No
1:Yes
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>is_stop_timer</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"Timer"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>i_base_timer_addr</Address>
          <Offsets>
            <Offset>B0</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>5</ID>
      <Description>"Fast skill cooldown"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : 4Elements2.exe
  Version: 
  Date   : 2022-04-26
  Author : bbfox @ https://opencheattables.org
}

[ENABLE]

aobscanmodule(INJECT_FIRST_SKILL_COLLDOWN,4elements2.exe,F3 0F 10 43 34 8D) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  movss xmm7, [vf_099]
  movss xmm0, [ebx+34]
  comiss xmm0, xmm7
  jae @F
  movss [ebx+34], xmm7
  movss [ebx+30], xmm7

code:
  movss xmm0,[ebx+34]
  jmp return

align 10 cc
  vf_099:
  dd (float)1

INJECT_FIRST_SKILL_COLLDOWN:
  jmp newmem
return:
registersymbol(INJECT_FIRST_SKILL_COLLDOWN)

[DISABLE]

INJECT_FIRST_SKILL_COLLDOWN:
  db F3 0F 10 43 34

unregistersymbol(INJECT_FIRST_SKILL_COLLDOWN)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 4elements2.exe+9A01C

4elements2.exe+99FF2: 03 F1                          - add esi,ecx
4elements2.exe+99FF4: 80 7B 3C 00                    - cmp byte ptr [ebx+3C],00
4elements2.exe+99FF8: 89 4D F4                       - mov [ebp-0C],ecx
4elements2.exe+99FFB: 89 45 F8                       - mov [ebp-08],eax
4elements2.exe+99FFE: 89 BD 54 FF FF FF              - mov [ebp-000000AC],edi
4elements2.exe+9A004: 89 B5 50 FF FF FF              - mov [ebp-000000B0],esi
4elements2.exe+9A00A: 89 75 90                       - mov [ebp-70],esi
4elements2.exe+9A00D: 89 7D 94                       - mov [ebp-6C],edi
4elements2.exe+9A010: 0F 85 F1 06 00 00              - jne 4elements2.exe+9A707
4elements2.exe+9A016: 8B 8D 64 FF FF FF              - mov ecx,[ebp-0000009C]
// ---------- INJECTING HERE ----------
4elements2.exe+9A01C: F3 0F 10 43 34                 - movss xmm0,[ebx+34]
// ---------- DONE INJECTING  ----------
4elements2.exe+9A021: 8D 41 F8                       - lea eax,[ecx-08]
4elements2.exe+9A024: 51                             - push ecx
4elements2.exe+9A025: 89 85 68 FF FF FF              - mov [ebp-00000098],eax
4elements2.exe+9A02B: F3 0F 11 04 24                 - movss [esp],xmm0
4elements2.exe+9A030: 8D 85 68 FF FF FF              - lea eax,[ebp-00000098]
4elements2.exe+9A036: 50                             - push eax
4elements2.exe+9A037: 8D 85 60 FF FF FF              - lea eax,[ebp-000000A0]
4elements2.exe+9A03D: 50                             - push eax
4elements2.exe+9A03E: C7 85 60 FF FF FF 08 00 00 00  - mov [ebp-000000A0],00000008
4elements2.exe+9A048: E8 FD EB F9 FF                 - call 4elements2.exe+38C4A
}
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
