<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>103</ID>
      <Description>"GAME VERSION"</Description>
      <LastState RealAddress="20C0C2B6794"/>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>String</VariableType>
      <Length>10</Length>
      <Unicode>1</Unicode>
      <CodePage>0</CodePage>
      <ZeroTerminate>1</ZeroTerminate>
      <Address>"UnityPlayer.dll"+01988AD8</Address>
      <Offsets>
        <Offset>14</Offset>
        <Offset>8</Offset>
        <Offset>B8</Offset>
        <Offset>B8</Offset>
        <Offset>28</Offset>
        <Offset>18</Offset>
        <Offset>B8</Offset>
      </Offsets>
    </CheatEntry>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Check Version"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{$lua}
if syntaxcheck then return end

[ENABLE]
local GAME_VERSION = "v0.8.0"

local version

local versionRecord = AddressList.getMemoryRecordByDescription("GAME VERSION")
if versionRecord then
  version = versionRecord.Value
end

if not version or version ~= GAME_VERSION then
    LaunchMonoDataCollector()

    local class = mono_findClass("Assembly-CSharp.dll", "SettingsManager")
    if not class then error("Failed to find class") end

    local field
    local fields = mono_class_enumFields(class)

    for i = 1, #fields do
        local candidate = fields[i]

        if candidate.name == "_buildVersion" and candidate.isStatic then
            field = candidate
            break
        end
    end

    if not field then error("Failed to find field") end

    local value = mono_class_getStaticFieldValue(class, field.field)
    if not value then error("Failed to find field value") end

    local fieldRec = AddressList.getMemoryRecordByDescription("_buildVersion")

    if not fieldRec then
      fieldRec = AddressList.createMemoryRecord()
      fieldRec.setDescription("_buildVersion")
      fieldRec.appendToEntry(memrec)

      fieldRec.Address = value
    end

    local length = readInteger(value + 0x10)
    if not length then error("Failed to get field length") end

    version = readString(value + 0x14, length * 2, true)
end

if version ~= GAME_VERSION then
    memrec.setDescription("Check Version - INCOMPATIBLE")
    memrec.Color = 0x0000BF

    error(string.format("Incompatible game version '%s'", version))
end

memrec.setDescription("Check Version - COMPATIBLE")
memrec.Color = 0x00BF00

[DISABLE]
memrec.setDescription("Check Version")
memrec.Color = 0xFFFFFF

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>26</ID>
          <Description>"Villagers ================================================================"</Description>
          <Options moHideChildren="1"/>
          <LastState Value="" RealAddress="00000000"/>
          <Color>BFBF00</Color>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>27</ID>
              <Description>"God Mode"</Description>
              <Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
              <LastState Value="" RealAddress="00000000"/>
              <Color>FF7F7F</Color>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>25</ID>
                  <Description>"No Damage"</Description>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : No Damage - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+4278D0)
define(bytes,48 8B C4 48 89 58 20)

[ENABLE]

assert(address,bytes)
alloc(newmem,$1000,GameAssembly.dll+4278D0)

label(code)
label(return)

newmem:
  pushfq
  push rax

  mov rax,[rcx+248]
  test rax,rax
  jz code

  mov rax,[rax+f8]
  test rax,rax
  jz code

  mov eax,dword ptr[rax+10]
  test eax,eax
  jz code

  pop rax
  popfq

  ret

code:
  pop rax
  popfq

  mov rax,rsp
  mov [rax+20],rbx
  jmp return

address:
  jmp newmem
  nop 2
return:

[DISABLE]

address:
  db bytes

dealloc(newmem)
</AssemblerScript>
                </CheatEntry>
                <CheatEntry>
                  <ID>32</ID>
                  <Description>"Full Happiness - Updates once per day (few seconds)"</Description>
                  <Options moHideChildren="1"/>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Full Happiness - 0.2.2
  Author : Kvist
}
define(address,GameAssembly.dll+5D0630)
define(bytes,0F 28 C8)

[ENABLE]

assert(address,bytes)

address:
  divps xmm1,xmm1

[DISABLE]

address:
  db bytes
