<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>4</ID>
      <Description>"Activate this first"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <LastState/>
      <Color>FF0000</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]

{$lua}
if syntaxcheck then return end
GetLuaEngine().MenuItem5.doClick() -- crear lua output

function mono_register(class_name,method_name,symbol,offset)
  if LaunchMonoDataCollector()==0 then
	  print("LaunchMonoDataCollector failed. :(")
  end
  class= mono_findClass('', class_name)
  if class then
    --print(mono_class_getName(class))
    method = mono_class_findMethod(class, method_name)
    if method then
      --print(mono_method_getName(method))
      ptr = mono_compile_method(method)
      if ptr then registerSymbol(symbol, ptr+offset) end
    end
  end
end

OpenProcess("Potion Craft.exe")

{$asm}

[DISABLE]
{$lua}
if monopipe then monopipe = nil, monopipe.Destroy() end -- deactivates mono features to prevent game hanging on exit
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>21</ID>
          <Description>"Make haggle minigame easier"</Description>
          <Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
          <LastState Value="" RealAddress="00000000"/>
          <Color>FF0000</Color>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>13</ID>
              <Description>"Mod haggle minigame: set speed of scales"</Description>
              <Options moHideChildren="1"/>
              <LastState/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>define(bytes_ScalesGetCurrentSpeed, F3 0F 10 8E A8 00 00 00 F3 0F 5A C9 F2 0F 59)
[ENABLE]

{$lua}
if syntaxcheck then return end
mono_register("Scales","GetCappingFunctionResult","code_ScalesGetCurrentSpeed",0x18f)
{$asm}

assert(code_ScalesGetCurrentSpeed,bytes_ScalesGetCurrentSpeed)

alloc(mem_ScalesGetCurrentSpeed,$1000,code_ScalesGetCurrentSpeed)

label(code)
label(return)
label(desired_ScalesGetCurrentSpeed)

mem_ScalesGetCurrentSpeed:
code:
  movss xmm1,[desired_ScalesGetCurrentSpeed]
  jmp return
desired_ScalesGetCurrentSpeed:
  dd (float)0.2
code_ScalesGetCurrentSpeed:
  jmp mem_ScalesGetCurrentSpeed
  nop 3
return:

registersymbol(desired_ScalesGetCurrentSpeed)
[DISABLE]
code_ScalesGetCurrentSpeed:
  db bytes_ScalesGetCurrentSpeed

unregistersymbol(desired_ScalesGetCurrentSpeed)
unregistersymbol(code_ScalesGetCurrentSpeed)
dealloc(mem_ScalesGetCurrentSpeed)

