<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="29">
  <CheatEntries>
    <CheatEntry>
      <ID>7</ID>
      <Description>"Invulnerability"</Description>
      <LastState Activated="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscan(godmode,D9 5F 54 8B 47 38) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  cmp [edi+a4],1
  je code
  fstp dword ptr [edi+54]
code:
  mov eax,[edi+38]
  jmp return

godmode:
  jmp newmem
  nop
return:
registersymbol(godmode)

[DISABLE]

godmode:
  db D9 5F 54 8B 47 38

unregistersymbol(godmode)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 062780CE

062780B3: D9 5F 50              -  fstp dword ptr [edi+50]
062780B6: D9 45 0C              -  fld dword ptr [ebp+0C]
062780B9: D9 47 54              -  fld dword ptr [edi+54]
062780BC: DF F1                 -  fcomip st(0),st(1)
062780BE: DD D8                 -  fstp st(0)
062780C0: 76 09                 -  jna 062780CB
062780C2: 8B 47 30              -  mov eax,[edi+30]
062780C5: D9 40 34              -  fld dword ptr [eax+34]
062780C8: D9 5F 4C              -  fstp dword ptr [edi+4C]
062780CB: D9 45 0C              -  fld dword ptr [ebp+0C]
// ---------- INJECTING HERE ----------
062780CE: D9 5F 54              -  fstp dword ptr [edi+54]
062780D1: 8B 47 38              -  mov eax,[edi+38]
// ---------- DONE INJECTING  ----------
062780D4: 83 EC 0C              -  sub esp,0C
062780D7: 50                    -  push eax
062780D8: E8 CB 90 F5 FF        -  call 061D11A8
062780DD: 83 C4 10              -  add esp,10
062780E0: 85 C0                 -  test eax,eax
062780E2: 74 16                 -  je 062780FA
062780E4: 8B 47 38              -  mov eax,[edi+38]
062780E7: 8B 4F 34              -  mov ecx,[edi+34]
062780EA: 6A 00                 -  push 00
062780EC: 6A 00                 -  push 00
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>10</ID>
      <Description>"Always 200 Mana"</Description>
      <LastState Activated="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscan(mana,D9 40 54 D9 9D 34 FF FF FF D9 85 34 FF FF FF D9 5F 70) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov [eax+54],43480000
code:
  fld dword ptr [eax+54]
  fstp dword ptr [ebp-000000CC]
  jmp return

mana:
  jmp newmem
  nop 4
return:
registersymbol(mana)

[DISABLE]

mana:
  db D9 40 54 D9 9D 34 FF FF FF

unregistersymbol(mana)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 06518299

06518280: 39 09              -  cmp [ecx],ecx
06518282: 8B 40 40           -  mov eax,[eax+40]
06518285: 83 EC 08           -  sub esp,08
06518288: 6A 05              -  push 05
0651828A: 50                 -  push eax
0651828B: 39 00              -  cmp [eax],eax
0651828D: E8 76 C4 F1 FF     -  call 06434708
06518292: 83 C4 10           -  add esp,10
06518295: 8B C8              -  mov ecx,eax
06518297: 39 09              -  cmp [ecx],ecx
// ---------- INJECTING HERE ----------
06518299: D9 40 54           -  fld dword ptr [eax+54]
0651829C: D9 9D 34 FF FF FF  -  fstp dword ptr [ebp-000000CC]
// ---------- DONE INJECTING  ----------
065182A2: D9 85 34 FF FF FF  -  fld dword ptr [ebp-000000CC]
065182A8: D9 5F 70           -  fstp dword ptr [edi+70]
065182AB: 8B 47 34           -  mov eax,[edi+34]
065182AE: 83 EC 0C           -  sub esp,0C
065182B1: 50                 -  push eax
065182B2: 39 00              -  cmp [eax],eax
065182B4: E8 5F 5D FF FF     -  call 0650E018
065182B9: 83 C4 10           -  add esp,10
065182BC: 8B C8              -  mov ecx,eax
065182BE: 39 09              -  cmp [ecx],ecx
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>17</ID>
      <Description>"Don't spent money in shop"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscan(gold,89 88 90 00 00 00 8B 40) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  // mov [eax+00000090],ecx
  jmp return

gold:
  jmp newmem
  nop
return:
registersymbol(gold)

[DISABLE]

gold:
  db 89 88 90 00 00 00

unregistersymbol(gold)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 062CDB04

