<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>2</ID>
      <Description>"Base resources (Usage: mining gold)"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : RelicCardinal.exe
  Version: 
  Date   : 2022-09-01
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_GET_RESOURCES,RelicCardinal.exe,04 07 F3 0F 58 00 F3 0F 11 00 48 83 C0 04) // should be unique
alloc(newmem,$1000,INJECT_GET_RESOURCES)

label(code)
label(return)
label(i_base_res_addr)

newmem:
  push r15

  vmovss xmm15, [rax]
  vmovss xmm14, [vf_m1]
  vcomiss xmm15, xmm14
  jne endp


  mov r15d, [rax+28]
  test r15d, r15d
  jnz endp
  mov r15d, [rax+2C]
  cmp r15d, 0
  jne endp
  mov r15d, [rax+30]
  cmp r15d, 0
  jne endp
  mov r15d, [rax+3C]
  test r15d, r15d
  jnz endp
  mov r15d, [rax+48]
  test r15d, r15d
  jnz endp
  mov r15d, [rax+4C]
  test r15d, r15d
  jnz endp


  mov r15d, [rax+08]
  cmp r15d, 0
  je endp
  mov r15d, [rax+0c]
  cmp r15d, 0
  je endp
  vmovss xmm15, [vf_m1]
  vcomiss xmm15, xmm0
  jne endp
  mov [i_base_res_addr], rax

endp:
  pop r15

code:
  movss [rax],xmm0
  add rax,04
  jmp return
align 10 cc
  vf_m1:
  dd (float)-1
  i_base_res_addr:
  dq 0


INJECT_GET_RESOURCES+06:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_GET_RESOURCES)
registersymbol(i_base_res_addr)
[DISABLE]

INJECT_GET_RESOURCES+06:
  db F3 0F 11 00 48 83 C0 04

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: RelicCardinal.exe+6C0D7F

RelicCardinal.exe+6C0D5D: 49 F7 E8        - imul r8
RelicCardinal.exe+6C0D60: 48 C1 FA 03     - sar rdx,03
RelicCardinal.exe+6C0D64: 48 8B C2        - mov rax,rdx
RelicCardinal.exe+6C0D67: 48 C1 E8 3F     - shr rax,3F
RelicCardinal.exe+6C0D6B: 48 03 D0        - add rdx,rax
RelicCardinal.exe+6C0D6E: 74 1D           - je RelicCardinal.exe+6C0D8D
RelicCardinal.exe+6C0D70: 48 8B C3        - mov rax,rbx
RelicCardinal.exe+6C0D73: 48 2B FB        - sub rdi,rbx
RelicCardinal.exe+6C0D76: F3 0F 10 04 07  - movss xmm0,[rdi+rax]
RelicCardinal.exe+6C0D7B: F3 0F 58 00     - addss xmm0,[rax]
// ---------- INJECTING HERE ----------
RelicCardinal.exe+6C0D7F: F3 0F 11 00     - movss [rax],xmm0
// ---------- DONE INJECTING  ----------
RelicCardinal.exe+6C0D83: 48 83 C0 04     - add rax,04
RelicCardinal.exe+6C0D87: 48 83 EA 01     - sub rdx,01
RelicCardinal.exe+6C0D8B: 75 E9           - jne RelicCardinal.exe+6C0D76
RelicCardinal.exe+6C0D8D: 48 8B C3        - mov rax,rbx
RelicCardinal.exe+6C0D90: 48 8B 5C 24 30  - mov rbx,[rsp+30]
RelicCardinal.exe+6C0D95: 48 83 C4 20     - add rsp,20
RelicCardinal.exe+6C0D99: 5F              - pop rdi
RelicCardinal.exe+6C0D9A: C3              - ret 
RelicCardinal.exe+6C0D9B: CC              - int 3 
RelicCardinal.exe+6C0D9C: 48 89 5C 24 08  - mov [rsp+08],rbx
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>3</ID>
          <Description>"Food"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>i_base_res_addr</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"Wood"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>i_base_res_addr</Address>
          <Offsets>
            <Offset>1C</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"Gold"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>i_base_res_addr</Address>
          <Offsets>
            <Offset>C</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"Stone"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>i_base_res_addr</Address>
          <Offsets>
            <Offset>18</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>7</ID>
      <Description>"Age of Empires IV 5.0.20249.0  /  https://opencheattables.com  /  CE 7.4+"</Description>
      <Color>400080</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <CheatCodes>
    <CodeEntry>
      <Description>Code :addss xmm0,[rax]</Description>
      <AddressString>RelicCardinal.exe+6C0D7B</AddressString>
      <Before>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
        <Byte>10</Byte>
        <Byte>04</Byte>
        <Byte>07</Byte>
      </Before>
      <Actual>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
        <Byte>58</Byte>
        <Byte>00</Byte>
      </Actual>
      <After>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
        <Byte>11</Byte>
        <Byte>00</Byte>
        <Byte>48</Byte>
      </After>
    </CodeEntry>
    <CodeEntry>
      <Description>Code :movss xmm4,[rax+74]</Description>
      <AddressString>RelicCardinal.exe+30A4AEE</AddressString>
      <Before>
        <Byte>8B</Byte>
        <Byte>F8</Byte>
        <Byte>02</Byte>
        <Byte>00</Byte>
        <Byte>00</Byte>
      </Before>
      <Actual>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
        <Byte>10</Byte>
        <Byte>60</Byte>
        <Byte>74</Byte>
      </Actual>
      <After>
        <Byte>0F</Byte>
        <Byte>28</Byte>
        <Byte>C1</Byte>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
      </After>
    </CodeEntry>
  </CheatCodes>
  <UserdefinedSymbols/>
</CheatTable>
