<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>26722</ID>
      <Description>"CE compact mode"</Description>
      <Color>FF0000</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
--------------------------------------------------------------------------------
if syntaxcheck then return end
--------------------------------------------------------------------------------
function ToggleCECompactMode()
  local f = getMainForm()
  local controls = {f.Splitter1, f.Panel4, f.Panel5}
  for k,c in ipairs(controls) do c.Visible = not c.Visible end
end
ToggleCECompactMode()
--------------------------------------------------------------------------------
{$asm}
[DISABLE]
{$lua}
--------------------------------------------------------------------------------
if syntaxcheck then return end
--------------------------------------------------------------------------------
ToggleCECompactMode()
--------------------------------------------------------------------------------
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>9210</ID>
      <Description>"Attach CE to the game process &amp; activate mono features"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <Color>FF0000</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
--------------------------------------------------------------------------------
if syntaxcheck then return end
--------------------------------------------------------------------------------
function init_DotNetInfo()
  -- I didn't found a better way to access "dotnetinfo.lua" local functions
  miDotNetInfoClick(getMainForm()) -- opens ".Net Info" form
  df.Hide() -- hides just opened ".Net Info" form
end
--------------------------------------------------------------------------------
function mono_findClassEx(namespace, classname)
  if namespace==nil then
    print("[mono_findClassEx]: Invalid parameters!" .. namespace .. "." .. classname)
  else
    if classname==nil then
      needle = namespace
    else
      needle = namespace .. "." .. classname
    end
    --print("[mono_findClassEx]: Looking for: " .. needle)
    if DataSource.Domains==nil then
      init_DotNetInfo()
    end
    for _, Domain in ipairs(DataSource.Domains) do
      if Domain.Images == nil then
        DataSource.getImages(Domain) debugPrint()
      end
      for _, Image in ipairs(Domain.Images) do
        if Image.Classes == nil then
          Image.Classes = {}
          Image.Classes.Busy = true
          DataSource.getClasses(Image)
          Image.Classes.Busy = nil
        end
        for _, Class in ipairs(Image.Classes) do
          if Class.FullName == needle then
            return Class.Handle
          end
        end
      end
    end
  end
  return nil
end
--------------------------------------------------------------------------------
function mono_findMethodEx(namespace, classname, methodname)
  if namespace==nil or classname==nil then
    print("[mono_findMethodEx]: Invalid parameters! " .. namespace .. "." .. classname .. ":" .. methodname)
  else
    if methodname==nil then
      classname=namespace
      methodname=classname
      namespace=''
    end
    --print("[mono_findMethodEx]: Looking for: " .. namespace .. "." .. classname .. ":" .. methodname)
    local class = mono_findClassEx(namespace, classname)
    if class==nil or class==0 then
      print("[mono_findMethodEx]: Class not found! " .. namespace .. "." .. classname)
    else
      return mono_class_findMethod(class, methodname)
    end
  end
  return nil
end
--------------------------------------------------------------------------------
function mono_symbolLookupCallbackEx(symbol)
  --print("[mono_symbolLookupCallbackEx]: Parsing... " .. symbol)
  local namespace, classname, methodname = SplitDotNetName(symbol)
  if (methodname=='') or (classname=='') then
    print("[mono_symbolLookupCallbackEx]: Invalid parameters! " .. namespace .. "." .. classname .. ":" .. methodname)
  else
    if monopipe == nil or monopipe.IL2CPP then
      print("[mono_symbolLookupCallbackEx]: Unable to use mono features.")
    else
      local method = mono_findMethodEx(namespace, classname, methodname)
      if method==nil or method==0 then
        print("[mono_symbolLookupCallbackEx]: Method not found! " .. namespace .. "." .. classname .. ":" .. methodname)
      else
        local methodaddress = mono_compile_method(method)
        if methodaddress == nil or methodaddress == 0 then
          print("[mono_symbolLookupCallbackEx]: mono_compile_method error!")
        else
          return methodaddress
        end
      end
    end
  end
  return nil
end
--------------------------------------------------------------------------------
-- Scans the memory near &lt;mono_symbol&gt; for &lt;aob&gt; and returns it's address
function mono_AOBScanUnique(aob,mono_symbol)
  local result = nil
  local mono_address = mono_symbolLookupCallbackEx(mono_symbol)
  if mono_address == nil then
    print("[mono_AOBScanUnique]: Mono symbol not found! " .. mono_symbol)
  else
    local ji = mono_getJitInfo(mono_address)
    local start = ji.code_start -- Method start address
    local stop = start + ji.code_size -- Size of the method

    local protectionFlags = "+X-C+W"
    local alignmentType = fsmNotAligned
    local alignmentParam = nil
    local isHexadecimalInput = true
    local isNotABinaryString = true
    local isunicodescan = false
    local iscasesensitive = false
    local ms = createMemScan()

	  ms.firstScan(soExactValue, vtByteArray, nil, aob, nil, start, stop,
      protectionFlags, alignmentType, alignmentParam,
      isHexadecimalInput, isNotABinaryString, isunicodescan, iscasesensitive)
	  ms.waitTillDone()
	  local fl = createFoundList(ms)
    fl.initialize()
    if ms.FoundList.getCount()==0 then
      print("[mono_aobscan]: AOB [" .. aob .. "] not found near " .. mono_symbol)
    else
      if fl.getCount()&gt;1 then
        print("[mono_aobscan]: AOB [" .. aob .. "] is not unique near " .. mono_symbol)
      else
        result = fl[0]
      end
    end
    fl.deinitialize()
	  ms.destroy()
  end
	return result
end
--------------------------------------------------------------------------------
function string:split(sep)
  sep = sep or '%s'
  local elements = {}
  for element in string.gmatch(self, "([^"..sep.."]+)") do
    if element then elements[#elements+1]=element end
  end
  return elements
end
--------------------------------------------------------------------------------
function string:trim()
  return string.match(self, "^%s*(.-)%s*$")
end
--------------------------------------------------------------------------------
function parse(parameters)
  local args = {}
  for arg in string.gmatch(parameters, "([^,]+)") do
    if arg then
      args[#args+1]= arg:trim()
    end
  end
  return args
end
--------------------------------------------------------------------------------
function aobScanMono(parameters, syntaxcheck)
  local args = parse(parameters)
  if #args &lt; 3 then
    return nil, "Wrong number of parameters for 'aobScanMono' custom AA command."
  end
  local Symbol = args[1]
  local Bytes = args[3]
  if not syntaxcheck then
    local a = mono_AOBScanUnique(Bytes, args[2])
    if a == nil then
      return nil, "Error in 'aobScanMono' custom AA command."
    else
      Address = a
    end
  end
  local str = "define(" .. Symbol .. ", "  .. Address .. ")\r\n"
  str = str .. "assert(" .. Symbol .. ", " .. Bytes .. ")\r\n"
  return str
end
--------------------------------------------------------------------------------
function mono_activate()
  if getOpenedProcessID()==0 then
    print("[mono_activate]: No process opened!")
  else
    if monopipe==nil and LaunchMonoDataCollector()==0 then
      print("[mono_activate]: LaunchMonoDataCollector error!")
    else
      init_DotNetInfo()
    end
  end
end
--------------------------------------------------------------------------------
function mono_deactivate()
  if monopipe then
    monopipe.OnTimeout()
  end
end
--------------------------------------------------------------------------------
GetLuaEngine().MenuItem5.doClick() -- clear lua output
if OpenProcess("RimWorldWin64.exe") then
  mono_activate()
else
  msg = "Cannot open process!"
  print(msg)
  error(msg)
end
registerAutoAssemblerCommand("aobScanMono", aobScanMono)
--------------------------------------------------------------------------------
{$asm}
[DISABLE]
{$lua}
--------------------------------------------------------------------------------
if syntaxcheck then return end
--------------------------------------------------------------------------------
local function DeleteUserdefinedSymbols()
  local mv = getMemoryViewForm()
  if mv.frmSymbolhandler == nil then
    mv.Symbolhandler1.doClick()
    mv.frmSymbolhandler.Close()
  end
  local items = mv.frmSymbolhandler.ListView1.Items
  for i=0,items.Count-1 do
    unregisterSymbol(items.Item[0].Caption)
  end
end
--------------------------------------------------------------------------------
DeleteUserdefinedSymbols()
mono_deactivate()
unregisterAutoAssemblerCommand("aobScanMono")
--------------------------------------------------------------------------------
</AssemblerScript>
      <Hotkeys>
        <Hotkey>
          <Action>Activate</Action>
          <Keys>
            <Key>18</Key>
            <Key>45</Key>
          </Keys>
          <ID>0</ID>
          <ActivateSound>Activate</ActivateSound>
        </Hotkey>
        <Hotkey>
          <Action>Deactivate</Action>
          <Keys>
            <Key>18</Key>
            <Key>46</Key>
          </Keys>
          <ID>1</ID>
          <DeactivateSound>Deactivate</DeactivateSound>
        </Hotkey>
        <Hotkey>
          <Action>Toggle Activation</Action>
          <Keys>
            <Key>17</Key>
            <Key>99</Key>
          </Keys>
          <ID>2</ID>
          <ActivateSound>Activate</ActivateSound>
          <DeactivateSound>Deactivate</DeactivateSound>
        </Hotkey>
      </Hotkeys>
      <CheatEntries>
        <CheatEntry>
          <ID>1337196606</ID>
          <Description>"【 Player pawns 】"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <Color>FF0000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
aobScanMono(codeIsColonistPlayerControlled, Verse.Pawn:get_IsColonistPlayerControlled, 55 48 8B EC 48 83 EC 30 48 89 75 F8 48 8B F1)
registersymbol(codeIsColonistPlayerControlled)
[DISABLE]
unregistersymbol(*)

{
// ORIGINAL CODE - INJECTION POINT: Verse.Pawn:get_IsColonistPlayerControlled

1515815D9CD: 01 00                          - add [rax],eax
1515815D9CF: 00 00                          - add [rax],al
1515815D9D1: 00 00                          - add [rax],al
1515815D9D3: 00 00                          - add [rax],al
1515815D9D5: 00 00                          - add [rax],al
1515815D9D7: 00 00                          - add [rax],al
1515815D9D9: 00 00                          - add [rax],al
1515815D9DB: 00 00                          - add [rax],al
1515815D9DD: 00 00                          - add [rax],al
1515815D9DF: 00                             - db 00
// ---------- INJECTING HERE ----------
Verse.Pawn:get_IsColonistPlayerControlled: 55                             - push rbp
// ---------- DONE INJECTING  ----------
Verse.Pawn:get_IsColonistPlayerControlled+1: 48 8B EC                       - mov rbp,rsp
Verse.Pawn:get_IsColonistPlayerControlled+4: 48 83 EC 30                    - sub rsp,30
Verse.Pawn:get_IsColonistPlayerControlled+8: 48 89 75 F8                    - mov [rbp-08],rsi
Verse.Pawn:get_IsColonistPlayerControlled+c: 48 8B F1                       - mov rsi,rcx
Verse.Pawn:get_IsColonistPlayerControlled+f: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
Verse.Pawn:get_IsColonistPlayerControlled+16: 49 BB 40 5C DD 57 51 01 00 00  - mov r11,Verse.Thing:get_Spawned
Verse.Pawn:get_IsColonistPlayerControlled+20: 41 FF D3                       - call r11
Verse.Pawn:get_IsColonistPlayerControlled+23: 85 C0                          - test eax,eax
Verse.Pawn:get_IsColonistPlayerControlled+25: 0F 84 69 00 00 00              - je Verse.Pawn:get_IsColonistPlayerControlled+94
Verse.Pawn:get_IsColonistPlayerControlled+2b: 48 8B CE                       - mov rcx,rsi
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>1337195968</ID>
              <Description>"Max movement speed"</Description>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeTicksPerMove, Verse.Pawn:TicksPerMove, 48 8B C8 BA 01 00 00 00)
alloc(memTicksPerMove,$1000,codeTicksPerMove)
label(return)
label(skip)

memTicksPerMove:
  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  mov rcx,rdi // current pawn
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop rax
  je skip
  mov rax,00000001 // 1 tick per move

skip:
  mov rcx,rax
  mov edx,00000001
  jmp return

bkpTicksPerMove:
  readmem(codeTicksPerMove,8)

codeTicksPerMove:
  jmp memTicksPerMove
  nop 3

return:

registersymbol(codeTicksPerMove)
registersymbol(memTicksPerMove)
registersymbol(bkpTicksPerMove)

[DISABLE]

codeTicksPerMove:
  readmem(bkpTicksPerMove,8)

unregistersymbol(*)
dealloc(memTicksPerMove)

{
// ORIGINAL CODE - INJECTION POINT: Verse.Pawn:TicksPerMove+2ab

Verse.Pawn:TicksPerMove+27e: F2 0F 59 C1                    - mulsd xmm0,xmm1
Verse.Pawn:TicksPerMove+282: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Verse.Pawn:TicksPerMove+286: F3 0F 11 6D CC                 - movss [rbp-34],xmm5
Verse.Pawn:TicksPerMove+28b: F3 0F 10 45 CC                 - movss xmm0,[rbp-34]
Verse.Pawn:TicksPerMove+290: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Verse.Pawn:TicksPerMove+294: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
Verse.Pawn:TicksPerMove+298: 48 8D 64 24 00                 - lea rsp,[rsp+00]
Verse.Pawn:TicksPerMove+29d: 90                             - nop
Verse.Pawn:TicksPerMove+29e: 49 BB F0 A8 4A FF 50 01 00 00  - mov r11,UnityEngine.Mathf:RoundToInt
Verse.Pawn:TicksPerMove+2a8: 41 FF D3                       - call r11
// ---------- INJECTING HERE ----------
Verse.Pawn:TicksPerMove+2ab: 48 8B C8                       - mov rcx,rax
// ---------- DONE INJECTING  ----------
Verse.Pawn:TicksPerMove+2ae: BA 01 00 00 00                 - mov edx,00000001
Verse.Pawn:TicksPerMove+2b3: 41 B8 C2 01 00 00              - mov r8d,000001C2
Verse.Pawn:TicksPerMove+2b9: 48 8D 64 24 00                 - lea rsp,[rsp+00]
Verse.Pawn:TicksPerMove+2be: 49 BB 70 DB 5F 2B 51 01 00 00  - mov r11,UnityEngine.Mathf:Clamp
Verse.Pawn:TicksPerMove+2c8: 41 FF D3                       - call r11
Verse.Pawn:TicksPerMove+2cb: 48 8B 7D F8                    - mov rdi,[rbp-08]
Verse.Pawn:TicksPerMove+2cf: 48 8D 65 00                    - lea rsp,[rbp+00]
Verse.Pawn:TicksPerMove+2d3: 5D                             - pop rbp
Verse.Pawn:TicksPerMove+2d4: C3                             - ret
Verse.Pawn:TicksPerMove+2d5: 00 00                          - add [rax],al
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196668</ID>
              <Description>"Edit learning rate"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeLearnRateFactor, RimWorld.SkillRecord:LearnRateFactor, 48 8B 7D F0 4C 8B 7D F8)
alloc(memLearnRateFactor, $1000, codeLearnRateFactor)
label(skip)
label(return)

memLearnRateFactor:
  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  push rcx // .. as 'This' parameter
  push r11
  mov rcx,[rdi+10] // current pawn
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop r11
  pop rcx
  pop rax
  je skip // update only for relevant colonists
  movss xmm0,[desiredLearnRateFactor]
skip:
  mov rdi,[rbp-10]
  mov r15,[rbp-08]
  jmp return
desiredLearnRateFactor:
  dd (float)200.0

bkpLearnRateFactor:
  readmem(codeLearnRateFactor,8)

codeLearnRateFactor:
  jmp memLearnRateFactor
  nop 3

return:

registersymbol(desiredLearnRateFactor)
registersymbol(codeLearnRateFactor)
registersymbol(memLearnRateFactor)
registersymbol(bkpLearnRateFactor)

[DISABLE]

codeLearnRateFactor:
  readmem(bkpLearnRateFactor,8)

unregistersymbol(*)
dealloc(memLearnRateFactor)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.SkillRecord:LearnRateFactor+26e

RimWorld.SkillRecord:LearnRateFactor+23f: F3 0F 10 45 EC           - movss xmm0,[rbp-14]
RimWorld.SkillRecord:LearnRateFactor+244: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.SkillRecord:LearnRateFactor+248: F3 0F 10 0D 30 00 00 00  - movss xmm1,[RimWorld.SkillRecord:LearnRateFactor+280]
RimWorld.SkillRecord:LearnRateFactor+250: F3 0F 5A C9              - cvtss2sd xmm1,xmm1
RimWorld.SkillRecord:LearnRateFactor+254: F2 0F 59 C1              - mulsd xmm0,xmm1
RimWorld.SkillRecord:LearnRateFactor+258: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
RimWorld.SkillRecord:LearnRateFactor+25c: F3 0F 11 6D EC           - movss [rbp-14],xmm5
RimWorld.SkillRecord:LearnRateFactor+261: F3 0F 10 45 EC           - movss xmm0,[rbp-14]
RimWorld.SkillRecord:LearnRateFactor+266: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.SkillRecord:LearnRateFactor+26a: F2 0F 5A C0              - cvtsd2ss xmm0,xmm0
// ---------- INJECTING HERE ----------
RimWorld.SkillRecord:LearnRateFactor+26e: 48 8B 7D F0              - mov rdi,[rbp-10]
// ---------- DONE INJECTING  ----------
RimWorld.SkillRecord:LearnRateFactor+272: 4C 8B 7D F8              - mov r15,[rbp-08]
RimWorld.SkillRecord:LearnRateFactor+276: 48 8D 65 00              - lea rsp,[rbp+00]
RimWorld.SkillRecord:LearnRateFactor+27a: 5D                       - pop rbp
RimWorld.SkillRecord:LearnRateFactor+27b: C3                       - ret
RimWorld.SkillRecord:LearnRateFactor+27c: 8B 6D F8                 - mov ebp,[rbp-08]
RimWorld.SkillRecord:LearnRateFactor+27f: 48 CD CC                 - int -34
RimWorld.SkillRecord:LearnRateFactor+282: 4C 3E                    - db 3E
RimWorld.SkillRecord:LearnRateFactor+284: C3                       - ret
RimWorld.SkillRecord:LearnRateFactor+285: 9C                       - pushfq
RimWorld.SkillRecord:LearnRateFactor+286: 48 63 40 08              - movsxd  rax,dword ptr [rax+08]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196669</ID>
                  <Description>"Desired learn rate"</Description>
                  <DropDownList DisplayValueAsItem="1">0.349999994:no passion
1:minor passion
1.5:major passion
200:debug
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desiredLearnRateFactor</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196604</ID>
              <Description>"Max skills"</Description>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeSkillRecord, RimWorld.SkillRecord:Interval, 48 8B 46 10 48 8B 80 38 01 00 00)
alloc(memSkillRecord, $1000, codeSkillRecord)
label(skip)
label(return)

memSkillRecord:
  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  push rcx // .. as 'This' parameter
  push r11
  mov rcx,[rsi+10] // current pawn
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop r11
  pop rcx
  pop rax
  je skip // update skill level only for relevant colonists
  mov [rsi+20],#20 // set 'levelInt' to max
  mov [rsi+24],#2 // set 'passion' to max
  mov [rsi+28],(float)30000.0 // set 'xpSinceLastLevel' matching the 'levelInt'.
  // Verse.BoolUnknown = {True 0,False 1,Unknown 2}
  //mov byte ptr [rsi+30],#1 // set 'cachedTotallyDisabled'
  //mov byte ptr [rsi+31],#1 // set 'cachedPermanentlyDisabled'
skip:
  mov rax,[rsi+10]
  mov rax,[rax+00000138]
  jmp return

bkpSkillRecord:
  readmem(codeSkillRecord,11)

codeSkillRecord:
  jmp memSkillRecord
  nop 6

return:

registersymbol(codeSkillRecord)
registersymbol(memSkillRecord)
registersymbol(bkpSkillRecord)

[DISABLE]

codeSkillRecord:
  readmem(bkpSkillRecord,11)

unregistersymbol(*)
dealloc(memSkillRecord)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.SkillRecord:Interval+13

27BDFA5E868: 00 00                          - add [rax],al
27BDFA5E86A: 00 00                          - add [rax],al
27BDFA5E86C: 00 00                          - add [rax],al
27BDFA5E86E: 00 00                          - add [rax],al
RimWorld.SkillRecord:Interval: 55                             - push rbp
RimWorld.SkillRecord:Interval+1: 48 8B EC                       - mov rbp,rsp
RimWorld.SkillRecord:Interval+4: 48 83 EC 40                    - sub rsp,40
RimWorld.SkillRecord:Interval+8: 48 89 75 F0                    - mov [rbp-10],rsi
RimWorld.SkillRecord:Interval+c: 48 89 7D F8                    - mov [rbp-08],rdi
RimWorld.SkillRecord:Interval+10: 48 8B F1                       - mov rsi,rcx
// ---------- INJECTING HERE ----------
RimWorld.SkillRecord:Interval+13: 48 8B 46 10                    - mov rax,[rsi+10]
RimWorld.SkillRecord:Interval+17: 48 8B 80 38 01 00 00           - mov rax,[rax+00000138]
// ---------- DONE INJECTING  ----------
RimWorld.SkillRecord:Interval+1e: 48 8B 40 40                    - mov rax,[rax+40]
RimWorld.SkillRecord:Interval+22: 48 B9 A8 8E D6 0D 7C 02 00 00  - mov rcx,0000027C0DD68EA8
RimWorld.SkillRecord:Interval+2c: 48 8B 11                       - mov rdx,[rcx]
RimWorld.SkillRecord:Interval+2f: 48 8B C8                       - mov rcx,rax
RimWorld.SkillRecord:Interval+32: 83 38 00                       - cmp dword ptr [rax],00
RimWorld.SkillRecord:Interval+35: 90                             - nop
RimWorld.SkillRecord:Interval+36: 49 BB 40 72 D4 72 7C 02 00 00  - mov r11,RimWorld.TraitSet:HasTrait
RimWorld.SkillRecord:Interval+40: 41 FF D3                       - call r11
RimWorld.SkillRecord:Interval+43: 85 C0                          - test eax,eax
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196681</ID>
              <Description>"Set pawn stats"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeGetStatValue, RimWorld.StatExtension:GetStatValue, F3 0F 5A C0 F2 0F 5A C0)
