<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>2</ID>
      <Description>"init."</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$asm}
//000000014xxxxxxx
//define(container_base ,"Atelier_Marie_Remake.exe"+23DEBA0)  //

//define(basket_base ,"Atelier_Marie_Remake.exe"+247049C) //

// from item editor:


//registersymbol(container_base)
//registersymbol(basket_base)

{$lua}
if syntaxcheck then return end
if memrec then print(memrec.Description) end

--container address
--g_containerBaseAddress = getAddressSafe("Atelier_Marie_Remake.exe")+0x23DEBA0 -- 1

--g_basketBaseAddress = getAddressSafe("Atelier_Marie_Remake.exe")+0x247049C -- 1


--container size
--g_containerSizeAddress = getAddressSafe("Atelier_Marie_Remake.exe")+0x246FDE0 -- 1
--MaxContainerCount = readSmallInteger(g_containerSizeAddress)

--g_dynBasketAddress = getAddressSafe("Atelier_Marie_Remake.exe")+0x246FDA0 -- 1
--MaxBasketCount = readSmallInteger(g_dynBasketAddress)


getLuaEngine().MenuItem5.doClick()
getLuaEngine().Close()

local _dbg = true
if (_dbg) then
  AOBs = {
    {["name"]="cole", ["aob"]="89 05 ?? ?? ?? ?? 48 8D 4C 24 30", ["pos"]= 2,  ["aoblen"]= 6 , ["symbol"]="cole_base"},
  }
--Field key buff duration F3 0F 10 35 ?? ?? ?? ?? F3 0F 5E 35 ?? ?? ?? ?? 48 8B 4B 48



  local a1 = 'n/a'
  local a2 = 'n/a'
  local a3 = 0
  local a4 = 0
  local a5 = 'n/a'

  for k,v in pairs(AOBs) do
    -- k = array seq.
    for k1,v1 in pairs(v) do
      if (k1 == 'name') then
        a1 = v1
      end
      if (k1 == 'aob') then
        a2 = v1
      end
      if (k1 == 'pos') then
        a3 = v1
      end
      if (k1 == 'aoblen') then
        a4 = v1
      end
      if (k1 == 'symbol') then
        a5 = v1
      end
      --print(k1,v1)
    end
    local aob_addr_str = AOBScanModule('Atelier_Marie_Remake.exe', a2, '+X-C-W')
    local name_addr_str = getAddressSafe(aob_addr_str[0])+a3
    local name_addr_val = readInteger(name_addr_str)
    local aob_addr_val = tonumber(aob_addr_str[0], 16)
    local final_addr_val = name_addr_val + aob_addr_val + a4
    --print(a1 .. " addr: " .. string.format("%08X", final_addr_val))
    registerSymbol(a5, final_addr_val)
    --print('-------')
  end
end

{$asm}
[DISABLE]
{$asm}
//unregistersymbol(container_base)
//unregistersymbol(basket_base)
//unregistersymbol(pristine_key_base)
{$lua}

if syntaxcheck then return end
local disable_array = {"difficult_base", "cole_base", }
local a_len = #(disable_array)
local i = 0
for i = 1, a_len do
  --print(disable_array[i])
  unregisterSymbol(disable_array[i])
end

getLuaEngine().Close()

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>3</ID>
          <Description>"Static values"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <LastState Value="" RealAddress="00000000"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>4</ID>
              <Description>"Cole"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>cole_base</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>5</ID>
              <Description>"Knowledge"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+4</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>13</ID>
              <Description>"Reputation"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+6</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>12</ID>
              <Description>"Days past (from Year 1/Sep/1)"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+8</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>14</ID>
              <Description>"??"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+A</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>7</ID>
              <Description>"??"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+C</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>8</ID>
              <Description>"??"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+E</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>9</ID>
              <Description>"??"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+10</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>10</ID>
              <Description>"??"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+12</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>11</ID>
              <Description>"??"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>cole_base+14</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>21</ID>
          <Description>"Set existing items count"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_FILL_ITEMS,Atelier_Marie_Remake.exe,41 0F BF 16 48 8D 4D 97) // should be unique
