<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <Files>
    <File Name="cemono.lua" Encoding="Ascii85">*mi@/,qM$luPM-f.Qhq8uaLCJs-5==p;CC{P11)}OIpmqHXz6XTB2;CvLuLfQg2xP[T3#RijtkYY}2qViq]h:c.ETCBm4eepM5r87m3Qsf-Quas)PKMbuC[R(iG3BQsGBf3-$Imc;IVlE}TiIuQpY*7^swBRh//JFC3iIby-i=$.V10N}Ej,h5;EN%Y@4lCgr,NEbiz!LYhxp+{P#nWFw{QqChHR@Ri{HJPOU}aLm(3?uNK{mPGZ$]WcDb)@82Vp{^PUnKs:h+h3A#Q/RF4r$ooE;$,%Ui)HC@lrd4HC;uWPU$a)Z]Qt}l^P;ZLEKk$ZvM8--%+VjUiYFpuNe*2.(lFc#LZ7t=Svj9O--IGxhQmULR5Dev8CbIhQwp{=?Q,(7f}OJtQRF#nDe=[#v]dy{9_TK*L5bD]l%xfPY[=WRW/]P#$*w%M*;25uA.:1;fHkgI6h$Uc+SuyN9EZ.,6_=n1hpmEAP].NHr)oBFc}PWFT[3*tos,445JZv3hT47Nqi.bIThKsNW,N5c,CpPc4z#GZbQii;Ze#FRbTT=[RJg=;K4wzMUJ02}ptUshNqN!(AGkG(23ONJ1J__APA6]IHbLINgao#GQ16)E9G%*Q,V=pKY;Tdu-TGA;.bt(v1+La2(x)]=PU([0YS=3vW:?7NN-vQKct{Y7q-P*$.n_dERsqt^YXk+/a8?!cXAVa:ZH,%LCkaoCJ%;)_H3Dd#R]wKuU%iTU)!^jSvROLL0JakK=ix)VQgOude8!Uxek)3C^yW=CLIh^]y!;BY(UkKBeFy$*z)QDX4HU)jOysEzJK1z4iuFp/^f=T4I?J@qhG;sqfyEjqu.9lpELs5Beub6M3xghpE^OWy7Y=X4g2E?)bb^8s.Sf@M(?Qq_O6zURylbAX#nqM9*X1KDj81anc@kcxT(#o![]SV]D_+-1/+Lv(cK9?6ZyAC-J@L}[*kOm)Jm)14(KYebb$;=?@RCXOo-RN}=,+_YKp5lAIea{Y4eh)K^IISrT.0fnOP9v3EjMG,(bC*/!uI]aI1aurd15.)IcSMc)N*ejr$Q}u6qdYHO_wNI)zk@Y3sI9p(?Zml?l9E$eY330n0=i:;-9znnf-$Lo/DzX#Y[ocbzvB(Va$Gc[/7Mg=rWCVDJil$n(cemA#TSO7kpBmpal{;F1U@2uYgqqGqZ)6YcRYQR}:Zr8(!8/^}w1Sy]wC_bk[uBdYEU_y]YIjJ1*[zL9Q8ED},hG?IJWpC2Kr2R.d[ld6lNMkaEiBE[Vdeg3eqsZhWg3^C?_}mqI(nsI54*ou,{maS!@.G{uQRf*%7VO:+kKVi3sg)vM(eQ:JKET5m!KSOd(eDP:ax1:==X,s=32+$KPh,Q!k:*wb6-DBVW03){hXVL.vEy%Vf@e195TZ3O-tl3CP35qH).JqYH]^r5pwD*Lu)yIJ}w*fEW*m$=CjqtIM}bWnO%pQskA?;.y9%herV;_9/t#sg5Cml!)?]9Ay)@J3w,z^3Pvju)2Ku@86rE/l*y%y21$eKTxC6kV:6FUX6*krjvfe;#Fw47[j,[^j?[,YVHW=[f4OsO/?7PoWv!,NR254}6m8pU(}-.eid5[Fx7Jd=ME}KMS,^v8j6WYK9_0)o1r)onqbb?T_Yt3H?46?.1G%Q=QobXmSvn5:sj2Bp4v1k)I#wxWtPel-9-gGDJnewvoC9PV1v)hQOZ,nYd{pbrl-XZId:+X@lb3Bj7j%IrZjyk-#YNdUFh7;a0Qytw:{/ZqT.{2*,I;;L4CeIlw3O2n,@0^eI$wj3jJb(2GSAxF*aa:%[ghfz9EH%(EzoD;!RH3F1UAFYJ}f8)%)j:6F=AK,.FV304SIh{rsw1nr+35c^6f]eRYlF]y.fYlIbx(8m?U=^nKNb],ZTmm{x)rag@]37Q?c,[+LUD5*bSfOd,HOxwaPab[D0Fq]ZkO6{7N#8Q0pxA)kjpH@twxo%3@jHb)2#]nAy1mde2Mq)gLm+veXsYh?i/D0[,OHc1/N;9M8*C4qyK2!(PpS,I$a9,[@bb^?)yJBz0EqvH8cNbrU7^7qM9Cc:]Z5jXf7Sy=;JRlhu1uYFL::BDraq6f(jHd+xh=Bm]hA}Vqhb_%j6N==mpC{bE12{GDOfB_Y^B]I=s=$o!RRu[TrG?)V)PHA:-hZNvomb+!z4K6/71un@Qf626E3y3/4{OL[Pc2Sl!d*Sg1vc%$i$Mr}0:LsX:vL,*lJ3Q?nO2})i5ADByY7N+UdvR+y+rkUpX_OFk{9)Sl[=H]KIwX5s4vHNX?l)*SiRmHTp};X,S+LOy;P-[Ley-qfO5#LC2L/E@+cI?L]JQC;oFyz#UMzSReSZZ?8kxFKtU5}%{T=Htr%y!^u/Ecot[LBJ3O;z!z[5^8EehMJy0hw0wznRlH7..rrP@DX.{,$(wsz;DHU,vhVkDo;xDau^i?g2MTKvLxcJ,y5vwUtrx;ACz2_]DyvCBexbTDM;HhGGZ!Uhmq*QA@r7mSJg6p0U/_j1XI:d%W$$k:!4I.WV.yuMT@Je6A4VOFIqz,gF(i]t3#%r9e;BZ0le;hw!RmsV-XE!%D5u@/obFs)?5kVZD!M644+;xsvR9R)7R4uD-s]$(V_1/vb.NW*</File>
  </Files>
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Enable"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <Color>008000</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local cev = getCEVersion()
local cevm = '\n(Your CE Version: '.. cev ..')'

if cev == nil or cev &lt; 7.1 then
  local msg = 'Please update!\nIts required to use at least Cheat Engine 7.1! '..cevm
  messageDialog(msg, mtError, mbOK)
  return --yeah, no going forward here!
else if cev &lt; 7.5 then
  local msg = 'Update recommended!\nTable checked to work on public Cheat Engine 7.5 &amp; 7.6!'..cevm
  messageDialog(msg, mtWarning, mbOK)
  -- getting latest online version is possible but I don't want to add online checks! Activate in CE settings or
  -- https://www.cheatengine.org/forum/viewtopic.php?t=610628 or check manually ... whatever floats your boat
end end

var = var or {}
--- you may change the next 4 variables as you see fit
var.pn1 = 'Isekai Parlor Simulator.exe' -- string - primary name of the exe to attach
var.pn2 = nil -- string/nil - another possible name if provided
var.stopquery = true -- bool/nil - true to stop AAT after attaching / false continues ATT / nil queries
var.dbg = var.force or false -- bool - true for debug prints
--- dont change these lines or attaching/few functions wont work!
var.force = var.force or false --bool - true will prevent value override
var.stopthread = false -- bool - true will stop autoAttachThread

if var.dbg then print(cevm) end

local function getProcID() -- returns ID or nil for predefines names
  --local dtg = {'pn1','pn2','dbg'}
  --local pn1,pn2,dbg = getlocdef(dtg)
  local pn1,pn2,dbg = var.pn1,var.pn2,var.dbg
  if dbg then print("gPID - start - ",pn1,pn2,dbg) end
  if not pn1 then print('ProcessID - no process name given/defined') error("PID failed") return end

  local pn = pn1
  local pid = getProcessIDFromProcessName(pn)
    --- check if the process name matches, else try workarounds
  if not pid then
    if dbg then print("gPID - pid not found, trying workarounds") end
    if pn2 then
      pn = pn2
      pid = getProcessIDFromProcessName(pn)
      else pn2 = '' end
    if not pid then
      local pn1s = pn1:match("(%w+)") --get first word
      local pn2s = pn2:match("(%w+)")
      local sname = ''
      for _,v in pairs(getProcesslist()) do --go through process list, we just need values
        sname = v:match("(%w+)")
        if sname == pn1s or sname == pn2s then --check if name matches
          ---print('attaching to: ',v) --v still has full process name
          ---strings_add(getAutoAttachList(), v)
          pn = v
          break
      end end
      pid = getProcessIDFromProcessName(pn)
  end end
  if dbg then print("gPID - end") end
  return pid,pn
  --pn[0], pn[1] = process:match("(%w+)(.+)") --get first word (and the rest) or (\w+)$ for the last word
  --print(pn[0], pn[1], tostring(pn[0] ~= 'name1' and pn[0] ~= 'name1'))
end

local autoAttachThread = function(th)
  if not th then print('AutoAttachThead - error creating the thread') error("Thread failed") return end
  --local dbg = getlocdef({'dbg'})
  local dbg = var.dbg
  if dbg then print('aat - AutoAttachThead start',i,Interval) end
  local Interval = 1000
  local laststate = nil

  for i=1,36000 do -- start timed loop, always with conditions to stop!
    if th.Terminated then return end
    if var.stopthread then th.terminate() return end
    local openid = getOpenedProcessID() --get current IDs
    local pid,pn = getProcID()
    local attach = nil

    if pid == nil then -- process not running, speed up
      if laststate~=0 then
        unsetSaP() disableMono() detach()
        print('Waiting for the process to come up')
      end
      if dbg then print('aat - Still waiting',i,Interval) end
      Interval,laststate = 1000,0
    else
      if openid and openid == pid then -- opened process already the correct one
        if laststate ~=1 and laststate ~=2 then attach = true end
        Interval,laststate = 15000,1
      else
        if openid ~= pid then -- process is running, attach it
          openProcess(pid)
          if laststate ~=2 then attach = true end
          laststate = 2
        else
          print('aat - Cant be, you found a loop-hole!',openid,pid,tostring(laststate),tostring(attach))
      end end
      if dbg then print('aat - pn:',pn,'oid/pid:',openid,pid,'state:',laststate,'i/int:',i,Interval,'q:',tostring(attach)) end
      if attach then
        local conAtt = var.stopquery and 7
        local msg = pn.." attached."
        print(msg)
        if var.stopquery==nil then
          msg = msg.."\nDo you want auto-attaching to silently continue?"
          conAtt = messageDialog(msg,mtConfirmation, mbYes, mbNo)
        end
        -- inputQuery('Some caption','some prompt','y')
        -- synchronize()
        synchronize(checkmono)
        if conAtt == 7 then
          if dbg then print('aat - Stopping the attach function') end
          th.terminate()
          return
        else print("Continuing to watch and attach if game closes/crashes.\nNote: you may cancle with: var.stopthread = true")
      end end
      if dbg then print('aat - Still there',i,Interval,tostring(conAtt)) end
    end
    sleep(Interval)
  end
end
--https://forum.cheatengine.org/viewtopic.php?t=579133
--https://github.com/cheat-engine/cheat-engine/issues/1093
--closeRemoteHandle()

function checkmono()
  --local dbg = getlocdef({'dbg'}) --get debug value
  local dbg = var.dbg
  if dbg then print("cm - start") end

  --code to check proc name moved to autoAttachThread
  print('Checking if game is loaded/mono is working ...')
  local addr = getAddressSafe('IPS.Engine.Player.UI.UIManager:Update')
  while not addr and not var.stopthread do --repeat ----wait till game is loaded
    disableMono()
    local monoresult = LaunchMonoDataCollector()
    if monoresult == 0 then
      local msg = 'Process found, but mono could not be launched. Probably newer CE Version needed.'
      print(msg)
      switchActiveMR(0) error("Mono failed") return
    else
      if dbg then print("Mono:",monoresult) end
    end
    if switchActiveMR(0,true) then --"Enable" script,activate it - returns if it did neeed to activate
      local msg = "Seems game is yet not fully loaded but CE (mono bug?) did disable the script. Got you covered and 'll retry. (Alt get/compile CE 7.5.2+)"
      print(msg)
      return
    end
    if not addr then sleep(1000) end --checkSynchronize(1000)
    addr = getAddressSafe('IPS.Engine.Player.UI.UIManager:Update') --monoSymbolList.FullyLoaded il2cpp
    if dbg then print('cm - Waiting for the game to fully load',tostring(addr)) end
  end --until (addr or var.stopthread)
  if dbg then print("cm - end") end
  synchronize(addStructForOffsets)
end

function addStructForOffsets()
  local dbg = var.dbg
  if dbg then print("struct - start") end
  local s = findTableFile('cemono.lua').Stream
  local ls,le = load(readStringLocal(s.Memory,s.Size))
  if dbg then print(tostring(s),s.Memory,s.Size,tostring(ls),le) end
  --local ok, cem = pcall(ls)
  ls()

  if dbg then print("struct - loading structures") end
  -- clean Structures and Pointer
  if unsetSaP() then switchActiveMR(0) return end
  -- define the structures for offsets to get
  local funcs = {--[[{'','',true,2,0x1C,16}, -- NS/class/static fields/loop-start/start-offset/loop-offset
                 {'','',true,1,0x1C,16}, -- static fields are needed for enums ]]
                 {'','Brothel',false},
                 {'','Girl',false},
                 {'','World',false},
                 {'','Bank',false},
                 {'','HiringPool',false},
                 {'','GameRules',true}}

  -- if anything fails reasonaibly stop here. We only need the value, not key
  for _,v in ipairs(funcs) do
    synchronize(addMonoStructure,unpack(v)) if false then switchActiveMR(0) return end
  end
  --if AppendStructChilds('BaseItems','EItems_SF') then switchActiveMR(0) return end

  if dbg then print("struct - addded, trying to fetch global") end
  local gmstart = monoStaticF('','UIManager') --this gets the important starting addr
  local gamerules = monoStaticF('','GameRules') --this gets the important starting addr

  local shift=1
  if targetIs64Bit() then shift=33 end
  if not gmstart or (gmstart &gt;&gt; shift) &lt;= 0 then
    print('Error, could not get GlobalObjects. The table wont work!') switchActiveMR(0) return
  else
    unregisterSymbol("pgmstart")
    registerSymbol("pgmstart", gmstart, false)
    unregisterSymbol("pgamerules")
    registerSymbol("pgamerules", gamerules, false)
  --[[  autoAssemble([[
    alloc(gmalloc,1024,pgmstart)
    registersymbol(gmalloc)
    )]]
  end

  if dbg then print("struct - end") end
  print('Done - you may start using the table now!')
end


function cycleFullCompact(sender,force)
	local state = not(compactmenuitem.Caption == 'Compact View Mode')
	if force~=nil then state = not force end
	compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'
	getMainForm().Splitter1.Visible = state
	getMainForm().Panel4.Visible    = state
	getMainForm().Panel5.Visible    = state
end

function addCompactMenu()
	if compactmenualreadyexists then return end
	local parent = getMainForm().Menu.Items
	compactmenuitem = createMenuItem(parent)
	parent.add(compactmenuitem)
	compactmenuitem.Caption = 'Compact View Mode'
	compactmenuitem.OnClick = cycleFullCompact
	compactmenualreadyexists = 'yes'
end

function switchActiveMR(idn,enable) ---expects an ID or name / bool to activate the MR instead disable
  local mr = nil
  if type(idn)=="number" then
    mr = getAddressList().getMemoryRecordByID(idn)
  else if type(idn)=="string" then
    mr = getAddressList().getMemoryRecordByDescription(idn)
  end end
  if var.dbg then print("swtichActive: trying with mr "..idn) end
  if not mr then print('swtichActive: MR renamed or wrong ID?',idn) error("Wrong MR") else
    if enable then
      if  mr.Active == false then
        mr.Active = true
        return true
      end
    else
      mr.Active = false
  end end
  return nil --returns either true if activated or nil
end

function disableMono()
  if cev == 7.6 then print("With CE 7.6 I experienced freezes of mono. If so, restart CE.") else
    if type(monopipe)=='userdata'then
      if monopipe.OnTimeout then
        if var.dbg then print("mono - OnTimeout") end
        monopipe.OnTimeout()
      else
        if var.dbg then print("mono - Destroy") end
        monopipe=nil,monopipe.Destroy()
      end
    else if var.dbg then print('monotype: '..type(monopipe)) end end end
  print("mono - finished")
end

function unsetSaP()
  local gmstart = getAddressSafe("pgmstart")

  if delAllStructures then delAllStructures() end
  --sr = removeMrChilds('BaseItems') --no need to if I can disable the script and the Populate * [DISABLE] parts takes care
  unregisterSymbol("pgmstart")
  if var.dbg then print("Structures and symbol removed") end
  unregisterSymbol("pgamerules")
  if var.dbg then print("pgamerules removed") end
  unregisterSymbol("SetRes")
  if var.dbg then print("pgamerules removed")
     print("unset-pgmstart:",tostring(gmstart)) end
end

function detach()
  openProcess("cheatengine*") --yeah if you rename CE, then you should be able to solve things yourself
  MainForm.ProcessLabel.Caption=0
  if var.dbg then print("detached process") end
end

var.aant = createThread(autoAttachThread)
--checkprocess()
--addStructForOffsets()
addCompactMenu()
cycleFullCompact(nil,true)


{$asm}
[DISABLE]

dealloc(gmalloc)
unregistersymbol(gmalloc)

{$lua}
if syntaxcheck then return end

if var.dbg then print("disabling script (main incl subs)") end

cycleFullCompact(nil,false)

--if var.aant.Terminated==false then var.aant.terminate() end
var.stopthread = true

--ignore returns, just execute what's possible
unsetSaP()
disableMono()
detach()
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1</ID>
          <Description>"Get Architecture type (32/64Bit - wont "activate" - just print infos and expand correct group)"</Description>
          <Color>008000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{$lua}
if targetIs64Bit() then
   print("App is coded in 64 bit")
   switchActiveMR(2,true)
   switchActiveMR(3)
else
   print("App is coded in 32 bit")
   switchActiveMR(2)
   switchActiveMR(3,true)
end

{$asm}
[ENABLE]
//to prevent activation cause you can't write there
00000000:
nop

[DISABLE]

</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"x64 scripts (till v0.12 and again from v1.13 +?)"</Description>
          <Options moHideChildren="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>21</ID>
              <Description>"Gold wont decrease"</Description>
              <Color>80FFFF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2025-10-01
  Author : Nironan

  Ignores when money decreases, should be all cases regardless where it decreases (shop, bank, .....)
  Note: I´ve choosen to keep history records so you will see what it would have been like.
}

[ENABLE]

aobscanregion(aobSkipGoldDec,IPS.Engine.Game.Buildings.Brothel:AddGold,IPS.Engine.Game.Buildings.Brothel:AddGold+90,03 55 C0 49 8B CF)
//aobscan(aobSkipGoldDec,03 55 C0 49 8B CF 66 90 49 BB A5)
alloc(newmem,$100,aobSkipGoldDec)
registersymbol(aobSkipGoldDec)

label(code)
label(return)

newmem: //check if its a pos or neg value and skip "adding" (meaning sub) the amount
  mov rcx,[rbp-40]
  test rcx,rcx
  js short skip

code: //originalcode, unchanged but:
  add edx,[rbp-40]
skip: //new label just be able to skip
  mov rcx,r15
  jmp return

aobSkipGoldDec:
  jmp newmem
  nop
return:

[DISABLE]

aobSkipGoldDec:
  db 03 55 C0 49 8B CF

unregistersymbol(aobSkipGoldDec)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Game.Buildings.Brothel:AddGold+36

IPS.Engine.Game.Buildings.Brothel:AddGold+c: 48 89 75 D0                    - mov [rbp-30],rsi
IPS.Engine.Game.Buildings.Brothel:AddGold+10: 48 89 7D D8                    - mov [rbp-28],rdi
IPS.Engine.Game.Buildings.Brothel:AddGold+14: 4C 89 65 E0                    - mov [rbp-20],r12
IPS.Engine.Game.Buildings.Brothel:AddGold+18: 4C 89 6D E8                    - mov [rbp-18],r13
IPS.Engine.Game.Buildings.Brothel:AddGold+1c: 4C 89 75 F0                    - mov [rbp-10],r14
IPS.Engine.Game.Buildings.Brothel:AddGold+20: 4C 89 7D F8                    - mov [rbp-08],r15
IPS.Engine.Game.Buildings.Brothel:AddGold+24: 4C 8B F9                       - mov r15,rcx
IPS.Engine.Game.Buildings.Brothel:AddGold+27: 48 89 55 C0                    - mov [rbp-40],rdx
IPS.Engine.Game.Buildings.Brothel:AddGold+2b: 4C 89 45 B8                    - mov [rbp-48],r8
IPS.Engine.Game.Buildings.Brothel:AddGold+2f: 49 63 97 64 01 00 00           - movsxd  rdx,dword ptr [r15+00000164]
// ---------- INJECTING HERE ----------
IPS.Engine.Game.Buildings.Brothel:AddGold+36: 03 55 C0                       - add edx,[rbp-40]
// ---------- DONE INJECTING  ----------
IPS.Engine.Game.Buildings.Brothel:AddGold+39: 49 8B CF                       - mov rcx,r15
IPS.Engine.Game.Buildings.Brothel:AddGold+3c: 66 90                          - nop 2
IPS.Engine.Game.Buildings.Brothel:AddGold+3e: 49 BB A5 25 82 EC F4 01 00 00  - mov r11,000001F4EC8225A5
IPS.Engine.Game.Buildings.Brothel:AddGold+48: 41 FF D3                       - call r11
IPS.Engine.Game.Buildings.Brothel:AddGold+4b: E9 63 00 00 00                 - jmp IPS.Engine.Game.Buildings.Brothel:AddGold+b3
IPS.Engine.Game.Buildings.Brothel:AddGold+50: 49 8B 47 50                    - mov rax,[r15+50]
IPS.Engine.Game.Buildings.Brothel:AddGold+54: 4C 8B E0                       - mov r12,rax
IPS.Engine.Game.Buildings.Brothel:AddGold+57: 33 DB                          - xor ebx,ebx
IPS.Engine.Game.Buildings.Brothel:AddGold+59: 83 38 00                       - cmp dword ptr [rax],00
IPS.Engine.Game.Buildings.Brothel:AddGold+5c: 49 63 44 24 1C                 - movsxd  rax,dword ptr [r12+1C]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>22</ID>
              <Description>"Items wont decrease"</Description>
              <Color>FF8000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2023-12-26
  Author : Nironan

  Disables Items decreasing
}

[ENABLE]
//FF C9 83 3A 00
aobscanregion(aobItemDec,IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+100,IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+240,FF C9 83 3A 00)
registersymbol(aobItemDec)

aobItemDec:
  nop 2
return:


[DISABLE]

aobItemDec:
  db FF C9

unregistersymbol(aobItemDec)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+19c

IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+172: 48 8D 6D 00                    - lea rbp,[rbp+00]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+176: 49 BB 70 87 B6 1F 72 01 00 00  - mov r11,IPS.Engine.Player.UI.Modules.UIContentGrid`1[T_REF]:TryGetItem
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+180: 41 FF D3                       - call r11
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+183: 85 C0                          - test eax,eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+185: 0F 84 A0 00 00 00              - je IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+22b
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+18b: 48 8B 45 C0                    - mov rax,[rbp-40]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+18f: 48 8B D0                       - mov rdx,rax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+192: 83 38 00                       - cmp dword ptr [rax],00
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+195: 48 63 48 3C                    - movsxd  rcx,dword ptr [rax+3C]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+199: 89 4D D8                       - mov [rbp-28],ecx
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+19c: FF C9                          - dec ecx
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+19e: 83 3A 00                       - cmp dword ptr [rdx],00
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1a1: 89 48 3C                       - mov [rax+3C],ecx
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1a4: 48 8B 45 C0                    - mov rax,[rbp-40]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1a8: 48 8B C8                       - mov rcx,rax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1ab: 83 39 00                       - cmp dword ptr [rcx],00
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1ae: 48 63 40 3C                    - movsxd  rax,dword ptr [rax+3C]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1b2: 85 C0                          - test eax,eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1b4: 0F 8F 46 00 00 00              - jg IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+200
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1ba: 49 8B 87 C8 00 00 00           - mov rax,[r15+000000C8]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1c1: 48 63 55 C8                    - movsxd  rdx,dword ptr [rbp-38]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>23</ID>
              <Description>"Set Gold to last day amount (after changing money, untested)"</Description>
              <Color>80FFFF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2023-12-26
  Author : Nironan

  Set Gold to prev. day amount once you f.e. buy s.t.
}

[ENABLE]

aobscanregion(aobGoldPrevDay,IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability,IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+300,48 63 91 * * 0000 48 8B 8E)
alloc(newmem,$100,aobGoldPrevDay)
registersymbol(aobGoldPrevDay)

label(origShopGold)
registersymbol(origShopGold)

newmem:
  mov rdx,dword ptr [rcx+Brothel.m_PreviousDayGold]
  mov dword ptr [rcx+Brothel.m_Gold],rdx
code:
//  movsxd  rdx,dword ptr [rcx+0000010C]
  jmp return
origShopGold:
  readmem(aobGoldPrevDay,7)

aobGoldPrevDay:
  jmp newmem
  nop 2
return:


[DISABLE]

aobGoldPrevDay:
  //db 48 63 91 64 01 00 00
  readmem(origShopGold,7)

unregistersymbol(origShopGold)
unregistersymbol(aobGoldPrevDay)
dealloc(newmem)

{damn, you'd need that for unique identifier, but it doesnt matter, will take 1. one
48 63 91 * * 00 00 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// so other one would be ok too: IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+10c
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+64

IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+3b: 41 39 46 18           - cmp [r14+18],eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+3f: 0F 86 EE 02 00 00     - jbe IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+333
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+45: 49 8D 44 C6 20        - lea rax,[r14+rax*8+20]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+4a: 48 8B 00              - mov rax,[rax]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+4d: 48 8B 8E 38 01 00 00  - mov rcx,[rsi+00000138]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+54: 48 8B D1              - mov rdx,rcx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+57: 83 3A 00              - cmp dword ptr [rdx],00
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+5a: 48 8B 49 10           - mov rcx,[rcx+10]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+5e: 48 8B D1              - mov rdx,rcx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+61: 83 3A 00              - cmp dword ptr [rdx],00
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+64: 48 63 91 64 01 00 00  - movsxd  rdx,dword ptr [rcx+00000164]
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+6b: 48 8B 8E 38 01 00 00  - mov rcx,[rsi+00000138]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+72: 4C 8B C1              - mov r8,rcx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+75: 41 83 38 00           - cmp dword ptr [r8],00
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+79: 48 8B 49 10           - mov rcx,[rcx+10]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+7d: 4C 8B C1              - mov r8,rcx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+80: 41 83 38 00           - cmp dword ptr [r8],00
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+84: 4C 63 81 60 01 00 00  - movsxd  r8,dword ptr [rcx+00000160]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+8b: 4C 8B 8E 38 01 00 00  - mov r9,[rsi+00000138]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+92: 48 8B C8              - mov rcx,rax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+95: 83 38 00              - cmp dword ptr [rax],00
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>24</ID>
              <Description>"Set max stats for hovered girl (Bordel, changeable, set neg value to ignore it)"</Description>
              <Options moHideChildren="1"/>
              <Color>FF80FF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2023-12-27
  Author : Nironan

  Get Girl Pointer while hovering and set stats accordingly
}

[ENABLE]
//48 63 4F 74 66 66 90
aobscanregion(aobGirls,IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged,IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+100,48 63 4F 74 66 66 90)
alloc(newmem,$1000,aobGirls)
registersymbol(aobGirls)

label(pGirl)
registersymbol(pGirl)
label(origGirls)
registersymbol(origGirls)

newmem:
pGirl:
dq 0    //baseptr
dq
newmem+Girl.&lt;Level&gt;k__BackingField: //+B0
dd #-1  //100 is max
newmem+Girl.&lt;ClothesTransparency&gt;k__BackingField:
dd (float)-1
newmem+Girl.m_Xp:
dd (float)-1
newmem+Girl.&lt;TotalXpFromPreviousLevels&gt;k__BackingField:
dd (float)-1
newmem+Girl.&lt;HappinessMax&gt;k__BackingField:
dd #666
newmem+Girl.&lt;StaminaMax&gt;k__BackingField:
dd #666
newmem+Girl.&lt;IsMating&gt;k__BackingField:
dd #-1
newmem+Girl.m_Happiness:
dd #666
newmem+Girl.m_Stamina:
dd #666
newmem+Girl.m_Beauty:
dd #80  //SS=80
newmem+Girl.m_ChestSize:
dd #-1  //0=S,1=M,2=L,3=XL
newmem+Girl.m_SexSkill:
dd #150 //SS=150
newmem+Girl.m_ForeplaySkill:
dd #150 //SS=150
newmem+Girl.m_AnalSkill:
dd #150 //SS=150
// Higher beauty or skills mean higher upkeep, not true for End/Res
newmem+Girl.m_Endurance:
dd #666 //SS=60
newmem+Girl.m_Resilience:
dd #666 //SS=60
newmem+Girl.m_CanAnal:
db 01
newmem+Girl.m_HasYuriTalent: //+129
db 01

newmem+200:
start:
  mov [pGirl],rdi
//  jmp code
  mov edx,Girl.&lt;Level&gt;k__BackingField //we will loop from (currently) pGirl/eax +B0 till ...
loop:
  //mov rcx, pGirl
  mov ecx, dword ptr [rdi+edx] //we will loop from pGirl+ till +3C
  test ecx,ecx
  js short @f //check if its signed/below 0
  mov dword ptr [rdi+edx],ecx //we will loop from rdi +D0+10 (=+E0) till +10C
@@:
  cmp edx,Girl.m_Resilience
  jae short @f //once reached last entry we're done with loop, no more +4
  add edx,04
  jmp short loop //back to loop except jae above skipped this
@@: //CanAnal
  mov edx,Girl.m_CanAnal
  xor ecx, ecx
  mov cl, byte ptr [rdi+edx]
  test cl,cl
  js short @f
  mov byte ptr [rdi+edx],cl
@@: //HasYuriTalent
  mov edx,Girl.m_HasYuriTalent
  mov cl, byte ptr [rdi+edx]
  test cl,cl
  js short @f
  mov byte ptr [rdi+edx],cl
origGirls:
  //movsxd  rcx,dword ptr [rdi+74]
  //nop 3
  readmem(aobGirls,7)
  jmp return

aobGirls:
  jmp start
  nop 2
return:


[DISABLE]

aobGirls:
  //db 48 63 4F 74 66 66 90
  readmem(origGirls,7)

unregistersymbol(aobGirls)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+37

IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+b: 48 89 7D D8                    - mov [rbp-28],rdi
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+f: 4C 89 65 E0                    - mov [rbp-20],r12
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+13: 4C 89 6D E8                    - mov [rbp-18],r13
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+17: 4C 89 75 F0                    - mov [rbp-10],r14
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1b: 4C 89 7D F8                    - mov [rbp-08],r15
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1f: 48 8B F9                       - mov rdi,rcx
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+22: 48 89 55 B0                    - mov [rbp-50],rdx
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+26: C7 45 C0 00 00 00 00           - mov [rbp-40],00000000
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+2d: 48 39 7D B0                    - cmp [rbp-50],rdi
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+31: 0F 85 D1 01 00 00              - jne IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+208
// ---------- INJECTING HERE ----------
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+37: 48 63 4F 74                    - movsxd  rcx,dword ptr [rdi+74]
// ---------- DONE INJECTING  ----------
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+3b: 66 66 90                       - nop 3
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+3e: 49 BB 00 65 C3 97 5F 01 00 00  - mov r11,IPS.Engine.Game.Localization:GetRaceKey
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+48: 41 FF D3                       - call r11
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+4b: 48 8B C8                       - mov rcx,rax
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+4e: 49 BB 30 CD C2 97 5F 01 00 00  - mov r11,IPS.Engine.Game.Localization:Get
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+58: 41 FF D3                       - call r11
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+5b: 4C 8B F8                       - mov r15,rax
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+5e: 49 63 47 10                    - movsxd  rax,dword ptr [r15+10]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+62: 48 8B 4F 18                    - mov rcx,[rdi+18]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+66: 48 63 49 10                    - movsxd  rcx,dword ptr [rcx+10]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>35114</ID>
                  <Description>"pGirl (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>pGirl</Address>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>24115</ID>
                      <Description>"&lt;Level&gt;"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.&lt;Level&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>35112</ID>
                      <Description>"&lt;ClothesTransparency&gt;"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Girl.&lt;ClothesTransparency&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24116</ID>
                      <Description>"Xp"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Girl.m_Xp</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2411</ID>
                      <Description>"&lt;TotalXpFromPreviousLevels&gt;"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Girl.&lt;TotalXpFromPreviousLevels&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2412</ID>
                      <Description>"&lt;HappinessMax&gt;"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.&lt;HappinessMax&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2413</ID>
                      <Description>"&lt;StaminaMax&gt;"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.&lt;StaminaMax&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>35113</ID>
                      <Description>"&lt;IsMating&gt;"</Description>
                      <DropDownList DisplayValueAsItem="1">-1:Ignore
0:No
1:Yes
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+Girl.&lt;IsMating&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2414</ID>
                      <Description>"Happiness"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Happiness</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2415</ID>
                      <Description>"Stamina"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Stamina</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2416</ID>
                      <Description>"Beauty"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Beauty</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2417</ID>
                      <Description>"ChestSize (since I check on &lt;=0 you can't set SS=-1 or S=0, but you can shrink them)"</Description>
                      <DropDownList DisplayValueAsItem="1">-1:Ignore/SS
0:Ignore/s
1:M
2:L
3:XL
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_ChestSize</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2418</ID>
                      <Description>"SexSkill"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_SexSkill</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2419</ID>
                      <Description>"ForeplaySkill"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_ForeplaySkill</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24110</ID>
                      <Description>"AnalSkill"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_AnalSkill</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24111</ID>
                      <Description>"Endurance"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Endurance</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24112</ID>
                      <Description>"Resilience"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Resilience</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24113</ID>
                      <Description>"CanAnal"</Description>
                      <DropDownList ReadOnly="1" DisplayValueAsItem="1">0:No
1:Yes
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+Girl.m_CanAnal</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24114</ID>
                      <Description>"HasYuriTalent"</Description>
                      <DropDownList ReadOnly="1" DisplayValueAsItem="1">0:No
1:Yes
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+Girl.m_HasYuriTalent</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>25</ID>
              <Description>"World (incl. Brothel) Pointers (needs switch to game and up to few seconds for pointers to actualize)"</Description>
              <Options moHideChildren="1"/>
              <Color>0080FF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2025-10-01
  Author : Nironan

  Get World Pointers incl. Brothel, Hiring, Bank infos
}

[ENABLE]
//aobscan(aobWorld,10 F3 0F 10 45 E0) // needs +1
aobscanregion(aobWorld,IPS.Engine.Game.World:Update+50,IPS.Engine.Game.World:Update+BB,F3 0F10 45 E0 F3 0F5A C0 48 8B C8 F2)
alloc(newmem,$100,aobWorld)
registersymbol(aobWorld)

label(pWorld)
registersymbol(pWorld)

newmem:
pWorld:
  dq 0
  dq 0
start:
  mov rcx,pWorld
  mov [rcx],rsi
code:
  movss xmm0,[rbp-20]
  jmp return

aobWorld:
  jmp start
return:


[DISABLE]

aobWorld:
  db F3 0F 10 45 E0

unregistersymbol(pWorld)
unregistersymbol(aobWorld)
dealloc(newmem)

{3 adresses, same:
IPS.Engine.Game.World:Update+84
IPS.Engine.Game.World:Update+db
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Game.World:Update+43

IPS.Engine.Game.World:Update+1c: 45 33 FF                       - xor r15d,r15d
IPS.Engine.Game.World:Update+1f: E9 3F 00 00 00                 - jmp IPS.Engine.Game.World:Update+63
IPS.Engine.Game.World:Update+24: 48 8D 6D 00                    - lea rbp,[rbp+00]
IPS.Engine.Game.World:Update+28: 48 8B 46 38                    - mov rax,[rsi+38]
IPS.Engine.Game.World:Update+2c: 48 8B C8                       - mov rcx,rax
IPS.Engine.Game.World:Update+2f: 49 8B D7                       - mov rdx,r15
IPS.Engine.Game.World:Update+32: 83 38 00                       - cmp dword ptr [rax],00
IPS.Engine.Game.World:Update+35: 90                             - nop
IPS.Engine.Game.World:Update+36: 49 BB 00 04 AF E5 F4 01 00 00  - mov r11,System.Collections.Generic.List`1[T_REF]:get_Item
IPS.Engine.Game.World:Update+40: 41 FF D3                       - call r11
// ---------- INJECTING HERE ----------
IPS.Engine.Game.World:Update+43: F3 0F 10 45 E0                 - movss xmm0,[rbp-20]
// ---------- DONE INJECTING  ----------
IPS.Engine.Game.World:Update+48: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
IPS.Engine.Game.World:Update+4c: 48 8B C8                       - mov rcx,rax
IPS.Engine.Game.World:Update+4f: F2 0F 10 C8                    - movsd xmm1,xmm0
IPS.Engine.Game.World:Update+53: F2 0F 5A C9                    - cvtsd2ss xmm1,xmm1
IPS.Engine.Game.World:Update+57: 48 8B 00                       - mov rax,[rax]
IPS.Engine.Game.World:Update+5a: FF 90 00 02 00 00              - call qword ptr [rax+00000200]
IPS.Engine.Game.World:Update+60: 41 FF C7                       - inc r15d
IPS.Engine.Game.World:Update+63: 48 8B 46 38                    - mov rax,[rsi+38]
IPS.Engine.Game.World:Update+67: 48 8B C8                       - mov rcx,rax
IPS.Engine.Game.World:Update+6a: 83 38 00                       - cmp dword ptr [rax],00
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>250</ID>
                  <Description>"Brothel (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>[pWorld]+World.&lt;Brothel&gt;k__BackingField</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>2501</ID>
                      <Description>"&lt;YesterdayRank&gt; (useless, info only)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;YesterdayRank&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2502</ID>
                      <Description>"&lt;FloorCount&gt; (useless, info only)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;FloorCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2503</ID>
                      <Description>"&lt;MaxEmployeeCount&gt; (works next day, may buggy)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;MaxEmployeeCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2504</ID>
                      <Description>"&lt;MaxCustomerCount&gt; (dont add more than above)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;MaxCustomerCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2505</ID>
                      <Description>"&lt;MaxFloorCount&gt; (works next day)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;MaxFloorCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2506</ID>
                      <Description>"&lt;RoomsPerFloor&gt; (Change works but floors might be hardly accessible and not transfered to next stage)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;RoomsPerFloor&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2507</ID>
                      <Description>"Reputation (works next time/day)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Brothel.m_Reputation</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2508</ID>
                      <Description>"Rank"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.m_Rank</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2509</ID>
                      <Description>"Gold"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.m_Gold</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>25011</ID>
                      <Description>"PreviousDayGold"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.m_PreviousDayGold</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>251</ID>
                  <Description>"Hiring (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>[pWorld]+World.&lt;HiringPool&gt;k__BackingField</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>2511</ID>
                      <Description>"PoolSize"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+HiringPool.&lt;PoolSize&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2512</ID>
                      <Description>"Force Race Spawn active"</Description>
                      <DropDownList DisplayValueAsItem="1">0: No
1: Yes
</DropDownList>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+HiringPool.m_IsForcingRaceSpawn</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2513</ID>
                      <Description>"Forced Race (= unlocked order)"</Description>
                      <DropDownList DisplayValueAsItem="1">0: Human (or Disabled) (1)
1: Half Beast (1)
2: Elf (1)
3: Mazoku (1)
4: Lamia (2)
5: Mermaid (2)
6: Dragonkin (3)
7: Harpy (1)
8: Alraune
9: Dryad
10: Arachne (3)
11: Wolf Girl
12: Sphinx (3)
13: Slime (1)
14: Nymph
</DropDownList>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+HiringPool.m_ForceRaceSpawn</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>252</ID>
                  <Description>"Bank (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>[pWorld]+World.&lt;Bank&gt;k__BackingField</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>2521</ID>
                      <Description>"InterestRate"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Bank.m_InterestRate</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>2522</ID>
                      <Description>"Loan"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Bank.m_Loan</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>2523</ID>
                  <Description>"Day"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>[pWorld]+World.&lt;Day&gt;k__BackingField</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>2524</ID>
                  <Description>"Turn"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>[pWorld]+World.&lt;Turn&gt;k__BackingField</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>26</ID>
              <Description>"Set Screen Resolution"</Description>
              <Options moHideChildren="1"/>
              <Color>808000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2024-03-29
  Author : Nironan

  Finds the mehtod to "SetResolution", defines some values, prepares calling and restores after
}

