<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <Files>
    <File Name="borderless.ps1" Encoding="Ascii85">y.yBe8(=,YXCyxDAGmUmYHRJO!+.6])MoZQ0jtDV+saq;5gOYUd!,G/J9B3N=N-7j6bNL:rU9CSkR:O+l0e#}t3X1=j}UO^eCiL[FMICXu_0m[Md?{C!ZX,B/vGu{[ndq9(,k6=-}vh{N9FO$Swiw@(qp80c]T*{m=wl!idf{Ra.}$ZvqKm}Zg*Q;zR*.MX,*5vs4NPp2?mo}7]cXVP9]]eWF)w,As.WL)J9hbCi1,hx.+HwogD}%E{*Q/5d{5NUK5Hyux})C33A1:7@x^m$P:XCuQWlyDk89ktA/hDvW$p}k^CI0AX!1o6X$9+92GIIVx)x2Wp7j#MR]n,G6)_BQT$+qmF1-jMgr,,V/6TVUZZ/oECpnupr$BTBA:.PX:BA,s]60U-!,$K%+8w9jn{Qh:I%yi]lY%0^CIV.vQ.o1zpAV,MCCE8s97wE/:y4-)q=6QxBPamTzuV##,,TY,0ZA8ZGcps%@w%$!CvXjW?(%kT$m{n++Kp330BO9Kb!XsemQ+b_6.+h+?Pe}J8P_ydf^8Wu%^Of@x[MBYDb?1)Whqh.$36!F)B0o[x0kuUU.S#Ug)nrdvWR!l]Ou{rw(1}5uRQ,)hHA4,$IMWo(kf#-UDXKcsC79;jf{f*Qh)*?%!x:G?q_q(_d0OYx*%Yopaz=)F/F}#vD,_p7p_[Uihb8SkenO_JTg2zj$0AogH7)!,QZ$4)E+NO%$6?3C=i_K{ySGD%U3}ITe,TzA3$ZSH8DhS$kp{ELC34RJLz+b[CLCUwi?[[yVemb4hU]!sl;X6U,y2RzCWknJPcHi9jR{4I@Xbt,{-Cuy?(psj2k1F=+L/m$+0^C,+gUHHip0%!MU[6+)Wn%3p+ORxeQ$R5-6Cfh=2}X+z8XcA.@6oyH;0?C2izEQ=Tow45DMRFP9_upK1_$_j[:7uhdjlvntir^.)LT/.ada4s)@#O:{]1Apk_)xT_^BFNq#uac0WKo$BkB8rB,D469H[yXSTCoZ57+;j?;oJx2CA3y,BBqT?#K]^-_fM@aH)Zz?Y/Xq7NF@vIaz9#0i6s4;Dcu*q*(IR0w/,[52rbs;LDi8IA7XzyMGYLu}pTTLGNbU,ScP98_dfiP[17f/.r%9;zVfuXj!z%Omxu6Qr*tm(re=HH2ZF;P#:6z6;GL5.j5*[uwc$[[[$0FDg]_VNnp9j?%2+b*tjhd+ewmoz7B]kq25+P)FhV2@r[:0[.Z0:GMUZl_ntxx1LY9sV(O@[uht:4%.435O(Ukru-ukYd}m)CCkU8?Oq]%e;2#73=R4flqILDWC*[y5UHf6mYd2BPusP^dXVo/{7/5DtFYHypScvbFplpF:BjZ6r7t4n@Xj-u^{R-]?=2:mbrR)pVxo5+fNW@m$FG][kF,vGA8Q]HN?DTfqbe0,IeuudQ]5*itfyz*(I*j]R+CY?Lr!/zOHY:@cp:MX9hY2OZLN8Tq16HRD-DvwPX;Bjf43v9Mg*pEM?t%dft#tUoetPeQLWcE2/49aXlL%R4K[;ubjBrg7)XdHcuCj.;U-@v2}r+w+00@:Z6,kPBSA2tBWB6v{X#=e[t:VTu=8uCtAPqo=OfXlBkvYCK%4=7U.$@OwT}V_Jx7J7;.KnyYind1-(k,/9U=-fTjFp]2Qk6_A%N[xq-rd(6#rd0J,XyNeyUF1zej(kX:sTsDqYm@bL=jee+_J!0z2)YLvVt[0CZc,B1X$4?+:((CDo4SlT(Bvo%:@:B?}:lPUCV2Jn_8q$a[qKRT1E2Dy8HNSgd,{Sb}UsSf^fjS[nw13Zu-WFImIG):E4AA,..VUk*0NgOK.IB_iW}}XQ9z{D1u;$dUoY#(nHpTR],XR,*U6l1+*HTYBFrm:c:8lZnAB;^}qp*i3K4Dv-wtLw[Rf!f}s#88VEWci.irUve.}$5^.xlJEMy;m+v!foEvvJopmbYowdZ[7P%%_DS@{^F)X)}8?g3WQ/hxA+Po$_l$m{^$Sm}3,z:xo=zxyqpPV$5]qrSC.qOScEL,H+B./nqHkW9}L:WP6uv_I0XBH0}}#-}Md.xWrzo]/h+/V]PGzQs.hkw9QthUZ-re$9Nj8hQ?!rUArMU4r{S%9!zP?(_vGApT0T1zj0i:Wv,h%1ChCX^{_?E:Qkm0/L=jHx)yCaXcbmt[]W3F=7pNV6XdR:sC7EeDH3+PJ58kC$y$m-=0v{g*/bDw$C;FGJ1vc_PDnjd(AB?^o)5CDIwU+KUMC!9h5liNWxO]@8]Jh2XGZ}L2V+HAq*FCMqZ]IIE?sJq$EYIYcx8gU!}Gt;shp,TU}K;knJjrvb4/A(0-Ls36tv1!?guk2i}NX(@a_=tt.+B8C$mZKk8R0pC=^ag]gM{xZ4AoEf6J{JmxTLm/M.LZM:dLDYE[n3Q4*M06^bJ;pDI}[wkXmvISO5j0YEu9O@epo2-CWMa@*KnAeU,$r-V?fr_m)PZbXX!msRagD#,A3^m%d]%;M-</File>
    <File Name="borderless_psv5.ps1" Encoding="Ascii85">wODOW8(=,YXCyxDAGjh(wY9e6(}CLNyQ=[HfK@@B=5;lIA}YUf=2+PZ=#!J9w2g#KXdu9nO#_eGz;*=,A.6_-6%z;g3.Q3(Gh:]1U*VEq$M*EUkWE=).dwc*(pG!z[xiuT]^a^zD3KTu$1bG[$.zGQ(x:[suxZQ=!X$Vs](cp4,S1zcr+o_;2tFYp#dC7HlitPB7_E:{WeJk-+9s=L84-Af$1tl9P83j9/T-X65fLRY8p0Wo.3$[8a1x0Ux.(m]WZ6e.MR=4{7*gp=nHUjyUL56w6oLpcjF2;KuxUm{VZ.(Je-smMsNyR@UDY{9Mp.M+1r/rc0^KeDl9]ODS{g49OSgVGdPr}e-KV9gm-?:^@2$VMGpDV,Dy]2MyGzF6Mrmu.c)Z5ZU*P)}r/d#m*QLPbQrej/:Vn2%c)[q4%/6Nuiic0j6F/Te^n1bQy?RT_j_f}{-hePm,pAS$YVJEVx2NV0*cn3WxvfqvtCQ1e^.syS2A/X212sRZ:62NFzB-Y!A5K0tCG*S.$s;?g[pRoR*!Z70,xfwR9RNYwdq^0+Z;InvH3z2iYW{t+^-6qi^)Rkv:A{Bhs!qcH8Am9}YHm__Is/6XYc.o@:Kihb7S-I%j_1o2Urd1D8/mb]w5bgg9hV8t[}M,96h}!Ww/u+}R6PE,[}xx}Z;zNWL[1h4y{VW0y4}6mNG83paWLr)$TH3)]0*WIgHJR.eE:55?ekCL?$e:Bkw7Gjv_DfV#e(1$r8b)9BAcB_=Okks/Qq}1!ey^8ED$V-+)jF((aqfNNi;GX$i,%CWR)QKgIL{ylO4oA:qtzTB/697As8h?k%uL$WbBk8lE{KiXM^+79T$:wWZ(:,Mq*DVsvq-nt(8WwnXD*gSDONuf7ank?[d]etXCf,laM6An+K8*l7c-bm{Vq,0r(QmFQ5=7eZ46-nJ?(tAS*}hh!Y6v!6axVWY)ZQx,swViOUMdCou$;t%]XpMWLS:3yJ^chX=Kq?S22*A[/,SpONG:!v_#7R_1S8CWVt]b$yos(NDM:#N5=?Kcrzk:}e^xL+Rcu_6!SW^3_DOFxH*?^yJEl:-T!Is=;X+D5UBOYE;.PB:H!%PL2+;OYFCgs@?+8]VGUd;QaR!BFZN(MDr#rfG-jl0W{*i75a6Rez7*o=6=Oh:7rMDGb#Dk:@lGM)%I9GVg0eP;oj}S)={F#LN)*k![nB*z7T-oz3_1wGekpIs:@*qcL}R%!/Pq#x/W%B;L2s[_L8YAXJ]Zikyv/ez+Y(qk4mgJ9Q=9-D9_6WwfvvIhgRsyaIh}N8i/9uda8/kf5,+HR?tKQ$gt%r+c%w:33b[.9cODrdk5q3?IcpK,{8R0ogwzd2fBu1gAr4;u72mwBje=v?$)Ct9iM%#uinvKZ*$}tMQf+8jP=%*uSA1Gp@yddMaxvNa7gU^L2CQY!Oj@Lu2wBvXtq$@xnH$#qqU^(67oi1[^Y,cVpH/.W9]_jHn(tPOlT9c#.YGn;yNeh37}v![r8AbxU^*sY%iDBSGDO4=asWh@]f//ovkoPOzeh+2*@6CjP;.S0v9d-b,=ZIn/VK9=S)xkk3rxXU7FWBJO2h.=c5J(k5*[DZ_NrBm!mmtdbu/]qt8s{D;Kx2v9PIcKhf7V8lu2J02UX3b.^zuZ)xb+Hmhe%VnD8TIwaa^qNo%R0$Etnj,d!76SX:(rbsPg*0tyW.j1H8$WFkcu8u!@.ih[aT:2Y)o-2W^H72fI],]iCVL3AHM(F:8g=I-Pp0CA9p]fwq[xH6so7%#DX;%5!1E7k9d)P-;fw[b7*I2r7jQ_ccUonv..Bq4]^u)t@*?z/2YFRWgqLql-=c6:J*1yu2Nljph+F?/}0kw{XJe+/7,-8oo;HlcQb6Rdi-,e,]q1wIlqM}Hdg^fm492u_YDxx;,(idDpwy?+eK%nNnYHg[^:G/yj8[UzswQke(5N49zUJ,K^rx7@0$;0QLzIDzLVLK]*+yr/oO2eSFGJd_JudcMVSkO1a.uUbCp9-FFi6fXgYoj^I)*XaWrQ3.]=X?,wwee[Ao0+5UwtHsld,lgJyE}[U[mlQwk:_CioSqG$WSp+9XZJd2zuBqBDO.g0cfHln+vH$oxz4e4i+NVfi0DiW7J}8Yu;9a?Ie%MU^{xVf]qqOo944RNgsioHKBUj;.9$L0!m3Z-n:o77n-D}TT)u}wB/g.LgiV[75}-17*2N7k2-u!lDoyA)D[upWiF0d!*GF0jyVLWjGxgCa+;)0f!+Ql%9U,@xSjd=F5qiGLe#Xk0w!cYP6iV,TLvu:DEX27aNjG,6^kF{KM2*ZAbyj+Ymr9fW$IR8LnMz9Zrvlo=/[w((58KG*[aHwq?}@d5Fx[vLp4}kiU2^KtBDi)q1=+XWP7FNtxj5[5w8QcyV834fzP6XDrgXyWN.5J[fDa[Y5!d^2OO$^#d2?*40LRe*P*1CeL,l2@CM%pi2{e07ot)uiH@SkheVR8L)+mHa$[1wnY(@yhI.^T)</File>
  </Files>
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"コンパクトモード / Compact Mode"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

if not toggleCompactView then
    function toggleCompactView(sender, forceEnable)
        local isCompactMode = not (compactViewMenuItem.Caption == 'Compact View Mode')
        if forceEnable ~= nil then
            isCompactMode = not forceEnable
        end

    synchronize(function()
        compactViewMenuItem.Caption = isCompactMode and 'Compact View Mode' or 'Full View Mode'
        getMainForm().Splitter1.Visible = isCompactMode
        getMainForm().Panel4.Visible    = isCompactMode
        getMainForm().Panel5.Visible    = isCompactMode
    end)
end
end

if not createCompactViewMenu then
    function createCompactViewMenu()
        if isCompactMenuCreated then return end

    synchronize(function()
        local mainMenu = getMainForm().Menu.Items
        compactViewMenuItem = createMenuItem(mainMenu)
        mainMenu.add(compactViewMenuItem)
        compactViewMenuItem.Caption = 'Compact View Mode'
        compactViewMenuItem.OnClick = toggleCompactView
    end)

    isCompactMenuCreated = true
end
end

createCompactViewMenu()
toggleCompactView(nil, true)

[DISABLE]
{$lua}
if toggleCompactView then
    toggleCompactView(nil, false)
end

</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>135</ID>
      <Description>"init."</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$asm}
alloc(newmem, 100, $process)
label(TARGET_QUALITY)
label(TARGET_QUANTITY)
label(TARGET_QUANTITY_MIN)

newmem:
  TARGET_QUALITY:
  dd (float)120
  TARGET_QUANTITY:
  db 50
  TARGET_QUANTITY_MIN:
  db 3

registersymbol(TARGET_QUALITY)
registersymbol(TARGET_QUANTITY)
registersymbol(TARGET_QUANTITY_MIN)
{$lua}
if syntaxcheck then return end
if memrec then print(memrec.Description) end

-- Attempt to get process address
local baseAddress = getAddressSafe('Atelier_Ayesha.exe')

-- If Atelier_Ayesha.exe is not found, try to get Atelier_Ayesha_EN.exe
if baseAddress == nil then
  baseAddress = getAddressSafe('Atelier_Ayesha_EN.exe')
end

-- Check if the process is found
if baseAddress == nil then
  print("Please select process Atelier_Ayesha.exe first")
  print("Please close Cheat Engine and load this table again")
  print("最初に「Atelier_Ayesha.exe」プロセスを選択してください。")
  print("Cheat Engineを閉じて、再びこのテーブルをロードしてください。")
else
  g_containerBaseAddress = baseAddress + BaseContainerOffset
  g_equipsBaseAddress = baseAddress + EquipsOffset
  closeLuaEngine()
end



[DISABLE]
{$lua}
if syntaxcheck then return end
if memrec then print(memrec.Description) end

closeLuaEngine()

{$asm}
unregistersymbol(TARGET_QUALITY)
unregistersymbol(TARGET_QUANTITY)
unregistersymbol(TARGET_QUANTITY_MIN)
dealloc(newmem, 100)

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>180</ID>
          <Description>"いくつかのスクリプトを切り替える / Toggle some scripts"</Description>
          <Color>4080FF</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript Async="1">[ENABLE]
{$lua}
if (syntaxcheck) then return end
synchronize(function() getLuaEngine().menuItem5.doClick() end)
synchronize(function() getLuaEngine().Close() end)

local enableBattleScripts = {
  0, -- "コンパクトモード / Compact Mode"
  135, -- "init."
  92, -- "ゲームウィンドウをウィンドウモードからボーダーレスフルスクリーンに変更します / Set game window mode"
  102, -- "アイテムエディター / Item Editor"
  152, -- "思い出ptの乗数 / Memory pt. multiplier"
  156, -- "バトル：ダメージコントロール / Battle: Damage control"
  160, -- "バトル：MPが減少しません / Battle: inf. MP"
  161, -- "バトル後にHP/MP/LPを回復 / Recover HP/MP after battle"
  163, -- "バトル：最小アシストゲージを設定 / Battle: Set min. assist gauge"
  166, -- "バトル：最小スペシャルゲージを設定 / Battle: Set min. special gauge"
  168, -- "バトル：アイテムの数量が減少しない / Battle: no item quantity decrease"
  170, -- "錬金術経験値の倍率 / Alchemy EXP multiplier"
  174, -- "友情獲得倍率 / Friendship multiplier"
  176, -- "バトル：経験値獲得倍率 / EXP multiplier"
  182, -- "インフィニティCP - マテリアル / inf. CP - materials"
  183, -- "インフィニティCP - スキル / inf. CP - skills"
  150, -- "Date / time"
  179, -- "日付を取得 / Get current date"
}
local addressList = getAddressList()
synchronize(function()
  for _, id in ipairs(enableBattleScripts) do
    local memRec = addressList.getMemoryRecordByID(id)
    if memRec then
      memRec.Active = true
      sleep(50)
    end
    addressList.refresh()
  end
end)
synchronize(function() getLuaEngine().Close() end)
[DISABLE]
{$lua}
if (syntaxcheck) then return end
synchronize(function() getLuaEngine().menuItem5.doClick() end)
synchronize(function() getLuaEngine().Close() end)

local disableBattleScripts = {
  179, -- "日付を取得 / Get current date"
  184, -- "コンテナ内アイテムの数量を設定する / Set container items quantity to.."
  150, -- "Date / time"
  144, -- "カゴのアイテム品質を設定する / Set basket items quality to.."
  137, -- "コンテナのアイテム品質を設定する / Set container items quality to.."
  183, -- "インフィニティCP - スキル / inf. CP - skills"
  182, -- "インフィニティCP - マテリアル / inf. CP - materials"
  176, -- "バトル：経験値獲得倍率 / EXP multiplier"
  174, -- "友情獲得倍率 / Friendship multiplier"
  170, -- "錬金術経験値の倍率 / Alchemy EXP multiplier"
  168, -- "バトル：アイテムの数量が減少しない / Battle: no item quantity decrease"
  166, -- "バトル：最小スペシャルゲージを設定 / Battle: Set min. special gauge"
  163, -- "バトル：最小アシストゲージを設定 / Battle: Set min. assist gauge"
  161, -- "バトル後にHP/MP/LPを回復 / Recover HP/MP after battle"
  160, -- "バトル：MPが減少しません / Battle: inf. MP"
  156, -- "バトル：ダメージコントロール / Battle: Damage control"
  154, -- "コンテナ&amp;カゴ / Container &amp; basket"
  152, -- "思い出ptの乗数 / Memory pt. multiplier"
  149, -- "静的アドレス値（非英語版のみ） / Static addr. values  (non-English version only)"
  102, -- "アイテムエディター / Item Editor"
  92, -- "ゲームウィンドウをウィンドウモードからボーダーレスフルスクリーンに変更します / Set game window mode"
  0, -- "コンパクトモード / Compact Mode"
}
local addressList = getAddressList()
synchronize(function()
  for _, id in ipairs(disableBattleScripts) do
    local memRec = addressList.getMemoryRecordByID(id)
    if memRec then
      memRec.Active = false
      sleep(50)
    end
    addressList.refresh()
  end
end)
synchronize(function() getLuaEngine().Close() end)
-- Comments:
-- ID: 0, Description: "コンパクトモード / Compact Mode", Depth: 0
-- ID: 135, Description: "init.", Depth: 0
--   ID: 180, Description: "いくつかのスクリプトを切り替える / Toggle some scripts", Depth: 1
--   ID: 149, Description: "静的アドレス値（非英語版のみ） / Static addr. values  (non-English version only)", Depth: 1
--     ID: 150, Description: "Date / time", Depth: 2
--       ID: 179, Description: "日付を取得 / Get current date", Depth: 3
--   ID: 152, Description: "思い出ptの乗数 / Memory pt. multiplier", Depth: 1
--   ID: 161, Description: "バトル後にHP/MP/LPを回復 / Recover HP/MP after battle", Depth: 1
--   ID: 160, Description: "バトル：MPが減少しません / Battle: inf. MP", Depth: 1
--   ID: 163, Description: "バトル：最小アシストゲージを設定 / Battle: Set min. assist gauge", Depth: 1
--   ID: 166, Description: "バトル：最小スペシャルゲージを設定 / Battle: Set min. special gauge", Depth: 1
--   ID: 168, Description: "バトル：アイテムの数量が減少しない / Battle: no item quantity decrease", Depth: 1
--   ID: 156, Description: "バトル：ダメージコントロール / Battle: Damage control", Depth: 1
--   ID: 176, Description: "バトル：経験値獲得倍率 / EXP multiplier", Depth: 1
--   ID: 170, Description: "錬金術経験値の倍率 / Alchemy EXP multiplier", Depth: 1
--   ID: 174, Description: "友情獲得倍率 / Friendship multiplier", Depth: 1
--   ID: 154, Description: "コンテナ&amp;カゴ / Container &amp; basket", Depth: 1
--     ID: 137, Description: "コンテナのアイテム品質を設定する / Set container items quality to..", Depth: 2
--       ID: 136, Description: "Go!", Depth: 3
--     ID: 184, Description: "コンテナ内アイテムの数量を設定する / Set container items quantity to..", Depth: 2
--       ID: 186, Description: "Go!", Depth: 3
--     ID: 144, Description: "カゴのアイテム品質を設定する / Set basket items quality to..", Depth: 2
--       ID: 146, Description: "Go!", Depth: 3
--   ID: 182, Description: "インフィニティCP - マテリアル / inf. CP - materials", Depth: 1
--   ID: 183, Description: "インフィニティCP - スキル / inf. CP - skills", Depth: 1
--   ID: 102, Description: "アイテムエディター / Item Editor", Depth: 1
--     ID: 139, Description: "選択したアイテムをコンテナに複製（3回） / Duplicate selected item to container (x3)", Depth: 2
--     ID: 103, Description: "Japanese", Depth: 2
--     ID: 118, Description: "English", Depth: 2
-- ID: 92, Description: "ゲームウィンドウをウィンドウモードからボーダーレスフルスクリーンに変更します / Set game window mode", Depth: 0
--   ID: 94, Description: "注意：最初にお読みください", Depth: 1
--   ID: 93, Description: "Notice: read me first", Depth: 1
--   ID: 91, Description: "Powershell ver. 5", Depth: 1
--   ID: 89, Description: "Powershell ver. 7", Depth: 1

</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>149</ID>
          <Description>"静的アドレス値（非英語版のみ） / Static addr. values  (non-English version only)"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>172</ID>
              <Description>"Cole"</Description>
              <Color>FF8080</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>Atelier_Ayesha.exe+1AFC3F0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>150</ID>
              <Description>"Date / time"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
{$lua}

if _ayesha_customInt == nil then

registerCustomTypeAutoAssembler([[
alloc(TypeName,256)
alloc(ByteSize,8)
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(UsesFloat,1)

TypeName:
db 'A14DayInt',0

ByteSize:
dd 4

UsesFloat:
db 0

ConvertRoutine:
//at this point ecx contains the address where the bytes are stored

xor rax,rax
push rdx

mov eax, dword ptr [rcx]
sub eax, #89

pop rdx
ret

ConvertBackRoutine:
//at this point edx contains the address to write the value to
//and ecx contains the value

push rax
xor rax, rax
push rdx
mov eax, ecx
add eax, #89
mov dword ptr [rdx], eax
pop rdx
pop rax
ret

]])

_ayesha_customInt = true
end

{$asm}

[DISABLE]
{$lua}
--_meruru_customInt = nil

</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>147</ID>
                  <Description>"Day"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Custom</VariableType>
                  <CustomType>A14DayInt</CustomType>
                  <Address>Atelier_Ayesha.exe+1B5CA00</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>148</ID>
                  <Description>"Time"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>4 Bytes</VariableType>
                  <Address>141B5CA04</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>179</ID>
                  <Description>"日付を取得 / Get current date"</Description>
                  <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if memrec then print(memrec.Description) end
-- 定義計時器
timer = createTimer(nil, false)
timer.Interval = 2000

-- Memory Record ID 為 178 的對象
local memoryRecord = getAddressList().getMemoryRecordByID(178)

-- 日期memory地址
local dateAddress = getAddress("Atelier_Ayesha.exe+1B5CA00")

-- 定義更新日期的函數
function updateDate()
    -- 讀取32位整數字節的前日期值
    local currentDateValue = readInteger(dateAddress)

    if currentDateValue then
        local year = math.floor((currentDateValue-89) / 360) + 1
        local dayOfYear = currentDateValue % 360
        local month = math.floor(dayOfYear / 30) + 1
        local day = (dayOfYear % 30) + 1

        -- 設置 MemoryRecord 對象的描述
        memoryRecord.Description = string.format("Year:%d Month:%02d Day:%02d", year, month, day)
    end
end

-- 啟動計時器並綁定更新日期函數
timer.OnTimer = updateDate
timer.Enabled = true
closeLuaEngine()
[DISABLE]
{$lua}
if syntaxcheck then return end
if memrec then print(memrec.Description) end
-- 停用計時器
if timer then
    timer.destroy()
    timer = nil
end
local memoryRecord = getAddressList().getMemoryRecordByID(178)
memoryRecord.Description = "Year:? Month:?? Day:??"
closeLuaEngine()
</AssemblerScript>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>178</ID>
                      <Description>"Year:? Month:?? Day:??"</Description>
                      <Color>808080</Color>
                      <GroupHeader>1</GroupHeader>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>151</ID>
              <Description>"思い出pt / memory pt."</Description>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>Atelier_Ayesha.exe+1B563D0</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>152</ID>
          <Description>"思い出ptの乗数 / Memory pt. multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_MEMPT_MULTI,Atelier_Ayesha.exe,03 D1 03 0D 72 1F 91 01) // should be unique
alloc(newmem,$1000,INJECT_MEMPT_MULTI)

label(code)
label(return)
label(vf_mempt_multi)

newmem:
  test ecx, ecx
  jz code
  vmovss xmm14, [vf_mempt_multi]
  vcvtsi2ss xmm15, xmm15, ecx
  vmulss xmm15, xmm14, xmm15
  vcvtss2si ecx, xmm15

code:
  add edx,ecx
  add ecx,[Atelier_Ayesha.exe+1B563D4]
  jmp return
align 10 cc
  vf_mempt_multi:
  dd (float)1.5

INJECT_MEMPT_MULTI:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_MEMPT_MULTI)
registersymbol(vf_mempt_multi)