</AssemblerScript>
                </CheatEntry>
                <CheatEntry>
                  <ID>34</ID>
                  <Description>"Full Warmth"</Description>
                  <Options moHideChildren="1"/>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Full Warmth - 0.2.2
  Author : Kvist
}

define(address,GameAssembly.dll+8CB2F5)
define(bytes,F3 0F 5C CE)

[ENABLE]

assert(address,bytes)

address:
  divps xmm1,xmm1
  nop

[DISABLE]

address:
  db bytes
</AssemblerScript>
                </CheatEntry>
                <CheatEntry>
                  <ID>36</ID>
                  <Description>"Full Diet - Updates when eating"</Description>
                  <Options moHideChildren="1"/>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Full Diet - 0.2.2
  Author : Kvist
}

define(address,GameAssembly.dll+8CAD1C)
define(bytes,F3 0F 5E 35 70 65 05 01)

[ENABLE]

assert(address,bytes)

address:
  divss xmm6,xmm6
  nop 4
return:

[DISABLE]

address:
  db bytes
</AssemblerScript>
                </CheatEntry>
                <CheatEntry>
                  <ID>89</ID>
                  <Description>"Age Limit - recalculated once per year (0 = disabled)"</Description>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Age Limit - 0.2.2
  Author : Kvist
}

define(address,GameAssembly.dll+8CAA2E)
define(bytes,F3 0F 2C C0 89 83 E4 00 00 00)

[ENABLE]

assert(address,bytes)
alloc(newmem,$1000,GameAssembly.dll+8CAA2E)

label(check)
label(set)
label(code)
label(return)

newmem:
  maxAge:
    dd 0
  align 10

check:
  cvttss2si eax,xmm0

  pushfq
  push rcx

  mov rcx,[maxAge]
  test ecx,ecx
  jz set

  cmp eax,ecx
  jae code

set:
  mov [rbx+E4],eax

code:
  pop rcx
  popfq
  jmp return

address:
  jmp check
  nop 5
return:

registerSymbol(maxAge)

[DISABLE]

address:
  db bytes

unregisterSymbol(maxAge)
dealloc(newmem)
</AssemblerScript>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>90</ID>
                      <Description>"Maximum Age"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>007FFF</Color>
                      <VariableType>4 Bytes</VariableType>
                      <Address>maxAge</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>95</ID>
                  <Description>"Universal Immunity"</Description>
                  <Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
                  <LastState Value="" RealAddress="00000000"/>
                  <Color>FF7F7F</Color>
                  <GroupHeader>1</GroupHeader>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>50</ID>
                      <Description>"Contagion Immunity"</Description>
                      <LastState/>
                      <Color>BF00BF</Color>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Contagion Immunity - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+53AAD0)
define(bytes,48 89 5C 24 08)

[ENABLE]

assert(address,bytes)

address:
  mov al,01
  ret
  nop 2

[DISABLE]

address:
  db bytes
</AssemblerScript>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>45</ID>
                      <Description>"Disease Immunity"</Description>
                      <LastState/>
                      <Color>BF00BF</Color>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Disease Immunity - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+53AB80)
define(bytes,48 89 5C 24 08)

[ENABLE]

assert(address,bytes)

address:
  mov al,01
  ret
  nop 2

[DISABLE]

address:
  db bytes
</AssemblerScript>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>91</ID>
              <Description>"No Food Consumption"</Description>
              <LastState/>
              <Color>BF00BF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : No Food Consumption - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+5A64FB)
define(bytes,E8 70 27 39 00)

[ENABLE]

assert(address,bytes)

address:
  nop 5

[DISABLE]

address:
  db bytes
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>15</ID>
              <Description>"Instant Heal"</Description>
              <Options moHideChildren="1"/>
              <LastState/>
              <Color>BF00BF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Instant Heal - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+8CE024)
define(bytes,0F 28 CE 49 8B 92 F0 03 00 00)

[ENABLE]

assert(address,bytes)
alloc(newmem,$1000,GameAssembly.dll+76DB24)

label(code)
label(return)

newmem:
  healAmount:
    dd (float)100.0
  align 10

code:
  movss xmm1,[healAmount]
  mov rdx,[r10+000003F0]
  jmp return