[ENABLE]
{$lua}
--if syntaxcheck then return end

--needed to find the right method to be able to correctly set fullscreenMode and preferredRefreshRate, else any would doo
local addr = tohex(findMethodAddrBySignature('UnityEngine','Screen','SetResolution','int,int,UnityEngine.FullScreenMode,int$',false))
unregisterSymbol("SetRes")
registerSymbol("SetRes", addr, false)
{$asm}
//above saves addr. for correct UnityEngine.Screen:SetResolution

//aobscan(aobSetResolution,AF 00 00 00 48 8B 87 C8 00 00 00) //+4
aobscanregion(aobSetResolution,IPS.Engine.Player.UI.Modules.UIOptions:Enable,IPS.Engine.Player.UI.Modules.UIOptions:Enable+AA,48 8B 87 * * 00 00 48 8B 8F * * * * 48)
registersymbol(aobSetResolution)

alloc(pSR,$100,aobSetResolution)
registersymbol(pSR)

label(rescode)
registersymbol(rescode)

// free registers: rcx, rdx, rax

pSR:
  dd #1920 //+0 width
  dd #1080 //+4 height
  dd 0     //+8 fullscreenMode - db would be enough but this way "start" starts at clean +10
  dd 0     //+C preferredRefreshRate
start: //preparing x86/64 calling convention
  sub rsp, 0x20            // reserve 32 bytes shadow space (16-byte aligned) - required in x64 for the caller to do that
  mov qword ptr [rsp+0x00], r8
  mov qword ptr [rsp+0x08], r9

  mov ecx, dword ptr [pSR]
  mov edx, dword ptr [pSR+4]
  mov r8d, dword ptr [pSR+8]
  mov r9d, dword ptr [pSR+0C]
  call SetRes //call a function - this involves saving an address to return to so it will continue here afterwards

  mov r8, qword ptr [rsp+0x00]
  mov r9, qword ptr [rsp+0x08]
  add rsp, 0x20