{
// ORIGINAL CODE - INJECTION POINT: ObjectBased.Scales.Scales:GetCappingFunctionResult+18f

ObjectBased.Scales.Scales:GetCappingFunctionResult+15d: F2 0F 5A E9                    - cvtsd2ss xmm5,xmm1
ObjectBased.Scales.Scales:GetCappingFunctionResult+161: F3 0F 11 6D F4                 - movss [rbp-0C],xmm5
ObjectBased.Scales.Scales:GetCappingFunctionResult+166: F3 0F 10 4D F4                 - movss xmm1,[rbp-0C]
ObjectBased.Scales.Scales:GetCappingFunctionResult+16b: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
ObjectBased.Scales.Scales:GetCappingFunctionResult+16f: F2 0F 5C C1                    - subsd xmm0,xmm1
ObjectBased.Scales.Scales:GetCappingFunctionResult+173: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
ObjectBased.Scales.Scales:GetCappingFunctionResult+177: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
ObjectBased.Scales.Scales:GetCappingFunctionResult+17e: 49 BB E0 EE 6B D9 BD 01 00 00  - mov r11,UnityEngine.Mathf:Sign
ObjectBased.Scales.Scales:GetCappingFunctionResult+188: 41 FF D3                       - call r11
ObjectBased.Scales.Scales:GetCappingFunctionResult+18b: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
// ---------- INJECTING HERE ----------
ObjectBased.Scales.Scales:GetCappingFunctionResult+18f: F3 0F 10 8E A8 00 00 00        - movss xmm1,[rsi+000000A8]
// ---------- DONE INJECTING  ----------
ObjectBased.Scales.Scales:GetCappingFunctionResult+197: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
ObjectBased.Scales.Scales:GetCappingFunctionResult+19b: F2 0F 59 C1                    - mulsd xmm0,xmm1
ObjectBased.Scales.Scales:GetCappingFunctionResult+19f: F2 0F 11 45 D0                 - movsd [rbp-30],xmm0
ObjectBased.Scales.Scales:GetCappingFunctionResult+1a4: 66 90                          - nop 2
ObjectBased.Scales.Scales:GetCappingFunctionResult+1a6: 49 BB 90 48 CC DE BD 01 00 00  - mov r11,UnityEngine.Time:get_deltaTime
ObjectBased.Scales.Scales:GetCappingFunctionResult+1b0: 41 FF D3                       - call r11
ObjectBased.Scales.Scales:GetCappingFunctionResult+1b3: F3 0F 5A D8                    - cvtss2sd xmm3,xmm0
ObjectBased.Scales.Scales:GetCappingFunctionResult+1b7: F2 0F 10 45 E0                 - movsd xmm0,[rbp-20]
ObjectBased.Scales.Scales:GetCappingFunctionResult+1bc: F2 0F 10 4D D8                 - movsd xmm1,[rbp-28]
ObjectBased.Scales.Scales:GetCappingFunctionResult+1c1: F2 0F 10 55 D0                 - movsd xmm2,[rbp-30]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>14</ID>
                  <Description>"Speed of scales"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desired_ScalesGetCurrentSpeed</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>10</ID>
              <Description>"Mod haggle minigame: set speed of pointer"</Description>
              <Options moHideChildren="1"/>
              <LastState/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>define(bytes_HagglePointerUpdate, F3 0F 10 46 30 F3 0F 5A C0 F2 0F 11 45 C8)

[ENABLE]

{$lua}
if syntaxcheck then return end
mono_register("Pointer","Update","code_HagglePointerUpdate",0x3e)
{$asm}

assert(code_HagglePointerUpdate,bytes_HagglePointerUpdate)

alloc(mem_HagglePointerUpdate,$1000,code_HagglePointerUpdate)

label(code)
label(return)
label(desired_HagglePointerUpdate)

mem_HagglePointerUpdate:
code:
  movss xmm0,[desired_HagglePointerUpdate]
  jmp return
desired_HagglePointerUpdate:
  dd (float)0.2
code_HagglePointerUpdate:
  jmp mem_HagglePointerUpdate
return:

registersymbol(desired_HagglePointerUpdate)
[DISABLE]
code_HagglePointerUpdate:
  db bytes_HagglePointerUpdate

unregistersymbol(desired_HagglePointerUpdate)
unregistersymbol(code_HagglePointerUpdate)
dealloc(mem_HagglePointerUpdate)

{
// ORIGINAL CODE - INJECTION POINT: ObjectBased.Haggle.Pointer:Update+3e

ObjectBased.Haggle.Pointer:Update+13: 48 B8 78 CF F9 CE C1 01 00 00  - mov rax,000001C1CEF9CF78
ObjectBased.Haggle.Pointer:Update+1d: 48 8B 00                       - mov rax,[rax]
ObjectBased.Haggle.Pointer:Update+20: 48 8B C8                       - mov rcx,rax
ObjectBased.Haggle.Pointer:Update+23: 83 39 00                       - cmp dword ptr [rcx],00
ObjectBased.Haggle.Pointer:Update+26: 48 63 40 50                    - movsxd  rax,dword ptr [rax+50]
ObjectBased.Haggle.Pointer:Update+2a: 85 C0                          - test eax,eax
ObjectBased.Haggle.Pointer:Update+2c: 0F 85 91 01 00 00              - jne ObjectBased.Haggle.Pointer:Update+1c3
ObjectBased.Haggle.Pointer:Update+32: 48 63 46 40                    - movsxd  rax,dword ptr [rsi+40]
ObjectBased.Haggle.Pointer:Update+36: 85 C0                          - test eax,eax
ObjectBased.Haggle.Pointer:Update+38: 0F 85 85 01 00 00              - jne ObjectBased.Haggle.Pointer:Update+1c3
// ---------- INJECTING HERE ----------
ObjectBased.Haggle.Pointer:Update+3e: F3 0F 10 46 30                 - movss xmm0,[rsi+30]
// ---------- DONE INJECTING  ----------
ObjectBased.Haggle.Pointer:Update+43: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
ObjectBased.Haggle.Pointer:Update+47: F2 0F 11 45 C8                 - movsd [rbp-38],xmm0
ObjectBased.Haggle.Pointer:Update+4c: 66 90                          - nop 2
ObjectBased.Haggle.Pointer:Update+4e: 49 BB 50 18 1A E1 C1 01 00 00  - mov r11,UnityEngine.Time:get_deltaTime
ObjectBased.Haggle.Pointer:Update+58: 41 FF D3                       - call r11
ObjectBased.Haggle.Pointer:Update+5b: F3 0F 5A C8                    - cvtss2sd xmm1,xmm0
ObjectBased.Haggle.Pointer:Update+5f: F2 0F 10 45 C8                 - movsd xmm0,[rbp-38]
ObjectBased.Haggle.Pointer:Update+64: F2 0F 59 C1                    - mulsd xmm0,xmm1
ObjectBased.Haggle.Pointer:Update+68: 48 63 46 3C                    - movsxd  rax,dword ptr [rsi+3C]
ObjectBased.Haggle.Pointer:Update+6c: F2 0F 11 45 E0                 - movsd [rbp-20],xmm0
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>15</ID>
                  <Description>"Speed of pointer"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desired_HagglePointerUpdate</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>37</ID>
          <Description>"Npc always can huggle [Usage: offer a trade]"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(bytes_CanNpcHaggle, 48 8B 46 20 48 8B C8 83 39 00 0F B6 40)

[ENABLE]

{$lua}
if syntaxcheck then return end
mono_register("TradeManager","CanNpcHaggle","code_CanNpcHaggle",0xf)
{$asm}
assert(code_CanNpcHaggle,bytes_CanNpcHaggle)
alloc(mem_CanNpcHaggle,$1000,code_CanNpcHaggle)

label(code)
label(return)
label(desired_CanNpcHaggle)
label(ptr_NpcMonoBehaviour)
label(ptr_TradeManager)

mem_CanNpcHaggle:
code:
  mov [ptr_TradeManager],rcx
  mov [ptr_NpcMonoBehaviour],rsi
  mov [rsi+60],#4 // NpcMonoBehaviour.mood = max
  mov rax,[rsi+20] // NpcMonoBehaviour.trading
  mov byte ptr [rax+70],0 // NpcMonoBehaviour.isHaggleCanceled = 0
  mov rcx,rax
  jmp return
desired_CanNpcHaggle:
  dd (int)4
ptr_NpcMonoBehaviour:
  dq 0
ptr_TradeManager:
  dq 0
code_CanNpcHaggle:
  jmp mem_CanNpcHaggle
  nop 2
return:

registersymbol(ptr_NpcMonoBehaviour)
registersymbol(ptr_TradeManager)
registersymbol(desired_CanNpcHaggle)
[DISABLE]
code_CanNpcHaggle:
  db bytes_CanNpcHaggle

unregistersymbol(ptr_NpcMonoBehaviour)
unregistersymbol(ptr_TradeManager)
unregistersymbol(desired_CanNpcHaggle)
unregistersymbol(code_CanNpcHaggle)
dealloc(mem_CanNpcHaggle)

{
// ORIGINAL CODE - INJECTION POINT: TradeManager:CanNpcHaggle+f

120E1C3E287: 00 00              - add [rax],al
120E1C3E289: 00 00              - add [rax],al
120E1C3E28B: 00 00              - add [rax],al
120E1C3E28D: 00 00              - add [rax],al
120E1C3E28F: 00 55 48           - add [rbp+48],dl
TradeManager:CanNpcHaggle+2: 8B EC              - mov ebp,esp
TradeManager:CanNpcHaggle+4: 48 83 EC 30        - sub rsp,30
TradeManager:CanNpcHaggle+8: 48 89 75 F8        - mov [rbp-08],rsi
TradeManager:CanNpcHaggle+c: 48 8B F2           - mov rsi,rdx
// ---------- INJECTING HERE ----------
TradeManager:CanNpcHaggle+f: 48 8B 46 20        - mov rax,[rsi+20]
// ---------- DONE INJECTING  ----------
TradeManager:CanNpcHaggle+13: 48 8B C8           - mov rcx,rax
TradeManager:CanNpcHaggle+16: 83 39 00           - cmp dword ptr [rcx],00
TradeManager:CanNpcHaggle+19: 0F B6 40 70        - movzx eax,byte ptr [rax+70]
TradeManager:CanNpcHaggle+1d: 85 C0              - test eax,eax
TradeManager:CanNpcHaggle+1f: 0F 85 5F 00 00 00  - jne TradeManager:CanNpcHaggle+84
TradeManager:CanNpcHaggle+25: 83 3E 00           - cmp dword ptr [rsi],00
TradeManager:CanNpcHaggle+28: 48 63 46 60        - movsxd  rax,dword ptr [rsi+60]
TradeManager:CanNpcHaggle+2c: 83 F8 01           - cmp eax,01
TradeManager:CanNpcHaggle+2f: 40 0F 9F C0        - setg al
TradeManager:CanNpcHaggle+33: 48 0F B6 C0        - movzx rax,al
TradeManager:CanNpcHaggle+37: 85 C0              - test eax,eax
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>39</ID>
              <Description>"Base Pointer"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>8 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>0</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>40</ID>
              <Description>"Haggle canceled?"</Description>
              <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">*:Yes
0:No
</DropDownList>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>70</Offset>
                <Offset>20</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>41</ID>
              <Description>"NPC mood"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>60</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>38</ID>
              <Description>"Desired NPC mood"</Description>
              <ShowAsSigned>1</ShowAsSigned>
              <Color>FF8000</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>desired_CanNpcHaggle</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>42</ID>
              <Description>"NPC gold"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_TradeManager</Address>
              <Offsets>
                <Offset>80</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>47</ID>
              <Description>"Karma reward"</Description>
              <ShowAsSigned>1</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>20</Offset>
                <Offset>50</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>48</ID>
              <Description>"Desired Effects Count"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>18</Offset>
                <Offset>18</Offset>
                <Offset>50</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>49</ID>
              <Description>"Desired Effect [1]"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>8 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>0</Offset>
                <Offset>20</Offset>
                <Offset>18</Offset>
                <Offset>50</Offset>
              </Offsets>
              <CheatEntries>
                <CheatEntry>
                  <ID>50</ID>
                  <Description>"Price"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>30</Offset>
                    <Offset>20</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>62</ID>
                  <Description>"Name"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>String</VariableType>
                  <Length>64</Length>
                  <Unicode>0</Unicode>
                  <CodePage>0</CodePage>
                  <ZeroTerminate>1</ZeroTerminate>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>50</Offset>
                    <Offset>10</Offset>
                    <Offset>20</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>52</ID>
              <Description>"Desired Effect [2]"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>8 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>0</Offset>
                <Offset>28</Offset>
                <Offset>18</Offset>
                <Offset>50</Offset>
              </Offsets>
              <CheatEntries>
                <CheatEntry>
                  <ID>53</ID>
                  <Description>"Price"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>30</Offset>
                    <Offset>28</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>63</ID>
                  <Description>"Name"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>String</VariableType>
                  <Length>64</Length>
                  <Unicode>0</Unicode>
                  <CodePage>0</CodePage>
                  <ZeroTerminate>1</ZeroTerminate>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>50</Offset>
                    <Offset>10</Offset>
                    <Offset>28</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>55</ID>
              <Description>"Desired Effect [3]"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>8 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>0</Offset>
                <Offset>30</Offset>
                <Offset>18</Offset>
                <Offset>50</Offset>
              </Offsets>
              <CheatEntries>
                <CheatEntry>
                  <ID>56</ID>
                  <Description>"Price"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>30</Offset>
                    <Offset>30</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>64</ID>
                  <Description>"Name"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>String</VariableType>
                  <Length>64</Length>
                  <Unicode>0</Unicode>
                  <CodePage>0</CodePage>
                  <ZeroTerminate>1</ZeroTerminate>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>50</Offset>
                    <Offset>10</Offset>
                    <Offset>30</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>58</ID>
              <Description>"Desired Effect [4]"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>8 Bytes</VariableType>
              <Address>ptr_NpcMonoBehaviour</Address>
              <Offsets>
                <Offset>0</Offset>
                <Offset>38</Offset>
                <Offset>18</Offset>
                <Offset>50</Offset>
              </Offsets>
              <CheatEntries>
                <CheatEntry>
                  <ID>59</ID>
                  <Description>"Price"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>30</Offset>
                    <Offset>38</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>65</ID>
                  <Description>"Name"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>String</VariableType>
                  <Length>64</Length>
                  <Unicode>0</Unicode>
                  <CodePage>0</CodePage>
                  <ZeroTerminate>1</ZeroTerminate>
                  <Address>ptr_NpcMonoBehaviour</Address>
                  <Offsets>
                    <Offset>50</Offset>
                    <Offset>10</Offset>
                    <Offset>38</Offset>
                    <Offset>18</Offset>
                    <Offset>50</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"Edit player [Usage: Mouse over level value on the upper right screen corner]"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(bytes_OpenTalentsButton, 48 8B 00 48 8B 40 20 48 8B C8 83 39 00 F3)
[ENABLE]

{$lua}
if syntaxcheck then return end
mono_register("OpenTalentsButton","GetTooltipContent","code_OpenTalentsButton",0xf1)
{$asm}
assert(code_OpenTalentsButton,bytes_OpenTalentsButton)
alloc(mem_OpenTalentsButton,$1000,code_OpenTalentsButton)

label(code)
label(return)
label(ptr_PlayerManager)

mem_OpenTalentsButton:
code:
  mov rax,[rax]
  mov [ptr_PlayerManager],rax
  mov rax,[rax+20]
  jmp return
ptr_PlayerManager:
  dq 0
code_OpenTalentsButton:
  jmp mem_OpenTalentsButton
  nop 2
return:
registersymbol(ptr_PlayerManager)
[DISABLE]
code_OpenTalentsButton:
  db bytes_OpenTalentsButton

unregistersymbol(ptr_PlayerManager)
unregistersymbol(code_OpenTalentsButton)
dealloc(mem_OpenTalentsButton)

{
// ORIGINAL CODE - INJECTION POINT: InventoryWindow.OpenTalentsButton:GetTooltipContent+f1

InventoryWindow.OpenTalentsButton:GetTooltipContent+bb: 48 8B 4D 90                    - mov rcx,[rbp-70]
InventoryWindow.OpenTalentsButton:GetTooltipContent+bf: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
InventoryWindow.OpenTalentsButton:GetTooltipContent+c6: 49 BB B3 C1 66 D0 72 01 00 00  - mov r11,00000172D066C1B3
InventoryWindow.OpenTalentsButton:GetTooltipContent+d0: 41 FF D3                       - call r11
InventoryWindow.OpenTalentsButton:GetTooltipContent+d3: 48 8B D0                       - mov rdx,rax
InventoryWindow.OpenTalentsButton:GetTooltipContent+d6: 48 8B 45 A0                    - mov rax,[rbp-60]
InventoryWindow.OpenTalentsButton:GetTooltipContent+da: 48 8B 4D 98                    - mov rcx,[rbp-68]
InventoryWindow.OpenTalentsButton:GetTooltipContent+de: 48 89 51 10                    - mov [rcx+10],rdx
InventoryWindow.OpenTalentsButton:GetTooltipContent+e2: E9 29 0A 00 00                 - jmp InventoryWindow.OpenTalentsButton:GetTooltipContent+b10
InventoryWindow.OpenTalentsButton:GetTooltipContent+e7: 48 B8 68 9F 66 CF 72 01 00 00  - mov rax,00000172CF669F68
// ---------- INJECTING HERE ----------
InventoryWindow.OpenTalentsButton:GetTooltipContent+f1: 48 8B 00                       - mov rax,[rax]
// ---------- DONE INJECTING  ----------
InventoryWindow.OpenTalentsButton:GetTooltipContent+f4: 48 8B 40 20                    - mov rax,[rax+20]
InventoryWindow.OpenTalentsButton:GetTooltipContent+f8: 48 8B C8                       - mov rcx,rax
InventoryWindow.OpenTalentsButton:GetTooltipContent+fb: 83 39 00                       - cmp dword ptr [rcx],00
InventoryWindow.OpenTalentsButton:GetTooltipContent+fe: F3 0F 10 40 28                 - movss xmm0,[rax+28]
InventoryWindow.OpenTalentsButton:GetTooltipContent+103: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
InventoryWindow.OpenTalentsButton:GetTooltipContent+107: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
InventoryWindow.OpenTalentsButton:GetTooltipContent+10b: F3 0F 11 6D AC                 - movss [rbp-54],xmm5
InventoryWindow.OpenTalentsButton:GetTooltipContent+110: F3 0F 10 45 AC                 - movss xmm0,[rbp-54]
InventoryWindow.OpenTalentsButton:GetTooltipContent+115: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
InventoryWindow.OpenTalentsButton:GetTooltipContent+119: 48 B8 68 9F 66 CF 72 01 00 00  - mov rax,00000172CF669F68
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>20</ID>
              <Description>"Base Pointer"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>800080</Color>
              <VariableType>8 Bytes</VariableType>
              <Address>ptr_PlayerManager</Address>
              <Offsets>
                <Offset>0</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>28</ID>
              <Description>"Experience"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>ptr_PlayerManager</Address>
              <Offsets>
                <Offset>28</Offset>
                <Offset>20</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>23</ID>
              <Description>"Talent points"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_PlayerManager</Address>
              <Offsets>
                <Offset>30</Offset>
                <Offset>28</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>26</ID>
              <Description>"Gold"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_PlayerManager</Address>
              <Offsets>
                <Offset>68</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>24</ID>
              <Description>"Popularity"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_PlayerManager</Address>
              <Offsets>
                <Offset>30</Offset>
                <Offset>30</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>25</ID>
              <Description>"Karma"</Description>
              <ShowAsSigned>1</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>ptr_PlayerManager</Address>
              <Offsets>
                <Offset>28</Offset>
                <Offset>38</Offset>
              </Offsets>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>46</ID>
          <Description>"Item count won't decrease if grabbed with LMB"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(bytes_RemoveFromInventoryOnTake, B8 01 00 00 00)

[ENABLE]
{$lua}
if syntaxcheck then return end
mono_register("InventoryItem","RemoveFromInventoryOnTake","code_RemoveFromInventoryOnTake",0x4)
{$asm}
assert(code_RemoveFromInventoryOnTake,bytes_RemoveFromInventoryOnTake)
alloc(mem_RemoveFromInventoryOnTake,$1000,code_RemoveFromInventoryOnTake)

label(code)
label(return)
label(skip)

mem_RemoveFromInventoryOnTake:
code:
  cmp r9,#0
  je skip
  mov eax,#0 // if grabbed with LMB
  jmp return
skip:
  mov eax,#1 // if not
  jmp return
code_RemoveFromInventoryOnTake:
  jmp mem_RemoveFromInventoryOnTake
return:

[DISABLE]
code_RemoveFromInventoryOnTake:
  db bytes_RemoveFromInventoryOnTake

unregistersymbol(code_RemoveFromInventoryOnTake)
dealloc(mem_RemoveFromInventoryOnTake)

{
// ORIGINAL CODE - INJECTION POINT: InventoryItem:RemoveFromInventoryOnTake+4

1F676296A2B: 05 04 03 01 50  - add eax,50010304
1F676296A30: 00 00           - add [rax],al
1F676296A32: 00 00           - add [rax],al
1F676296A34: 00 00           - add [rax],al
1F676296A36: 00 00           - add [rax],al
1F676296A38: 00 00           - add [rax],al
1F676296A3A: 00 00           - add [rax],al
1F676296A3C: 00 00           - add [rax],al
1F676296A3E: 00 00           - add [rax],al
InventoryItem:RemoveFromInventoryOnTake: 48 83 EC 18     - sub rsp,18
// ---------- INJECTING HERE ----------
InventoryItem:RemoveFromInventoryOnTake+4: B8 01 00 00 00  - mov eax,00000001
// ---------- DONE INJECTING  ----------
InventoryItem:RemoveFromInventoryOnTake+9: 48 83 C4 18     - add rsp,18
InventoryItem:RemoveFromInventoryOnTake+d: C3              - ret
1F676296A4E: 00 00           - add [rax],al
1F676296A50: 01 04 01        - add [rcx+rax],eax
1F676296A53: 00 04 22        - add [rdx],al
1F676296A56: 00 00           - add [rax],al
1F676296A58: 00 00           - add [rax],al
1F676296A5A: 00 00           - add [rax],al
1F676296A5C: 00 00           - add [rax],al
1F676296A5E: 00 00           - add [rax],al
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>66</ID>
          <Description>"Infinite salt as ingredient"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(bytes_SaltItemCount, 55 48 8B EC 48 83 EC 50)

[ENABLE]
{$lua}
if syntaxcheck then return end
mono_register("SaltItem","UpdateCount","code_SaltItemCount",0x0)
{$asm}
assert(code_SaltItemCount,bytes_SaltItemCount)
alloc(mem_SaltItemCount,$1000,code_SaltItemCount)

label(code)
label(return)
label(ptr_SaltItem)
label(decired_SaltItem)

mem_SaltItemCount:
code:
  push rbp
  mov rbp,rsp
  sub rsp,50
  mov rdx,[decired_SaltItem]
  jmp return
ptr_SaltItem:
  dq 0
decired_SaltItem:
  dd #9999
code_SaltItemCount:
  jmp mem_SaltItemCount
  nop 3
return:

registersymbol(ptr_SaltItem)
registersymbol(decired_SaltItem)
[DISABLE]
code_SaltItemCount:
  db bytes_SaltItemCount

unregistersymbol(ptr_SaltItem)
unregistersymbol(decired_SaltItem)
unregistersymbol(code_SaltItemCount)
dealloc(mem_SaltItemCount)

{
// ORIGINAL CODE - INJECTION POINT: SaltItem:UpdateCount

1BFF41DE250: 00 00                          - add [rax],al
1BFF41DE252: 49 BB F0 0E BC 7D BD 01 00 00  - mov r11,000001BD7DBC0EF0
1BFF41DE25C: 41 FF D3                       - call r11
1BFF41DE25F: 08 80 E3 B7 F3 BF              - or [rax-400C481D],al
1BFF41DE265: 01 00                          - add [rax],eax
1BFF41DE267: 00 00                          - add [rax],al
1BFF41DE269: 00 00                          - add [rax],al
1BFF41DE26B: 00 00                          - add [rax],al
1BFF41DE26D: 00 00                          - add [rax],al
1BFF41DE26F: 00                             - db 00
// ---------- INJECTING HERE ----------
SaltItem:UpdateCount: 55                             - push rbp
// ---------- DONE INJECTING  ----------
SaltItem:UpdateCount+1: 48 8B EC                       - mov rbp,rsp
SaltItem:UpdateCount+4: 48 83 EC 50                    - sub rsp,50
SaltItem:UpdateCount+8: 48 89 75 E0                    - mov [rbp-20],rsi
SaltItem:UpdateCount+c: 48 89 7D E8                    - mov [rbp-18],rdi
SaltItem:UpdateCount+10: 4C 89 75 F0                    - mov [rbp-10],r14
SaltItem:UpdateCount+14: 4C 89 7D F8                    - mov [rbp-08],r15
SaltItem:UpdateCount+18: 48 8B F9                       - mov rdi,rcx
SaltItem:UpdateCount+1b: 48 8B F2                       - mov rsi,rdx
SaltItem:UpdateCount+1e: 49 BB E0 9E 1C F4 BF 01 00 00  - mov r11,SaltItem:get_Count
SaltItem:UpdateCount+28: 41 FF D3                       - call r11
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>68</ID>
              <Description>"Desired salt amount"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8000</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>decired_SaltItem</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>22</ID>
          <Description>"Press ~ to open debug console"</Description>
          <LastState/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(bytes_CanUseConsole,74 07 B8 01 00 00 00 EB 13 33)

[ENABLE]

{$lua}
if syntaxcheck then return end
mono_register("ButtonConsole","CanUseConsole","code_CanUseConsole",0x1b)

{$asm}

assert(code_CanUseConsole,bytes_CanUseConsole)

code_CanUseConsole:
  db 75

[DISABLE]
code_CanUseConsole:
  db bytes_CanUseConsole

dealloc(mem_CanUseConsole)
unregistersymbol(code_CanUseConsole)

{
// ORIGINAL CODE - INJECTION POINT: ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+1b

1CEE1741640: 00 00                          - add [rax],al
1CEE1741642: 00 00                          - add [rax],al
1CEE1741644: 00 00                          - add [rax],al
1CEE1741646: 00 00                          - add [rax],al
1CEE1741648: 00 00                          - add [rax],al
1CEE174164A: 00 00                          - add [rax],al
1CEE174164C: 00 00                          - add [rax],al
1CEE174164E: 00 00                          - add [rax],al
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole: 48 83 EC 08                    - sub rsp,08
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+4: 48 B8 10 AF 1D FC CD 01 00 00  - mov rax,000001CDFC1DAF10
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+e: 48 8B 00                       - mov rax,[rax]
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+11: 48 8B 40 18                    - mov rax,[rax+18]
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+15: 0F B6 40 58                    - movzx eax,byte ptr [rax+58]
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+19: 85 C0                          - test eax,eax
// ---------- INJECTING HERE ----------
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+1b: 74 07                          - je ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+24
// ---------- DONE INJECTING  ----------
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+1d: B8 01 00 00 00                 - mov eax,00000001
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+22: EB 13                          - jmp ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+37
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+24: 33 C0                          - xor eax,eax
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+26: 48 0F B6 D0                    - movzx rdx,al
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+2a: 33 C9                          - xor ecx,ecx
ObjectBased.UIElements.ButtonConsole.ButtonConsole:CanUseConsole+2c: B8 01 00 00 00                 - mov eax,00000001
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>69</ID>
          <Description>"God mode"</Description>
          <LastState/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(bytes_UpdateHealth,0F 8E EA 03 00 00 F2)

[ENABLE]

{$lua}
if syntaxcheck then return end
mono_register("IndicatorMapItem","UpdateHealth","code_UpdateHealth",0x80)

{$asm}

assert(code_UpdateHealth,bytes_UpdateHealth)

code_UpdateHealth:
  db E9 EB 03 00 00 90 // jmp

[DISABLE]
code_UpdateHealth:
  db bytes_UpdateHealth

dealloc(mem_UpdateHealth)
unregistersymbol(code_UpdateHealth)

{
// ORIGINAL CODE - INJECTION POINT: IndicatorMapItem:UpdateHealth+80

IndicatorMapItem:UpdateHealth+52: 48 8B 00                       - mov rax,[rax]
IndicatorMapItem:UpdateHealth+55: 48 8B 78 40                    - mov rdi,[rax+40]
IndicatorMapItem:UpdateHealth+59: F3 0F 10 86 8C 01 00 00        - movss xmm0,[rsi+0000018C]
IndicatorMapItem:UpdateHealth+61: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
IndicatorMapItem:UpdateHealth+65: 48 8B 86 28 01 00 00           - mov rax,[rsi+00000128]
IndicatorMapItem:UpdateHealth+6c: 48 8B C8                       - mov rcx,rax
IndicatorMapItem:UpdateHealth+6f: 83 39 00                       - cmp dword ptr [rcx],00
IndicatorMapItem:UpdateHealth+72: 48 63 40 30                    - movsxd  rax,dword ptr [rax+30]
IndicatorMapItem:UpdateHealth+76: F2 0F 11 85 48 FF FF FF        - movsd [rbp-000000B8],xmm0
IndicatorMapItem:UpdateHealth+7e: 85 C0                          - test eax,eax
// ---------- INJECTING HERE ----------
IndicatorMapItem:UpdateHealth+80: 0F 8E EA 03 00 00              - jng IndicatorMapItem:UpdateHealth+470
// ---------- DONE INJECTING  ----------
IndicatorMapItem:UpdateHealth+86: F2 0F 10 85 48 FF FF FF        - movsd xmm0,[rbp-000000B8]
IndicatorMapItem:UpdateHealth+8e: F2 0F 11 85 20 FF FF FF        - movsd [rbp-000000E0],xmm0
IndicatorMapItem:UpdateHealth+96: 48 B8 40 9F 0F A9 BF 01 00 00  - mov rax,000001BFA90F9F40
IndicatorMapItem:UpdateHealth+a0: 48 8B 00                       - mov rax,[rax]
IndicatorMapItem:UpdateHealth+a3: 48 8B 40 68                    - mov rax,[rax+68]
IndicatorMapItem:UpdateHealth+a7: 48 8B 40 28                    - mov rax,[rax+28]
IndicatorMapItem:UpdateHealth+ab: 48 B9 40 9F 0F A9 BF 01 00 00  - mov rcx,000001BFA90F9F40
IndicatorMapItem:UpdateHealth+b5: 48 8B 09                       - mov rcx,[rcx]
IndicatorMapItem:UpdateHealth+b8: 4C 8B 79 58                    - mov r15,[rcx+58]
IndicatorMapItem:UpdateHealth+bc: 48 8B D5                       - mov rdx,rbp
}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols>
    <SymbolEntry>
      <Name>code_ScalesGetCurrentSpeed</Name>
      <Address>1C6E46E9B6F</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>code_HagglePointerUpdate</Name>
      <Address>1C6E461DEFE</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>code_CanNpcHaggle</Name>
      <Address>1C6E46E9BEF</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>code_OpenTalentsButton</Name>
      <Address>1C6E46E9D71</Address>
    </SymbolEntry>
  </UserdefinedSymbols>
  <Comments>---
Info about this table:
- Game process: Potion Craft.exe
- Tested game versions: Steam (see history below for details)
- CE Version required: 7.3
- Author: mece
---
Features:
- Make haggle minigame easier: edit speed of scales and pointer
- Npc always can haggle: also shows NPC's desired potion effects. its's base price, karma reward
- Edit player: experience, talent points, gold, popularity, karma
- Item count won't decrease if grabbed with LMB
- Infinite salt as ingredient
- God mode
- Press ~ to open debug console
---
Known issues:
- Sometimes scripts fail to activate due to slightly changed code offsets. Restart the game and try again.
---
History:
- 2022-02-20:
-&gt; Game version: 0.4.7
- 2022-01-01:
-&gt; Updated 'Npc always can haggle': now shows NPC's desired potion effects. its's base price, karma reward
-&gt; Added 'Infinite salt as ingredient'
-&gt; Added 'God mode'
- 2021-12-27:
-&gt; Added 'Edit player': experience, talent points, gold, popularity, karma
-&gt; Added 'Make haggle minigame easier'
-&gt; Added 'Npc always can haggle'
-&gt; Added 'Item count won't decrease if grabbed with LMB'
- 2021-12-26:
-&gt; Game version: 0.4.6
---
More info &amp; last table version at:
https://opencheattables.org/viewtopic.php</Comments>
</CheatTable>