alloc(newmem,$1000,INJECT_FILL_ITEMS)

label(code)
label(return)
label(i_item_chk_threshold)
label(i_item_target_cnt)

newmem:
  mov dx, [i_item_chk_threshold]
  cmp word ptr [r14], dx
  jb endp
  mov dx, [i_item_target_cnt]
  cmp word ptr [r14], dx
  jae endp
  mov word ptr [r14], dx

endp:

code:
  movsx edx,word ptr [r14]
  lea rcx,[rbp-69]
  jmp return
align 10 cc
  i_item_chk_threshold:
  dw 2
  i_item_target_cnt:
  dw 32

INJECT_FILL_ITEMS:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_FILL_ITEMS)
registersymbol(i_item_chk_threshold)
registersymbol(i_item_target_cnt)

[DISABLE]

INJECT_FILL_ITEMS:
  db 41 0F BF 16 48 8D 4D 97

unregistersymbol(INJECT_FILL_ITEMS)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+16B3FE

Atelier_Marie_Remake.exe+16B3D5: 33 FF                 - xor edi,edi
Atelier_Marie_Remake.exe+16B3D7: 4C 8D 35 12 5F A5 01  - lea r14,[Atelier_Marie_Remake.exe+1BC12F0]
Atelier_Marie_Remake.exe+16B3DE: 8B DF                 - mov ebx,edi
Atelier_Marie_Remake.exe+16B3E0: 66 41 39 3E           - cmp [r14],di
Atelier_Marie_Remake.exe+16B3E4: 0F 8E 89 00 00 00     - jng Atelier_Marie_Remake.exe+16B473
Atelier_Marie_Remake.exe+16B3EA: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B3EE: E8 AD FD 37 00        - call Atelier_Marie_Remake.exe+4EB1A0
Atelier_Marie_Remake.exe+16B3F3: 8B D3                 - mov edx,ebx
Atelier_Marie_Remake.exe+16B3F5: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B3F9: E8 22 07 38 00        - call Atelier_Marie_Remake.exe+4EBB20
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+16B3FE: 41 0F BF 16           - movsx edx,word ptr [r14]
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+16B402: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B406: E8 45 0A 38 00        - call Atelier_Marie_Remake.exe+4EBE50
Atelier_Marie_Remake.exe+16B40B: 45 33 C0              - xor r8d,r8d
Atelier_Marie_Remake.exe+16B40E: 48 8D 4D 07           - lea rcx,[rbp+07]
Atelier_Marie_Remake.exe+16B412: 8B D3                 - mov edx,ebx
Atelier_Marie_Remake.exe+16B414: E8 C7 24 F2 FF        - call Atelier_Marie_Remake.exe+8D8E0
Atelier_Marie_Remake.exe+16B419: 45 33 C9              - xor r9d,r9d
Atelier_Marie_Remake.exe+16B41C: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B420: 45 33 C0              - xor r8d,r8d
Atelier_Marie_Remake.exe+16B423: 0F 10 40 10           - movups xmm0,[rax+10]
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>24</ID>
              <Description>"Usage: browse container in town area"</Description>
              <LastState Value="" RealAddress="00000000"/>
              <Color>8000FF</Color>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
            <CheatEntry>
              <ID>22</ID>
              <Description>"item count must &gt;="</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>i_item_chk_threshold</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>23</ID>
              <Description>"Set item count to"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>2 Bytes</VariableType>
              <Address>i_item_target_cnt</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"Lock day"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_DAYS_NO_CHG,Atelier_Marie_Remake.exe,89 0D ?? ?? ?? ?? 03 D1 C1 FA 08) // should be unique
alloc(newmem,$1000,INJECT_DAYS_NO_CHG)

alloc(INJECT_DAYS_NO_CHGo, 6)


label(code)
label(return)

INJECT_DAYS_NO_CHGo:
  readmem(INJECT_DAYS_NO_CHG, 6)