rescode:
  //mov rax,[rdi+000000C8] -- UIOptions + m_DifficultyScroll
  readmem(aobSetResolution,7)
  jmp return

aobSetResolution:
  jmp start
return:


[DISABLE]

aobSetResolution:
  //db 48 8B 87 C8 00 00 00
  readmem(rescode,7)

unregistersymbol(rescode)
unregistersymbol(pSR)
unregistersymbol(aobSetResolution)
dealloc(pSR)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.Modules.UIOptions:Enable+2b

IPS.Engine.Player.UI.Modules.UIOptions:Enable+1: 48 8B EC                       - mov rbp,rsp
IPS.Engine.Player.UI.Modules.UIOptions:Enable+4: 48 83 EC 30                    - sub rsp,30
IPS.Engine.Player.UI.Modules.UIOptions:Enable+8: 48 89 75 F0                    - mov [rbp-10],rsi
IPS.Engine.Player.UI.Modules.UIOptions:Enable+c: 48 89 7D F8                    - mov [rbp-08],rdi
IPS.Engine.Player.UI.Modules.UIOptions:Enable+10: 48 8B F9                       - mov rdi,rcx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+13: 48 8B F2                       - mov rsi,rdx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+16: 49 BB 6A 49 8F FA F4 01 00 00  - mov r11,000001F4FA8F496A
IPS.Engine.Player.UI.Modules.UIOptions:Enable+20: 41 FF D3                       - call r11
IPS.Engine.Player.UI.Modules.UIOptions:Enable+23: 85 C0                          - test eax,eax
IPS.Engine.Player.UI.Modules.UIOptions:Enable+25: 0F 84 AF 00 00 00              - je IPS.Engine.Player.UI.Modules.UIOptions:Enable+da
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIOptions:Enable+2b: 48 8B 87 C8 00 00 00           - mov rax,[rdi+000000C8]
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIOptions:Enable+32: 48 8B 8F 58 01 00 00           - mov rcx,[rdi+00000158]
IPS.Engine.Player.UI.Modules.UIOptions:Enable+39: 48 8B D1                       - mov rdx,rcx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+3c: 83 3A 00                       - cmp dword ptr [rdx],00
IPS.Engine.Player.UI.Modules.UIOptions:Enable+3f: 0F B6 89 90 01 00 00           - movzx ecx,byte ptr [rcx+00000190]
IPS.Engine.Player.UI.Modules.UIOptions:Enable+46: 85 C9                          - test ecx,ecx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+48: 40 0F 94 C2                    - sete dl
IPS.Engine.Player.UI.Modules.UIOptions:Enable+4c: 48 0F B6 D2                    - movzx rdx,dl
IPS.Engine.Player.UI.Modules.UIOptions:Enable+50: 48 8B C8                       - mov rcx,rax
IPS.Engine.Player.UI.Modules.UIOptions:Enable+53: 83 38 00                       - cmp dword ptr [rax],00
IPS.Engine.Player.UI.Modules.UIOptions:Enable+56: 49 BB 12 2F B7 E6 F4 01 00 00  - mov r11,000001F4E6B72F12
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>261</ID>
                  <Description>"Width"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>262</ID>
                  <Description>"Height"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR+4</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>263</ID>
                  <Description>"FullscreenMode"</Description>
                  <DropDownList ReadOnly="1" DisplayValueAsItem="1">0:ExclusiveFullScreen
