<?xml version='1.0' encoding='utf-8'?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Auto-Attach and Version Check - Waiting"</Description>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
    <CheatEntry>
      <ID>21</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
local record = memrec
shellExecute('https://ko-fi.com/katzy')
if record then
  createTimer(100, function() record.Active = false end)
end
{$asm}
[DISABLE]
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>1</ID>
      <Description>"How to use - Katzy"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
showMessage([=[Table identification: Katzy.

HOW TO USE
1. Start Guns of Fury and enter gameplay.
2. Open this table in Cheat Engine and allow its Lua script.
3. Tick MAIN to show the options, then tick each option you want.
4. Untick an option to turn it off. Use Clear All or untick MAIN to turn everything off.
5. Use Clear All before switching to another table.

OPTIONS
Infinite HP: keeps your health full. Ordinary hits can still cause hit reactions. Scripted deaths and lethal traps can still kill you.

Infinite Weapon Ammo: keeps secondary-weapon ammo full. Firing speed and cooldowns stay normal.

Infinite Bomb Ammo: keeps your bombs/grenades full, independently of weapon ammo.

Infinite Mounted Armor HP: keeps the armor you are riding at full durability. Enter a mount first; this option does not give you one.

Invincibility: prevents normal enemy-contact and projectile hits, plus burning and poison damage. It does not refill health. Scripted deaths and some exceptional attacks can still bypass it.

Infinite Jumps: press Jump again for each extra airborne jump. Double Jump Shoes are not required.

Infinite Currency: adds a reusable 9,000,000-gold reserve. Pickups increase your total; purchases spend your earned gold first, stopping at the reserve. Turning it off leaves your remaining unspent earned gold. Allow a moment for the displayed amount to settle.

Turning off HP, weapon ammo, bomb ammo or mounted armor HP restores the starting amount for your current character or mount. Turning options off does not undo purchases, pickups or other progress.
]=])
local r=memrec
local t=createTimer(nil,false)
t.Interval=50
t.OnTimer=function(timer) timer.destroy(); if r then r.Active=false end end
t.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end