newmem:

code:
  mov cx, [cole_base+8]
  //mov [Atelier_Marie_Remake.exe+1BFF950],ecx
  jmp return

INJECT_DAYS_NO_CHG:
  jmp newmem
  nop
return:
registersymbol(INJECT_DAYS_NO_CHG)
registersymbol(INJECT_DAYS_NO_CHGo)
[DISABLE]

INJECT_DAYS_NO_CHG:
  //db 89 0D FB 55 BE 01
  readmem(INJECT_DAYS_NO_CHGo, 6)

unregistersymbol(INJECT_DAYS_NO_CHG)
dealloc(newmem)

unregistersymbol(INJECT_DAYS_NO_CHGo)
dealloc(INJECT_DAYS_NO_CHGo)
{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+1A34F

Atelier_Marie_Remake.exe+1A326: 48 89 70 E8           - mov [rax-18],rsi
Atelier_Marie_Remake.exe+1A32A: 4C 8D 3D CF 5C FE FF  - lea r15,[Atelier_Marie_Remake.exe]
Atelier_Marie_Remake.exe+1A331: 48 89 78 E0           - mov [rax-20],rdi
Atelier_Marie_Remake.exe+1A335: 4C 89 68 D0           - mov [rax-30],r13
Atelier_Marie_Remake.exe+1A339: 0F B7 E9              - movzx ebp,cx
Atelier_Marie_Remake.exe+1A33C: 0F 1F 40 00           - nop dword ptr [rax+00]
Atelier_Marie_Remake.exe+1A340: 8B 0D 0A 56 BE 01     - mov ecx,[Atelier_Marie_Remake.exe+1BFF950]
Atelier_Marie_Remake.exe+1A346: B8 B7 60 0B B6        - mov eax,B60B60B7
Atelier_Marie_Remake.exe+1A34B: FF C1                 - inc ecx
Atelier_Marie_Remake.exe+1A34D: F7 E9                 - imul ecx
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+1A34F: 89 0D FB 55 BE 01     - mov [Atelier_Marie_Remake.exe+1BFF950],ecx
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+1A355: 03 D1                 - add edx,ecx
Atelier_Marie_Remake.exe+1A357: C1 FA 08              - sar edx,08
Atelier_Marie_Remake.exe+1A35A: 8B CA                 - mov ecx,edx
Atelier_Marie_Remake.exe+1A35C: FF C2                 - inc edx
Atelier_Marie_Remake.exe+1A35E: C1 E9 1F              - shr ecx,1F
Atelier_Marie_Remake.exe+1A361: 03 CA                 - add ecx,edx
Atelier_Marie_Remake.exe+1A363: E8 28 71 09 00        - call Atelier_Marie_Remake.exe+B1490
Atelier_Marie_Remake.exe+1A368: 66 89 05 E5 55 BE 01  - mov [Atelier_Marie_Remake.exe+1BFF954],ax
Atelier_Marie_Remake.exe+1A36F: B8 89 88 88 88        - mov eax,88888889
Atelier_Marie_Remake.exe+1A374: F7 2D D6 55 BE 01     - imul [Atelier_Marie_Remake.exe+1BFF950]
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>27</ID>
          <Description>"Battle: inf MP"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_BATTLE_INF_MP,Atelier_Marie_Remake.exe,66 29 58 0A 48 8B 8F 30 07 00 00) // should be unique
alloc(newmem,$1000,INJECT_BATTLE_INF_MP)

label(code)
label(return)

newmem:
  cmp bx, 0
  jle code
  mov bx, [rax+08]
  mov [rax+0A], bx
  xor bx, bx



code:
  sub [rax+0A],bx
  mov rcx,[rdi+00000730]
  jmp return

INJECT_BATTLE_INF_MP:
  jmp newmem
  nop 6
return:
registersymbol(INJECT_BATTLE_INF_MP)

[DISABLE]

INJECT_BATTLE_INF_MP:
  db 66 29 58 0A 48 8B 8F 30 07 00 00

