<?xml version='1.0' encoding='utf-8'?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>1</ID>
      <Description>"Auto-Attach and Version Check"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>2</ID>
      <Description>"☕ Fuel the Cheats — Tip Katzy (Toggle to open my Ko-fi page)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>3</ID>
      <Description>"How to use - Katzy"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>4</ID>
      <Description>"Clear All"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>10</ID>
      <Description>"[MAIN] Command &amp; Conquer: Red Alert 2"</Description>
      <Options moHideChildren="1" />
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>11</ID>
          <Description>"Infinite Money"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>12</ID>
          <Description>"Infinite Power"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>13</ID>
          <Description>"Instant Build"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>14</ID>
          <Description>"Infinite Aircraft Ammo"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>15</ID>
          <Description>"Instant Superweapons"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>18</ID>
          <Description>"Invulnerability - Selected Units and Buildings"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>17</ID>
          <Description>"Reveal Map - Full"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"Reveal Map - Visual Only"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"Promote Selected Units - Maximum Veterancy (One Shot)"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>20</ID>
      <Description>"[MAIN] Command &amp; Conquer: Red Alert 2 - Yuri's Revenge"</Description>
      <Options moHideChildren="1" />
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>21</ID>
          <Description>"Infinite Money"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>22</ID>
          <Description>"Infinite Power"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>23</ID>
          <Description>"Instant Build"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>24</ID>
          <Description>"Infinite Aircraft Ammo"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"Instant Superweapons"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>28</ID>
          <Description>"Invulnerability - Selected Units and Buildings"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>27</ID>
          <Description>"Reveal Map - Full"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>26</ID>
          <Description>"Reveal Map - Visual Only"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>29</ID>
          <Description>"Promote Selected Units - Maximum Veterancy (One Shot)"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not RA2YR then error("Allow this table to run its setup script, then try again.",0) end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
{$asm}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols />
  <LuaScript>--[[
Table identification: Katzy
Command &amp; Conquer Red Alert 2 and Yuri's Revenge | v1.22
RA2 1.0.0.1 and Yuri's Revenge 1.0.1.1; Steam build 15918130.
Original installed code independently disassembled. Highest stock cost 5000;
difficulty cost factors 1.0. Allowance 30000 by explicit user preference.
CnCReloaded and Mental Omega require separate profiles.
]]
if RA2YR then
  -- Releases 1.5/1.6 requested NOP 2, which CE emits as 66 90.
  -- Reconcile only the exact recorded jump plus that known padding variant.
  for feature,state in pairs(RA2YR.active or {}) do
    if feature=='ammo' and getOpenedProcessID()==state.pid then
      for _,site in ipairs(state.sites or {}) do
        local expected=site.patched
        if expected and #expected==7 and expected[1]==0xE9 and expected[6]==0x90 and expected[7]==0x90 then
          local actual=readBytes(site.address,7,true)
          local match=actual and actual[6]==0x66 and actual[7]==0x90
          for i=1,5 do if not actual or actual[i]~=expected[i] then match=false end end
          if match then site.patched=actual end
        end
      end
    end
  end
  if next(RA2YR.active or {}) then
    if not RA2YR.shutdown() then error('Clear the previous table first.',0) end
  else
    -- A failed setup may leave a disabled timer and already-destroyed records.
    if RA2YR.timer then RA2YR.timer.destroy();RA2YR.timer=nil end
    if RA2YR.close then getMainForm().unregisterCloseCallback(RA2YR.close);RA2YR.close=nil end
    if RA2YR.closeQuery and getMainForm().OnCloseQuery==RA2YR.closeQuery then getMainForm().OnCloseQuery=RA2YR.previousCloseQuery end
  end