1:FullScreenWindow
2:MaximizedWindow
3:Windowed
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR+8</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>264</ID>
                  <Description>"preferredRefreshRate (dunno if that works)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR+C</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>27</ID>
              <Description>"Allow all passwords ? (placeholder, #todo, needs rework)"</Description>
              <Color>404080</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 
  Date   : 2024-05-30
  Author : Nironan

  Disables the jump if the entered pw doesnt match the stored ones
}

[ENABLE]
{$lua}
print("It unlocks: GalleryRaces, GalleryCGs (now, because I'm stupid, hmhm was sick I mean), and in future may Sandboxes")
{$asm}

//aobscan(aobAllPW,0F 84 36 02 00 00 C7)
aobscanregion(aobAllPW,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+99,0F 84 * * 00 00 C7)
registersymbol(aobAllPW)
//aobscan(aobGalNoJmp,E9 ED 01 00 00 8B 45 08)
aobscanregion(aobGalNoJmp,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+200,E9 * * 00 00 8B 45 * 8B)
registersymbol(aobGalNoJmp)

alloc(retpw,$100)
registersymbol(retpw)

retpw:
  readmem(aobAllPW,6)
  readmem(aobGalNoJmp,5)
aobAllPW:
  nop 6
aobGalNoJmp:
  nop 5

