<?xml version="1.0" encoding="utf-8"?>
<CheatTable UsesMono="1" AutoAttach="Silence of the Siren.exe" FullClientAddressList="1" CheatEngineTableVersion="52">
  <CheatEntries>
    <CheatEntry NoScriptTag="1">
      <ID>22</ID>
      <Description>"Get player (activate first. needs to be at map screen) "</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]

usemono()

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048,Hosaf.Player:GetActiveHero)
alloc(currentPlayer,8)
registersymbol(currentPlayer)

hook(Hosaf.Player:GetActiveHero, newmem, originalcode)


//this registers the function Hosaf_Player_IsHuman for CCode
Hosaf.Player:IsHuman:
Hosaf_Player_IsHuman:

newmem: //this is allocated memory, you have read,write,execute access
//place your code here
{$ccode CurrentPlayerInstance=RCX}
extern void* currentPlayer;
int Hosaf_Player_IsHuman(void* Instance);
int isHuman=Hosaf_Player_IsHuman((void*)CurrentPlayerInstance);

if (isHuman)
{
  currentPlayer=(void*)CurrentPlayerInstance;
}
{$asm}

jmp originalcode

 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
unhook(Hosaf.Player:GetActiveHero)
dealloc(*)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry NoScriptTag="1">
          <ID>23</ID>
          <Description>"godmode script"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
USEMONO()
PREPARECHEADER(Hosaf.Stack,m_combatArmy,m_player,m_cachedEntity)

alloc(newmem,2048,Hosaf.Stack:Damage)
alloc(godmode,4)
alloc(hosaf_stack_damage_originalbytes,11)

registersymbol(godmode)
godmode:
dd 0

{$c}

typedef void* (__cdecl HOSAF_STACK_DAMAGE)(void *instance, void* attacker, int damage, void* damagetype, int critical, int prediction);
extern HOSAF_STACK_DAMAGE originalcode;
extern unsigned long long currentPlayer;
extern int godmode;

void *Hosaf_Stack_FixDamage(Hosaf_Stack *instance, void* attacker, int damage, void* damagetype, int critical, int prediction)
{
  if ((godmode==1) &amp;&amp; (prediction==0))   //check if this stack belongs to the player
  {
    if ((instance-&gt;m_combatArmy) &amp;&amp; (instance-&gt;m_combatArmy-&gt;m_player) &amp;&amp; ((unsigned long long)(instance-&gt;m_combatArmy-&gt;m_player-&gt;m_cachedEntity)==currentPlayer))
    {
      critical=0;
      damage=1; //make it a little more fun
    }
  }

  return originalcode(instance, attacker, damage, damagetype, critical, prediction);

}
{$asm}

hook(Hosaf.Stack:Damage, Hosaf_Stack_FixDamage, originalcode)

 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
unhook(Hosaf.Stack:Damage)
dealloc(*)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry ValueOnActivate="1" ValueOnDeactivate="0">
          <ID>20</ID>
          <Description>"godmode"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>godmode</Address>
          <Hotkeys>
            <Hotkey>
              <Action>Toggle Activation</Action>
              <Keys>
                <Key>17</Key>
                <Key>71</Key>
              </Keys>
              <ID>0</ID>
              <ActivateSound TTS="EN">{MRDescription} Activated</ActivateSound>
              <DeactivateSound TTS="EN">{MRDescription} Deactivated</DeactivateSound>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
        <CheatEntry NoCheckbox="1">
          <ID>24</ID>
          <Description>"--------------------------------extra data---------------------------------------------"</Description>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"aura coins"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>20</Offset>
            <Offset>10</Offset>
            <Offset>18</Offset>
            <Offset>10</Offset>
            <Offset>40</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>7</ID>
          <Description>"aura coins UI"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>20</Offset>
            <Offset>10</Offset>
            <Offset>18</Offset>
            <Offset>18</Offset>
            <Offset>40</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"limerite"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>24</Offset>
            <Offset>10</Offset>
            <Offset>18</Offset>
            <Offset>10</Offset>
            <Offset>40</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>8</ID>
          <Description>"limerite ui"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>24</Offset>
            <Offset>10</Offset>
            <Offset>18</Offset>
            <Offset>18</Offset>
            <Offset>40</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>17</ID>
          <Description>"limerite"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>28</Offset>
            <Offset>10</Offset>
            <Offset>18</Offset>
            <Offset>10</Offset>
            <Offset>40</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>18</ID>
          <Description>"limerite ui"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>28</Offset>
            <Offset>10</Offset>
            <Offset>18</Offset>
            <Offset>18</Offset>
            <Offset>40</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"current hero name"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>String</VariableType>
          <Length>40</Length>
          <Unicode>1</Unicode>
          <CodePage>0</CodePage>
          <ZeroTerminate>1</ZeroTerminate>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>14</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"current hero movement points"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>B4</Offset>
            <Offset>48</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>10</ID>
          <Description>"army slot 0 count (64)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>1C</Offset>
            <Offset>20</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>30</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>11</ID>
          <Description>"army slot 1 count (221)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>1C</Offset>
            <Offset>28</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>30</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>15</ID>
          <Description>"army slot 2 count"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>1C</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>30</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>14</ID>
          <Description>"army slot 3 count"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>1C</Offset>
            <Offset>38</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>30</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>13</ID>
          <Description>"army slot 4 count"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>1C</Offset>
            <Offset>40</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>30</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>12</ID>
          <Description>"army slot 5 count"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentPlayer</Address>
          <Offsets>
            <Offset>1C</Offset>
            <Offset>48</Offset>
            <Offset>10</Offset>
            <Offset>10</Offset>
            <Offset>30</Offset>
            <Offset>30</Offset>
            <Offset>10</Offset>
            <Offset>38</Offset>
            <Offset>30</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"battlefield: active stack count"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CombatUIController.sm_instance</Address>
          <Offsets>
            <Offset>2C</Offset>
            <Offset>38</Offset>
            <Offset>10</Offset>
            <Offset>28</Offset>
            <Offset>30</Offset>
            <Offset>18</Offset>
          </Offsets>
          <Hotkeys>
            <Hotkey>
              <Action>Set Value</Action>
              <Keys>
                <Key>17</Key>
                <Key>18</Key>
                <Key>68</Key>
              </Keys>
              <Value>value+10</Value>
              <ID>0</ID>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <Comments>Hosaf.Player has GetActiveHero which is called a lot on the map

Hosaf.Player has a method calls isHuman, which can be used to determine if it's the player (We only care about single player)

if it is, store it as the player pointer


Hosaf.PlayerResources has a method named Spend.  Making it return instantly makes spending on units cost nothing

Hosaf.Player.m_state.m_resources is the Hosaf.PlayerResources for the specific player
</Comments>
  <DisassemblerComments>
    <DisassemblerComment>
      <Address>1EB6FDFC07B</Address>
      <Comment>player.m_state
</Comment>
    </DisassemblerComment>
    <DisassemblerComment>
      <Address>1EB6FDFC07F</Address>
      <Comment>m_state.m_playerSource
</Comment>
    </DisassemblerComment>
    <DisassemblerComment>
      <Address>1EB6FDFC089</Address>
      <Comment>m_playerSourceType
</Comment>
    </DisassemblerComment>
  </DisassemblerComments>
</CheatTable>