[DISABLE]

INJECT_MEMPT_MULTI:
  db 03 D1 03 0D 72 1F 91 01

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+24445A

Atelier_Ayesha.exe+244448: CC                 - int 3 
Atelier_Ayesha.exe+244449: CC                 - int 3 
Atelier_Ayesha.exe+24444A: CC                 - int 3 
Atelier_Ayesha.exe+24444B: CC                 - int 3 
Atelier_Ayesha.exe+24444C: CC                 - int 3 
Atelier_Ayesha.exe+24444D: CC                 - int 3 
Atelier_Ayesha.exe+24444E: CC                 - int 3 
Atelier_Ayesha.exe+24444F: CC                 - int 3 
Atelier_Ayesha.exe+244450: 48 83 EC 38        - sub rsp,38
Atelier_Ayesha.exe+244454: 8B 15 76 1F 91 01  - mov edx,[Atelier_Ayesha.exe+1B563D0]
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+24445A: 03 D1              - add edx,ecx
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+24445C: 03 0D 72 1F 91 01  - add ecx,[Atelier_Ayesha.exe+1B563D4]
Atelier_Ayesha.exe+244462: 3B D1              - cmp edx,ecx
Atelier_Ayesha.exe+244464: 8B C1              - mov eax,ecx
Atelier_Ayesha.exe+244466: 0F 4F D1           - cmovg edx,ecx
Atelier_Ayesha.exe+244469: 45 33 C0           - xor r8d,r8d
Atelier_Ayesha.exe+24446C: 85 D2              - test edx,edx
Atelier_Ayesha.exe+24446E: 41 0F 48 D0        - cmovs edx,r8d
Atelier_Ayesha.exe+244472: 85 C9              - test ecx,ecx
Atelier_Ayesha.exe+244474: 89 15 56 1F 91 01  - mov [Atelier_Ayesha.exe+1B563D0],edx
Atelier_Ayesha.exe+24447A: 41 0F 48 C0        - cmovs eax,r8d
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>153</ID>
              <Description>"乗数 / multiplier"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_mempt_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>161</ID>
          <Description>"バトル後にHP/MP/LPを回復 / Recover HP/MP after battle"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_BATTLE_REC_HPMP,$process,44 89 44 81 0C) // should be unique
