<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <CheatEntries>
    <CheatEntry>
      <ID>2</ID>
      <Description>"Toggle Compact View"</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)
            compactViewMenuItem.Caption = 'Compact View Mode'
            compactViewMenuItem.OnClick = toggleCompactView
            mainMenu.add(compactViewMenuItem)
        end)

        isCompactMenuCreated = true
    end
end

createCompactViewMenu()
toggleCompactView(nil, true)

[DISABLE]
{$lua}
if toggleCompactView then
    toggleCompactView(nil, false)
end
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Get values"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : SongsOfSilence.exe
  Version: 
  Date   : 2025-07-07
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_GET_VALUES,GameAssembly.dll,48 8B 0C 28 B0 01 48 89 0F EB C1 E8 70 4D) // should be unique
alloc(newmem,$1000,INJECT_GET_VALUES)

label(code)
label(return i_base_values_addr)

newmem:
  push r15
  push r14
  //push r13

  xor r14, r14
  lea rcx, [rax+rbp]

chk_loop:


  mov r15, i_base_values_addr
  lea r15, [r15+r14*8]
  cmp [r15], rcx
  je endp
  cmp [r15], 0
  je write_data
  inc r14
  cmp r14, 9
  jb chk_loop
  jmp over_write

write_data:
  mov [r15], rcx
  jmp endp

over_write:
  mov r14, [i_idx]
  lea r15, [r15+r14*8]
  mov [r15], rcx
  inc qword ptr [i_idx]
  cmp qword ptr [i_idx], 9
  jb endp
  mov qword ptr [i_idx], 0


endp:
  //pop r13
  pop r14
  pop r15

code:
  mov rcx,[rax+rbp]
  mov al,01
  jmp return
align 10 cc
  i_base_values_addr:
  dq 0
  align 100 0
  dq 0
  i_idx:
  dq 0

INJECT_GET_VALUES:
  jmp newmem
  nop
return:
registersymbol(INJECT_GET_VALUES i_base_values_addr)

[DISABLE]

INJECT_GET_VALUES:
  db 48 8B 0C 28 B0 01

unregistersymbol(INJECT_GET_VALUES i_base_values_addr)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: GameAssembly.dll+2FC6470

GameAssembly.dll+2FC6450: 5E                    - pop rsi
GameAssembly.dll+2FC6451: C3                    - ret 
GameAssembly.dll+2FC6452: 48 8B 4E 20           - mov rcx,[rsi+20]
GameAssembly.dll+2FC6456: F6 81 35 01 00 00 01  - test byte ptr [rcx+00000135],01
GameAssembly.dll+2FC645D: 75 05                 - jne GameAssembly.dll+2FC6464
GameAssembly.dll+2FC645F: E8 9C C1 80 FD        - call GameAssembly.dll+7D2600
GameAssembly.dll+2FC6464: 48 8B 43 08           - mov rax,[rbx+08]
GameAssembly.dll+2FC6468: 48 85 C0              - test rax,rax
GameAssembly.dll+2FC646B: 74 0E                 - je GameAssembly.dll+2FC647B
GameAssembly.dll+2FC646D: 48 63 00              - movsxd  rax,dword ptr [rax]
// ---------- INJECTING HERE ----------
GameAssembly.dll+2FC6470: 48 8B 0C 28           - mov rcx,[rax+rbp]
// ---------- DONE INJECTING  ----------
GameAssembly.dll+2FC6474: B0 01                 - mov al,01
GameAssembly.dll+2FC6476: 48 89 0F              - mov [rdi],rcx
GameAssembly.dll+2FC6479: EB C1                 - jmp GameAssembly.dll+2FC643C
GameAssembly.dll+2FC647B: E8 70 4D 7B FD        - call GameAssembly.il2cpp_method_get_declaring_type+A0
GameAssembly.dll+2FC6480: CC                    - int 3 
GameAssembly.dll+2FC6481: CC                    - int 3 
GameAssembly.dll+2FC6482: CC                    - int 3 
GameAssembly.dll+2FC6483: CC                    - int 3 
GameAssembly.dll+2FC6484: CC                    - int 3 
GameAssembly.dll+2FC6485: CC                    - int 3 
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>3</ID>
          <Description>"#1"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"#2"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+8</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"#3"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+10</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"#4"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+18</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>7</ID>
          <Description>"#5"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+20</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>8</ID>
          <Description>"#6"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+28</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"#7"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+30</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>10</ID>
          <Description>"#8"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+38</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>11</ID>
          <Description>"#9"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_values_addr+40</Address>
          <Offsets>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>13</ID>
      <Description>"Selected / mouse-over hero"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : SongsOfSilence.exe
  Version: 
  Date   : 2025-07-07
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_SEL_HERO,GameAssembly.dll,F4 7F FD 49 8B 46 08 48 85 C0 74 22 48 63 00 F2 0F 10 04 18) // should be unique
alloc(newmem,$1000,INJECT_SEL_HERO)

