<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>6</ID>
      <Description>"NT resolver (enable first)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if NT and NT.timer then NT.timer.destroy() end
NT=NT or {}; NT.cache={}; NT.miss={}; NT.obj=NT.obj or {}
NT.KEYS={rads=0x19945, wep=0x1A027, bwep=0x1895F, ammo=0x188E6, mutpts=0x19DD0, skills=0x19DC5, mutcount=0x19820, hp=0x19822, maxhp=0x1969E, strikes=0x19B76, amax=0x19F2D, hammer=0x194BE}
function NT.ptrsTo(t)
  local ms=createMemScan()
  ms.firstScan(soExactValue, vtQword, rtRounded, string.format("%d",t), "", 0, 0x7fffffffffffffff, "", fsmAligned, "8", false, false, false, false)
  ms.waitTillDone()
  local fl=createFoundList(ms); fl.initialize()
  local r={} for i=0,math.min(fl.Count,5000)-1 do r[#r+1]=tonumber(fl.Address[i],16) end
  fl.destroy(); ms.destroy(); return r
end
function NT.objName(inst)
  local o=readQword(inst+0x90); if not o or o&lt;0x10000 then return nil end
  local s=readQword(o); if not s or s&lt;0x10000 then return nil end
  return readString(s,32)
end
function NT.isInst(p,name)
  if not p or p&lt;0x10000 then return false end
  local o=readQword(p+0x90)
  if NT.obj[name] then if o~=NT.obj[name] then return false end
  elseif NT.objName(p)~=name then return false end
  local m=readQword(p+0x48); local sz=m and readInteger(m)
  return sz and sz&gt;0 and sz&lt;65536
end
function NT.findObj(name)
  if NT.obj[name] then return NT.obj[name] end
  local ms=createMemScan()
  ms.firstScan(soExactValue, vtString, rtRounded, name, "", 0, 0x7fffffffffffffff, "", fsmNotAligned, "1", false, true, false, true)
  ms.waitTillDone()
  local fl=createFoundList(ms); fl.initialize()
  local strs={} for i=0,math.min(fl.Count,200)-1 do local a=tonumber(fl.Address[i],16); if readBytes(a+#name,1)==0 then strs[#strs+1]=a end end
  fl.destroy(); ms.destroy()
  for _,s in ipairs(strs) do
    for _,o in ipairs(NT.ptrsTo(s)) do
      for _,ref in ipairs(NT.ptrsTo(o)) do
        local inst=ref-0x90
        if readQword(inst+0x48) and NT.objName(inst)==name then NT.obj[name]=o; return o end
      end
    end
  end
end
function NT.findInst(name)
  local c=NT.cache[name]
  if NT.isInst(c,name) then return c end
  NT.cache[name]=nil
  local ob=NT.obj[name]
  if ob then
    local nd=readQword(ob+0x50); local ins=nd and nd&gt;0x10000 and readQword(nd+0x10)
    if ins and NT.isInst(ins,name) then NT.cache[name]=ins; return ins end
    return nil
  end
  local b=readQword(getAddress("nuclearthrone.exe")+0x25C5540)
  if b then for o=0,0x200,8 do local p=readQword(b+o); if NT.isInst(p,name) then NT.cache[name]=p; return p end end end
  local g=NT.cache.GameCont
  if name~="GameCont" and g and NT.isInst(g,"GameCont") then
    local h=g; local k=0
    while k&lt;20000 do local p=readQword(h+0x1A8); if not p or p==0 then break end h=p k=k+1 end
    local o=NT.obj[name]; local c=h; local n=0
    while c and c~=0 and n&lt;40000 do n=n+1
      if (o and readQword(c+0x90)==o) or (not o and NT.objName(c)==name) then if NT.isInst(c,name) then NT.cache[name]=c; return c end end
      c=readQword(c+0x1A0) end
    return nil
  end
  if (NT.miss[name] or 0)&gt;getTickCount() then return nil end
  NT.miss[name]=getTickCount()+30000
  local obj=NT.findObj(name); if not obj then return nil end
  for _,ref in ipairs(NT.ptrsTo(obj)) do
    local inst=ref-0x90
    if NT.isInst(inst,name) then NT.cache[name]=inst; return inst end
  end
end
function NT.var(inst,key)
  local m=readQword(inst+0x48); if not m or m&lt;0x10000 then return nil end
  local size=readInteger(m); local mask=readInteger(m+8); local el=readQword(m+0x10)
  if not size or size&lt;=0 or size&gt;65536 or not el then return nil end
  local h=key+1
  local i=h &amp; mask
  for n=0,size-1 do
    local e=el+i*16
    local eh=readInteger(e+12)
    if not eh or eh==0 then return nil end
    if eh==h then local rv=readQword(e); if rv and rv~=0 then return rv end return nil end
    i=(i+1) &amp; mask
  end
  return nil
end
function NT.arr(rv) local a=rv and readQword(rv); return a and readQword(a+8) end
function NT.reg(name,addr) unregisterSymbol(name); if addr then registerSymbol(name,addr,true) end end
function NT.tick()
  local pid=getOpenedProcessID()
  if NT.pid~=pid then NT.pid=pid; NT.obj={}; NT.cache={}; NT.miss={} end
  local gc=NT.findInst("GameCont")
  local pl=NT.findInst("Player")
  NT.reg("NT_gamecont",gc); NT.reg("NT_player",pl)
  NT.reg("NT_rads",   gc and NT.var(gc,NT.KEYS.rads))
  NT.reg("NT_mutpts", gc and NT.var(gc,NT.KEYS.mutpts))
  NT.reg("NT_skills", gc and NT.arr(NT.var(gc,NT.KEYS.skills)))
  NT.reg("NT_wep",    pl and NT.var(pl,NT.KEYS.wep))
  NT.reg("NT_bwep",   pl and NT.var(pl,NT.KEYS.bwep))
  NT.reg("NT_ammo",   pl and NT.arr(NT.var(pl,NT.KEYS.ammo)))
  NT.reg("NT_mutcount", gc and NT.var(gc,NT.KEYS.mutcount))
  NT.reg("NT_hp",      pl and NT.var(pl,NT.KEYS.hp))
  NT.reg("NT_maxhp",   pl and NT.var(pl,NT.KEYS.maxhp))
  NT.reg("NT_strikes", pl and NT.var(pl,NT.KEYS.strikes))
  NT.reg("NT_hammer", pl and NT.var(pl,NT.KEYS.hammer))
end
NT.LISTTABLE=0x23AE2E0
function NT.findMutList()
  local gc=NT.findInst("GameCont"); if not gc then return nil end
  local sk=NT.arr(NT.var(gc,NT.KEYS.skills)); if not sk then return nil end
  local got={}; local ngot=0
  for j=1,29 do if readDouble(sk+j*16)~=0 then got[j]=true; ngot=ngot+1 end end
  local tbl=readQword(getAddress("nuclearthrone.exe")+NT.LISTTABLE)
  local n=readInteger(getAddress("nuclearthrone.exe")+NT.LISTTABLE-8) or 0
  local best=nil
  for i=0,math.min(n,20000)-1 do
    local l=readQword(tbl+i*8)
    if l and l&gt;0x10000 then
      local c=readInteger(l+8); local d=readQword(l+0x18)
      if c and d and c&gt;0 and c&lt;=40 and c==ngot then
        local okAll=true
        for k=0,c-1 do local v=readDouble(d+k*16); if readInteger(d+k*16+12)~=0 or not got[v] then okAll=false break end end
        if okAll then best=l end
      end
    end
  end
  return best
end
function NT.addMutation(id)
  local gc=NT.findInst("GameCont"); local pl=NT.findInst("Player")
  if not gc or not pl then return "no GameCont/Player" end
  local sk=NT.arr(NT.var(gc,NT.KEYS.skills))
  if readDouble(sk+id*16)~=0 then return "already have #"..id end
  local lst=NT.findMutList()
  if not lst then return "mutation list not found (needs at least 1 mutation picked normally)" end
  local c=readInteger(lst+8); local cap=readInteger(lst+0x10); local d=readQword(lst+0x18)
  if c&gt;=cap then return "list full" end
  writeDouble(d+c*16,id); writeInteger(d+c*16+8,0); writeInteger(d+c*16+12,0)
  writeInteger(lst+8,c+1)
  writeDouble(sk+id*16,1)
  local mc=NT.var(gc,NT.KEYS.mutcount); if mc then writeDouble(mc,readDouble(mc)+1) end
  if id==1 then
    local mh=NT.var(pl,NT.KEYS.maxhp); writeDouble(mh,readDouble(mh)+4)
    local h=NT.var(pl,NT.KEYS.hp); writeDouble(h,readDouble(h)+4)
  elseif id==10 then
    local am=NT.arr(NT.var(pl,NT.KEYS.amax))
    if readDouble(am+16)&lt;555 then writeDouble(am+16,555) end
    for j=2,5 do if readDouble(am+j*16)&lt;99 then writeDouble(am+j*16,99) end end
  end
  return "added #"..id
end
NT.KEYS.camx=0x1884E; NT.KEYS.camy=0x1884F
function NT.cursorWorld()
  local pl=NT.cache.Player; if not pl then return nil end
  local hw=findWindow(nil,"Nuclear Throne"); if not hw or hw==0 then return nil end
  if not NT.cbuf then NT.cbuf=createMemoryStream(); NT.cbuf.Size=64 end
  local mem=NT.cbuf.Memory
  executeCodeLocalEx(getAddress("user32.GetClientRect",true),hw,mem)
  local cw,ch=readIntegerLocal(mem+8),readIntegerLocal(mem+12)
  writeIntegerLocal(mem+16,0); writeIntegerLocal(mem+20,0)
  executeCodeLocalEx(getAddress("user32.ClientToScreen",true),hw,mem+16)
  local ox,oy=readIntegerLocal(mem+16),readIntegerLocal(mem+20)
  local sc=math.min(cw/320,ch/240)
  local bx,by=ox+(cw-320*sc)/2, oy+(ch-240*sc)/2
  local mx,my=getMousePos()
  local cx,cy=NT.var(pl,NT.KEYS.camx),NT.var(pl,NT.KEYS.camy)
  if not cx or not cy then return nil end
  return readDouble(cx)+(mx-bx)/sc, readDouble(cy)+(my-by)/sc
end
NT.MODENAMES={["Captain America mode"]=1,["Wonder Woman mode"]=1,["Bullseye mode"]=1,["Jean Grey mode"]=1,["Professor X mode"]=1,["Juggernaut mode"]=1}
function NT.isMode(d,r) if r then local sc=r.Script; return sc and sc:find('NT.solo(memrec)',1,true)~=nil end return NT.MODENAMES[d] or (d and d:find('^Barry Allen mode')) end
function NT.solo(me)
  local al=getAddressList()
  for i=0,al.Count-1 do local r=al[i]
    if r~=me and r.Active and r.Type==vtAutoAssembler and NT.isMode(r.Description,r) then r.Active=false end
  end
end
function NT.baseCaps()
  local sk=getAddressSafe("NT_skills")
  if sk and readDouble(sk+10*16)~=0 then return {555,99,99,99,99} end
  return {255,55,55,55,55}
end
NT.busy=false
NT.tick()
NT.timer=createTimer(nil,false)
NT.timer.Interval=250
NT.timer.OnTimer=function() if NT.busy then return end NT.busy=true pcall(NT.tick) NT.busy=false end
NT.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT and NT.timer then NT.timer.destroy(); NT.timer=nil end
for _,n in ipairs({"NT_gamecont","NT_player","NT_rads","NT_mutpts","NT_skills","NT_wep","NT_bwep","NT_ammo","NT_mutcount","NT_hp","NT_maxhp","NT_strikes","NT_hammer"}) do unregisterSymbol(n) end
{$asm}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>7</ID>
          <Description>"Rads (GameCont)"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_rads</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>8</ID>
          <Description>"Weapon primary (wep)"</Description>
          <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">121:MELEE  | BLACK SWORD
67:MELEE  | BLOOD HAMMER
46:MELEE  | CHICKEN SWORD
126:MELEE  | EGGPLANT
101:MELEE  | GOLDEN SCREWDRIVER
40:MELEE  | GOLDEN WRENCH
115:MELEE  | GUITAR
74:MELEE  | LIGHTNING HAMMER
27:MELEE  | SCREWDRIVER
13:MELEE  | SHOVEL
88:MELEE  | SLEDGEHAMMER
92:MELEE  | ULTRA SHOVEL
3:MELEE  | WRENCH
17:BULLET | ASSAULT RIFLE
117:BULLET | BOUNCER SHOTGUN
116:BULLET | BOUNCER SMG
108:BULLET | DOG SPIN ATTACK
83:BULLET | DOUBLE MINIGUN
120:BULLET | FROG PISTOL
103:BULLET | GOLDEN ASSAULT RIFLE
127:BULLET | GOLDEN FROG PISTOL
41:BULLET | GOLDEN MACHINEGUN
39:BULLET | GOLDEN REVOLVER
106:BULLET | HEAVY ASSAULT RIFLE
90:BULLET | HEAVY MACHINEGUN
89:BULLET | HEAVY REVOLVER
26:BULLET | HYPER RIFLE
110:BULLET | INCINERATOR
4:BULLET | MACHINEGUN
9:BULLET | MINIGUN
69:BULLET | POP GUN
71:BULLET | POP RIFLE
49:BULLET | QUADRUPLE MACHINEGUN
1:BULLET | REVOLVER
81:BULLET | ROGUE RIFLE
56:BULLET | RUSTY REVOLVER
32:BULLET | SENTRY GUN
65:BULLET | SMART GUN
16:BULLET | SMG
2:BULLET | TRIPLE MACHINEGUN
86:BULLET | ULTRA REVOLVER
23:SHELL  | ASSAULT SLUGGER
77:SHELL  | AUTO FLAME SHOTGUN
10:SHELL  | AUTO SHOTGUN
76:SHELL  | DOUBLE FLAME SHOTGUN
8:SHELL  | DOUBLE SHOTGUN
114:SHELL  | ERASER
38:SHELL  | FLAK CANNON
75:SHELL  | FLAME SHOTGUN
22:SHELL  | GATLING SLUGGER
42:SHELL  | GOLDEN SHOTGUN
99:SHELL  | GOLDEN SLUGGER
91:SHELL  | HEAVY SLUGGER
118:SHELL  | HYPER SLUGGER
61:SHELL  | SAWED-OFF SHOTGUN
5:SHELL  | SHOTGUN
21:SHELL  | SLUGGER
60:SHELL  | SUPER FLAK CANNON
25:SHELL  | SUPER SLUGGER
93:SHELL  | ULTRA SHOTGUN
33:SHELL  | WAVE GUN
11:BOLT   | AUTO CROSSBOW
6:BOLT   | CROSSBOW
18:BOLT   | DISC GUN
43:BOLT   | GOLDEN CROSSBOW
123:BOLT   | GOLDEN DISC GUN
100:BOLT   | GOLDEN SPLINTER GUN
105:BOLT   | HEAVY AUTO CROSSBOW
66:BOLT   | HEAVY CROSSBOW
112:BOLT   | SEEKER PISTOL
113:BOLT   | SEEKER SHOTGUN
30:BOLT   | SPLINTER GUN
62:BOLT   | SPLINTER PISTOL
12:BOLT   | SUPER CROSSBOW
104:BOLT   | SUPER DISC GUN
63:BOLT   | SUPER SPLINTER GUN
31:BOLT   | TOXIC BOW
94:BOLT   | ULTRA CROSSBOW
85:EXPLO  | AUTO GRENADE SHOTGUN
14:EXPLO  | BAZOOKA
107:EXPLO  | BLOOD CANNON
29:EXPLO  | BLOOD LAUNCHER
78:EXPLO  | CLUSTER LAUNCHER
109:EXPLO  | DOG MISSILE
51:EXPLO  | DRAGON
73:EXPLO  | FLAME CANNON
50:EXPLO  | FLAMETHROWER
52:EXPLO  | FLARE GUN
84:EXPLO  | GATLING BAZOOKA
102:EXPLO  | GOLDEN BAZOOKA
44:EXPLO  | GOLDEN GRENADE LAUNCHER
122:EXPLO  | GOLDEN NUKE LAUNCHER
7:EXPLO  | GRENADE LAUNCHER
80:EXPLO  | GRENADE RIFLE
79:EXPLO  | GRENADE SHOTGUN
124:EXPLO  | HEAVY GRENADE LAUNCHER
54:EXPLO  | HYPER LAUNCHER
37:EXPLO  | JACKHAMMER
47:EXPLO  | NUKE LAUNCHER
82:EXPLO  | PARTY GUN
15:EXPLO  | STICKY LAUNCHER
119:EXPLO  | SUPER BAZOOKA
72:EXPLO  | TOXIC LAUNCHER
95:EXPLO  | ULTRA GRENADE LAUNCHER
97:ENERGY | DEVASTATOR
36:ENERGY | ENERGY HAMMER
53:ENERGY | ENERGY SCREWDRIVER
24:ENERGY | ENERGY SWORD
45:ENERGY | GOLDEN LASER PISTOL
98:ENERGY | GOLDEN PLASMA GUN
125:ENERGY | GUN GUN
48:ENERGY | ION CANNON
55:ENERGY | LASER CANNON
28:ENERGY | LASER MINIGUN
19:ENERGY | LASER PISTOL
20:ENERGY | LASER RIFLE
68:ENERGY | LIGHTNING CANNON
57:ENERGY | LIGHTNING PISTOL
58:ENERGY | LIGHTNING RIFLE
59:ENERGY | LIGHTNING SHOTGUN
64:ENERGY | LIGHTNING SMG
35:ENERGY | PLASMA CANNON
34:ENERGY | PLASMA GUN
96:ENERGY | PLASMA MINIGUN
70:ENERGY | PLASMA RIFLE
111:ENERGY | SUPER PLASMA CANNON
87:ENERGY | ULTRA LASER PISTOL
</DropDownList>
          <VariableType>Double</VariableType>
          <Address>NT_wep</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"Weapon secondary (bwep)"</Description>
          <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">121:MELEE  | BLACK SWORD
67:MELEE  | BLOOD HAMMER
46:MELEE  | CHICKEN SWORD
126:MELEE  | EGGPLANT
101:MELEE  | GOLDEN SCREWDRIVER
40:MELEE  | GOLDEN WRENCH
115:MELEE  | GUITAR
74:MELEE  | LIGHTNING HAMMER
27:MELEE  | SCREWDRIVER
13:MELEE  | SHOVEL
88:MELEE  | SLEDGEHAMMER
92:MELEE  | ULTRA SHOVEL
3:MELEE  | WRENCH
17:BULLET | ASSAULT RIFLE
117:BULLET | BOUNCER SHOTGUN
116:BULLET | BOUNCER SMG
108:BULLET | DOG SPIN ATTACK
83:BULLET | DOUBLE MINIGUN
120:BULLET | FROG PISTOL
103:BULLET | GOLDEN ASSAULT RIFLE
127:BULLET | GOLDEN FROG PISTOL
41:BULLET | GOLDEN MACHINEGUN
39:BULLET | GOLDEN REVOLVER
106:BULLET | HEAVY ASSAULT RIFLE
90:BULLET | HEAVY MACHINEGUN
89:BULLET | HEAVY REVOLVER
26:BULLET | HYPER RIFLE
110:BULLET | INCINERATOR
4:BULLET | MACHINEGUN
9:BULLET | MINIGUN
69:BULLET | POP GUN
71:BULLET | POP RIFLE
49:BULLET | QUADRUPLE MACHINEGUN
1:BULLET | REVOLVER
81:BULLET | ROGUE RIFLE
56:BULLET | RUSTY REVOLVER
32:BULLET | SENTRY GUN
65:BULLET | SMART GUN
16:BULLET | SMG
2:BULLET | TRIPLE MACHINEGUN
86:BULLET | ULTRA REVOLVER
23:SHELL  | ASSAULT SLUGGER
77:SHELL  | AUTO FLAME SHOTGUN
10:SHELL  | AUTO SHOTGUN
76:SHELL  | DOUBLE FLAME SHOTGUN
8:SHELL  | DOUBLE SHOTGUN
114:SHELL  | ERASER
38:SHELL  | FLAK CANNON
75:SHELL  | FLAME SHOTGUN
22:SHELL  | GATLING SLUGGER
42:SHELL  | GOLDEN SHOTGUN
99:SHELL  | GOLDEN SLUGGER
91:SHELL  | HEAVY SLUGGER
118:SHELL  | HYPER SLUGGER
61:SHELL  | SAWED-OFF SHOTGUN
5:SHELL  | SHOTGUN
21:SHELL  | SLUGGER
60:SHELL  | SUPER FLAK CANNON
25:SHELL  | SUPER SLUGGER
93:SHELL  | ULTRA SHOTGUN
33:SHELL  | WAVE GUN
11:BOLT   | AUTO CROSSBOW
6:BOLT   | CROSSBOW
18:BOLT   | DISC GUN
43:BOLT   | GOLDEN CROSSBOW
123:BOLT   | GOLDEN DISC GUN
100:BOLT   | GOLDEN SPLINTER GUN
105:BOLT   | HEAVY AUTO CROSSBOW
66:BOLT   | HEAVY CROSSBOW
112:BOLT   | SEEKER PISTOL
113:BOLT   | SEEKER SHOTGUN
30:BOLT   | SPLINTER GUN
62:BOLT   | SPLINTER PISTOL
12:BOLT   | SUPER CROSSBOW
104:BOLT   | SUPER DISC GUN
63:BOLT   | SUPER SPLINTER GUN
31:BOLT   | TOXIC BOW
94:BOLT   | ULTRA CROSSBOW
85:EXPLO  | AUTO GRENADE SHOTGUN
14:EXPLO  | BAZOOKA
107:EXPLO  | BLOOD CANNON
29:EXPLO  | BLOOD LAUNCHER
78:EXPLO  | CLUSTER LAUNCHER
109:EXPLO  | DOG MISSILE
51:EXPLO  | DRAGON
73:EXPLO  | FLAME CANNON
50:EXPLO  | FLAMETHROWER
52:EXPLO  | FLARE GUN
84:EXPLO  | GATLING BAZOOKA
102:EXPLO  | GOLDEN BAZOOKA
44:EXPLO  | GOLDEN GRENADE LAUNCHER
122:EXPLO  | GOLDEN NUKE LAUNCHER
7:EXPLO  | GRENADE LAUNCHER
80:EXPLO  | GRENADE RIFLE
79:EXPLO  | GRENADE SHOTGUN
124:EXPLO  | HEAVY GRENADE LAUNCHER
54:EXPLO  | HYPER LAUNCHER
37:EXPLO  | JACKHAMMER
47:EXPLO  | NUKE LAUNCHER
82:EXPLO  | PARTY GUN
15:EXPLO  | STICKY LAUNCHER
119:EXPLO  | SUPER BAZOOKA
72:EXPLO  | TOXIC LAUNCHER
95:EXPLO  | ULTRA GRENADE LAUNCHER
97:ENERGY | DEVASTATOR
36:ENERGY | ENERGY HAMMER
53:ENERGY | ENERGY SCREWDRIVER
24:ENERGY | ENERGY SWORD
45:ENERGY | GOLDEN LASER PISTOL
98:ENERGY | GOLDEN PLASMA GUN
125:ENERGY | GUN GUN
48:ENERGY | ION CANNON
55:ENERGY | LASER CANNON
28:ENERGY | LASER MINIGUN
19:ENERGY | LASER PISTOL
20:ENERGY | LASER RIFLE
68:ENERGY | LIGHTNING CANNON
57:ENERGY | LIGHTNING PISTOL
58:ENERGY | LIGHTNING RIFLE
59:ENERGY | LIGHTNING SHOTGUN
64:ENERGY | LIGHTNING SMG
35:ENERGY | PLASMA CANNON
34:ENERGY | PLASMA GUN
96:ENERGY | PLASMA MINIGUN
70:ENERGY | PLASMA RIFLE
111:ENERGY | SUPER PLASMA CANNON
87:ENERGY | ULTRA LASER PISTOL
</DropDownList>
          <VariableType>Double</VariableType>
          <Address>NT_bwep</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>10</ID>
          <Description>"ammo[0] melee/slot0"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_ammo+0</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>11</ID>
          <Description>"ammo[1] bullets"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_ammo+10</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>12</ID>
          <Description>"ammo[2] shells"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_ammo+20</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>13</ID>
          <Description>"ammo[3] bolts"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_ammo+30</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>14</ID>
          <Description>"ammo[4] explosives"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_ammo+40</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>15</ID>
          <Description>"ammo[5] energy"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_ammo+50</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"HP (current)"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_hp</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>17</ID>
          <Description>"Max HP"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_maxhp</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>18</ID>
          <Description>"Portal strikes (Rogue)"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_strikes</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"Mutation points (unspent)"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_mutpts</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>20</ID>
          <Description>"Mutation count"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_mutcount</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>21</ID>
          <Description>"Add mutation (enable -&gt; pick from list)"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local names={"Rhino Skin","Extra Feet","Plutonium Hunger","Rabbit Paw","Throne Butt","Lucky Shot","Bloodlust","Gamma Guts","Second Stomach","Back Muscle","Scarier Face","Euphoria","Long Arms","Boiling Veins","Shotgun Shoulders","Recycle Gland","Laser Brain","Last Wish","Eagle Eyes","Impact Wrists","Bolt Marrow","Stress","Trigger Fingers","Sharp Teeth","Patience","Hammerhead","Strong Spirit","Open Mind","Heavy Heart"}
pcall(NT.tick)
local sk=getAddressSafe("NT_skills")
local sl=createStringlist()
for j=1,29 do
  local owned=sk and readDouble(sk+j*16)~=0
  sl.add(string.format("%2d  %s%s",j,names[j],owned and "   (owned)" or ""))
end
local idx=showSelectionList("Add mutation","Pick a mutation:",sl)
sl.destroy()
if idx and idx&gt;=0 then showMessage(NT.addMutation(idx+1)) end
local me=memrec
createTimer(200,function() if me then me.Active=false end end)
{$asm}
[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>22</ID>
          <Description>"Mutation flags (flag only; use 'Add mutation' for HUD+effects)"</Description>
          <Options moHideChildren="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>23</ID>
              <Description>"#1 Rhino Skin"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+10</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>24</ID>
              <Description>"#2 Extra Feet"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+20</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>25</ID>
              <Description>"#3 Plutonium Hunger"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+30</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>26</ID>
              <Description>"#4 Rabbit Paw"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+40</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>27</ID>
              <Description>"#5 Throne Butt"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+50</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>28</ID>
              <Description>"#6 Lucky Shot"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+60</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>29</ID>
              <Description>"#7 Bloodlust"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+70</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>30</ID>
              <Description>"#8 Gamma Guts"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+80</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>31</ID>
              <Description>"#9 Second Stomach"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+90</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>32</ID>
              <Description>"#10 Back Muscle"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+A0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>33</ID>
              <Description>"#11 Scarier Face"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+B0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>34</ID>
              <Description>"#12 Euphoria"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+C0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>35</ID>
              <Description>"#13 Long Arms"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+D0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>36</ID>
              <Description>"#14 Boiling Veins"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+E0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>37</ID>
              <Description>"#15 Shotgun Shoulders"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+F0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>38</ID>
              <Description>"#16 Recycle Gland"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+100</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>39</ID>
              <Description>"#17 Laser Brain"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+110</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>40</ID>
              <Description>"#18 Last Wish"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+120</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>41</ID>
              <Description>"#19 Eagle Eyes"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+130</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>42</ID>
              <Description>"#20 Impact Wrists"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+140</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>43</ID>
              <Description>"#21 Bolt Marrow"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+150</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>44</ID>
              <Description>"#22 Stress"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+160</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>45</ID>
              <Description>"#23 Trigger Fingers"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+170</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>46</ID>
              <Description>"#24 Sharp Teeth"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+180</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>47</ID>
              <Description>"#25 Patience"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+190</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>48</ID>
              <Description>"#26 Hammerhead"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+1A0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>49</ID>
              <Description>"#27 Strong Spirit"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+1B0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>50</ID>
              <Description>"#28 Open Mind"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+1C0</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>51</ID>
              <Description>"#29 Heavy Heart"</Description>
              <VariableType>Double</VariableType>
              <Address>NT_skills+1D0</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>52</ID>
          <Description>"Hammerhead walls remaining"</Description>
          <VariableType>Double</VariableType>
          <Address>NT_hammer</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>54</ID>
          <Description>"Radar window"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if NT.radar then pcall(function() NT.radar.timer.destroy() NT.radar.form.destroy() end) end
local R={size=220, range=495, zoomRanges={495,250}, zi=1, names={}}
NT.radar=R
local f=createForm(false)
f.Caption="NT radar"; f.BorderStyle=bsNone; f.Width=R.size; f.Height=R.size; f.FormStyle=fsSystemStayOnTop
pcall(function() f.AlphaBlend=true; f.AlphaBlendValue=200 end)
f.Left=40; f.Top=40
local img=createImage(f); img.Align=alClient
img.Picture.Bitmap.Width=R.size; img.Picture.Bitmap.Height=R.size
R.form=f; R.img=img
img.OnMouseDown=function(sender,button,x,y)
  if button==mbLeft then local mx,my=getMousePos(); R.drag={mx,my,f.Left,f.Top}
  elseif button==mbRight then R.zi=(R.zi % #R.zoomRanges)+1; R.range=R.zoomRanges[R.zi] end
end
img.OnMouseMove=function() if R.drag then local mx,my=getMousePos(); f.Left=R.drag[3]+mx-R.drag[1]; f.Top=R.drag[4]+my-R.drag[2] end end
img.OnMouseUp=function() R.drag=nil end
R.SWP=getAddress("user32.SetWindowPos",true)
R.SWL=getAddress("user32.SetWindowLongPtrA",true)
R.GWL=getAddress("user32.GetWindowLongPtrA",true)
function R.detach() pcall(function()
  executeCodeLocalEx(R.SWL, f.Handle, -8, 0)
  local ex=executeCodeLocalEx(R.GWL, f.Handle, -20)
  executeCodeLocalEx(R.SWL, f.Handle, -20, (ex | 0x80 | 0x8))
end) end
function R.topmost() pcall(function() executeCodeLocalEx(R.SWP, f.Handle, -1, 0, 0, 0, 0, 0x13) end) end
R.detach()
R.ticks=0
local FLOOR={Floor=1,FloorExplo=1,SnowFloor=1}
local PROPS={Hydrant=1,StreetLight=1,Car=1,Barrel=1,ToxicBarrel=1,GoldBarrel=1,Cactus=1,BigSkull=1,Tires=1,MoneyPile=1,Bush=1}
local function nameOf(inst)
  local o=readQword(inst+0x90); if not o or o&lt;0x10000 then return nil end
  local n=R.names[o]
  if n==nil then local s=readQword(o); n=(s and s&gt;0x10000) and (readString(s,32) or false) or false; R.names[o]=n end
  return n or nil
end
local function draw()
  pcall(NT.tick)
  local pl=NT.cache.Player
  local bmp=img.Picture.Bitmap; local cv=bmp.Canvas
  local S=R.size; local scale=S/(2*R.range)
  cv.Brush.Color=0x101010; cv.fillRect(0,0,S,S)
  if not pl then cv.Font.Color=0xFFFFFF; cv.textOut(8,8,"no Player"); img.repaint(); return end
  local px,py=readFloat(pl+0xF4),readFloat(pl+0xF8)
  local h=pl; local k=0
  while k&lt;20000 do local p=readQword(h+0x1A8); if not p or p==0 then break end h=p k=k+1 end
  local walls,floors,things={}, {}, {}
  local c=h; local guard=0
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    local x,y=readFloat(c+0xF4),readFloat(c+0xF8)
    if x and math.abs(x-px)&lt;R.range+16 and math.abs(y-py)&lt;R.range+16 then
      local n=nameOf(c)
      if n then
        local sx,sy=(x-px)*scale+S/2,(y-py)*scale+S/2
        if n=="Wall" then walls[#walls+1]={sx,sy}
        elseif FLOOR[n] then floors[#floors+1]={sx,sy}
        elseif n~="Player" then
          local col
          if n=="ChestOpen" then col=nil
          elseif n=="Portal" then col=-2
          elseif n:find("Chest") then col=0xFF6020
          elseif n:find("Wep") then col=0x40FF40
          elseif n:find("Ammo") then col=0x00E0FF
          elseif n:find("HP") or n:find("Health") then col=-1
          elseif n:find("Pickup") then col=0x40FF40
          elseif PROPS[n] then col=0x907060
          else local rv=NT.var(c,0x19822); if rv and readInteger(rv+12)==0 and readDouble(rv)&gt;0 then col=0x3030FF end end
          if col then things[#things+1]={sx,sy,col,n} end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  local w=16*scale
  cv.Brush.Color=0x303030; for _,p in ipairs(floors) do cv.fillRect(p[1],p[2],p[1]+w,p[2]+w) end
  cv.Brush.Color=0x8A8A8A; for _,p in ipairs(walls) do cv.fillRect(p[1],p[2],p[1]+w,p[2]+w) end
  for _,t in ipairs(things) do
    if t[3]==-2 then
      cv.Brush.Color=0xD040A0; cv.Pen.Color=0xD040A0; cv.ellipse(t[1]-7,t[2]-7,t[1]+8,t[2]+8)
    elseif t[3]==-1 then
      local x,y=math.floor(t[1]),math.floor(t[2])
      cv.Brush.Color=0xFFFFFF; cv.fillRect(x-4,y-4,x+5,y+5)
      cv.Brush.Color=0x2020E0; cv.fillRect(x-1,y-3,x+2,y+4); cv.fillRect(x-3,y-1,x+4,y+2)
    else cv.Brush.Color=t[3]; cv.Pen.Color=t[3]; cv.ellipse(t[1]-3,t[2]-3,t[1]+4,t[2]+4) end
  end
  cv.Brush.Color=0xFFFFFF; cv.Pen.Color=0xFFFFFF; cv.ellipse(S/2-4,S/2-4,S/2+5,S/2+5)
  cv.Pen.Color=0x505050; cv.line(0,0,S-1,0); cv.line(S-1,0,S-1,S-1); cv.line(S-1,S-1,0,S-1); cv.line(0,S-1,0,0)
  img.repaint()
end
R.draw=draw
R.timer=createTimer(nil,false); R.timer.Interval=150
R.timer.OnTimer=function() R.ticks=R.ticks+1; if R.ticks % 13==1 then R.topmost() end; local ok,e=pcall(draw); if not ok then R.err=e end end
R.timer.Enabled=true
f.show()
draw()
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.radar then pcall(function() NT.radar.timer.destroy() end) pcall(function() NT.radar.form.destroy() end) NT.radar=nil end
{$asm}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>55</ID>
      <Description>"Fire rate 1-9 (keys 1..9 in game; 1 = normal rules)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if NT.fire and NT.fire.stop then NT.fire.stop() end
local F={level=1}
NT.fire=F
-- level: reload multiplier after each shot, ammo refill interval (ms)
F.MULT  ={1.00,0.75,0.60,0.48,0.38,0.29,0.21,0.14,0.08}
F.REFILL={0,   3000,3000,2500,2000,1500,1200,1000,700}
F.RELOAD,F.AMMO,F.AMAX=0x19B52,0x188E6,0x19F2D
-- weapon "automatic" table (same one Barry Allen uses); found once, originals kept in NT
if not NT.autoTables then
  local z="00 00 00 00 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 "
  local o="00 00 00 00 00 00 F0 3F ?? ?? ?? ?? 00 00 00 00 "
  local res=AOBScan(z..z..z..z..o..o.."00 00 00 00 00 00 F0 3F","+W-C",fsmAligned,"8")
  local T={}
  if res then
    for i=0,res.Count-1 do
      local base=tonumber(res[i],16)-5*16; local ok=true; local orig={}
      for j=0,127 do local k=readInteger(base+j*16+12); local v=readDouble(base+j*16); if k~=0 or (v~=0 and v~=1) then ok=false break end orig[j]=v end
      if ok then T[#T+1]={base=base,orig=orig} end
    end
    res.destroy()
  end
  if #T&gt;0 then NT.autoTables=T end
end
function F.setAuto(on)
  for _,t in ipairs(NT.autoTables or {}) do for j=1,127 do writeDouble(t.base+j*16, on and 1 or t.orig[j]) end end
end
function F.setLevel(n)
  if getForegroundProcess()~=getOpenedProcessID() then return end
  F.level=n
  F.setAuto(n&gt;1)
  F.nextRefill=getTickCount()+F.REFILL[n]
  pcall(speak,"fire "..n,false)
end
function F.tick()
  local pl=NT.cache.Player; if not pl then F.lastR=nil return end
  if F.pl~=pl then F.pl=pl; F.lastR=nil end
  local m=F.MULT[F.level]
  if m&lt;1 then
    local rv=NT.var(pl,F.RELOAD)
    if rv then
      local cur=readDouble(rv)
      if F.lastR and cur&gt;F.lastR+0.01 then cur=cur*m; writeDouble(rv,cur) end
      F.lastR=cur
    end
  end
  local iv=F.REFILL[F.level]
  if iv&gt;0 and getTickCount()&gt;=(F.nextRefill or 0) then
    F.nextRefill=getTickCount()+iv
    local am=NT.arr(NT.var(pl,F.AMMO)); local mx=NT.arr(NT.var(pl,F.AMAX))
    if am and mx then for j=1,5 do local cap=readDouble(mx+j*16); if cap and cap&gt;0 and readDouble(am+j*16)&lt;cap then writeDouble(am+j*16,cap) end end end
  end
end
F.keys={}
for n=1,9 do F.keys[n]=createHotkey(function() F.setLevel(n) end, VK_0+n) end
F.timer=createTimer(nil,false); F.timer.Interval=10
F.timer.OnTimer=function() local ok,e=pcall(F.tick); if not ok then F.err=e end end
F.timer.Enabled=true
function F.stop()
  if F.timer then F.timer.destroy(); F.timer=nil end
  for _,k in pairs(F.keys or {}) do pcall(function() k.destroy() end) end
  F.keys={}
  F.setAuto(false)
end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.fire and NT.fire.stop then NT.fire.stop() end
NT.fire=nil
{$asm}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>57</ID>
      <Description>"Pure damage gun (binds to primary weapon when switched on)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
if NT.pd and NT.pd.timer then NT.pd.timer.destroy() end
local P={ignoreWalls=true,shells=0,shellSeen={},n=0,hits=0,kills=0,dmgMult=3,range=400,radius=10,seen={}}
NT.pd=P
local TEAM,DMG,HP,WEP=0x19EBC,0x18C29,0x19822,0x1A027
local pl0=NT.cache.Player
P.wep=pl0 and math.floor(readDouble(NT.var(pl0,WEP)))
local NC={}
local function nameOf(c) local o=readQword(c+0x90); if not o or o&lt;0x10000 then return nil end local n=NC[o]; if n==nil then local sp=readQword(o); n=(sp and sp&gt;0x10000) and (readString(sp,32) or false) or false; NC[o]=n end return n or nil end
P.tick=function()
  local pl=NT.cache.Player; if not pl then return end
  if not P.wep then local wv0=NT.var(pl,WEP); if not wv0 then return end P.wep=math.floor(readDouble(wv0)) end
  local wv=NT.var(pl,WEP); if not wv or math.floor(readDouble(wv))~=P.wep then return end
  local px,py=readFloat(pl+0xF4),readFloat(pl+0xF8)
  local h=pl; local k=0
  while k&lt;20000 do local q=readQword(h+0x1A8); if not q or q==0 then break end h=q k=k+1 end
  local shots,enemies,walls={}, {}, P.walls
  local wallN=0; local newWalls=(not walls) or P.wallTick==nil or getTickCount()-P.wallTick&gt;2000
  if newWalls then walls={} end
  local c=h; local n=0
  while c and c~=0 and n&lt;40000 do n=n+1
    local nm=nameOf(c)
    if nm=="Wall" then if newWalls then walls[math.floor(readFloat(c+0xF4)/16)..","..math.floor(readFloat(c+0xF8)/16)]=true end
    elseif nm=="Shell" then
      local sid=readInteger(c+0xBC)
      if not P.shellSeen[sid] then
        P.shellSeen[sid]=true
        if P.armed then
          local dx,dy=readFloat(c+0xF4)-px,readFloat(c+0xF8)-py
          if dx*dx+dy*dy&lt;40*40 then
            writeFloat(c+0xE0,0); writeFloat(c+0xE4,0)
            writeFloat(c+0x110,0); writeFloat(c+0x120,0); writeFloat(c+0x124,0)
            writeFloat(c+0xF4,-50000); writeFloat(c+0xF8,-50000); P.shells=P.shells+1
          end
        end
      end
    elseif c~=pl then
      local hv=NT.var(c,HP)
      local tv=NT.var(c,TEAM)
      if hv then
        if tv and readDouble(tv)~=2 and readDouble(hv)&gt;0 then enemies[#enemies+1]={c=c,hv=hv,x=readFloat(c+0xF4),y=readFloat(c+0xF8)} end
      elseif tv and readDouble(tv)==2 and NT.var(c,DMG) then
        local id=readInteger(c+0xBC)
        if not P.seen[id] then
          local x,y=readFloat(c+0xF4),readFloat(c+0xF8)
          local dx,dy=x-px,y-py
          if dx*dx+dy*dy&lt;48*48 then shots[#shots+1]={c=c,x=x,y=y,dir=readFloat(c+0x10C),dmg=readDouble(NT.var(c,DMG))} end
          P.seen[id]=getTickCount()
        end
      end
    end
    c=readQword(c+0x1A0) end
  if newWalls then P.walls=walls; P.wallTick=getTickCount() end
  P.armed=true
  local R2=P.radius*P.radius
  for _,s in ipairs(shots) do
    -- park the projectile: no size, no motion, far away, no damage
    local c=s.c
    writeFloat(c+0xE0,0); writeFloat(c+0xE4,0)
    writeFloat(c+0x110,0); writeFloat(c+0x120,0); writeFloat(c+0x124,0)
    local dv=NT.var(c,DMG); if dv then writeDouble(dv,0) end
    writeFloat(c+0xF4,-50000); writeFloat(c+0xF8,-50000)
    P.n=P.n+1
    -- trace
    local a=math.rad(s.dir); local ux,uy=math.cos(a),-math.sin(a)
    local hit=nil
    for d=0,P.range,4 do
      local x,y=s.x+ux*d,s.y+uy*d
      if not P.ignoreWalls and P.walls[math.floor(x/16)..","..math.floor(y/16)] then break end
      for _,e in ipairs(enemies) do local ex,ey=e.x-x,e.y-y if ex*ex+ey*ey&lt;R2 then hit=e break end end
      if hit then break end
    end
    if hit then
      local hp=readDouble(hit.hv)-math.max(s.dmg,1)*P.dmgMult
      writeDouble(hit.hv,hp); P.hits=P.hits+1
      if hp&lt;=0 then P.kills=P.kills+1 end
    end
  end
  local now=getTickCount()
  for id,t in pairs(P.seen) do if now-t&gt;5000 then P.seen[id]=nil end end
end
P.timer=createTimer(nil,false); P.timer.Interval=10
P.timer.OnTimer=function() local ok,e=pcall(P.tick); if not ok then P.err=e end end
P.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.pd and NT.pd.timer then NT.pd.timer.destroy(); NT.pd.timer=nil end
{$asm}
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