alloc(newmem,$1000,INJECT_BATTLE_REC_HPMP)

label(code)
label(return)

newmem:
  mov r8d,[rcx+rax*4+104]

code:
  mov [rcx+rax*4+0C],r8d
  jmp return

INJECT_BATTLE_REC_HPMP:
  jmp newmem
return:
registersymbol(INJECT_BATTLE_REC_HPMP)

[DISABLE]

INJECT_BATTLE_REC_HPMP:
  db 44 89 44 81 0C

unregistersymbol(INJECT_BATTLE_REC_HPMP)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+238E98

Atelier_Ayesha.exe+238E89: CC                 - int 3 
Atelier_Ayesha.exe+238E8A: CC                 - int 3 
Atelier_Ayesha.exe+238E8B: CC                 - int 3 
Atelier_Ayesha.exe+238E8C: CC                 - int 3 
Atelier_Ayesha.exe+238E8D: CC                 - int 3 
Atelier_Ayesha.exe+238E8E: CC                 - int 3 
Atelier_Ayesha.exe+238E8F: CC                 - int 3 
Atelier_Ayesha.exe+238E90: 83 FA 5B           - cmp edx,5B
Atelier_Ayesha.exe+238E93: 77 48              - ja Atelier_Ayesha.exe+238EDD
Atelier_Ayesha.exe+238E95: 48 63 C2           - movsxd  rax,edx
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+238E98: 44 89 44 81 0C     - mov [rcx+rax*4+0C],r8d
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+238E9D: 85 D2              - test edx,edx
Atelier_Ayesha.exe+238E9F: 74 21              - je Atelier_Ayesha.exe+238EC2
Atelier_Ayesha.exe+238EA1: 83 FA 01           - cmp edx,01
Atelier_Ayesha.exe+238EA4: 75 37              - jne Atelier_Ayesha.exe+238EDD
Atelier_Ayesha.exe+238EA6: 8B 81 08 01 00 00  - mov eax,[rcx+00000108]
Atelier_Ayesha.exe+238EAC: 39 41 10           - cmp [rcx+10],eax
Atelier_Ayesha.exe+238EAF: 7E 03              - jle Atelier_Ayesha.exe+238EB4
Atelier_Ayesha.exe+238EB1: 89 41 10           - mov [rcx+10],eax
Atelier_Ayesha.exe+238EB4: 83 79 10 00        - cmp dword ptr [rcx+10],00
Atelier_Ayesha.exe+238EB8: 7D 23              - jnl Atelier_Ayesha.exe+238EDD
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>160</ID>
          <Description>"バトル：MPが減少しません / Battle: inf. MP"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@httpps://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_INF_MP,$process,29 91 98 00 00 00) // should be unique
alloc(newmem,$1000,INJECT_INF_MP)

label(code)
label(return)

newmem:
  mov edx, [rcx+000000A0]
  mov [rcx+00000098],edx
  xor edx, rdx

code:
  sub [rcx+00000098],edx
  jmp return

INJECT_INF_MP:
  jmp newmem
  nop
return:
registersymbol(INJECT_INF_MP)

[DISABLE]

INJECT_INF_MP:
  db 29 91 98 00 00 00

unregistersymbol(INJECT_INF_MP)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+171D0A

Atelier_Ayesha.exe+171CF9: CC                             - int 3 
Atelier_Ayesha.exe+171CFA: CC                             - int 3 
Atelier_Ayesha.exe+171CFB: CC                             - int 3 
Atelier_Ayesha.exe+171CFC: CC                             - int 3 
Atelier_Ayesha.exe+171CFD: CC                             - int 3 
Atelier_Ayesha.exe+171CFE: CC                             - int 3 
Atelier_Ayesha.exe+171CFF: CC                             - int 3 
Atelier_Ayesha.exe+171D00: 48 89 5C 24 08                 - mov [rsp+08],rbx
Atelier_Ayesha.exe+171D05: 57                             - push rdi
Atelier_Ayesha.exe+171D06: 48 83 EC 30                    - sub rsp,30
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+171D0A: 29 91 98 00 00 00              - sub [rcx+00000098],edx
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+171D10: 8B FA                          - mov edi,edx
Atelier_Ayesha.exe+171D12: 83 B9 98 00 00 00 00           - cmp dword ptr [rcx+00000098],00
Atelier_Ayesha.exe+171D19: 48 8B D9                       - mov rbx,rcx
Atelier_Ayesha.exe+171D1C: 7D 0A                          - jnl Atelier_Ayesha.exe+171D28
Atelier_Ayesha.exe+171D1E: C7 81 98 00 00 00 00 00 00 00  - mov [rcx+00000098],00000000
Atelier_Ayesha.exe+171D28: 85 FF                          - test edi,edi
Atelier_Ayesha.exe+171D2A: 74 7A                          - je Atelier_Ayesha.exe+171DA6
Atelier_Ayesha.exe+171D2C: 48 8B 01                       - mov rax,[rcx]
Atelier_Ayesha.exe+171D2F: BA 8A 00 00 00                 - mov edx,0000008A
Atelier_Ayesha.exe+171D34: FF 50 48                       - call qword ptr [rax+48]
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>163</ID>
          <Description>"バトル：最小アシストゲージを設定 / Battle: Set min. assist gauge"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@httpps://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_SET_ASSIST_GAUGE,Atelier_Ayesha.exe,41 8B 8D 74 03 00 00) // should be unique
alloc(newmem,$1000,INJECT_SET_ASSIST_GAUGE)

label(code)
label(return)
label(i_min_asst_gauge)

newmem:
  mov ecx, [i_min_asst_gauge]
  cmp ecx, [r13+00000374]
  jbe code
  mov [r13+00000374], ecx

code:
  mov ecx,[r13+00000374]
  jmp return
align 10 cc
  i_min_asst_gauge:
  dd #200

INJECT_SET_ASSIST_GAUGE:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_SET_ASSIST_GAUGE)
registersymbol(i_min_asst_gauge)

[DISABLE]

INJECT_SET_ASSIST_GAUGE:
  db 41 8B 8D 74 03 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+189DC3

Atelier_Ayesha.exe+189D94: 0F 1F 40 00              - nop dword ptr [rax+00]
Atelier_Ayesha.exe+189D98: 0F 1F 84 00 00 00 00 00  - nop dword ptr [rax+rax+00000000]
Atelier_Ayesha.exe+189DA0: 48 8B 85 C8 00 00 00     - mov rax,[rbp+000000C8]
Atelier_Ayesha.exe+189DA7: 48 8D 54 24 20           - lea rdx,[rsp+20]
Atelier_Ayesha.exe+189DAC: 48 8B 0C 03              - mov rcx,[rbx+rax]
Atelier_Ayesha.exe+189DB0: 48 8B 01                 - mov rax,[rcx]
Atelier_Ayesha.exe+189DB3: FF 90 B8 00 00 00        - call qword ptr [rax+000000B8]
Atelier_Ayesha.exe+189DB9: 48 83 C3 08              - add rbx,08
Atelier_Ayesha.exe+189DBD: 48 83 FB 60              - cmp rbx,60
Atelier_Ayesha.exe+189DC1: 7E DD                    - jle Atelier_Ayesha.exe+189DA0
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+189DC3: 41 8B 8D 74 03 00 00     - mov ecx,[r13+00000374]
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+189DCA: 33 FF                    - xor edi,edi
Atelier_Ayesha.exe+189DCC: 42 3B 4C B6 5C           - cmp ecx,[rsi+r14*4+5C]
Atelier_Ayesha.exe+189DD1: 74 16                    - je Atelier_Ayesha.exe+189DE9
Atelier_Ayesha.exe+189DD3: B8 84 03 00 00           - mov eax,00000384
Atelier_Ayesha.exe+189DD8: 3B C8                    - cmp ecx,eax
Atelier_Ayesha.exe+189DDA: 0F 4F C8                 - cmovg ecx,eax
Atelier_Ayesha.exe+189DDD: 8B C7                    - mov eax,edi
Atelier_Ayesha.exe+189DDF: 85 C9                    - test ecx,ecx
Atelier_Ayesha.exe+189DE1: 0F 49 C1                 - cmovns eax,ecx
Atelier_Ayesha.exe+189DE4: 42 89 44 B6 5C           - mov [rsi+r14*4+5C],eax
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>164</ID>
              <Description>"最小値 / min. value"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>i_min_asst_gauge</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>166</ID>
          <Description>"バトル：最小スペシャルゲージを設定 / Battle: Set min. special gauge"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_SET_MIN_SPEC_GAUGE,$process,41 8B 8D 78 03 00 00) // should be unique
alloc(newmem,$1000,INJECT_SET_MIN_SPEC_GAUGE)

label(code)
label(return)
label(i_min_spec_gauge)
newmem:
  cmp dword ptr [r13+00000194], 0
  jne code
  //cmp dword ptr [r13+00000378], 0
  //je code
  mov ecx, [i_min_asst_gauge]
  cmp ecx, [r13+00000378]
  jbe code
  mov [r13+00000378], ecx