unregistersymbol(INJECT_BATTLE_INF_MP)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+58AD3B

Atelier_Marie_Remake.exe+58AD1D: CC                    - int 3 
Atelier_Marie_Remake.exe+58AD1E: CC                    - int 3 
Atelier_Marie_Remake.exe+58AD1F: CC                    - int 3 
Atelier_Marie_Remake.exe+58AD20: 48 89 5C 24 08        - mov [rsp+08],rbx
Atelier_Marie_Remake.exe+58AD25: 57                    - push rdi
Atelier_Marie_Remake.exe+58AD26: 48 83 EC 20           - sub rsp,20
Atelier_Marie_Remake.exe+58AD2A: 48 8B F9              - mov rdi,rcx
Atelier_Marie_Remake.exe+58AD2D: 8B DA                 - mov ebx,edx
Atelier_Marie_Remake.exe+58AD2F: 48 8B 89 30 07 00 00  - mov rcx,[rcx+00000730]
Atelier_Marie_Remake.exe+58AD36: E8 C5 A5 B3 FF        - call Atelier_Marie_Remake.exe+C5300
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+58AD3B: 66 29 58 0A           - sub [rax+0A],bx
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+58AD3F: 48 8B 8F 30 07 00 00  - mov rcx,[rdi+00000730]
Atelier_Marie_Remake.exe+58AD46: E8 B5 A5 B3 FF        - call Atelier_Marie_Remake.exe+C5300
Atelier_Marie_Remake.exe+58AD4B: 66 83 78 0A 00        - cmp word ptr [rax+0A],00
Atelier_Marie_Remake.exe+58AD50: 7D 06                 - jnl Atelier_Marie_Remake.exe+58AD58
Atelier_Marie_Remake.exe+58AD52: 33 C9                 - xor ecx,ecx
Atelier_Marie_Remake.exe+58AD54: 66 89 48 0A           - mov [rax+0A],cx
Atelier_Marie_Remake.exe+58AD58: 48 8B 5C 24 30        - mov rbx,[rsp+30]
Atelier_Marie_Remake.exe+58AD5D: 48 83 C4 20           - add rsp,20
Atelier_Marie_Remake.exe+58AD61: 5F                    - pop rdi
Atelier_Marie_Remake.exe+58AD62: C3                    - ret 
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>30</ID>
          <Description>"Battle: inf items"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_BATTLE_ITEM_NO_DEC,Atelier_Marie_Remake.exe,66 FF 8C 43 ?? ?? ?? ?? 8B 15 ?? ?? ?? ?? 85 D2 78 ?? 48 8B 4E 08 48 8B 01 FF 90 00 02 00 00 48 8B 5E 08) // should be unique
alloc(newmem,$1000,INJECT_BATTLE_ITEM_NO_DEC)

alloc(INJECT_BATTLE_ITEM_NO_DECo, 8)

label(code)
label(return)

INJECT_BATTLE_ITEM_NO_DECo:
  readmem(INJECT_BATTLE_ITEM_NO_DEC, 8)

newmem:

code:
  //dec word ptr [rbx+rax*2+01BC12F0]
  jmp return

INJECT_BATTLE_ITEM_NO_DEC:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_BATTLE_ITEM_NO_DEC)
registersymbol(INJECT_BATTLE_ITEM_NO_DECo)
[DISABLE]

INJECT_BATTLE_ITEM_NO_DEC:
  //db 66 FF 8C 43 F0 12 BC 01
  readmem(INJECT_BATTLE_ITEM_NO_DECo, 8)

unregistersymbol(INJECT_BATTLE_ITEM_NO_DEC)
dealloc(newmem)