alloc(memGetStatValue, $1000, codeGetStatValue)
label(skip)
label(return)

memGetStatValue:

  // DoorOpenSpeed #64457
  // FilthRate #38404
  // MeleeDodgeChance #18456
  // ShootingAccuracyPawn #34504
  // AimingDelayFactor #17806

  // RimWorld.StatDef.shortHash
  // Filter only relevant stats to update

  push rcx
  push rdx
  mov rcx,[rbp-10] // current Thing
  mov [ptrStatThing],rcx
  mov rdx,[rcx+10]
  cmp byte ptr [rdx+388],1 // Thing.def.category == Pawn
  pop rdx
  pop rcx
  jne skip // update only Pawns

  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  push rcx // .. as 'This' parameter
  push r11
  mov rcx,[rbp-10] // current Pawn
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop r11
  pop rcx
  pop rax
  je skip // update only relevant colonists

  mov [ptrStatDef],r15
  cmp word ptr [r15+52],#30381 // WorkSpeedGlobal
  jne @f
  movss xmm0,[desiredWorkSpeedGlobal]
@@:
  cmp word ptr [r15+52],#45971 // GlobalLearningFactor
  jne @f
  movss xmm0,[desiredGlobalLearningFactor]
@@:
  cmp word ptr [r15+52],#33199 // MoveSpeed
  jne @f
  movss xmm0,[desiredMoveSpeed]
@@:
  cmp word ptr [r15+52],#50280 // CleaningSpeed
  jne @f
  movss xmm0,[desiredCleaningSpeed]
skip:
  cvtss2sd xmm0,xmm0
  cvtsd2ss xmm0,xmm0
  jmp return

desiredCleaningSpeed:
  dd (float)100.0

desiredWorkSpeedGlobal:
  dd (float)100.0

desiredGlobalLearningFactor:
  dd (float)10000.0

desiredMoveSpeed:
  dd (float)100.0

ptrStatDef:
  dq 0

ptrStatThing:
  dq 0

bkpGetStatValue:
  readmem(codeGetStatValue,8)

codeGetStatValue:
  jmp memGetStatValue
  nop 3

return:

registersymbol(desiredCleaningSpeed)
registersymbol(desiredWorkSpeedGlobal)
registersymbol(desiredGlobalLearningFactor)
registersymbol(desiredMoveSpeed)
registersymbol(ptrStatThing)
registersymbol(ptrStatDef)
registersymbol(codeGetStatValue)
registersymbol(memGetStatValue)
registersymbol(bkpGetStatValue)

[DISABLE]

codeGetStatValue:
  readmem(bkpGetStatValue,8)

unregistersymbol(*)
dealloc(memGetStatValue)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.StatExtension:GetStatValue+53

RimWorld.StatExtension:GetStatValue+22: 48 8D 6D 00                    - lea rbp,[rbp+00]
RimWorld.StatExtension:GetStatValue+26: 49 BB B0 F9 E9 C4 CE 01 00 00  - mov r11,RimWorld.StatDef:get_Worker
RimWorld.StatExtension:GetStatValue+30: 41 FF D3                       - call r11
RimWorld.StatExtension:GetStatValue+33: 48 8B C8                       - mov rcx,rax
RimWorld.StatExtension:GetStatValue+36: 48 8B 55 F0                    - mov rdx,[rbp-10]
RimWorld.StatExtension:GetStatValue+3a: 44 0F B6 45 E8                 - movzx r8d,byte ptr [rbp-18]
RimWorld.StatExtension:GetStatValue+3f: 4C 63 4D E0                    - movsxd  r9,dword ptr [rbp-20]
RimWorld.StatExtension:GetStatValue+43: 83 38 00                       - cmp dword ptr [rax],00
RimWorld.StatExtension:GetStatValue+46: 49 BB 90 08 42 CC CE 01 00 00  - mov r11,RimWorld.StatWorker:GetValue
RimWorld.StatExtension:GetStatValue+50: 41 FF D3                       - call r11
// ---------- INJECTING HERE ----------
RimWorld.StatExtension:GetStatValue+53: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
// ---------- DONE INJECTING  ----------
RimWorld.StatExtension:GetStatValue+57: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
RimWorld.StatExtension:GetStatValue+5b: 4C 8B 7D F8                    - mov r15,[rbp-08]
RimWorld.StatExtension:GetStatValue+5f: 48 8D 65 00                    - lea rsp,[rbp+00]
RimWorld.StatExtension:GetStatValue+63: 5D                             - pop rbp
RimWorld.StatExtension:GetStatValue+64: C3                             - ret
1CECC420845: 00 00                          - add [rax],al
1CECC420847: 00 01                          - add [rcx],al
1CECC420849: 04 02                          - add al,02
1CECC42084B: 05 04 03 01 50                 - add eax,50010304
1CECC420850: 00 00                          - add [rax],al
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196682</ID>
                  <Description>"CleaningSpeed"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desiredCleaningSpeed</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>1337196692</ID>
                  <Description>"GlobalLearningFactor"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desiredGlobalLearningFactor</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>1337196693</ID>
                  <Description>"MoveSpeed"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desiredMoveSpeed</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>1337196694</ID>
                  <Description>"WorkSpeedGlobal"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desiredWorkSpeedGlobal</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196700</ID>
              <Description>"【 Set pawn capacity levels 】"</Description>
              <Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
              <Color>808080</Color>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196670</ID>
                  <Description>"Set pawn capacity levels (Verse.PawnCapacitiesHandler:GetLevel)"</Description>
                  <Options moHideChildren="1"/>
                  <Color>FF0000</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
aobScanMono(codeCapacityGetLevel, Verse.PawnCapacitiesHandler:GetLevel, 48 8B 75 F0 48 8B 7D F8)
alloc(memCapacityGetLevel, $1000, codeCapacityGetLevel)
label(skip)
label(return)

memCapacityGetLevel:
  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  push rcx // .. as 'This' parameter
  push r11
  mov rcx,[rdi+10] // current pawn
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop r11
  pop rcx
  pop rax
  je skip // update only for relevant colonists
  movss xmm0,[desiredCapacityGetLevel]
  movss [rax+14],xmm0
skip:
  mov rsi,[rbp-10]
  mov rdi,[rbp-08]
  jmp return

bkpCapacityGetLevel:
  readmem(codeCapacityGetLevel,8)

desiredCapacityGetLevel:
  dd (float)100.0

codeCapacityGetLevel:
  jmp memCapacityGetLevel
  nop 3

return:

registersymbol(desiredCapacityGetLevel)
registersymbol(codeCapacityGetLevel)
registersymbol(memCapacityGetLevel)
registersymbol(bkpCapacityGetLevel)

[DISABLE]

codeCapacityGetLevel:
  readmem(bkpCapacityGetLevel,8)

unregistersymbol(*)
dealloc(memCapacityGetLevel)

