<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>12</ID>
      <Description>"Sea Battle: Super cannon"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Pirates!.exe
  Version: 
  Date   : 2022-08-30
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_BATTLE_CANNON_FASTLOAD,Pirates!.exe,8B 7E 44 8B 76 68) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(i_cannon_multi)

newmem:
  push eax
  mov eax, [esi+50]
  test eax, eax
  jnz endp
  mov eax, 0
  mov [esi+28], eax
  mov [esi+2C], eax
  mov eax, 4
  mov [esi+44], eax

endp:
  pop eax

code:
  mov edi,[esi+44]
  mov esi,[esi+68]
  jmp return
align 10 cc
  i_cannon_multi:
  dd 4

INJECT_BATTLE_CANNON_FASTLOAD:
  jmp newmem
  nop
return:
registersymbol(INJECT_BATTLE_CANNON_FASTLOAD)
registersymbol(i_cannon_multi)
[DISABLE]

INJECT_BATTLE_CANNON_FASTLOAD:
  db 8B 7E 44 8B 76 68

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Pirates!.exe+A6578

Pirates!.exe+A6553: 8B 15 D0 99 8B 00  - mov edx,[Pirates!.exe+4B99D0]
Pirates!.exe+A6559: C1 F8 02           - sar eax,02
Pirates!.exe+A655C: 03 C2              - add eax,edx
Pirates!.exe+A655E: 89 44 24 0C        - mov [esp+0C],eax
Pirates!.exe+A6562: A1 74 CD 72 00     - mov eax,[Pirates!.exe+32CD74]
Pirates!.exe+A6567: 57                 - push edi
Pirates!.exe+A6568: DB 44 24 10        - fild dword ptr [esp+10]
Pirates!.exe+A656C: D9 5C 24 18        - fstp dword ptr [esp+18]
Pirates!.exe+A6570: D9 40 2C           - fld dword ptr [eax+2C]
Pirates!.exe+A6573: E8 64 A8 14 00     - call Pirates!.exe+1F0DDC
// ---------- INJECTING HERE ----------
Pirates!.exe+A6578: 8B 7E 44           - mov edi,[esi+44]
// ---------- DONE INJECTING  ----------
Pirates!.exe+A657B: 8B 76 68           - mov esi,[esi+68]
Pirates!.exe+A657E: 8B 6C 24 18        - mov ebp,[esp+18]
Pirates!.exe+A6582: 89 44 24 10        - mov [esp+10],eax
Pirates!.exe+A6586: DB 44 24 10        - fild dword ptr [esp+10]
Pirates!.exe+A658A: 8B C7              - mov eax,edi
Pirates!.exe+A658C: 99                 - cdq 
Pirates!.exe+A658D: 8B CE              - mov ecx,esi
Pirates!.exe+A658F: 8B DE              - mov ebx,esi
Pirates!.exe+A6591: D9 5C 24 1C        - fstp dword ptr [esp+1C]
Pirates!.exe+A6595: 2B C2              - sub eax,edx
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>14</ID>
          <Description>"Cannon reloads density (1 = normal)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>i_cannon_multi</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>11</ID>
      <Description>"Battle: Cannon load count"</Description>
      <VariableType>4 Bytes</VariableType>
      <Address>Pirates!.exe+4BC4AC</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>2</ID>
      <Description>"Trade: buy with not cost (Gold must enough)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Pirates!.exe
  Version: 
  Date   : 2022-08-30
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_TRADE_GOLD_BUY,Pirates!.exe,29 05 B4 9A 86 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  //sub [Pirates!.exe+469AB4],eax
  jmp return

INJECT_TRADE_GOLD_BUY:
  jmp newmem
  nop
return:
registersymbol(INJECT_TRADE_GOLD_BUY)

[DISABLE]

INJECT_TRADE_GOLD_BUY:
  db 29 05 B4 9A 86 00

unregistersymbol(INJECT_TRADE_GOLD_BUY)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Pirates!.exe+DDF49

Pirates!.exe+DDF23: 8B 04 BD B4 9A 86 00  - mov eax,[edi*4+Pirates!.exe+469AB4]
Pirates!.exe+DDF2A: 83 C4 10              - add esp,10
Pirates!.exe+DDF2D: 40                    - inc eax
Pirates!.exe+DDF2E: 89 04 BD B4 9A 86 00  - mov [edi*4+Pirates!.exe+469AB4],eax
Pirates!.exe+DDF35: 8B 5C BD 10           - mov ebx,[ebp+edi*4+10]
Pirates!.exe+DDF39: 8B 54 BD 2C           - mov edx,[ebp+edi*4+2C]
Pirates!.exe+DDF3D: 4B                    - dec ebx
Pirates!.exe+DDF3E: 89 5C BD 10           - mov [ebp+edi*4+10],ebx
Pirates!.exe+DDF42: 01 55 10              - add [ebp+10],edx
Pirates!.exe+DDF45: 8B 44 BD 2C           - mov eax,[ebp+edi*4+2C]
// ---------- INJECTING HERE ----------
Pirates!.exe+DDF49: 29 05 B4 9A 86 00     - sub [Pirates!.exe+469AB4],eax
// ---------- DONE INJECTING  ----------
Pirates!.exe+DDF4F: 8B 0D 94 84 8C 00     - mov ecx,[Pirates!.exe+4C8494]
Pirates!.exe+DDF55: C7 45 04 01 00 00 00  - mov [ebp+04],00000001
Pirates!.exe+DDF5C: 89 4D 4C              - mov [ebp+4C],ecx
Pirates!.exe+DDF5F: EB 44                 - jmp Pirates!.exe+DDFA5
Pirates!.exe+DDF61: 56                    - push esi
Pirates!.exe+DDF62: 68 00 00 80 BF        - push BF800000
Pirates!.exe+DDF67: 56                    - push esi
Pirates!.exe+DDF68: 56                    - push esi
Pirates!.exe+DDF69: 56                    - push esi
Pirates!.exe+DDF6A: 6A 38                 - push 38
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>9</ID>
      <Description>"??"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>4 Bytes</VariableType>
      <Address>Pirates!.exe+469AAC</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>8</ID>
      <Description>"Crew # (Read only)"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>4 Bytes</VariableType>
      <Address>Pirates!.exe+469AB0</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Gold"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>4 Bytes</VariableType>
      <Address>Pirates!.exe+469AB4</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>7</ID>
      <Description>"Food"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>4 Bytes</VariableType>
      <Address>Pirates!.exe+469AB8</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>5</ID>
      <Description>"Luxuries"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>2 Bytes</VariableType>
      <Address>Pirates!.exe+469ABC</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>6</ID>
      <Description>"Goods"</Description>
      <VariableType>2 Bytes</VariableType>
      <Address>Pirates!.exe+469AC0</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>4</ID>
      <Description>"Spice"</Description>
      <VariableType>2 Bytes</VariableType>
      <Address>Pirates!.exe+469AC4</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>1</ID>
      <Description>"Sugar"</Description>
      <VariableType>2 Bytes</VariableType>
      <Address>Pirates!.exe+469AC8</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>3</ID>
      <Description>"Gun"</Description>
      <VariableType>2 Bytes</VariableType>
      <Address>Pirates!.exe+469ACC</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>10</ID>
      <Description>"??"</Description>
      <VariableType>2 Bytes</VariableType>
      <Address>Pirates!.exe+469AD0</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>13</ID>
      <Description>"Knots (read only)"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>4 Bytes</VariableType>
      <Address>Pirates!.exe+45A0F8</Address>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