label(code)
label(return i_base_hero_addr)

newmem:
  push r15
  lea r15, [rax+rbx]
  mov [i_base_hero_addr], r15

  pop r15

code:
  movsd xmm0,[rax+rbx]
  jmp return
align 10 cc
  i_base_hero_addr:
  dq 0

INJECT_SEL_HERO+0F:
  jmp newmem
return:
registersymbol(INJECT_SEL_HERO i_base_hero_addr)

[DISABLE]

INJECT_SEL_HERO+0F:
  db F2 0F 10 04 18

unregistersymbol(INJECT_SEL_HERO i_base_hero_addr)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: GameAssembly.dll+2FD310D

GameAssembly.dll+2FD30EA: 48 85 C0              - test rax,rax
GameAssembly.dll+2FD30ED: 74 43                 - je GameAssembly.dll+2FD3132
GameAssembly.dll+2FD30EF: 48 8B 4F 20           - mov rcx,[rdi+20]
GameAssembly.dll+2FD30F3: F6 81 35 01 00 00 01  - test byte ptr [rcx+00000135],01
GameAssembly.dll+2FD30FA: 75 05                 - jne GameAssembly.dll+2FD3101
GameAssembly.dll+2FD30FC: E8 FF F4 7F FD        - call GameAssembly.dll+7D2600
GameAssembly.dll+2FD3101: 49 8B 46 08           - mov rax,[r14+08]
GameAssembly.dll+2FD3105: 48 85 C0              - test rax,rax
GameAssembly.dll+2FD3108: 74 22                 - je GameAssembly.dll+2FD312C
GameAssembly.dll+2FD310A: 48 63 00              - movsxd  rax,dword ptr [rax]
// ---------- INJECTING HERE ----------
GameAssembly.dll+2FD310D: F2 0F 10 04 18        - movsd xmm0,[rax+rbx]
// ---------- DONE INJECTING  ----------
GameAssembly.dll+2FD3112: 8B 44 18 08           - mov eax,[rax+rbx+08]
GameAssembly.dll+2FD3116: F2 0F 11 06           - movsd [rsi],xmm0
GameAssembly.dll+2FD311A: 89 46 08              - mov [rsi+08],eax
GameAssembly.dll+2FD311D: 48 8B C6              - mov rax,rsi
GameAssembly.dll+2FD3120: 48 83 C4 30           - add rsp,30
GameAssembly.dll+2FD3124: 41 5E                 - pop r14
GameAssembly.dll+2FD3126: 41 5C                 - pop r12
GameAssembly.dll+2FD3128: 5F                    - pop rdi
GameAssembly.dll+2FD3129: 5E                    - pop rsi
GameAssembly.dll+2FD312A: 5B                    - pop rbx
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>14</ID>
          <Description>"EXP"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_hero_addr</Address>
          <Offsets>
            <Offset>00</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>15</ID>
          <Description>"LV (must be valid value)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_hero_addr</Address>
          <Offsets>
            <Offset>04</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"Skill pt"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_hero_addr</Address>
          <Offsets>
            <Offset>08</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>17</ID>
      <Description>"Songs of Silence  /  https://opencheattables.com"</Description>
      <Color>008400</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <CheatCodes>
    <CodeEntry>
      <Description>Code :mov rcx,[rax+rbp]</Description>
      <AddressString>GameAssembly.dll+2FC6470</AddressString>
      <Before>
        <Byte>74</Byte>
        <Byte>0E</Byte>
        <Byte>48</Byte>
        <Byte>63</Byte>
        <Byte>00</Byte>
      </Before>
      <Actual>
        <Byte>48</Byte>
        <Byte>8B</Byte>
        <Byte>0C</Byte>
        <Byte>28</Byte>
      </Actual>
      <After>
        <Byte>B0</Byte>
        <Byte>01</Byte>
        <Byte>48</Byte>
        <Byte>89</Byte>
        <Byte>0F</Byte>
      </After>
    </CodeEntry>
    <CodeEntry>
      <Description>Code :movsd xmm0,[rax+rbx]</Description>
      <AddressString>GameAssembly.dll+2FD310D</AddressString>
      <Before>
        <Byte>74</Byte>
        <Byte>22</Byte>
        <Byte>48</Byte>
        <Byte>63</Byte>
        <Byte>00</Byte>
      </Before>
      <Actual>
        <Byte>F2</Byte>
        <Byte>0F</Byte>
        <Byte>10</Byte>
        <Byte>04</Byte>
        <Byte>18</Byte>
      </Actual>
      <After>
        <Byte>8B</Byte>
        <Byte>44</Byte>
        <Byte>18</Byte>
        <Byte>08</Byte>
        <Byte>F2</Byte>
      </After>
    </CodeEntry>
  </CheatCodes>
  <UserdefinedSymbols/>
</CheatTable>