{
// ORIGINAL CODE - INJECTION POINT: Verse.PawnCapacitiesHandler:GetLevel+181

Verse.PawnCapacitiesHandler:GetLevel+156: 49 BB 8B 5C A2 3D EF 01 00 00  - mov r11,000001EF3DA25C8B
Verse.PawnCapacitiesHandler:GetLevel+160: 41 FF D3                       - call r11
Verse.PawnCapacitiesHandler:GetLevel+163: EB 18                          - jmp Verse.PawnCapacitiesHandler:GetLevel+17d
Verse.PawnCapacitiesHandler:GetLevel+165: 48 89 65 E8                    - mov [rbp-18],rsp
Verse.PawnCapacitiesHandler:GetLevel+169: 48 83 EC 20                    - sub rsp,20
Verse.PawnCapacitiesHandler:GetLevel+16d: 48 8B 45 B0                    - mov rax,[rbp-50]
Verse.PawnCapacitiesHandler:GetLevel+171: C7 40 10 02 00 00 00           - mov [rax+10],00000002
Verse.PawnCapacitiesHandler:GetLevel+178: 48 8B 65 E8                    - mov rsp,[rbp-18]
Verse.PawnCapacitiesHandler:GetLevel+17c: C3                             - ret
Verse.PawnCapacitiesHandler:GetLevel+17d: 48 8B 45 B0                    - mov rax,[rbp-50]
// ---------- INJECTING HERE ----------
Verse.PawnCapacitiesHandler:GetLevel+181: F3 0F 10 40 14                 - movss xmm0,[rax+14]
// ---------- DONE INJECTING  ----------
Verse.PawnCapacitiesHandler:GetLevel+186: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Verse.PawnCapacitiesHandler:GetLevel+18a: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
Verse.PawnCapacitiesHandler:GetLevel+18e: 48 8B 75 F0                    - mov rsi,[rbp-10]
Verse.PawnCapacitiesHandler:GetLevel+192: 48 8B 7D F8                    - mov rdi,[rbp-08]
Verse.PawnCapacitiesHandler:GetLevel+196: 48 8D 65 00                    - lea rsp,[rbp+00]
Verse.PawnCapacitiesHandler:GetLevel+19a: 5D                             - pop rbp
Verse.PawnCapacitiesHandler:GetLevel+19b: C3                             - ret
1F163CCDE7C: 00 00                          - add [rax],al
1F163CCDE7E: 00 00                          - add [rax],al
1F163CCDE80: 01 04 02                       - add [rdx+rax],eax
}
</AssemblerScript>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>1337196695</ID>
                      <Description>"desiredCapacityGetLevel"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>808000</Color>
                      <VariableType>Float</VariableType>
                      <Address>desiredCapacityGetLevel</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>1337196696</ID>
                  <Description>"Set pawn capacity levels (Verse.PawnCapacityUtility:CalculateCapacityLevel)"</Description>
                  <Options moHideChildren="1"/>
                  <Color>FF0000</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
aobScanMono(codeCalculateCapacityLevel, Verse.PawnCapacityUtility:CalculateCapacityLevel, F3 0F 5A C0 F2 0F 5A C0 48 8B 5D C8)
alloc(memCalculateCapacityLevel, $1000, codeCalculateCapacityLevel)
label(skip)
label(return)

memCalculateCapacityLevel:

  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  push rcx // .. as 'This' parameter
  push r11
  mov rcx,[r14+10] // HediffSet.Pawn
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop r11
  pop rcx
  pop rax
  je skip // update only for relevant colonists

  movss xmm0,[desiredCalculateCapacityLevel]
skip:
  cvtss2sd xmm0,xmm0
  cvtsd2ss xmm0,xmm0
  jmp return

bkpCalculateCapacityLevel:
  readmem(codeCalculateCapacityLevel,8)

desiredCalculateCapacityLevel:
  dd (float)100.0

codeCalculateCapacityLevel:
  jmp memCalculateCapacityLevel
  nop 3

return:

registersymbol(desiredCalculateCapacityLevel)
registersymbol(codeCalculateCapacityLevel)
registersymbol(memCalculateCapacityLevel)
registersymbol(bkpCalculateCapacityLevel)

[DISABLE]

codeCalculateCapacityLevel:
  readmem(bkpCalculateCapacityLevel,8)

unregistersymbol(*)
dealloc(memCalculateCapacityLevel)

{
// ORIGINAL CODE - INJECTION POINT: Verse.PawnCapacityUtility:CalculateCapacityLevel+90d

Verse.PawnCapacityUtility:CalculateCapacityLevel+8dc: F3 0F 11 6D C4                 - movss [rbp-3C],xmm5
Verse.PawnCapacityUtility:CalculateCapacityLevel+8e1: F3 0F 10 45 C4                 - movss xmm0,[rbp-3C]
Verse.PawnCapacityUtility:CalculateCapacityLevel+8e6: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Verse.PawnCapacityUtility:CalculateCapacityLevel+8ea: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
Verse.PawnCapacityUtility:CalculateCapacityLevel+8ee: 49 BB F0 C0 26 E0 01 02 00 00  - mov r11,Verse.GenMath:RoundedHundredth
Verse.PawnCapacityUtility:CalculateCapacityLevel+8f8: 41 FF D3                       - call r11
Verse.PawnCapacityUtility:CalculateCapacityLevel+8fb: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Verse.PawnCapacityUtility:CalculateCapacityLevel+8ff: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Verse.PawnCapacityUtility:CalculateCapacityLevel+903: F3 0F 11 6D C4                 - movss [rbp-3C],xmm5
Verse.PawnCapacityUtility:CalculateCapacityLevel+908: F3 0F 10 45 C4                 - movss xmm0,[rbp-3C]
// ---------- INJECTING HERE ----------
Verse.PawnCapacityUtility:CalculateCapacityLevel+90d: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
// ---------- DONE INJECTING  ----------
Verse.PawnCapacityUtility:CalculateCapacityLevel+911: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
Verse.PawnCapacityUtility:CalculateCapacityLevel+915: 48 8B 5D C8                    - mov rbx,[rbp-38]
Verse.PawnCapacityUtility:CalculateCapacityLevel+919: 48 8B 75 D0                    - mov rsi,[rbp-30]
Verse.PawnCapacityUtility:CalculateCapacityLevel+91d: 48 8B 7D D8                    - mov rdi,[rbp-28]
Verse.PawnCapacityUtility:CalculateCapacityLevel+921: 4C 8B 65 E0                    - mov r12,[rbp-20]
Verse.PawnCapacityUtility:CalculateCapacityLevel+925: 4C 8B 6D E8                    - mov r13,[rbp-18]
Verse.PawnCapacityUtility:CalculateCapacityLevel+929: 4C 8B 75 F0                    - mov r14,[rbp-10]
Verse.PawnCapacityUtility:CalculateCapacityLevel+92d: 4C 8B 7D F8                    - mov r15,[rbp-08]
Verse.PawnCapacityUtility:CalculateCapacityLevel+931: 48 8D 65 00                    - lea rsp,[rbp+00]
Verse.PawnCapacityUtility:CalculateCapacityLevel+935: 5D                             - pop rbp
}
</AssemblerScript>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>1337196697</ID>
                      <Description>"desiredCalculateCapacityLevel"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>808000</Color>
                      <VariableType>Float</VariableType>
                      <Address>desiredCalculateCapacityLevel</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196671</ID>
              <Description>"Zero injuries severity"</Description>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeHediffGetSeverity, Verse.Hediff:get_Severity, F3 0F 10 40 58)
alloc(memHediffGetSeverity, $1000, codeHediffGetSeverity)
label(skip)
label(return)

memHediffGetSeverity:
  push rcx // .. as 'This' parameter
  push r11
  mov rcx,[rax+48] // current pawn
  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop rax
  pop r11
  pop rcx
  je skip // update only for relevant colonists
  mov [rax+58],(float)0.0 // zero 'Verse.Hediff.severityInt'
skip:
  movss xmm0,[rax+58]
  jmp return

bkpHediffGetSeverity:
  readmem(codeHediffGetSeverity,5)

codeHediffGetSeverity:
  jmp memHediffGetSeverity

return:

registersymbol(codeHediffGetSeverity)
registersymbol(memHediffGetSeverity)
registersymbol(bkpHediffGetSeverity)

[DISABLE]

codeHediffGetSeverity:
  readmem(bkpHediffGetSeverity,5)

unregistersymbol(*)
dealloc(memHediffGetSeverity)

{
// ORIGINAL CODE - INJECTION POINT: Verse.Hediff:get_Severity+b

1F163CD6D02: 00 00           - add [rax],al
1F163CD6D04: 00 00           - add [rax],al
1F163CD6D06: 00 00           - add [rax],al
1F163CD6D08: 00 00           - add [rax],al
1F163CD6D0A: 00 00           - add [rax],al
1F163CD6D0C: 00 00           - add [rax],al
1F163CD6D0E: 00 00           - add [rax],al
Verse.Hediff:get_Severity: 48 83 EC 08     - sub rsp,08
Verse.Hediff:get_Severity+4: 48 89 0C 24     - mov [rsp],rcx
Verse.Hediff:get_Severity+8: 48 8B C1        - mov rax,rcx
// ---------- INJECTING HERE ----------
Verse.Hediff:get_Severity+b: F3 0F 10 40 58  - movss xmm0,[rax+58]
// ---------- DONE INJECTING  ----------
Verse.Hediff:get_Severity+10: F3 0F 5A C0     - cvtss2sd xmm0,xmm0
Verse.Hediff:get_Severity+14: F2 0F 5A C0     - cvtsd2ss xmm0,xmm0
Verse.Hediff:get_Severity+18: 48 83 C4 08     - add rsp,08
Verse.Hediff:get_Severity+1c: C3              - ret
1F163CD6D2D: 00 00           - add [rax],al
1F163CD6D2F: 00 01           - add [rcx],al
1F163CD6D31: 04 01           - add al,01
1F163CD6D33: 00 04 02        - add [rdx+rax],al
1F163CD6D36: 00 00           - add [rax],al
1F163CD6D38: 00 00           - add [rax],al
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196667</ID>
              <Description>"All needs are met"</Description>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeNeedCurLevel, RimWorld.Need:get_CurLevel, F3 0F 10 40 28)
alloc(memNeedCurLevel, $1000, codeNeedCurLevel)
label(skip)
label(return)

memNeedCurLevel:
  push rcx
  mov rcx,[rax+18] // current pawn as 'This' parameter
  push rax // get_IsColonistPlayerControlled uses 'eax' as return value
  push r11
  mov r11,codeIsColonistPlayerControlled
  call r11
  test eax,eax
  pop r11
  pop rax
  pop rcx
  je skip // update only for relevant colonists
  mov [rax+28],(float)1.0 // set 'curLevelInt' to max
skip:
  movss xmm0,[rax+28]
  jmp return

bkpNeedCurLevel:
  readmem(codeNeedCurLevel,5)

codeNeedCurLevel:
  jmp memNeedCurLevel

return:

registersymbol(codeNeedCurLevel)
registersymbol(memNeedCurLevel)
registersymbol(bkpNeedCurLevel)

[DISABLE]

codeNeedCurLevel:
  readmem(bkpNeedCurLevel,5)

unregistersymbol(*)
dealloc(memNeedCurLevel)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.Need:get_CurLevel+b

196D42C7E52: 00 00           - add [rax],al
196D42C7E54: 00 00           - add [rax],al
196D42C7E56: 00 00           - add [rax],al
196D42C7E58: 00 00           - add [rax],al
196D42C7E5A: 00 00           - add [rax],al
196D42C7E5C: 00 00           - add [rax],al
196D42C7E5E: 00 00           - add [rax],al
RimWorld.Need:get_CurLevel: 48 83 EC 08     - sub rsp,08
RimWorld.Need:get_CurLevel+4: 48 89 0C 24     - mov [rsp],rcx
RimWorld.Need:get_CurLevel+8: 48 8B C1        - mov rax,rcx
// ---------- INJECTING HERE ----------
RimWorld.Need:get_CurLevel+b: F3 0F 10 40 28  - movss xmm0,[rax+28]
// ---------- DONE INJECTING  ----------
RimWorld.Need:get_CurLevel+10: F3 0F 5A C0     - cvtss2sd xmm0,xmm0
RimWorld.Need:get_CurLevel+14: F2 0F 5A C0     - cvtsd2ss xmm0,xmm0
RimWorld.Need:get_CurLevel+18: 48 83 C4 08     - add rsp,08
RimWorld.Need:get_CurLevel+1c: C3              - ret
196D42C7E7D: 00 00           - add [rax],al
196D42C7E7F: 00 01           - add [rcx],al
196D42C7E81: 04 01           - add al,01
196D42C7E83: 00 04 02        - add [rdx+rax],al
196D42C7E86: 00 00           - add [rax],al
196D42C7E88: 00 00           - add [rax],al
}
</AssemblerScript>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>27114</ID>
          <Description>"【 Instant Work 】"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <Color>808080</Color>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>1337196609</ID>
              <Description>"Research"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeResearchPerformed, RimWorld.ResearchManager:ResearchPerformed, 0F 84 28 00 00 00)
alloc(bkpResearchPerformed,6,codeResearchPerformed)

bkpResearchPerformed:
  readmem(codeResearchPerformed,6)

codeResearchPerformed:
  nop 6

registersymbol(codeResearchPerformed)
registersymbol(bkpResearchPerformed)

[DISABLE]

codeResearchPerformed:
  readmem(bkpResearchPerformed,6)

unregistersymbol(*)
dealloc(bkpResearchPerformed)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.ResearchManager:ResearchPerformed+205