unregistersymbol(INJECT_BATTLE_ITEM_NO_DECo)
dealloc(INJECT_BATTLE_ITEM_NO_DECo)
{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+8671AA

Atelier_Marie_Remake.exe+867182: 7E 17                    - jle Atelier_Marie_Remake.exe+86719B
Atelier_Marie_Remake.exe+867184: 48 8B CD                 - mov rcx,rbp
Atelier_Marie_Remake.exe+867187: E8 64 3B C8 FF           - call Atelier_Marie_Remake.exe+4EACF0
Atelier_Marie_Remake.exe+86718C: 48 63 C8                 - movsxd  rcx,eax
Atelier_Marie_Remake.exe+86718F: 48 8D 04 49              - lea rax,[rcx+rcx*2]
Atelier_Marie_Remake.exe+867193: 66 FF 8C 43 50 15 BC 01  - dec word ptr [rbx+rax*2+01BC1550]
Atelier_Marie_Remake.exe+86719B: 48 8B CD                 - mov rcx,rbp
Atelier_Marie_Remake.exe+86719E: E8 4D 3B C8 FF           - call Atelier_Marie_Remake.exe+4EACF0
Atelier_Marie_Remake.exe+8671A3: 48 63 C8                 - movsxd  rcx,eax
Atelier_Marie_Remake.exe+8671A6: 48 8D 04 49              - lea rax,[rcx+rcx*2]
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+8671AA: 66 FF 8C 43 F0 12 BC 01  - dec word ptr [rbx+rax*2+01BC12F0]
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+8671B2: 8B 15 58 1B 3A 01        - mov edx,[Atelier_Marie_Remake.exe+1C08D10]
Atelier_Marie_Remake.exe+8671B8: 85 D2                    - test edx,edx
Atelier_Marie_Remake.exe+8671BA: 78 0D                    - js Atelier_Marie_Remake.exe+8671C9
Atelier_Marie_Remake.exe+8671BC: 48 8B 4E 08              - mov rcx,[rsi+08]
Atelier_Marie_Remake.exe+8671C0: 48 8B 01                 - mov rax,[rcx]
Atelier_Marie_Remake.exe+8671C3: FF 90 00 02 00 00        - call qword ptr [rax+00000200]
Atelier_Marie_Remake.exe+8671C9: 48 8B 5E 08              - mov rbx,[rsi+08]
Atelier_Marie_Remake.exe+8671CD: 48 8B CD                 - mov rcx,rbp
Atelier_Marie_Remake.exe+8671D0: 48 8B 3B                 - mov rdi,[rbx]
Atelier_Marie_Remake.exe+8671D3: E8 18 3B C8 FF           - call Atelier_Marie_Remake.exe+4EACF0
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>31</ID>
          <Description>"Battle: damage control"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_BATTLE_DAMAGE_MULTI,Atelier_Marie_Remake.exe,66 29 48 06 8B 06) // should be unique
alloc(newmem,$1000,INJECT_BATTLE_DAMAGE_MULTI)

label(code)
label(return)
label(vf_damage_to_player)
label(vf_damage_to_enemy)


newmem:
  push rbx
  mov bx, [rax+08]
  test bx, bx
  jz to_enemy
  db EB 3B 54
  db 68 69 73 20 74 61 62 6C 65
  db 20 63 6F 6D
  db 65 73 20 66 72 6F 6D 20
  db 68 74 74 70
  db 73 3A 2F 2F 6F 70 65 6E 63 68 65 61
  db 74 74 61 62
  db 6C 65 73 2E
  db 63 6F 6D 20
  db 2F 20 43 45 20 37 2E 34 2B

  vmovss xmm14, [vf_damage_to_player]
  cvtsi2ss xmm15, ecx
  vmulss xmm13, xmm14, xmm15
  vcvtss2si ecx, xmm13
  jmp endp

to_enemy:
  vmovss xmm14, [vf_damage_to_enemy]
  cvtsi2ss xmm15, ecx
  vmulss xmm13, xmm14, xmm15
  vcvtss2si ecx, xmm13

  cmp ecx, #32000
  jbe endp
  mov ecx, #32000

endp:
  pop rbx

code:
  sub [rax+06],cx
  mov eax,[rsi]
  jmp return
align 10 cc
  vf_damage_to_player:
  dd (float)0.75
  vf_damage_to_enemy:
  dd (float)1.00
  vf_60000:
  dd (float)60000