[DISABLE]

aobAllPW:
  //db 0F 84 36 02 00 00
  readmem(retpw,6)
aobGalNoJmp:
  //db E9 ED 01 00 00
  readmem(retpw+6,5)

unregistersymbol(aobGalNoJmp)
unregistersymbol(aobAllPW)
unregistersymbol(retpw)
dealloc(retpw)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+46

IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+23: 39 58 0C                 - cmp [eax+0C],ebx
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+26: 0F 86 84 02 00 00        - jbe IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+2b0
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+2c: 8D 44 98 10              - lea eax,[eax+ebx*4+10]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+30: 8B 00                    - mov eax,[eax]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+32: 8B 4D 0C                 - mov ecx,[ebp+0C]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+35: 89 4C 24 04              - mov [esp+04],ecx
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+39: 89 04 24                 - mov [esp],eax
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+3c: 8D 6D 00                 - lea ebp,[ebp+00]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+3f: E8 4C 10 9F 17           - call System.String:op_Equality
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+44: 85 C0                    - test eax,eax
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+46: 0F 84 36 02 00 00        - je IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+282
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+4c: C7 04 24 02 00 00 00     - mov [esp],00000002
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+53: E8 98 10 D3 19           - call IPS.Engine.Audio.AudioManager:PlaySfx
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+58: 8B 45 08                 - mov eax,[ebp+08]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+5b: 8B 80 BC 00 00 00        - mov eax,[eax+000000BC]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+61: C7 44 24 04 F0 0F A0 07  - mov [esp+04],07A00FF0
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+69: 89 04 24                 - mov [esp],eax
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+6c: 39 00                    - cmp [eax],eax
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+6e: 90                       - nop 
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+6f: E8 8C 02 00 00           - call TMPro.TMP_InputField:set_text
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+74: 89 5D E0                 - mov [ebp-20],ebx
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>35111</ID>
              <Description>"Show Passwords (Static code yet)"</Description>
              <Color>404080</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
{$lua}
print("Passwords are: 0: mythic, 1: Annie, 2: playtime, 3: Heracles, 4: scylla")
print("What these do: 0: adds races?, 1: HScene Gallery, 2: 'nothing/placeholder, 3: unlock achievements, 4: unlocks animations")
{$asm}

[DISABLE]

</AssemblerScript>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>3</ID>
          <Description>"x32 scripts (v0.13 till v1.12?)"</Description>
          <Options moHideChildren="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>31</ID>
              <Description>"Gold wont decrease"</Description>
              <Color>00B1BB</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2024-03-29
  Author : Nironan

  Ignores when money decreases, noticed not all cases (works for: shop, bank, ..... but not fireing a girl. Well wont happen that often and you still get way more.)
  Note: I´ve choosen to keep history records so you will see what it would have been like.
}

[ENABLE]

//aobscan(aobSkipGoldDec,03 45 0C 89 44 24 04)
aobscanregion(aobSkipGoldDec,IPS.Engine.Game.Buildings.Brothel:AddGold,IPS.Engine.Game.Buildings.Brothel:AddGold+90,03 45 * 89 44 24 *)
alloc(newmem,$100,aobSkipGoldDec)
registersymbol(aobSkipGoldDec)

