<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="18">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"main script"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(myforce)
registersymbol(myforce)

newmem:
mov [myforce],ecx // store the address inside ECX
mov [ecx+000001A2],edi
jmp returnhere

myforce:
dd 0

"XWINGALLIANCE.EXE"+907D8:
jmp newmem
nop
returnhere:

[DISABLE]
"XWINGALLIANCE.EXE"+907D8:
mov [ecx+000001A2],edi
//Alt: db 89 B9 A2 01 00 00

dealloc(newmem)

unregistersymbol(myforce)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1</ID>
          <Description>"freeze/unfreeze all (with lua thread)"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$Lua}
 if syntaxcheck then return end

 getMemRecByDesc = getAddressList().getMemoryRecordByDescription

 -- adjust those
 ShieldUpMR       = getMemRecByDesc('ShieldUp')
 ShieldDownMR     = getMemRecByDesc('ShieldDown')
 PowerLaserUpMR   = getMemRecByDesc('PowerLaserUp')
 PowerLaserDownMR = getMemRecByDesc('PowerLaserDown')
 -- ^^^^ adjust those

 FreezeThreadExit = false
 FreezeThreadFunc =
  function (thread)
   thread.freeOnTerminate(false) -- because I want to use 'waitfor'
   repeat
     Sleep(500)
     if FreezeThreadExit then return end
     local c=ShieldUpMR.Value               -- adjust this line
                                            -- (the first memrec should be fine)
   until (c~='??')

   -- adjust those
   ShieldUpMR.Value = 999
   ShieldUpMR.Active = true
   ShieldDownMR.Value = 999
   ShieldDownMR.Active = true
   PowerLaserUpMR.Value = 999
   PowerLaserUpMR.Active = true
   PowerLaserDownMR.Value = 999
   PowerLaserDownMR.Active = true
   -- ^^^^ adjust those
  end

 FreezeThread = createNativeThread( FreezeThreadFunc )
{$Asm}
 
[DISABLE]
{$Lua}
 if syntaxcheck then return end

 FreezeThreadExit = true
 FreezeThread.waitfor()
 FreezeThread.destroy()

 -- adjust those
 ShieldUpMR.Active = false
 ShieldDownMR.Active = false
 PowerLaserUpMR.Active = false
 PowerLaserDownMR.Active = false
 -- ^^^^ adjust those
{$Asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"freeze/unfreeze all (with lua timer)"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$Lua}
 if syntaxcheck then return end

 getMemRecByDesc = getAddressList().getMemoryRecordByDescription

 -- adjust those
 ShieldUpMR       = getMemRecByDesc('ShieldUp')
 ShieldDownMR     = getMemRecByDesc('ShieldDown')
 PowerLaserUpMR   = getMemRecByDesc('PowerLaserUp')
 PowerLaserDownMR = getMemRecByDesc('PowerLaserDown')
 -- ^^^^ adjust those

 FreezeTimerFunc =
 function (timer)
   if ShieldUpMR.Value=='??' -- adjust this line
   then return end           -- (the first memrec should be fine)

   -- adjust those
   ShieldUpMR.Value = 999
   ShieldUpMR.Active = true
   ShieldDownMR.Value = 999
   ShieldDownMR.Active = true
   PowerLaserUpMR.Value = 999
   PowerLaserUpMR.Active = true
   PowerLaserDownMR.Value = 999
   PowerLaserDownMR.Active = true
   -- ^^^^ adjust those

   timer.Enabled = false -- timer not needed anymore
 end

 if FreezeTimer==nil then FreezeTimer = createTimer( nil , false ) end
 FreezeTimer.Interval = 100
 FreezeTimer.OnTimer = FreezeTimerFunc
 FreezeTimer.Enabled = true
{$Asm}
 
[DISABLE]
{$Lua}
 if syntaxcheck then return end

 FreezeTimer.Enabled = false

 -- adjust those
 ShieldUpMR.Active = false
 ShieldDownMR.Active = false
 PowerLaserUpMR.Active = false
 PowerLaserDownMR.Active = false
 -- ^^^^ adjust those
{$Asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>3</ID>
          <Description>"ShieldUp"</Description>
          <VariableType>2 Bytes</VariableType>
          <Address>myforce</Address>
          <Offsets>
            <Offset>2</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"ShieldDown"</Description>
          <VariableType>2 Bytes</VariableType>
          <Address>myforce</Address>
          <Offsets>
            <Offset>4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"PowerLaserUp"</Description>
          <VariableType>2 Bytes</VariableType>
          <Address>myforce</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"PowerLaserDown"</Description>
          <VariableType>2 Bytes</VariableType>
          <Address>myforce</Address>
          <Offsets>
            <Offset>A</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