INJECT_BATTLE_DAMAGE_MULTI:
  jmp newmem
  nop
return:
registersymbol(INJECT_BATTLE_DAMAGE_MULTI)
registersymbol(vf_damage_to_player)
registersymbol(vf_damage_to_enemy)

[DISABLE]

INJECT_BATTLE_DAMAGE_MULTI:
  db 66 29 48 06 8B 06

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+58AB7C

Atelier_Marie_Remake.exe+58AB57: 7D 05                 - jnl Atelier_Marie_Remake.exe+58AB5E
Atelier_Marie_Remake.exe+58AB59: B9 01 00 00 00        - mov ecx,00000001
Atelier_Marie_Remake.exe+58AB5E: 0F BF C1              - movsx eax,cx
Atelier_Marie_Remake.exe+58AB61: 0F BF CD              - movsx ecx,bp
Atelier_Marie_Remake.exe+58AB64: 48 8B 6C 24 30        - mov rbp,[rsp+30]
Atelier_Marie_Remake.exe+58AB69: 2B C8                 - sub ecx,eax
Atelier_Marie_Remake.exe+58AB6B: 89 0E                 - mov [rsi],ecx
Atelier_Marie_Remake.exe+58AB6D: 48 8B 8B 30 07 00 00  - mov rcx,[rbx+00000730]
Atelier_Marie_Remake.exe+58AB74: E8 87 A7 B3 FF        - call Atelier_Marie_Remake.exe+C5300
Atelier_Marie_Remake.exe+58AB79: 0F B7 0E              - movzx ecx,word ptr [rsi]
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+58AB7C: 66 29 48 06           - sub [rax+06],cx
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+58AB80: 8B 06                 - mov eax,[rsi]
Atelier_Marie_Remake.exe+58AB82: 01 83 68 04 00 00     - add [rbx+00000468],eax
Atelier_Marie_Remake.exe+58AB88: 80 7C 24 50 00        - cmp byte ptr [rsp+50],00
Atelier_Marie_Remake.exe+58AB8D: 74 14                 - je Atelier_Marie_Remake.exe+58ABA3
Atelier_Marie_Remake.exe+58AB8F: 83 FF FF              - cmp edi,-01
Atelier_Marie_Remake.exe+58AB92: 74 0F                 - je Atelier_Marie_Remake.exe+58ABA3
Atelier_Marie_Remake.exe+58AB94: 81 FF 34 75 00 00     - cmp edi,00007534
Atelier_Marie_Remake.exe+58AB9A: 77 07                 - ja Atelier_Marie_Remake.exe+58ABA3
Atelier_Marie_Remake.exe+58AB9C: 8B CF                 - mov ecx,edi
Atelier_Marie_Remake.exe+58AB9E: E8 4D 33 FC FF        - call Atelier_Marie_Remake.exe+54DEF0
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>32</ID>
              <Description>"Damage multiplier to player"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_damage_to_player</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>33</ID>
              <Description>"Damage multiplier to enemy (max 32000)"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_damage_to_enemy</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>36</ID>
          <Description>"EXP multiplier"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_XP_MULTI,Atelier_Marie_Remake.exe,48 6B D1 1C 66 01 04 2A) // should be unique
alloc(newmem,$1000,INJECT_XP_MULTI)

label(code)
label(return)
label(vf_xp_multi)

newmem:
  cmp eax, #1000
  jge code

  vmovss xmm14, [vf_xp_multi]
  cvtsi2ss xmm15, eax
  vmulss xmm13, xmm14, xmm15
  cvtss2si eax, xmm13
  cmp eax, #1000
  jle code
  mov eax, #1000


code:
  imul rdx,rcx,1C
  add [rdx+rbp],ax
  jmp return
align 10 cc
  vf_xp_multi:
  dd (float)1.15

INJECT_XP_MULTI:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_XP_MULTI)
registersymbol(vf_xp_multi)

[DISABLE]

INJECT_XP_MULTI:
  db 48 6B D1 1C 66 01 04 2A

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+91BED2