label(origAddGold)
registersymbol(origAddGold)

newmem:
  test ecx,ecx
  js short +3
origAddGold:
  readmem(aobSkipGoldDec,7)
  jmp return

aobSkipGoldDec:
  jmp newmem
  nop 2
return:

[DISABLE]

aobSkipGoldDec:
//  db 03 45 0C 89 44 24 04
  readmem(origAddGold,7)

unregistersymbol(origAddGold)
unregistersymbol(aobSkipGoldDec)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Game.Buildings.Brothel:AddGold+10

UnityEngine.UI.Selectable:IsPressed+33: 5F                 - pop edi
UnityEngine.UI.Selectable:IsPressed+34: C9                 - leave 
UnityEngine.UI.Selectable:IsPressed+35: C3                 - ret 
0EF1D49E: 00 00              - add [eax],al
IPS.Engine.Game.Buildings.Brothel:AddGold: 55                 - push ebp
IPS.Engine.Game.Buildings.Brothel:AddGold+1: 8B EC              - mov ebp,esp
IPS.Engine.Game.Buildings.Brothel:AddGold+3: 53                 - push ebx
IPS.Engine.Game.Buildings.Brothel:AddGold+4: 83 EC 24           - sub esp,24
IPS.Engine.Game.Buildings.Brothel:AddGold+7: 8B 5D 08           - mov ebx,[ebp+08]
IPS.Engine.Game.Buildings.Brothel:AddGold+a: 8B 83 A0 00 00 00  - mov eax,[ebx+000000A0]
// ---------- INJECTING HERE ----------
IPS.Engine.Game.Buildings.Brothel:AddGold+10: 03 45 0C           - add eax,[ebp+0C]
IPS.Engine.Game.Buildings.Brothel:AddGold+13: 89 44 24 04        - mov [esp+04],eax
// ---------- DONE INJECTING  ----------
IPS.Engine.Game.Buildings.Brothel:AddGold+17: 89 1C 24           - mov [esp],ebx
IPS.Engine.Game.Buildings.Brothel:AddGold+1a: 90                 - nop 
IPS.Engine.Game.Buildings.Brothel:AddGold+1b: E8 70 19 F9 FF     - call IPS.Engine.Game.Buildings.Brothel:set_Gold
IPS.Engine.Game.Buildings.Brothel:AddGold+20: 83 7D 10 0E        - cmp dword ptr [ebp+10],0E
IPS.Engine.Game.Buildings.Brothel:AddGold+24: 74 1C              - je IPS.Engine.Game.Buildings.Brothel:AddGold+42
IPS.Engine.Game.Buildings.Brothel:AddGold+26: 8B 43 24           - mov eax,[ebx+24]
IPS.Engine.Game.Buildings.Brothel:AddGold+29: 8B 4D 10           - mov ecx,[ebp+10]
IPS.Engine.Game.Buildings.Brothel:AddGold+2c: 39 48 0C           - cmp [eax+0C],ecx
IPS.Engine.Game.Buildings.Brothel:AddGold+2f: 0F 86 13 00 00 00  - jbe IPS.Engine.Game.Buildings.Brothel:AddGold+48
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>32</ID>
              <Description>"Items wont decrease"</Description>
              <Color>FF8000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2023-12-26
  Author : Nironan

  Disables Items decreasing
}

[ENABLE]
//aobscan(aobItemDec,49 39 12 89 48 20)
aobscanregion(aobItemDec,IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+80,IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+1B0,49 39 12 89)
registersymbol(aobItemDec)

aobItemDec:
  nop
return:


[DISABLE]

aobItemDec:
  db 49

unregistersymbol(aobItemDec)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+139

IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+11c: 39 00              - cmp [eax],eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+11e: 90                 - nop
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+11f: E8 A4 00 00 00     - call 0EEDCD58
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+124: 85 C0              - test eax,eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+126: 0F 84 70 00 00 00  - je IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+19c
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+12c: 8B 45 E0           - mov eax,[ebp-20]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+12f: 8B D0              - mov edx,eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+131: 39 00              - cmp [eax],eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+133: 8B 48 20           - mov ecx,[eax+20]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+136: 89 4D EC           - mov [ebp-14],ecx
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+139: 49                 - dec ecx
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+13a: 39 12              - cmp [edx],edx
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+13c: 89 48 20           - mov [eax+20],ecx
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+13f: 8B 45 E0           - mov eax,[ebp-20]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+142: 8B C8              - mov ecx,eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+144: 39 09              - cmp [ecx],ecx
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+146: 8B 40 20           - mov eax,[eax+20]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+149: 85 C0              - test eax,eax
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+14b: 7F 31              - jg IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+17e
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+14d: 8B 83 98 00 00 00  - mov eax,[ebx+00000098]
IPS.Engine.Player.UI.Modules.UIInventory:OnInventoryChanged+153: 8B 4D E4           - mov ecx,[ebp-1C]
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>33</ID>
              <Description>"Set Gold to last day amount (after shopping)"</Description>
              <Color>00B1BB</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.1
  Date   : 2025-04-10 - 1.0 2024-03-29
  Author : Nironan

  Set Gold to prev. day amount once you f.e. buy s.t.
}

[ENABLE]

//aobscan(aobGoldPrevDay,8B 89 A0 00 00 00 8B 80 AC)
//aobscan(aobGoldPrevDay,8B 88 A8 00 00 00 8B 87 CC)
//gets 2 but doesnt matter which
aobscanregion(aobGoldPrevDay,IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability,IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+300,8B 88 * * 00 00 8B 87 * * 00 00 8B D0)
alloc(newmem,$100,aobGoldPrevDay)
registersymbol(aobGoldPrevDay)

label(origShopGold)
registersymbol(origShopGold)

newmem:
  mov eax,[eax+Brothel.m_PreviousDayGold]
  mov [ecx+Brothel.m_Gold],eax
  mov ecx,eax
  jmp return
origShopGold:
  readmem(aobGoldPrevDay,12)

aobGoldPrevDay:
  jmp newmem
  nop 7
return:


[DISABLE]

aobGoldPrevDay:
// 1.0 with 0.12.3 db 8B 89 A0 00 00 00 8B 80 AC 00 00 00
// 1.1 with 1.8.4  db 8B 88 A8 00 00 00 8B 87 CC 00 00 00
  readmem(origShopGold,12)

unregistersymbol(origShopGold)
unregistersymbol(aobGoldPrevDay)
dealloc(newmem)

{ 1.1
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+51

IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+31: 0F 86 89 02 00 00  - jbe IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+2c0
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+37: 8D 44 88 10        - lea eax,[eax+ecx*4+10]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+3b: 8B 00              - mov eax,[eax]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+3d: 89 45 E8           - mov [ebp-18],eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+40: 8B 87 CC 00 00 00  - mov eax,[edi+000000CC]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+46: 8B C8              - mov ecx,eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+48: 39 09              - cmp [ecx],ecx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+4a: 8B 40 08           - mov eax,[eax+08]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+4d: 8B C8              - mov ecx,eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+4f: 39 09              - cmp [ecx],ecx
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+51: 8B 88 A8 00 00 00  - mov ecx,[eax+000000A8]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+57: 8B 87 CC 00 00 00  - mov eax,[edi+000000CC]
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+5d: 8B D0              - mov edx,eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+5f: 39 12              - cmp [edx],edx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+61: 8B 40 08           - mov eax,[eax+08]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+64: 8B D0              - mov edx,eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+66: 39 12              - cmp [edx],edx
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+68: 8B 90 A4 00 00 00  - mov edx,[eax+000000A4]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+6e: 8B 87 CC 00 00 00  - mov eax,[edi+000000CC]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+74: 89 44 24 0C        - mov [esp+0C],eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+78: 8B 45 E8           - mov eax,[ebp-18]
}

{ 1.0
// IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+46

IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+44: 39 12              - cmp [edx],edx
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+46: 8B 89 A0 00 00 00  - mov ecx,[ecx+000000A0]
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+4c: 8B 80 AC 00 00 00  - mov eax,[eax+000000AC]
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+52: 8B D0              - mov edx,eax
IPS.Engine.Player.UI.Modules.UIShop:UpdateAvailability+54: 39 12              - cmp [edx],edx
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>34</ID>
              <Description>"Set max stats for hovered girl (Bordel, changeable, set a value &lt;=0 to ignore it)"</Description>
              <Options moHideChildren="1"/>
              <Color>FF80FF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2024-03-29
  Author : Nironan

  Get Girl Pointer while hovering and set stats accordingly
}
{$lua}
if syntaxcheck then return end
{$asm}

[ENABLE]

//aobscan(aobGirls,8B 40 3C 89 04 24 8D 6D 00 E8 64)
aobscanregion(aobGirls,IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged,IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+100,8B 40 * 89 04 24)
alloc(newmem,$100,aobGirls)
registersymbol(aobGirls)


label(pGirl)
registersymbol(pGirl)
label(origGirls)
registersymbol(origGirls)

newmem:
pGirl:
dq 0    //baseptr
dq
newmem+Girl.&lt;Level&gt;k__BackingField: //+64
dd #-1  //100 is max
newmem+Girl.&lt;ClothesTransparency&gt;k__BackingField:
dd (float)-1
newmem+Girl.m_Xp:
dd (float)-1
newmem+Girl.&lt;TotalXpFromPreviousLevels&gt;k__BackingField:
dd (float)-1
newmem+Girl.&lt;HappinessMax&gt;k__BackingField:
dd #666
newmem+Girl.&lt;StaminaMax&gt;k__BackingField:
dd #666
newmem+Girl.&lt;IsMating&gt;k__BackingField:
dd #-1
newmem+Girl.m_Happiness:
dd #666
newmem+Girl.m_Stamina:
dd #666
newmem+Girl.m_Beauty:
dd #80  //SS=80
newmem+Girl.m_ChestSize:
dd #-1  //0=S,1=M,2=L,3=XL
newmem+Girl.m_SexSkill:
dd #150 //SS=150
newmem+Girl.m_ForeplaySkill:
dd #150 //SS=150
newmem+Girl.m_AnalSkill:
dd #150 //SS=150
// Higher beauty or skills mean higher upkeep, not true for End/Res
newmem+Girl.m_Endurance:
dd #666 //SS=60
newmem+Girl.m_Resilience:
dd #666 //SS=60
newmem+Girl.m_CanAnal:
db 01
newmem+Girl.m_HasYuriTalent: //+C0
db 01
newmem+200:
start:
  mov [pGirl],eax
  mov edx,Girl.&lt;Level&gt;k__BackingField //we will loop from (currently) pGirl/eax +64 till ...