code:
  mov ecx,[r13+00000378]
  jmp return
align 10 cc
  i_min_spec_gauge:
  dd C8

INJECT_SET_MIN_SPEC_GAUGE:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_SET_MIN_SPEC_GAUGE)
registersymbol(i_min_spec_gauge)
[DISABLE]

INJECT_SET_MIN_SPEC_GAUGE:
  db 41 8B 8D 78 03 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+189DE9

Atelier_Ayesha.exe+189DCA: 33 FF                 - xor edi,edi
Atelier_Ayesha.exe+189DCC: 42 3B 4C B6 5C        - cmp ecx,[rsi+r14*4+5C]
Atelier_Ayesha.exe+189DD1: 74 16                 - je Atelier_Ayesha.exe+189DE9
Atelier_Ayesha.exe+189DD3: B8 84 03 00 00        - mov eax,00000384
Atelier_Ayesha.exe+189DD8: 3B C8                 - cmp ecx,eax
Atelier_Ayesha.exe+189DDA: 0F 4F C8              - cmovg ecx,eax
Atelier_Ayesha.exe+189DDD: 8B C7                 - mov eax,edi
Atelier_Ayesha.exe+189DDF: 85 C9                 - test ecx,ecx
Atelier_Ayesha.exe+189DE1: 0F 49 C1              - cmovns eax,ecx
Atelier_Ayesha.exe+189DE4: 42 89 44 B6 5C        - mov [rsi+r14*4+5C],eax
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+189DE9: 41 8B 8D 78 03 00 00  - mov ecx,[r13+00000378]
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+189DF0: 42 3B 4C B6 74        - cmp ecx,[rsi+r14*4+74]
Atelier_Ayesha.exe+189DF5: 74 16                 - je Atelier_Ayesha.exe+189E0D
Atelier_Ayesha.exe+189DF7: B8 64 00 00 00        - mov eax,00000064
Atelier_Ayesha.exe+189DFC: 3B C8                 - cmp ecx,eax
Atelier_Ayesha.exe+189DFE: 0F 4F C8              - cmovg ecx,eax
Atelier_Ayesha.exe+189E01: 8B C7                 - mov eax,edi
Atelier_Ayesha.exe+189E03: 85 C9                 - test ecx,ecx
Atelier_Ayesha.exe+189E05: 0F 49 C1              - cmovns eax,ecx
Atelier_Ayesha.exe+189E08: 42 89 44 B6 74        - mov [rsi+r14*4+74],eax
Atelier_Ayesha.exe+189E0D: BA 09 00 00 00        - mov edx,00000009
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>167</ID>
              <Description>"最小値 / min. value"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>i_min_spec_gauge</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>168</ID>
          <Description>"バトル：アイテムの数量が減少しない / Battle: no item quantity decrease"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_BATT_NO_ITEM_DEC,$process,FF 49 1C 48 8B D9) // should be unique
alloc(newmem,$1000,INJECT_BATT_NO_ITEM_DEC)

label(code)
label(return)

newmem:

code:
  //dec [rcx+1C]
  mov rbx,rcx
  jmp return

INJECT_BATT_NO_ITEM_DEC:
  jmp newmem
  nop
return:
registersymbol(INJECT_BATT_NO_ITEM_DEC)

[DISABLE]

INJECT_BATT_NO_ITEM_DEC:
  db FF 49 1C 48 8B D9

unregistersymbol(INJECT_BATT_NO_ITEM_DEC)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+258A96

Atelier_Ayesha.exe+258A88: CC                    - int 3 
Atelier_Ayesha.exe+258A89: CC                    - int 3 
Atelier_Ayesha.exe+258A8A: CC                    - int 3 
Atelier_Ayesha.exe+258A8B: CC                    - int 3 
Atelier_Ayesha.exe+258A8C: CC                    - int 3 
Atelier_Ayesha.exe+258A8D: CC                    - int 3 
Atelier_Ayesha.exe+258A8E: CC                    - int 3 
Atelier_Ayesha.exe+258A8F: CC                    - int 3 
Atelier_Ayesha.exe+258A90: 40 53                 - push rbx
Atelier_Ayesha.exe+258A92: 48 83 EC 20           - sub rsp,20
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+258A96: FF 49 1C              - dec [rcx+1C]
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+258A99: 48 8B D9              - mov rbx,rcx
Atelier_Ayesha.exe+258A9C: 83 79 1C 00           - cmp dword ptr [rcx+1C],00
Atelier_Ayesha.exe+258AA0: 7F 2E                 - jg Atelier_Ayesha.exe+258AD0
Atelier_Ayesha.exe+258AA2: 84 D2                 - test dl,dl
Atelier_Ayesha.exe+258AA4: 74 22                 - je Atelier_Ayesha.exe+258AC8
Atelier_Ayesha.exe+258AA6: 48 8B D1              - mov rdx,rcx
Atelier_Ayesha.exe+258AA9: 48 8D 0D E0 F2 95 01  - lea rcx,[Atelier_Ayesha.exe+1BB7D90]
Atelier_Ayesha.exe+258AB0: E8 CC 43 DC FF        - call Atelier_Ayesha.exe+1CE81
Atelier_Ayesha.exe+258AB5: 84 C0                 - test al,al
Atelier_Ayesha.exe+258AB7: 75 0F                 - jne Atelier_Ayesha.exe+258AC8
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>169</ID>
              <Description>"数量が1以上の場合のみ有効 / Only works if quantity &gt; 1"</Description>
              <Color>8000FF</Color>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>156</ID>
          <Description>"バトル：ダメージコントロール / Battle: Damage control"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@httpps://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_DAMAGE_MULTI,$process,29 87 94 00 00 00) // should be unique
alloc(newmem,$1000,INJECT_DAMAGE_MULTI)

label(code)
label(return)
label(vf_dmg_2_player_multi)
label(vf_dmg_2_enemy_multi)

newmem:
  vcvtsi2ss xmm13, xmm13, [rdi+00000094]
  movaps xmm14, [vf_dmg_2_player_multi]
  vcvtsi2ss xmm15, xmm15, eax
  vshufps xmm15, xmm15, xmm15, 0
  vmulps xmm15, xmm15, xmm14

  cmp dword ptr [rdi+000000A0], 0
  je to_enemy
  jmp to_common_block

to_enemy:
  vshufps xmm15, xmm15, xmm15, 1


to_common_block: // player &amp; enemy
  vucomiss xmm15, xmm13
  jbe @F
  mov eax, [rdi+00000094]
  jmp code
@@:
  vcvtss2si eax, xmm15

code:
  sub [rdi+00000094],eax
  jmp return
align 10 cc
  vf_dmg_2_player_multi:
  dd (float)0.9
  vf_dmg_2_enemy_multi:
  dd (float)1.15
  dd 0 0

INJECT_DAMAGE_MULTI:
  jmp newmem
  nop
return:
registersymbol(INJECT_DAMAGE_MULTI)
registersymbol(vf_dmg_2_player_multi)
registersymbol(vf_dmg_2_enemy_multi)
[DISABLE]

INJECT_DAMAGE_MULTI:
  db 29 87 94 00 00 00

unregistersymbol(INJECT_DAMAGE_MULTI)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+171B5A

Atelier_Ayesha.exe+171B30: 4C 8B CF                 - mov r9,rdi
Atelier_Ayesha.exe+171B33: 41 0F 48 C6              - cmovs eax,r14d
Atelier_Ayesha.exe+171B37: C7 44 24 20 FF FF FF FF  - mov [rsp+20],FFFFFFFF
Atelier_Ayesha.exe+171B3F: 89 06                    - mov [rsi],eax
Atelier_Ayesha.exe+171B41: 8B D3                    - mov edx,ebx
Atelier_Ayesha.exe+171B43: 48 8B 4F 10              - mov rcx,[rdi+10]
Atelier_Ayesha.exe+171B47: 48 8B 89 C8 06 00 00     - mov rcx,[rcx+000006C8]
Atelier_Ayesha.exe+171B4E: E8 26 EC EB FF           - call Atelier_Ayesha.exe+30779
Atelier_Ayesha.exe+171B53: 48 8B 5C 24 40           - mov rbx,[rsp+40]
Atelier_Ayesha.exe+171B58: 8B 06                    - mov eax,[rsi]
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+171B5A: 29 87 94 00 00 00        - sub [rdi+00000094],eax
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+171B60: E8 2B D2 E9 FF           - call Atelier_Ayesha.exe+ED90
Atelier_Ayesha.exe+171B65: 25 03 00 00 80           - and eax,80000003
Atelier_Ayesha.exe+171B6A: 7D 07                    - jnl Atelier_Ayesha.exe+171B73
Atelier_Ayesha.exe+171B6C: FF C8                    - dec eax
Atelier_Ayesha.exe+171B6E: 83 C8 FC                 - or eax,-04
Atelier_Ayesha.exe+171B71: FF C0                    - inc eax
Atelier_Ayesha.exe+171B73: 85 C0                    - test eax,eax
Atelier_Ayesha.exe+171B75: 74 22                    - je Atelier_Ayesha.exe+171B99
Atelier_Ayesha.exe+171B77: 83 E8 01                 - sub eax,01
Atelier_Ayesha.exe+171B7A: 74 16                    - je Atelier_Ayesha.exe+171B92
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>157</ID>
              <Description>"プレイヤーへのダメージ乗数 / multiplier to player"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_dmg_2_player_multi</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>158</ID>
              <Description>"敵へのダメージ乗数 / multiplier to enemy"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_dmg_2_enemy_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>176</ID>
          <Description>"バトル：経験値獲得倍率 / EXP multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-29
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_ADV_EXP_MULTI,$process,89 4F 28 41 8D 48 02) // should be unique
alloc(newmem,$1000,INJECT_ADV_EXP_MULTI)

label(code)
label(return)
label(vf_adv_xp_multi)

newmem:
  vcvtsi2ss xmm15, xmm15, ecx
  vmovss xmm14, [vf_adv_xp_multi]
  vmulss xmm15, xmm15, xmm14
  vcvtss2si ecx, xmm15

code:
  mov [rdi+28],ecx
  lea ecx,[r8+02]
  jmp return
align 10 cc
  vf_adv_xp_multi:
  dd (float)1.333333333

INJECT_ADV_EXP_MULTI:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_ADV_EXP_MULTI)
registersymbol(vf_adv_xp_multi)
[DISABLE]

INJECT_ADV_EXP_MULTI:
  db 89 4F 28 41 8D 48 02

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+168A10

Atelier_Ayesha.exe+1689E3: C7 47 14 19 00 00 00  - mov [rdi+14],00000019
Atelier_Ayesha.exe+1689EA: 48 8B 01              - mov rax,[rcx]
Atelier_Ayesha.exe+1689ED: 48 83 C4 20           - add rsp,20
Atelier_Ayesha.exe+1689F1: 5F                    - pop rdi
Atelier_Ayesha.exe+1689F2: 48 FF A0 C8 00 00 00  - jmp qword ptr [rax+000000C8]
Atelier_Ayesha.exe+1689F9: 48 8B 47 08           - mov rax,[rdi+08]
Atelier_Ayesha.exe+1689FD: 45 33 C0              - xor r8d,r8d
Atelier_Ayesha.exe+168A00: BA 83 00 00 00        - mov edx,00000083
Atelier_Ayesha.exe+168A05: 48 89 5C 24 30        - mov [rsp+30],rbx
Atelier_Ayesha.exe+168A0A: 8B 88 A0 0A 00 00     - mov ecx,[rax+00000AA0]
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+168A10: 89 4F 28              - mov [rdi+28],ecx
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+168A13: 41 8D 48 02           - lea ecx,[r8+02]
Atelier_Ayesha.exe+168A17: E8 9A FB EA FF        - call Atelier_Ayesha.exe+185B6
Atelier_Ayesha.exe+168A1C: 33 C9                 - xor ecx,ecx
Atelier_Ayesha.exe+168A1E: 8B D8                 - mov ebx,eax
Atelier_Ayesha.exe+168A20: E8 F8 AE E9 FF        - call Atelier_Ayesha.exe+391D
Atelier_Ayesha.exe+168A25: 8B 57 28              - mov edx,[rdi+28]
Atelier_Ayesha.exe+168A28: 8D 48 64              - lea ecx,[rax+64]
Atelier_Ayesha.exe+168A2B: B8 1F 85 EB 51        - mov eax,51EB851F
Atelier_Ayesha.exe+168A30: 03 CB                 - add ecx,ebx
Atelier_Ayesha.exe+168A32: 48 8B 5F 08           - mov rbx,[rdi+08]
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>177</ID>
              <Description>"乗数 / multiplier"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_adv_xp_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>170</ID>
          <Description>"錬金術経験値の倍率 / Alchemy EXP multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-28
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_ALCHE_XP_MULTI,Atelier_Ayesha.exe,4D C1 48 83 C4 20 5F) // should be unique
alloc(newmem,$1000,INJECT_ALCHE_XP_MULTI)