Atelier_Marie_Remake.exe+91BEA6: 66 66 0F 1F 84 00 00 00 00 00  - nop word ptr [rax+rax+00000000]
Atelier_Marie_Remake.exe+91BEB0: 48 8B 43 08                    - mov rax,[rbx+08]
Atelier_Marie_Remake.exe+91BEB4: 8B D7                          - mov edx,edi
Atelier_Marie_Remake.exe+91BEB6: 48 8B 48 30                    - mov rcx,[rax+30]
Atelier_Marie_Remake.exe+91BEBA: E8 F1 DF C7 FF                 - call Atelier_Marie_Remake.exe+599EB0
Atelier_Marie_Remake.exe+91BEBF: 48 85 C0                       - test rax,rax
Atelier_Marie_Remake.exe+91BEC2: 74 16                          - je Atelier_Marie_Remake.exe+91BEDA
Atelier_Marie_Remake.exe+91BEC4: 48 8B 40 10                    - mov rax,[rax+10]
Atelier_Marie_Remake.exe+91BEC8: 48 63 88 50 04 00 00           - movsxd  rcx,dword ptr [rax+00000450]
Atelier_Marie_Remake.exe+91BECF: 0F B7 06                       - movzx eax,word ptr [rsi]
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+91BED2: 48 6B D1 1C                    - imul rdx,rcx,1C
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+91BED6: 66 01 04 2A                    - add [rdx+rbp],ax
Atelier_Marie_Remake.exe+91BEDA: FF C7                          - inc edi
Atelier_Marie_Remake.exe+91BEDC: 48 83 C6 04                    - add rsi,04
Atelier_Marie_Remake.exe+91BEE0: 83 FF 03                       - cmp edi,03
Atelier_Marie_Remake.exe+91BEE3: 7C CB                          - jl Atelier_Marie_Remake.exe+91BEB0
Atelier_Marie_Remake.exe+91BEE5: 8B 43 5C                       - mov eax,[rbx+5C]
Atelier_Marie_Remake.exe+91BEE8: 48 8B 7C 24 70                 - mov rdi,[rsp+70]
Atelier_Marie_Remake.exe+91BEED: 48 8B 74 24 68                 - mov rsi,[rsp+68]
Atelier_Marie_Remake.exe+91BEF2: 48 8B 6C 24 60                 - mov rbp,[rsp+60]
Atelier_Marie_Remake.exe+91BEF7: 85 C0                          - test eax,eax
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>37</ID>
              <Description>"Multiplier (max XP = 1000)"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_xp_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>18</ID>
          <Description>"!!Set all items to 50"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Atelier_Marie_Remake.exe
  Version: 
  Date   : 2023-07-13
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_FILL_ITEMS_ALL,Atelier_Marie_Remake.exe,66 41 39 3E 0F 8E 89 00 00 00) // should be unique
alloc(newmem,$1000,INJECT_FILL_ITEMS_ALL)

label(code)
label(return)

newmem:
  mov di, 32
  cmp [r14], di
  jae endp
  mov [r14], di

endp:
  xor di, di
code:
  cmp [r14],di
  jng Atelier_Marie_Remake.exe+16B473
  jmp return

INJECT_FILL_ITEMS_ALL:
  jmp newmem
  nop 5
return:
registersymbol(INJECT_FILL_ITEMS_ALL)

[DISABLE]

INJECT_FILL_ITEMS_ALL:
  db 66 41 39 3E 0F 8E 89 00 00 00

unregistersymbol(INJECT_FILL_ITEMS_ALL)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Atelier_Marie_Remake.exe+16B3E0