address:
  jmp code
  nop 5
return:

registerSymbol(healAmount)

[DISABLE]

address:
  db bytes

unregisterSymbol(healAmount)
dealloc(newmem)
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>16</ID>
                  <Description>"healAmount"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>007FFF</Color>
                  <VariableType>Float</VariableType>
                  <Address>healAmount</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>94</ID>
          <Description>"Village ================================================================"</Description>
          <Options moHideChildren="1"/>
          <LastState Value="" RealAddress="00000000"/>
          <Color>BFBF00</Color>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>46</ID>
              <Description>"Perfect Cropfields"</Description>
              <Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
              <LastState Value="" RealAddress="00000000"/>
              <Color>FF7F7F</Color>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>59</ID>
                  <Description>"Daily Cleanup"</Description>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Daily Cleanup - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+672FC0)
define(bytes,33 C0 48 8B FA)

[ENABLE]

assert(address,bytes)
alloc(newmem,$1000,GameAssembly.dll+672FC0)

label(code)
label(return)

newmem:
  xorps xmm0,xmm0

  mov rax,[rcx+C0]
  movss [rax+20],xmm0

  mov rax,[rcx+C8]
  movss [rax+30],xmm0

code:
  db bytes
  jmp return

address:
  jmp newmem
return:

[DISABLE]

address:
  db bytes

dealloc(newmem)
</AssemblerScript>
                </CheatEntry>
                <CheatEntry>
                  <ID>63</ID>
                  <Description>"Maximum Fertility"</Description>
                  <LastState/>
                  <Color>BF00BF</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Maximum Fertility - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+598E06)
define(bytes,F3 0F 5E F1)

[ENABLE]

assert(address,bytes)

address:
  divss xmm6,xmm6

[DISABLE]

address:
  db bytes
</AssemblerScript>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>97</ID>
              <Description>"Instant Work"</Description>
              <LastState/>
              <Color>BF00BF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Instant Work - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+938E24)
define(bytes,E8 47 81 B7 FF)

[ENABLE]

assert(address,bytes)
alloc(newmem,$1000,GameAssembly.dll+938E24)

label(code)
label(return)

newmem:
  pushfq
  push rax

  mov rax,[rcx+10]
  cmp rax,01
  jne code

  mov rax,[rcx+98]
  mov rax,[rax+1B0]

  mov rdx,rax

code:
  pop rax
  popfq

  call GameAssembly.dll+4B0F70
  jmp return

address:
  jmp newmem
return:

[DISABLE]

address:
  db bytes

dealloc(newmem)
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>100</ID>
              <Description>"Unlimited Resources - Disable when salvaging/transferring items"</Description>
              <LastState/>
              <Color>BF00BF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Farthest Frontier.exe
  Version: v0.8.0
  Script : Unlimited Resources - 0.1.2
  Author : Kvist
}

define(address,GameAssembly.dll+4B114D)
define(bytes,2B CF 41 89 0C 10)

[ENABLE]

assert(address,bytes)
alloc(newmem,$1000,GameAssembly.dll+4B114D)

label(code)
label(null)
label(return)

newmem:
  infiniteHarvest:
    db 0
  align 10

check:
  pushfq
  push rax

  mov al,[rsi+78]
  test al,al
  jnz code

  mov eax,[rsi+68]
  test eax,eax
  jz code

  mov al,[infiniteHarvest]
  test al,al
  jnz null

  mov eax,[rsi+90]
  test eax,eax
  jnz code

null:
  mov edi,0

code:
  pop rax
  popfq

  sub ecx,edi
  mov [r8+rdx],ecx
  jmp return

address:
  jmp check
  nop
return:

registerSymbol(infiniteHarvest)

[DISABLE]

address:
  db bytes

unregisterSymbol(infiniteHarvest)
dealloc(newmem)
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>101</ID>
                  <Description>"Unlimited Harvesting"</Description>
                  <DropDownList ReadOnly="1" DisplayValueAsItem="1">0:Off
1:On
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>007FFF</Color>
                  <VariableType>Byte</VariableType>
                  <Address>infiniteHarvest</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