end
if RA2YRScaffold then RA2YRScaffold.shutdown(); RA2YRScaffold=nil end
local S={active={},profiles={[ [=[ra2]=] ]={[ [=[exe]=] ]=[=[game.exe]=],[ [=[version]=] ]=[=[1.0.0.1]=],[ [=[md5]=] ]=[=[799c80c40f28a350b64e52f44f02ea9a]=],[ [=[title]=] ]=[=[Command &amp; Conquer Red Alert 2]=]},[ [=[yr]=] ]={[ [=[exe]=] ]=[=[gamemd.exe]=],[ [=[version]=] ]=[=[1.0.1.1]=],[ [=[md5]=] ]=[=[2a1307f6f57c9c492f985b4e3afb88e6]=],[ [=[title]=] ]=[=[Command &amp; Conquer Yuri's Revenge]=],[ [=[archives]=] ]={[ [=[ra2.mix]=] ]=[=[4509764448090c5d6497e4255d1db5d7]=],[ [=[ra2md.mix]=] ]=[=[995d8d6a21f7b17627bbaeaf96814330]=],[ [=[expandmd01.mix]=] ]=[=[faefa0d8fae321c01e7dc5cf6c153c06]=]}}},sites={{[ [=[group]=] ]=[=[money]=],[ [=[rva]=] ]=928608,[ [=[original]=] ]=[=[E8 AB C5 29 00]=],[ [=[pattern]=] ]=[=[E8 AB C5 29 00 5E 59 C2 04 00 90 90 90 90 90 90 56 8B 74 24 08 8D 8E 18]=],[ [=[body]=] ]=[=[call game.exe+0x37F110
pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
push edx
mov edx,esi
sub edx,0x24
cmp edx,[game.exe+0x635DB4]
pop edx
jne original
cmp eax,0x7FFF8ACF
jg capped
add eax,#30000
jmp original
capped:
mov eax,0x7FFFFFFF
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=928439,[ [=[original]=] ]=[=[8B 88 A8 52 00 00]=],[ [=[pattern]=] ]=[=[8B 88 A8 52 00 00 8B B0 AC 52 00 00 3B CE 5E 0F 9D C2 8A C2 C2 04 00 90]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
push edx
mov edx,eax
sub edx,0x28
cmp edx,[game.exe+0x635DB4]
pop edx
jne original
mov ecx,[eax+0x52AC]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 88 A8 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=928676,[ [=[original]=] ]=[=[8B 80 AC 52 00 00]=],[ [=[pattern]=] ]=[=[8B 80 AC 52 00 00 C2 04 00 90 90 90 8B 44 24 04 8B 80 B0 52 00 00 C2 04]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
push edx
mov edx,eax
sub edx,0x24
cmp edx,[game.exe+0x635DB4]
pop edx
jne original
mov eax,[eax+0x52B0]
add eax,#5000
popfd
jmp RETURN
original:
popfd
db 8B 80 AC 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=935997,[ [=[original]=] ]=[=[8B 8E D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 8E D0 52 00 00 8B 86 D4 52 00 00 3B C8 89 4C 24 10 89 44 24 14 0F 8D]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov ecx,[esi+0x52D4]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8E D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=951091,[ [=[original]=] ]=[=[8B 81 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 81 D0 52 00 00 8B 89 D4 52 00 00 3B C1 89 44 24 00 89 4C 24 04 7D 1E]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ecx,[game.exe+0x635DB4]
jne original
mov eax,[ecx+0x52D4]
add eax,#5000
popfd
jmp RETURN
original:
popfd
db 8B 81 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=956796,[ [=[original]=] ]=[=[8B 95 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 95 D0 52 00 00 8B 34 81 8B 85 88 5F 01 00 2B D0 8B 85 D4 52 00 00 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ebp,[game.exe+0x635DB4]
jne original
mov edx,[ebp+0x52D4]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 95 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=968473,[ [=[original]=] ]=[=[8B 96 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 96 D0 52 00 00 8B BE D4 52 00 00 8B 0D 74 07 A4 00 3B D7 0F 9C C0 85 C9 88 44 24 38 0F 85 02]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov edx,[esi+0x52D4]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 96 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=968802,[ [=[original]=] ]=[=[8B 9E D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 9E D0 52 00 00 3B D8 0F 9C C3 03 C1 8B CE 89 86 D4 52 00 00 E8 34 01]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov ebx,[esi+0x52D4]
add ebx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 9E D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=968828,[ [=[original]=] ]=[=[8B 96 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 96 D0 52 00 00 8B BE D4 52 00 00 8B 0D 74 07 A4 00 3B D7 0F 9C C0 85 C9 88 44 24 38 0F 85 FE]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov edx,[esi+0x52D4]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 96 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=994505,[ [=[original]=] ]=[=[8B 8E D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 8E D0 52 00 00 8B 86 D4 52 00 00 3B C8 89 4C 24 08 89 44 24 0C 7D 24 3B C3 74 20 3B CB 74 15 DB 44 24 08 DA 74 24 0C DC 1D 08 A7 79 00 DF E0 F6 C4 01 74 07 C6 44 24]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov ecx,[esi+0x52D4]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8E D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=994793,[ [=[original]=] ]=[=[8B 8E D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 8E D0 52 00 00 8B 86 D4 52 00 00 3B C8 89 4C 24 08 89 44 24 0C 7D 24 3B C3 74 20 3B CB 74 15 DB 44 24 08 DA 74 24 0C DC 1D 08 A7 79 00 DF E0 F6 C4 01 74 07 B8 01 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov ecx,[esi+0x52D4]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8E D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=994986,[ [=[original]=] ]=[=[8B 91 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 91 D0 52 00 00 8B 81 D4 52 00 00 3B D0 89 54 24 14 89 44 24 18 7D 25]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ecx,[game.exe+0x635DB4]
jne original
mov edx,[ecx+0x52D4]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 91 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=997482,[ [=[original]=] ]=[=[8B 86 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 86 D0 52 00 00 3B D0 7F 18 A1 90 D2 A3 00 6A 01 6A 00 8D 88 18 02 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov eax,[esi+0x52D4]
add eax,#5000
popfd
jmp RETURN
original:
popfd
db 8B 86 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1002630,[ [=[original]=] ]=[=[8B 8D D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 8D D0 52 00 00 8B 85 D4 52 00 00 3B C8 89 4C 24 1C 89 44 24 18 7D 1F]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ebp,[game.exe+0x635DB4]
jne original
mov ecx,[ebp+0x52D4]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8D D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1003125,[ [=[original]=] ]=[=[8B 8D D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 8D D0 52 00 00 8B 85 D4 52 00 00 3B C8 89 4C 24 14 89 44 24 18 7D 24]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ebp,[game.exe+0x635DB4]
jne original
mov ecx,[ebp+0x52D4]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8D D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=2216406,[ [=[original]=] ]=[=[8B 90 D0 52 00 00]=],[ [=[pattern]=] ]=[=[8B 90 D0 52 00 00 51 52 68 96 02 00 00 68 28 BF 7E 00 33 D2 B9 18 BF 7E]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp eax,[game.exe+0x635DB4]
jne original
mov edx,[eax+0x52D4]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 90 D0 52 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=968453,[ [=[original]=] ]=[=[3B C3 0F 9C C3]=],[ [=[pattern]=] ]=[=[3B C3 0F 9C C3 03 C1 8B CE 89 86 D0 52 00 00 E8 97 02 00 00 8B 96 D0 52]=],[ [=[body]=] ]=[=[cmp eax,ebx
setl bl
pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp esi,[game.exe+0x635DB4]
jne original
mov bl,0
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=758594,[ [=[original]=] ]=[=[8D 7E 28 8B CF]=],[ [=[pattern]=] ]=[=[8D 7E 28 8B CF E8 64 AB F9 FF 85 C0 0F 85 C0 00 00 00 8B 4E 34 85 C9 0F]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
push eax
mov eax,[esi+0x68]
cmp eax,[game.exe+0x635DB4]
pop eax
jne original
cmp dword ptr [esi+0x54],0
je original
cmp dword ptr [esi+0x34],0
jle original
cmp dword ptr [esi+0x24],0
jl original
cmp dword ptr [esi+0x24],#54
jge original
pushad
mov eax,[esi+0x68]
add eax,0x24
push eax
call game.exe+0xE2B30
cmp eax,[esi+0x5C]
popad
jl original
popfd
lea edi,[esi+0x28]
mov ecx,[esi+0x34]
mov eax,#54
sub eax,[esi+0x24]
jmp game.exe+0xB9362
original:
popfd
lea edi,[esi+0x28]
mov ecx,edi
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=945589,[ [=[original]=] ]=[=[8B 17 56 8B CF]=],[ [=[pattern]=] ]=[=[8B 17 56 8B CF FF 92 F8 00 00 00 83 F8 02 74 56 83 F8 01 75 16 8B 07 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ebp,[game.exe+0x635DB4]
jne original
cmp dword ptr [edi],game.exe+0x39CBBC
jne original
cmp dword ptr [edi+0x41C],0
je original
mov byte ptr [ebx+0x59],1
popfd
jmp game.exe+0xE6D6F
original:
popfd
mov edx,[edi]
push esi
mov ecx,edi
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=945644,[ [=[original]=] ]=[=[68 E0 A4 7D 00]=],[ [=[pattern]=] ]=[=[68 E0 A4 7D 00 E8 FA FA F1 FF 8B 44 24 4C 8B 4C 24 48 8B 54 24 44 83 C4]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ebp,[game.exe+0x635DB4]
jne original
mov byte ptr [ebx+0x59],1
popfd
jmp game.exe+0xE6E0F
original:
popfd
push game.exe+0x3DA4E0
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=85069,[ [=[original]=] ]=[=[48 89 86 54 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 54 02 00 00 8B CE E8 E5 F8 1B 00 8B 0D 48 98 83 00 DC 99 70 13]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x1B4]
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp edx,[game.exe+0x635DB4]
jne original
cmp dword ptr [esi],game.exe+0x39B12C
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x254],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=96527,[ [=[original]=] ]=[=[48 89 86 54 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 54 02 00 00 8B 86 28 02 00 00 3B C3 0F 84 86 06 00 00 39 9E 54]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x1B4]
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp edx,[game.exe+0x635DB4]
jne original
cmp dword ptr [esi],game.exe+0x39B12C
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x254],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=96631,[ [=[original]=] ]=[=[48 89 86 54 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 54 02 00 00 8B 86 28 02 00 00 88 9E BA 05 00 00 3B C3 0F 84 3A]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x1B4]
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp edx,[game.exe+0x635DB4]
jne original
cmp dword ptr [esi],game.exe+0x39B12C
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x254],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=99342,[ [=[original]=] ]=[=[48 89 86 54 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 54 02 00 00 39 9E 54 02 00 00 75 5F 38 9E 2C 03 00 00 75 0F 8B]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x1B4]
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp edx,[game.exe+0x635DB4]
jne original
cmp dword ptr [esi],game.exe+0x39B12C
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x254],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[super]=],[ [=[rva]=] ]=2741270,[ [=[original]=] ]=[=[8B 28 8B 48 08]=],[ [=[pattern]=] ]=[=[8B 28 8B 48 08 3B EA 74 0E 8B 3D 2C 0D A4 00 2B FD 3B F9 7D 0A 2B CF 85]=],[ [=[body]=] ]=[=[pushfd
push ecx
mov ecx,[esi+0x28]
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
cmp ecx,[game.exe+0x635DB4]
jne original
mov ecx,[esi+0x24]
cmp byte ptr [ecx+0xDD],0
jne original
mov dword ptr [eax+8],0
original:
pop ecx
popfd
mov ebp,[eax]
mov ecx,[eax+8]
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=480544,[ [=[original]=] ]=[=[53 55 56 8B F1]=],[ [=[pattern]=] ]=[=[53 55 56 8B F1 8B 0D 6C 99 83 00 57 8D 7E 24 6A 00 57 E8 09 38 23 00 88]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
ret 8
original:
popfd
push ebx
push ebp
push esi
mov esi,ecx
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2790938,[ [=[original]=] ]=[=[E8 A1 ED EB FF]=],[ [=[pattern]=] ]=[=[E8 A1 ED EB FF 84 C0 0F 85 25 04 00 00 8B 06 8D 8C 24 C4 00 00 00 51 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2791502,[ [=[original]=] ]=[=[E8 6D EB EB FF]=],[ [=[pattern]=] ]=[=[E8 6D EB EB FF 84 C0 0F 85 F1 01 00 00 8B 16 6A 00 E9 39 FF FF FF 83 F8]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2791647,[ [=[original]=] ]=[=[E8 DC EA EB FF]=],[ [=[pattern]=] ]=[=[E8 DC EA EB FF 84 C0 0F 85 60 01 00 00 8B 16 C6 86 85 00 00 00 01 6A 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2792605,[ [=[original]=] ]=[=[E8 1E E7 EB FF]=],[ [=[pattern]=] ]=[=[E8 1E E7 EB FF 84 C0 0F 85 25 01 00 00 8B 13 8D 84 24 A4 00 00 00 50 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=82515,[ [=[original]=] ]=[=[E8 68 41 15 00]=],[ [=[pattern]=] ]=[=[E8 68 41 15 00 84 C0 74 3A 8B 0E 8B 56 04 8B 46 08 89 4C 24 20 8D 4C 24]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=82554,[ [=[original]=] ]=[=[E8 41 41 15 00]=],[ [=[pattern]=] ]=[=[E8 41 41 15 00 84 C0 74 13 8B 8D B4 01 00 00 E8 22 10 0E 00 84 C0 0F 84]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=240900,[ [=[original]=] ]=[=[E8 B7 D6 12 00]=],[ [=[pattern]=] ]=[=[E8 B7 D6 12 00 84 C0 75 4D 8D 4C 24 34 51 B9 E0 24 83 00 E8 A4 D6 12 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=240919,[ [=[original]=] ]=[=[E8 A4 D6 12 00]=],[ [=[pattern]=] ]=[=[E8 A4 D6 12 00 84 C0 75 3A 8B 06 8D 54 24 28 8D 8C 24 18 01 00 00 52 51]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2785439,[ [=[original]=] ]=[=[E8 AC 4A DD FF]=],[ [=[pattern]=] ]=[=[E8 AC 4A DD FF 84 C0 0F 85 4C 01 00 00 83 BE EC 00 00 00 02 74 08 85 FF]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x7CB50
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2895059,[ [=[original]=] ]=[=[E8 78 9E DB FF]=],[ [=[pattern]=] ]=[=[E8 78 9E DB FF 84 C0 75 66 8B 16 8D 4C 24 0C 8D 44 24 5C 51 50 8B CE FF]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x7CB50
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2895254,[ [=[original]=] ]=[=[E8 B5 9D DB FF]=],[ [=[pattern]=] ]=[=[E8 B5 9D DB FF 84 C0 0F 85 8E 00 00 00 8B 16 8D 4C 24 0C 8D 44 24 5C 51]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x7CB50
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2785423,[ [=[original]=] ]=[=[8A 86 2C 01 00 00]=],[ [=[pattern]=] ]=[=[8A 86 2C 01 00 00 A8 10 0F 84 5B 01 00 00 8B CE E8 AC 4A DD FF 84 C0 0F]=],[ [=[body]=] ]=[=[mov al,[esi+0x12C]
pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
or al,0x18
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=480544,[ [=[original]=] ]=[=[53 55 56 8B F1]=],[ [=[pattern]=] ]=[=[53 55 56 8B F1 8B 0D 6C 99 83 00 57 8D 7E 24 6A 00 57 E8 09 38 23 00 88]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
ret 8
original:
popfd
push ebx
push ebp
push esi
mov esi,ecx
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2790938,[ [=[original]=] ]=[=[E8 A1 ED EB FF]=],[ [=[pattern]=] ]=[=[E8 A1 ED EB FF 84 C0 0F 85 25 04 00 00 8B 06 8D 8C 24 C4 00 00 00 51 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2791502,[ [=[original]=] ]=[=[E8 6D EB EB FF]=],[ [=[pattern]=] ]=[=[E8 6D EB EB FF 84 C0 0F 85 F1 01 00 00 8B 16 6A 00 E9 39 FF FF FF 83 F8]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2791647,[ [=[original]=] ]=[=[E8 DC EA EB FF]=],[ [=[pattern]=] ]=[=[E8 DC EA EB FF 84 C0 0F 85 60 01 00 00 8B 16 C6 86 85 00 00 00 01 6A 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2792605,[ [=[original]=] ]=[=[E8 1E E7 EB FF]=],[ [=[pattern]=] ]=[=[E8 1E E7 EB FF 84 C0 0F 85 25 01 00 00 8B 13 8D 84 24 A4 00 00 00 50 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=82515,[ [=[original]=] ]=[=[E8 68 41 15 00]=],[ [=[pattern]=] ]=[=[E8 68 41 15 00 84 C0 74 3A 8B 0E 8B 56 04 8B 46 08 89 4C 24 20 8D 4C 24]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=82554,[ [=[original]=] ]=[=[E8 41 41 15 00]=],[ [=[pattern]=] ]=[=[E8 41 41 15 00 84 C0 74 13 8B 8D B4 01 00 00 E8 22 10 0E 00 84 C0 0F 84]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=240900,[ [=[original]=] ]=[=[E8 B7 D6 12 00]=],[ [=[pattern]=] ]=[=[E8 B7 D6 12 00 84 C0 75 4D 8D 4C 24 34 51 B9 E0 24 83 00 E8 A4 D6 12 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=240919,[ [=[original]=] ]=[=[E8 A4 D6 12 00]=],[ [=[pattern]=] ]=[=[E8 A4 D6 12 00 84 C0 75 3A 8B 06 8D 54 24 28 8D 8C 24 18 01 00 00 52 51]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x1683C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2785439,[ [=[original]=] ]=[=[E8 AC 4A DD FF]=],[ [=[pattern]=] ]=[=[E8 AC 4A DD FF 84 C0 0F 85 4C 01 00 00 83 BE EC 00 00 00 02 74 08 85 FF]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x7CB50
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2895059,[ [=[original]=] ]=[=[E8 78 9E DB FF]=],[ [=[pattern]=] ]=[=[E8 78 9E DB FF 84 C0 75 66 8B 16 8D 4C 24 0C 8D 44 24 5C 51 50 8B CE FF]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x7CB50
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2895254,[ [=[original]=] ]=[=[E8 B5 9D DB FF]=],[ [=[pattern]=] ]=[=[E8 B5 9D DB FF 84 C0 0F 85 8E 00 00 00 8B 16 8D 4C 24 0C 8D 44 24 5C 51]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x7CB50
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2785423,[ [=[original]=] ]=[=[8A 86 2C 01 00 00]=],[ [=[pattern]=] ]=[=[8A 86 2C 01 00 00 A8 10 0F 84 5B 01 00 00 8B CE E8 AC 4A DD FF 84 C0 0F]=],[ [=[body]=] ]=[=[mov al,[esi+0x12C]
pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
or al,0x18
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2302207,[ [=[original]=] ]=[=[E8 3C 60 F3 FF]=],[ [=[pattern]=] ]=[=[E8 3C 60 F3 FF 84 C0 C6 44 24 44 01 75 05 C6 44 24 44 00 39 2D D8 63 B2]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x168140
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2302207,[ [=[original]=] ]=[=[E8 3C 60 F3 FF]=],[ [=[pattern]=] ]=[=[E8 3C 60 F3 FF 84 C0 C6 44 24 44 01 75 05 C6 44 24 44 00 39 2D D8 63 B2]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x168140
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=1474880,[ [=[original]=] ]=[=[83 EC 08 56 8B 74 24 10]=],[ [=[pattern]=] ]=[=[83 EC 08 56 8B 74 24 10 8B 46 08 99 F7 3D 30 FC A6 00 A8 01 99 0F 84 8D]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
ret 4
original:
popfd
db 83 EC 08 56 8B 74 24 10
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=1475520,[ [=[original]=] ]=[=[A1 98 D2 A3 00]=],[ [=[pattern]=] ]=[=[A1 98 D2 A3 00 83 EC 08 85 C0 56 74 1C A1 B4 5D A3 00 8A 88 3D 01 00 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
popfd
mov al,0
ret 4
original:
popfd
db A1 98 D2 A3 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=1343464,[ [=[original]=] ]=[=[8B 80 2C 01 00 00]=],[ [=[pattern]=] ]=[=[8B 80 2C 01 00 00 C1 E8 03 83 E0 01 59 C2 08 00 90 90 90 90 90 90 90 90]=],[ [=[body]=] ]=[=[mov eax,[eax+0x12C]
pushfd
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
or eax,8
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[iron]=],[ [=[rva]=] ]=111504,[ [=[original]=] ]=[=[8B 91 54 01 00 00]=],[ [=[pattern]=] ]=[=[8B 91 54 01 00 00 8B 81 5C 01 00 00 83 FA FF 74 1A 8B 0D 2C 0D A4 00 2B]=],[ [=[body]=] ]=[=[mov edx,[ecx+0x154]
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=2625334,[ [=[original]=] ]=[=[8B 47 34 85 C0]=],[ [=[pattern]=] ]=[=[8B 47 34 85 C0 74 0B 8A 47 6C 84 C0 0F 84 3D 03 00 00 8B CF E8 B1 89 E3]=],[ [=[body]=] ]=[=[pushfd
push eax
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
mov eax,[edi+0x68]
cmp eax,[game.exe+0x635DB4]
jne original
cmp dword ptr [edi+0x24],#54
jne original
mov eax,[edi+0x54]
test eax,eax
je original
mov eax,[eax]
cmp eax,game.exe+0x3ADDF8
je queue
cmp eax,game.exe+0x3A3540
je queue
cmp eax,game.exe+0x39B12C
jne original
queue:
pop eax
popfd
jmp game.exe+0x281285
original:
pop eax
popfd
db 8B 47 34 85 C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=942216,[ [=[original]=] ]=[=[8A 46 6C 32 DB]=],[ [=[pattern]=] ]=[=[8A 46 6C 32 DB 84 C0 74 17 8B 4E 54 85 C9 74 10 8B 01 FF 90 80 00 00 00]=],[ [=[body]=] ]=[=[pushfd
push eax
cmp dword ptr [game.exe+0x63D298],0
je mode_ok
cmp dword ptr [game.exe+0x63D298],5
jne original
mode_ok:
mov eax,[esi+0x68]
cmp eax,[game.exe+0x635DB4]
jne original
cmp dword ptr [esi+0x24],#54
jne original
cmp byte ptr [esp+0x3C],0
jne original
mov eax,[esi+0x54]
test eax,eax
je original
mov eax,[eax]
cmp eax,game.exe+0x3ADDF8
je queue
cmp eax,game.exe+0x3A3540
je queue
cmp eax,game.exe+0x39B12C
jne original
queue:
pop eax
popfd
xor bl,bl
jmp game.exe+0xE60A8
original:
pop eax
popfd
db 8A 46 6C 32 DB
jmp RETURN]=]}},yrSites={{[ [=[group]=] ]=[=[money]=],[ [=[rva]=] ]=1010112,[ [=[original]=] ]=[=[E8 3B F5 2C 00]=],[ [=[pattern]=] ]=[=[E8 3B F5 2C 00 5E 59 C2 04 00 90 90 90 90 90 90 56 8B 74 24 08 8D 8E D8]=],[ [=[body]=] ]=[=[call game.exe+0x3C5F00
pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
push edx
mov edx,esi
sub edx,0x24
cmp edx,[game.exe+0x683D4C]
pop edx
jne original
cmp eax,0x7FFF8ACF
jg capped
add eax,#30000
jmp original
capped:
mov eax,0x7FFFFFFF
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1009943,[ [=[original]=] ]=[=[8B 88 7C 53 00 00]=],[ [=[pattern]=] ]=[=[8B 88 7C 53 00 00 8B B0 80 53 00 00 3B CE 5E 0F 9D C2 8A C2 C2 04 00 90]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
push edx
mov edx,eax
sub edx,0x28
cmp edx,[game.exe+0x683D4C]
pop edx
jne original
mov ecx,[eax+0x5380]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 88 7C 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1010180,[ [=[original]=] ]=[=[8B 80 80 53 00 00]=],[ [=[pattern]=] ]=[=[8B 80 80 53 00 00 C2 04 00 90 90 90 8B 44 24 04 8B 80 84 53 00 00 C2 04]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
push edx
mov edx,eax
sub edx,0x24
cmp edx,[game.exe+0x683D4C]
pop edx
jne original
mov eax,[eax+0x5384]
add eax,#5000
popfd
jmp RETURN
original:
popfd
db 8B 80 80 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1018966,[ [=[original]=] ]=[=[8B 8E A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 8E A4 53 00 00 8B 86 A8 53 00 00 3B C8 89 4C 24 14 89 44 24 18 0F 8D]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov ecx,[esi+0x53A8]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8E A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1035827,[ [=[original]=] ]=[=[8B 81 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 81 A4 53 00 00 8B 89 A8 53 00 00 3B C1 89 44 24 00 89 4C 24 04 7D 1E]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ecx,[game.exe+0x683D4C]
jne original
mov eax,[ecx+0x53A8]
add eax,#5000
popfd
jmp RETURN
original:
popfd
db 8B 81 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1042172,[ [=[original]=] ]=[=[8B 95 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 95 A4 53 00 00 8B 3C 81 8B 85 B4 60 01 00 2B D0 8B 85 A8 53 00 00 8B]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ebp,[game.exe+0x683D4C]
jne original
mov edx,[ebp+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 95 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1054601,[ [=[original]=] ]=[=[8B 96 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 96 A4 53 00 00 8B BE A8 53 00 00 8B 0D AC E7 A8 00 3B D7 0F 9C C0 85 C9 88 44 24 38 0F 85 02]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov edx,[esi+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 96 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1054930,[ [=[original]=] ]=[=[8B 9E A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 9E A4 53 00 00 3B D8 0F 9C C3 03 C1 8B CE 89 86 A8 53 00 00 E8 34 01]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov ebx,[esi+0x53A8]
add ebx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 9E A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1054956,[ [=[original]=] ]=[=[8B 96 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 96 A4 53 00 00 8B BE A8 53 00 00 8B 0D AC E7 A8 00 3B D7 0F 9C C0 85 C9 88 44 24 38 0F 85 FE]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov edx,[esi+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 96 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1084473,[ [=[original]=] ]=[=[8B 8E A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 8E A4 53 00 00 8B 86 A8 53 00 00 3B C8 89 4C 24 0C 89 44 24 10 7D 24 3B C3 74 20 3B CB 74 15 DB 44 24 0C DA 74 24 10 DC 1D 18 17 7E 00 DF E0 F6 C4 01 74 07 C6 44 24]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov ecx,[esi+0x53A8]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8E A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1084813,[ [=[original]=] ]=[=[8B 8E A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 8E A4 53 00 00 8B 86 A8 53 00 00 3B C8 89 4C 24 0C 89 44 24 10 7D 24 3B C3 74 20 3B CB 74 15 DB 44 24 0C DA 74 24 10 DC 1D 18 17 7E 00 DF E0 F6 C4 01 74 07 B8 01 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov ecx,[esi+0x53A8]
add ecx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 8E A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1085002,[ [=[original]=] ]=[=[8B 91 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 91 A4 53 00 00 8B 81 A8 53 00 00 3B D0 89 54 24 14 89 44 24 18 7D 25]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ecx,[game.exe+0x683D4C]
jne original
mov edx,[ecx+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 91 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1087562,[ [=[original]=] ]=[=[8B 86 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 86 A4 53 00 00 3B D0 7F 18 A1 30 B2 A8 00 6A 01 6A 00 8D 88 18 02 00]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov eax,[esi+0x53A8]
add eax,#5000
popfd
jmp RETURN
original:
popfd
db 8B 86 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1093792,[ [=[original]=] ]=[=[8B 95 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 95 A4 53 00 00 8B 85 A8 53 00 00 3B D0 89 54 24 1C 89 44 24 18 7D 1F]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ebp,[game.exe+0x683D4C]
jne original
mov edx,[ebp+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 95 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1094343,[ [=[original]=] ]=[=[8B 95 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 95 A4 53 00 00 8B 85 A8 53 00 00 3B D0 89 54 24 14 89 44 24 18 7D 24]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ebp,[game.exe+0x683D4C]
jne original
mov edx,[ebp+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 95 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=2360422,[ [=[original]=] ]=[=[8B 90 A4 53 00 00]=],[ [=[pattern]=] ]=[=[8B 90 A4 53 00 00 51 52 68 9E 02 00 00 68 B8 6D 83 00 33 D2 B9 A8 6D 83]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp eax,[game.exe+0x683D4C]
jne original
mov edx,[eax+0x53A8]
add edx,#5000
popfd
jmp RETURN
original:
popfd
db 8B 90 A4 53 00 00
jmp RETURN]=]},{[ [=[group]=] ]=[=[power]=],[ [=[rva]=] ]=1054581,[ [=[original]=] ]=[=[3B C3 0F 9C C3]=],[ [=[pattern]=] ]=[=[3B C3 0F 9C C3 03 C1 8B CE 89 86 A4 53 00 00 E8 97 02 00 00 8B 96 A4 53]=],[ [=[body]=] ]=[=[cmp eax,ebx
setl bl
pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp esi,[game.exe+0x683D4C]
jne original
mov bl,0
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=826211,[ [=[original]=] ]=[=[8D 7E 2C 8B CF]=],[ [=[pattern]=] ]=[=[8D 7E 2C 8B CF E8 C3 CA F5 FF 85 C0 75 49 8B 46 38 85 C0 74 42 8B 4E 3C]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
push eax
mov eax,[esi+0x6C]
cmp eax,[game.exe+0x683D4C]
pop eax
jne original
cmp dword ptr [esi+0x58],0
je original
cmp dword ptr [esi+0x38],0
jle original
cmp dword ptr [esi+0x24],0
jl original
cmp dword ptr [esi+0x24],#54
jge original
pushad
mov eax,[esi+0x6C]
add eax,0x24
push eax
call game.exe+0xF6990
cmp eax,[esi+0x60]
popad
jl original
popfd
lea edi,[esi+0x2C]
mov eax,[esi+0x38]
mov ecx,#54
sub ecx,[esi+0x24]
jmp game.exe+0xC9B7B
original:
popfd
lea edi,[esi+0x2C]
mov ecx,edi
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=1029464,[ [=[original]=] ]=[=[A1 98 EF A8 00]=],[ [=[pattern]=] ]=[=[A1 98 EF A8 00 8B 17 50 56 8B CF FF 92 00 01 00 00 83 F8 02 74 58 83 F8]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ebp,[game.exe+0x683D4C]
jne original
cmp dword ptr [edi],game.exe+0x3E3EBC
jne original
cmp dword ptr [edi+0x524],0
je original
mov byte ptr [ebx+0x5D],1
popfd
jmp game.exe+0xFB512
original:
popfd
mov eax,[game.exe+0x68EF98]
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=1029525,[ [=[original]=] ]=[=[68 B0 49 82 00]=],[ [=[pattern]=] ]=[=[68 B0 49 82 00 E8 41 B3 F0 FF 8B 4C 24 4C 8B 54 24 48 8B 44 24 44 83 C4]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ebp,[game.exe+0x683D4C]
jne original
mov byte ptr [ebx+0x5D],1
popfd
jmp game.exe+0xFB5BA
original:
popfd
push game.exe+0x4249B0
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=86142,[ [=[original]=] ]=[=[48 89 86 FC 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 FC 02 00 00 8B CE E8 D4 0B 1E 00 8B 0D E0 71 88 00 DC 99 08 17]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x21C]
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp edx,[game.exe+0x683D4C]
jne original
cmp dword ptr [esi],game.exe+0x3E22A4
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x2FC],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=98383,[ [=[original]=] ]=[=[48 89 86 FC 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 FC 02 00 00 8B 86 B4 02 00 00 85 C0 0F 84 B3 0C 00 00 8B 8E FC]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x21C]
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp edx,[game.exe+0x683D4C]
jne original
cmp dword ptr [esi],game.exe+0x3E22A4
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x2FC],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=98489,[ [=[original]=] ]=[=[48 89 86 FC 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 FC 02 00 00 8B 86 B4 02 00 00 88 9E D2 06 00 00 3B C3 0F 84 F1]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x21C]
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp edx,[game.exe+0x683D4C]
jne original
cmp dword ptr [esi],game.exe+0x3E22A4
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x2FC],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[ammo]=],[ [=[rva]=] ]=101390,[ [=[original]=] ]=[=[48 89 86 FC 02 00 00]=],[ [=[pattern]=] ]=[=[48 89 86 FC 02 00 00 39 9E FC 02 00 00 0F 85 B0 00 00 00 38 9E D4 03 00]=],[ [=[body]=] ]=[=[pushfd
push edx
mov edx,[esi+0x21C]
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp edx,[game.exe+0x683D4C]
jne original
cmp dword ptr [esi],game.exe+0x3E22A4
jne original
cmp eax,0
jle original
pop edx
popfd
jmp RETURN
original:
pop edx
popfd
dec eax
mov [esi+0x2FC],eax
jmp RETURN]=]},{[ [=[group]=] ]=[=[super]=],[ [=[rva]=] ]=2932051,[ [=[original]=] ]=[=[8B 3A 8B 42 08]=],[ [=[pattern]=] ]=[=[8B 3A 8B 42 08 83 FF FF 74 0E 8B 0D 84 ED A8 00 2B CF 3B C8 7D 0A 2B C1]=],[ [=[body]=] ]=[=[pushfd
push ecx
mov ecx,[esi+0x2C]
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
cmp ecx,[game.exe+0x683D4C]
jne original
mov ecx,[esi+0x28]
cmp byte ptr [ecx+0xE5],0
jne original
mov dword ptr [edx+8],0
original:
pop ecx
popfd
mov edi,[edx]
mov eax,[edx+8]
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=524784,[ [=[original]=] ]=[=[53 55 56 8B F1]=],[ [=[pattern]=] ]=[=[53 55 56 8B F1 8B 0D 24 73 88 00 57 8D 7E 24 6A 00 57 E8 F9 84 25 00 88]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
ret 8
original:
popfd
push ebx
push ebp
push esi
mov esi,ecx
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2980447,[ [=[original]=] ]=[=[E8 EC FE DA FF]=],[ [=[pattern]=] ]=[=[E8 EC FE DA FF 84 C0 0F 85 4C 01 00 00 83 BE EC 00 00 00 02 74 08 85 FF]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x87950
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=3101155,[ [=[original]=] ]=[=[E8 68 27 D9 FF]=],[ [=[pattern]=] ]=[=[E8 68 27 D9 FF 84 C0 75 67 8B 45 00 8D 54 24 34 8D 4C 24 4C 52 51 8B CD]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x87950
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=3101354,[ [=[original]=] ]=[=[E8 A1 26 D9 FF]=],[ [=[pattern]=] ]=[=[E8 A1 26 D9 FF 84 C0 0F 85 90 00 00 00 8B 55 00 8D 4C 24 34 8D 44 24 4C]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x87950
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2980431,[ [=[original]=] ]=[=[8A 86 2C 01 00 00]=],[ [=[pattern]=] ]=[=[8A 86 2C 01 00 00 A8 10 0F 84 5B 01 00 00 8B CE E8 EC FE DA FF 84 C0 0F]=],[ [=[body]=] ]=[=[mov al,[esi+0x12C]
pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
or al,0x18
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[visual]=],[ [=[rva]=] ]=2448719,[ [=[original]=] ]=[=[E8 0C 06 F3 FF]=],[ [=[pattern]=] ]=[=[E8 0C 06 F3 FF 84 C0 C6 44 24 44 01 75 05 C6 44 24 44 00 39 2D 50 35 B7]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x186360
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=524784,[ [=[original]=] ]=[=[53 55 56 8B F1]=],[ [=[pattern]=] ]=[=[53 55 56 8B F1 8B 0D 24 73 88 00 57 8D 7E 24 6A 00 57 E8 F9 84 25 00 88]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
ret 8
original:
popfd
push ebx
push ebp
push esi
mov esi,ecx
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2980447,[ [=[original]=] ]=[=[E8 EC FE DA FF]=],[ [=[pattern]=] ]=[=[E8 EC FE DA FF 84 C0 0F 85 4C 01 00 00 83 BE EC 00 00 00 02 74 08 85 FF]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x87950
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=3101155,[ [=[original]=] ]=[=[E8 68 27 D9 FF]=],[ [=[pattern]=] ]=[=[E8 68 27 D9 FF 84 C0 75 67 8B 45 00 8D 54 24 34 8D 4C 24 4C 52 51 8B CD]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x87950
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=3101354,[ [=[original]=] ]=[=[E8 A1 26 D9 FF]=],[ [=[pattern]=] ]=[=[E8 A1 26 D9 FF 84 C0 0F 85 90 00 00 00 8B 55 00 8D 4C 24 34 8D 44 24 4C]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x87950
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2980431,[ [=[original]=] ]=[=[8A 86 2C 01 00 00]=],[ [=[pattern]=] ]=[=[8A 86 2C 01 00 00 A8 10 0F 84 5B 01 00 00 8B CE E8 EC FE DA FF 84 C0 0F]=],[ [=[body]=] ]=[=[mov al,[esi+0x12C]
pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
or al,0x18
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=2448719,[ [=[original]=] ]=[=[E8 0C 06 F3 FF]=],[ [=[pattern]=] ]=[=[E8 0C 06 F3 FF 84 C0 C6 44 24 44 01 75 05 C6 44 24 44 00 39 2D 50 35 B7]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
add esp,4
mov al,0
jmp RETURN
original:
popfd
call game.exe+0x186360
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=1598304,[ [=[original]=] ]=[=[83 EC 08 56 8B 74 24 10]=],[ [=[pattern]=] ]=[=[83 EC 08 56 8B 74 24 10 8B 46 08 99 F7 3D 88 DE AB 00 A8 01 99 0F 84 8D]=],[ [=[body]=] ]=[=[pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
popfd
mov al,0
ret 4
original:
popfd
db 83 EC 08 56 8B 74 24 10
jmp RETURN]=]},{[ [=[group]=] ]=[=[reveal]=],[ [=[rva]=] ]=1464088,[ [=[original]=] ]=[=[8B 80 2C 01 00 00]=],[ [=[pattern]=] ]=[=[8B 80 2C 01 00 00 C1 E8 03 83 E0 01 59 C2 08 00 90 90 90 90 90 90 90 90]=],[ [=[body]=] ]=[=[mov eax,[eax+0x12C]
pushfd
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
or eax,8
original:
popfd
jmp RETURN]=]},{[ [=[group]=] ]=[=[iron]=],[ [=[rva]=] ]=114496,[ [=[original]=] ]=[=[8B 91 8C 01 00 00]=],[ [=[pattern]=] ]=[=[8B 91 8C 01 00 00 8B 81 94 01 00 00 83 FA FF 74 1A 8B 0D 84 ED A8 00 2B]=],[ [=[body]=] ]=[=[mov edx,[ecx+0x18C]
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=2798249,[ [=[original]=] ]=[=[8B 47 38 85 C0]=],[ [=[pattern]=] ]=[=[8B 47 38 85 C0 74 0B 8A 47 70 84 C0 0F 84 47 03 00 00 8B CF E8 6E EE E1]=],[ [=[body]=] ]=[=[pushfd
push eax
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
mov eax,[edi+0x6C]
cmp eax,[game.exe+0x683D4C]
jne original
cmp dword ptr [edi+0x24],#54
jne original
mov eax,[edi+0x58]
test eax,eax
je original
mov eax,[eax]
cmp eax,game.exe+0x3F5C70
je queue
cmp eax,game.exe+0x3EB058
je queue
cmp eax,game.exe+0x3E22A4
jne original
queue:
pop eax
popfd
jmp game.exe+0x2AB602
original:
pop eax
popfd
db 8B 47 38 85 C0
jmp RETURN]=]},{[ [=[group]=] ]=[=[build]=],[ [=[rva]=] ]=1025448,[ [=[original]=] ]=[=[8A 46 70 32 DB]=],[ [=[pattern]=] ]=[=[8A 46 70 32 DB 84 C0 74 17 8B 4E 58 85 C9 74 10 8B 01 FF 90 84 00 00 00]=],[ [=[body]=] ]=[=[pushfd
push eax
cmp dword ptr [game.exe+0x68B238],0
je mode_ok
cmp dword ptr [game.exe+0x68B238],5
jne original
mode_ok:
mov eax,[esi+0x6C]
cmp eax,[game.exe+0x683D4C]
jne original
cmp dword ptr [esi+0x24],#54
jne original
cmp byte ptr [esp+0x3C],0
jne original
mov eax,[esi+0x58]
test eax,eax
je original
mov eax,[eax]
cmp eax,game.exe+0x3F5C70
je queue
cmp eax,game.exe+0x3EB058
je queue
cmp eax,game.exe+0x3E22A4
jne original
queue:
pop eax
popfd
xor bl,bl
jmp game.exe+0xFA5C8
original:
pop eax
popfd
db 8A 46 70 32 DB
jmp RETURN]=]}}}
RA2YR=S
local list=getAddressList()
local records={}
for _,id in ipairs({1,2,3,4,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29}) do records[id]=list.getMemoryRecordByID(id) end
local function row(id) return records[id] end
local ids={money=11,power=12,build=13,ammo=14,super=15,visual=16,reveal=17,iron=18}
local layouts={
 ra2={main=10,mode=0x63D298,player=0x635DB4,houseVT=0x3A2DE0,frame=0x640D2C,selection=0x640C60,
   owner=0x1B4,iron=0x154,power=0x5668,surface=0x4336F8,rectangle=0x433724,width=0x112C0,height=0x112D0,
   unit=0x3ADDF8,infantry=0x3A3540,aircraft=0x39B12C,building=0x39CBBC,
   unitType=0x5AC,infantryType=0x5A8,rank=0x118,trainable=0xA9A,elite={0,0,0,0,0,0,0,64}},
 yr={main=20,mode=0x68B238,player=0x683D4C,houseVT=0x3EA8A0,frame=0x68ED84,selection=0x68ECB8,
   owner=0x21C,iron=0x18C,power=0x5778,surface=0x480A04,rectangle=0x480A30,width=0x11540,height=0x11550,
   unit=0x3F5C70,infantry=0x3EB058,aircraft=0x3E22A4,building=0x3E3EBC,
   unitType=0x6C4,infantryType=0x6C0,rank=0x150,trainable=0xC8E,elite={0,0,0,64}}
}
local function featureRow(feature,key) return row(ids[feature]+(key=='yr' and 10 or 0)) end
local function report(message) if not S.closing then showMessage(message) end end
local function hex(value) return string.format('0x%X',value) end
local function bytes(text)
  local result={}
  for b in text:gmatch('%x%x') do result[#result+1]=tonumber(b,16) end
  return result
end
local function same(address,expected)
  local actual=readBytes(address,#expected,true)
  if not actual then return false end
  for i,b in ipairs(expected) do if actual[i]~=b then return false end end
  return true
end
local folder=[[C:\Program Files (x86)\Steam\steamapps\common\Command &amp; Conquer Red Alert II\]]
local function identify(pid,full)
  if not pid or pid==0 then return nil,'Start Red Alert 2 or Yuri’s Revenge first.' end
  local modules=enumModules(pid) or {}
  for _,m in ipairs(modules) do
    local n=m.Name:lower()
    if n=='ares.dll' or n=='phobos.dll' or n=='syringe.dll' then
      return nil,'A mod extension is loaded. Use the original Steam game for this table.'
    end
  end
  for _,m in ipairs(modules) do
    for key,p in pairs(S.profiles) do
      if m.Name:lower()==p.exe then
        if m.PathToFile:lower()~=(folder..p.exe):lower() then
          return nil,'This is another installation or a mod. Select the original Steam game.'
        end
        if full then
          local _,v=getFileVersion(m.PathToFile)
          if not v then return nil,'The file version cannot be read. Check the game installation.' end
          local version=string.format('%d.%d.%d.%d',v.major,v.minor,v.release,v.build)
          if version~=p.version or (full==true and md5file(m.PathToFile):lower()~=p.md5) then
            return nil,'Wrong game version. This executable needs a separate table profile.'
          end
          if key=='ra2' then
            for _,name in ipairs({'rules.ini','art.ini','ai.ini','ares.dll','phobos.dll'}) do
              if fileExists(folder..name) then return nil,'Modified game files were found. Use an unmodified RA2 installation.' end
            end
            for _,pattern in ipairs({'expand??.mix','ecache*.mix'}) do
              if #(getFileList(folder,pattern,false) or {})&gt;0 then return nil,'Additional RA2 archives were found. This mod needs its own profile.' end
            end
            if full==true and md5file(folder..'ra2.mix'):lower()~='4509764448090c5d6497e4255d1db5d7' then
              return nil,'The RA2 data archive differs from the prepared installation. Recheck the game files.'
            end
          elseif key=='yr' then
            for _,name in ipairs({'rulesmd.ini','artmd.ini','aimd.ini','rules.ini','art.ini','ai.ini','ares.dll','phobos.dll'}) do
              if fileExists(folder..name) then return nil,'Modified game files were found. Use the original Yuri’s Revenge installation.' end
            end
            for _,pattern in ipairs({'expand*.mix','ecache*.mix'}) do
              for _,path in ipairs(getFileList(folder,pattern,false) or {}) do
                local name=path:lower():match('[^/\\]+$')
                if name~='expandmd01.mix' then return nil,'Additional game archives were found. This mod needs its own profile.' end
              end
            end
            if full==true then
              for name,hash in pairs(p.archives) do
                if md5file(folder..name):lower()~=hash then return nil,'The Yuri’s Revenge data differs from the prepared installation. Recheck the game files.' end
              end
            end
          end
        end
        if m.Address~=0x400000 then return nil,'This executable is loaded differently. This build needs a new profile.' end
        return key,p.title,m.Address
      end
    end
  end
  return nil,'Attach to the original game process, not its launcher.'
end
local function currentHouse()
  local l=layouts[S.key]
  if not S.base or not l then return nil end
  local mode=readInteger(S.base+l.mode)
  if mode~=0 and mode~=5 then return nil end
  local p=readInteger(S.base+l.player)
  if not p or p==0 or readInteger(p)~=S.base+l.houseVT then return nil end
  return p
end
local function notifyPower()
  local p=currentHouse()
  if p then
    if not writeBytes(p+layouts[S.key].power,1,1) then error('refresh failed') end
    if not same(p+layouts[S.key].power,{1,1}) then error('refresh verification failed') end
  end
end
local function notifyRadar()
  if not currentHouse() then return end
  local surface=readInteger(S.base+layouts[S.key].surface)
  if not surface or surface==0 then return end
  local vt=readInteger(surface)
  if not vt or readInteger(vt+0x7C)~=S.base+layouts[S.key].width or readInteger(vt+0x80)~=S.base+layouts[S.key].height then
    error('radar surface layout differs')
  end
  local width,height=readInteger(surface+4),readInteger(surface+8)
  if not width or not height or width&lt;1 or height&lt;1 or width&gt;4096 or height&gt;4096 then error('invalid radar dimensions') end
  -- Native RadarClass update paints and consumes this rectangle on its own thread.
  local rectangle={}
  for _,value in ipairs({0,0,width,height}) do
    for i=1,4 do rectangle[#rectangle+1]=value%256;value=math.floor(value/256) end
  end
  local address=S.base+layouts[S.key].rectangle
  if not writeBytes(address,rectangle) or not same(address,rectangle) then error('radar refresh request failed') end
end
local function transaction(fn)
  local paused,reason=pcall(pause)
  if not paused then return false,reason end
  local ok,result=pcall(fn)
  local resumed,resumeError=pcall(unpause)
  if not resumed then return false,resumeError end
  return ok,result
end
local function captureIron()
  local house=currentHouse()
  if not house then error('Start or resume a map, then select your units or buildings before enabling this option.') end
  local l=layouts[S.key]
  local count=readInteger(S.base+l.selection+0x10)
  local list=readInteger(S.base+l.selection+4)
  if not count or count&lt;1 or not list or list==0 then error('Select your units or buildings before enabling this option.') end
  if count&gt;128 then error('This option currently supports up to 128 selected units or buildings. Select a smaller group and try again.') end
  local supported={[S.base+l.unit]=true,[S.base+l.infantry]=true,[S.base+l.aircraft]=true,[S.base+l.building]=true}
  local capture={house=house,houseID=readInteger(house+0x10),frame=readInteger(S.base+l.frame),targets={}}
  local seen={}
  for i=0,count-1 do
    local p=readInteger(list+i*4)
    local vt=p and p~=0 and readInteger(p)
    if supported[vt] and not seen[p] and readInteger(p+l.owner)==house and (readInteger(p+0x6C) or 0)&gt;0 then
      local id=readInteger(p+0x10)
      if id then capture.targets[#capture.targets+1]={p=p,id=id,vt=vt};seen[p]=true end
    end
  end
  if #capture.targets==0 or not capture.houseID or not capture.frame then error('No owned units or buildings in the selection can receive this effect.') end
  return capture
end
local function ironBody(c)
  local b={'pushfd','push eax','cmp dword ptr [STATE+4],1','jne original',
    'mov eax,[game.exe+0x640D2C]','cmp eax,[STATE]','jb expired','mov [STATE],eax',
    'cmp dword ptr [game.exe+0x63D298],0','je mode_ok','cmp dword ptr [game.exe+0x63D298],5','jne expired','mode_ok:',
    'mov eax,[game.exe+0x635DB4]','cmp eax,'..hex(c.house),'jne expired',
    'cmp dword ptr [eax+0x10],'..hex(c.houseID),'jne expired',
    'cmp [ecx+0x1B4],eax','jne original','cmp dword ptr [ecx+0x6C],0','jle original'}
  for i,t in ipairs(c.targets) do
    b[#b+1]='cmp ecx,'..hex(t.p);b[#b+1]='jne next_'..i
    b[#b+1]='cmp dword ptr [ecx+0x10],'..hex(t.id);b[#b+1]='jne original'
    b[#b+1]='cmp dword ptr [ecx],'..hex(t.vt);b[#b+1]='je matched';b[#b+1]='jmp original';b[#b+1]='next_'..i..':'
  end
  b[#b+1]='jmp original\nexpired:\nmov dword ptr [STATE+4],0\njmp original\nmatched:\npop eax\npopfd\nmov al,1\nret\noriginal:\npop eax\npopfd\nmov edx,[ecx+0x154]\njmp RETURN'
  local body=table.concat(b,'\n')
  if S.key=='yr' then
    body=body:gsub('0x640D2C','0x68ED84'):gsub('0x63D298','0x68B238'):gsub('0x635DB4','0x683D4C'):gsub('0x1B4','0x21C'):gsub('0x154','0x18C')
  end
  return body
end
local function scriptFor(feature,capture)
  local chunks={'[ENABLE]'}
  local selected={}
  for _,site in ipairs(S.key=='yr' and S.yrSites or S.sites) do
    if site.group==feature then
      local address=S.base+site.rva
      if not same(address,bytes(site.pattern)) then error('signature mismatch') end
      if not same(address,bytes(site.original)) then error('original bytes differ') end
      selected[#selected+1]={address=address,original=bytes(site.original),source=site}
    end
  end
  for n,site in ipairs(selected) do
    local prefix='katzy_'..S.key..'_'..feature..'_'..n
    site.prefix=prefix
    chunks[#chunks+1]='define('..prefix..'_site,'..hex(site.address)..')'
    chunks[#chunks+1]='assert('..prefix..'_site,'..site.source.original..')'
    chunks[#chunks+1]='alloc('..prefix..'_code,'..(feature=='iron' and '8192' or '512')..','..prefix..'_site)'
    local body=feature=='iron' and ironBody(capture) or site.source.body
    local labels={}
    for name in body:gmatch('([%w_]+):') do labels[#labels+1]=name;chunks[#chunks+1]='label('..prefix..'_'..name..')' end
    body=body:gsub('RETURN',hex(site.address+#site.original)):gsub('STATE',prefix..'_code+1800')
    body=body:gsub('game%.exe%+0x([%x]+)',function(rva) return hex(S.base+tonumber(rva,16)) end)
    for _,name in ipairs(labels) do body=body:gsub('%f[%w_]'..name..'%f[^%w_]',prefix..'_'..name) end
    chunks[#chunks+1]=prefix..'_code:\n'..body
    chunks[#chunks+1]=prefix..'_site:\njmp '..prefix..'_code'
    if #site.original&gt;5 then chunks[#chunks+1]='db'..string.rep(' 90',#site.original-5) end
  end
  chunks[#chunks+1]='[DISABLE]'
  for _,site in ipairs(selected) do chunks[#chunks+1]=hex(site.address)..':\ndb '..site.source.original end
  for _,site in ipairs(selected) do chunks[#chunks+1]='dealloc('..site.prefix..'_code)' end
  return table.concat(chunks,'\n'),selected
end
local function disableUnsafe(feature)
  local state=S.active[feature]
  if not state then return true end
  if not (getProcesslist() or {})[state.pid] then S.active[feature]=nil;return true end
  if getOpenedProcessID()~=state.pid then
    S.lastError={feature=feature,stage='cleanup',detail='Original process is not attached.'}
    return false
  end
  local key,_,base=identify(state.pid,false)
  if key~=(state.key or 'ra2') or base~=state.base then
    S.lastError={feature=feature,stage='cleanup',detail='Game identity changed.'}
    return false
  end
  local ok,detail=transaction(function()
    for _,site in ipairs(state.sites) do
      if not site.patched or not same(site.address,site.patched) then error('patch ownership changed') end
    end
    local removed,reason=autoAssemble(state.script,state.info)
    if not removed then error(reason or 'restoration failed') end
    for _,site in ipairs(state.sites) do if not same(site.address,site.original) then error('restoration verification failed') end end
    S.active[feature]=nil
    if feature=='power' then notifyPower() end
    if feature=='visual' or feature=='reveal' then notifyRadar() end
  end)
  if not ok then
    S.lastError={feature=feature,stage='cleanup',detail=tostring(detail)}
  end
  return ok
end
local function disable(feature)
  local ok,result=pcall(disableUnsafe,feature)
  if not ok then S.lastError={feature=feature,stage='cleanup',detail=tostring(result)} end
  return ok and result or false
end
local function enable(feature,expectedKey)
  local ok,key,title,base=pcall(identify,getOpenedProcessID(),'option')
  if not ok or key~=expectedKey then report(ok and (key and 'Use the MAIN section for the attached game.' or title) or 'The game could not be checked. Reattach and try again.');return false end
  if not row(layouts[key].main).Active or not S.mainProfile or S.mainProfile.pid~=getOpenedProcessID() or S.mainProfile.base~=base or S.mainProfile.key~=key then
    report('Turn on the matching MAIN section to validate this game process first.');return false
  end
  for _,state in pairs(S.active) do
    if state.pid~=getOpenedProcessID() or (state.key or 'ra2')~=key then report('Clear the options in the original game before switching games.');return false end
  end
  S.key,S.base=key,base
  if S.active[feature] then return true end
  local opposite=feature=='visual' and 'reveal' or feature=='reveal' and 'visual'
  if opposite and S.active[opposite] then
    if not disable(opposite) then return false end
    featureRow(opposite,key).Active=false
  end
  local script,sites,capture
  if feature=='iron' then
    local captured,result=pcall(captureIron)
    if not captured then report(tostring(result):gsub('^.-:%d+: ',''));return false end
    capture=result
  end
  ok=pcall(function() script,sites=scriptFor(feature,capture) end)
  if not ok then report('The running code differs from this build. Disable other tables or modifications and restart the original game.');return false end
  local state={pid=getOpenedProcessID(),key=key,base=base,script=script,sites=sites,capture=capture}
  local stage='validation'
  local installed,detail=transaction(function()
    for _,site in ipairs(sites) do if not same(site.address,site.original) then error('code changed') end end
    if capture then
      if currentHouse()~=capture.house then error('selection session changed') end
      for _,t in ipairs(capture.targets) do if readInteger(t.p)~=t.vt or readInteger(t.p+0x10)~=t.id or readInteger(t.p+layouts[key].owner)~=capture.house then error('selection changed') end end
    end
    stage='assembly'
    local success,info=autoAssemble(script)
    if not success then error(info or 'assembly failed',0) end
    stage='verification'
    state.info=info
    S.active[feature]=state
    for _,site in ipairs(sites) do
      local code=info.allocs[site.prefix..'_code'].address
      if capture then
        state.ironState=code+0x1800
        local v=capture.frame;local initial={}
        for i=1,4 do initial[#initial+1]=v%256;v=math.floor(v/256) end
        for _,b in ipairs({1,0,0,0}) do initial[#initial+1]=b end
        if not writeBytes(state.ironState,initial) or not same(state.ironState,initial) then error('selection state failed') end
      end
      local delta=(code-site.address-5)%0x100000000
      local expected={0xE9}
      for i=1,4 do expected[#expected+1]=delta%256;delta=math.floor(delta/256) end
      while #expected&lt;#site.original do expected[#expected+1]=0x90 end
      site.patched=expected
    end
    for _,site in ipairs(sites) do if not same(site.address,site.patched) then error('patch verification failed') end end
    if feature=='power' then notifyPower() end
    if feature=='visual' or feature=='reveal' then notifyRadar() end
  end)
  if not installed then
    S.lastError={feature=feature,stage=stage,detail=tostring(detail)}
    if S.active[feature] then disable(feature) end
    if stage=='assembly' then
      report('Cheat Engine could not compile this option. Keep it off and use the latest table revision.')
    else
      report('The option did not pass its installation check. Keep it off and use Clear All before retrying.')
    end
    return false
  end
  return true
end
local function clearRows()
  local clean=true
  for _,feature in ipairs({'iron','visual','reveal','super','ammo','build','power','money'}) do
    if disable(feature) then
      if not S.closing then featureRow(feature,'ra2').Active=false;featureRow(feature,'yr').Active=false end
    else clean=false end
  end
  if clean and not S.closing then row(10).Active=false;row(20).Active=false end
  return clean
end
function S.clear()
  local ok,result=pcall(clearRows)
  if not ok then S.lastError={stage='cleanup',detail=tostring(result)} end
  local clean=ok and result or false
  if not S.closing then
    pcall(function() row(4).Description=clean and 'Clear All' or 'Clear All — cleanup incomplete; reattach the original game and retry' end)
  end
  return clean
end
function S.shutdown()
  if S.timer then S.timer.destroy();S.timer=nil end
  if not S.clear() then return false end
  if not S.closing then
    local form=getMainForm()
    if S.close then form.unregisterCloseCallback(S.close);S.close=nil end
    if S.closeQuery and form.OnCloseQuery==S.closeQuery then form.OnCloseQuery=S.previousCloseQuery end
  end
  return true
end
for feature,id in pairs(ids) do
  for _,key in ipairs({'ra2','yr'}) do
    featureRow(feature,key).OnActivate=function(_,before) if before then return enable(feature,key) end return true end
    featureRow(feature,key).OnDeactivate=function(_,before)
      if S.closing then return true end
      if before and S.active[feature] and (S.active[feature].key or 'ra2')==key then return disable(feature) end
      return true
    end
  end
end
row(10).OnDeactivate=function(_,before)
  if S.closing or not before then return true end
  if S.clearingMain then return true end
  S.clearingMain=true
  local result=S.clear()
  S.clearingMain=nil
  return result
end
row(20).OnDeactivate=row(10).OnDeactivate
for id,key in pairs({[10]='ra2',[20]='yr'}) do
  row(id).OnActivate=function(_,before)
    if not before then return true end
    local ok,found,message,base=pcall(identify,getOpenedProcessID(),true)
    if not ok or found~=key then report(ok and (found and 'Select the MAIN section for the attached game.' or message) or 'The game could not be checked. Reattach and try again.');return false end
    for _,state in pairs(S.active) do
      if state.pid~=getOpenedProcessID() or (state.key or 'ra2')~=found then report('Clear the options in the original game before switching games.');return false end
    end
    S.key,S.base=found,base
    S.mainProfile={pid=getOpenedProcessID(),key=found,base=base}
    return true
  end
end
-- RA2 uses a double at Techno+118 (YR's float layout does not apply).
local veteranChecks={ra2={
  {0x305020,'8B 81 AC 05 00 00 C3'},
  {0x106950,'8B 81 A8 05 00 00 C3'},
  {0x1B600,'8B 81 AC 05 00 00 C3'},
  {0x2D8554,'8D 8E 18 01 00 00 E8 C1 AE 03 00'},
  {0x313420,'DD 01 DC 1D F8 A6 79 00 DF E0 F6 C4 01 75 06'},
  {0x2CEECD,'8A 88 9A 0A 00 00 5B 84 C9 74 28'},
  {0x39A6F8,'00 00 00 00 00 00 00 40'}
},yr={{0x341490,'8B 81 C4 06 00 00 C3'},{0x11FAF0,'8B 81 C0 06 00 00 C3'},{0x1C200,'8B 81 C4 06 00 00 C3'},{0x2FA05A,'8D 9E 50 01 00 00 8B CB E8 C9 5F 05 00'},{0x350010,'D9 01 D8 1D B4 37 7E 00 DF E0 F6 C4 01 75 06'},{0x302EFF,'8A 88 8E 0C 00 00 84 C9 74 28'},{0x3E37B4,'00 00 00 40'}}}
local function promoteSelected(expectedKey)
  if S.closing then return end
  local ok,key,message,base=pcall(identify,getOpenedProcessID(),'option')
  if not ok or key~=expectedKey then
    report(ok and (key and 'Select the MAIN section for the attached game.' or message) or 'The game could not be checked. Reattach and try again.');return
  end
  local profile=S.mainProfile
  local l=layouts[key]
  if not row(l.main).Active or not profile or profile.pid~=getOpenedProcessID() or profile.key~=key or profile.base~=base then
    report('Turn on the matching MAIN section to validate this game process first.');return
  end
  S.key,S.base=key,base
  if not currentHouse() then report('Start or resume a map, then select your units before using this option.');return end
  local result,detail=transaction(function()
    if getOpenedProcessID()~=profile.pid then error('process changed') end
    local house=currentHouse()
    if not house then error('map changed') end
    for _,check in ipairs(veteranChecks[key]) do
      if not same(base+check[1],bytes(check[2])) then error('veterancy code differs') end
    end
    local count=readInteger(base+l.selection+0x10)
    local capacity=readInteger(base+l.selection+8)
    local selection=readInteger(base+l.selection+4)
    if count==0 then return 'Select your units before using this option.' end
    if not count or not capacity or count&lt;0 or count&gt;capacity or count&gt;65536 or not selection or selection==0 then error('invalid selection') end
    local offsets={[base+l.unit]=l.unitType,[base+l.infantry]=l.infantryType,[base+l.aircraft]=l.unitType}
    local targets,seen={},{}
    for i=0,count-1 do
      local p=readInteger(selection+i*4)
      local vt=p and p~=0 and readInteger(p)
      local offset=offsets[vt]
      if offset and not seen[p] and readInteger(p+l.owner)==house and (readInteger(p+0x6C) or 0)&gt;0 then
        seen[p]=true
        local kind=readInteger(p+offset)
        if kind and kind~=0 and same(kind+l.trainable,{1}) then
          local rank=(key=='yr' and readFloat or readDouble)(p+l.rank)
          if not rank or rank~=rank or rank&lt;0 or rank&gt;2 then error('invalid veterancy') end
          targets[#targets+1]={p=p,rank=rank}
        end
      end
    end
    if #targets==0 then return 'No owned units in the selection can receive this promotion.' end
    for _,target in ipairs(targets) do
      if target.rank&lt;2 then
        local address=target.p+l.rank
        local elite=l.elite
        if not writeBytes(address,elite) or not same(address,elite) then error('promotion write failed') end
      end
    end
  end)
  if not result then
    S.lastError={stage='selected veterancy',detail=tostring(detail)}
    report('The promotion could not be completed. Some selected units may already be Elite. Check the original game is attached, select your units, and try again.')
  elseif detail then report(detail) end
end
row(19).OnActivate=function(_,before) if before then promoteSelected('ra2') end return false end
row(1).OnActivate=function() return false end
row(29).OnActivate=function(_,before) if before then promoteSelected('yr') end return false end
row(2).OnActivate=function(_,before) if before then shellExecute('https://ko-fi.com/katzy') end return false end
row(3).OnActivate=function(_,before)
  if before then showMessage([[Table identification: Katzy.

Start the game, open the table in Cheat Engine and allow its Lua script. Tick the matching MAIN section, then choose your options. Use in campaign or single-player skirmish. If both games are running, select the desired process in Cheat Engine. Ordinary options carry over between matches; selected-unit actions require a live match.

Infinite Money
Adds a 30,000-credit allowance. Earnings increase the total; purchases spend the surplus down to the allowance. Turning it off removes the allowance and keeps your unspent normal credits.

Infinite Power
Meets your power needs with 5,000 spare power. Turning it off restores normal power behavior; prerequisites still apply.

Instant Build
Finishes paid production. Normal prices, prerequisites, placement and factory exit rules still apply. Turning it off restores normal future production; completed items stay completed. Clear space around blocked factory exits so queued units can be delivered. Manual pauses and queue limits still apply.

Infinite Aircraft Ammo
Stops your aircraft from spending ammunition normally reloaded at an airfield. Empty aircraft need one normal reload first. Firing speed stays normal. Turning it off restores ammunition use.

Instant Superweapons
Readies available superweapons. Required buildings, power and targeting rules still apply. Turning it off restores normal recharge after use. Powers that drain charge while active keep their normal timing.

Invulnerability - Selected Units and Buildings
Select units and buildings you own in a live match, then enable this option to protect that group using Iron Curtain. Changing selection does not move protection. Turn it off or use Clear All to remove protection; select another group and enable again to change targets. Changing maps clears protection. Native temporary Iron Curtain timers continue normally; no infantry-killing area effect is used.

Reveal Map - Full
Bypasses normal shroud and fog checks. Cloaking, weapon range and other attack rules still apply. Use only one Reveal Map mode at a time.

Reveal Map - Visual Only
Shows terrain and objects without granting gameplay sight. Normal scouting, targeting and cloaking rules still apply. Use this mode for campaigns. Turning either reveal mode off restores normal visibility and preserves natural exploration. Radar still needs its normal availability and power; scroll the view to refresh old screen areas.

Promote Selected Units - Maximum Veterancy (One Shot)
Select units you own in a live match and activate once to grant maximum veterancy to eligible units. Granted ranks remain after Clear All. Units that cannot gain veterancy are skipped. Eligible units are promoted to Elite. The checkbox unticks immediately; select another group and activate again to promote it.

Clear All
Turns off the options and MAIN. If paused, resume briefly to let cleanup finish. Turn options off before saving, loading, switching processes manually or replacing the table.]]) end
  return false
end
row(4).OnActivate=function(_,before) if before then S.clear() end return false end
function S.refresh()
  if S.closing then return end
  local processes=getProcesslist() or {}
  for feature,state in pairs(S.active) do
    if not processes[state.pid] then S.active[feature]=nil;featureRow(feature,state.key).Active=false end
  end
  local iron=S.active.iron
  if iron and iron.pid==getOpenedProcessID() and same(iron.ironState+4,{0,0,0,0}) then
    if disable('iron') then featureRow('iron',iron.key).Active=false end
  end
  local pid=getOpenedProcessID()
  if not processes[pid] and not next(S.active) then
    local candidates={}
    for candidate,name in pairs(processes) do
      if name:lower()=='game.exe' or name:lower()=='gamemd.exe' then
        local ok,key=pcall(identify,candidate,false)
        if ok and key then candidates[#candidates+1]=candidate end
      end
    end
    if #candidates==1 then openProcess(candidates[1]);pid=getOpenedProcessID()
    elseif #candidates&gt;1 then row(1).Description='Auto-Attach and Version Check — select a game';return end
  end
  if pid==S.pid and processes[pid] then return end
  S.pid=pid
  S.mainProfile=nil
  if not processes[pid] then S.key=nil;S.base=nil;row(1).Description='Auto-Attach and Version Check — waiting for a game';return end
  if next(S.active) then row(1).Description='Auto-Attach and Version Check — reattach to clear the previous game';return end
  row(10).Active=false;row(20).Active=false
  local ok,key,message,base=pcall(identify,pid,true)
  if not ok then key=nil;message='Game identity could not be checked.' end
  S.key,S.base=key,base
  row(1).Description='Auto-Attach and Version Check — '..message
  if not key then report(message) end
end
S.timer=createTimer(nil,false)
S.timer.Interval=2000
S.timer.OnTimer=function() if S.closing then return end local ok=pcall(S.refresh);if not ok then S.timer.Enabled=false;report('Game detection stopped. Reload the table after attaching to the game.') end end
S.previousCloseQuery=getMainForm().OnCloseQuery
S.closeQuery=function(sender)
  if S.previousCloseQuery then
    local ok,allowed=pcall(S.previousCloseQuery,sender)
    if ok and allowed==false then return false end
  end
  S.closing=true
  -- Detach while the records are alive. No Lua callback should run during destruction.
  for _,record in pairs(records) do
    pcall(function() record.OnActivate=nil;record.OnDeactivate=nil;record.OnDestroy=nil end)
  end
  local ok,detail=pcall(S.shutdown)
  if not ok then S.lastError={stage='close cleanup',detail=tostring(detail)} end
  return true
end
getMainForm().OnCloseQuery=S.closeQuery
-- The close notification is too late for process access: preserve its action only.
S.close=getMainForm().registerCloseCallback(function(_,action) return action end)
row(1).OnDestroy=function()
  if S.closing then return end
  -- Records may already be invalid when destruction precedes the form callback.
  S.closing=true
  local ok,detail=pcall(S.shutdown)
  if not ok then S.lastError={stage='destroy cleanup',detail=tostring(detail)} end
end
S.timer.Enabled=true
S.refresh()
</LuaScript>
</CheatTable>