{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>20</ID>
      <Description>"Clear All"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.clear() end
local r=memrec
local t=createTimer(nil,false)
t.Interval=50
t.OnTimer=function(timer) timer.destroy(); if r then r.Active=false end end
t.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end

{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>2</ID>
      <Description>"[MAIN] Guns of Fury - Steam build 18226730"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if not GF_Katzy or not GF_Katzy.main then
 showMessage('MAIN could not be turned on\n\nReload the table and allow its startup prompt, then try again.')
 local entry=memrec
 local timer=createTimer(nil,false)
 timer.Interval=1
 timer.OnTimer=function(t) t.destroy(); if entry then entry.Active=false end end
 timer.Enabled=true
end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.clear() end
{$asm}
</AssemblerScript>
      <Options moHideChildren="1" />
      <CheatEntries>
        <CheatEntry>
          <ID>10</ID>
          <Description>"Infinite HP"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("hp",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("hp",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>11</ID>
          <Description>"Infinite Weapon Ammo"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("ammo",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("ammo",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>12</ID>
          <Description>"Infinite Bomb Ammo"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("bomb",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("bomb",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>13</ID>
          <Description>"Infinite Mounted Armor HP"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("armor",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("armor",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>14</ID>
          <Description>"Invincibility"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("invuln",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("invuln",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>15</ID>
          <Description>"Infinite Jumps"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("jumps",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("jumps",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"Infinite Currency"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
assert(GF_Katzy,"Allow the table Lua script first.")
GF_Katzy.setFeature("currency",true)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if GF_Katzy then GF_Katzy.setFeature("currency",false) end
{$asm}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols />
  <LuaScript>--[[
Table identification: Katzy
Guns of Fury | Steam build 18226730 | v1.7
Original targets derived from the installed game, 2026-09-20.
]]
local C = {["ids"]={["health_"]=100786,["max_health_"]=102792,["magic_"]=102793,["max_magic_"]=102794,["bop_"]=102795,["max_bop_"]=102796,["mech_health"]=102798,["max_mech_health"]=102800,["isdead"]=100336,["onmech"]=103048,["mechtype"]=103360},["codes"]={{["name"]="gml_Object_o_player_Step_0",["pattern"]="00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 05 86 01 00 0F 84 00 03 52 15 07 00 00 B7 00 00 05 86 FF FF 0F 84 00 03 52 15 17 00 00 B7 2A 00 00 B6 2A 00 00 B6 FA FF 05 C0 ?? ?? ?? ?? 00 00 00 C0 7B 14 AE 47 E1 7A 94 3F 00 00 50 0C FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 01 00 0F 84 00 05 52 15 07 00 00 B8 00 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 01 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 16 00 00 B6 FA FF 05 C0 ?? ?? ?? ?? 00 00 00 C0 7B 14 AE 47 E1 7A 94 3F 00 00 50 0D FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 02 52 15 07 00 00 B8 00 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 02 00 00 B6 01 00 00 B6 00 00 05 9E 00 00 0F 84 F9 FF 25 45 ?? ?? ?? ??",["patches"]={{["offset"]=1644,["original"]={0,0,85,13},["feature"]="ammo",["context"]={164,145,1,160,0,0,85,9,0,0,85,13,250,255,85,69,137,145,1,160,0,0,15,132},["handler"]="discard16"},{["offset"]=6588,["original"]={0,0,85,13},["feature"]="hp",["context"]={249,255,5,193,33,141,1,160,0,0,85,13,250,255,85,69,178,137,1,160,245,255,2,255},["also"]="invuln",["handler"]="discard16"},{["offset"]=7480,["original"]={0,0,85,13},["feature"]="hp",["context"]={249,255,5,193,33,141,1,160,0,0,85,13,250,255,85,69,178,137,1,160,245,255,2,255},["also"]="invuln",["handler"]="discard16"},{["offset"]=14508,["original"]={0,0,85,13},["feature"]="bomb",["context"]={165,145,1,160,0,0,85,9,0,0,85,13,1,0,2,217,228,0,0,0,250,255,85,69},["handler"]="discard16"},{["offset"]=15032,["original"]={0,0,85,13},["feature"]="ammo",["context"]={164,145,1,160,0,0,85,9,0,0,85,13,250,255,85,69,137,145,1,160,0,0,15,132},["handler"]="discard16"},{["offset"]=25784,["feature"]="jumps",["original"]={250,255,5,192,0,147,1,160},["context"]={0,0,2,157,190,0,0,182,250,255,5,192,0,147,1,160,0,0,15,132,0,6,82,21},["handler"]="true"},{["offset"]=25868,["feature"]="jumps",["original"]={250,255,5,192,26,138,1,160},["context"]={0,0,15,192,169,0,0,184,250,255,5,192,26,138,1,160,0,0,69,7,6,0,0,184},["handler"]="true"},{["offset"]=26100,["feature"]="jumps",["original"]={1,0,15,132},["context"]={250,255,5,192,0,147,1,160,1,0,15,132,0,0,82,13,250,255,85,69},["handler"]="zero4"}},["length"]=39728},{["name"]="gml_Object_o_player_Collision_o_enemy",["pattern"]="FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 05 00 00 B7 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 02 00 00 B6 01 00 0F C0 02 00 00 B8 00 00 02 9D FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 06 00 00 B8 FE FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 05 52 15 02 00 00 B6 00 00 0F C0 02 00 00 B8 00 00 02 9D FE FF 05 C0 ?? ?? ?? ?? 00 00 45 07 02 00 00 B8 00 00 02 9D FE FF 05 C0 ?? ?? ?? ?? 00 00 45 07 05 00 00 B8 FB FF 05 C2 ?? ?? ?? ?? 00 00 45 07 02 00 00 B6 00 00 0F C0 02 00 00 B8 00 00 02 9D FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 40 02 00 B8 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 09 00 00 B7 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 05 00 00 B7 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 02 00 00 B6 01 00 0F C0 02 00 00 B8 00 00 02 9D FA FF 05 C0 ?? ?? ?? ?? 01 00 0F 84 00 00 52 0D FA FF 55 45 ?? ?? ?? ??",["patches"]={{["offset"]=240,["original"]={1,0,15,132},["feature"]="armor",["context"]={250,255,5,192,142,145,1,160,1,0,15,132,0,0,82,13,250,255,85,69,142,145,1,160},["handler"]="zero4"},{["offset"]=2740,["original"]={0,0,85,13},["feature"]="hp",["context"]={249,255,5,193,33,141,1,160,0,0,85,13,250,255,85,69,178,137,1,160,21,0,0,182},["handler"]="discard16"},{["offset"]=2824,["original"]={0,0,85,13},["feature"]="hp",["context"]={249,255,5,193,33,141,1,160,0,0,85,13,250,255,85,69,178,137,1,160,245,255,2,255},["handler"]="discard16"},{["offset"]=172,["feature"]="invuln",["original"]={250,255,5,192,232,135,1,160},["context"]={0,0,69,7,64,2,0,184,250,255,5,192,232,135,1,160,0,0,69,7,9,0,0,183},["handler"]="true"},{["offset"]=2472,["feature"]="invuln",["original"]={250,255,5,192,232,135,1,160},["context"]={1,0,0,182,0,0,2,157,250,255,5,192,232,135,1,160,0,0,69,7,0,0,4,18},["handler"]="true"}},["length"]=6972},{["name"]="gml_Object_o_player_Collision_o_enemy_bullet",["pattern"]="FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 09 00 00 B7 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 05 00 00 B7 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 02 00 00 B6 01 00 0F C0 02 00 00 B8 00 00 02 9D FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 05 00 00 B8 FE FF 05 C0 ?? ?? ?? ?? 00 00 45 07 02 00 00 B6 00 00 0F C0 02 00 00 B8 00 00 02 9D FE FF 05 C0 ?? ?? ?? ?? 00 00 45 07 DE 00 00 B8 FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 02 00 00 B8 00 00 02 9D FE FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 04 52 15 0D 00 00 B8 FE FF 05 C0 ?? ?? ?? ?? 01 00 02 D9 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 05 11 FA FF 55 45 ?? ?? ?? ?? 18 00 00 B6 FE FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 04 52 15 0E 00 00 B8 FE FF 05 C0 ?? ?? ?? ?? 01 00 02 D9 ?? ?? ?? ?? 00 00 05 11 FA FF 55 45 ?? ?? ?? ??",["patches"]={{["offset"]=1872,["original"]={1,0,15,132},["feature"]="armor",["context"]={250,255,5,192,142,145,1,160,1,0,15,132,0,0,82,13,250,255,85,69,142,145,1,160},["handler"]="zero4"},{["offset"]=4332,["original"]={0,0,85,13},["feature"]="hp",["context"]={249,255,5,193,33,141,1,160,0,0,85,13,250,255,85,69,178,137,1,160,21,0,0,182},["handler"]="discard16"},{["offset"]=4416,["original"]={0,0,85,13},["feature"]="hp",["context"]={249,255,5,193,33,141,1,160,0,0,85,13,250,255,85,69,178,137,1,160,245,255,2,255},["handler"]="discard16"},{["offset"]=1444,["feature"]="invuln",["original"]={250,255,5,192,232,135,1,160},["context"]={0,0,69,7,6,0,0,184,250,255,5,192,232,135,1,160,0,0,69,7,0,0,4,18},["handler"]="true"},{["offset"]=1804,["feature"]="invuln",["original"]={250,255,5,192,232,135,1,160},["context"]={0,0,69,7,61,2,0,184,250,255,5,192,232,135,1,160,0,0,69,7,9,0,0,183},["handler"]="true"},{["offset"]=4092,["feature"]="invuln",["original"]={250,255,5,192,232,135,1,160},["context"]={1,0,0,182,0,0,2,157,250,255,5,192,232,135,1,160,0,0,69,7,0,0,4,18},["handler"]="true"}},["length"]=9392},{["name"]="gml_Object_o_game_Draw_64",["pattern"]="FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 1E 43 00 B8 FA FF 05 C0 ?? ?? ?? ?? 00 00 05 86 01 00 0F 84 00 03 52 15 23 00 00 B7 00 00 05 86 02 00 0F 84 00 03 52 15 EC 15 00 B7 00 00 05 86 04 00 0F 84 00 03 52 15 61 1B 00 B7 00 00 05 86 05 00 0F 84 00 03 52 15 A0 1D 00 B7 00 00 05 86 06 00 0F 84 00 03 52 15 66 20 00 B7 00 00 05 86 07 00 0F 84 00 03 52 15 54 23 00 B7 00 00 05 86 08 00 0F 84 00 03 52 15 47 27 00 B7 00 00 05 86 09 00 0F 84 00 03 52 15 BF 2C 00 B7 00 00 05 86 0A 00 0F 84 00 03 52 15 7E 2E 00 B7 AA 3B 00 B6 F4 42 00 B6 01 00 0F 84 00 00 52 07 01 00 02 D9 ?? ?? ?? ?? 00 00 05 9E 00 00 0F 84 00 00 52 07 01 00 02 D9 ?? ?? ?? ?? 00 00 05 9E 00 00 0F 84 00 00 54 07 FA FF 05 C0 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 00 52 07 00 00 0F 84 00 00 52 07",["patches"]={{["offset"]=66412,["original"]={251,255,5,194,12,145,1,160},["context"]={255,255,255,0,0,0,82,7,251,255,5,194,12,145,1,160,250,255,5,192,5,135,1,160},["feature"]="currency",["handler"]="reserve"}},["length"]=69088},{["name"]="gml_Object_o_healthbar_Create_0",["pattern"]="70 FE 0F 84 FA FF 25 45 ?? ?? ?? ?? 07 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 07 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ??",["patches"]={{["offset"]=224,["original"]={251,255,5,194,12,145,1,160},["context"]={250,255,85,69,75,137,1,160,251,255,5,194,12,145,1,160,250,255,85,69,108,146,1,160},["feature"]="currency",["handler"]="reserve"}},["length"]=1020},{["name"]="gml_Object_o_healthbar_Step_0",["pattern"]="F5 FF 02 FF 21 05 00 00 01 00 02 D9 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 77 00 00 B8 F5 FF 02 FF 21 05 00 00 F7 FF 0F 84 00 00 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? F5 FF 02 FF 21 05 00 00 F7 FF 0F 84 00 00 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? F5 FF 02 FF 21 05 00 00 F7 FF 0F 84 00 00 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? F5 FF 02 FF 21 05 00 00 F7 FF 0F 84 00 00 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? F5 FF 02 FF 21 05 00 00 F7 FF 0F 84 00 00 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? F5 FF 02 FF 21 05 00 00 F7 FF 0F 84 00 00 05 C0 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FB FF 05 C2 ?? ?? ?? ?? 03 00 0F 84 00 03 52 15 0E 00 00 B8 F5 FF 02 FF",["patches"]={{["offset"]=1316,["original"]={251,255,5,194,12,145,1,160},["context"]={153,153,169,63,0,0,80,7,251,255,5,194,12,145,1,160,250,255,5,192,108,146,1,160},["feature"]="currency",["handler"]="reserve"},{["offset"]=1380,["original"]={251,255,5,194,12,145,1,160},["context"]={0,3,85,21,5,0,0,184,251,255,5,194,12,145,1,160,250,255,85,69,108,146,1,160},["feature"]="currency",["handler"]="reserve"},{["offset"]=1472,["original"]={251,255,5,194,12,145,1,160},["context"]={250,255,85,69,23,141,1,160,251,255,5,194,12,145,1,160,250,255,85,69,108,146,1,160},["feature"]="currency",["handler"]="reserve"}},["length"]=1488},{["name"]="gml_Object_o_shopbox_Draw_64",["pattern"]="FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 06 00 00 B8 FA FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 02 52 15 02 00 00 B6 00 00 0F C0 13 00 00 B8 FA FF 05 C0 ?? ?? ?? ?? F7 FF 0F 84 0A 00 00 BA 00 00 02 C0 FA FF 00 00 FB FF 0F FF 01 00 0F 84 00 00 52 07 FA FF 0F 84 03 00 0F 84 00 00 55 45 ?? ?? ?? ?? F7 FF 7F BB 00 00 02 D9 ?? ?? ?? ?? 00 00 05 9E 00 00 02 9D FA FF 05 C0 ?? ?? ?? ?? 01 00 02 D9 ?? ?? ?? ?? 00 00 05 9E FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 15 00 00 B8 FA FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 06 52 15 0C 00 00 B8 FA FF 05 C0 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 05 00 0F 84 00 00 02 07 00 00 50 09 00 00 55 0D FA FF 55 45 ?? ?? ?? ?? 04 00 00 B6 00 00 0F 84 FA FF 25 45 ?? ?? ?? ?? 14 00 00 B6 FA FF 05 C0 ?? ?? ?? ?? 01 00 0F 84 00 01 52 15 0C 00 00 B8 FA FF 05 C0",["patches"]={{["offset"]=9400,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=10272,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=11148,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=12024,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=12900,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=13772,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=14644,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=15516,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=16388,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=17260,["original"]={251,255,5,194,12,145,1,160},["context"]={239,1,0,0,0,0,5,158,251,255,5,194,12,145,1,160,105,0,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=18488,["original"]={251,255,5,194,12,145,1,160},["context"]={0,1,85,21,11,0,0,184,251,255,5,194,12,145,1,160,250,255,15,132,249,255,5,193},["feature"]="currency",["handler"]="reserve"}},["length"]=19448},{["name"]="gml_Object_o_shopbox_Step_0",["pattern"]="FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 10 00 00 B8 FA FF 05 C0 ?? ?? ?? ?? 05 00 0F 84 00 00 52 0D FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? B4 00 0F 84 00 02 52 15 04 00 00 B8 00 00 0F 84 FA FF 45 45 ?? ?? ?? ?? 0F 00 00 B6 FA FF 05 C0 ?? ?? ?? ?? 05 00 0F 84 00 00 52 0C FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FF 00 0F 84 00 05 52 15 04 00 00 B8 01 00 0F 84 FA FF 45 45 ?? ?? ?? ?? 00 00 00 C0 9A 99 99 99 99 99 C9 3F 00 00 50 07 FA FF 05 C0 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 03 00 02 D9 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 01 00 02 D9 ?? ?? ?? ?? 00 00 55 08 FB FF 05 C2 ?? ?? ?? ?? 00 00 55 09 00 00 55 0C FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ??",["patches"]={{["offset"]=684,["original"]={251,255,5,194,12,145,1,160},["context"]={1,0,15,192,16,0,0,184,251,255,5,194,12,145,1,160,250,255,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"},{["offset"]=2384,["original"]={251,255,5,194,12,145,1,160},["context"]={0,0,5,158,200,0,0,182,251,255,5,194,12,145,1,160,250,255,15,132,250,255,5,192},["feature"]="currency",["handler"]="reserve"}},["length"]=3308},{["name"]="gml_Object_o_npc_Other_17",["pattern"]="00 00 0F 84 F9 FF 25 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 05 86 01 00 0F 84 00 03 52 15 0F 00 00 B7 00 00 05 86 02 00 0F 84 00 03 52 15 C8 06 00 B7 00 00 05 86 03 00 0F 84 00 03 52 15 E6 07 00 B7 00 00 05 86 04 00 0F 84 00 03 52 15 07 09 00 B7 3B 0B 00 B6 79 0E 00 B6 04 00 0F 84 00 00 52 07 01 00 02 D9 ?? ?? ?? ?? 00 00 05 9E FA FF 05 C0 ?? ?? ?? ?? 00 00 45 07 00 00 04 12 BA 01 00 B8 FB FF 05 C2 ?? ?? ?? ?? 00 00 05 86 01 00 0F 84 00 03 52 15 3C 00 00 B7 00 00 05 86 02 00 0F 84 00 03 52 15 51 00 00 B7 00 00 05 86 03 00 0F 84 00 03 52 15 66 00 00 B7 00 00 05 86 04 00 0F 84 00 03 52 15 7B 00 00 B7 00 00 05 86 05 00 0F 84 00 03 52 15 90 00 00 B7 00 00 05 86 06 00 0F 84 00 03 52 15 A5 00 00 B7 00 00 05 86 07 00 0F 84 00 03 52 15 BA 00 00 B7 00 00 05 86",["patches"]={{["offset"]=1896,["original"]={251,255,5,194,12,145,1,160},["context"]={0,0,2,157,250,4,0,182,251,255,5,194,12,145,1,160,112,23,15,132,0,5,82,21},["feature"]="currency",["handler"]="reserve"}},["length"]=14912},{["name"]="gml_Object_o_npc_Other_13",["pattern"]="FA FF 05 C0 ?? ?? ?? ?? 00 00 05 86 04 00 0F 84 00 03 52 15 0F 00 00 B7 00 00 05 86 0A 00 0F 84 00 03 52 15 14 00 00 B7 00 00 05 86 0C 00 0F 84 00 03 52 15 B0 00 00 B7 00 00 05 86 0E 00 0F 84 00 03 52 15 34 01 00 B7 5E 01 00 B6 5E 01 00 B6 00 00 06 C0 ?? ?? ?? ?? 00 00 56 07 02 00 0F 84 00 00 52 07 02 00 02 D9 ?? ?? ?? ?? 00 00 05 9E 55 01 00 B6 00 00 06 C0 ?? ?? ?? ?? 00 00 56 07 01 00 02 D9 ?? ?? ?? ?? FA FF 55 45 ?? ?? ?? ?? FA FF 05 C0 ?? ?? ?? ?? 00 00 0F 84 00 03 52 15 4D 00 00 B8 F5 FF 02 FF 99 02 00 00 F9 FF 55 45 ?? ?? ?? ?? F9 FF 05 C1 ?? ?? ?? ?? 01 00 02 D9 ?? ?? ?? ?? 00 00 06 C0 ?? ?? ?? ?? 00 00 56 0C 01 00 02 D9 ?? ?? ?? ?? F9 FF 55 45 ?? ?? ?? ?? F9 FF 05 C1 ?? ?? ?? ?? 00 00 0F 84 00 03 54 15 04 00 00 B8 00 00 02 D9 ?? ?? ?? ?? 00 00 05 9E",["patches"]={{["offset"]=568,["original"]={0,0,82,13},["context"]={12,145,1,160,112,23,15,132,0,0,82,13,251,255,85,69,12,145,1,160},["feature"]="currency",["handler"]="floor"}},["length"]=1480}},["bits"]={["hp"]=1,["ammo"]=2,["bomb"]=4,["armor"]=8,["invuln"]=16,["jumps"]=32,["currency"]=64},["native"]={{["name"]="push",["rva"]=3064608,["original"]={72,137,92,36,16,76,137,76,36,32,85,86,87,65,84},["entry"]=256,["mask"]=48},{["name"]="global",["rva"]=3070784,["original"]={72,137,92,36,8,72,137,116,36,16,87,72,131,236,32},["entry"]=549,["mask"]=64},{["name"]="subtract",["rva"]=3043328,["original"]={64,85,86,87,65,84,65,85,65,86,65,87,72,131,236,80},["entry"]=1286,["mask"]=87},{["name"]="immediate",["rva"]=3071120,["original"]={193,225,16,72,141,66,252,193,249,16,137,74,252,195},["entry"]=1691,["mask"]=40}},["payload"]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,230,254,255,255,32,15,132,232,0,0,0,233,6,6,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,193,254,255,255,32,15,132,195,0,0,0,233,225,5,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,156,254,255,255,16,15,132,158,0,0,0,233,188,5,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,119,254,255,255,16,15,132,121,0,0,0,233,151,5,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,82,254,255,255,16,15,132,84,0,0,0,233,114,5,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,45,254,255,255,16,15,132,47,0,0,0,233,77,5,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,8,254,255,255,16,15,132,10,0,0,0,233,40,5,0,0,233,0,0,0,0,72,137,92,36,16,76,137,76,36,32,85,86,87,65,84,255,37,0,0,0,0,0,0,0,0,0,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,193,253,255,255,64,15,132,164,2,0,0,233,11,5,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,156,253,255,255,64,15,132,127,2,0,0,233,230,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,119,253,255,255,64,15,132,90,2,0,0,233,193,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,82,253,255,255,64,15,132,53,2,0,0,233,156,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,45,253,255,255,64,15,132,16,2,0,0,233,119,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,8,253,255,255,64,15,132,235,1,0,0,233,82,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,227,252,255,255,64,15,132,198,1,0,0,233,45,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,190,252,255,255,64,15,132,161,1,0,0,233,8,4,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,153,252,255,255,64,15,132,124,1,0,0,233,227,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,116,252,255,255,64,15,132,87,1,0,0,233,190,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,79,252,255,255,64,15,132,50,1,0,0,233,153,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,42,252,255,255,64,15,132,13,1,0,0,233,116,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,5,252,255,255,64,15,132,232,0,0,0,233,79,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,224,251,255,255,64,15,132,195,0,0,0,233,42,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,187,251,255,255,64,15,132,158,0,0,0,233,5,3,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,150,251,255,255,64,15,132,121,0,0,0,233,224,2,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,113,251,255,255,64,15,132,84,0,0,0,233,187,2,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,76,251,255,255,64,15,132,47,0,0,0,233,150,2,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,39,251,255,255,64,15,132,10,0,0,0,233,113,2,0,0,233,0,0,0,0,72,137,92,36,8,72,137,116,36,16,87,72,131,236,32,255,37,0,0,0,0,0,0,0,0,0,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,224,250,255,255,2,15,132,87,1,0,0,233,37,2,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,187,250,255,255,17,15,132,50,1,0,0,233,0,2,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,150,250,255,255,17,15,132,13,1,0,0,233,219,1,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,113,250,255,255,4,15,132,232,0,0,0,233,182,1,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,76,250,255,255,2,15,132,195,0,0,0,233,145,1,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,39,250,255,255,1,15,132,158,0,0,0,233,108,1,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,2,250,255,255,1,15,132,121,0,0,0,233,71,1,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,221,249,255,255,1,15,132,84,0,0,0,233,34,1,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,184,249,255,255,1,15,132,47,0,0,0,233,253,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,147,249,255,255,64,15,132,10,0,0,0,233,52,1,0,0,233,0,0,0,0,64,85,86,87,65,84,65,85,65,86,65,87,72,131,236,80,255,37,0,0,0,0,0,0,0,0,0,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,75,249,255,255,32,15,132,84,0,0,0,233,133,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,38,249,255,255,8,15,132,47,0,0,0,233,96,0,0,0,72,184,0,0,0,0,0,0,0,0,73,57,192,15,133,18,0,0,0,246,5,1,249,255,255,8,15,132,10,0,0,0,233,59,0,0,0,233,0,0,0,0,193,225,16,72,141,66,252,193,249,16,137,74,252,195,255,37,0,0,0,0,0,0,0,0,0,0,0,0,72,141,66,240,72,185,0,0,0,0,0,0,240,63,72,137,8,72,199,64,8,0,0,0,0,195,72,141,66,252,199,0,0,0,0,0,195,72,141,66,16,195,72,131,236,40,232,139,253,255,255,72,131,196,40,131,120,12,0,15,132,21,0,0,0,131,120,12,7,15,132,20,0,0,0,131,120,12,10,15,132,19,0,0,0,195,242,15,16,0,233,14,0,0,0,242,15,42,0,233,5,0,0,0,242,72,15,42,0,242,15,88,5,99,0,0,0,242,15,17,0,199,64,12,0,0,0,0,195,72,131,236,40,232,200,254,255,255,72,131,196,40,131,120,12,0,15,132,21,0,0,0,131,120,12,7,15,132,20,0,0,0,131,120,12,10,15,132,19,0,0,0,195,242,15,16,0,233,14,0,0,0,242,15,42,0,233,5,0,0,0,242,72,15,42,0,102,15,239,201,242,15,95,193,242,15,17,0,199,64,12,0,0,0,0,195,0,0,0,0,136,42,97,65},["relocations"]={{["offset"]=258,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=25788},{["offset"]=295,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=25872},{["offset"]=332,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy",["offsetInCode"]=176},{["offset"]=369,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy",["offsetInCode"]=2476},{["offset"]=406,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy_bullet",["offsetInCode"]=1448},{["offset"]=443,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy_bullet",["offsetInCode"]=1808},{["offset"]=480,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy_bullet",["offsetInCode"]=4096},{["offset"]=541,["kind"]="module",["rva"]=3064623},{["offset"]=551,["kind"]="site",["code"]="gml_Object_o_game_Draw_64",["offsetInCode"]=66416},{["offset"]=588,["kind"]="site",["code"]="gml_Object_o_healthbar_Create_0",["offsetInCode"]=228},{["offset"]=625,["kind"]="site",["code"]="gml_Object_o_healthbar_Step_0",["offsetInCode"]=1320},{["offset"]=662,["kind"]="site",["code"]="gml_Object_o_healthbar_Step_0",["offsetInCode"]=1384},{["offset"]=699,["kind"]="site",["code"]="gml_Object_o_healthbar_Step_0",["offsetInCode"]=1476},{["offset"]=736,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=9404},{["offset"]=773,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=10276},{["offset"]=810,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=11152},{["offset"]=847,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=12028},{["offset"]=884,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=12904},{["offset"]=921,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=13776},{["offset"]=958,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=14648},{["offset"]=995,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=15520},{["offset"]=1032,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=16392},{["offset"]=1069,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=17264},{["offset"]=1106,["kind"]="site",["code"]="gml_Object_o_shopbox_Draw_64",["offsetInCode"]=18492},{["offset"]=1143,["kind"]="site",["code"]="gml_Object_o_shopbox_Step_0",["offsetInCode"]=688},{["offset"]=1180,["kind"]="site",["code"]="gml_Object_o_shopbox_Step_0",["offsetInCode"]=2388},{["offset"]=1217,["kind"]="site",["code"]="gml_Object_o_npc_Other_17",["offsetInCode"]=1900},{["offset"]=1278,["kind"]="module",["rva"]=3070799},{["offset"]=1288,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=1648},{["offset"]=1325,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=6592},{["offset"]=1362,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=7484},{["offset"]=1399,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=14512},{["offset"]=1436,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=15036},{["offset"]=1473,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy",["offsetInCode"]=2744},{["offset"]=1510,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy",["offsetInCode"]=2828},{["offset"]=1547,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy_bullet",["offsetInCode"]=4336},{["offset"]=1584,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy_bullet",["offsetInCode"]=4420},{["offset"]=1621,["kind"]="site",["code"]="gml_Object_o_npc_Other_13",["offsetInCode"]=572},{["offset"]=1683,["kind"]="module",["rva"]=3043344},{["offset"]=1693,["kind"]="site",["code"]="gml_Object_o_player_Step_0",["offsetInCode"]=26104},{["offset"]=1730,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy",["offsetInCode"]=244},{["offset"]=1767,["kind"]="site",["code"]="gml_Object_o_player_Collision_o_enemy_bullet",["offsetInCode"]=1876},{["offset"]=1827,["kind"]="module",["rva"]=3071134}},["tag"]="v1.3-ba29a7eb668638d1902c9269de864ce075feeda50840b07f2a01a28820acf85d"}

if GF_Katzy then GF_Katzy.shutdown() end
local S = {enabled={}, snapshots={}, patches={}, main=false, ready=false}
GF_Katzy = S
local EXE = 'Guns_of_Fury.exe'
local F = {
 hp={field='health_', maximum='max_health_', id=10},
 ammo={field='magic_', maximum='max_magic_', id=11},
 bomb={field='bop_', maximum='max_bop_', id=12},
 armor={field='mech_health', maximum='max_mech_health', id=13},
 invuln={id=14,patchOnly=true},
 jumps={id=15,patchOnly=true},
 currency={id=16,patchOnly=true}
}
local function requireValue(v, why) if v==nil then error(why,0) end return v end
local function bytes(a,n) return requireValue(readBytes(a,n,true),'Cannot read game memory at '..string.format('%X',a)) end
local function same(a,b)
 if not a or not b or #a~=#b then return false end
 for i=1,#a do if a[i]~=b[i] then return false end end
 return true
end
local function q(a) return requireValue(readQword(a),'Cannot read pointer') end
local function u(a) return requireValue(readInteger(a),'Cannot read integer') end
local function record(id) return getAddressList().getMemoryRecordByID(id) end
local function status(s) local r=record(0); if r then r.Description='Auto-Attach and Version Check - '..s end end
local function plainFailure(reason)
 local message=tostring(reason):lower()
 local function has(text) return message:find(text,1,true)~=nil end
 if has('start guns of fury') then return 'The game is not running. Start Guns of Fury and try again.' end
 if has('enter gameplay') or has('enter live gameplay') then return 'You are not in a playable area. Load your game, then try again.' end
 if has('wrong game') or has('supported 64-bit') then return 'This table does not match your installed game. Use a table made for your game version.' end
 if has('already modified') or has('modified subtraction') or has('older table') or has('changed externally') then return 'Another cheat or an earlier table has changed the game. Turn off the other table. If this continues, restart the game and load only this table.' end
 if has('no longer selected') or has('re-select') or has('select the original') then return 'Cheat Engine is no longer connected to the same game. Select Guns of Fury again, then try again.' end
 if has('unable to attach') then return 'Cheat Engine could not connect to the game. Make sure Guns of Fury is running, then try again.' end
 if has('ambiguous') or has('expected one player') then return 'The current player could not be identified reliably. Return to normal gameplay and try again.' end
 if has('not found') or has('unavailable') then return 'The game is not ready yet. Wait until your character is playable, then try again.' end
 if has('cannot read') or has('write/readback') then return 'Cheat Engine could not access the game. Reconnect to Guns of Fury and try again.' end
 if has('layout') or has('does not match') or has('unexpected') or has('invalid value') or has('bounds') or has('execution cache') then return 'The current game state could not be verified. Restart the game and try again.' end
 return 'MAIN could not be turned on because an unexpected problem occurred. Reload the table and try again. If it keeps happening, restart the game.'
end
local function warn(e)
 e=tostring(e)
 if S.lastError~=e then S.lastError=e; showMessage('Guns of Fury: '..plainFailure(e)) end
end
local function ownedProcess()
 return S.pid and getOpenedProcessID()==S.pid and getProcessIDFromProcessName(EXE)==S.pid
end
local function transaction(fn)
 if not ownedProcess() then error('The original game process is no longer selected or running.',0) end
 pause()
 local ok,result=pcall(fn)
 unpause()
 if not ok then error(result,0) end
 return result
end
local function writeChecked(a,b)
 if not writeBytes(a,b) or not same(bytes(a,#b),b) then error('Memory write/readback failed.',0) end
end
local function put(a,value)
 if not writeDouble(a,value) or readDouble(a)~=value then error('Resource write/readback failed.',0) end
end
local function unique(pattern,label,adjust)
 local scan=AOBScan(pattern,'+W-C')
 if not scan then error(label..' was not found. Enter gameplay and try MAIN again.',0) end
 local count=scan.Count
 local address=count==1 and tonumber(scan[0],16) or nil
 scan.destroy()
 if not address then error(label..' is ambiguous ('..count..' matches); no changes were made.',0) end
 return address+(adjust or 0)
end
local function member(instance,name)
 local map=q(instance+0x48)
 if map==0 then error('Player variable map is unavailable.',0) end
 local size,mask=u(map),u(map+8)
 if size&lt;4 or size&gt;65536 or mask~=size-1 or (size &amp; (size-1))~=0 then error('Unexpected player variable map.',0) end
 local elements=q(map+0x10)
 local key=assert(C.ids[name],name)
 local slot=(key+1)&amp;mask
 for count=1,size do
  local a=elements+slot*16
  if u(a+12)==0 then break end
  if u(a+8)==key then
   local p=q(a)
   if p==0 then break end
   return p
  end
  slot=(slot+1)&amp;mask
 end
 error('Player field is unavailable: '..name,0)
end
local function number(instance,name)
 local a=member(instance,name)
 if u(a+12)~=0 then error('Unexpected numeric type for '..name,0) end
 local v=requireValue(readDouble(a),'Cannot read '..name)
 if v~=v or math.abs(v)&gt;1000000 then error('Invalid value for '..name,0) end
 return v,a
end
local function boolean(instance,name)
 local a=member(instance,name)
 local kind=u(a+12)
 if kind~=13 and kind~=0 then error('Unexpected flag type for '..name,0) end
 return requireValue(readDouble(a),'Cannot read flag')~=0
end
local function player()
 if not S.object then return nil end
 if u(S.object+0x94)~=1313 or readString(q(S.object),9)~='o_player' then error('Player object identity changed.',0) end
 local count=u(S.object+0x60)
 if count==0 then return nil end
 if count~=1 then error('Expected one player instance; refusing ambiguous writes.',0) end
 local node=q(S.object+0x50)
 if node==0 then return nil end
 local p=q(node+0x10)
 if p==0 or q(p+0x90)~=S.object or u(p+0xc0)~=1313 or u(p+0x7c)~=1 then error('Player instance layout does not match this build.',0) end
 if q(p)~=S.base+0xa249e8 then error('Player instance type does not match this build.',0) end
 return {address=p,id=u(p+0xbc),created=q(p+0x88)}
end
local function identity(a,b) return a and b and a.address==b.address and a.id==b.id and a.created==b.created end
local function stateFor(feature,who)
 if F[feature].patchOnly then return nil end
 if not who then return nil end
 if boolean(who.address,'isdead') then return nil end
 if feature=='armor' and not boolean(who.address,'onmech') then return nil end
 local info=F[feature]
 local v,a=number(who.address,info.field)
 local max=number(who.address,info.maximum)
 if max&lt;=0 or max&gt;100000 or v&lt;0 or v&gt;max then error('Resource bounds do not match '..info.field,0) end
 local mount=feature=='armor' and number(who.address,'mechtype') or nil
 return {who=who,address=a,value=v,maximum=max,mount=mount}
end
local function restoreValue(feature,who)
 local snap=S.snapshots[feature]
 if not snap then return end
 if identity(snap.who,who) then
  local current=stateFor(feature,who)
  if current and current.address==snap.address and current.mount==snap.mount then
   put(current.address,math.min(snap.value,current.maximum))
  end
 end
 S.snapshots[feature]=nil
end
local function fill(feature,who)
 local current=stateFor(feature,who)
 local snap=S.snapshots[feature]
 if not current then
  -- A vanished player or dismounted/destroyed armor is not a valid restoration target.
  S.snapshots[feature]=nil
  return
 end
 if not snap or not identity(snap.who,who) or snap.address~=current.address or snap.mount~=current.mount then
  S.snapshots[feature]=current
 end
 if current.value~=current.maximum then put(current.address,current.maximum) end
end
local function packPointer(v) return {string.pack('&lt;I8',v):byte(1,8)} end
local function activeMask(except,extra)
 local mask=0
 for feature in pairs(S.enabled) do if feature~=except then mask=mask|C.bits[feature] end end
 if extra then mask=mask|C.bits[extra] end
 return mask
end
local function prepareNative()
 if S.pool then
  if not same(bytes(S.pool.address+256,#S.pool.code),S.pool.code) then error('Native workspace ownership changed.',0) end
  return
 end
 local key=C.tag..':'..tostring(S.pid)..':'..string.format('%X',S.base)
 local byName={}
 for _,code in ipairs(C.codes) do byName[code.name]=code; key=key..':'..string.format('%X',code.address) end
 local pool=GF_Katzy_native_pool
 if pool and pool.key==key and same(readBytes(pool.address,1,true),{0}) and same(readBytes(pool.address+256,#pool.code,true),pool.code) then S.pool=pool; return end
 local address=allocateMemory(4096,nil,0x40)
 if not address or address==0 then error('Cannot allocate the verified native handler workspace.',0) end
 local data={table.unpack(C.payload)}
 for _,reloc in ipairs(C.relocations) do
  local value=reloc.kind=='module' and S.base+reloc.rva or byName[reloc.code].address+reloc.offsetInCode
  local encoded=packPointer(value)
  for j=1,8 do data[reloc.offset+j]=encoded[j] end
 end
 local ok,e=pcall(function() writeChecked(address,data) end)
 if not ok then deAlloc(address); error(e,0) end
 pool={key=key,address=address,code={table.unpack(data,257)},hooks={}}
 for _,native in ipairs(C.native) do
  local patched={0xff,0x25,0,0,0,0}
  for _,v in ipairs(packPointer(address+native.entry)) do patched[#patched+1]=v end
  while #patched&lt;#native.original do patched[#patched+1]=0x90 end
  pool.hooks[native.name]={address=S.base+native.rva,original=native.original,patched=patched,name=native.name,mask=native.mask}
 end
 -- Keep published executable code until process exit, so an in-flight call can return safely.
 -- A later table load reuses this small workspace when its identity and code still match.
 GF_Katzy_native_pool=pool;S.pool=pool
end
local function install(feature)
 for _,code in ipairs(C.codes) do for _,p in ipairs(code.patches) do
  if p.feature==feature or p.also==feature then
   if not same(bytes(code.address+p.offset-8,#p.context),p.context) then error('Original game code changed: '..code.name,0) end
  end
 end end
 prepareNative()
 local mask=activeMask(nil,feature)
 for _,native in ipairs(C.native) do
  local hook=S.pool.hooks[native.name]
  if (hook.mask &amp; mask)~=0 then
   local owned=false
   for _,p in ipairs(S.patches) do if p.name==hook.name then owned=true; break end end
   if owned then
    if not same(bytes(hook.address,#hook.patched),hook.patched) then error('Native handler ownership changed.',0) end
   else
    if not same(bytes(hook.address,#hook.original),hook.original) then error('Native handler already modified: '..hook.name,0) end
    S.patches[#S.patches+1]=hook
    writeChecked(hook.address,hook.patched)
   end
  end
 end
 writeChecked(S.pool.address,{mask})
end
local function unpatch(feature)
 if not S.pool then S.enabled[feature]=nil; return end
 local mask=activeMask(feature)
 writeChecked(S.pool.address,{mask})
 for i=#S.patches,1,-1 do
  local p=S.patches[i]
  if (p.mask &amp; mask)==0 then
   local now=bytes(p.address,#p.original)
   if same(now,p.patched) then writeChecked(p.address,p.original)
   elseif not same(now,p.original) then error('Native handler changed externally; cleanup stopped at '..p.name,0) end
   table.remove(S.patches,i)
  end
 end
 S.enabled[feature]=nil
end

local function repairLegacyCache()
 -- v1.1 could compile a pop/discard handler while its temporary bytecode was active.
 -- Restore only that exact known stale cache entry after checking original SUB bytecode.
 for _,code in ipairs(C.codes) do
  local relevant={}
  for _,p in ipairs(code.patches) do if p.handler:match('^discard') then relevant[#relevant+1]=p end end
  if #relevant&gt;0 then
   local pattern={}
   for _,v in ipairs(packPointer(code.address)) do pattern[#pattern+1]=string.format('%02X',v) end
   local matches=AOBScan(table.concat(pattern,' '),'+W-C')
   local cache
   if matches then
    for i=0,matches.Count-1 do
     local candidate=tonumber(matches[i],16)-0x18
     if readQword(candidate)==S.base+0xa21688 and readInteger(candidate+8)==code.length and readQword(candidate+0x18)==code.address then
      if cache and cache~=candidate then matches.destroy();error('Ambiguous native execution cache.',0) end
      cache=candidate
     end
    end
    matches.destroy()
   end
   if not cache then error('Cannot validate the native execution cache for '..code.name,0) end
   transaction(function()
    local handlers,mapping=q(cache+0x20),q(cache+0x28)
    if handlers==0 or mapping==0 then return end
    local repair={}
    for _,p in ipairs(relevant) do
     if not same(bytes(code.address+p.offset,#p.original),p.original) then error('Restore the older table before enabling MAIN.',0) end
     local index=u(mapping+p.offset)
     if index&gt;=code.length//4 then error('Unexpected native dispatch index.',0) end
     local slot=handlers+index*8;local target=q(slot)
     if target==S.base+0x2eec00 then repair[#repair+1]=slot
     elseif target~=S.base+0x2e7000 then error('Unknown modified subtraction handler.',0) end
    end
    for _,slot in ipairs(repair) do writeChecked(slot,packPointer(S.base+0x2e7000)) end
   end)
  end
 end
end

function S.attach()
 local pid=getProcessIDFromProcessName(EXE)
 if not pid or pid==0 then status('Waiting for game'); return false end
 if S.pid==pid and S.ready and getOpenedProcessID()==pid then return true end
 if S.pid and S.pid~=pid then
  S.enabled={}; S.snapshots={}; S.patches={}; S.main=false; S.object=nil; S.ready=false; S.pool=nil
  S.resetUI()
 end
 if #S.patches&gt;0 and getOpenedProcessID()~=S.pid then error('Re-select the original game process to clean up the active table.',0) end
 openProcess(pid)
 if getOpenedProcessID()~=pid then error('Unable to attach to Guns of Fury.',0) end
 S.pid=pid; S.ready=false
 local module
 for _,m in ipairs(enumModules(pid)) do if m.Name:lower()==EXE:lower() then module=m; break end end
 if not module or not module.Is64Bit then error('Expected the supported 64-bit Guns of Fury executable.',0) end
 local _,version=getFileVersion(module.PathToFile)
 if not version or version.major~=1 or version.minor~=2 or version.release~=7 or version.build~=6 then error('Wrong game version: this table requires executable 1.2.7.6, Steam build 18226730.',0) end
 local folder=module.PathToFile:match('^(.*[\\/])')
 if md5file(module.PathToFile):lower()~='6883e2a85410044717426e3f1929ad45' or md5file(folder..'data.win'):lower()~='4f8f2c848b60e81933f598f64c5bf336' then
  error('Wrong game build or modified game files. Supported Steam build: 18226730.',0)
 end
 S.base=module.Address; S.ready=true; S.lastError=nil
 status('Verified Steam build 18226730')
 return true
end
function S.enableMain()
 if not S.attach() then error('Start Guns of Fury first.',0) end
 if not S.object then
  local object=unique('DA 00 00 00 FD 0D 00 00 00 00 00 00 9C FF FF FF FD 0D 00 00 21 05 00 00','Player object',-0x80)
  for _,code in ipairs(C.codes) do code.address=unique(code.pattern,code.name) end
  S.object=object
 end
 transaction(function()
  local p=player()
  if not p then error('Enter gameplay before enabling MAIN.',0) end
  for feature in pairs(F) do stateFor(feature,p) end
  for _,code in ipairs(C.codes) do for _,p in ipairs(code.patches) do
   if not same(bytes(code.address+p.offset,#p.original),p.original) then error('Player code is already modified. Restore it before enabling MAIN.',0) end
  end end
  for _,native in ipairs(C.native) do if not same(bytes(S.base+native.rva,#native.original),native.original) then error('Native game handler is already modified.',0) end end
 end)
 repairLegacyCache()
 S.main=true
 if S.timer then S.timer.Enabled=true end
end
function S.setFeature(feature,on)
 assert(F[feature],'Unknown feature')
 if S.clearing then return end

 if on then
  if not S.main or not S.ready then error('Enable MAIN first.',0) end
  if S.enabled[feature] then return end
  local ok,e=pcall(function() transaction(function()
   local p=player()
   if not p or boolean(p.address,'isdead') then error('Enter live gameplay before enabling this cheat.',0) end
   stateFor(feature,p)
   install(feature)
   fill(feature,p)
   S.enabled[feature]=true
  end) end)
  if not ok then
   local rollback,why=pcall(function() transaction(function() unpatch(feature); restoreValue(feature,player()) end) end)
   if not rollback then e=tostring(e)..' Cleanup also failed: '..tostring(why) end
   error(e,0)
  end
 else
  if not S.enabled[feature] and not S.snapshots[feature] then
   local owned=false; for _,p in ipairs(S.patches) do if (p.mask &amp; C.bits[feature])~=0 then owned=true end end
   if not owned then return end
  end
  transaction(function() unpatch(feature); restoreValue(feature,player()) end)
  S.enabled[feature]=nil
 end
end
function S.resetUI()
 S.clearing=true
 for _,info in pairs(F) do local r=record(info.id); if r then r.Active=false end end
 local main=record(2); if main then main.Active=false end
 S.clearing=false
end
function S.clear()
 if S.clearing then return end
 -- MAIN alone and all-options-Off do not suspend the game.
 if #S.patches&gt;0 or next(S.snapshots) then
  if ownedProcess() then
   for feature in pairs(F) do
    local pending=S.snapshots[feature]~=nil or S.enabled[feature]~=nil
    for _,p in ipairs(S.patches) do if (p.mask &amp; C.bits[feature])~=0 then pending=true end end
    if pending then transaction(function() unpatch(feature); restoreValue(feature,player()) end) end
   end
  elseif getProcessIDFromProcessName(EXE)==S.pid then
   error('Select the original game process before clearing the active cheats.',0)
  else S.patches={}; S.snapshots={} end
 end
 S.enabled={}; S.main=false
 S.resetUI()
end
function S.tick()
 if S.pid and getProcessIDFromProcessName(EXE)~=S.pid then
  S.enabled={}; S.snapshots={}; S.patches={}; S.main=false; S.ready=false; S.object=nil; S.pool=nil
  S.resetUI(); status('Waiting for game')
  return
 end
 if not next(S.enabled) then return end
 if not S.pool or not same(bytes(S.pool.address,1),{activeMask()}) or not same(bytes(S.pool.address+256,#S.pool.code),S.pool.code) then error('Native workspace changed; automatic writes stopped.',0) end
 for _,p in ipairs(S.patches) do if not same(bytes(p.address,#p.patched),p.patched) then error('Active game code changed; automatic writes stopped.',0) end end
 local needFill=false
 for feature in pairs(S.enabled) do if not F[feature].patchOnly then needFill=true end end
 if not needFill then return end
 transaction(function()
  local who=player()
  for feature in pairs(S.enabled) do fill(feature,who) end
 end)
end
local oldLoad=onTableLoad
local form=getMainForm()
local oldClose=form.OnCloseQuery
local loadHandler,closeHandler
local mainRecord=record(2)
local oldMainActivate=mainRecord and mainRecord.OnActivate
local mainActivateHandler
function S.shutdown()
 S.clear()
 if S.timer then S.timer.destroy(); S.timer=nil end
 if onTableLoad==loadHandler then onTableLoad=oldLoad end
 if form.OnCloseQuery==closeHandler then form.OnCloseQuery=oldClose end
 if mainRecord and mainRecord.OnActivate==mainActivateHandler then mainRecord.OnActivate=oldMainActivate end
 if GF_Katzy==S then GF_Katzy=nil end
end
loadHandler=function(before)
 if before then S.shutdown() end
 if oldLoad then return oldLoad(before) end
end
closeHandler=function(sender)
 local ok,e=pcall(S.clear)
 if not ok then warn(e); return false end
 if oldClose then return oldClose(sender) end
 return true
end
mainActivateHandler=function(memoryrecord,before,currentstate)
 if not before then return true end
 local ok,reason=pcall(S.enableMain)
 if not ok then
  S.lastMainError=tostring(reason)
  showMessage('MAIN could not be turned on\n\n'..plainFailure(reason))
  return false
 end
 S.lastMainError=nil
 return true
end
if mainRecord then mainRecord.OnActivate=mainActivateHandler end
onTableLoad=loadHandler
form.OnCloseQuery=closeHandler
S.timer=createTimer(nil,false)
S.timer.Interval=150
local ticks=0
S.timer.OnTimer=function()
 local ok,e=pcall(function()
  ticks=ticks+1
  if ticks%7==0 then S.attach() end
  S.tick()
 end)
 if not ok then
  S.timer.Enabled=false
  local clean,why=pcall(S.clear)
  if not clean then e=tostring(e)..' Cleanup requires attention: '..tostring(why) end
  warn(e)
 end
end
S.timer.Enabled=true
local ok,e=pcall(S.attach)
if not ok then status('Build verification failed'); warn(e) end

</LuaScript>
</CheatTable>