loop:
//  mov ecx, pGirl
  mov ecx,dword ptr [pGirl+edx]
  test ecx,ecx
  jle short @f //check if its &lt;=0
  mov dword ptr [eax+edx],ecx
@@:
  cmp edx,Girl.m_Resilience // ... +C0
  jae short @f
  add edx,04
  jmp short loop
@@: // since these 2 are byte, not 4B/32b you cant use these in the loop
  mov edx,Girl.m_CanAnal
  xor ecx,ecx
  mov cl,byte ptr [pGirl+edx]
  test cl,cl
  js short @f
  mov byte ptr [eax+edx],cl
@@:
  mov edx,Girl.m_HasYuriTalent
  mov cl,byte ptr [pGirl+edx]
  test cl,cl
  js short @f
  mov byte ptr [eax+edx],cl
{@@:
  mov edx,Girl.&lt;Level&gt;k__BackingField
  mov ecx,dword ptr [pGirl+edx]
  test ecx,ecx
  js short @f
  mov dword ptr [eax+edx],ecx
@@:
  mov edx,Girl.m_Xp
  mov ecx,dword ptr [pGirl+edx]
  test ecx,ecx
  js short @f
  mov dword ptr [eax+edx],ecx}
origGirls:
  readmem(aobGirls,6)
  jmp return

aobGirls:
  jmp start
  nop
return:


[DISABLE]

aobGirls:
  //db 8B 40 3C 89 04 24
  readmem(origGirls,6)

unregistersymbol(origGirls)
unregistersymbol(pGirl)
unregistersymbol(aobGirls)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1e

IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged: 55                    - push ebp
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1: 8B EC                 - mov ebp,esp
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+3: 53                    - push ebx
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+4: 56                    - push esi
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+5: 83 EC 60              - sub esp,60
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+8: C7 45 D4 00 00 00 00  - mov [ebp-2C],00000000
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+f: 8B 45 08              - mov eax,[ebp+08]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+12: 39 45 0C              - cmp [ebp+0C],eax
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+15: 0F 85 B7 01 00 00     - jne IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1d2
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1b: 8B 45 08              - mov eax,[ebp+08]
// ---------- INJECTING HERE ----------
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+1e: 8B 40 3C              - mov eax,[eax+3C]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+21: 89 04 24              - mov [esp],eax
// ---------- DONE INJECTING  ----------
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+24: 8D 6D 00              - lea ebp,[ebp+00]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+27: E8 64 E1 8A 2E        - call IPS.Engine.Game.Localization:GetRaceKey
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+2c: 89 04 24              - mov [esp],eax
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+2f: E8 E4 7C 8A 2E        - call IPS.Engine.Game.Localization:Get
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+34: 89 45 E4              - mov [ebp-1C],eax
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+37: 8B 48 08              - mov ecx,[eax+08]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+3a: 8B 45 08              - mov eax,[ebp+08]
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+3d: 89 45 C8              - mov [ebp-38],eax
IPS.Engine.Game.Peoples.Girl:OnTooltipIdentifierChanged+40: 8B 40 0C              - mov eax,[eax+0C]
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>341</ID>
                  <Description>"pGirl (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>pGirl</Address>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>3410</ID>
                      <Description>"&lt;Level&gt;"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.&lt;Level&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3411</ID>
                      <Description>"&lt;ClothesTransparency&gt;"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Girl.&lt;ClothesTransparency&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3412</ID>
                      <Description>"m_Xp"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Girl.m_Xp</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3413</ID>
                      <Description>"&lt;TotalXpFromPreviousLevels&gt;"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Girl.&lt;TotalXpFromPreviousLevels&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3414</ID>
                      <Description>"&lt;HappinessMax&gt;"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.&lt;HappinessMax&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3415</ID>
                      <Description>"&lt;StaminaMax&gt;"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.&lt;StaminaMax&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3416</ID>
                      <Description>"&lt;IsMating&gt;"</Description>
                      <DropDownList DisplayValueAsItem="1">-1:Ignore
1:Yes
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+Girl.&lt;IsMating&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3417</ID>
                      <Description>"Happiness"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Happiness</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3418</ID>
                      <Description>"Stamina"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Stamina</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3419</ID>
                      <Description>"Beauty"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Beauty</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34110</ID>
                      <Description>"ChestSize (since I check on &lt;=0 you can't set SS=-1 or S=0, but you can shrink them)"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_ChestSize</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34111</ID>
                      <Description>"SexSkill"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_SexSkill</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34112</ID>
                      <Description>"ForeplaySkill"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_ForeplaySkill</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34113</ID>
                      <Description>"AnalSkill"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_AnalSkill</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34114</ID>
                      <Description>"Endurance"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Endurance</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34115</ID>
                      <Description>"Resilience"</Description>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Girl.m_Resilience</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34116</ID>
                      <Description>"CanAnal"</Description>
                      <DropDownList DisplayValueAsItem="1">-1:Ignore
1:Yes
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+Girl.m_CanAnal</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34117</ID>
                      <Description>"HasYuriTalent"</Description>
                      <DropDownList DisplayValueAsItem="1">-1:Ignore
1:Yes
</DropDownList>
                      <ShowAsSigned>1</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+Girl.m_HasYuriTalent</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>35</ID>
              <Description>"World (incl. Brothel) Pointers"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <Color>4080FF</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2025-04-10
  Author : Nironan

  Get World Pointers incl. Brothel, Hiring, Bank infos
}

[ENABLE]

//aobscan(aobGetWorld,39 00 8D 6D 00 E8 E4 07 E7)
aobscanregion(aobGetWorld,IPS.Engine.Game.World:Update,IPS.Engine.Game.World:Update+BB,39 00 8D 6D 00 E8 * * * * D9)
alloc(newmem,$100)
registersymbol(aobGetWorld)

label(pWorld)
registersymbol(pWorld)

newmem:
pWorld:
  dq 0
  dq 0
start:
  mov [pWorld],edi
code:
//  cmp [eax],eax
//  lea ebp,[ebp+00]
  jmp return

aobGetWorld:
  jmp start
return:


[DISABLE]

aobGetWorld:
  db 39 00 8D 6D 00

unregistersymbol(pWorld)
unregistersymbol(aobGetWorld)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Game.World:Update+1a