label(code)
label(return)
label(vf_alc_xp_multi)

newmem:
  vmovss xmm14, [vf_alc_xp_multi]
  vcvtsi2ss xmm15, xmm15, eax
  vmulss xmm15, xmm15, xmm14
  vcvtss2si eax, xmm15

code:
  add rsp,20
  pop rdi
  jmp return
align 10 cc
  vf_alc_xp_multi:
  dd (float)1.25

INJECT_ALCHE_XP_MULTI+02:
  jmp newmem
return:
registersymbol(INJECT_ALCHE_XP_MULTI)
registersymbol(vf_alc_xp_multi)

[DISABLE]

INJECT_ALCHE_XP_MULTI+02:
  db 48 83 C4 20 5F

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+388C88

Atelier_Ayesha.exe+388C5C: 0F 5B C0                 - cvtdq2ps xmm0,xmm0
Atelier_Ayesha.exe+388C5F: F3 0F 58 0D 31 32 63 00  - addss xmm1,[Atelier_Ayesha.exe+9BBE98]
Atelier_Ayesha.exe+388C67: F3 0F 5E 0D 29 32 63 00  - divss xmm1,[Atelier_Ayesha.exe+9BBE98]
Atelier_Ayesha.exe+388C6F: F3 0F 59 C8              - mulss xmm1,xmm0
Atelier_Ayesha.exe+388C73: F3 0F 2C C1              - cvttss2si eax,xmm1
Atelier_Ayesha.exe+388C77: 3B C1                    - cmp eax,ecx
Atelier_Ayesha.exe+388C79: 0F 4C C1                 - cmovl eax,ecx
Atelier_Ayesha.exe+388C7C: 33 C9                    - xor ecx,ecx
Atelier_Ayesha.exe+388C7E: 83 3D 63 37 77 01 32     - cmp dword ptr [Atelier_Ayesha.exe+1AFC3E8],32
Atelier_Ayesha.exe+388C85: 0F 4D C1                 - cmovge eax,ecx
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+388C88: 48 83 C4 20              - add rsp,20
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+388C8C: 5F                       - pop rdi
Atelier_Ayesha.exe+388C8D: C3                       - ret 
Atelier_Ayesha.exe+388C8E: CC                       - int 3 
Atelier_Ayesha.exe+388C8F: CC                       - int 3 
Atelier_Ayesha.exe+388C90: CC                       - int 3 
Atelier_Ayesha.exe+388C91: CC                       - int 3 
Atelier_Ayesha.exe+388C92: CC                       - int 3 
Atelier_Ayesha.exe+388C93: CC                       - int 3 
Atelier_Ayesha.exe+388C94: CC                       - int 3 
Atelier_Ayesha.exe+388C95: CC                       - int 3 
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>171</ID>
              <Description>"乗数 / multiplier"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_alc_xp_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>174</ID>
          <Description>"友情獲得倍率 / Friendship multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-29
  Author : bbfox@https://openchetatables.com
}

[ENABLE]

aobscanmodule(INJECT_FRIENDSHIP_MULTI,$process,F3 0F 58 0A C7 44 24 10 00 00 00 00) // should be unique
alloc(newmem,$1000,INJECT_FRIENDSHIP_MULTI)

label(code)
label(return)
label(vf_frie_multi)

newmem:
  vmovss xmm14, [vf_frie_multi]
  vmulss xmm1, xmm1, xmm14

code:
  addss xmm1,[rdx]
  mov [rsp+10],00000000
  jmp return
align 10 cc
  vf_frie_multi:
  dd (float)1.666666

INJECT_FRIENDSHIP_MULTI:
  jmp newmem
  nop 7
return:
registersymbol(INJECT_FRIENDSHIP_MULTI)
registersymbol(vf_frie_multi)
[DISABLE]

INJECT_FRIENDSHIP_MULTI:
  db F3 0F 58 0A C7 44 24 10 00 00 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+235CEF

Atelier_Ayesha.exe+235CD8: CC                       - int 3 
Atelier_Ayesha.exe+235CD9: CC                       - int 3 
Atelier_Ayesha.exe+235CDA: CC                       - int 3 
Atelier_Ayesha.exe+235CDB: CC                       - int 3 
Atelier_Ayesha.exe+235CDC: CC                       - int 3 
Atelier_Ayesha.exe+235CDD: CC                       - int 3 
Atelier_Ayesha.exe+235CDE: CC                       - int 3 
Atelier_Ayesha.exe+235CDF: CC                       - int 3 
Atelier_Ayesha.exe+235CE0: F3 0F 10 05 B0 61 78 00  - movss xmm0,[Atelier_Ayesha.exe+9BBE98]
Atelier_Ayesha.exe+235CE8: 48 8D 91 7C 02 00 00     - lea rdx,[rcx+0000027C]
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+235CEF: F3 0F 58 0A              - addss xmm1,[rdx]
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+235CF3: C7 44 24 10 00 00 00 00  - mov [rsp+10],00000000
Atelier_Ayesha.exe+235CFB: 48 8D 4C 24 10           - lea rcx,[rsp+10]
Atelier_Ayesha.exe+235D00: 0F 57 D2                 - xorps xmm2,xmm2
Atelier_Ayesha.exe+235D03: 48 8D 05 32 E0 A3 00     - lea rax,[Atelier_Ayesha.exe+C73D3C]
Atelier_Ayesha.exe+235D0A: F3 0F 11 0A              - movss [rdx],xmm1
Atelier_Ayesha.exe+235D0E: 0F 2F CA                 - comiss xmm1,xmm2
Atelier_Ayesha.exe+235D11: 48 0F 47 CA              - cmova rcx,rdx
Atelier_Ayesha.exe+235D15: 0F 2F 01                 - comiss xmm0,[rcx]
Atelier_Ayesha.exe+235D18: 48 0F 47 C1              - cmova rax,rcx
Atelier_Ayesha.exe+235D1C: 8B 00                    - mov eax,[rax]
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>175</ID>
              <Description>"乗数 / multiplier"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_frie_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>154</ID>
          <Description>"コンテナ&amp;カゴ / Container &amp; basket"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>137</ID>
              <Description>"コンテナのアイテム品質を設定する / Set container items quality to.."</Description>
              <Options moHideChildren="1"/>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>138</ID>
                  <Description>"值 / value"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>C08000</Color>
                  <VariableType>Float</VariableType>
                  <Address>TARGET_QUALITY</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>136</ID>
                  <Description>"Go!"</Description>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
if memrec then print(memrec.Description) end
print("Start")

tQ = readFloat("TARGET_QUALITY")

local containerBaseAddress = 0
local currentQualityAddress = 0

-- Check if the process is selected
if getAddressSafe(process) == nil then
  print("Please select process first")
  closeLuaEngine()
  return
end

containerBaseAddress = getAddressSafe(process) + BaseContainerOffset
currentQualityAddress = containerBaseAddress

for i = 1, MaxContainerCount, 1 do
  local currentID = readSmallInteger(currentQualityAddress)

  if currentID &gt;= 0xFFFF then
    break
  end

  writeFloat(currentQualityAddress + 0x4, tQ)
  if currentID % 25 == 0 then
    print("NO: " .. i .. ", ID " .. currentID .. ", (addr: " .. string.format("%08X", currentQualityAddress) .. ") set quality to " .. tQ)
  end

  currentQualityAddress = currentQualityAddress + ItemRecordSize
end

print("Done.")
  closeLuaEngine()

{$asm}
[DISABLE]

</AssemblerScript>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>184</ID>
              <Description>"コンテナ内アイテムの数量を設定する / Set container items quantity to.."</Description>
              <Options moHideChildren="1"/>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>185</ID>
                  <Description>"值 / value"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>C08000</Color>
                  <VariableType>Byte</VariableType>
                  <Address>TARGET_QUANTITY</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>187</ID>
                  <Description>"トリガー値 / trigger value"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>C08000</Color>
                  <VariableType>Byte</VariableType>
                  <Address>TARGET_QUANTITY_MIN</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>186</ID>
                  <Description>"Go!"</Description>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
if memrec then print(memrec.Description) end
print("Start")

local tQty = readByte("TARGET_QUANTITY")
local tQtymin = readByte("TARGET_QUANTITY_MIN")
local curQty = 0

local containerBaseAddress = 0
local currentQualityAddress = 0

-- Check if the process is selected
if getAddressSafe(process) == nil then
  print("Please select process first")
  closeLuaEngine()
  return
end

containerBaseAddress = getAddressSafe(process) + BaseContainerOffset
currentQualityAddress = containerBaseAddress

for i = 1, MaxContainerCount, 1 do
  local currentID = readSmallInteger(currentQualityAddress)

  if currentID &gt;= 0xFFFF then
    break
  end

  curQty = readByte(currentQualityAddress + 0x1C)
  if curQty &gt;= tQtymin then
    writeByte(currentQualityAddress + 0x1C, tQty)
    if currentID % 25 == 0 then
      print("NO: " .. i .. ", ID " .. currentID .. ", (addr: " .. string.format("%08X", currentQualityAddress) .. ") set quantity to " .. tQty)
    end
  end

  currentQualityAddress = currentQualityAddress + ItemRecordSize
end

print("Done.")
closeLuaEngine()
{$asm}
[DISABLE]

</AssemblerScript>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>144</ID>
              <Description>"カゴのアイテム品質を設定する / Set basket items quality to.."</Description>
              <Options moHideChildren="1"/>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>145</ID>
                  <Description>"值 / value"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>C08000</Color>
                  <VariableType>Float</VariableType>
                  <Address>TARGET_QUALITY</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>146</ID>
                  <Description>"Go!"</Description>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
if memrec then print(memrec.Description) end
print("Start")

tQ = readFloat("TARGET_QUALITY")

local containerBaseAddress = 0
local currentQualityAddress = 0

-- Check if the process is selected
if getAddressSafe(process) == nil then
  print("Please select process first")
  closeLuaEngine()
  return
end

containerBaseAddress = getAddressSafe(process) + BaseBasketOffset
currentQualityAddress = containerBaseAddress

for i = 1, MaxBasketCount, 1 do
  local currentID = readSmallInteger(currentQualityAddress)

  if currentID &gt;= 0xFFFF then
    break
  end

  writeFloat(currentQualityAddress + 0x4, tQ)
  if currentID % 25 == 0 then
    print("NO: " .. i .. ", ID " .. currentID .. ", (addr: " .. string.format("%08X", currentQualityAddress) .. ") set quality to " .. tQ)
  end

  currentQualityAddress = currentQualityAddress + ItemRecordSize
end

print("Done.")
closeLuaEngine()
{$asm}
[DISABLE]

</AssemblerScript>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>182</ID>
          <Description>"インフィニティCP - マテリアル / inf. CP - materials"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-30
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_INF_CP,$process,44 29 4B 10 0F 99 C0) // should be unique
alloc(newmem,$1000,INJECT_INF_CP)

label(code)
label(return)

newmem:
  xor r9d, r9d
  mov [rsp+70], r9d

code:
  sub [rbx+10],r9d
  setns al
  jmp return

INJECT_INF_CP:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_INF_CP)

[DISABLE]

INJECT_INF_CP:
  db 44 29 4B 10 0F 99 C0

unregistersymbol(INJECT_INF_CP)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+38FE72