062CDAE8: 68 50 4C 97 17        -  push 17974C50
062CDAED: E9 36 25 94 FF        -  jmp 05C10028
062CDAF2: 00 00                 -  add [eax],al
062CDAF4: 00 00                 -  add [eax],al
062CDAF6: 00 00                 -  add [eax],al
062CDAF8: 55                    -  push ebp
062CDAF9: 8B EC                 -  mov ebp,esp
062CDAFB: 83 EC 08              -  sub esp,08
062CDAFE: 8B 4D 0C              -  mov ecx,[ebp+0C]
062CDB01: 8B 45 08              -  mov eax,[ebp+08]
// ---------- INJECTING HERE ----------
062CDB04: 89 88 90 00 00 00     -  mov [eax+00000090],ecx
// ---------- DONE INJECTING  ----------
062CDB0A: 8B 40 5C              -  mov eax,[eax+5C]
062CDB0D: 85 C0                 -  test eax,eax
062CDB0F: 74 13                 -  je 062CDB24
062CDB11: 8B 45 08              -  mov eax,[ebp+08]
062CDB14: 8B 40 5C              -  mov eax,[eax+5C]
062CDB17: 83 EC 0C              -  sub esp,0C
062CDB1A: 50                    -  push eax
062CDB1B: 90                    -  nop 
062CDB1C: 90                    -  nop 
062CDB1D: 90                    -  nop 
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>18</ID>
      <Description>"alway 5k gold after buying"</Description>
      <LastState Activated="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscan(gold,89 88 90 00 00 00 8B 40) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov [ebp+0C],#5000
  mov ecx,[ebp+0C]
code:
  mov [eax+00000090],ecx
  jmp return

gold:
  jmp newmem
  nop
return:
registersymbol(gold)

[DISABLE]

gold:
  db 89 88 90 00 00 00

unregistersymbol(gold)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 062CDB04

062CDAE8: 68 50 4C 97 17        -  push 17974C50
062CDAED: E9 36 25 94 FF        -  jmp 05C10028
062CDAF2: 00 00                 -  add [eax],al
062CDAF4: 00 00                 -  add [eax],al
062CDAF6: 00 00                 -  add [eax],al
062CDAF8: 55                    -  push ebp
062CDAF9: 8B EC                 -  mov ebp,esp
062CDAFB: 83 EC 08              -  sub esp,08
062CDAFE: 8B 4D 0C              -  mov ecx,[ebp+0C]
062CDB01: 8B 45 08              -  mov eax,[ebp+08]
// ---------- INJECTING HERE ----------
062CDB04: 89 88 90 00 00 00     -  mov [eax+00000090],ecx
// ---------- DONE INJECTING  ----------
062CDB0A: 8B 40 5C              -  mov eax,[eax+5C]
062CDB0D: 85 C0                 -  test eax,eax
062CDB0F: 74 13                 -  je 062CDB24
062CDB11: 8B 45 08              -  mov eax,[ebp+08]
062CDB14: 8B 40 5C              -  mov eax,[eax+5C]
062CDB17: 83 EC 0C              -  sub esp,0C
062CDB1A: 50                    -  push eax
062CDB1B: 90                    -  nop 
062CDB1C: 90                    -  nop 
062CDB1D: 90                    -  nop 
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>13</ID>
      <Description>"Find Experience Points"</Description>
      <Options moHideChildren="1"/>
      <LastState Activated="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscan(xperience,D9 40 54 D9 9D 38 FF FF FF) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(xpaddress)
newmem:
  mov [xpaddress],eax
code:
  fld dword ptr [eax+54]
  fstp dword ptr [ebp-000000C8]
  jmp return

xpaddress:
  dq 0

xperience:
  jmp newmem
  nop 4
return:
registersymbol(xperience)
registersymbol(xpaddress)
[DISABLE]

xperience:
  db D9 40 54 D9 9D 38 FF FF FF

unregistersymbol(xperience)
unregistersymbol(xpaddress)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 0651831C