RimWorld.ResearchManager:ResearchPerformed+1db: 83 38 00                       - cmp dword ptr [rax],00
RimWorld.ResearchManager:ResearchPerformed+1de: 49 BB A0 4B 56 7C 7C 02 00 00  - mov r11,System.Collections.Generic.Dictionary`2[Verse.ResearchProjectDef,System.Single]:set_Item
RimWorld.ResearchManager:ResearchPerformed+1e8: 41 FF D3                       - call r11
RimWorld.ResearchManager:ResearchPerformed+1eb: 48 8B 47 10                    - mov rax,[rdi+10]
RimWorld.ResearchManager:ResearchPerformed+1ef: 48 8B C8                       - mov rcx,rax
RimWorld.ResearchManager:ResearchPerformed+1f2: 83 38 00                       - cmp dword ptr [rax],00
RimWorld.ResearchManager:ResearchPerformed+1f5: 90                             - nop
RimWorld.ResearchManager:ResearchPerformed+1f6: 49 BB 90 53 91 7A 7C 02 00 00  - mov r11,Verse.ResearchProjectDef:get_IsFinished
RimWorld.ResearchManager:ResearchPerformed+200: 41 FF D3                       - call r11
RimWorld.ResearchManager:ResearchPerformed+203: 85 C0                          - test eax,eax
// ---------- INJECTING HERE ----------
RimWorld.ResearchManager:ResearchPerformed+205: 0F 84 28 00 00 00              - je RimWorld.ResearchManager:ResearchPerformed+233
// ---------- DONE INJECTING  ----------
RimWorld.ResearchManager:ResearchPerformed+20b: 48 8B 57 10                    - mov rdx,[rdi+10]
RimWorld.ResearchManager:ResearchPerformed+20f: 48 C7 44 24 20 01 00 00 00     - mov qword ptr [rsp+20],00000001
RimWorld.ResearchManager:ResearchPerformed+218: 48 8B CF                       - mov rcx,rdi
RimWorld.ResearchManager:ResearchPerformed+21b: 41 B8 01 00 00 00              - mov r8d,00000001
RimWorld.ResearchManager:ResearchPerformed+221: 4C 8B CE                       - mov r9,rsi
RimWorld.ResearchManager:ResearchPerformed+224: 66 90                          - nop 2
RimWorld.ResearchManager:ResearchPerformed+226: 49 BB 00 00 12 48 7A 02 00 00  - mov r11,RimWorld.ResearchManager:FinishProject
RimWorld.ResearchManager:ResearchPerformed+230: 41 FF D3                       - call r11
RimWorld.ResearchManager:ResearchPerformed+233: 48 8B 75 F0                    - mov rsi,[rbp-10]
RimWorld.ResearchManager:ResearchPerformed+237: 48 8B 7D F8                    - mov rdi,[rbp-08]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196600</ID>
              <Description>"Repair"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverRepair, RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1, F2 0F 5C C1 F2 0F 5A E8)
alloc(memJobDriverRepair,$1000,codeJobDriverRepair)
label(return)

memJobDriverRepair:
  xorps xmm0,xmm0 // zeroing ticksToNextRepair
  cvtsd2ss xmm5,xmm0
  jmp return

bkpJobDriverRepair:
  readmem(codeJobDriverRepair,8)

codeJobDriverRepair:
  jmp memJobDriverRepair
  nop 3

return:

registersymbol(codeJobDriverRepair)
registersymbol(memJobDriverRepair)
registersymbol(bkpJobDriverRepair)

[DISABLE]

codeJobDriverRepair:
  readmem(bkpJobDriverRepair,8)

unregistersymbol(*)
dealloc(memJobDriverRepair)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+159

RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+12f: F3 0F 5A C9        - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+133: F2 0F 59 C1        - mulsd xmm0,xmm1
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+137: F2 0F 5A E8        - cvtsd2ss xmm5,xmm0
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+13b: F3 0F 11 6D DC     - movss [rbp-24],xmm5
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+140: 48 8B 46 10        - mov rax,[rsi+10]
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+144: 48 8B C8           - mov rcx,rax
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+147: F3 0F 10 41 78     - movss xmm0,[rcx+78]
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+14c: F3 0F 5A C0        - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+150: F3 0F 10 4D DC     - movss xmm1,[rbp-24]
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+155: F3 0F 5A C9        - cvtss2sd xmm1,xmm1
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+159: F2 0F 5C C1        - subsd xmm0,xmm1
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+15d: F2 0F 5A E8        - cvtsd2ss xmm5,xmm0
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+161: F3 0F 11 68 78     - movss [rax+78],xmm5
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+166: 48 8B 46 10        - mov rax,[rsi+10]
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+16a: F3 0F 10 40 78     - movss xmm0,[rax+78]
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+16f: F3 0F 5A C0        - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+173: 66 0F 57 C9        - xorpd xmm1,xmm1
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+177: 66 0F 2F C8        - comisd xmm1,xmm0
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+17b: 0F 82 1A 02 00 00  - jb RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+39b
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+181: 48 8B 46 10        - mov rax,[rsi+10]
RimWorld.JobDriver_Repair+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+185: 48 8B C8           - mov rcx,rax
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>27111</ID>
              <Description>"Mine"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverMine, RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0, 48 63 80 80 00 00 00 83 F8 9C)
alloc(memJobDriverMine,$1000,codeJobDriverMine)
label(return)

memJobDriverMine:
  mov [rax+00000080],#0 // zeroing ticksToPickHit
  movsxd  rax,dword ptr [rax+00000080]
  jmp return

bkpJobDriverMine:
  readmem(codeJobDriverMine,7)

codeJobDriverMine:
  jmp memJobDriverMine
  nop 2

return:

registersymbol(codeJobDriverMine)
registersymbol(memJobDriverMine)
registersymbol(bkpJobDriverMine)

[DISABLE]

codeJobDriverMine:
  readmem(bkpJobDriverMine,7)

unregistersymbol(*)
dealloc(memJobDriverMine)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+92

RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+5e: 49 BB D3 4E CC ED 52 02 00 00  - mov r11,00000252EDCC4ED3
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+68: 41 FF D3                       - call r11
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+6b: 48 8B 46 10                    - mov rax,[rsi+10]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+6f: 4C 8B 60 10                    - mov r12,[rax+10]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+73: 48 8B 4E 18                    - mov rcx,[rsi+18]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+77: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+7e: 49 BB AE 79 9F B1 54 02 00 00  - mov r11,00000254B19F79AE
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+88: 41 FF D3                       - call r11
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+8b: 48 8B D8                       - mov rbx,rax
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+8e: 48 8B 46 18                    - mov rax,[rsi+18]
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+92: 48 63 80 80 00 00 00           - movsxd  rax,dword ptr [rax+00000080]
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+99: 83 F8 9C                       - cmp eax,-64
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+9c: 7D 15                          - jnl RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+b3
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+9e: 48 8B 4E 18                    - mov rcx,[rsi+18]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+a2: 48 8D 6D 00                    - lea rbp,[rbp+00]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+a6: 49 BB 22 78 9F B1 54 02 00 00  - mov r11,00000254B19F7822
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+b0: 41 FF D3                       - call r11
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+b3: 49 8B 84 24 30 01 00 00        - mov rax,[r12+00000130]
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+bb: 48 85 C0                       - test rax,rax
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+be: 0F 84 67 00 00 00              - je RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+12b
RimWorld.JobDriver_Mine+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__0+c4: 83 3B 00                       - cmp dword ptr [rbx],00
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>27112</ID>
              <Description>"AffectFloor"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverAffectFloor, RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3, F3 0F 10 40 78)
alloc(memJobDriverAffectFloor,$1000,codeJobDriverAffectFloor)
label(return)

memJobDriverAffectFloor:
  mov [rax+78],(float)0 // zeroing 'workLeft'
  movss xmm0,[rax+78]
  jmp return

bkpJobDriverAffectFloor:
  readmem(codeJobDriverAffectFloor,5)

codeJobDriverAffectFloor:
  jmp memJobDriverAffectFloor

return:

registersymbol(codeJobDriverAffectFloor)
registersymbol(memJobDriverAffectFloor)
registersymbol(bkpJobDriverAffectFloor)

[DISABLE]

codeJobDriverAffectFloor:
  readmem(bkpJobDriverAffectFloor,5)

unregistersymbol(*)
dealloc(memJobDriverAffectFloor)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+24

1E7FDC9EECE: 00 00                    - add [rax],al
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3: 55                       - push rbp
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+1: 48 8B EC                 - mov rbp,rsp
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+4: 48 83 EC 40              - sub rsp,40
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+8: 48 89 75 F8              - mov [rbp-08],rsi
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+c: 48 8B F1                 - mov rsi,rcx
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+f: F3 0F 10 05 59 00 00 00  - movss xmm0,[RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+70]
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+17: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+1b: F2 0F 11 45 F0           - movsd [rbp-10],xmm0
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+20: 48 8B 46 10              - mov rax,[rsi+10]
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+24: F3 0F 10 40 78           - movss xmm0,[rax+78]
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+29: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+2d: F2 0F 11 45 E8           - movsd [rbp-18],xmm0
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+32: 48 8B 46 10              - mov rax,[rsi+10]
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+36: 48 8B C8                 - mov rcx,rax
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+39: 48 8B 00                 - mov rax,[rax]
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+3c: FF 90 28 01 00 00        - call qword ptr [rax+00000128]
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+42: F2 0F 10 45 F0           - movsd xmm0,[rbp-10]
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+47: F2 0F 10 4D E8           - movsd xmm1,[rbp-18]
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+4c: F3 0F 2A D0              - cvtsi2ss xmm2,eax
RimWorld.JobDriver_AffectFloor+&lt;&gt;c__DisplayClass9_0:&lt;MakeNewToils&gt;b__3+50: F3 0F 5A D2              - cvtss2sd xmm2,xmm2
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>27117</ID>
              <Description>"AffectRoof"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverAffectRoof, RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1, F3 0F 11 68 78)
alloc(memJobDriverAffectRoof,$1000,codeJobDriverAffectRoof)
label(return)

memJobDriverAffectRoof:
  xorps xmm5,xmm5 // zero remaining work
  movss [rax+78],xmm5
  jmp return

bkpJobDriverAffectRoof:
  readmem(codeJobDriverAffectRoof,5)

codeJobDriverAffectRoof:
  jmp memJobDriverAffectRoof

return:

registersymbol(codeJobDriverAffectRoof)
registersymbol(memJobDriverAffectRoof)
registersymbol(bkpJobDriverAffectRoof)

[DISABLE]

codeJobDriverAffectRoof:
  readmem(bkpJobDriverAffectRoof,5)

unregistersymbol(*)
dealloc(memJobDriverAffectRoof)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+81

RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+57: F2 0F 5A E8        - cvtsd2ss xmm5,xmm0
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+5b: F3 0F 11 6D F4     - movss [rbp-0C],xmm5
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+60: 48 8B 46 10        - mov rax,[rsi+10]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+64: 48 8B C8           - mov rcx,rax
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+67: F3 0F 10 41 78     - movss xmm0,[rcx+78]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+6c: F3 0F 5A C0        - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+70: F3 0F 10 4D F4     - movss xmm1,[rbp-0C]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+75: F3 0F 5A C9        - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+79: F2 0F 5C C1        - subsd xmm0,xmm1
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+7d: F2 0F 5A E8        - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+81: F3 0F 11 68 78     - movss [rax+78],xmm5
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+86: 48 8B 46 10        - mov rax,[rsi+10]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+8a: F3 0F 10 40 78     - movss xmm0,[rax+78]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+8f: F3 0F 5A C0        - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+93: 66 0F 57 C9        - xorpd xmm1,xmm1
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+97: 66 0F 2F C8        - comisd xmm1,xmm0
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+9b: 0F 82 22 00 00 00  - jb RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+c3
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+a1: 48 8B 46 10        - mov rax,[rsi+10]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+a5: 48 8B C8           - mov rcx,rax
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+a8: 48 8B 00           - mov rax,[rax]
RimWorld.JobDriver_AffectRoof+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+ab: FF 90 18 01 00 00  - call qword ptr [rax+00000118]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>27115</ID>
              <Description>"ConstructFinishFrame"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverConstructFinishFrame, RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1, F3 41 0F 11 AF C0 00 00 00)
alloc(memJobDriverConstructFinishFrame,$1000,codeJobDriverConstructFinishFrame)
label(return)

memJobDriverConstructFinishFrame:
  movss xmm5,[rbp-54]
  movss [r15+000000C0],xmm5 // set 'frame.workDone' to 'workToBuild'
  jmp return

bkpJobDriverConstructFinishFrame:
  readmem(codeJobDriverConstructFinishFrame,9)

codeJobDriverConstructFinishFrame:
  jmp memJobDriverConstructFinishFrame
  nop 4

return:

registersymbol(codeJobDriverConstructFinishFrame)
registersymbol(memJobDriverConstructFinishFrame)
registersymbol(bkpJobDriverConstructFinishFrame)

[DISABLE]

codeJobDriverConstructFinishFrame:
  readmem(bkpJobDriverConstructFinishFrame,9)

unregistersymbol(*)
dealloc(memJobDriverConstructFinishFrame)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+381

RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+34f: 83 38 00                       - cmp dword ptr [rax],00
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+352: 48 8D 6D 00                    - lea rbp,[rbp+00]
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+356: 49 BB 10 65 F2 ED E7 01 00 00  - mov r11,Verse.SnowGrid:SetDepth
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+360: 41 FF D3                       - call r11
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+363: F3 41 0F 10 87 C0 00 00 00     - movss xmm0,[r15+000000C0]
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+36c: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+370: F3 0F 10 4D D4                 - movss xmm1,[rbp-2C]
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+375: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+379: F2 0F 58 C1                    - addsd xmm0,xmm1
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+37d: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+381: F3 41 0F 11 AF C0 00 00 00     - movss [r15+000000C0],xmm5
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+38a: F3 41 0F 10 87 C0 00 00 00     - movss xmm0,[r15+000000C0]
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+393: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+397: F3 0F 10 4D AC                 - movss xmm1,[rbp-54]
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+39c: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3a0: 66 0F 2F C8                    - comisd xmm1,xmm0
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3a4: 0F 8A 39 00 00 00              - jp RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3e3
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3aa: 0F 87 33 00 00 00              - ja RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3e3
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3b0: 49 8B CF                       - mov rcx,r15
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3b3: 48 8B D7                       - mov rdx,rdi
RimWorld.JobDriver_ConstructFinishFrame+&lt;&gt;c__DisplayClass4_0:&lt;MakeNewToils&gt;b__1+3b6: 41 83 3F 00                    - cmp dword ptr [r15],00
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>27116</ID>
              <Description>"PlantWork"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverPlantWork, RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1, F3 0F 10 88 B0 00 00 00)
alloc(memJobDriverPlantWork,$1000,codeJobDriverPlantWork)
label(return)

memJobDriverPlantWork:
  movss xmm1,[rax+000000B0] // get 'plant.def.plant.harvestWork'
  movss xmm0,[rax+000000B0] // set 'workDone' to 'plant.def.plant.harvestWork'
  push rax
  mov rax,[rsi+10]
  movss [rax+78],xmm0
  pop rax
  cvtss2sd xmm0,xmm0
  jmp return

bkpJobDriverPlantWork:
  readmem(codeJobDriverPlantWork,8)

codeJobDriverPlantWork:
  jmp memJobDriverPlantWork
  nop 3

return:

registersymbol(codeJobDriverPlantWork)
registersymbol(memJobDriverPlantWork)
registersymbol(bkpJobDriverPlantWork)

[DISABLE]

codeJobDriverPlantWork:
  readmem(bkpJobDriverPlantWork,8)

unregistersymbol(*)
dealloc(memJobDriverPlantWork)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+113

RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+df: 48 8B 85 40 FE FF FF     - mov rax,[rbp-000001C0]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+e6: F2 0F 10 85 38 FE FF FF  - movsd xmm0,[rbp-000001C8]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+ee: F2 0F 58 C1              - addsd xmm0,xmm1
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+f2: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+f6: F3 0F 11 68 78           - movss [rax+78],xmm5
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+fb: 48 8B 46 10              - mov rax,[rsi+10]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+ff: F3 0F 10 40 78           - movss xmm0,[rax+78]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+104: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+108: 48 8B 47 10              - mov rax,[rdi+10]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+10c: 48 8B 80 28 03 00 00     - mov rax,[rax+00000328]
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+113: F3 0F 10 88 B0 00 00 00  - movss xmm1,[rax+000000B0]
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+11b: F3 0F 5A C9              - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+11f: 66 0F 2F C8              - comisd xmm1,xmm0
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+123: 0F 8A 02 06 00 00        - jp RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+72b
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+129: 0F 87 FC 05 00 00        - ja RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+72b
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+12f: 48 8B 47 10              - mov rax,[rdi+10]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+133: 48 8B 80 28 03 00 00     - mov rax,[rax+00000328]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+13a: 48 8B 40 28              - mov rax,[rax+28]
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+13e: 48 85 C0                 - test rax,rax
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+141: 0F 84 C4 04 00 00        - je RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+60b
RimWorld.JobDriver_PlantWork+&lt;&gt;c__DisplayClass11_0:&lt;MakeNewToils&gt;b__1+147: 48 8B 47 10              - mov rax,[rdi+10]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196602</ID>
              <Description>"PlantSow"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverPlantSow, RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4, F3 0F 10 88 A4 00 00 00)
alloc(memJobDriverPlantSow,$1000,codeJobDriverPlantSow)
label(return)

memJobDriverPlantSow:
  movss xmm1,[rax+000000A4] // get 'plant2.def.plant.sowWork'
  movss xmm0,[rax+000000A4] // set 'sowWorkDone' to 'plant2.def.plant.sowWork'
  push rax
  mov rax,[rsi+10]
  movss [rax+78],xmm0
  pop rax
  cvtss2sd xmm0,xmm0
  jmp return

bkpJobDriverPlantSow:
  readmem(codeJobDriverPlantSow,8)

codeJobDriverPlantSow:
  jmp memJobDriverPlantSow
  nop 3

return:

registersymbol(codeJobDriverPlantSow)
registersymbol(memJobDriverPlantSow)
registersymbol(bkpJobDriverPlantSow)

[DISABLE]

codeJobDriverPlantSow:
  readmem(bkpJobDriverPlantSow,8)

unregistersymbol(*)
dealloc(memJobDriverPlantSow)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+149

RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+11b: F3 0F 10 4D E4           - movss xmm1,[rbp-1C]
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+120: F3 0F 5A C9              - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+124: F2 0F 58 C1              - addsd xmm0,xmm1
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+128: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+12c: F3 0F 11 68 78           - movss [rax+78],xmm5
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+131: 48 8B 46 10              - mov rax,[rsi+10]
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+135: F3 0F 10 40 78           - movss xmm0,[rax+78]
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+13a: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+13e: 48 8B 47 10              - mov rax,[rdi+10]
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+142: 48 8B 80 28 03 00 00     - mov rax,[rax+00000328]
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+149: F3 0F 10 88 A4 00 00 00  - movss xmm1,[rax+000000A4]
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+151: F3 0F 5A C9              - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+155: 66 0F 2F C8              - comisd xmm1,xmm0
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+159: 0F 8A 2C 05 00 00        - jp RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+68b
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+15f: 0F 87 26 05 00 00        - ja RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+68b
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+165: F3 0F 10 05 33 05 00 00  - movss xmm0,[RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+6a0]
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+16d: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+171: 48 8B CF                 - mov rcx,rdi
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+174: F2 0F 10 C8              - movsd xmm1,xmm0
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+178: F2 0F 5A C9              - cvtsd2ss xmm1,xmm1
RimWorld.JobDriver_PlantSow+&lt;&gt;c__DisplayClass5_0:&lt;MakeNewToils&gt;b__4+17c: 48 8B 07                 - mov rax,[rdi]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196603</ID>
              <Description>"CleanFilth"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverCleanFilth, RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1, F3 0F 10 48 18)
alloc(memJobDriverCleanFilth,$1000,codeJobDriverCleanFilth)
label(return)

memJobDriverCleanFilth:
  movss xmm1,[rax+18] // get 'filth.def.filth.cleaningWorkToReduceThickness'
  movss xmm0,[rax+18] // set 'cleaningWorkDone'
  push rax
  mov rax,[rsi+10]
  addss xmm0,xmm0 // double 'cleaningWorkDone' because it should be strictly above the required work
  movss [rax+78],xmm0
  pop rax
  cvtss2sd xmm0,xmm0
  jmp return

bkpJobDriverCleanFilth:
  readmem(codeJobDriverCleanFilth,5)

codeJobDriverCleanFilth:
  jmp memJobDriverCleanFilth

return:

registersymbol(codeJobDriverCleanFilth)
registersymbol(memJobDriverCleanFilth)
registersymbol(bkpJobDriverCleanFilth)

[DISABLE]

codeJobDriverCleanFilth:
  readmem(bkpJobDriverCleanFilth,5)

unregistersymbol(*)
dealloc(memJobDriverCleanFilth)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+19c

RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+16e: F3 0F 10 4D C4                 - movss xmm1,[rbp-3C]
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+173: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+177: F2 0F 58 C1                    - addsd xmm0,xmm1
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+17b: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+17f: F3 0F 11 68 7C                 - movss [rax+7C],xmm5
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+184: 48 8B 46 10                    - mov rax,[rsi+10]
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+188: F3 0F 10 40 78                 - movss xmm0,[rax+78]
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+18d: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+191: 48 8B 47 10                    - mov rax,[rdi+10]
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+195: 48 8B 80 F8 02 00 00           - mov rax,[rax+000002F8]
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+19c: F3 0F 10 48 18                 - movss xmm1,[rax+18]
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1a1: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1a5: 66 0F 2F C8                    - comisd xmm1,xmm0
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1a9: 0F 8A 94 00 00 00              - jp RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+243
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1af: 0F 83 8E 00 00 00              - jae RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+243
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1b5: 48 8B CF                       - mov rcx,rdi
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1b8: 83 3F 00                       - cmp dword ptr [rdi],00
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1bb: 66 66 90                       - nop 3
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1be: 49 BB A0 1D F1 72 7C 02 00 00  - mov r11,RimWorld.Filth:ThinFilth
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1c8: 41 FF D3                       - call r11
RimWorld.JobDriver_CleanFilth+&lt;&gt;c__DisplayClass7_0:&lt;MakeNewToils&gt;b__1+1cb: 48 8B 46 10                    - mov rax,[rsi+10]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>27120</ID>
              <Description>"RemoveBuilding (Deconstruct structures)"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeJobDriverRemoveBuilding, RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1, F3 0F 11 68 78)
alloc(memJobDriverRemoveBuilding,$1000,codeJobDriverRemoveBuilding)
label(return)

memJobDriverRemoveBuilding:
  xorps xmm5,xmm5 // zero 'workLeft'
  movss [rax+78],xmm5
  jmp return

bkpJobDriverRemoveBuilding:
  readmem(codeJobDriverRemoveBuilding,5)

codeJobDriverRemoveBuilding:
  jmp memJobDriverRemoveBuilding

return:

registersymbol(codeJobDriverRemoveBuilding)
registersymbol(memJobDriverRemoveBuilding)
registersymbol(bkpJobDriverRemoveBuilding)

[DISABLE]

codeJobDriverRemoveBuilding:
  readmem(bkpJobDriverRemoveBuilding,5)

unregistersymbol(*)
dealloc(memJobDriverRemoveBuilding)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+80

RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+4e: 49 BB A0 C7 03 58 51 01 00 00  - mov r11,RimWorld.StatExtension:GetStatValue
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+58: 41 FF D3                       - call r11
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+5b: F3 0F 5A C8                    - cvtss2sd xmm1,xmm0
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+5f: 48 8B 45 E8                    - mov rax,[rbp-18]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+63: F2 0F 10 45 E0                 - movsd xmm0,[rbp-20]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+68: F3 0F 10 15 80 00 00 00        - movss xmm2,[RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+f0]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+70: F3 0F 5A D2                    - cvtss2sd xmm2,xmm2
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+74: F2 0F 59 CA                    - mulsd xmm1,xmm2
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+78: F2 0F 5C C1                    - subsd xmm0,xmm1
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+7c: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+80: F3 0F 11 68 78                 - movss [rax+78],xmm5
// ---------- DONE INJECTING  ----------
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+85: 48 8B 46 18                    - mov rax,[rsi+18]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+89: 48 8B C8                       - mov rcx,rax
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+8c: 48 8B 00                       - mov rax,[rax]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+8f: FF 90 10 01 00 00              - call qword ptr [rax+00000110]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+95: 48 8B 46 18                    - mov rax,[rsi+18]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+99: F3 0F 10 40 78                 - movss xmm0,[rax+78]
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+9e: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+a2: 66 0F 57 C9                    - xorpd xmm1,xmm1
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+a6: 66 0F 2F C8                    - comisd xmm1,xmm0
RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+aa: 0F 82 2B 00 00 00              - jb RimWorld.JobDriver_RemoveBuilding+&lt;&gt;c__DisplayClass12_0:&lt;MakeNewToils&gt;b__1+db
}
</AssemblerScript>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>1337196634</ID>
          <Description>"【 Global 】"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <Color>808080</Color>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>1337196633</ID>
              <Description>"Infinite fuel"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeTargetFuelLevel, RimWorld.CompRefuelable:get_TargetFuelLevel, F3 0F 10 40 4C)
alloc(memTargetFuelLevel,$1000,codeTargetFuelLevel)
label(return)

memTargetFuelLevel:
  movss xmm0,[rax+4C] // fuelCapacity
  movss [rsi+28],xmm0 // fuel
  jmp return

bkpTargetFuelLevel:
  readmem(codeTargetFuelLevel,5)

codeTargetFuelLevel:
  jmp memTargetFuelLevel

return:

registersymbol(codeTargetFuelLevel)
registersymbol(memTargetFuelLevel)
registersymbol(bkpTargetFuelLevel)

[DISABLE]

codeTargetFuelLevel:
  readmem(bkpTargetFuelLevel,5)

unregistersymbol(*)
dealloc(memTargetFuelLevel)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.CompRefuelable:get_TargetFuelLevel+e1

RimWorld.CompRefuelable:get_TargetFuelLevel+b8: 4D 85 FF                       - test r15,r15
RimWorld.CompRefuelable:get_TargetFuelLevel+bb: 74 21                          - je RimWorld.CompRefuelable:get_TargetFuelLevel+de
RimWorld.CompRefuelable:get_TargetFuelLevel+bd: 49 8B 07                       - mov rax,[r15]
RimWorld.CompRefuelable:get_TargetFuelLevel+c0: 48 8B 00                       - mov rax,[rax]
RimWorld.CompRefuelable:get_TargetFuelLevel+c3: 48 8B 40 10                    - mov rax,[rax+10]
RimWorld.CompRefuelable:get_TargetFuelLevel+c7: 48 8B 40 10                    - mov rax,[rax+10]
RimWorld.CompRefuelable:get_TargetFuelLevel+cb: 48 B9 08 B7 51 54 F2 01 00 00  - mov rcx,000001F25451B708
RimWorld.CompRefuelable:get_TargetFuelLevel+d5: 48 3B C1                       - cmp rax,rcx
RimWorld.CompRefuelable:get_TargetFuelLevel+d8: 0F 85 23 00 00 00              - jne RimWorld.CompRefuelable:get_TargetFuelLevel+101
RimWorld.CompRefuelable:get_TargetFuelLevel+de: 49 8B C7                       - mov rax,r15
// ---------- INJECTING HERE ----------
RimWorld.CompRefuelable:get_TargetFuelLevel+e1: F3 0F 10 40 4C                 - movss xmm0,[rax+4C]
// ---------- DONE INJECTING  ----------
RimWorld.CompRefuelable:get_TargetFuelLevel+e6: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.CompRefuelable:get_TargetFuelLevel+ea: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
RimWorld.CompRefuelable:get_TargetFuelLevel+ee: 48 8B 34 24                    - mov rsi,[rsp]
RimWorld.CompRefuelable:get_TargetFuelLevel+f2: 48 8B 7C 24 08                 - mov rdi,[rsp+08]
RimWorld.CompRefuelable:get_TargetFuelLevel+f7: 4C 8B 7C 24 10                 - mov r15,[rsp+10]
RimWorld.CompRefuelable:get_TargetFuelLevel+fc: 48 83 C4 18                    - add rsp,18
RimWorld.CompRefuelable:get_TargetFuelLevel+100: C3                             - ret
RimWorld.CompRefuelable:get_TargetFuelLevel+101: BA 43 00 00 00                 - mov edx,00000043
RimWorld.CompRefuelable:get_TargetFuelLevel+106: B9 92 01 00 00                 - mov ecx,00000192
RimWorld.CompRefuelable:get_TargetFuelLevel+10b: 66 66 90                       - nop 3
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196672</ID>
              <Description>"Transport pod unlimited capacity"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeZeroMassUsage, RimWorld.Dialog_LoadTransporters:get_MassUsage, F3 0F 10 86 14 01 00 00)
alloc(memZeroMassUsage,$1000,codeZeroMassUsage)
label(return)

memZeroMassUsage:
  mov [rsi+00000114],(float)0.0 // zero 'RimWorld.Dialog_LoadTransporters.cachedMassUsage'
  movss xmm0,[rsi+00000114]
  jmp return

bkpZeroMassUsage:
  readmem(codeZeroMassUsage,8)

codeZeroMassUsage:
  jmp memZeroMassUsage
  nop 3

return:

registersymbol(codeZeroMassUsage)
registersymbol(memZeroMassUsage)
registersymbol(bkpZeroMassUsage)

[DISABLE]

codeZeroMassUsage:
  readmem(bkpZeroMassUsage,8)

unregistersymbol(*)
dealloc(memZeroMassUsage)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.Dialog_LoadTransporters:get_MassUsage+df

RimWorld.Dialog_LoadTransporters:get_MassUsage+af: 48 63 55 C8                    - movsxd  rdx,dword ptr [rbp-38]
RimWorld.Dialog_LoadTransporters:get_MassUsage+b3: 4C 63 45 C0                    - movsxd  r8,dword ptr [rbp-40]
RimWorld.Dialog_LoadTransporters:get_MassUsage+b7: 45 33 C9                       - xor r9d,r9d
RimWorld.Dialog_LoadTransporters:get_MassUsage+ba: 48 8D 6D 00                    - lea rbp,[rbp+00]
RimWorld.Dialog_LoadTransporters:get_MassUsage+be: 49 BB 46 AE E6 5D F1 01 00 00  - mov r11,000001F15DE6AE46
RimWorld.Dialog_LoadTransporters:get_MassUsage+c8: 41 FF D3                       - call r11
RimWorld.Dialog_LoadTransporters:get_MassUsage+cb: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.Dialog_LoadTransporters:get_MassUsage+cf: 48 8B 45 D8                    - mov rax,[rbp-28]
RimWorld.Dialog_LoadTransporters:get_MassUsage+d3: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
RimWorld.Dialog_LoadTransporters:get_MassUsage+d7: F3 0F 11 A8 14 01 00 00        - movss [rax+00000114],xmm5
// ---------- INJECTING HERE ----------
RimWorld.Dialog_LoadTransporters:get_MassUsage+df: F3 0F 10 86 14 01 00 00        - movss xmm0,[rsi+00000114]
// ---------- DONE INJECTING  ----------
RimWorld.Dialog_LoadTransporters:get_MassUsage+e7: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.Dialog_LoadTransporters:get_MassUsage+eb: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
RimWorld.Dialog_LoadTransporters:get_MassUsage+ef: 48 8B 75 E0                    - mov rsi,[rbp-20]
RimWorld.Dialog_LoadTransporters:get_MassUsage+f3: 48 8B 7D E8                    - mov rdi,[rbp-18]
RimWorld.Dialog_LoadTransporters:get_MassUsage+f7: 4C 8B 75 F0                    - mov r14,[rbp-10]
RimWorld.Dialog_LoadTransporters:get_MassUsage+fb: 4C 8B 7D F8                    - mov r15,[rbp-08]
RimWorld.Dialog_LoadTransporters:get_MassUsage+ff: 48 8D 65 00                    - lea rsp,[rbp+00]
RimWorld.Dialog_LoadTransporters:get_MassUsage+103: 5D                             - pop rbp
RimWorld.Dialog_LoadTransporters:get_MassUsage+104: C3                             - ret
RimWorld.Dialog_LoadTransporters:get_MassUsage+105: 90                             - nop
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196702</ID>
              <Description>"Unlimited power"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeCurrentEnergyGainRate, RimWorld.PowerNet:CurrentEnergyGainRate, 0F B6 00 85 C0 74 15)
alloc(bkpCurrentEnergyGainRate,7,codeCurrentEnergyGainRate)

bkpCurrentEnergyGainRate:
  readmem(codeCurrentEnergyGainRate,7)

codeCurrentEnergyGainRate:
  nop 7

registersymbol(codeCurrentEnergyGainRate)
registersymbol(bkpCurrentEnergyGainRate)

[DISABLE]

codeCurrentEnergyGainRate:
  readmem(bkpCurrentEnergyGainRate,7)

unregistersymbol(*)
dealloc(bkpCurrentEnergyGainRate)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.PowerNet:CurrentEnergyGainRate+2d

RimWorld.PowerNet:CurrentEnergyGainRate+1: 48 8B EC                       - mov rbp,rsp
RimWorld.PowerNet:CurrentEnergyGainRate+4: 48 83 EC 70                    - sub rsp,70
RimWorld.PowerNet:CurrentEnergyGainRate+8: 48 89 75 D0                    - mov [rbp-30],rsi
RimWorld.PowerNet:CurrentEnergyGainRate+c: 48 89 7D D8                    - mov [rbp-28],rdi
RimWorld.PowerNet:CurrentEnergyGainRate+10: 4C 89 65 E0                    - mov [rbp-20],r12
RimWorld.PowerNet:CurrentEnergyGainRate+14: 4C 89 6D E8                    - mov [rbp-18],r13
RimWorld.PowerNet:CurrentEnergyGainRate+18: 4C 89 75 F0                    - mov [rbp-10],r14
RimWorld.PowerNet:CurrentEnergyGainRate+1c: 4C 89 7D F8                    - mov [rbp-08],r15
RimWorld.PowerNet:CurrentEnergyGainRate+20: 48 8B F1                       - mov rsi,rcx
RimWorld.PowerNet:CurrentEnergyGainRate+23: 48 B8 B8 A6 86 89 62 01 00 00  - mov rax,000001628986A6B8
// ---------- INJECTING HERE ----------
RimWorld.PowerNet:CurrentEnergyGainRate+2d: 0F B6 00                       - movzx eax,byte ptr [rax]
RimWorld.PowerNet:CurrentEnergyGainRate+30: 85 C0                          - test eax,eax
RimWorld.PowerNet:CurrentEnergyGainRate+32: 74 15                          - je RimWorld.PowerNet:CurrentEnergyGainRate+49
// ---------- DONE INJECTING  ----------
RimWorld.PowerNet:CurrentEnergyGainRate+34: F3 0F 10 05 64 01 00 00        - movss xmm0,[RimWorld.PowerNet:CurrentEnergyGainRate+1a0]
RimWorld.PowerNet:CurrentEnergyGainRate+3c: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.PowerNet:CurrentEnergyGainRate+40: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
RimWorld.PowerNet:CurrentEnergyGainRate+44: E9 0F 01 00 00                 - jmp RimWorld.PowerNet:CurrentEnergyGainRate+158
RimWorld.PowerNet:CurrentEnergyGainRate+49: 66 0F 57 C0                    - xorpd xmm0,xmm0
RimWorld.PowerNet:CurrentEnergyGainRate+4d: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
RimWorld.PowerNet:CurrentEnergyGainRate+51: F3 0F 11 6D CC                 - movss [rbp-34],xmm5
RimWorld.PowerNet:CurrentEnergyGainRate+56: 33 FF                          - xor edi,edi
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196713</ID>
              <Description>"No deterioration"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeCanEverDeteriorate, Verse.ThingDef:get_CanEverDeteriorate, 75 04 33 C0 EB 31)
alloc(bkpCanEverDeteriorate,2,codeCanEverDeteriorate)

bkpCanEverDeteriorate:
  readmem(codeCanEverDeteriorate,2)

codeCanEverDeteriorate:
  nop 2

registersymbol(codeCanEverDeteriorate)
registersymbol(bkpCanEverDeteriorate)

[DISABLE]

codeCanEverDeteriorate:
  readmem(bkpCanEverDeteriorate,2)

unregistersymbol(*)
dealloc(bkpCanEverDeteriorate)


{
// ORIGINAL CODE - INJECTION POINT: Verse.ThingDef:get_CanEverDeteriorate+14

25D2A614ED7: 00 00                 - add [rax],al
25D2A614ED9: 00 00                 - add [rax],al
25D2A614EDB: 00 00                 - add [rax],al
25D2A614EDD: 00 00                 - add [rax],al
25D2A614EDF: 00 48 83              - add [rax-7D],cl
Verse.ThingDef:get_CanEverDeteriorate+2: EC                    - in al,dx
Verse.ThingDef:get_CanEverDeteriorate+3: 08 48 89              - or [rax-77],cl
Verse.ThingDef:get_CanEverDeteriorate+6: 34 24                 - xor al,24
Verse.ThingDef:get_CanEverDeteriorate+8: 48 8B F1              - mov rsi,rcx
Verse.ThingDef:get_CanEverDeteriorate+b: 0F B6 86 9B 03 00 00  - movzx eax,byte ptr [rsi+0000039B]
Verse.ThingDef:get_CanEverDeteriorate+12: 85 C0                 - test eax,eax
// ---------- INJECTING HERE ----------
Verse.ThingDef:get_CanEverDeteriorate+14: 75 04                 - jne Verse.ThingDef:get_CanEverDeteriorate+1a
// ---------- DONE INJECTING  ----------
Verse.ThingDef:get_CanEverDeteriorate+16: 33 C0                 - xor eax,eax
Verse.ThingDef:get_CanEverDeteriorate+18: EB 31                 - jmp Verse.ThingDef:get_CanEverDeteriorate+4b
Verse.ThingDef:get_CanEverDeteriorate+1a: 0F B6 86 88 03 00 00  - movzx eax,byte ptr [rsi+00000388]
Verse.ThingDef:get_CanEverDeteriorate+21: 83 F8 02              - cmp eax,02
Verse.ThingDef:get_CanEverDeteriorate+24: 74 20                 - je Verse.ThingDef:get_CanEverDeteriorate+46
Verse.ThingDef:get_CanEverDeteriorate+26: 48 8B 86 28 03 00 00  - mov rax,[rsi+00000328]
Verse.ThingDef:get_CanEverDeteriorate+2d: 48 85 C0              - test rax,rax
Verse.ThingDef:get_CanEverDeteriorate+30: 74 10                 - je Verse.ThingDef:get_CanEverDeteriorate+42
Verse.ThingDef:get_CanEverDeteriorate+32: 48 8B 86 28 03 00 00  - mov rax,[rsi+00000328]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196714</ID>
              <Description>"No rot"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeCompRottableActive, RimWorld.CompRottable:get_Active, B8 01 00 00 00)
alloc(bkpCompRottableActive,5,codeCompRottableActive)

bkpCompRottableActive:
  readmem(codeCompRottableActive,5)

codeCompRottableActive:
  nop 5

registersymbol(codeCompRottableActive)
registersymbol(bkpCompRottableActive)

[DISABLE]

codeCompRottableActive:
  readmem(bkpCompRottableActive,5)

unregistersymbol(*)
dealloc(bkpCompRottableActive)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.CompRottable:get_Active+93

RimWorld.CompRottable:get_Active+71: 74 20                          - je RimWorld.CompRottable:get_Active+93
RimWorld.CompRottable:get_Active+73: 48 8B CF                       - mov rcx,rdi
RimWorld.CompRottable:get_Active+76: 83 3F 00                       - cmp dword ptr [rdi],00
RimWorld.CompRottable:get_Active+79: 48 8D 64 24 00                 - lea rsp,[rsp+00]
RimWorld.CompRottable:get_Active+7e: 49 BB 81 E6 E4 55 5D 02 00 00  - mov r11,0000025D55E4E681
RimWorld.CompRottable:get_Active+88: 41 FF D3                       - call r11
RimWorld.CompRottable:get_Active+8b: 85 C0                          - test eax,eax
RimWorld.CompRottable:get_Active+8d: 75 04                          - jne RimWorld.CompRottable:get_Active+93
RimWorld.CompRottable:get_Active+8f: 33 C0                          - xor eax,eax
RimWorld.CompRottable:get_Active+91: EB 05                          - jmp RimWorld.CompRottable:get_Active+98
// ---------- INJECTING HERE ----------
RimWorld.CompRottable:get_Active+93: B8 01 00 00 00                 - mov eax,00000001
// ---------- DONE INJECTING  ----------
RimWorld.CompRottable:get_Active+98: 48 8B 75 E8                    - mov rsi,[rbp-18]
RimWorld.CompRottable:get_Active+9c: 48 8B 7D F0                    - mov rdi,[rbp-10]
RimWorld.CompRottable:get_Active+a0: 4C 8B 7D F8                    - mov r15,[rbp-08]
RimWorld.CompRottable:get_Active+a4: 48 8D 65 00                    - lea rsp,[rbp+00]
RimWorld.CompRottable:get_Active+a8: 5D                             - pop rbp
RimWorld.CompRottable:get_Active+a9: C3                             - ret
RimWorld.CompRottable:get_Active+aa: BA 88 00 00 00                 - mov edx,00000088
RimWorld.CompRottable:get_Active+af: B9 92 01 00 00                 - mov ecx,00000192
RimWorld.CompRottable:get_Active+b4: 66 90                          - nop 2
RimWorld.CompRottable:get_Active+b6: 49 BB D0 20 39 48 5B 02 00 00  - mov r11,0000025B483920D0
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196703</ID>
              <Description>"Guaranteed tame"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeTameAnimalChance, RimWorld.InteractionWorker_RecruitAttempt:Interacted, 0F 84 D5 02 00 00 48 C7)
alloc(bkpTameAnimalChance,6,codeTameAnimalChance)

bkpTameAnimalChance:
  readmem(codeTameAnimalChance,6)

codeTameAnimalChance:
  nop 6

registersymbol(codeTameAnimalChance)
registersymbol(bkpTameAnimalChance)

[DISABLE]

codeTameAnimalChance:
  readmem(bkpTameAnimalChance,6)

unregistersymbol(*)
dealloc(bkpTameAnimalChance)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.InteractionWorker_RecruitAttempt:Interacted+46d

RimWorld.InteractionWorker_RecruitAttempt:Interacted+437: F2 0F 59 C1                    - mulsd xmm0,xmm1
RimWorld.InteractionWorker_RecruitAttempt:Interacted+43b: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
RimWorld.InteractionWorker_RecruitAttempt:Interacted+43f: F3 0F 11 AD 9C FB FF FF        - movss [rbp-00000464],xmm5
RimWorld.InteractionWorker_RecruitAttempt:Interacted+447: F3 0F 10 85 9C FB FF FF        - movss xmm0,[rbp-00000464]
RimWorld.InteractionWorker_RecruitAttempt:Interacted+44f: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.InteractionWorker_RecruitAttempt:Interacted+453: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
RimWorld.InteractionWorker_RecruitAttempt:Interacted+457: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
RimWorld.InteractionWorker_RecruitAttempt:Interacted+45e: 49 BB 40 88 D6 F7 62 01 00 00  - mov r11,Verse.Rand:Chance
RimWorld.InteractionWorker_RecruitAttempt:Interacted+468: 41 FF D3                       - call r11
RimWorld.InteractionWorker_RecruitAttempt:Interacted+46b: 85 C0                          - test eax,eax
// ---------- INJECTING HERE ----------
RimWorld.InteractionWorker_RecruitAttempt:Interacted+46d: 0F 84 D5 02 00 00              - je RimWorld.InteractionWorker_RecruitAttempt:Interacted+748
// ---------- DONE INJECTING  ----------
RimWorld.InteractionWorker_RecruitAttempt:Interacted+473: 48 C7 44 24 20 01 00 00 00     - mov qword ptr [rsp+20],00000001
RimWorld.InteractionWorker_RecruitAttempt:Interacted+47c: 48 C7 44 24 28 00 00 00 00     - mov qword ptr [rsp+28],00000000
RimWorld.InteractionWorker_RecruitAttempt:Interacted+485: 48 8B CB                       - mov rcx,rbx
RimWorld.InteractionWorker_RecruitAttempt:Interacted+488: 49 8B D4                       - mov rdx,r12
RimWorld.InteractionWorker_RecruitAttempt:Interacted+48b: 4D 8B C7                       - mov r8,r15
RimWorld.InteractionWorker_RecruitAttempt:Interacted+48e: 4D 8B CE                       - mov r9,r14
RimWorld.InteractionWorker_RecruitAttempt:Interacted+491: 48 8D 64 24 00                 - lea rsp,[rsp+00]
RimWorld.InteractionWorker_RecruitAttempt:Interacted+496: 49 BB 36 DF 89 20 63 01 00 00  - mov r11,000001632089DF36
RimWorld.InteractionWorker_RecruitAttempt:Interacted+4a0: 41 FF D3                       - call r11
RimWorld.InteractionWorker_RecruitAttempt:Interacted+4a3: 49 8B 07                       - mov rax,[r15]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196058</ID>
              <Description>"Edit selected thing"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeThingGetLabel, Verse.Thing:GetInspectString, 55 48 8B EC 48 83 EC 40)
alloc(memThingGetLabel,$1000, codeThingGetLabel)
label(return)

memThingGetLabel:
  mov [ptrThing],rcx
  push rbp
  mov rbp,rsp
  sub rsp,40
  jmp return

bkpThingGetLabel:
  readmem(codeThingGetLabel,8)

ptrThing:
  dq 0

codeThingGetLabel:
  jmp memThingGetLabel
  nop 3

return:

registersymbol(codeThingGetLabel)
registersymbol(memThingGetLabel)
registersymbol(bkpThingGetLabel)
registersymbol(ptrThing)

[DISABLE]

codeThingGetLabel:
  readmem(bkpThingGetLabel,8)

unregistersymbol(*)
dealloc(memThingGetLabel)


{
// ORIGINAL CODE - INJECTION POINT: Verse.Thing:GetInspectString

1AB174D520D: 00 00                          - add [rax],al
1AB174D520F: 00 00                          - add [rax],al
1AB174D5211: 00 00                          - add [rax],al
1AB174D5213: 00 00                          - add [rax],al
1AB174D5215: 00 00                          - add [rax],al
1AB174D5217: 00 00                          - add [rax],al
1AB174D5219: 00 00                          - add [rax],al
1AB174D521B: 00 00                          - add [rax],al
1AB174D521D: 00 00                          - add [rax],al
1AB174D521F: 00                             - db 00
// ---------- INJECTING HERE ----------
Verse.Thing:GetInspectString: 55                             - push rbp
// ---------- DONE INJECTING  ----------
Verse.Thing:GetInspectString+1: 48 8B EC                       - mov rbp,rsp
Verse.Thing:GetInspectString+4: 48 83 EC 40                    - sub rsp,40
Verse.Thing:GetInspectString+8: 48 89 4D F0                    - mov [rbp-10],rcx
Verse.Thing:GetInspectString+c: 48 B9 A8 4B D3 4C AA 01 00 00  - mov rcx,000001AA4CD34BA8
Verse.Thing:GetInspectString+16: 49 BB 10 10 34 A7 A8 01 00 00  - mov r11,System.Object:__icall_wrapper_ves_icall_object_new_specific
Verse.Thing:GetInspectString+20: 41 FF D3                       - call r11
Verse.Thing:GetInspectString+23: 48 89 45 E0                    - mov [rbp-20],rax
Verse.Thing:GetInspectString+27: 48 8B C8                       - mov rcx,rax
Verse.Thing:GetInspectString+2a: 48 8D 6D 00                    - lea rbp,[rbp+00]
Verse.Thing:GetInspectString+2e: 49 BB 80 B3 3A 51 AA 01 00 00  - mov r11,System.Text.StringBuilder:.ctor
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196059</ID>
                  <Description>"[Thing]"</Description>
                  <Options moHideChildren="1"/>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>800080</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>ptrThing</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>1337196061</ID>
                      <Description>"hitPointsInt"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+64</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196062</ID>
                      <Description>"stackCount"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+60</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196614</ID>
                      <Description>"[def]"</Description>
                      <Options moHideChildren="1"/>
                      <ShowAsHex>1</ShowAsHex>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>800080</Color>
                      <GroupHeader>1</GroupHeader>
                      <Address>+10</Address>
                      <Offsets>
                        <Offset>0</Offset>
                      </Offsets>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>1337196615</ID>
                          <Description>"defName"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>String</VariableType>
                          <Length>128</Length>
                          <Unicode>1</Unicode>
                          <CodePage>0</CodePage>
                          <ZeroTerminate>1</ZeroTerminate>
                          <Address>+10</Address>
                          <Offsets>
                            <Offset>14</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>1337196065</ID>
                          <Description>"label"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>String</VariableType>
                          <Length>128</Length>
                          <Unicode>1</Unicode>
                          <CodePage>0</CodePage>
                          <ZeroTerminate>1</ZeroTerminate>
                          <Address>+18</Address>
                          <Offsets>
                            <Offset>14</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>1337196632</ID>
                          <Description>"stackLimit"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>+38C</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196707</ID>
                      <Description>"[nameInt]"</Description>
                      <Options moHideChildren="1"/>
                      <ShowAsHex>1</ShowAsHex>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>800080</Color>
                      <GroupHeader>1</GroupHeader>
                      <Address>+80</Address>
                      <Offsets>
                        <Offset>0</Offset>
                      </Offsets>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>1337196708</ID>
                          <Description>"First"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>String</VariableType>
                          <Length>128</Length>
                          <Unicode>1</Unicode>
                          <CodePage>0</CodePage>
                          <ZeroTerminate>1</ZeroTerminate>
                          <Address>+10</Address>
                          <Offsets>
                            <Offset>14</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>1337196709</ID>
                          <Description>"Nick"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>String</VariableType>
                          <Length>128</Length>
                          <Unicode>1</Unicode>
                          <CodePage>0</CodePage>
                          <ZeroTerminate>1</ZeroTerminate>
                          <Address>+18</Address>
                          <Offsets>
                            <Offset>14</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>1337196710</ID>
                          <Description>"Last"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>String</VariableType>
                          <Length>128</Length>
                          <Unicode>1</Unicode>
                          <CodePage>0</CodePage>
                          <ZeroTerminate>1</ZeroTerminate>
                          <Address>+20</Address>
                          <Offsets>
                            <Offset>14</Offset>
                          </Offsets>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196705</ID>
                      <Description>"[ageTracker]"</Description>
                      <Options moHideChildren="1"/>
                      <ShowAsHex>1</ShowAsHex>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>800080</Color>
                      <GroupHeader>1</GroupHeader>
                      <Address>+88</Address>
                      <Offsets>
                        <Offset>0</Offset>
                      </Offsets>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>1337196706</ID>
                          <Description>"ageBiologicalTicksInt"</Description>
                          <DropDownList DisplayValueAsItem="1">72000000:20 years
90000000:25 years
360000000:100 years
</DropDownList>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>+18</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196711</ID>
                      <Description>"[guest]"</Description>
                      <Options moHideChildren="1"/>
                      <ShowAsHex>1</ShowAsHex>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>800080</Color>
                      <GroupHeader>1</GroupHeader>
                      <Address>+140</Address>
                      <Offsets>
                        <Offset>0</Offset>
                      </Offsets>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>1337196712</ID>
                          <Description>"resistance"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>Float</VariableType>
                          <Address>+80</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196611</ID>
              <Description>"Edit selected thing quality"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeTryGetQuality, RimWorld.QualityUtility:TryGetQuality, 41 0F B6 46 20)
alloc(memTryGetQuality,$1000,codeTryGetQuality)
label(return)

memTryGetQuality:
  mov [ptrTryGetQuality],r14
  movzx eax,byte ptr [r14+20]
  jmp return
ptrTryGetQuality:
  dq 0

bkpTryGetQuality:
  readmem(codeTryGetQuality,5)

codeTryGetQuality:
  jmp memTryGetQuality

return:

registersymbol(codeTryGetQuality)
registersymbol(memTryGetQuality)
registersymbol(bkpTryGetQuality)
registersymbol(ptrTryGetQuality)

[DISABLE]

codeTryGetQuality:
  readmem(bkpTryGetQuality,5)

unregistersymbol(*)
dealloc(memTryGetQuality)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.QualityUtility:TryGetQuality+c9

RimWorld.QualityUtility:TryGetQuality+a6: 49 BB 1E DF 9A 7A 7C 02 00 00  - mov r11,0000027C7A9ADF1E
RimWorld.QualityUtility:TryGetQuality+b0: 41 FF D3                       - call r11
RimWorld.QualityUtility:TryGetQuality+b3: 4C 8B F8                       - mov r15,rax
RimWorld.QualityUtility:TryGetQuality+b6: 4D 8B F7                       - mov r14,r15
RimWorld.QualityUtility:TryGetQuality+b9: 4D 85 FF                       - test r15,r15
RimWorld.QualityUtility:TryGetQuality+bc: 75 07                          - jne RimWorld.QualityUtility:TryGetQuality+c5
RimWorld.QualityUtility:TryGetQuality+be: C6 06 02                       - mov byte ptr [rsi],02
RimWorld.QualityUtility:TryGetQuality+c1: 33 C0                          - xor eax,eax
RimWorld.QualityUtility:TryGetQuality+c3: EB 11                          - jmp RimWorld.QualityUtility:TryGetQuality+d6
RimWorld.QualityUtility:TryGetQuality+c5: 41 83 3E 00                    - cmp dword ptr [r14],00
// ---------- INJECTING HERE ----------
RimWorld.QualityUtility:TryGetQuality+c9: 41 0F B6 46 20                 - movzx eax,byte ptr [r14+20]
// ---------- DONE INJECTING  ----------
RimWorld.QualityUtility:TryGetQuality+ce: 40 88 06                       - mov [rsi],al
RimWorld.QualityUtility:TryGetQuality+d1: B8 01 00 00 00                 - mov eax,00000001
RimWorld.QualityUtility:TryGetQuality+d6: 48 8B 75 D8                    - mov rsi,[rbp-28]
RimWorld.QualityUtility:TryGetQuality+da: 48 8B 7D E0                    - mov rdi,[rbp-20]
RimWorld.QualityUtility:TryGetQuality+de: 4C 8B 6D E8                    - mov r13,[rbp-18]
RimWorld.QualityUtility:TryGetQuality+e2: 4C 8B 75 F0                    - mov r14,[rbp-10]
RimWorld.QualityUtility:TryGetQuality+e6: 4C 8B 7D F8                    - mov r15,[rbp-08]
RimWorld.QualityUtility:TryGetQuality+ea: 48 8D 65 00                    - lea rsp,[rbp+00]
RimWorld.QualityUtility:TryGetQuality+ee: 5D                             - pop rbp
RimWorld.QualityUtility:TryGetQuality+ef: C3                             - ret
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196612</ID>
                  <Description>"QualityInt"</Description>
                  <DropDownList DisplayValueAsItem="1">0:Awful
1:Poor
2:Normal
3:Good
4:Excellent
5:Masterwork
6:Legendary
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>ptrTryGetQuality</Address>
                  <Offsets>
                    <Offset>20</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196610</ID>
              <Description>"Nonrandom medical tend quality"</Description>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeCompTended, Verse.HediffComp_TendDuration:CompTended, F3 0F 10 05 E8 04 00 00)
alloc(memCompTended,$1000,codeCompTended)
label(return)

memCompTended:
  // tendQuality = Mathf.Clamp(quality + Rand.Range(-0.25f, 0.25f), 0f, maxQuality);
  movss xmm0,[Verse.HediffComp_TendDuration:CompTended+530] // updates the minimum of tend quality factor (-0.25f)
  jmp return

bkpCompTended:
  readmem(codeCompTended,8)

codeCompTended:
  jmp memCompTended
  nop 3

return:

registersymbol(codeCompTended)
registersymbol(memCompTended)
registersymbol(bkpCompTended)

[DISABLE]

codeCompTended:
  readmem(bkpCompTended,8)

unregistersymbol(*)
dealloc(memCompTended)


{
// ORIGINAL CODE - INJECTION POINT: Verse.HediffComp_TendDuration:CompTended+50

Verse.HediffComp_TendDuration:CompTended+f: 48 89 7D F0                       - mov [rbp-10],rdi
Verse.HediffComp_TendDuration:CompTended+13: 4C 89 75 F8                       - mov [rbp-08],r14
Verse.HediffComp_TendDuration:CompTended+17: 48 8B F9                          - mov rdi,rcx
Verse.HediffComp_TendDuration:CompTended+1a: F3 0F 11 8D F8 FE FF FF           - movss [rbp-00000108],xmm1
Verse.HediffComp_TendDuration:CompTended+22: F3 0F 11 95 F0 FE FF FF           - movss [rbp-00000110],xmm2
Verse.HediffComp_TendDuration:CompTended+2a: 4C 89 8D E8 FE FF FF              - mov [rbp-00000118],r9
Verse.HediffComp_TendDuration:CompTended+31: 48 C7 85 18 FF FF FF 00 00 00 00  - mov qword ptr [rbp-000000E8],00000000
Verse.HediffComp_TendDuration:CompTended+3c: F3 0F 10 85 F8 FE FF FF           - movss xmm0,[rbp-00000108]
Verse.HediffComp_TendDuration:CompTended+44: F3 0F 5A C0                       - cvtss2sd xmm0,xmm0
Verse.HediffComp_TendDuration:CompTended+48: F2 0F 11 85 E0 FE FF FF           - movsd [rbp-00000120],xmm0
// ---------- INJECTING HERE ----------
Verse.HediffComp_TendDuration:CompTended+50: F3 0F 10 05 E8 04 00 00           - movss xmm0,[Verse.HediffComp_TendDuration:CompTended+540]
// ---------- DONE INJECTING  ----------
Verse.HediffComp_TendDuration:CompTended+58: F3 0F 5A C0                       - cvtss2sd xmm0,xmm0
Verse.HediffComp_TendDuration:CompTended+5c: F3 0F 10 0D CC 04 00 00           - movss xmm1,[Verse.HediffComp_TendDuration:CompTended+530]
Verse.HediffComp_TendDuration:CompTended+64: F3 0F 5A C9                       - cvtss2sd xmm1,xmm1
Verse.HediffComp_TendDuration:CompTended+68: F2 0F 5A C9                       - cvtsd2ss xmm1,xmm1
Verse.HediffComp_TendDuration:CompTended+6c: F2 0F 5A C0                       - cvtsd2ss xmm0,xmm0
Verse.HediffComp_TendDuration:CompTended+70: 48 8D 64 24 00                    - lea rsp,[rsp+00]
Verse.HediffComp_TendDuration:CompTended+75: 90                                - nop
Verse.HediffComp_TendDuration:CompTended+76: 49 BB 90 52 61 9E 7C 02 00 00     - mov r11,Verse.Rand:Range
Verse.HediffComp_TendDuration:CompTended+80: 41 FF D3                          - call r11
Verse.HediffComp_TendDuration:CompTended+83: F3 0F 5A C8                       - cvtss2sd xmm1,xmm0
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196613</ID>
              <Description>"New things are always legendary"</Description>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeSetQuality, RimWorld.CompQuality:SetQuality, 0F B6 45 F0 41 88 47 20)
alloc(memSetQuality,$1000,codeSetQuality)
label(return)
label(skip)

memSetQuality:
  cmp r8,0 // RimWorld.ArtGenerationContext; 0- Outsider, 1- Colony
  je skip
  mov byte ptr [rbp-10],6 // set Quality to legendary
skip:
  movzx eax,byte ptr [rbp-10]
  mov [r15+20],al
  jmp return

bkpSetQuality:
  readmem(codeSetQuality,8)

codeSetQuality:
  jmp memSetQuality
  nop 3

return:

registersymbol(codeSetQuality)
registersymbol(memSetQuality)
registersymbol(bkpSetQuality)

[DISABLE]

codeSetQuality:
  readmem(bkpSetQuality,8)

unregistersymbol(*)
dealloc(memSetQuality)


{
// ORIGINAL CODE - INJECTION POINT: RimWorld.CompQuality:SetQuality+17

27A47FFD01B: 00 00                          - add [rax],al
27A47FFD01D: 00 00                          - add [rax],al
27A47FFD01F: 00 55 48                       - add [rbp+48],dl
RimWorld.CompQuality:SetQuality+2: 8B EC                          - mov ebp,esp
RimWorld.CompQuality:SetQuality+4: 48 83 EC 40                    - sub rsp,40
RimWorld.CompQuality:SetQuality+8: 4C 89 7D F8                    - mov [rbp-08],r15
RimWorld.CompQuality:SetQuality+c: 4C 8B F9                       - mov r15,rcx
RimWorld.CompQuality:SetQuality+f: 48 89 55 F0                    - mov [rbp-10],rdx
RimWorld.CompQuality:SetQuality+13: 4C 89 45 E8                    - mov [rbp-18],r8
// ---------- INJECTING HERE ----------
RimWorld.CompQuality:SetQuality+17: 0F B6 45 F0                    - movzx eax,byte ptr [rbp-10]
RimWorld.CompQuality:SetQuality+1b: 41 88 47 20                    - mov [r15+20],al
// ---------- DONE INJECTING  ----------
RimWorld.CompQuality:SetQuality+1f: 49 8B 4F 10                    - mov rcx,[r15+10]
RimWorld.CompQuality:SetQuality+23: 49 BA 88 7E 91 AD 7C 02 00 00  - mov r10,0000027CAD917E88
RimWorld.CompQuality:SetQuality+2d: 90                             - nop
RimWorld.CompQuality:SetQuality+2e: 49 BB D0 85 9A 7A 7C 02 00 00  - mov r11,Verse.ThingCompUtility:TryGetComp
RimWorld.CompQuality:SetQuality+38: 41 FF D3                       - call r11
RimWorld.CompQuality:SetQuality+3b: 4C 8B F8                       - mov r15,rax
RimWorld.CompQuality:SetQuality+3e: 48 85 C0                       - test rax,rax
RimWorld.CompQuality:SetQuality+41: 74 18                          - je RimWorld.CompQuality:SetQuality+5b
RimWorld.CompQuality:SetQuality+43: 49 8B CF                       - mov rcx,r15
RimWorld.CompQuality:SetQuality+46: 0F B6 55 E8                    - movzx edx,byte ptr [rbp-18]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196673</ID>
              <Description>"Edit wealth"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeWealthWatcher, RimWorld.WealthWatcher:get_WealthTotal, F3 0F 10 46 20)
alloc(memWealthWatcher,$1000,codeWealthWatcher)
label(return)
label(ptrWealthWatcher)
label(bZeroWealth)
label(skip)

memWealthWatcher:
  mov [ptrWealthWatcher],rsi
  cmp byte ptr [bZeroWealth],0
  je skip
  mov [rsi+20],(float)0.0 // WealthItems
  mov [rsi+24],(float)0.0 // WealthBuildings
  mov [rsi+28],(float)0.0 // WealthPawns
  mov [rsi+2C],(float)0.0 // WealthFloorsOnly
skip:
  movss xmm0,[rsi+20]
  jmp return

bZeroWealth:
  db 0

ptrWealthWatcher:
  dq 0

bkpWealthWatcher:
  readmem(codeWealthWatcher,5)

codeWealthWatcher:
  jmp memWealthWatcher

return:

registersymbol(ptrWealthWatcher)
registersymbol(bZeroWealth)
registersymbol(codeWealthWatcher)
registersymbol(memWealthWatcher)
registersymbol(bkpWealthWatcher)

[DISABLE]

codeWealthWatcher:
  readmem(bkpWealthWatcher,5)

unregistersymbol(*)
dealloc(memWealthWatcher)

{
// ORIGINAL CODE - INJECTION POINT: RimWorld.WealthWatcher:get_WealthTotal+23

1CB5BB8406C: 00 00                          - add [rax],al
1CB5BB8406E: 00 00                          - add [rax],al
RimWorld.WealthWatcher:get_WealthTotal: 55                             - push rbp
RimWorld.WealthWatcher:get_WealthTotal+1: 48 8B EC                       - mov rbp,rsp
RimWorld.WealthWatcher:get_WealthTotal+4: 48 83 EC 30                    - sub rsp,30
RimWorld.WealthWatcher:get_WealthTotal+8: 48 89 75 F8                    - mov [rbp-08],rsi
RimWorld.WealthWatcher:get_WealthTotal+c: 48 8B F1                       - mov rsi,rcx
RimWorld.WealthWatcher:get_WealthTotal+f: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
RimWorld.WealthWatcher:get_WealthTotal+16: 49 BB 00 41 B8 5B CB 01 00 00  - mov r11,RimWorld.WealthWatcher:RecountIfNeeded
RimWorld.WealthWatcher:get_WealthTotal+20: 41 FF D3                       - call r11
// ---------- INJECTING HERE ----------
RimWorld.WealthWatcher:get_WealthTotal+23: F3 0F 10 46 20                 - movss xmm0,[rsi+20]
// ---------- DONE INJECTING  ----------
RimWorld.WealthWatcher:get_WealthTotal+28: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
RimWorld.WealthWatcher:get_WealthTotal+2c: F3 0F 10 4E 24                 - movss xmm1,[rsi+24]
RimWorld.WealthWatcher:get_WealthTotal+31: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
RimWorld.WealthWatcher:get_WealthTotal+35: F2 0F 58 C1                    - addsd xmm0,xmm1
RimWorld.WealthWatcher:get_WealthTotal+39: F3 0F 10 4E 28                 - movss xmm1,[rsi+28]
RimWorld.WealthWatcher:get_WealthTotal+3e: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
RimWorld.WealthWatcher:get_WealthTotal+42: F2 0F 58 C1                    - addsd xmm0,xmm1
RimWorld.WealthWatcher:get_WealthTotal+46: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
RimWorld.WealthWatcher:get_WealthTotal+4a: 48 8B 75 F8                    - mov rsi,[rbp-08]
RimWorld.WealthWatcher:get_WealthTotal+4e: 48 8D 65 00                    - lea rsp,[rbp+00]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196680</ID>
                  <Description>"Zero wealth"</Description>
                  <Options moHideChildren="1"/>
                  <Color>FF0000</Color>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
bZeroWealth:
  db 1

[DISABLE]
bZeroWealth:
  db 0
</AssemblerScript>
                </CheatEntry>
                <CheatEntry>
                  <ID>1337196675</ID>
                  <Description>"[WealthWatcher]"</Description>
                  <Options moHideChildren="1"/>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>800080</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>ptrWealthWatcher</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>1337196676</ID>
                      <Description>"WealthItems"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+20</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196677</ID>
                      <Description>"WealthBuildings"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+24</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196678</ID>
                      <Description>"WealthPawns"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+28</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>1337196679</ID>
                      <Description>"WealthFloorsOnly"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+2C</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337196638</ID>
              <Description>"Set size for all item stacks"</Description>
              <Options moHideChildren="1"/>
              <Color>FF0000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobScanMono(codeDrawGUIOverlay, Verse.Thing:DrawGUIOverlay, 48 63 4E 60 48 8D AD 00 00 00 00)
alloc(memDrawGUIOverlay,$1000,codeDrawGUIOverlay)
label(return)
label(skip)

memDrawGUIOverlay:
  mov rcx, [rsi+10]
  mov ecx, [rcx+38C] // get 'stackLimit'
  cmp ecx,#1
  je skip // update 'stackCount' for stackable items only
  cvtsi2ss xmm0, ecx
  mulss xmm0, [desiredFullness]
  cvtss2si ecx, xmm0
  mov [rsi+60], ecx

skip:
  movsxd rcx, dword ptr [rsi+60]
  lea rbp,[rbp+00000000]
  jmp return

desiredFullness:
  dd (float)1

bkpDrawGUIOverlay:
  readmem(codeDrawGUIOverlay,11)

codeDrawGUIOverlay:
  jmp memDrawGUIOverlay
  nop 6

return:

registersymbol(desiredFullness)
registersymbol(codeDrawGUIOverlay)
registersymbol(memDrawGUIOverlay)
registersymbol(bkpDrawGUIOverlay)

[DISABLE]

codeDrawGUIOverlay:
  readmem(bkpDrawGUIOverlay,11)

unregistersymbol(*)
dealloc(memDrawGUIOverlay)

{
// ORIGINAL CODE - INJECTION POINT: Verse.Thing:DrawGUIOverlay+4b

Verse.Thing:DrawGUIOverlay+20: 48 8B C8                       - mov rcx,rax
Verse.Thing:DrawGUIOverlay+23: 83 38 00                       - cmp dword ptr [rax],00
Verse.Thing:DrawGUIOverlay+26: 49 BB D0 4B DE D6 AA 01 00 00  - mov r11,Verse.CameraDriver:get_CurrentZoom
Verse.Thing:DrawGUIOverlay+30: 41 FF D3                       - call r11
Verse.Thing:DrawGUIOverlay+33: 85 C0                          - test eax,eax
Verse.Thing:DrawGUIOverlay+35: 0F 85 A0 00 00 00              - jne Verse.Thing:DrawGUIOverlay+db
Verse.Thing:DrawGUIOverlay+3b: 48 8B 46 10                    - mov rax,[rsi+10]
Verse.Thing:DrawGUIOverlay+3f: 48 63 80 8C 03 00 00           - movsxd  rax,dword ptr [rax+0000038C]
Verse.Thing:DrawGUIOverlay+46: 83 F8 01                       - cmp eax,01
Verse.Thing:DrawGUIOverlay+49: 7E 35                          - jle Verse.Thing:DrawGUIOverlay+80
// ---------- INJECTING HERE ----------
Verse.Thing:DrawGUIOverlay+4b: 48 63 4E 60                    - movsxd  rcx,dword ptr [rsi+60]
// ---------- DONE INJECTING  ----------
Verse.Thing:DrawGUIOverlay+4f: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
Verse.Thing:DrawGUIOverlay+56: 49 BB B0 C2 EA A6 AA 01 00 00  - mov r11,Verse.GenString:ToStringCached
Verse.Thing:DrawGUIOverlay+60: 41 FF D3                       - call r11
Verse.Thing:DrawGUIOverlay+63: 48 8B D0                       - mov rdx,rax
Verse.Thing:DrawGUIOverlay+66: 48 8B CE                       - mov rcx,rsi
Verse.Thing:DrawGUIOverlay+69: 48 8D 64 24 00                 - lea rsp,[rsp+00]
Verse.Thing:DrawGUIOverlay+6e: 49 BB B0 6F 00 D7 AA 01 00 00  - mov r11,Verse.GenMapUI:DrawThingLabel
Verse.Thing:DrawGUIOverlay+78: 41 FF D3                       - call r11
Verse.Thing:DrawGUIOverlay+7b: E9 5B 00 00 00                 - jmp Verse.Thing:DrawGUIOverlay+db
Verse.Thing:DrawGUIOverlay+80: 48 8B 46 10                    - mov rax,[rsi+10]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337196639</ID>
                  <Description>"Desired stack size (1.0 = full stack)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808000</Color>
                  <VariableType>Float</VariableType>
                  <Address>desiredFullness</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <Comments>░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 TABLE INFO 】
❖ CE Version required: 7.5
❖ Game process: RimWorldWin64.exe
❖ Game engine: Unity
❖ Tested game versions: Steam (see history below for details)
❖ Author: mece
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 PLAYER PAWNS 】
Applicable only to pawns controlled by player
❖ Max movement speed: temporarily allows pawns to move with maximum speed allowed
by the game engine. When pawns wandering around, they still walk at normal speed.
❖ Edit learning rate: Adds a multiplier to the learning speed.
By default, this is an equivalent to debug feature 'Fast learning' but can be faster.
❖ Max skills: permanent all pawn skills to 20 (max), two flames burning passion, 
and prevents experience deterioration.
❖ Set pawn stats: temporary updates some pawn stats: CleaningSpeed, WorkSpeedGlobal, 
GlobalLearningFactor, MoveSpeed. The similar effect could be achieved with 
another scripts, but this only affect player-controlled pawns.
More info about stats: https://rimworldwiki.com/wiki/Stat
❖ Set pawn capacity levels: temporary set pawn capacities to desired value
PawnCapacitiesHandler:GetLevel - gets effective capacity value from the game cache
PawnCapacityUtility:CalculateCapacityLevel - used to show capacity value in the GUI.
More info about pawn capacities: https://rimworldwiki.com/wiki/Capacity
❖ Zero injuries severity: removes injuries and other health difficulties, 
effectively makes pawns invincible.
https://rimworldwiki.com/wiki/Injury
❖ All needs are met: set pawn need meter levels to max for all needs 
(Food, Rest, Comfort, etc.)
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 INSTANT WORK 】
❖ Research: pawn will finish research immediately. Use debug feature 
'Finish All Research' if you don't want to bother with research at all.
❖ Repair: instantly repair buildings etc
❖ Mine: almost instantly dig rock etc
❖ AffectFloor: instantly smooth floors etc
❖ AffectRoof: instantly build roofs
❖ ConstructFinishFrame: instantly construct placed frames and build structures
❖ PlantWork: instantly cut trees and plants
❖ PlantSow: instantly sow crops
❖ CleanFilth: instantly clean filth and blood
❖ CleanFilth: instantly deconstruct structures
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 GLOBAL 】
❖ Infinite fuel: max fuel (e.g. torches)
❖ Transport pod unlimited capacity: zero mass of goods placed into the pod
❖ Unlimited power: same as debug feature "Unlimited power"
❖ Guaranteed tame: set taming change to 100% regardless of taming skills 
but only for tabable targets
❖ Edit selected thing: set size for selected item stacks, edit pawn age,
prisoner resistance
❖ Edit selected thing quality: could be used to make selected thing legendary 
after creation
❖ Nonrandom medical tend quality: removes randomness from tend quality.
To make it max use max skills and/or other game mechanics:
https://rimworldwiki.com/wiki/Doctoring#Tend_quality
❖ New things are always legendary
❖ Edit wealth: could be useful to increase or decrease raid frequency
https://rimworldwiki.com/wiki/Wealth
❖ Set size for all item stacks: Use to dupe items all at once and then turn it off 
to prevent unwanted surplus.
❖ No deterioration: disables damage of certain items due to its storage conditions
❖ No rot: disables damage of certain items due to rotting
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 USAGE TIPS 】
❖ 
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 KNOWN ISSUES 】
❖ 
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 CHANGE LOG 】
⋯ 2023-11-19 ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
❖ Game version: 1.4.3901
⋯ 2023-11-19 ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
v2
❖ Added: No deterioration
❖ Added: No rot
❖ Fixed: New things are always legendary: script corrupted the save when guest arrives
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 TABLE UPDATE TIPS 】
❖ 
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 FUTURE PLANS 】
❖ DLC specific cheats
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
【 CONTACT THE AUTHOR 】
❖ https://opencheattables.com/viewtopic.php?p=2262#p2262
</Comments>
</CheatTable>