Atelier_Ayesha.exe+38FE47: F3 0F 59 C8              - mulss xmm1,xmm0
Atelier_Ayesha.exe+38FE4B: F3 0F 5E 0D 45 C0 62 00  - divss xmm1,[Atelier_Ayesha.exe+9BBE98]
Atelier_Ayesha.exe+38FE53: 44 8B 4C 24 70           - mov r9d,[rsp+70]
Atelier_Ayesha.exe+38FE58: 66 41 0F 6E C1           - movd xmm0,r9d
Atelier_Ayesha.exe+38FE5D: 0F 5B C0                 - cvtdq2ps xmm0,xmm0
Atelier_Ayesha.exe+38FE60: F3 0F 59 C8              - mulss xmm1,xmm0
Atelier_Ayesha.exe+38FE64: F3 0F 2C C1              - cvttss2si eax,xmm1
Atelier_Ayesha.exe+38FE68: 44 03 C8                 - add r9d,eax
Atelier_Ayesha.exe+38FE6B: EB 05                    - jmp Atelier_Ayesha.exe+38FE72
Atelier_Ayesha.exe+38FE6D: 44 8B 4C 24 70           - mov r9d,[rsp+70]
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+38FE72: 44 29 4B 10              - sub [rbx+10],r9d
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+38FE76: 0F 99 C0                 - setns al
Atelier_Ayesha.exe+38FE79: 88 83 44 01 00 00        - mov [rbx+00000144],al
Atelier_Ayesha.exe+38FE7F: 84 C0                    - test al,al
Atelier_Ayesha.exe+38FE81: 0F 84 82 00 00 00        - je Atelier_Ayesha.exe+38FF09
Atelier_Ayesha.exe+38FE87: 4C 8B C6                 - mov r8,rsi
Atelier_Ayesha.exe+38FE8A: 48 8B D3                 - mov rdx,rbx
Atelier_Ayesha.exe+38FE8D: 48 8B CF                 - mov rcx,rdi
Atelier_Ayesha.exe+38FE90: E8 53 D8 C7 FF           - call Atelier_Ayesha.exe+D6E8
Atelier_Ayesha.exe+38FE95: 0F 57 C0                 - xorps xmm0,xmm0
Atelier_Ayesha.exe+38FE98: F3 0F 7F 44 24 38        - movdqu [rsp+38],xmm0
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>183</ID>
          <Description>"インフィニティCP - スキル / inf. CP - skills"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-30
  Author : bbox@https://opencheattabels.com
}

[ENABLE]

aobscanmodule(INJECT_INF_CP_SKILL,$process,29 47 10 B0 01) // should be unique
alloc(newmem,$1000,INJECT_INF_CP_SKILL)

label(code)
label(return)

newmem:
  xor eax, eax
  mov [rdi+rcx*4+000000A0], eax

code:
  sub [rdi+10],eax
  mov al,01
  jmp return

INJECT_INF_CP_SKILL:
  jmp newmem
return:
registersymbol(INJECT_INF_CP_SKILL)

[DISABLE]

INJECT_INF_CP_SKILL:
  db 29 47 10 B0 01

unregistersymbol(INJECT_INF_CP_SKILL)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+3900BC

Atelier_Ayesha.exe+390086: 49 89 4A 40                    - mov [r10+40],rcx
Atelier_Ayesha.exe+39008A: 48 8D 0C 76                    - lea rcx,[rsi+rsi*2]
Atelier_Ayesha.exe+39008E: FF 47 04                       - inc [rdi+04]
Atelier_Ayesha.exe+390091: 48 8B 74 24 40                 - mov rsi,[rsp+40]
Atelier_Ayesha.exe+390096: 89 2F                          - mov [rdi],ebp
Atelier_Ayesha.exe+390098: 48 8B 6C 24 38                 - mov rbp,[rsp+38]
Atelier_Ayesha.exe+39009D: C7 47 1C 01 00 00 00           - mov [rdi+1C],00000001
Atelier_Ayesha.exe+3900A4: C7 87 20 01 00 00 00 00 00 00  - mov [rdi+00000120],00000000
Atelier_Ayesha.exe+3900AE: C6 87 46 01 00 00 00           - mov byte ptr [rdi+00000146],00
Atelier_Ayesha.exe+3900B5: 8B 84 8F A0 00 00 00           - mov eax,[rdi+rcx*4+000000A0]
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+3900BC: 29 47 10                       - sub [rdi+10],eax
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+3900BF: B0 01                          - mov al,01
Atelier_Ayesha.exe+3900C1: C6 87 44 01 00 00 01           - mov byte ptr [rdi+00000144],01
Atelier_Ayesha.exe+3900C8: 48 83 C4 20                    - add rsp,20
Atelier_Ayesha.exe+3900CC: 5F                             - pop rdi
Atelier_Ayesha.exe+3900CD: C3                             - ret 
Atelier_Ayesha.exe+3900CE: CC                             - int 3 
Atelier_Ayesha.exe+3900CF: CC                             - int 3 
Atelier_Ayesha.exe+3900D0: CC                             - int 3 
Atelier_Ayesha.exe+3900D1: CC                             - int 3 
Atelier_Ayesha.exe+3900D2: CC                             - int 3 
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>102</ID>
          <Description>"アイテムエディター / Item Editor"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Ayesha.exe
  Version: 
  Date   : 2024-11-27
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_ITEM_EDITOR,$process,F3 45 0F 2C 78 04) // should be unique
alloc(newmem,$1000,INJECT_ITEM_EDITOR)

label(code)
label(return)
label(i_item_editor_base_addr)

newmem:
  mov [i_item_editor_base_addr], r8

code:
  cvttss2si r15d,[r8+04]
  jmp return
align 10 cc
  i_item_editor_base_addr:
  dq 0

INJECT_ITEM_EDITOR:
  jmp newmem
  nop
return:
registersymbol(INJECT_ITEM_EDITOR)
registersymbol(i_item_editor_base_addr)

[DISABLE]

INJECT_ITEM_EDITOR:
  db F3 45 0F 2C 78 04

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Ayesha.exe+26202A

Atelier_Ayesha.exe+261FFC: 41 56                       - push r14
Atelier_Ayesha.exe+261FFE: 41 57                       - push r15
Atelier_Ayesha.exe+262000: 48 83 EC 60                 - sub rsp,60
Atelier_Ayesha.exe+262004: 48 C7 44 24 20 FE FF FF FF  - mov qword ptr [rsp+20],FFFFFFFFFFFFFFFE
Atelier_Ayesha.exe+26200D: 48 89 9C 24 90 00 00 00     - mov [rsp+00000090],rbx
Atelier_Ayesha.exe+262015: 48 8B 05 C4 E4 55 01        - mov rax,[Atelier_Ayesha.exe+17C04E0]
Atelier_Ayesha.exe+26201C: 48 33 C4                    - xor rax,rsp
Atelier_Ayesha.exe+26201F: 48 89 44 24 50              - mov [rsp+50],rax
Atelier_Ayesha.exe+262024: 49 8B E8                    - mov rbp,r8
Atelier_Ayesha.exe+262027: 48 8B F2                    - mov rsi,rdx
// ---------- INJECTING HERE ----------
Atelier_Ayesha.exe+26202A: F3 45 0F 2C 78 04           - cvttss2si r15d,[r8+04]
// ---------- DONE INJECTING  ----------
Atelier_Ayesha.exe+262030: 45 84 C9                    - test r9b,r9b
Atelier_Ayesha.exe+262033: 74 0C                       - je Atelier_Ayesha.exe+262041
Atelier_Ayesha.exe+262035: B8 78 00 00 00              - mov eax,00000078
Atelier_Ayesha.exe+26203A: 44 3B F8                    - cmp r15d,eax
Atelier_Ayesha.exe+26203D: 44 0F 4F F8                 - cmovg r15d,eax
Atelier_Ayesha.exe+262041: 41 0F BF 78 02              - movsx edi,word ptr [r8+02]
Atelier_Ayesha.exe+262046: 48 8B 82 D0 00 00 00        - mov rax,[rdx+000000D0]
Atelier_Ayesha.exe+26204D: 45 33 F6                    - xor r14d,r14d
Atelier_Ayesha.exe+262050: 48 2B 82 C8 00 00 00        - sub rax,[rdx+000000C8]
Atelier_Ayesha.exe+262057: 48 C1 F8 03                 - sar rax,03
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>139</ID>
              <Description>"選択したアイテムをコンテナに複製（3回） / Duplicate selected item to container (x3)"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end

if memrec then print(memrec.Description) end
print("Start")

itemBaseAddr = readPointer("i_item_editor_base_addr")
print("Source item addr: " .. string.format("%08X", itemBaseAddr))
if itemBaseAddr == 0 then
  print("Please select item first")
  return
end

local srcQualityAddress = itemBaseAddr

clearLuaLog()

if getAddressSafe(process) == nil then
  print("Game process not found?")
else
  -- Author : bbfox @ https://open cheat tables. com/
  local containerBaseAddress = g_containerBaseAddress
  print("Container base address: " .. string.format("%08X", containerBaseAddress))

  local isFound = false
  local previousItemID = 1
  local currentItemID = 0
  local currentQuality = readFloat(srcQualityAddress + 0x04)
  local theQuality = 0 -- for duplicate destination, quality should not be the same if not in 120
  local dupCount = 3
  local currentQualityAddress = containerBaseAddress

  print("Src quality: " .. currentQuality)
  print("Src serial: " .. readSmallInteger(srcQualityAddress))

  for i = 1, MaxContainerCount - 4, 1 do
    if not isFound then
      currentItemID = readSmallInteger(currentQualityAddress)

      if currentItemID == 0xFFFF and i &gt; 1 then
        print("Found empty slot in position #", i, ", address: #", string.format("%X", currentQualityAddress) .. ", src quality: " .. currentQuality)
        isFound = true

        for i1 = 1, dupCount, 1 do
          print("#", i1, ", addr: ", string.format("%X", currentQualityAddress), ", New ID: ", previousItemID + 1)

          -- Offset:
          -- 0-1: serial
          -- 2-3: item ID
          -- 4-7: Quality
          -- 8-31: others
          -- Duplicate item data to new slots

          ----
          ----previousItemID = previousItemID + 1
          ----writeSmallInteger(currentQualityAddress, previousItemID) -- Serial

          -- Copy rest of the data (offset 4~31)
          for offset = 0, ItemRecordSize - 1 do
            local byteValue = readBytes(srcQualityAddress + offset, 1, false)
            writeBytes(currentQualityAddress + offset, byteValue)
          end

          -- Update address pointers for the next duplicate
          currentQualityAddress = currentQualityAddress + ItemRecordSize
        end
      end

      previousItemID = currentItemID
      currentQualityAddress = currentQualityAddress + ItemRecordSize
    else
      break
    end
  end

  print("Done")
  closeLuaEngine()
end

{$asm}

[DISABLE]

</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>103</ID>
              <Description>"Japanese"</Description>
              <Options moHideChildren="1"/>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>104</ID>
                  <Description>"Base"</Description>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808080</Color>
                  <VariableType>8 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                </CheatEntry>
                <CheatEntry>
                  <ID>134</ID>
                  <Description>"シリアルナンバー"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>105</ID>
                  <Description>"アイテムID"</Description>
                  <DropDownList>0114:携帯コンテナ
0115:カゴ
0116:山師のサイコロ
0117:流浪の民のくつ
0118:コレクトグラス
011D:業物の砥石
0121:投影の染料
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>2</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>106</ID>
                  <Description>"品質"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">120:120
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>4</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>107</ID>
                  <Description>"潜在能力1"</Description>
                  <DropDownList DisplayValueAsItem="1">0002:破壊力+30%
0005:回復力+30%
0008:クリティカルLv3
000B:自動発動50%
000E:効果安定50％
0011:確率安定50％
001B:HP+25
001E:MP+25
0021:攻撃力+8
0024:速度+12
0027:全能力+6
002A:物理耐性+12
002D:炎耐性+25
0030:氷耐性+25
0033:雷耐性+25
0036:状態耐性+50
003C:スキル消費-25%
003F:*スキル強化Lv3
00AB:金色の力
00AC:神秘の力
00AD:忘却の力
00AE:生命の力
00AF:*精霊の力
00B0:妖精の力
00B4:*月の力　
00B5:*高貴な力
00B6:*赤気の力
00B8:太古の力
00BF:光の虚像
00C7:複合の毒
FFFF:N/A
</DropDownList>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>8</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>108</ID>
                  <Description>"潜在能力2"</Description>
                  <DropDownListLink>潜在能力1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>A</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>109</ID>
                  <Description>"潜在能力3"</Description>
                  <DropDownListLink>潜在能力1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>C</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>110</ID>
                  <Description>"潜在能力4"</Description>
                  <DropDownListLink>潜在能力1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>E</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>111</ID>
                  <Description>"潜在能力5"</Description>
                  <DropDownListLink>潜在能力1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>10</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>112</ID>
                  <Description>"鑑定"</Description>
                  <DropDownList DisplayValueAsItem="1">0:鑑定
1:未鑑定
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>12</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>113</ID>
                  <Description>"効果1"</Description>
                  <DropDownList DisplayValueAsItem="1">00D7:全能力複写