Atelier_Marie_Remake.exe+16B3B9: 48 81 EC E0 00 00 00  - sub rsp,000000E0
Atelier_Marie_Remake.exe+16B3C0: 48 8B F1              - mov rsi,rcx
Atelier_Marie_Remake.exe+16B3C3: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B3C7: E8 F4 DE 37 00        - call Atelier_Marie_Remake.exe+4E92C0
Atelier_Marie_Remake.exe+16B3CC: 48 8B 06              - mov rax,[rsi]
Atelier_Marie_Remake.exe+16B3CF: 48 8B CE              - mov rcx,rsi
Atelier_Marie_Remake.exe+16B3D2: FF 50 08              - call qword ptr [rax+08]
Atelier_Marie_Remake.exe+16B3D5: 33 FF                 - xor edi,edi
Atelier_Marie_Remake.exe+16B3D7: 4C 8D 35 12 5F A5 01  - lea r14,[Atelier_Marie_Remake.exe+1BC12F0]
Atelier_Marie_Remake.exe+16B3DE: 8B DF                 - mov ebx,edi
// ---------- INJECTING HERE ----------
Atelier_Marie_Remake.exe+16B3E0: 66 41 39 3E           - cmp [r14],di
// ---------- DONE INJECTING  ----------
Atelier_Marie_Remake.exe+16B3E4: 0F 8E 89 00 00 00     - jng Atelier_Marie_Remake.exe+16B473
Atelier_Marie_Remake.exe+16B3EA: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B3EE: E8 AD FD 37 00        - call Atelier_Marie_Remake.exe+4EB1A0
Atelier_Marie_Remake.exe+16B3F3: 8B D3                 - mov edx,ebx
Atelier_Marie_Remake.exe+16B3F5: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B3F9: E8 22 07 38 00        - call Atelier_Marie_Remake.exe+4EBB20
Atelier_Marie_Remake.exe+16B3FE: 41 0F BF 16           - movsx edx,word ptr [r14]
Atelier_Marie_Remake.exe+16B402: 48 8D 4D 97           - lea rcx,[rbp-69]
Atelier_Marie_Remake.exe+16B406: E8 45 0A 38 00        - call Atelier_Marie_Remake.exe+4EBE50
Atelier_Marie_Remake.exe+16B40B: 45 33 C0              - xor r8d,r8d
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>19</ID>
              <Description>"WARNING: may affect game progress!!"</Description>
              <LastState Value="" RealAddress="00000000"/>
              <Color>8000FF</Color>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
            <CheatEntry>
              <ID>20</ID>
              <Description>"Usage: browse container in town area"</Description>
              <LastState Value="" RealAddress="00000000"/>
              <Color>8000FF</Color>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>38</ID>
      <Description>"(2023/07/13) Atelier Marie Remake: The Alchemist of Salburg  /  https://opencheattables.com  /  CE 7.5+"</Description>
      <LastState Value="" RealAddress="00000000"/>
      <Color>00BB5E</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <LuaScript>MaxContainerCount = 9999
MaxBasketCount = 300

g_containerBaseAddress = nil

--print(MaxBasketCount)

--local dynBasketAddress = getAddressSafe("???.exe")+0x?????
--MaxBasketCount = readSmallInteger(dynBasketAddress)
--print(MaxBasketCount)

ItemRecordSize = 128

--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 = {41, 158, 208,
       }

--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, aobSignaturePrivileges, alignmentType, alignmentParam)
	--checkArgType(moduleName, 1, 'string')
	if not signature or not moduleName then return end
	index = index or 1
	local modStartAddr = getAddress(moduleName)
	local modEndAddr = modStartAddr + getModuleSize(moduleName)
	local ms = createMemScan()
	if type(signature) == 'table' then
		local sig = ''
		for i, byte in ipairs(signature) do
			sig = sig..string.format('%02X', byte)
		end
		signature = sig
	end
	ms.firstScan(soExactValue, vtByteArray, nil, signature, nil, modStartAddr, modEndAddr,
				 aobSignaturePrivileges, alignmentType, alignmentParam, true, true, false, false)
	ms.waitTillDone()
	local results = createFoundList(ms)
	results.initialize()
	ms.destroy()
	return results
end
registerLuaFunctionHighlight('AOBScanModule')



AddressList.Header.OnSectionClick = nil


</LuaScript>
</CheatTable>
