<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <Files>
    <cemono.lua Encoding="Ascii85">*mUwB,cps1+A(PP+f-8yAgPfRJ6ku?t/vRnDA1%u9Sj44G,-n.5h^y/L=]uz/,tySZ:z(7O/z82D2mAB?p$+#?wp?G?4x$QGAk01?q%12F(5P/5wnWz%{=l+]L*15Va3F(gJAs.A,*YpC44b2(14YAUM.Guxbni?VO8.JL:HceED/av1qk%y!ki}GCw0PSg(:WjuYDZzrBpUCB0FS2#5F5$l#mIpNEQ!5J:-6Wl(=QpvudTPj#?vHD%X?(IU1qCB#wzPU2m_4JAh2V1)BZ0ar}TBh0*FOnwg:Dup(j;?W:kwb48Y}Ka$hyk1Vn?O@/oOt!czZVCs?4EF=)_pn[,DiY$=TD-jYtnK*le7/eS_c6D%P!6yKboRs=93D:vUF{.b2ls[2+dh+MJL7Jo1b_j+xcQHQd8BJ}o+vG6Ebte!ym$VieXLo[zrUY_@-*m6vdQoI^@dRD[CN!?YP3J[e]:J+(urGR6=(D(xW)we6OtK:C0{l8KD^YYxkEJ%98];x{B}8FIk:u[t24*2TkZ^ayfa72!!)-w1PB;9_CXmEwWBj)xCCnL^iB1628Bjh:Z60Ab01UyJjBnf[%IDfl9b_BD6Y:H-OvzHVPxJheCLjDpU8wzcmaB.fviFq#p7TqZ,pS*M_LVx%!Eg.@#Zkuc*WR-px=sg?s;c1,HV/]5/[)0S0jClwYt)0}GW*qf(m12mV{HfKDtK6+J7UZcVkq+n$t2A=B-V%WvGq-_(sx6@YRuSKb{r,77ZdM;/{-G2.h7^[bI-[OuAyn+J/QpZDGpp*Gg8qTW01Rrva%)oNNvFol/C-**nk:akmD1IjHV%MYij=FBH}=}j6H;lv,o})2?sC//]h0pxgLAX]G.9}:I*I$ICZY:T5vPgjK4Tz/G1N(^bBG#M}W:5WV.!JlrM8SKW5@Zr!eKEVw[zSEPYi7cEu^]5b5]C#KA4E)ym!nXH0)S+tItotj[,z^hmF0X4Q-)-;Ss08Du^mexTHf]_1f66N(7SIx?lW5SQ}JpMOQ!FcVVYs)SJ+coz=%ULsX1w!D^k9o{6^yUU8h:W}::!3#EC*?10}:Gl2KFjzDl1qMR7W?yK1Q[SNi?3LQ4vm#t:m59NX-88LOU61L,m5#h9Qjybj*%#6N[(*_vxI*2IIDN5zQ(Wlz^S7/RryHg(/49V.5vOV]2wDyT-R/#xUev.E1-x-J4+?Vk%[Xnv;?sI*zxHi0!g_XV;^?D)M.lk0V(t%NgJzqgmH5Mmx,A-itUGdFOs+DzFJm(xTBu?Gp5DV=ZfkrWg^3Ut(6}xw_E,EbSikfoAsmGIrl3IS,zz6OP5BKws]zvT89V*b%XlD*Q.ygv%J/:Sm:^-$3p7ly/anXyX@UZ:P_zhg6?{s61nVxb5J[}Ys:S}t0!OA4?[%Chrx._T$ota@LE3g*gf0:+GPv7gN.aSv-r1r]V-J/l#-G.lrs1^*N[lVz6LeJ1F8wUbHitUv)W@@r36f5blf?9Liic/YXessU;(L6}zDhwFdA+av+fOAU13U=u2xU)z$@3v%X.wgLoej?J,$dNyQsuyLwSS!/?u#d#,%V:U3$@N_NbA0{LXh$ZB#uE)HGjtvXeIXM2cV_PO5CAQ31Ptn;Usgts};_F/3W{KePWG3Fv#)^krxuFVc]aM3l[soa#{[E/{3s?hEr*yCC#}jv(ICIlIZ1]UD7AR@N02vyJZPO;WDaCg@-09t@WyV[q-R[Cy(M-%c70{(A]1zShZNJj81#uTP)4IP)M-ZI{aSqX-qU_sy%RVGxaE]A[qX+#YehqVU.,sg$9ImbdaSsffxk8W+[}/HE*^N2f6H26^ST%U1hA]TUs$m.=oLRVi+]-@V^88wcs!e3fKcvPpvVj$Kcwk0S%!JRl$EJuEWocD.kSVkWI1+d*sc_%ZI,Z[##C70]g,e;a]YieDW65x}4oJ7;I);h8eUsM^QJA*DFkX08OQ(^H%;(m_zTDMgSoaJDR@zD^:-%,^GALthxAW$3=1DO8B$^CcRKfef-mK.%e]_)#F/9s,n*SrDnwq(9ju*S?n::f5yG^aObJmVVzJ^$;/7.cJFyFgnvQMdFcD)t.^[n=Tex5Rv?$GSR4.l-36Pt@0baScPxcp=YAz0ax1,6Hxm;ZeYw_TJ@Es{YByLefmQS7.L4#9P,JoTxEGGd3qZ_,1tUA.rY60h*fC0h66tN#TaQjDr3Oht(*TbxeM.6$1REHrm8fi1Y^odt*n[0VFZHBH$j++68,ySVPg_=swqbMxEnsr)WRm-}ZL,/*r/[*b-1Fbfc@L{0Z$ta/@Xkg(#r^?vv!cYuM4bF+S(L.-*JaAtRc_S/Ijt{y()8cH,Su$rd3pB!TwY;uv^tF=MR48I%KSvOx6bMjX0o4zL)Pb8j)8go^:}GruHp3)H*RDZ0[Wks*m}$Fjrlmx.P=C2LX]DrYwPy+HiEE0VJ?z,f/:JC7A%]hw^9_aD_neDQF(dyEaRuY^xp2Lz5Oo</cemono.lua>
  </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!'..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 = 'Kinky Fight Club 2.exe' -- string - primary name of the exe to attach
var.pn2 = '' -- 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 preven 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()
        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('KYFC.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('KYFC.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", tostring(addr)) end
  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()

  -- clean Structures and Pointer
  if unsetSaP() then switchActiveMR(0) return end
  -- define the structures for offsets to get
                 --[[{'','',true,2,0x1C,16}, -- NS/class/static fields/loop-start/start-offset/loop-offset
                 {'','',true,1,0x1C,16}, -- static fields are needed for enums
  local funcs = {{'','KYFC',false},
                 {'','NSFWSettings',false},
                 {'','KCharacter',false},
                 {'','GameSetup',false}}

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

  --[[local gmstart = monoStaticF('','KYFC') --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)
  end
   ]]

    autoAssemble([[
    alloc(gmalloc,1024,KYFC.Update)
    registersymbol(gmalloc)
    ]])

  if type(monopipe)~='userdata' then
    print("Mono crashed it seems, renabling it")
    local monoresult = LaunchMonoDataCollector()
    if monoresult == 0 then
      print("Mono could not reenable")
  end 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 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 type(monopipe)=='userdata'then
    if monopipe.OnTimeout then
      monopipe.OnTimeout()
      if var.dbg then print("mono - OnTimeout") end
    else
      monopipe=nil,monopipe.Destroy()
      if var.dbg then print("mono - Destroy") end
end end 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
  if gmstart then
    unregisterSymbol("pgmstart")
    if var.dbg then print("Structures and symbol removed") end
  end
  if var.dbg then 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>3</ID>
          <Description>"Shop no money loss"</Description>
          <Color>00AAAA</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Kinky Fight Club 2.exe
  Version: 
  Date   : 2024-05-31
  Author : Nironan

  disables code that reduces the money after buying clothes
}

[ENABLE]

//aobscanmodule(aobShopNoLoss,GameAssembly.dll,2B 83 90 01 00 00 89 42)
aobscanregion(aobShopNoLoss,Shop.BuyClothing+50,Shop.BuyClothing+1FF,2B 83 * * 00 00 89 42)
registersymbol(aobShopNoLoss)

gmalloc:
  //sub eax,[rbx+00000190]
  readmem(aobShopNoLoss,6)

aobShopNoLoss:
  nop 6

[DISABLE]

aobShopNoLoss:
  //db 2B 83 90 01 00 00
  readmem(gmalloc,6)

unregistersymbol(aobShopNoLoss)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Shop.BuyClothing+13F / GameAssembly.dll+5C5F4F

GameAssembly.dll+5C5F1D: 75 13                 - jne GameAssembly.dll+5C5F32
GameAssembly.dll+5C5F1F: 48 8D 0D 7A 5A C8 01  - lea rcx,[GameAssembly.dll+224B9A0]
GameAssembly.dll+5C5F26: E8 15 70 CB FF        - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+5C5F2B: C6 05 CF 91 D9 01 01  - mov byte ptr [GameAssembly.dll+235F101],01
GameAssembly.dll+5C5F32: 48 8B 05 67 5A C8 01  - mov rax,[GameAssembly.dll+224B9A0]
GameAssembly.dll+5C5F39: 48 8B 88 B8 00 00 00  - mov rcx,[rax+000000B8]
GameAssembly.dll+5C5F40: 48 8B 11              - mov rdx,[rcx]
GameAssembly.dll+5C5F43: 48 85 D2              - test rdx,rdx
GameAssembly.dll+5C5F46: 0F 84 81 02 00 00     - je GameAssembly.dll+5C61CD
GameAssembly.dll+5C5F4C: 8B 42 28              - mov eax,[rdx+28]
// ---------- INJECTING HERE ----------
GameAssembly.dll+5C5F4F: 2B 83 90 01 00 00     - sub eax,[rbx+00000190]
// ---------- DONE INJECTING  ----------
GameAssembly.dll+5C5F55: 89 42 28              - mov [rdx+28],eax
GameAssembly.dll+5C5F58: 80 3D A2 91 D9 01 00  - cmp byte ptr [GameAssembly.dll+235F101],00
GameAssembly.dll+5C5F5F: 75 13                 - jne GameAssembly.dll+5C5F74
GameAssembly.dll+5C5F61: 48 8D 0D 38 5A C8 01  - lea rcx,[GameAssembly.dll+224B9A0]
GameAssembly.dll+5C5F68: E8 D3 6F CB FF        - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+5C5F6D: C6 05 8D 91 D9 01 01  - mov byte ptr [GameAssembly.dll+235F101],01
GameAssembly.dll+5C5F74: 48 8B 05 25 5A C8 01  - mov rax,[GameAssembly.dll+224B9A0]
GameAssembly.dll+5C5F7B: 48 8B 88 B8 00 00 00  - mov rcx,[rax+000000B8]
GameAssembly.dll+5C5F82: 48 8B 01              - mov rax,[rcx]
GameAssembly.dll+5C5F85: 48 85 C0              - test rax,rax
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>1</ID>
          <Description>"Reset PlayerArousal/Energy/Focus (play 1-2 sec)"</Description>
          <Options moHideChildren="1"/>
          <Color>404080</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Kinky Fight Club 2.exe
  Version: 
  Date   : 2024-05-31
  Author : Nironan

  Saves some addr and sets values
}

[ENABLE]

//aobscanmodule(aobUIStats,GameAssembly.dll,66 0F 6E 88 B0 00 00 00)
aobscanregion(aobUIStats,UIManager.UpdateStatusBars,UIManager.UpdateStatusBars+99,66 0F 6E 88 B0 00 00 00 33)
registersymbol(aobUIStats)

gmalloc+10:
  //here an addr will be saved to
  //readmem(aobUIStats,8)
gmalloc+20:
  mov [gmalloc+10],rax
  mov [rax+000000B0],0 //PlayerArousal
  mov [rax+000000B4],100 //PlayerEnergy
  mov [rax+000000B8],100 //PlayerFocus

code:
  movd xmm1,[rax+000000B0]
  jmp return

aobUIStats:
  jmp gmalloc+20
  nop 3
return:


[DISABLE]

aobUIStats:
  db 66 0F 6E 88 B0 00 00 00

unregistersymbol(aobUIStats)

{ UIManager.UpdateStatusBars+3C / 75 / A4

// ORIGINAL CODE - INJECTION POINT: GameAssembly.dll+5DAD3C

GameAssembly.dll+5DAD0D: 48 8B D9                 - mov rbx,rcx
GameAssembly.dll+5DAD10: 75 13                    - jne GameAssembly.dll+5DAD25
GameAssembly.dll+5DAD12: 48 8D 0D 57 0B C5 01     - lea rcx,[GameAssembly.dll+222B870]
GameAssembly.dll+5DAD19: E8 22 22 CA FF           - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+5DAD1E: C6 05 7F 46 D8 01 01     - mov byte ptr [GameAssembly.dll+235F3A4],01
GameAssembly.dll+5DAD25: 48 8B 43 18              - mov rax,[rbx+18]
GameAssembly.dll+5DAD29: 48 89 7C 24 58           - mov [rsp+58],rdi
GameAssembly.dll+5DAD2E: 0F 29 74 24 30           - movaps [rsp+30],xmm6
GameAssembly.dll+5DAD33: 48 85 C0                 - test rax,rax
GameAssembly.dll+5DAD36: 0F 84 46 07 00 00        - je GameAssembly.dll+5DB482
// ---------- INJECTING HERE ----------
GameAssembly.dll+5DAD3C: 66 0F 6E 88 B0 00 00 00  - movd xmm1,[rax+000000B0]
// ---------- DONE INJECTING  ----------
GameAssembly.dll+5DAD44: 33 FF                    - xor edi,edi
GameAssembly.dll+5DAD46: F3 0F 10 35 B6 24 58 01  - movss xmm6,[GameAssembly.dll+1B5D204]
GameAssembly.dll+5DAD4E: 45 33 C9                 - xor r9d,r9d
GameAssembly.dll+5DAD51: 48 8B 8B 50 03 00 00     - mov rcx,[rbx+00000350]
GameAssembly.dll+5DAD58: 0F 28 D6                 - movaps xmm2,xmm6
GameAssembly.dll+5DAD5B: 0F 5B C9                 - cvtdq2ps xmm1,xmm1
GameAssembly.dll+5DAD5E: 48 89 7C 24 20           - mov [rsp+20],rdi
GameAssembly.dll+5DAD63: E8 18 84 D9 FF           - call DG.Tweening.DOTweenModuleUI.DOValue
GameAssembly.dll+5DAD68: 48 8B 43 18              - mov rax,[rbx+18]
GameAssembly.dll+5DAD6C: 48 85 C0                 - test rax,rax
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>11</ID>
              <Description>"Open Structure"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
{$lua}
  local addr = "[gmalloc+10]"
  local ceaddr = getAddressSafe(addr)
  local strname = "KYFC"
  --[[local struct = createStructure(strname)
  struct.fillFromDotNetAddress(ceaddr, true)
  struct.addToGlobalStructureList()]]
  createStructureForm(addr, nil, strname)

  print("currently not working direcly - on struct form hit: CTRL+N and 2x ENTER")
{$asm}

00000000:
nop
[DISABLE]
</AssemblerScript>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"No arusal gain on few actions"</Description>
          <Color>800080</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Kinky Fight Club 2.exe
  Version: 
  Date   : 2024-06-01
  Author : Nironan

  Disables arusal when function is called
}

define(addrAr,KYFC.DamageArousalPlayer)
define(bytes,48 89)


[ENABLE]
assert(addrAr,bytes)

//aobscanmodule(aobDisableArousal,GameAssembly.dll,DC FF CC CC CC CC 48 89 5C 24 10)

addrAr:
  db C3

[DISABLE]

addrAr:
  db bytes

{
// ORIGINAL CODE - INJECTION POINT: KYFC.DamageArousalPlayer

GameAssembly.dll+4B83E3: 48 8B 5C 24 48        - mov rbx,[rsp+48]
GameAssembly.dll+4B83E8: 0F 28 74 24 20        - movaps xmm6,[rsp+20]
GameAssembly.dll+4B83ED: 48 83 C4 30           - add rsp,30
GameAssembly.dll+4B83F1: 5F                    - pop rdi
GameAssembly.dll+4B83F2: E9 09 29 12 00        - jmp UIManager.UpdateStatusBars
GameAssembly.dll+4B83F7: E8 C4 4C DC FF        - call GameAssembly.il2cpp_method_get_class+80
GameAssembly.dll+4B83FC: CC                    - int 3 
GameAssembly.dll+4B83FD: CC                    - int 3 
GameAssembly.dll+4B83FE: CC                    - int 3 
GameAssembly.dll+4B83FF: CC                    - int 3 
// ---------- INJECTING HERE ----------
KYFC.DamageArousalPlayer: 48 89 5C 24 10        - mov [rsp+10],rbx
// ---------- DONE INJECTING  ----------
GameAssembly.dll+4B8405: 57                    - push rdi
GameAssembly.dll+4B8406: 48 83 EC 30           - sub rsp,30
GameAssembly.dll+4B840A: 80 3D 7D 6D EA 01 00  - cmp byte ptr [GameAssembly.dll+235F18E],00
GameAssembly.dll+4B8411: 8B FA                 - mov edi,edx
GameAssembly.dll+4B8413: 0F 29 74 24 20        - movaps [rsp+20],xmm6
GameAssembly.dll+4B8418: 48 8B D9              - mov rbx,rcx
GameAssembly.dll+4B841B: 75 13                 - jne GameAssembly.dll+4B8430
GameAssembly.dll+4B841D: 48 8D 0D 7C 55 D6 01  - lea rcx,[GameAssembly.dll+221D9A0]
GameAssembly.dll+4B8424: E8 17 4B DC FF        - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+4B8429: C6 05 5E 6D EA 01 01  - mov byte ptr [GameAssembly.dll+235F18E],01
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"No energy loss on few actions"</Description>
          <Color>804000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Kinky Fight Club 2.exe
  Version: 
  Date   : 2024-06-01
  Author : Nironan

  Disables energy loss when function is called
}

define(addrAr,KYFC.SubstractEnergyPlayer)
define(bytes,48 83)


[ENABLE]
assert(addrAr,bytes)

//aobscanmodule(aobSubEnergy,GameAssembly.dll,48 83 EC 28 29 91 B4 00 00 00)

addrAr:
  db C3

[DISABLE]

addrAr:
  db bytes

{
KYFC.UseStruggle

// ORIGINAL CODE - INJECTION POINT: KYFC.DamageArousalPlayer

GameAssembly.dll+4B83E3: 48 8B 5C 24 48        - mov rbx,[rsp+48]
GameAssembly.dll+4B83E8: 0F 28 74 24 20        - movaps xmm6,[rsp+20]
GameAssembly.dll+4B83ED: 48 83 C4 30           - add rsp,30
GameAssembly.dll+4B83F1: 5F                    - pop rdi
GameAssembly.dll+4B83F2: E9 09 29 12 00        - jmp UIManager.UpdateStatusBars
GameAssembly.dll+4B83F7: E8 C4 4C DC FF        - call GameAssembly.il2cpp_method_get_class+80
GameAssembly.dll+4B83FC: CC                    - int 3 
GameAssembly.dll+4B83FD: CC                    - int 3 
GameAssembly.dll+4B83FE: CC                    - int 3 
GameAssembly.dll+4B83FF: CC                    - int 3 
// ---------- INJECTING HERE ----------
KYFC.DamageArousalPlayer: 48 89 5C 24 10        - mov [rsp+10],rbx
// ---------- DONE INJECTING  ----------
GameAssembly.dll+4B8405: 57                    - push rdi
GameAssembly.dll+4B8406: 48 83 EC 30           - sub rsp,30
GameAssembly.dll+4B840A: 80 3D 7D 6D EA 01 00  - cmp byte ptr [GameAssembly.dll+235F18E],00
GameAssembly.dll+4B8411: 8B FA                 - mov edi,edx
GameAssembly.dll+4B8413: 0F 29 74 24 20        - movaps [rsp+20],xmm6
GameAssembly.dll+4B8418: 48 8B D9              - mov rbx,rcx
GameAssembly.dll+4B841B: 75 13                 - jne GameAssembly.dll+4B8430
GameAssembly.dll+4B841D: 48 8D 0D 7C 55 D6 01  - lea rcx,[GameAssembly.dll+221D9A0]
GameAssembly.dll+4B8424: E8 17 4B DC FF        - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+4B8429: C6 05 5E 6D EA 01 01  - mov byte ptr [GameAssembly.dll+235F18E],01
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>10</ID>
          <Description>"No focus loss on few actions"</Description>
          <Color>4080FF</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Kinky Fight Club 2.exe
  Version: 
  Date   : 2024-06-01
  Author : Nironan

  Disables energy loss when function is called or dominate
}

define(addrAr,KYFC.SubstractFocusPlayer)
define(bytes,48 83)


[ENABLE]
assert(addrAr,bytes)
//aobscanmodule(aobSubEnergy,GameAssembly.dll,48 83 EC 28 29 91 B4 00 00 00)

//aobscanmodule(aobNoDomFoc,GameAssembly.dll,83 81 B4 00 00 00 E2 C7 81 F8 01 00 00 1A)
aobscanregion(aobNoDomFoc,KYFC.UseDominate,KYFC.UseDominate+60,83 81 * * 00 00 * C7)
registersymbol(aobNoDomFoc)

addrAr:
  db C3

gmalloc+40:
  //add dword ptr [rcx+000000B4],-1E
  readmem(aobNoDomFoc,6)
aobNoDomFoc:
  nop 7

[DISABLE]

addrAr:
  db bytes

aobNoDomFoc:
  //db 83 81 B4 00 00 00 E2
  readmem(gmalloc+40,6)

unregistersymbol(aobNoDomFoc)

{
KYFC.RealtimeCheckPerSecond+7A - here focus in time is added
KYFC.UseDominate+2D - adds resp subs if dom is used

// ORIGINAL CODE - INJECTION POINT: KYFC.DamageArousalPlayer

GameAssembly.dll+4B83E3: 48 8B 5C 24 48        - mov rbx,[rsp+48]
GameAssembly.dll+4B83E8: 0F 28 74 24 20        - movaps xmm6,[rsp+20]
GameAssembly.dll+4B83ED: 48 83 C4 30           - add rsp,30
GameAssembly.dll+4B83F1: 5F                    - pop rdi
GameAssembly.dll+4B83F2: E9 09 29 12 00        - jmp UIManager.UpdateStatusBars
GameAssembly.dll+4B83F7: E8 C4 4C DC FF        - call GameAssembly.il2cpp_method_get_class+80
GameAssembly.dll+4B83FC: CC                    - int 3 
GameAssembly.dll+4B83FD: CC                    - int 3 
GameAssembly.dll+4B83FE: CC                    - int 3 
GameAssembly.dll+4B83FF: CC                    - int 3 
// ---------- INJECTING HERE ----------
KYFC.DamageArousalPlayer: 48 89 5C 24 10        - mov [rsp+10],rbx
// ---------- DONE INJECTING  ----------
GameAssembly.dll+4B8405: 57                    - push rdi
GameAssembly.dll+4B8406: 48 83 EC 30           - sub rsp,30
GameAssembly.dll+4B840A: 80 3D 7D 6D EA 01 00  - cmp byte ptr [GameAssembly.dll+235F18E],00
GameAssembly.dll+4B8411: 8B FA                 - mov edi,edx
GameAssembly.dll+4B8413: 0F 29 74 24 20        - movaps [rsp+20],xmm6
GameAssembly.dll+4B8418: 48 8B D9              - mov rbx,rcx
GameAssembly.dll+4B841B: 75 13                 - jne GameAssembly.dll+4B8430
GameAssembly.dll+4B841D: 48 8D 0D 7C 55 D6 01  - lea rcx,[GameAssembly.dll+221D9A0]
GameAssembly.dll+4B8424: E8 17 4B DC FF        - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+4B8429: C6 05 5E 6D EA 01 01  - mov byte ptr [GameAssembly.dll+235F18E],01
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"Cheats enabled changing first number"</Description>
          <Color>808000</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : 0
  Version: 
  Date   : 2024-05-31
  Author : Nironan

  Disables check on right code for first button
}

[ENABLE]

//aobscanmodule(aobCheat,GameAssembly.dll,5B D2 FF C6 05 * * * * 01 83 BB 40 01 00 00 02) //+0A
aobscanregion(aobCheat,NSFWSettings.CheckForCheat,NSFWSettings.CheckForCheat+50,01 83 BB * * 00 00 * 0F)
registersymbol(aobCheat)
//aobscanmodule(aobCheatB1M,GameAssembly.dll,6E D2 FF C6 05 * * * * 01 83 BB 40 01 00 00 02)
aobscanregion(aobCheatB1M,NSFWSettings.CheatB1Minus,NSFWSettings.CheatB1Minus+FF,01 83 BB * * 00 00 * 0F)
registersymbol(aobCheatB1M)
//aobscanmodule(aobCheatB1P,GameAssembly.dll,6C D2 FF C6 05 * * * * 01 83 BB 40 01 00 00 02)
aobscanregion(aobCheatB1P,NSFWSettings.CheatB1Plus,NSFWSettings.CheatB1Plus+FF,01 83 BB * * 00 00 * 0F)
registersymbol(aobCheatB1P)

//backups of original code
  //cmp dword ptr [rbx+00000140],02
gmalloc+50:
  readmem(aobCheat+1,7)

aobCheat+1:
  jmp aobCheat+42 //skip all the checks on if the code selected is correct one
  nop 5

aobCheatB1M+1:
  jmp aobCheatB1M+42
  nop 5

//yeah just B1 - I mean you rarely so much code duplication - well quinltiplation?
//Not just on cheats - in lot parts of code

[DISABLE]

//restore original code
  //db 83 BB 40 01 00 00 02

aobCheat+1:
  readmem(gmalloc+50,7)

aobCheatB1M+1:
  readmem(gmalloc+50,7)

aobCheatB1P+1:
  readmem(gmalloc+50,7)

unregistersymbol(aobCheat)
unregistersymbol(aobCheatB1M)

{
NSFWSettings.CheckForCheat+25 / GameAssembly.dll+557447
NSFWSettings.CheatB1Minus+9F / GameAssembly.dll+5560BF
NSFWSettings.CheatB1Plus+9F / GameAssembly.dll+5562BF

// ORIGINAL CODE - INJECTION POINT: GameAssembly.dll+557445

GameAssembly.dll+55741E: CC                    - int 3 
GameAssembly.dll+55741F: CC                    - int 3 
NSFWSettings.CheckForCheat: 40 53                 - push rbx
GameAssembly.dll+557422: 48 83 EC 20           - sub rsp,20
GameAssembly.dll+557426: 80 3D A2 7E E0 01 00  - cmp byte ptr [GameAssembly.dll+235F2CF],00
GameAssembly.dll+55742D: 48 8B D9              - mov rbx,rcx
GameAssembly.dll+557430: 75 13                 - jne GameAssembly.dll+557445
GameAssembly.dll+557432: 48 8D 0D 6F 95 CB 01  - lea rcx,[GameAssembly.dll+22109A8]
GameAssembly.dll+557439: E8 02 5B D2 FF        - call GameAssembly.il2cpp_get_exception_argument_null+2A0
GameAssembly.dll+55743E: C6 05 8A 7E E0 01 01  - mov byte ptr [GameAssembly.dll+235F2CF],01
// ---------- INJECTING HERE ----------
GameAssembly.dll+557445: 83 BB 40 01 00 00 02  - cmp dword ptr [rbx+00000140],02
// ---------- DONE INJECTING  ----------
GameAssembly.dll+55744C: 0F 85 36 01 00 00     - jne GameAssembly.dll+557588
GameAssembly.dll+557452: 83 BB 44 01 00 00 03  - cmp dword ptr [rbx+00000144],03
GameAssembly.dll+557459: 0F 85 E9 00 00 00     - jne GameAssembly.dll+557548
GameAssembly.dll+55745F: 83 BB 48 01 00 00 05  - cmp dword ptr [rbx+00000148],05
GameAssembly.dll+557466: 0F 85 DC 00 00 00     - jne GameAssembly.dll+557548
GameAssembly.dll+55746C: 83 BB 4C 01 00 00 07  - cmp dword ptr [rbx+0000014C],07
GameAssembly.dll+557473: 0F 85 CF 00 00 00     - jne GameAssembly.dll+557548
GameAssembly.dll+557479: 83 BB 50 01 00 00 07  - cmp dword ptr [rbx+00000150],07
GameAssembly.dll+557480: 0F 85 C2 00 00 00     - jne GameAssembly.dll+557548
GameAssembly.dll+557486: 48 8B 0D 1B 95 CB 01  - mov rcx,[GameAssembly.dll+22109A8]
}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>12</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)

var.force = true
switchActiveMR(0)
switchActiveMR(0,true)

{$asm}

[DISABLE]
{$lua}
if syntaxcheck then return end

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