06518302: E8 39 C7 FE FF     -  call 06504A40
06518307: 83 C4 10           -  add esp,10
0651830A: 8B C8              -  mov ecx,eax
0651830C: 39 09              -  cmp [ecx],ecx
0651830E: 8B 40 74           -  mov eax,[eax+74]
06518311: 8B C8              -  mov ecx,eax
06518313: 39 09              -  cmp [ecx],ecx
06518315: 8B 40 38           -  mov eax,[eax+38]
06518318: 8B C8              -  mov ecx,eax
0651831A: 39 09              -  cmp [ecx],ecx
// ---------- INJECTING HERE ----------
0651831C: D9 40 54           -  fld dword ptr [eax+54]
0651831F: D9 9D 38 FF FF FF  -  fstp dword ptr [ebp-000000C8]
// ---------- DONE INJECTING  ----------
06518325: D9 85 38 FF FF FF  -  fld dword ptr [ebp-000000C8]
0651832B: D9 9F 8C 00 00 00  -  fstp dword ptr [edi+0000008C]
06518331: 83 FE 01           -  cmp esi,01
06518334: 0F 8E 7E 00 00 00  -  jng 065183B8
0651833A: E8 D5 EC F7 FF     -  call 06497014
0651833F: 8B 40 70           -  mov eax,[eax+70]
06518342: 8B 40 10           -  mov eax,[eax+10]
06518345: 8D 4E FF           -  lea ecx,[esi-01]
06518348: 83 EC 08           -  sub esp,08
0651834B: 51                 -  push ecx
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>14</ID>
          <Description>"Experience"</Description>
          <VariableType>Float</VariableType>
          <Address>[xpaddress]+54</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <Structures StructVersion="2">
    <Structure Name="UniRPG.Actor" AutoFill="0" AutoCreate="1" DefaultHex="0" AutoDestroy="0" DoNotSaveLocal="0" RLECompression="1" AutoCreateStructsize="4096">
      <Elements>
        <Element Offset="8" Vartype="4 Bytes" Bytesize="4" Description="m_InstanceID" DisplayMethod="Unsigned Integer"/>
        <Element Offset="12" Vartype="4 Bytes" Bytesize="4" Description="m_CachedPtr" DisplayMethod="Unsigned Integer"/>
        <Element Offset="16" Vartype="Pointer" Bytesize="4" ChildStruct="String" Description="nm" DisplayMethod="Unsigned Integer"/>
        <Element Offset="20" Vartype="Pointer" Bytesize="4" ChildStruct="String" Description="description" DisplayMethod="Unsigned Integer"/>
        <Element Offset="24" Vartype="Pointer" Bytesize="4" ChildStruct="String" Description="notes" DisplayMethod="Unsigned Integer"/>
        <Element Offset="28" Vartype="Pointer" Bytesize="4" Description="portrait" DisplayMethod="Unsigned Integer"/>
        <Element Offset="32" Vartype="Pointer" Bytesize="4" Description="actorClassPrefab" DisplayMethod="Unsigned Integer"/>
        <Element Offset="36" Vartype="Pointer" Bytesize="4" Description="equipped" DisplayMethod="Unsigned Integer"/>
        <Element Offset="40" Vartype="Pointer" Bytesize="4" Description="bag" DisplayMethod="Unsigned Integer"/>
        <Element Offset="44" Vartype="Pointer" Bytesize="4" Description="startingSkills" DisplayMethod="Unsigned Integer"/>
        <Element Offset="48" Vartype="Pointer" Bytesize="4" Description="startingSkillSlots" DisplayMethod="Unsigned Integer"/>
        <Element Offset="52" Vartype="Pointer" Bytesize="4" Description="startingStates" DisplayMethod="Unsigned Integer"/>
        <Element Offset="56" Vartype="Pointer" Bytesize="4" Description="potionEquipSlot" DisplayMethod="Unsigned Integer"/>
        <Element Offset="60" Vartype="Pointer" Bytesize="4" Description="thisSource" DisplayMethod="Unsigned Integer"/>
        <Element Offset="64" Vartype="Pointer" Bytesize="4" Description="_Gpop" DisplayMethod="Unsigned Integer"/>
        <Element Offset="68" Vartype="Pointer" Bytesize="4" Description="CDlist" DisplayMethod="Unsigned Integer"/>
        <Element Offset="72" Vartype="Pointer" Bytesize="4" Description="loadCallBack" DisplayMethod="Unsigned Integer"/>
        <Element Offset="76" Vartype="Pointer" Bytesize="4" ChildStruct="String" Description="keyRef" DisplayMethod="Unsigned Integer"/>
        <Element Offset="80" Vartype="Pointer" Bytesize="4" Description="OnItemAddedToBag" DisplayMethod="Unsigned Integer"/>
        <Element Offset="84" Vartype="Pointer" Bytesize="4" Description="OnItemEquiped" DisplayMethod="Unsigned Integer"/>
        <Element Offset="88" Vartype="Pointer" Bytesize="4" Description="OnInventoryFull" DisplayMethod="Unsigned Integer"/>
        <Element Offset="92" Vartype="Pointer" Bytesize="4" Description="OnCurrencyChange" DisplayMethod="Unsigned Integer"/>
        <Element Offset="96" Vartype="Pointer" Bytesize="4" Description="states" DisplayMethod="Unsigned Integer"/>
        <Element Offset="100" Vartype="Pointer" Bytesize="4" Description="actionSlots" DisplayMethod="Unsigned Integer"/>
        <Element Offset="104" Vartype="Pointer" Bytesize="4" Description="_character" DisplayMethod="Unsigned Integer"/>
        <Element Offset="108" Vartype="Pointer" Bytesize="4" Description="_tr" DisplayMethod="Unsigned Integer"/>
        <Element Offset="112" Vartype="Pointer" Bytesize="4" Description="&lt;skills&gt;k__BackingField" DisplayMethod="Unsigned Integer"/>
        <Element Offset="116" Vartype="Pointer" Bytesize="4" Description="&lt;ActorClass&gt;k__BackingField" DisplayMethod="Unsigned Integer"/>
        <Element Offset="120" Vartype="Pointer" Bytesize="4" Description="&lt;currSkill&gt;k__BackingField" DisplayMethod="Unsigned Integer"/>
        <Element Offset="124" Vartype="Pointer" Bytesize="4" Description="&lt;nextSkill&gt;k__BackingField" DisplayMethod="Unsigned Integer"/>
        <Element Offset="128" Vartype="Pointer" Bytesize="4" Description="&lt;nextSkillTarget&gt;k__BackingField" DisplayMethod="Unsigned Integer"/>
        <Element Offset="132" Vartype="Byte" Bytesize="1" Description="availAtStart" DisplayMethod="Unsigned Integer"/>
        <Element Offset="136" Vartype="4 Bytes" Bytesize="4" Description="startingXP" DisplayMethod="Unsigned Integer"/>
        <Element Offset="140" Vartype="4 Bytes" Bytesize="4" Description="xpNextLevel" DisplayMethod="Unsigned Integer"/>
        <Element Offset="144" Vartype="4 Bytes" Bytesize="4" Description="_currency" DisplayMethod="Unsigned Integer"/>
        <Element Offset="148" Vartype="4 Bytes" Bytesize="4" Description="bagSize" DisplayMethod="Unsigned Integer"/>
        <Element Offset="152" Vartype="4 Bytes" Bytesize="4" Description="actionSlotCount" DisplayMethod="Unsigned Integer"/>
        <Element Offset="156" Vartype="Float" Bytesize="4" Description="coolDownTime" DisplayMethod="Unsigned Integer"/>
        <Element Offset="160" Vartype="Byte" Bytesize="1" Description="isStarted" DisplayMethod="Unsigned Integer"/>
        <Element Offset="161" Vartype="Byte" Bytesize="1" Description="equipSecondaryAbility" DisplayMethod="Unsigned Integer"/>
        <Element Offset="162" Vartype="Byte" Bytesize="1" Description="equipFlag" DisplayMethod="Unsigned Integer"/>
        <Element Offset="164" Vartype="Float" Bytesize="4" Description="&lt;nextSkillMaxDistance&gt;k__BackingField" DisplayMethod="Unsigned Integer"/>
      </Elements>
    </Structure>
    <Structure Name="String" AutoFill="0" AutoCreate="1" DefaultHex="0" AutoDestroy="0" DoNotSaveLocal="0" RLECompression="1" AutoCreateStructsize="4096">
      <Elements>
        <Element Offset="8" Vartype="4 Bytes" Bytesize="4" Description="Length" DisplayMethod="Unsigned Integer"/>
        <Element Offset="12" Vartype="Unicode String" Bytesize="128" Description="Value" DisplayMethod="Unsigned Integer"/>
      </Elements>
    </Structure>
    <Structure Name="UniRPG.Actor.Static" AutoFill="0" AutoCreate="1" DefaultHex="0" AutoDestroy="0" DoNotSaveLocal="0" RLECompression="1" AutoCreateStructsize="4096">
      <Elements/>
    </Structure>
  </Structures>
</CheatTable>