00D6:全能力鑑定
FFFF:N/A
</DropDownList>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>14</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>114</ID>
                  <Description>"効果2"</Description>
                  <DropDownListLink>効果1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>16</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>115</ID>
                  <Description>"効果3"</Description>
                  <DropDownListLink>効果1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>18</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>116</ID>
                  <Description>"効果4"</Description>
                  <DropDownListLink>効果1</DropDownListLink>
                  <ShowAsHex>1</ShowAsHex>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>1A</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>117</ID>
                  <Description>"数量"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">50:50
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Byte</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>1C</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>118</ID>
              <Description>"English"</Description>
              <Options moHideChildren="1"/>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>119</ID>
                  <Description>"Serial"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>120</ID>
                  <Description>"Item ID"</Description>
                  <DropDownList>0114:携帯コンテナ
0115:カゴ
0116:山師のサイコロ
0117:流浪の民のくつ
0118:コレクトグラス
011D:業物の砥石
0121:投影の染料
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>2</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>121</ID>
                  <Description>"Quality"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">120:120
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>4</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>122</ID>
                  <Description>"Property 1"</Description>
                  <DropDownList DisplayValueAsItem="1">0:Force +10%
1:Force +20%
2:Force +30%
3:Recovery +10%
4:Recovery +20%
5:Recovery +30%
6:Critical LV 1
7:Critical LV 2
8:Critical LV 3
9:Auto Activate 20%
10:Auto Activate 30%
11:Auto Activate 50%
12:Stable Effect 20%
13:Stable Effect 30%
14:Stable Effect 50%
15:Stable Rate 20%
16:Stable Rate 30%
17:Stable Rate 50%
18:Amount Created +1
19:Price +5%
20:Price +10%
21:Price +15%
22:Price -10%
23:Price -20%
24:Price -30%
25:HP +10
26:HP +15
27:HP +25
28:MP +10
29:MP +15
30:MP +25
31:ATK +3
32:ATK +5
33:ATK +8
34:SPD +5
35:SPD +7
36:SPD +12
37:Stats +2
38:Stats +4
39:Stats +6
40:PH RES +5
41:PH RES +7
42:PH RES +12
43:F RES +10
44:F RES +15
45:F RES +25
46:I RES +10
47:I RES +15
48:I RES +25
49:L RES +10
50:L RES +15
51:L RES +25
52:AIL RES +20
53:AIL RES +33
54:AIL RES +50
55:Skill Power +5%
56:Skill Power +7%
57:Skill Power +12%
58:Skill Usage -10%
59:Skill Usage -15%
60:Skill Usage -25%
61:Skill Enhance LV1
62:Skill Enhance LV2
63:Skill Enhance LV3
64:High Speed LV1
65:High Speed LV2
66:High Speed LV3
67:Continuation LV1
68:Continuation LV2
69:Continuation LV3
70:Big
71:Huge
72:Monster Size
73:Small
74:Tiny
75:Flea Size
76:Cute
77:Loveable
78:Ultimate Cuteness
79:Weird Shape
80:Strange Shape
81:Avant-Garde Form
82:Regular Form
83:Beautiful Form
84:Geometrical Form
85:Hard
86:Really Hard
87:Super Hard Body
88:Soft
89:Perky
90:Super Elastic
91:Stinky
92:Really Stinky
93:Fainting in Agony
94:Nice Smell
95:Very Nice Smell
96:Superior Smell
97:Simple Taste
98:Homemade Taste
99:Comfort Taste
100:Sweet
101:Really Sweet
102:Super Sweet
103:Heavenly Sweet
104:Spicy
105:Really Spicy
106:Burns Your Tongue
107:Hellish Spicy
108:Some Nutrition
109:Full Nutrition
110:Perfect Nutrition
111:Bitter
112:Very Bitter
113:Bitter-Spicy
114:Very Bitter-Spicy
115:Ultimate Bitter
116:Sour
117:Salty
118:Juicy
119:Exquisite Taste
120:Tasteless
121:Slag Specific
122:Spirit Specific
123:Beast Specific
124:Dragon Specific
125:Spark Fruit
126:Burst Fruit
127:Fix Slight Wound
128:Fix Wound
129:Fix Major Wound
130:Fix Fatal Wound
131:Stimulant
132:Revival
133:Recovery
134:Unparalyze
135:Detoxify
136:Rewind Time
137:Normalize Body
138:Dark Vision
139:Purification
140:Full of Power
141:Great Vitality
142:Lightweight
143:Sturdy
144:Faster
145:Explosiveness
146:Reinforce Body
147:Save Predicament
148:Keen Sense
149:Monster Calling
150:Repel Monster
151:Light of Life
152:Mythic Potency
153:Spirit Blessing
154:Prevent Ailment
155:Death Odor
156:Ancient Taste
157:Healing Water
158:Water Blessing
159:Fire Guard
160:Ice Guard
161:Lightning Guard
162:North Wind Guard
163:Mystic Guard
164:Earth Guard
165:Silver Honey
166:Gold Honey
167:Fire Power
168:Ice Power
169:Lightning Power
170:Regenerative
171:Gold Power
172:Mystic Power
173:Oblivion Power
174:Life Power
175:Spirit Power
176:Fairy Power
177:Light Power
178:Time Power
179:Diamond Power
180:Moon Power
181:High Power
182:Red Power
183:Glass Power
184:Ancient Power
185:Green Power
186:Power Pour
187:All Power Pour
188:All Soul Pour
189:Hide
190:Show Illusion
191:Virtual Image
192:Bean Brightness
193:Temperature RES
194:Restrain Poison
195:Harmful Poison
196:Neural Poison
197:Weakening Poison
198:Visual Poison
199:Complex Poison
200:Compound Poison
201:Lose Power
202:Heavy Body
203:Brittle
204:Exhaustion
205:Scrape Off Life
206:Ability Decline
207:Resonate Alchemy
208:Amplify Pain
209:Blow Away
210:Spirit's Anger
211:Burn Easily
212:Burn Furiously
213:Scorching Flame
214:Life Capture
215:Sharp Spike
216:Dragon Wave
217:Suppress Movement
218:Rainbow Light
219:Power Words
220:Protection Words
221:Speed Words
222:Life Words
223:Mind Words
224:Soul Words
225:Wind Words
226:Gale Words
227:Acoustic Resonance
228:Amplification
229:Good Quality
230:Quality Change
231:Evolve Materials
65535:N/A
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>8</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>123</ID>
                  <Description>"Property 2"</Description>
                  <DropDownListLink>Property 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>A</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>124</ID>
                  <Description>"Property 3"</Description>
                  <DropDownListLink>Property 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>C</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>125</ID>
                  <Description>"Property 4"</Description>
                  <DropDownListLink>Property 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>E</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>126</ID>
                  <Description>"Property 5"</Description>
                  <DropDownListLink>Property 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>10</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>127</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>12</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>128</ID>
                  <Description>"Effect 1"</Description>
                  <DropDownList DisplayValueAsItem="1">0:PH Damage XS
1:PH Damage S
2:PH Damage M
3:PH Damage L
4:F Damage S
5:F Damage M
6:F Damage L
7:I Damage S
8:I Damage M
9:I Damage L
10:L Damage S
11:L Damage M
12:L Damage L
13:Drop Wood
14:Drop Barrel
15:Drop Slag Statue
16:Flammable Liquid
17:Poisonous Liquid
18:Icy Liquid
19:Spark
20:Bomb Damage L
21:Bomb Damage XL
22:Words of Magic
23:Mantra of Magic
24:Illusion
25:Blade of Light
26:Sword of Light
27:Sun Explosion
28:Galaxy Explosion
29:Wall of Magic
30:Beast Hater Odor
31:Hunger Odor
32:Beast Down Odor
33:Bad Odor
34:Irritating Odor
35:Freedom Odor
36:Stop Movement
37:Seal Movement
38:Interwins Foot
39:Weaken Foot
40:Pose Poison
41:Pose Poison+
42:Blind
43:Weak
44:Combined Effect
45:Inflict Burn
46:Widen Wounds
47:Frostbite
48:Oily
49:Powerless Words
50:Fire Words
51:Ice Words
52:Lightning Words
53:Piercing DMG S
54:Piercing DMG M
55:Piercing DMG L
56:Knock Back S
57:Knock Back M
58:Knock Back L
59:F RES Decrease
60:I RES Decrease
61:L RES Decrease
62:Mass Produce UP
63:Critical Slow
64:Effective Far
65:Effective Near
66:Soul Shutter
67:Burn Away
68:Spiritual Shine
69:Pure Shine
70:Drop of Healing
71:Rain of Healing
72:Storm of Healing
73:HP Recovery XS
74:HP Recovery S
75:HP Recovery M
76:HP Recovery L
77:HP Recovery XL
78:HP Recovery XXL
79:MP Recovery S
80:MP Recovery M
81:MP Recovery L
82:HPMP Recovery S
83:HPMP Recovery M
84:HPMP Recovery L
85:Yummy Heal XS
86:Yummy Heal S
87:Yummy Heal M
88:Yummy Heal L
89:Yummy Heal XL
90:Yummy Heal XXL
91:HP Regen S
92:HP Regen M
93:HP Regen L
94:Regen Recovery S
95:Regen Recovery M
96:Regen Recovery L
97:Major Recovery S
98:Major Recovery M
99:Major Recovery L
100:Heal Blessing S
101:Heal Blessing M
102:Heal Blessing L
103:KO Recovery S
104:KO Recovery M
105:KO Recovery L
106:KO Recovery XL
107:KO Recovery XXL
108:Recover Bonus XS
109:Recover Bonus S
110:Recover Bonus M
111:Recover Bonus L
112:Max HP Expand S
113:Max HP Expand M
114:Max HP Expand L
115:Refresh
116:Clear-Headed
117:Awake
118:Encouraging
119:Energize
120:Recover
121:Get Warm
122:Get Hot
123:Get Cold
124:Get Sturdy
125:Get Energized
126:Lighter Body
127:Double Speed S
128:Double Speed M
129:Double Speed L
130:Unsavory
131:Effect Block
132:Force Backup
133:Side Effect S
134:Side Effect M
135:Side Effect L
136:Fill Stomach
137:Full Stomach
138:Delicious
139:Power of Milk
140:Immunity+
141:Vitality Mold
142:Enhances Power
143:Enhances SPD
144:Enhances DEF
145:Enhances All
146:Enhances Sense
147:Boosts Strength
148:Boosts Accuracy
149:Boosts Sense
150:Heat RES Patch
151:Cold RES Patch
152:Elec. RES Patch
153:Cure-Hold
154:Cure-Poison
155:Cure-All
156:Cure-Blind
157:Cure-Weak
158:Cure-Blow
159:Cures Ills
160:Cures All Ills
161:AIL RES S
162:AIL RES L
163:Stable Mind S
164:Stable Mind M
165:Stable Mind L
166:Improve Body
167:Improve Mind
168:Improve Sense
169:Poison Odor
170:Restraint Odor
171:Exhausting Odor
172:Forbidden Drug
173:Dispersion Drug
174:Devotion Drug
175:Endurance Drug
176:Body Protection
177:Body Blessing
178:Mind Protection
179:Mind Blessing
180:Power Spell
181:Speed Spell
182:Protection Spell
183:Mind Wall
184:PH Wall
185:F Wall
186:I Wall
187:L Wall
188:MP Usage XS
189:MP Usage S
190:MP Usage M
191:MP Usage L
192:MP Usage XL
193:Travel Container
194:Fast Walk
195:Run
196:Like the Wind
197:Gather Rate UP
198:Gather Rate MAX
199:Gather Material+
200:Big Basket
201:Super Basket
202:Extreme Basket
203:Hard to Take Out
204:Easy to Take Out
205:Phantasmagoric
206:Bring Misfortune
207:Bring Fortune
208:Bring Luck
209:Avoid Danger
210:Obstruction
211:Possesses Magic
212:Amplify Power
213:See Props
214:See All Props
215:Copy All Props
216:Property Copy 1
217:Property Copy 2
218:Property Copy 3
219:Property Copy 4
220:Combine Prop
221:Combine All Prop
222:Light Speed
223:Celerity
224:Resonance Bell
225:Harmony Bell
226:Shadow Bell
227:Wise Wisdom
228:Sage Wisdom
229:Fool Wisdom
230:Witch's Guard
231:Ethereal Shift
232:Spirit Conqueror
233:Attack Knowledge
234:Attack Secret
235:Harmony Wish
236:Strength Wish
237:Robust Wish
238:Quickness Wish
239:Fast Run
240:Lightning Walk
241:Dimension Walk
242:Draw Out Wit
243:Wit Overflow
244:Hero Possession
245:Ruler Possession
246:Slag Specific
247:Beast Specific
248:Spirit Specific
249:Dragon Specific
250:Train Body
251:Train Heart
252:Give Power
253:Give Protection
254:Give Speed
255:Gather Attention
256:Unnoticeable
257:Muting
258:Reduce Soul
259:Heal Fragrance
260:Regen Speed Up
261:Super Regen
262:Good Luck Card
263:Discovery Card
264:Wealthy Card
265:Golden Card
266:Scholar Card
267:Wise Man Card
268:Spirit Card
269:Temperature RES
270:Burning Sand
271:Lightning RES
272:Handful of Life
273:Dragon Vein
274:No Slip
275:Power Fill
276:View Vital Spot
277:Block S
278:Block M
279:Block L
280:Alleviate AIL
281:Weaken AIL
282:Cyclic Chain
283:Genesis Power
284:Dragon Aura
285:Damage Chain
286:Absorption Power
287:Power Charge S
288:Power Charge M
289:Power Charge L
290:Call In Success
291:F Pursuit
292:I Pursuit
293:L Pursuit
294:Predicament RES
295:Team Up Info
296:Team Up Secret
297:Stand-in Enhance
298:Powerful RES
299:Giant RES
300:Acrobatic
301:Illusional Ghost
302:Evasion Rate UP
303:Weaken Shock
304:Protection Aura
305:Wall of Chains
306:Null Poison
307:Null Hold
308:Null Weak
309:Null Blind
310:Null Instant KO
311:Null All
312:Return to Base
313:Move Speed UP
314:Move Speed MAX
315:Damage +1
316:Damage +2
317:Damage +3
318:ATK Down 1
319:ATK Down 2
320:ATK Down 3
321:PH RES Down 1
322:PH RES Down 2
323:PH RES Down 3
324:SPD Down 1
325:SPD Down 2
326:SPD Down 3
327:Combo Damage 1
328:Combo Damage 2
329:Combo Damage 3
330:Hold+
331:Poison+
332:Slow+
333:Weak+
334:Blind+
335:Triple Distress+
336:Random+
337:ATK UP 1
338:ATK UP 2
339:ATK UP 3
340:MP Damage 1
341:MP Damage 2
342:ATK/DEF/SPD+
343:HP Regen S
344:HP Regen M
345:HP Regen L
346:HP Regen XL
347:HP Regen XXL
348:Critical S
349:Critical M
350:Critical L
351:Critical XL
352:Critical XXL
353:Evade+ S
354:Evade+ M
355:Evade+ L
356:Evade+ XL
357:Evade+ XXL
358:Hit+ S
359:Hit+ M
360:Hit+ L
361:Hit+ XL
362:Hit+ XXL
363:Guts S
364:Guts M
365:Guts L
366:Guts XL
367:Guts XXL
368:Resist S
369:Resist M
370:Resist L
371:Resist XL
372:Resist XXL
373:PH Reduce S
374:PH Reduce M
375:PH Reduce L
376:PH Reduce XL
377:PH Reduce XXL
378:Fall Back
379:Assist+
380:Transference
381:Null Buff
382:Novice Illusion
383:Skilled Illusion
384:Damage Bonus
385:Convert Damage
386:Power Adjust+
387:Rate Adjust+
388:Damage+:F
389:Damage+:I
390:Damage+:L
391:Burning Body
392:Hunt Knowledge
393:Dragon Soul
394:Fix Slight Wound
395:Fix Wound
396:Fix Major Wound
397:Fix Fatal Wound
398:Stimulant
399:Revival
400:Recovery
401:Unparalyze
402:Detoxify
403:Rewind Time
404:Normalize Body
405:Dark Vision
406:Purification
407:Restrain Poison
408:Harmful Poison
409:Neural Poison
410:Weakening Poison
411:Visual Poison
412:Complex Poison
413:Full of Power
414:Great Vitality
415:Lightweight
416:Sturdy
417:Lose Power
418:Heavy Body
419:Brittle
420:Great Vitality
421:Regenerative
422:Keen Sense
423:Light of Life
424:Monster Calling
425:Repel Monster
426:Faster
427:Explosiveness
428:Exhaustion
429:Scrape Off Life
430:Reinforce Body
431:Ability Decline
432:Mythic Potency
433:Hide
434:Show Illusion
435:Virtual Image
436:Resonate Alchemy
437:Amplify Pain
438:Blow Away
439:Spirit's Anger
440:Burn Easily
441:Burn Furiously
442:Scorching Flame
443:Spirit Blessing
444:Compound Poison
445:Convert Damage
446:Death Odor
447:Power Pour
448:All Power Pour
449:All Soul Pour
450:Spirit Power
451:Fairy Power
452:Light Power
453:Time Power
454:Diamond Power
455:Moon Power
456:High Power
457:Red Power
458:Glass Power
459:Ancient Power
460:Green Power
461:Red Power 2
462:Spike Blow
463:Blue Spike Blow
464:Gold Spike Blow
65535:N/A
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>14</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>129</ID>
                  <Description>"Effect 2"</Description>
                  <DropDownListLink>Effect 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>16</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>130</ID>
                  <Description>"Effect 3"</Description>
                  <DropDownListLink>Effect 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>18</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>131</ID>
                  <Description>"Effect 4"</Description>
                  <DropDownListLink>Effect 1</DropDownListLink>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>2 Bytes</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>1A</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>132</ID>
                  <Description>"Quantity"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Byte</VariableType>
                  <Address>i_item_editor_base_addr</Address>
                  <Offsets>
                    <Offset>1C</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>92</ID>
      <Description>"ゲームウィンドウをウィンドウモードからボーダーレスフルスクリーンに変更します / Set game window mode"</Description>
      <Options moHideChildren="1"/>
      <GroupHeader>1</GroupHeader>
      <CheatEntries>
        <CheatEntry>
          <ID>133</ID>
          <Description>"Set game window from window mode to borderless"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>95</ID>
          <Description>"ゲームをプライマリモニターのみに設定する / For game in primary monitor only"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>94</ID>
          <Description>"注意：最初にお読みください"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
