<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="24">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Teleport"</Description>
      <Options moHideChildren="1" moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>//Target:  TheForest.exe
//Author:  ++METHOS

[ENABLE]

{====================  teleport  ====================}

aobscanmodule(aob_teleport,TheForest.exe,F3 0F 10 71 14 0F C6 C0 00 0F 29 85 10 FD FF FF 8B D6)
alloc(newmem_teleport,1024,TheForest.exe)

label(return_teleport)
label(originalcode_teleport)
label(save_c1)
label(save_coordinates1)
label(load_c1)
label(load_coordinates1)
label(x_c1)
label(y_c1)
label(z_c1)
label(save_c2)
label(save_coordinates2)
label(load_c2)
label(load_coordinates2)
label(x_c2)
label(y_c2)
label(z_c2)
label(teleport_address)


registersymbol(aob_teleport)
registersymbol(save_coordinates1)
registersymbol(load_coordinates1)
registersymbol(x_c1)
registersymbol(y_c1)
registersymbol(z_c1)
registersymbol(save_coordinates2)
registersymbol(load_coordinates2)
registersymbol(x_c2)
registersymbol(y_c2)
registersymbol(z_c2)
registersymbol(teleport_address)


newmem_teleport:
push edx
lea edx,[ecx+10]
mov [teleport_address],edx
pop edx

cmp byte ptr [save_coordinates1],1
je save_c1
cmp byte ptr [save_coordinates2],1
je save_c2
cmp byte ptr [load_coordinates1],1
je load_c1
cmp byte ptr [load_coordinates2],1
je load_c2

movss xmm6,[ecx+14]
jmp return_teleport

save_c1:
mov byte ptr [save_coordinates1],0
push edx
mov edx,[ecx+10]
mov [x_c1],edx
mov edx,[ecx+10+4]
mov [y_c1],edx
mov edx,[ecx+10+8]
mov [z_c1],edx
pop edx
jmp originalcode_teleport

save_c2:
mov byte ptr [save_coordinates2],0
push edx
mov edx,[ecx+10]
mov [x_c2],edx
mov edx,[ecx+10+4]
mov [y_c2],edx
mov edx,[ecx+10+8]
mov [z_c2],edx
pop edx
jmp originalcode_teleport

load_c1:
cmp [x_c1],0
je originalcode_teleport
mov byte ptr [load_coordinates1],0
push edx
mov edx,[x_c1]
mov [ecx+10],edx
mov edx,[y_c1]
mov [ecx+10+4],edx
mov edx,[z_c1]
mov [ecx+10+8],edx
pop edx
jmp originalcode_teleport

load_c2:
cmp [x_c2],0
je originalcode_teleport
mov byte ptr [load_coordinates2],0
push edx
mov edx,[x_c2]
mov [ecx+10],edx
mov edx,[y_c2]
mov [ecx+10+4],edx
mov edx,[z_c2]
mov [ecx+10+8],edx
pop edx
jmp originalcode_teleport

originalcode_teleport:
movss xmm6,[ecx+14]
jmp return_teleport

teleport_address:
dd 0

save_coordinates1:
db 0
save_coordinates2:
db 0
load_coordinates1:
db 0
load_coordinates2:
db 0

x_c1:
dd 0
y_c1:
dd 0
z_c1:
dd 0
x_c2:
dd 0
y_c2:
dd 0
z_c2:
dd 0

aob_teleport:
jmp newmem_teleport
return_teleport:


[DISABLE]
dealloc(newmem_teleport)
aob_teleport:
db F3 0F 10 71 14

unregistersymbol(aob_teleport)
unregistersymbol(save_coordinates1)
unregistersymbol(load_coordinates1)
unregistersymbol(x_c1)
unregistersymbol(y_c1)
unregistersymbol(z_c1)
unregistersymbol(save_coordinates2)
unregistersymbol(load_coordinates2)
unregistersymbol(x_c2)
unregistersymbol(y_c2)
unregistersymbol(z_c2)
unregistersymbol(teleport_address)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1</ID>
          <Description>"X"</Description>
          <VariableType>Float</VariableType>
          <Address>teleport_address</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>3</ID>
          <Description>"Y"</Description>
          <VariableType>Float</VariableType>
          <Address>teleport_address</Address>
          <Offsets>
            <Offset>4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"Z"</Description>
          <VariableType>Float</VariableType>
          <Address>teleport_address</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>8</ID>
          <Description>"==================================================================="</Description>
          <LastState Value="" RealAddress="00000000"/>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"Save Slot #1"</Description>
          <VariableType>Byte</VariableType>
          <Address>save_coordinates1</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
          <Hotkeys>
            <Hotkey>
              <Action>Set Value</Action>
              <Keys>
                <Key>112</Key>
              </Keys>
              <Value>1</Value>
              <ID>0</ID>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"Load Slot #1"</Description>
          <VariableType>Byte</VariableType>
          <Address>load_coordinates1</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
          <Hotkeys>
            <Hotkey>
              <Action>Set Value</Action>
              <Keys>
                <Key>113</Key>
              </Keys>
              <Value>1</Value>
              <ID>0</ID>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"==================================================================="</Description>
          <LastState Value="" RealAddress="00000000"/>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"Save Slot #2"</Description>
          <VariableType>Byte</VariableType>
          <Address>save_coordinates2</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
          <Hotkeys>
            <Hotkey>
              <Action>Set Value</Action>
              <Keys>
                <Key>114</Key>
              </Keys>
              <Value>1</Value>
              <ID>0</ID>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
        <CheatEntry>
          <ID>7</ID>
          <Description>"Load Slot #2"</Description>
          <VariableType>Byte</VariableType>
          <Address>load_coordinates2</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
          <Hotkeys>
            <Hotkey>
              <Action>Set Value</Action>
              <Keys>
                <Key>115</Key>
              </Keys>
              <Value>1</Value>
              <ID>0</ID>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
