<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>6</ID>
      <Description>"MMMM 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.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 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 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 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>103</ID>
          <Description>"Captain America mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
if NT.deflect and NT.deflect.timer then NT.deflect.timer.destroy() end
local D={radius=48, count=0, worst=0}
NT.deflect=D
local TEAM,DMG,HP,CREATOR=0x19EBC,0x18C29,0x19822,0x18BB9
local NC={}
local function nameOf(inst) local o=readQword(inst+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
local function tick()
  local t0=os.clock()
  local pl=NT.cache.Player
  if not pl or readQword(pl+0x90)==nil then return end
  local px,py=readFloat(pl+0xF4),readFloat(pl+0xF8)
  -- NO_LONG_ARMS: while mutation points are unspent, swap any Long Arms card (13) for another unowned mutation
  D.mt=(D.mt or 0)+1
  if D.mt%60==0 then pcall(function()
    local mp=getAddressSafe("NT_mutpts"); if not mp or readDouble(mp)&lt;=0 then D.cardsDone={} return end
    D.cardsDone=D.cardsDone or {}
    local obj=NT.findObj("SkillIcon"); if not obj then return end
    local cards={}
    for _,ref in ipairs(NT.ptrsTo(obj)) do local inst=ref-0x90; if NT.objName(inst)=="SkillIcon" then local v=NT.var(inst,0x19DC3); if v then cards[#cards+1]={inst,v} end end end
    local shown={} for _,cd in ipairs(cards) do shown[math.floor(readDouble(cd[2]))]=true end
    local sk=getAddressSafe("NT_skills")
    for _,cd in ipairs(cards) do
      local inst=cd[1]
      if readDouble(cd[2])==13 and not D.cardsDone[inst] then
        local pool={}
        for j=1,29 do if j~=13 and not shown[j] and not (sk and readDouble(sk+j*16)~=0) then pool[#pool+1]=j end end
        if #pool&gt;0 then local pick=pool[math.random(#pool)]; writeDouble(cd[2],pick); writeFloat(inst+0xD4,pick); shown[pick]=true; D.swapped=(D.swapped or 0)+1 end
        D.cardsDone[inst]=true
      end
    end
  end) end
  -- NEO_GATE: only while primary weapon is melee or its ammo type is empty
  D.cost=D.cost or {[0]=1,1,3,0,1,1,1,1,2,1,1,1,5,0,1,1,1,3,1,1,1,1,1,3,2,5,5,0,1,1,1,1,24,2,2,8,5,1,2,1,0,1,1,1,1,1,0,3,6,4,1,1,1,1,2,3,1,1,1,2,8,2,1,2,1,1,2,0,8,1,2,2,1,4,0,1,2,1,2,1,1,2,0,2,1,1,2,3,0,2,2,2,0,3,1,1,2,8,2,1,1,0,1,3,5,2,6,4,15,1,3,24,1,3,2,0,1,6,1,5,2,0,3,1,2,40,0,2}
  D.wt=D.wt or {[121]=0,[67]=0,[46]=0,[126]=0,[101]=0,[40]=0,[115]=0,[74]=0,[27]=0,[13]=0,[88]=0,[92]=0,[3]=0,[17]=1,[117]=1,[116]=1,[108]=1,[83]=1,[120]=1,[103]=1,[127]=1,[41]=1,[39]=1,[106]=1,[90]=1,[89]=1,[26]=1,[110]=1,[4]=1,[9]=1,[69]=1,[71]=1,[49]=1,[1]=1,[81]=1,[56]=1,[32]=1,[65]=1,[16]=1,[2]=1,[86]=1,[23]=2,[77]=2,[10]=2,[76]=2,[8]=2,[114]=2,[38]=2,[75]=2,[22]=2,[42]=2,[99]=2,[91]=2,[118]=2,[61]=2,[5]=2,[21]=2,[60]=2,[25]=2,[93]=2,[33]=2,[11]=3,[6]=3,[18]=3,[43]=3,[123]=3,[100]=3,[105]=3,[66]=3,[112]=3,[113]=3,[30]=3,[62]=3,[12]=3,[104]=3,[63]=3,[31]=3,[94]=3,[85]=4,[14]=4,[107]=4,[29]=4,[78]=4,[109]=4,[51]=4,[73]=4,[50]=4,[52]=4,[84]=4,[102]=4,[44]=4,[122]=4,[7]=4,[80]=4,[79]=4,[124]=4,[54]=4,[37]=4,[47]=4,[82]=4,[15]=4,[119]=4,[72]=4,[95]=4,[97]=5,[36]=5,[53]=5,[24]=5,[45]=5,[98]=5,[125]=5,[48]=5,[55]=5,[28]=5,[19]=5,[20]=5,[68]=5,[57]=5,[58]=5,[59]=5,[64]=5,[35]=5,[34]=5,[96]=5,[70]=5,[111]=5,[87]=5}
  if not D.wt then
    D.wt={}
    local wr=getAddressList().getMemoryRecordByID(8)
    for line in wr.DropDownList.Text:gmatch("[^\r\n]+") do
      local id,ty=line:match("^(%d+):(%a+)")
      if id then D.wt[tonumber(id)]=({MELEE=0,BULLET=1,SHELL=2,BOLT=3,EXPLO=4,ENERGY=5})[ty] end
    end
  end
  do
    local wv=NT.var(pl,0x1A027); local am=NT.arr(NT.var(pl,0x188E6))
    local ty=wv and D.wt[math.floor(readDouble(wv))]
    local armed=true
    if ty==0 then armed=false
    elseif ty and am and readDouble(am+ty*16) &lt; (D.cost[math.floor(readDouble(wv))] or 1) then armed=false end
    D.armed=not armed
    if armed then return end
  end
  local myid=readInteger(pl+0xBC)
  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 R2=D.radius*D.radius
  local c=h; local guard=0
  local ids,caught={}, {}
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    ids[readInteger(c+0xBC)]=c
    local nmAll=nameOf(c)
    if nmAll and nmAll:find("Missile") then local tv=NT.var(c,TEAM); if tv and readDouble(tv)==2 then caught[#caught+1]=c end end
    local x,y=readFloat(c+0xF4),readFloat(c+0xF8)
    if x then
      local dx,dy=x-px,y-py
      if dx*dx+dy*dy&lt;R2 and c~=pl then
        local sp=readFloat(c+0x110)
        if sp and sp&gt;0.05 then
          local trv=NT.var(c,TEAM); local drv=NT.var(c,DMG)
          local nm=NT.objName(c) or ""
          if trv and nm:find("Missile") and readDouble(trv)~=2 then
            local crv=NT.var(c,CREATOR); local tgt=NT.var(c,0x19EB5)
            if crv and tgt and readInteger(crv+12)==15 then
              local cid=readQword(crv)&amp;0xFFFFFFFF; local q=readQword(tgt); writeQword(tgt,(q &amp; 0xFFFFFFFF00000000) | cid)
            end
            writeFloat(c+0x110, sp*0.5); writeFloat(c+0x10C,(readFloat(c+0x10C)+180)%360)
            writeFloat(c+0x120,-readFloat(c+0x120)*0.5); writeFloat(c+0x124,-readFloat(c+0x124)*0.5)
            writeDouble(trv,2); D.count=D.count+1; D.missiles=(D.missiles or 0)+1
          elseif trv and drv and not NT.var(c,HP) then
            local team=readDouble(trv)
            if team~=2 then
              writeFloat(c+0x110, sp*0.5)
              writeFloat(c+0x10C, (readFloat(c+0x10C)+180)%360)
              writeFloat(c+0x120, -readFloat(c+0x120)*0.5)
              writeFloat(c+0x124, -readFloat(c+0x124)*0.5)
              writeDouble(trv, 2)
              local crv=NT.var(c,CREATOR)
              if crv and readInteger(crv+12)==15 then
                local q=readQword(crv); writeQword(crv,(q &amp; 0xFFFFFFFF00000000) | myid)
              end
              D.count=D.count+1
            end
          end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  for _,m in ipairs(caught) do
    local crv=NT.var(m,CREATOR)
    if crv and readInteger(crv+12)==15 then
      local tg=ids[readQword(crv)&amp;0xFFFFFFFF]
      if tg then
        local dx,dy=readFloat(tg+0xF4)-readFloat(m+0xF4), readFloat(tg+0xF8)-readFloat(m+0xF8)
        local d=math.sqrt(dx*dx+dy*dy)
        if d&gt;0.5 then
          local sp=readFloat(m+0x110); if sp&lt;0.4 then sp=0.4 end
          writeFloat(m+0x120,dx/d*sp); writeFloat(m+0x124,dy/d*sp)
          writeFloat(m+0x10C,(math.deg(math.atan(-dy,dx)))%360)
          D.steered=(D.steered or 0)+1
        end
      end
    end
  end
  local dt=(os.clock()-t0)*1000; if dt&gt;D.worst then D.worst=dt end; D.last=dt
end
D.tick=tick
D.timer=createTimer(nil,false); D.timer.Interval=15
D.timer.OnTimer=function() local ok,e=pcall(tick); if not ok then D.err=e end end
D.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.deflect and NT.deflect.timer then NT.deflect.timer.destroy() NT.deflect.timer=nil end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>111</ID>
              <Description>"Captain America: when he's down to his fists or out of ammo for his gun, an invisible shield throws incoming fire back at whoever sent it. Some mutations are simply beneath him."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>104</ID>
          <Description>"Magneto mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
NT.modes=NT.modes or {}
if NT.modes.exodus and NT.modes.exodus.timer then NT.modes.exodus.timer.destroy() end
local M={count=0, held={}, radius=15, slow=0.25}; NT.modes.exodus=M
local TEAM,DMG,HP=0x19EBC,0x18C29,0x19822
local NC={}
local SKIP={Wall=1,Floor=1,FloorExplo=1,SnowFloor=1,TopSmall=1,TopDecal=1,SnowFlake=1,Bones=1,Detail=1,Scorch=1,ScorchTop=1,Corpse=1,Dust=1,Smoke=1,Debris=1,Rad=1,BigRad=1,ChestOpen=1}
local function nameOf(inst) local o=readQword(inst+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
local function aim(c,tx,ty,sp)
  local dx,dy=tx-readFloat(c+0xF4), ty-readFloat(c+0xF8); local d=math.sqrt(dx*dx+dy*dy); if d&lt;0.5 then return end
  writeFloat(c+0x110,sp); writeFloat(c+0x120,dx/d*sp); writeFloat(c+0x124,dy/d*sp)
  local dir=(math.deg(math.atan(-dy,dx)))%360
  writeFloat(c+0x10C,dir)
  if nameOf(c)=="Disc" then local dv=NT.var(c,0x19E48); if dv then writeDouble(dv,dir) end end
end
local function tick()
  local t0=os.clock()
  local pl=NT.cache.Player; if not pl then return end
  local cx,cy=NT.cursorWorld(); if not cx then return end
  local myid=readInteger(pl+0xBC)
  -- steer already-held shots; drop ones that no longer exist
  for c,info in pairs(M.held) do
    if readQword(c+0x90)~=info.obj or readInteger(c+0xBC)~=info.id then M.held[c]=nil
    else aim(c,cx,cy,info.sp) end
  end
  -- catch new own shots near cursor
  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 myid=readInteger(pl+0xBC)
  local R2=M.radius*M.radius
  local c=h; local guard=0
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    if c~=pl and not M.held[c] then
      local n=nameOf(c)
      if n=="Disc" then local tv=NT.var(c,TEAM); if tv and readDouble(tv)==-1 then local crv=NT.var(c,0x18BB9); if crv and readInteger(crv+12)==15 and (readQword(crv)&amp;0xFFFFFFFF)==myid then writeDouble(tv,2) end end end
      if not (n and SKIP[n]) then
        local x,y=readFloat(c+0xF4),readFloat(c+0xF8)
        if x then
          local dx,dy=x-cx,y-cy
          if dx*dx+dy*dy&lt;R2 then
            local sp=readFloat(c+0x110)
            if sp and sp&gt;0.05 then
              local trv=NT.var(c,TEAM)
              if trv and readDouble(trv)==-1 then local crv=NT.var(c,0x18BB9); if crv and readInteger(crv+12)==15 and (readQword(crv)&amp;0xFFFFFFFF)==myid then writeDouble(trv,2) end end
              if trv and readDouble(trv)==2 and NT.var(c,DMG) and not NT.var(c,HP) then
                local f=(n=="Disc") and 1 or M.slow
                M.held[c]={obj=readQword(c+0x90),id=readInteger(c+0xBC),sp=sp*f}
                aim(c,cx,cy,sp*f)
                M.count=M.count+1
              end
            end
          end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  M.last=(os.clock()-t0)*1000
end
M.tick=tick
M.timer=createTimer(nil,false); M.timer.Interval=15
M.timer.OnTimer=function() local ok,e=pcall(tick); if not ok then M.err=e end end
M.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.modes and NT.modes.exodus and NT.modes.exodus.timer then NT.modes.exodus.timer.destroy() NT.modes.exodus.timer=nil end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>112</ID>
              <Description>"Magneto: your own shots that pass close to your crosshair fall under his control, slowing down and following wherever you point. Even spinning blades obey him and no longer turn on their master."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>105</ID>
          <Description>"Jean Grey mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
NT.modes=NT.modes or {}
if NT.modes.jean and NT.modes.jean.timer then NT.modes.jean.timer.destroy() end
local M={count=0}; NT.modes.jean=M
local TEAM,DMG,HP,CREATOR=0x19EBC,0x18C29,0x19822,0x18BB9
local NC={}
local SKIP={Wall=1,Floor=1,FloorExplo=1,SnowFloor=1,TopSmall=1,TopDecal=1,SnowFlake=1,Bones=1,Detail=1,Scorch=1,ScorchTop=1,Corpse=1,Dust=1,Smoke=1,Debris=1,Rad=1,BigRad=1,ChestOpen=1}
local function nameOf(inst) local o=readQword(inst+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
local function aim(c,tx,ty,sp)
  local dx,dy=tx-readFloat(c+0xF4), ty-readFloat(c+0xF8); local d=math.sqrt(dx*dx+dy*dy); if d&lt;0.5 then return end
  writeFloat(c+0x110,sp); writeFloat(c+0x120,dx/d*sp); writeFloat(c+0x124,dy/d*sp)
  writeFloat(c+0x10C,(math.deg(math.atan(-dy,dx)))%360)
end
local function tick()
  local t0=os.clock()
  local pl=NT.cache.Player; if not pl then return end
  local cx,cy=NT.cursorWorld(); if not cx then return end
  M.cx,M.cy=cx,cy
  local myid=readInteger(pl+0xBC)
  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 enemies,shots={}, {}
  local c=h; local guard=0
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    local nmS=nameOf(c)
    if c~=pl and not (nmS and SKIP[nmS]) then
      local x,y=readFloat(c+0xF4),readFloat(c+0xF8)
      if x then
        local sp=readFloat(c+0x110)
        local dx,dy=x-cx,y-cy
        if sp and sp&gt;0.05 and dx*dx+dy*dy&lt;48*48 then
          local trv=NT.var(c,TEAM)
          if trv and readDouble(trv)~=2 and NT.var(c,DMG) and not NT.var(c,HP) then shots[#shots+1]={c,trv,sp} end
        end
        if false then
          local hrv=NT.var(c,HP); local trv2=hrv and NT.var(c,TEAM)
          if hrv and trv2 and readDouble(trv2)~=2 and readDouble(trv2)~=0 and readDouble(hrv)&gt;0 then
            local n=nameOf(c) or ""
            if not n:find("Missile") then enemies[#enemies+1]={c,x,y,readInteger(c+0xBC)} end
          end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  for _,s in ipairs(shots) do
    local c,trv,sp=s[1],s[2],s[3]
    aim(c,cx,cy,sp*0.5)
    writeDouble(trv,2)
    local crv=NT.var(c,CREATOR); if crv and readInteger(crv+12)==15 then local q=readQword(crv); writeQword(crv,(q &amp; 0xFFFFFFFF00000000) | myid) end
    M.count=M.count+1
  end

  M.last=(os.clock()-t0)*1000
end
M.tick=tick
M.timer=createTimer(nil,false); M.timer.Interval=15
M.timer.OnTimer=function() local ok,e=pcall(tick); if not ok then M.err=e end end
M.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.modes and NT.modes.jean and NT.modes.jean.timer then NT.modes.jean.timer.destroy() NT.modes.jean.timer=nil end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>113</ID>
              <Description>"Jean Grey: enemy fire that strays near your crosshair is seized by her mind, turned to your side and hurled toward wherever you point."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>106</ID>
          <Description>"Professor X mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
NT.modes=NT.modes or {}
local old=NT.modes.hope
if old and old.timer then old.timer.destroy() if old.release then pcall(old.release) end end
local M={range=200, done={}, count=0, shooters={}}; NT.modes.hope=M
local TEAM,DMG,HP,MAXHP,CREATOR=0x19EBC,0x18C29,0x19822,0x1969E,0x18BB9
local NC={}
local SKIP={Wall=1,Floor=1,FloorExplo=1,SnowFloor=1,TopSmall=1,TopDecal=1,SnowFlake=1,Bones=1,Detail=1,Scorch=1,ScorchTop=1,Corpse=1,Dust=1,Smoke=1,Debris=1,Rad=1,BigRad=1,ChestOpen=1}
local function nameOf(inst) local o=readQword(inst+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
local function alive(cap) return cap and readQword(cap.inst+0x90)==cap.obj and readInteger(cap.inst+0xBC)==cap.id end
function M.release()
  local cap=M.cap; M.cap=nil
  if not alive(cap) then return end
  local c=cap.inst
  local tv=NT.var(c,TEAM); if tv then writeDouble(tv,cap.team) end
  local mv=NT.var(c,MAXHP); if mv then writeDouble(mv,cap.maxhp) end
  local hv=NT.var(c,HP); if hv and readDouble(hv)&gt;cap.maxhp then writeDouble(hv,cap.maxhp) end
end
local function capture(c)
  local tv,hv,mv=NT.var(c,TEAM),NT.var(c,HP),NT.var(c,MAXHP)
  local cap={inst=c,obj=readQword(c+0x90),id=readInteger(c+0xBC),team=readDouble(tv),maxhp=mv and readDouble(mv) or readDouble(hv)}
  writeDouble(tv,2)
  writeDouble(hv,readDouble(hv)*2)
  if mv then writeDouble(mv,cap.maxhp*2) end
  M.cap=cap; M.count=M.count+1
end
local function aim(c,tx,ty,sp)
  local dx,dy=tx-readFloat(c+0xF4), ty-readFloat(c+0xF8); local d=math.sqrt(dx*dx+dy*dy); if d&lt;0.5 then return end
  writeFloat(c+0x110,sp); writeFloat(c+0x120,dx/d*sp); writeFloat(c+0x124,dy/d*sp)
  writeFloat(c+0x10C,(math.deg(math.atan(-dy,dx)))%360)
end
local function tick()
  local t0=os.clock()
  local pl=NT.cache.Player; if not pl then 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 enemies,shots={}, {}
  local capId=alive(M.cap) and M.cap.id or nil
  local c=h; local guard=0
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    if c~=pl then
      local n=nameOf(c)
      if n and not SKIP[n] then
        local hv=NT.var(c,HP)
        if hv then
          local tv=NT.var(c,TEAM)
          if tv and readDouble(hv)&gt;0 and not n:find("Missile") then
            local t=readDouble(tv)
            if (t==1 or t==3) or readInteger(c+0xBC)==capId then enemies[#enemies+1]={c,readFloat(c+0xF4),readFloat(c+0xF8),readInteger(c+0xBC)} end
          end
        else
          local crv=NT.var(c,CREATOR)
          if crv and readInteger(crv+12)==15 and NT.var(c,DMG) then local tv2=NT.var(c,TEAM); if tv2 and (readDouble(tv2)==1 or readDouble(tv2)==3) then M.shotFrom=M.shotFrom or {}; M.shotFrom[readQword(crv)&amp;0xFFFFFFFF]=true end end
          if capId and crv and readInteger(crv+12)==15 and (readQword(crv)&amp;0xFFFFFFFF)==capId and NT.var(c,DMG) then
            local key=c..":"..readInteger(c+0xBC)
            if not M.done[key] then shots[#shots+1]=c; M.done[key]=true end
          end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  if M.shotFrom then for _,e in ipairs(enemies) do if M.shotFrom[e[4]] then M.shooters[readQword(e[1]+0x90)]=true end end M.shotFrom=nil end
  local hostile=0 for _,e in ipairs(enemies) do if e[4]~=capId then hostile=hostile+1 end end
  M.hostile=hostile
  if hostile+(capId and 1 or 0)&lt;=1 then if M.cap then M.release() end M.last=(os.clock()-t0)*1000 return end
  -- keep or choose captive
  local cap=M.cap
  if cap and alive(cap) then
    local dx,dy=readFloat(cap.inst+0xF4)-px,readFloat(cap.inst+0xF8)-py
    if dx*dx+dy*dy&gt;M.range*M.range then M.release() end
  elseif cap then M.cap=nil end
  if not M.cap then
    local best,bd
    for _,e in ipairs(enemies) do if M.shooters[readQword(e[1]+0x90)] then local d=(e[2]-px)^2+(e[3]-py)^2; if d&lt;M.range*M.range and (not bd or d&lt;bd) then best,bd=e,d end end end
    if best then capture(best[1]) end
  end
  -- empower and redirect captive's shots
  if M.cap then
    for _,s in ipairs(shots) do
      local x,y=readFloat(s+0xF4),readFloat(s+0xF8)
      local best,bd
      for _,e in ipairs(enemies) do if e[4]~=M.cap.id then local d=(e[2]-x)^2+(e[3]-y)^2; if not bd or d&lt;bd then best,bd=e,d end end end
      local tv=NT.var(s,TEAM); if tv then writeDouble(tv,2) end
      local dv=NT.var(s,DMG); if dv then writeDouble(dv,readDouble(dv)*1.5) end
      local sp=readFloat(s+0x110)*1.5
      if best then aim(s,best[2],best[3],sp) else writeFloat(s+0x110,sp); writeFloat(s+0x120,readFloat(s+0x120)*1.5); writeFloat(s+0x124,readFloat(s+0x124)*1.5) end
    end
  end
  -- forget old shot keys occasionally
  M.n=(M.n or 0)+1; if M.n%400==0 then M.done={} end
  M.last=(os.clock()-t0)*1000
end
M.tick=tick
M.timer=createTimer(nil,false); M.timer.Interval=20
M.timer.OnTimer=function() local ok,e=pcall(tick); if not ok then M.err=e end end
M.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
if NT.modes and NT.modes.hope then if NT.modes.hope.timer then NT.modes.hope.timer.destroy() NT.modes.hope.timer=nil end pcall(NT.modes.hope.release) end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>114</ID>
              <Description>"Professor X: takes over the mind of a nearby enemy that shoots. Under his will it grows tougher and fights for you with faster, deadlier shots. The hold breaks if it wanders too far, and the last enemy standing can't be swayed."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>107</ID>
          <Description>"Barry Allen mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
NT.modes=NT.modes or {}
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 B={tables={}}
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 B.tables[#B.tables+1]={base=base,orig=orig} end
  end
  res.destroy()
end
for _,t in ipairs(B.tables) do for j=1,127 do writeDouble(t.base+j*16,1) end end
NT.modes.barry=B
B.tick=function()
  local pl=NT.cache.Player; if not pl then return end
  local ms=NT.var(pl,0x196A3)
  if ms then
    local cur=readDouble(ms)
    if B.pl~=pl then B.pl=pl; B.base=cur; writeDouble(ms,cur+4)
    elseif cur~=B.base+4 then B.base=cur; writeDouble(ms,cur+4) end
  end
  local rv=NT.var(pl,0x19B52)
  if rv then
    local cur=readDouble(rv)
    if B.lastR and cur&gt;B.lastR+0.01 then cur=cur*0.25; writeDouble(rv,cur) end
    B.lastR=cur
  end
end
B.timer=createTimer(nil,false); B.timer.Interval=10
B.timer.OnTimer=function() local ok,e=pcall(B.tick); if not ok then B.err=e end end
B.timer.Enabled=true
if #B.tables==0 then showMessage("Barry Allen: auto table not found (already modified?)") end
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
local B=NT.modes and NT.modes.barry
if B and B.timer then B.timer.destroy() B.timer=nil end
if B and B.pl and B.base then pcall(function() local ms=NT.var(B.pl,0x196A3); if ms and readDouble(ms)==B.base+4 then writeDouble(ms,B.base) end end) end
if B then for _,t in ipairs(B.tables) do for j=1,127 do writeDouble(t.base+j*16,t.orig[j]) end end end
if NT.modes then NT.modes.barry=nil end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>115</ID>
              <Description>"Barry Allen: moves faster, reloads faster, and every gun keeps firing as long as the trigger is held."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>108</ID>
          <Description>"Juggernaut mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
NT.modes=NT.modes or {}
if NT.modes.jugg and NT.modes.jugg.timer then NT.modes.jugg.timer.destroy() end
local J={seen={}, quad=0}; NT.modes.jugg=J
local HP,MAXHP,AMAX,AMMO,TEAM,DMG,CREATOR=0x19822,0x1969E,0x19F2D,0x188E6,0x19EBC,0x18C29,0x18BB9
local NC={}
local function nameOf(inst) local o=readQword(inst+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
function J.restore()
  if J.pl and J.orig then pcall(function()
    local pl=J.pl
    local am=NT.arr(NT.var(pl,AMAX)); if am then local base=NT.baseCaps(); for i=1,5 do writeDouble(am+i*16,base[i]) end end
    local mh=NT.var(pl,MAXHP); if mh then writeDouble(mh,J.orig.maxhp) end
    local h=NT.var(pl,HP); if h and readDouble(h)&gt;J.orig.maxhp then writeDouble(h,J.orig.maxhp) end
  end) end
  local sk=getAddressSafe("NT_skills"); if sk and J.gamma0~=nil then writeDouble(sk+8*16,J.gamma0) end
  if sk and J.la0~=nil then writeDouble(sk+13*16,J.la0) end
  if sk and J.hh0~=nil then writeDouble(sk+26*16,J.hh0) end
  pcall(function() if J.spPl and J.spBase then local ms=NT.var(J.spPl,0x196A3); if ms and math.abs(readDouble(ms)-J.spTarget)&lt;0.001 then writeDouble(ms,J.spBase) end end end)
end
local function tick()
  local pl=NT.cache.Player; if not pl then return end
  local am=NT.arr(NT.var(pl,AMAX)); local ammo=NT.arr(NT.var(pl,AMMO))
  local mh=NT.var(pl,MAXHP); local h=NT.var(pl,HP)
  if not (am and ammo and mh and h) then return end
  if J.pl~=pl then
    J.pl=pl
    J.orig={amax={},maxhp=readDouble(mh)}
    for i=1,5 do J.orig.amax[i]=readDouble(am+i*16) end
    writeDouble(mh,30); writeDouble(h,30)
    local w=NT.var(pl,0x1A027); local bw=NT.var(pl,0x1895F)
    if w then writeDouble(w,88) end
    if bw then writeDouble(bw,27) end
  end
  do local sk2=getAddressSafe("NT_skills"); if sk2 then if J.la0==nil then J.la0=readDouble(sk2+13*16) end if readDouble(sk2+13*16)~=1 then writeDouble(sk2+13*16,1) end end end
  for i=1,5 do
    if readDouble(am+i*16)~=1 then writeDouble(am+i*16,1) end
    if readDouble(ammo+i*16)&gt;1 then writeDouble(ammo+i*16,1) end
  end
  if readDouble(mh)~=30 then writeDouble(mh,30) end
  local sk=getAddressSafe("NT_skills")
  if sk then if J.gamma0==nil then J.gamma0=readDouble(sk+8*16) end if readDouble(sk+8*16)~=1 then writeDouble(sk+8*16,1) end end
  -- hammerhead: own it while on, 100 walls per level
  do local sk3=getAddressSafe("NT_skills"); if sk3 then if J.hh0==nil then J.hh0=readDouble(sk3+26*16) end if readDouble(sk3+26*16)~=1 then writeDouble(sk3+26*16,1) end end end
  do local hv=NT.var(pl,0x194BE)
    if hv then local cur=readDouble(hv)
      if J.hhPl~=pl then J.hhPl=pl; writeDouble(hv,100); cur=100
      elseif cur==20 and J.lastHH and J.lastHH~=20 and J.lastHH~=21 then writeDouble(hv,100); cur=100 end
      J.lastHH=cur end end
  -- slow: max speed x0.5
  do local ms=NT.var(pl,0x196A3)
    if ms then local cur=readDouble(ms)
      if J.spPl~=pl then J.spPl=pl; J.spBase=cur; J.spTarget=cur*0.5; writeDouble(ms,J.spTarget)
      elseif math.abs(cur-J.spTarget)&gt;0.001 then J.spBase=cur; J.spTarget=cur*0.5; writeDouble(ms,J.spTarget) end end end
  -- quad melee: new melee hitboxes created by the player
  J.n=(J.n or 0)+1
  local myid=readInteger(pl+0xBC)
  local hh=pl; local k=0
  while k&lt;20000 do local p=readQword(hh+0x1A8); if not p or p==0 then break end hh=p k=k+1 end
  local c=hh; local guard=0
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    local n=nameOf(c)
    if n and (n:find("Slash") or n:find("Shank")) then
      local key=c..":"..readInteger(c+0xBC)
      if not J.seen[key] then
        J.seen[key]=true
        local crv=NT.var(c,CREATOR)
        if crv and readInteger(crv+12)==15 and (readQword(crv)&amp;0xFFFFFFFF)==myid then
          local dv=NT.var(c,DMG); if dv then writeDouble(dv,readDouble(dv)*4); J.quad=J.quad+1 end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  if J.n%500==0 then J.seen={} end
end
J.tick=tick
J.timer=createTimer(nil,false); J.timer.Interval=15
J.timer.OnTimer=function() local ok,e=pcall(tick); if not ok then J.err=e end end
J.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
local J=NT.modes and NT.modes.jugg
if J then if J.timer then J.timer.destroy() J.timer=nil end J.restore() end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>116</ID>
              <Description>"Juggernaut: enormous health but carries almost no ammo and moves slowly. Starts with heavy tools, reaches further and hits far harder in melee, hurts anything that touches him, and smashes through walls as if they weren't there."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>109</ID>
          <Description>"Wonder Woman mode"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
NT.solo(memrec)
if NT.ww and NT.ww.timer then NT.ww.timer.destroy() end
local D={radius=30, count=0, worst=0}
NT.ww=D
local TEAM,DMG,HP,CREATOR=0x19EBC,0x18C29,0x19822,0x18BB9
local NC={}
local function nameOf(inst) local o=readQword(inst+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
local function tick()
  local t0=os.clock()
  local pl=NT.cache.Player
  if not pl or readQword(pl+0x90)==nil then return end
  local px,py=readFloat(pl+0xF4),readFloat(pl+0xF8)
  -- WW: halve max ammo (always), reflect only while cursor is on her
  do
    local am=NT.arr(NT.var(pl,0x19F2D)); local ammo=NT.arr(NT.var(pl,0x188E6))
    if am and ammo then local base=NT.baseCaps()
      for i=1,5 do local tg=math.floor(base[i]/2)
        if readDouble(am+i*16)~=tg then writeDouble(am+i*16,tg) end
        if readDouble(ammo+i*16)&gt;tg then writeDouble(ammo+i*16,tg) end end
    end
  end
  local cx,cy=NT.cursorWorld()
  if not cx or (cx-px)^2+(cy-py)^2&gt;16*16 then D.armed=false; return end
  D.armed=true
  local myid=readInteger(pl+0xBC)
  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 R2=D.radius*D.radius
  local c=h; local guard=0
  local ids,caught={}, {}
  while c and c~=0 and guard&lt;30000 do
    guard=guard+1
    ids[readInteger(c+0xBC)]=c
    local nmAll=nameOf(c)
    if nmAll and nmAll:find("Missile") then local tv=NT.var(c,TEAM); if tv and readDouble(tv)==2 then caught[#caught+1]=c end end
    local x,y=readFloat(c+0xF4),readFloat(c+0xF8)
    if x then
      local dx,dy=x-px,y-py
      if dx*dx+dy*dy&lt;R2 and c~=pl then
        local sp=readFloat(c+0x110)
        if sp and sp&gt;0.05 then
          local trv=NT.var(c,TEAM); local drv=NT.var(c,DMG)
          local nm=NT.objName(c) or ""
          if trv and nm:find("Missile") and readDouble(trv)~=2 then
            local crv=NT.var(c,CREATOR); local tgt=NT.var(c,0x19EB5)
            if crv and tgt and readInteger(crv+12)==15 then
              local cid=readQword(crv)&amp;0xFFFFFFFF; local q=readQword(tgt); writeQword(tgt,(q &amp; 0xFFFFFFFF00000000) | cid)
            end
            writeFloat(c+0x110, sp*0.5); writeFloat(c+0x10C,(readFloat(c+0x10C)+180)%360)
            writeFloat(c+0x120,-readFloat(c+0x120)*0.5); writeFloat(c+0x124,-readFloat(c+0x124)*0.5)
            writeDouble(trv,2); D.count=D.count+1; D.missiles=(D.missiles or 0)+1
          elseif trv and drv and not NT.var(c,HP) then
            local team=readDouble(trv)
            if team~=2 then
              writeFloat(c+0x110, sp*0.5)
              writeFloat(c+0x10C, (readFloat(c+0x10C)+180)%360)
              writeFloat(c+0x120, -readFloat(c+0x120)*0.5)
              writeFloat(c+0x124, -readFloat(c+0x124)*0.5)
              writeDouble(trv, 2)
              local crv=NT.var(c,CREATOR)
              if crv and readInteger(crv+12)==15 then
                local q=readQword(crv); writeQword(crv,(q &amp; 0xFFFFFFFF00000000) | myid)
              end
              D.count=D.count+1
            end
          end
        end
      end
    end
    c=readQword(c+0x1A0)
  end
  for _,m in ipairs(caught) do
    local crv=NT.var(m,CREATOR)
    if crv and readInteger(crv+12)==15 then
      local tg=ids[readQword(crv)&amp;0xFFFFFFFF]
      if tg then
        local dx,dy=readFloat(tg+0xF4)-readFloat(m+0xF4), readFloat(tg+0xF8)-readFloat(m+0xF8)
        local d=math.sqrt(dx*dx+dy*dy)
        if d&gt;0.5 then
          local sp=readFloat(m+0x110); if sp&lt;0.4 then sp=0.4 end
          writeFloat(m+0x120,dx/d*sp); writeFloat(m+0x124,dy/d*sp)
          writeFloat(m+0x10C,(math.deg(math.atan(-dy,dx)))%360)
          D.steered=(D.steered or 0)+1
        end
      end
    end
  end
  local dt=(os.clock()-t0)*1000; if dt&gt;D.worst then D.worst=dt end; D.last=dt
end
D.tick=tick
D.timer=createTimer(nil,false); D.timer.Interval=15
D.timer.OnTimer=function() local ok,e=pcall(tick); if not ok then D.err=e end end
D.timer.Enabled=true
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
pcall(function() local pl=NT.cache.Player; local am=NT.arr(NT.var(pl,0x19F2D)); local base=NT.baseCaps(); for i=1,5 do writeDouble(am+i*16,base[i]) end end)
if NT.ww and NT.ww.timer then NT.ww.timer.destroy() NT.ww.timer=nil end
{$asm}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>117</ID>
              <Description>"Wonder Woman: carries less ammo than most, but when she crosses her bracelets (crosshair on herself), nearby bullets bounce back at the enemy."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>110</ID>
          <Description>"Radar window"</Description>
          <Options moHideChildren="1"/>
          <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=="HealthChest" then col=-3
          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]==-3 then
      local x,y=math.floor(t[1]),math.floor(t[2])
      cv.Brush.Color=0xFFFFFF; cv.fillRect(x-6,y-6,x+8,y+8)
      cv.Brush.Color=0x2020E0; cv.fillRect(x-1,y-4,x+3,y+6); cv.fillRect(x-4,y-1,x+6,y+3)
    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>
          <CheatEntries>
            <CheatEntry>
              <ID>118</ID>
              <Description>"Radar: a small map of the area around you showing walls, enemies, chests, pickups and the portal. Works alongside any mode."</Description>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <Comments>MMMM - Marvel Mutant Mutations Mod for Nuclear Throne
Enable the resolver first. Only one mode can be active at a time; the radar works with all of them.

Captain America: when he's down to his fists or out of ammo for his gun, an invisible shield throws incoming fire back at whoever sent it. Some mutations are simply beneath him.

Magneto: your own shots that pass close to your crosshair fall under his control, slowing down and following wherever you point. Even spinning blades obey him and no longer turn on their master.

Jean Grey: enemy fire that strays near your crosshair is seized by her mind, turned to your side and hurled toward wherever you point.

Professor X: takes over the mind of a nearby enemy that shoots. Under his will it grows tougher and fights for you with faster, deadlier shots. The hold breaks if it wanders too far, and the last enemy standing can't be swayed.

Barry Allen: moves faster, reloads faster, and every gun keeps firing as long as the trigger is held.

Juggernaut: enormous health but carries almost no ammo and moves slowly. Starts with heavy tools, reaches further and hits far harder in melee, hurts anything that touches him, and smashes through walls as if they weren't there.

Wonder Woman: carries less ammo than most, but when she crosses her bracelets (crosshair on herself), nearby bullets bounce back at the enemy.

Radar: a small map of the area around you showing walls, enemies, chests, pickups and the portal. Works alongside any mode.</Comments>
</CheatTable>