--NO_ACTIVATE
messageDialog([[
PowerShell の実行ポリシーを RemoteSigned に設定する必要があります。そうしないとスクリプトは正しく実行されません。
以下の手順に従って実行ポリシーを設定してください：

1. PowerShell を開く。
2. 次のコマンドを実行する：
   Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

設定後、スクリプトは正常に実行されます。
]], mtWarning, mbOK)
[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>93</ID>
          <Description>"Notice: read me first"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
--NO_ACTIVATE
messageDialog([[
PowerShell execution policy needs to be set to RemoteSigned for scripts to run properly.
Please follow these steps to set the execution policy:

1. Open PowerShell.
2. Run the following command:
   Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

After setting this, scripts will run as expected.
]], mtWarning, mbOK)

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>91</ID>
          <Description>"Powershell ver. 5"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[enable]
{$lua}
if syntaxcheck then return end
--NO_ACTIVATE
--os.execute('powershell -ExecutionPolicy Bypass -File ".\\borderless.ps1"')
--os.execute('pwsh -ExecutionPolicy Bypass -File ".\\borderless_psv5.ps1"')
--os.execute("borderless.ps1")
-- 設定檔名為變數
local psFileNameInCT = "borderless_psv5.ps1"  -- 這是內嵌在 .CT 文件中的檔案名
local psFileName = os.getenv("TEMP") .. "\\temp_script.ps1"  -- 臨時保存的檔案名

-- 查找內嵌的 PowerShell 腳本
local pfile = findTableFile(psFileNameInCT)

if pfile == nil then
    messageDialog("Error: Could not find the embedded PowerShell script '" .. psFileNameInCT .. "'.", mtError, mbOK)
else
    -- 保存內嵌的 PowerShell 腳本到臨時文件
    pfile.saveToFile(psFileName)

    -- 執行 PowerShell 腳本
    os.execute('powershell -ExecutionPolicy Bypass -File "' .. psFileName .. '"')
end
[DISABLE]

</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>89</ID>
          <Description>"Powershell ver. 7"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[enable]
{$lua}
if syntaxcheck then return end
--NO_ACTIVATE
--os.execute('powershell -ExecutionPolicy Bypass -File ".\\borderless.ps1"')
--os.execute('pwsh -ExecutionPolicy Bypass -File ".\\borderless_psv5.ps1"')
--os.execute("borderless.ps1")
-- 設定檔名為變數
local psFileNameInCT = "borderless.ps1"  -- 這是內嵌在 .CT 文件中的檔案名
local psFileName = os.getenv("TEMP") .. "\\temp_script.ps1"  -- 臨時保存的檔案名

-- 查找內嵌的 PowerShell 腳本
local pfile = findTableFile(psFileNameInCT)

if pfile == nil then
    messageDialog("Error: Could not find the embedded PowerShell script '" .. psFileNameInCT .. "'.", mtError, mbOK)
else
    -- 保存內嵌的 PowerShell 腳本到臨時文件
    pfile.saveToFile(psFileName)

    -- 執行 PowerShell 腳本
    os.execute('pwsh -ExecutionPolicy Bypass -File "' .. psFileName .. '"')
end
[DISABLE]

</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <LuaScript>MaxContainerCount = 1999
MaxBasketCount = 120
BaseBasketOffset=0x1B68010
BaseContainerOffset=0x1B68F10
EquipsOffset=0x108A8B0
ItemRecordSize = 32 --0x20

--lua scripts that table checkbox will not be checked with "NO_ACTIVATE" in comment
function onMemRecPostExecute(memoryrecord, newState, succeeded )
    if memoryrecord.Type == vtAutoAssembler and memoryrecord.Script:find("NO_ACTIVATE") and newState and succeeded then
        memoryrecord.disableWithoutExecute()
    end
end

--memory record IDs now allowed to be 'locked'
IDs = {438,
       }

--determine event trigger sequence


function contains(table, val)
   local i = 0
   for i=1, #table do
      if table[i] == val then
         return true
      end
   end
   return false
end


function onMemRecPreExecute(memoryrecord, newstate)
    if contains(IDs, memoryrecord.ID) and newstate then
	    memoryrecord.OnActivate = function(memoryrecord, before, currentstate)
		    return false
	    end
    end
end

function AOBScanModule(moduleName, signature, scanOptions)
    local baseAddr = nil
    local maxAddr = 0
    local modList = enumModules()

    for _, mod in ipairs(modList) do
        if string.lower(mod.Name) == string.lower(moduleName) then
            baseAddr = mod.Address
            maxAddr = baseAddr + mod.Size
            break
        end
    end

    if not baseAddr then
        print("❌ Error: Module " .. moduleName .. " not found!")
        return nil
    end

    -- Debug:
    --print(string.format("✅ %s Base Address: 0x%X", moduleName, baseAddr))
    --print(string.format("📏 Scanning Range: 0x%X - 0x%X", baseAddr, maxAddr))

    local ms = createMemScan()
    ms.firstScan(
        soExactValue,   -- exact scan
        vtByteArray,    -- AOB scan: Byte Array
        nil,            -- RoundingType (no used)
        signature,      -- AOB String
        nil,            -- no need by this scanoption
        baseAddr,       -- start addr
        maxAddr,        -- stop addr
        scanOptions or "+X+R", -- memory protectionflags
        fsmNotAligned,  -- no alignment
        "1",            -- alignment
        true,           -- using Hexadecimal
        true,           -- isNotABinaryString
        false,          -- isUnicode
        false           -- isCaseSensitive
    )

    ms.waitTillDone()

    local results = createFoundList(ms)
    results.initialize()

    if results.getCount() &gt; 0 then
        local addr = results[0]
        --print("🎯 AOB found at: 0x" .. addr)
        results.destroy()
        ms.destroy()
        return addr
    else
        --print("❌ AOB not found in " .. moduleName)
        results.destroy()
        ms.destroy()
        return nil
    end
end

-- test `AOBScanModule()
--local aob_addr_str = AOBScanModule("???.exe", "48 8B 05 ?? ?? ?? ?? 33 ED 48 8B 88", "+X+R")
--if aob_addr_str then
--    print("✅ Final AOB Address: 0x" .. aob_addr_str)
--else
--    print("❌ AOB not found in ???.exe")
--end

registerLuaFunctionHighlight('AOBScanModule')

function clearLuaLog()
    synchronize(function()
      getLuaEngine().MenuItem5.doClick()
    end)
end
registerLuaFunctionHighlight('clearLuaLog')

function closeLuaEngine()
    synchronize(function()
      getLuaEngine().Close()
    end)
end
registerLuaFunctionHighlight('closeLuaEngine')

function closeLuaEngine2()
    synchronize(function()
      getLuaEngine().MenuItem5.doClick()
      getLuaEngine().Close()
    end)
end
registerLuaFunctionHighlight('closeLuaEngine2')

AddressList.Header.OnSectionClick = nil


</LuaScript>
</CheatTable>