IPS.Engine.Game.World:Update+3: 53                 - push ebx
IPS.Engine.Game.World:Update+4: 57                 - push edi
IPS.Engine.Game.World:Update+5: 56                 - push esi
IPS.Engine.Game.World:Update+6: 83 EC 1C           - sub esp,1C
IPS.Engine.Game.World:Update+9: 8B 7D 08           - mov edi,[ebp+08]
IPS.Engine.Game.World:Update+c: 33 DB              - xor ebx,ebx
IPS.Engine.Game.World:Update+e: EB 27              - jmp IPS.Engine.Game.World:Update+37
IPS.Engine.Game.World:Update+10: 8B 47 1C           - mov eax,[edi+1C]
IPS.Engine.Game.World:Update+13: 89 5C 24 04        - mov [esp+04],ebx
IPS.Engine.Game.World:Update+17: 89 04 24           - mov [esp],eax
// ---------- INJECTING HERE ----------
IPS.Engine.Game.World:Update+1a: 39 00              - cmp [eax],eax
// ---------- DONE INJECTING  ----------
IPS.Engine.Game.World:Update+1c: 8D 6D 00           - lea ebp,[ebp+00]
IPS.Engine.Game.World:Update+1f: E8 E4 07 E7 D3     - call System.Collections.Generic.List`1[T_REF]:get_Item
IPS.Engine.Game.World:Update+24: D9 45 0C           - fld dword ptr [ebp+0C]
IPS.Engine.Game.World:Update+27: D9 5C 24 04        - fstp dword ptr [esp+04]
IPS.Engine.Game.World:Update+2b: 89 04 24           - mov [esp],eax
IPS.Engine.Game.World:Update+2e: 8B 00              - mov eax,[eax]
IPS.Engine.Game.World:Update+30: FF 90 08 01 00 00  - call dword ptr [eax+00000108]
IPS.Engine.Game.World:Update+36: 43                 - inc ebx
IPS.Engine.Game.World:Update+37: 8B 47 1C           - mov eax,[edi+1C]
IPS.Engine.Game.World:Update+3a: 89 04 24           - mov [esp],eax
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>351</ID>
                  <Description>"Brothel (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>[pWorld]+World.&lt;Brothel&gt;k__BackingField</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>3511</ID>
                      <Description>"&lt;YesterdayRank&gt; (useless, info only)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;YesterdayRank&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3512</ID>
                      <Description>"&lt;FloorCount&gt; (useless, info only)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;FloorCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3513</ID>
                      <Description>"&lt;MaxEmployeeCount&gt; (works next day, may buggy)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;MaxEmployeeCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3514</ID>
                      <Description>"&lt;MaxCustomerCount&gt; (dont add more than above)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;MaxCustomerCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3515</ID>
                      <Description>"&lt;MaxFloorCount&gt; (works next day)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;MaxFloorCount&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3516</ID>
                      <Description>"&lt;RoomsPerFloor&gt; (Change works but floors might be hardly accessible and not transfered to next stage)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.&lt;RoomsPerFloor&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3517</ID>
                      <Description>"Reputation (works next time/day)"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Brothel.m_Reputation</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3518</ID>
                      <Description>"Rank"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.m_Rank</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3519</ID>
                      <Description>"Gold"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.m_Gold</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>35110</ID>
                      <Description>"PreviousDayGold"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Brothel.m_PreviousDayGold</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>352</ID>
                  <Description>"Hiring (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>[pWorld]+World.&lt;HiringPool&gt;k__BackingField</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>3521</ID>
                      <Description>"PoolSize"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+HiringPool.&lt;PoolSize&gt;k__BackingField</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3522</ID>
                      <Description>"Force Race Spawn active"</Description>
                      <DropDownList DisplayValueAsItem="1">0: No
1: Yes
</DropDownList>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>+HiringPool.m_IsForcingRaceSpawn</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3523</ID>
                      <Description>"Forced Race (= unlocked order)"</Description>
                      <DropDownList DisplayValueAsItem="1">0: Human (or Disabled) (1)
1: Half Beast (1)
2: Elf (1)
3: Mazoku (1)
4: Lamia (2)
5: Mermaid (2)
6: Dragonkin (3)
7: Harpy (1)
8: Alraune
9: Dryad
10: Arachne (3)
11: Wolf Girl
12: Sphinx (3)
13: Slime (1)
14: Nymph
</DropDownList>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+HiringPool.m_ForceRaceSpawn</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>353</ID>
                  <Description>"Bank (ignore this)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>0F0F0F</Color>
                  <GroupHeader>1</GroupHeader>
                  <Address>[pWorld]+World.&lt;Bank&gt;k__BackingField</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>3531</ID>
                      <Description>"InterestRate"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>+Bank.m_InterestRate</Address>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>3532</ID>
                      <Description>"Loan"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>+Bank.m_Loan</Address>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>354</ID>
                  <Description>"Day"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>[pWorld]+World.&lt;Day&gt;k__BackingField</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>355</ID>
                  <Description>"Turn"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>[pWorld]+World.&lt;Turn&gt;k__BackingField</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>36</ID>
              <Description>"Set Screen Resolution"</Description>
              <Options moHideChildren="1"/>
              <Color>808000</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 1.0
  Date   : 2024-03-29
  Author : Nironan

  Finds the mehtod to "SetResolution", defines some values, prepares calling and restores after
}

[ENABLE]
{$lua}
--if syntaxcheck then return end

--needed to find the right method to be able to correctly set fullscreenMode and preferredRefreshRate, else any would doo
local addr = tohex(findMethodAddrBySignature('UnityEngine','Screen','SetResolution','int,int,UnityEngine.FullScreenMode,int$',false))
unregisterSymbol("SetRes")
registerSymbol("SetRes", addr, false)
{$asm}

//aobscan(aobSetResolution,8B 86 98 00 00 00 8B 8E E0)
aobscanregion(aobSetResolution,IPS.Engine.Player.UI.Modules.UIOptions:Enable,IPS.Engine.Player.UI.Modules.UIOptions:Enable+AA,8B * * 00 00 00 8B * * 00)
registersymbol(aobSetResolution)

alloc(pSR,$100,aobSetResolution)
registersymbol(pSR)

label(rescode)
registersymbol(rescode)

// free: / used: ax,bx,cx,dx

pSR:
  dd #1920 //+0 width
  dd #1080 //+4 height
  dd 0     //+8 fullscreenMode - db would be enough but this way "start" starts at clean +10
  dd 0     //+C preferredRefreshRate
start: //preparing x86/64 calling convention
  push ebx
  push ecx
  push edx
  push dword ptr [pSR+C]
  push dword ptr [pSR+8]
  push dword ptr [pSR+4]
  push dword ptr [pSR]
  call SetRes //call a function - this involves saving an address to return to so it will continue here afterwards
  add esp, 10 //allign stack to through away above pushes
  pop edx
  pop ecx
  pop ebx
rescode:
  //mov eax,[esi+00000098] -- UIOptions + m_DifficultyScroll
  readmem(aobSetResolution,6)
  jmp return

aobSetResolution:
  jmp start
return:


[DISABLE]

aobSetResolution:
  //db 8B 86 98 00 00 00
  readmem(rescode,6)

unregistersymbol(rescode)
unregistersymbol(pSR)
unregistersymbol(aobSetResolution)
dealloc(pSR)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.Modules.UIOptions:Enable+24

IPS.Engine.Player.UI.Modules.UIOptions:Enable+4: 56                    - push esi
IPS.Engine.Player.UI.Modules.UIOptions:Enable+5: 83 EC 20              - sub esp,20
IPS.Engine.Player.UI.Modules.UIOptions:Enable+8: 8B 75 08              - mov esi,[ebp+08]
IPS.Engine.Player.UI.Modules.UIOptions:Enable+b: 8B 7D 0C              - mov edi,[ebp+0C]
IPS.Engine.Player.UI.Modules.UIOptions:Enable+e: 89 7C 24 04           - mov [esp+04],edi
IPS.Engine.Player.UI.Modules.UIOptions:Enable+12: 89 34 24              - mov [esp],esi
IPS.Engine.Player.UI.Modules.UIOptions:Enable+15: 8B C0                 - mov eax,eax
IPS.Engine.Player.UI.Modules.UIOptions:Enable+17: E8 B4 65 69 3C        - call IPS.Engine.Player.UI.Modules.UIWindow:Enable
IPS.Engine.Player.UI.Modules.UIOptions:Enable+1c: 85 C0                 - test eax,eax
IPS.Engine.Player.UI.Modules.UIOptions:Enable+1e: 0F 84 9B 00 00 00     - je IPS.Engine.Player.UI.Modules.UIOptions:Enable+bf
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.Modules.UIOptions:Enable+24: 8B 86 98 00 00 00     - mov eax,[esi+00000098]
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.Modules.UIOptions:Enable+2a: 8B 8E E0 00 00 00     - mov ecx,[esi+000000E0]
IPS.Engine.Player.UI.Modules.UIOptions:Enable+30: 8B D1                 - mov edx,ecx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+32: 39 12                 - cmp [edx],edx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+34: 0F B6 89 90 00 00 00  - movzx ecx,byte ptr [ecx+00000090]
IPS.Engine.Player.UI.Modules.UIOptions:Enable+3b: 85 C9                 - test ecx,ecx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+3d: 0F 94 C1              - sete cl
IPS.Engine.Player.UI.Modules.UIOptions:Enable+40: 0F B6 C9              - movzx ecx,cl
IPS.Engine.Player.UI.Modules.UIOptions:Enable+43: 89 4C 24 04           - mov [esp+04],ecx
IPS.Engine.Player.UI.Modules.UIOptions:Enable+47: 89 04 24              - mov [esp],eax
IPS.Engine.Player.UI.Modules.UIOptions:Enable+4a: 39 00                 - cmp [eax],eax
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>361</ID>
                  <Description>"Width"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>362</ID>
                  <Description>"Height"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR+4</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>363</ID>
                  <Description>"FullscreenMode"</Description>
                  <DropDownList ReadOnly="1" DisplayValueAsItem="1">0:ExclusiveFullScreen
1:FullScreenWindow
2:MaximizedWindow
3:Windowed
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR+8</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>364</ID>
                  <Description>"preferredRefreshRate (dunno if that works)"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>pSR+C</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>37</ID>
              <Description>"Allow all passwords on unlock"</Description>
              <Color>23245C</Color>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Isekai Parlor Simulator.exe
  Version: 
  Date   : 2024-05-30
  Author : Nironan

  Disables the jump if the entered pw doesnt match the stored ones
}

[ENABLE]
{$lua}
print("It unlocks: GalleryRaces, GalleryCGs (now, because I'm stupid, hmhm was sick I mean), and in future may Sandboxes")
{$asm}

//aobscan(aobAllPW,0F 84 36 02 00 00 C7)
aobscanregion(aobAllPW,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+99,0F 84 * * 00 00 C7)
registersymbol(aobAllPW)
//aobscan(aobGalNoJmp,E9 ED 01 00 00 8B 45 08)
aobscanregion(aobGalNoJmp,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted,IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+200,E9 * * 00 00 8B 45 * 8B)
registersymbol(aobGalNoJmp)

alloc(retpw,$100)
registersymbol(retpw)

retpw:
  readmem(aobAllPW,6)
  readmem(aobGalNoJmp,5)
aobAllPW:
  nop 6
aobGalNoJmp:
  nop 5

[DISABLE]

aobAllPW:
  //db 0F 84 36 02 00 00
  readmem(retpw,6)
aobGalNoJmp:
  //db E9 ED 01 00 00
  readmem(retpw+6,5)

unregistersymbol(aobGalNoJmp)
unregistersymbol(aobAllPW)
unregistersymbol(retpw)
dealloc(retpw)

{
// ORIGINAL CODE - INJECTION POINT: IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+46

IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+23: 39 58 0C                 - cmp [eax+0C],ebx
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+26: 0F 86 84 02 00 00        - jbe IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+2b0
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+2c: 8D 44 98 10              - lea eax,[eax+ebx*4+10]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+30: 8B 00                    - mov eax,[eax]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+32: 8B 4D 0C                 - mov ecx,[ebp+0C]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+35: 89 4C 24 04              - mov [esp+04],ecx
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+39: 89 04 24                 - mov [esp],eax
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+3c: 8D 6D 00                 - lea ebp,[ebp+00]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+3f: E8 4C 10 9F 17           - call System.String:op_Equality
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+44: 85 C0                    - test eax,eax
// ---------- INJECTING HERE ----------
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+46: 0F 84 36 02 00 00        - je IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+282
// ---------- DONE INJECTING  ----------
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+4c: C7 04 24 02 00 00 00     - mov [esp],00000002
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+53: E8 98 10 D3 19           - call IPS.Engine.Audio.AudioManager:PlaySfx
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+58: 8B 45 08                 - mov eax,[ebp+08]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+5b: 8B 80 BC 00 00 00        - mov eax,[eax+000000BC]
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+61: C7 44 24 04 F0 0F A0 07  - mov [esp+04],07A00FF0
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+69: 89 04 24                 - mov [esp],eax
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+6c: 39 00                    - cmp [eax],eax
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+6e: 90                       - nop 
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+6f: E8 8C 02 00 00           - call TMPro.TMP_InputField:set_text
IPS.Engine.Player.UI.UIMainMenu:OnPasswordSubmitted+74: 89 5D E0                 - mov [ebp-20],ebx
}
</AssemblerScript>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>4</ID>
      <Description>"Print debug infos to report (on errors)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local gmstart = tostring(getAddressSafe("pgobj") or nil)
local monopt
if monopipe then monopt = tostring(monopipe.OnTimeout) else monopt='nil' end
print(getCEVersion(),process,' p/m:',gmstart,monopt)

if not var then
  print("Try enable first please")
else
  var.force = true
  switchActiveMR(0)
  switchActiveMR(0,true)
end
{$asm}

[DISABLE]
{$lua}

if var then var.force = false end
if switchActiveMR then switchActiveMR(0) end
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
</CheatTable>
