== $0
  const{pack,unpack}=require("msgpackr"),WebSocket=require("ws"),{WebSocketServer}=WebSocket,fs=require("fs"),http=require("http"),url=require("url"),perf_hooks=require("perf_hooks"),_performance=perf_hooks.performance;let secret={},____=[];const checkName=function($){return!0};let createAchievement=function($){return{time:Math.floor(Date.now()/1e3),id:$}};const access={testing:["bot","tp","team","dim","weapon","body","vanish","god","name"],p2:["name","radiant","missile","fallen","bot","fallenbot","drag","dragwall","wallsize","wallteam","createwall","savewalls","downloadwalls","loadwalls","uploadwalls","removewall","kill","maxstats","reset","resetstats","ascend","announce","pulltanks","remove","wormhole","tp","polygon","polyhedra","darkness","maxpolygonsides","maxpolygoncount","mapsize","xp","addxp","maxxp","minxp","team","weapon","body","dim","god","antilag","antibot","fullfov"]};console.log=new Proxy(console.log,{apply:function($,e,t){let a=new Date;return t.unshift(`[${a.toDateString()} ${a.toTimeString().split(" ")[0]}]`),Reflect.apply($,e,t)}});const main=function(tankData,args){process.on("uncaughtException",function($){console.log($)});let sendAchievement=function($,e){$&&$.ws&&$.ws.accountName&&!$.dim.sandbox&&args.parentPort.postMessage(["achievement",[$.ws.accountName,e]])},gameEnd=function($){if($.ws&&$.ws.accountName&&$.ws.accountData&&$.ws.timeStart>0&&!$.dim.sandbox){let e=Math.floor((_performance.now()-$.ws.timeStart)/1e3);$.ws.accountData.timeAlive+=e,$.ws.accountData.score=$.score,args.parentPort.postMessage(["gameEnd",[$.ws.accountName,$.ws.accountData,$.score]]),$.ws.accountName=!1,$.ws.accountData=!1}},app=function($,e){let t=url.parse($.url),a=t.pathname;"/tankData.json"===a?(e.setHeader("Access-Control-Allow-Origin","*"),e.writeHead(200,{"Content-Type":"application/json"}),e.end(JSON_tankData)):(e.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),e.end(''))},httpServer=secret.key&&secret.cert?http.createServer({key:fs.readFileSync(secret.key),cert:fs.readFileSync(secret.cert)},app):http.createServer(app);args.port>=0?httpServer.listen(args.port):httpServer.listen();let server=new WebSocketServer({noServer:!0});httpServer.on("upgrade",($,e,t)=>{let a=!0,n={};for(let i in $.headers)i.startsWith("scenexe2")&&(n[i]=$.headers[i]);let s=url.parse($.url);Object.fromEntries(new url.URLSearchParams(s.query));let o=s.pathname,_=!0,r;if(o.startsWith("/ws-")){if(6===(r=o.slice(4)).length){let d=0;for(let c=0;c<5;c++){let u="0123456789abcdef".indexOf(r[c]);if(u<0){_=!1;break}d+=u}"0123456789abcdef".indexOf(r[5])!==d%16&&(_=!1)}else _=!1}else _=!1;if(_){for(let p=clients.length-1;p>=0;p--)if(clients[p].joinToken===r){_=!1;break}}_?server.handleUpgrade($,e,t,$=>{$._headers=n,a?$.joinToken=r:$.failedHeaderCheck=!0,server.emit("connection",$)}):e.destroy()});let JSON_tankData=JSON.stringify(tankData),Detector=function(){let $={sliceWidth:100,rules:{tank:{tank:!0,detectEnemies:!0,detectFriends:!0,bullet:!0,polygon:!0,wall:!0,gate:!0,wormhole:!0},detectEnemies:{tank:!0,polygon:!0,bullet:!0},bullet:{tank:!0,bullet:!0,polygon:!0,wall:!0,gate:!0,wormhole:!0,detectEnemies:!0},polygon:{tank:!0,bullet:!0,detectEnemies:!0,polygon:!0,wall:!0,gate:!0,wormhole:!0},detectFriends:{tank:!0},wall:{tank:!0,bullet:!0,polygon:!0},gate:{tank:!0,bullet:!0,polygon:!0},wormhole:{tank:!0,bullet:!0,polygon:!0}},canCollide:function(e,t){return!e.noCollide&&!t.noCollide&&("bullet"===e.type&&"bullet"===t.type?!dimension.isSameTeam(e.object,t.object)||e.object.type===t.object.type:(0,$.rules[e.type][t.type]))},checkCircle:function($,e){let t={dx:$.x-e.x,dy:$.y-e.y,distance:0,size:$.size+e.size,colliding:!1};return t.distance=t.dx*t.dx+t.dy*t.dy,t.distance$.left&&e.x-t.size<$.right,t.inY=e.y+t.size>$.bottom&&e.y-t.size<$.top;let a=e.size-t.size;return(t.cinX=e.x>$.left+a&&e.x<$.right-a,t.cinY=e.y>$.bottom+a&&e.y<$.top-a,t.inX&&t.cinY||t.inY&&t.cinX)?(t.hitSide=!0,t):(t.cx=e.x<$.x?$.left+a:$.right-a,t.cy=e.y<$.y?$.bottom+a:$.top-a,t.dcx=e.x-t.cx,t.dcy=e.y-t.cy,t.distance=t.dcx*t.dcx+t.dcy*t.dcy,t.distance>=e.size*e.size&&(t.colliding=!1),t)},detectCollisions:function(e,t){let a={},n={},i=1/$.sliceWidth,s=e.length;for(let o=0;o$.bottom-e.bottom,f=function($,e){let t=a[$];return t||(t=a[$]={}),!(e in t)&&(t[e]=!0,!0)},g=0;for(let y in n){let h=n[y];h.sort(m);for(let k=0,v=h.length-1;kb.top)break;if(b.right>=x.left&&b.left<=x.right&&(b.object,x.object,$.canCollide(b,x)&&f(b.internalId,x.internalId))){if(b.rectangular||x.rectangular){if(b.rectangular^x.rectangular){let z=$.checkRect(b,x);z.colliding&&t(z.circle,z.rect,z)}}else{let T=$.checkCircle(b,x);T.colliding&&t(b,x,T)}}g++}}}return g}};return $}(),View=function(){let $={sliceWidth:100,rules:{fov:{bullet:!0},bullet:{fov:!0}},canCollide:function(e,t){return $.rules[e.type][t.type]},checkCircle:function($,e){let t={dx:$.x-e.x,dy:$.y-e.y,distance:0,size:$.size+e.size,colliding:!1};return t.distance=t.dx*t.dx+t.dy*t.dy,t.distance$.bottom-e.bottom,f=function($,e){let t=a[$];return t||(t=a[$]={}),!(e in t)&&(t[e]=!0,!0)},g=0;for(let y in n){let h=n[y];h.sort(m);for(let k=0,v=h.length-1;kb.top)break;if(b.right>=x.left&&b.left<=x.right&&(b.object,x.object,$.canCollide(b,x)&&f(b.internalId,x.internalId))){let z=$.checkCircle(b,x);z.colliding&&t(b,x,z)}g++}}}return g}};return $}(),clients=[],game={clients:clients,tokens:{},tokenUses:{},generateToken:function(){let $="scenexe2-";for(let e=0;e<55;e++)$+="0123456789abcdef"[Math.floor(16*Math.random())];return $ in game.tokens?game.generateToken():$},codes:args.codes||function(){let $={recieve:{ready:0,gameUpdate:1,gameStart:2,announcement:3,death:4,setStats:5,test:6,flag:7,eval:8,waiting:9},send:{joinGame:0,chat:1,typing:2,passive:3,firing:4,controlPosition:5,upgradeStat:6,upgradeWeapon:7,upgradeBody:8,restore:9,direction:10,d:11,token:12,result:13,ping:14,captcha:15,login:16,createAccount:17}};for(let e in $.send)$.send[$.send[e]]=e;for(let t in $.recieve)$.recieve[$.recieve[t]]=t;return $}(),c:{recieve:{0:"ready",ready:0,1:"gameUpdate",gameUpdate:1,2:"gameStart",gameStart:2,3:"announcement",announcement:3,4:"death",death:4,5:"setStats",setStats:5,6:"test",test:6,7:"flag",flag:7},send:{joinGame:14,14:"joinGame",chat:1,1:"chat",typing:2,2:"typing",passive:3,3:"passive",firing:4,4:"firing",controlPosition:5,5:"controlPosition",upgradeStat:6,6:"upgradeStat",upgradeWeapon:7,7:"upgradeWeapon",upgradeBody:8,8:"upgradeBody",restore:9,9:"restore",direction:10,10:"direction",d:11,11:"d",token:17,17:"token",result:29,29:"result",ping:31,31:"ping",captcha:79,79:"captcha"}},token:secret.token},createMessage=function(){args.parentPort.postMessage(["createMessage",Array.from(arguments)])},pathfind={controller:function($){let e={tank:$.tank,osize:$.range,updateInterval:$.updateInterval||1e3,lastUpdate:0,map:!1,dx:$.dx||0,dy:$.dy||0,r:$.r||300,update:function(t,a,n,i){if(e.map&&!(t>e.lastUpdate+e.updateInterval))return!1;e.lastUpdate=t;let s=e.tank.dim.walls;$.extraWalls&&(s=s.concat($.extraWalls));let o=pathfind.extract(s,0,0,-e.dx,-e.dy,e.osize,e.r);return i&&(i=[Math.floor(i[0]/e.r+.5+e.dx),Math.floor(i[1]/e.r+.5+e.dy)]),o=pathfind.preMap({map:o,maxSteps:$.maxSteps,x:Math.floor(a/e.r+.5+e.dx),y:Math.floor(n/e.r+.5+e.dy),target:i}),e.map=o,!0},getImpulse:function($,t){return e.map||e.update(),$=Math.floor($/e.r+.5+e.dx),t=Math.floor(t/e.r+.5+e.dy),pathfind.getImpulse(e.map,$,t)},directPath:function($,t,a,n){return pathfind.directPath(e.tank.dim.walls,$,t,a,n)}};return e},directPath:function($,e,t,a,n){let i,s,o,_;ei&&c[0]-c[2]s&&c[1]-c[3]<_)return!1}return!0},createMap:function($,e){let t=[];t.osize=$;for(let a=0;a=-e&&a>=-e&&t<=e&&a<=e&&!pathfind.readFlag($[t+e][a+e],1)&&(i>=0&&pathfind.flagCell($,e,t,a,i,1),pathfind.flagCell($,e,t,a,1,1),pathfind.readFlag($[t+e][a+e],0)||n.push([t,a]),s&&t===s[0]&&a===s[1]))return!0},preMap:function($){let e=$.map,t=e.osize,a=[];pathfind.add(e,t,$.x,$.y,a),a=[[$.x,$.y]];for(let n=0,i=$.maxSteps<1e3?$.maxSteps:1e3;n=0))return!1;for(let s=0;s<100;s++){if(pathfind.readFlag(i,2))t--;else if(pathfind.readFlag(i,3))a--;else if(pathfind.readFlag(i,4))t++;else{if(!pathfind.readFlag(i,5))return n.reverse();a++}if(e[t]){if(!((i=e[t][a])>=0))return!1;n.push([t-e.osize,a-e.osize])}}}return!1},getImpulse:function($,e,t){if(e+=$.osize,t+=$.osize,$[e]&&$[e][t]>=0){let a=$[e][t];if(pathfind.readFlag(a,2))return 2;if(pathfind.readFlag(a,3))return 3;if(pathfind.readFlag(a,4))return 0;if(pathfind.readFlag(a,5))return 1}return -1},extract:function($,e,t,a,n,i,s){let o=(i+.5)*s,_=e*s,r=t*s,d=2*i+1,c=_-o,u=_+o,p=r-o,m=r+o,f=pathfind.createMap(i,d);for(let g=0,y=$.length;gc&&k-bp&&v-w2*i&&(z=2*i),S>h*i&&(S=2*i);for(let P=x;P<=z;P++)for(let D=T;D<=S;D++)pathfind.flagCell(f,0,P,D,0,1)}}return f},copy:function($){let e=$.slice();e.osize=$.osize;for(let t=e.length-1;t>=0;t--)e[t]=e[t].slice();return e}},dimension={clipSize:125,tickTime:.02,tickRate:50,tickMultiplier:2,power97:.9409,savedWalls:{m1:[[-1599,1501,1400,1500],[1599,1499,1400,1500],[149,1399,50,1400],[-149,1399,50,1400],[-101,2799,10,200],[-201,2801,10,200],[199,2801,10,200],[99,2801,10,200],[-1,-599,400,400]],m2:[[6,-671,500,100],[677,761,50,100],[12,302,500,100],[605,-525,100,250],[611,149,100,250],[-593,-185,100,585],[669,-191,10,100],[676,1037,50,100],[552,-192,10,100],[1980,-1750,400,400],[1291,1696,700,700],[-1913,-1926,900,900],[-627,662,1e3,100],[1575,715,50,100],[1430,1338,50,100],[1576,995,50,100],[-131,1072,500,100],[157,1680,200,300],[865,968,50,100],[1456,101,500,300],[419,-188,25,200],[868,686,50,100],[1059,760,50,100],[1059,1041,50,100],[296,24,25,100],[1236,825,50,100],[1406,925,50,100],[298,-400,25,100],[292,-193,100,25],[2377,336,100,100],[169,-191,25,100],[93,-390,100,100],[97,9,100,100],[47,-193,50,50],[-183,-394,100,100],[-177,4,100,100],null,[-183,-193,100,50],[-442,151,50,50],null,[-442,-522,50,50],[-328,-50,50,50],[-333,-341,50,50],[-790,-178,100,400],[-1038,-182,100,300],null,[-1297,-187,100,200],[-1564,-191,100,100],[-2806,-1126,100,100],[-3e3,-1421,100,100],[-2811,-1711,100,100],[-3003,-2e3,100,100],[-2804,-2291,100,100],[-3001,-2592,100,100],[-2594,-3003,100,100],[-2291,-2826,100,100],[-1113,-2831,100,100],[-1402,-2996,100,100],[-1685,-2823,100,100],[-1983,-2996,100,100],[-2990,-3163,10,10],[-2990,-3144,10,10],[-2990,-3122,10,10],[-2993,-3100,10,10],[-2964,-3120,10,10],null,[-2967,-3122,10,10],null,null,null,[-2945,-3122,10,10],[-2942,-3101,10,10],[-2893,-3124,10,10],[-2892,-3105,10,10],[-2894,-3163,10,10],[1162,-943,200,500],null,null,[2078,-2588,500,200],null,[-583,1877,300,500],[298,-1628,400,600],[919,-902,100,100],[-1685,1157,500,200],null,null,[-1469,1818,300,200],[2694,-1879,100,500],[1124,660,500,100],null,[520,-2690,600,100],null,[2197,-1026,600,100],[2492,14,300,400],[-2802,-317,200,600],null,[2309,-666,700,100],[-1905,-797,500,100],[2607,660,400,100],[2494,1471,500,100],null,[2501,2263,200,500],[-481,-2708,400,300],[2520,1085,300,100],null,null,[-2089,151,300,600],null,[1148,-2019,200,300],[-717,-2117,300,100],null,[-403,-1740,300,100],[-710,-1400,300,100],null,[293,2282,300,100],[3085,2455,200,100],[1689,2699,300,100],[-2376,2134,300,500],[-1450,2804,400,200],[-2802,1148,200,100],null,[723,2908,300,100],[738,2474,300,100],[-760,2900,300,100],[-2156,2908,300,100],[-1319,467,300,100],[1918,666,100,100],[-38,2679,200,100],null,[-1478,2313,300,100],[-893,1067,100,100],[-2595,646,200,100],[2677,-2486,100,100],[2904,-2904,100,100],[1491,2393,100,100],[1892,2611,100,100],[1890,2778,100,100],[1490,2984,100,100],[940,2834,100,100],[942,2536,100,100],[-35,2788,100,100],[-37,2591,100,100],[-19,1950,100,30],null,[-148,1880,30,100],[-153,1478,30,100],[-279,1406,100,30],[-253,1685,30,50],null,[-74,1684,30,50],[2571,1655,100,100]],m3:[[25144,6135,10,10],[3150,-6550,300,900],[-8e3,-14e3,7e3,1e3],[8e3,-14e3,7e3,1e3],[14e3,-7e3,1e3,6e3],[8e3,14e3,7e3,1e3],[14e3,7e3,1e3,6e3],[-8e3,14e3,7e3,1e3],[-14e3,7e3,1e3,6e3],[-14e3,-7e3,1e3,6e3],[-9250,-16250,8250,1250],[9250,-16250,8250,1250],[9250,16250,8250,1250],[-9250,16250,8250,1250],[-16250,8e3,1250,7e3],[-16250,-8e3,1250,7e3],[16250,-8e3,1250,7e3],[16250,8e3,1250,7e3],[-10700,-10100,300,300],[-2200,2200,200,200],[1300,10700,300,300],[-8900,10700,300,300],[2200,2200,200,200],[10700,10100,300,300],[10850,5950,150,300],[10100,-10700,300,300],[-10700,-10700,300,300],[10700,-10700,300,300],[10700,10700,300,300],[-10700,10700,300,300],[-10100,10400,300,600],[-10700,8600,300,600],[-9800,8900,600,300],[-10250,8450,150,150],[-10700,1300,300,300],[-1300,10700,300,300],[-9700,9950,100,150],[-10700,6650,300,450],[-10700,7250,300,150],[-10250,7400,150,300],[-10100,6500,300,300],[-10100,5300,300,300],[-10550,5300,150,300],[-10850,4700,150,300],[-10400,4700,300,300],[-9800,4900,300,100],[-10100,4100,300,300],[-10850,3e3,150,800],[-10400,2500,300,300],[-8750,10100,150,300],[-8300,10250,300,150],[-7700,10400,300,600],[-7100,10100,300,300],[-6500,10850,300,150],[-5900,10100,300,300],[-5600,10700,600,300],[-5450,10250,150,150],[-4400,10400,600,600],[-3500,10550,300,450],[-2900,10700,300,300],[-2400,10850,200,150],[-1600,10100,600,300],[10700,1300,300,300],[1450,10100,450,300],[2500,10700,300,300],[2500,10100,300,300],[3700,10100,300,300],[4300,10400,300,600],[3100,10850,300,150],[4e3,9650,150,150],[3650,9600,200,200],[5200,10550,600,150],[6400,10400,600,600],[5050,10100,150,300],[5350,10100,150,300],[7300,10100,300,300],[8e3,10850,150,150],[7700,10850,150,150],[8e3,10250,150,450],[9050,10400,900,600],[1300,9500,300,300],[2500,9700,100,100],[5600,10300,100,100],[4700,10300,100,100],[10550,9500,150,300],[10850,9350,150,150],[10250,9350,150,150],[9400,9500,300,300],[10550,8300,450,300],[9800,9650,100,150],[9e3,9700,100,100],[1e4,8500,100,100],[10400,7700,300,300],[1e4,7550,100,450],[10200,7300,100,100],[9800,8300,300,100],[10400,6550,300,300],[9950,6400,150,150],[1e4,6650,100,100],[10550,5650,150,600],[10300,5150,100,100],[10600,4950,100,100],[9950,6150,450,100],[10400,4550,300,300],[10400,3750,100,100],[10400,3500,300,150],[10400,3200,50,150],[10150,3200,50,150],[10650,3200,50,150],[10700,2750,300,300],[10750,2200,250,250],[10826,1777,175,175],[10800,6350,100,100],[10800,5250,100,400],[10800,9600,100,100],[10700,-1300,300,300],[1300,-10700,300,300],[-1300,-10700,300,300],[10050,2150,450,300],[10400,-1900,600,300],[9950,-2500,450,300],[10100,-3100,300,300],[10850,-3100,150,300],[10500,-2300,100,100],[10900,-2700,100,100],[9400,-2300,100,100],[9700,-2900,100,100],[10800,-3550,200,150],[10050,-3550,250,150],[9950,-4e3,150,300],[10700,-4600,300,300],[10900,-4200,100,100],[10200,-4750,200,150],[10600,-5e3,100,100],[9950,-5650,150,450],[10550,-5800,450,300],[10200,-5400,100,100],[9700,-5700,100,400],[9550,-5900,50,200],[9650,-6200,100,100],[10400,-7300,300,300],[10550,-6850,450,150],[10600,-6600,100,100],[1e4,-7e3,100,100],[10800,-7100,100,100],[10850,-7800,150,600],[10450,-7850,250,250],[10600,-8200,100,100],[10350,-8300,150,200],[10700,-9300,300,300],[10300,-9300,100,100],[10300,-10300,100,100],[8900,-10400,300,600],[10100,-10200,100,200],[9900,-10050,100,350],[9700,-10400,100,100],[8300,-10700,300,300],[8400,-10200,200,200],[8500,-9900,100,100],[7900,-10250,300,150],[7900,-10500,100,100],[-2700,-10100,100,300],[-1600,-10300,300,100],[-1250,-10350,50,50],[-2500,-10700,300,300],[6900,-10700,300,300],[7300,-10800,100,200],[5200,-10800,200,200],[5700,-10700,300,300],[5900,-10300,100,100],[4700,-10700,300,300],[6600,-10300,200,100],[4150,-10750,250,250],[3700,-10800,200,200],[3350,-10850,150,150],[3100,-10900,100,100],[2700,-10700,300,300],[2300,-10700,100,200],[4500,-10300,100,100],[3400,-10600,100,100],[6100,-10900,100,100],[5500,-10300,100,100],[1300,-10300,100,100],[1500,-10100,100,300],[1700,-10100,100,100],[4200,-10300,200,200],[-1500,-10100,100,100],[-3100,-10700,300,300],[-3e3,-10200,200,200],[-3250,-10350,50,50],[-2500,-9900,100,100],[-4600,-10250,300,150],[-4300,-10700,300,300],[-4200,-10300,100,100],[-8300,-9950,300,150],[-5650,-10250,150,150],[-6e3,-10800,200,200],[-5900,-10500,100,100],[-5900,-10300,100,100],[-4700,-10500,100,100],[-5700,-10900,100,100],[-4700,-10700,100,100],[-7700,-10700,300,300],[-7400,-10200,200,200],[-6150,-10200,150,400],[-5900,-10100,100,100],[-6400,-10300,100,100],[-8900,-10400,300,600],[-8500,-10200,100,100],[-7100,-10550,300,150],[-9500,-10700,300,300],[-9500,-10200,200,200],[-10300,-10500,100,100],[-9900,-10900,100,100],[-8700,-9700,100,100],[-7100,-10300,100,100],[-10200,-1e4,200,200],[-10400,-9350,300,150],[-10400,-9050,600,150],[-1e4,-9300,100,100],[-10700,-8750,300,150],[-9950,-8750,150,150],[-10100,-8e3,300,300],[-10700,-7850,300,150],[-10500,-8100,100,100],[-10300,-8800,100,100],[-9700,-8e3,100,100],[-10700,-1300,300,300],[-10300,-7550,400,150],[-10600,-6900,100,100],[-10450,-6650,550,150],[-10400,-7100,100,100],[-10200,-7300,100,100],[-10700,-6200,300,300],[-10250,-6350,150,150],[-10300,-6100,100,100],[-10850,-5750,150,150],[-10700,-5150,300,150],[-10500,-4850,500,150],[-10300,-5100,100,100],[-10650,-4600,350,100],[-10300,-3750,100,300],[-10700,-3750,300,150],[-10100,-3950,100,100],[-10450,-3950,50,50],[-10600,-5800,100,100],[-10700,-3300,300,300],[-10700,-2300,300,700],[-10200,-3250,200,200],[-10100,-2750,300,300],[-10300,-2350,100,100],[-10350,-1850,50,400],[-10300,-1350,100,100],[2200,-2200,200,200],[-2200,-2200,200,200],[-1800,-2400,200,400],[-1500,-2300,100,100],[-2100,-2500,100,100],[-1400,-2500,200,100],[100,-2e3,100,200],[100,-2700,300,300],[100,-2300,100,100],[-300,-2700,100,200],[500,-2500,100,100],[1600,-2200,400,200],[1600,-2500,150,100],[1800,-2450,50,50],[300,-3100,100,100],[2150,-1600,150,400],[1950,-1050,350,150],[2450,-1200,150,150],[2400,-1900,100,100],[2500,-1550,200,200],[2300,1700,300,300],[2100,1300,100,100],[2400,1200,200,200],[2500,100,200,200],[2800,700,200,200],[2150,250,150,150],[1500,2150,500,150],[900,2100,100,100],[550,2250,250,250],[1200,2400,100,100],[1500,2500,200,200],[-1650,1850,350,350],[-1100,2200,200,200],[1800,1800,200,200],[-1200,1900,100,100],[-1650,2300,100,100],[-1100,2500,100,100],[-2200,1800,200,200],[-2100,700,100,100],[-2400,1e3,400,200],[-2400,600,200,200],[-2400,300,100,100],[-2100,-1700,300,300],[-1700,-1650,100,100],[-1500,-1650,100,100],[-2250,-1e3,400,400],[2800,1e3,100,100],[2800,100,100,100],[2150,0,100,100],[-2100,-500,100,100],[-2450,-350,250,250],[-2750,-1050,100,100],[-2500,-2e3,100,100],[-2900,-350,200,200],[550,2600,100,100],[6150,-4450,300,600],[7050,2750,600,600],[-250,3800,100,600],[-3800,-350,600,200],[-5100,-750,300,600],[-6500,-650,500,500],[-6100,-1250,100,100],[-6900,-50,100,100],[-7100,-1050,100,100],[-5900,-250,100,100],[-7800,-800,600,150],[-7800,400,100,350],[-7800,-100,150,150],[-7600,400,100,100],[-8e3,150,100,100],[-8700,-800,300,300],[-9600,-1e3,300,300],[-9600,-600,100,100],[-9700,-400,100,100],[-9400,-500,100,100],[-9600,-1400,100,100],[-9800,-1500,100,100],[-1e4,-650,100,300],[-3900,-1900,500,500],[-6700,600,300,300],[-6450,1e3,250,100],[-6950,1150,250,250],[-7150,750,150,150],[-10250,1150,150,150],[-8800,1750,750,750],[-9400,1600,50,300],[-9250,1350,100,50],[-9250,1850,100,50],[-9300,1600,50,50],[-9200,1750,50,50],[-9200,1450,50,50],[-9050,1600,50,300],[-8950,1850,50,50],[-8800,1600,50,300],[-8700,1350,50,50],[-8700,1550,50,50],[-8600,1600,50,300],[-9250,1550,50,50],[-9250,1650,50,50],[-8450,1600,50,300],[-8350,1350,50,50],[-8350,1850,50,50],[-8250,1600,50,200],[-7900,1750,150,750],[-8100,1600,50,300],[-7950,1850,100,50],[-7950,1600,100,50],[-7950,1350,100,50],[-6450,1750,750,100],[-6450,1950,500,100],[-5650,850,250,250],[-4450,950,350,350],[-4900,700,100,100],[-3850,850,250,250],[-4100,450,150,150],[-4350,500,100,100],[-3850,500,100,100],[-5250,1500,150,150],[-3900,2150,350,350],[-4450,2150,200,200],[-3300,3300,300,300],[-3800,3300,200,200],[-2500,3700,500,500],[-3250,3850,250,250],[-1900,3950,100,100],[-1750,3600,250,250],[-3500,-3500,500,500],[-450,3650,100,100],[-50,4150,100,100],[-4800,3700,300,300],[-4800,4500,1e3,500],[-5350,3750,250,250],[-4350,3850,150,150],[-6450,2550,500,500],[-8900,5900,300,300],[-8450,5750,150,450],[-8150,6050,150,350],[-8200,5600,100,100],[-6800,5900,500,500],[-7650,5850,100,100],[-6600,4750,500,250],[-8600,6900,600,100],[-9200,7300,300,300],[-8100,7200,800,200],[-7850,8300,500,350],[-7e3,8550,350,500],[-7450,8750,100,100],[-8300,9200,100,100],[-4800,5300,300,300],[-5200,5400,100,400],[-4400,5400,100,400],[-4100,5200,200,200],[-5400,5100,100,100],[-2650,5350,400,400],[-2650,5850,700,100],[-2950,4800,250,150],[-2600,4850,100,100],[-2150,5650,100,100],[-5e3,7e3,500,350],[-4e3,7e3,500,250],[-4400,7350,100,100],[-5400,6550,100,100],[-5600,6800,100,100],[-5050,7450,100,100],[-4700,8650,1e3,500],[-3450,8650,250,250],[-4600,8e3,700,150],[-4850,9250,700,100],[-2250,8950,350,300],[-1800,8300,400,350],[-1700,8850,200,200],[-2500,8350,300,300],[-2700,9100,100,100],[-2500,9350,100,100],[-1400,8750,100,100],[-2300,7950,100,100],[-1650,7850,100,100],[150,8500,1e3,250],[100,8800,750,50],[150,7500,100,750],[-150,7900,200,350],[-450,8150,100,100],[-50,7450,100,100],[550,7950,300,300],[600,7050,350,600],[-200,4750,350,350],[-50,5450,100,350],[150,5200,100,100],[-1600,6800,350,350],[-1600,6350,100,100],[-1150,6800,100,100],[-2050,6800,100,100],[-1600,7250,100,100],[2550,7850,300,900],[3150,7850,300,300],[3750,8150,300,600],[3750,6350,300,600],[3150,6050,300,300],[2250,6050,600,300],[100,9150,600,300],[4350,7850,300,300],[4950,6350,300,600],[5550,7250,300,1500],[7350,6650,300,300],[7350,7850,900,900],[7950,6050,900,300],[8550,8450,300,300],[7050,9050,600,300],[6150,4250,300,300],[7350,4850,1500,300],[4050,4850,600,300],[1650,4850,1200,300],[2550,4250,300,300],[750,4250,300,300],[7350,3650,300,300],[8550,4250,300,300],[7950,3050,300,300],[1950,4250,300,300],[1950,3650,300,300],[4950,2450,900,900],[4350,4250,300,300],[4950,4850,300,300],[4650,1250,1200,300],[6450,-250,600,600],[4350,50,300,300],[3750,50,300,300],[4350,-550,300,300],[5550,-250,300,600],[8850,1550,600,600],[8250,650,600,300],[6750,1850,300,300],[7950,-550,300,300],[8250,-1150,600,300],[6150,-1150,300,300],[8550,-1750,300,300],[7050,-2350,600,300],[3750,-1750,300,300],[4650,-1750,600,300],[6150,-2950,900,300],[3750,-2350,300,300],[6750,-3550,300,300],[8550,-3550,300,900],[7950,-3850,300,600],[4950,-3850,300,600],[3750,-3550,300,300],[8250,-5950,600,900],[6150,-7150,300,300],[6450,-6250,600,600],[3750,-4750,300,300],[4650,-5950,600,300],[7950,-8350,900,900],[6150,-8650,300,600],[4650,-8050,600,1200],[3150,-8650,900,600],[2550,-4150,300,900],[3150,-2350,300,300],[1950,-5950,300,300],[1650,-6550,600,300],[1950,-7150,900,300],[1350,-8650,300,600],[1650,-3550,600,300],[1950,-4150,300,300],[-2850,-7150,300,300],[-1950,-8650,600,600],[-1650,-7450,300,600],[-4050,-8950,900,300],[-1950,-5950,600,300],[-3450,-8350,300,300],[-1950,-3850,600,600],[-2850,-5650,300,600],[-4050,-7450,900,600],[-3750,-5350,600,300],[-4650,-6550,300,300],[-6450,-7150,300,300],[-6150,-8650,600,600],[-5250,-6550,300,300],[-7600,-4750,1500,1500],[-8500,-6850,600,600],[-7600,-7150,300,300],[-8800,-8350,300,900],[-7350,-8950,600,300],[-7e3,-2950,900,300],[-5500,-2650,600,600],[-3700,-4300,300,300],[-4600,-4300,600,300],[-4650,-5350,300,300],[-8200,-2350,900,300],[-7e3,-2050,300,600]],m4:[[-2299,-2299,100,100],[-1401,-2299,800,100],[-2299,-1399,100,800],[-2301,2301,100,100],[-1401,2301,800,100],[-2301,1401,100,800],[2299,2301,100,100],[1399,2301,800,100],[2299,1399,100,800],[2301,-2301,100,100],[2301,-1399,100,800],[1399,-2301,800,100]],m5:[[-6150,-6300,1200,150],[-6900,-4500,450,150],[-6750,-3600,600,150],[-7050,-1500,300,150],[-7050,1800,300,150],[-7050,2700,300,150],[-6450,7200,900,150],[-6e3,6300,750,150],[-6e3,-3900,450,150],[-5700,1500,750,150],[-5850,2100,600,150],[-6150,5700,300,150],[-5700,-6900,450,150],[-5700,0,450,150],[-5850,3300,300,150],[-5550,-4200,300,150],[-4950,-3300,300,150],[-4950,6900,300,150],[-4500,-2100,450,150],[-4650,-1500,300,150],[-3900,2100,1050,150],[-4650,2700,300,150],[-4650,6600,300,150],[-4350,-6e3,300,150],[-4200,-3600,450,150],[-4050,-6900,300,150],[-4050,-900,300,150],[-4050,300,300,150],[-3600,6900,750,150],[-3150,-3e3,900,150],[-3750,1500,300,150],[-3450,-6600,300,150],[-2550,-6e3,1200,150],[-3450,-2400,300,150],[-3450,3300,300,150],[-2850,-6900,600,150],[-2850,-4500,600,150],[-3e3,-1200,450,150],[-3e3,4200,450,150],[-2850,4800,300,150],[-2550,-5100,300,150],[-2550,-3600,300,150],[-2550,0,300,150],[-2550,1500,300,150],[-2100,3300,750,150],[-1200,-7200,750,150],[-1650,-5400,300,150],[-1500,-4500,450,150],[-1200,6e3,750,150],[-300,-5700,1350,150],[-1350,-2700,300,150],[-1350,-2100,300,150],[-1200,1200,450,150],[-1200,3e3,450,150],[-1350,4200,300,150],[-1200,4800,450,150],[-750,2700,300,150],[-750,3300,300,150],[150,-4500,900,150],[150,5700,900,150],[300,-2700,750,150],[150,-3900,300,150],[150,900,300,150],[300,2700,450,150],[1200,-3300,1050,150],[450,4200,300,150],[1050,-5100,600,150],[1050,5400,300,150],[2250,6600,1500,150],[1500,300,450,150],[2250,900,1200,150],[1350,4200,300,150],[1350,4800,300,150],[1650,-6300,300,150],[2100,-4200,750,150],[1950,6e3,600,150],[2100,-5700,450,150],[2700,3e3,1050,150],[1950,5400,300,150],[2550,-3e3,600,150],[2250,1800,300,150],[2550,-6e3,300,150],[2550,0,300,150],[3e3,2400,750,150],[3450,4800,900,150],[3150,-2100,300,150],[3300,-900,450,150],[3150,5700,300,150],[3450,-5700,300,150],[3450,600,300,150],[3900,1800,450,150],[4200,-3300,450,150],[4200,6e3,450,150],[4650,-5400,600,150],[4350,-2700,300,150],[4650,2100,600,150],[4800,-4800,450,150],[4950,1200,600,150],[4800,4200,450,150],[4950,5400,600,150],[6e3,-2400,1350,150],[4950,3e3,300,150],[5400,-6600,450,150],[5550,2700,600,150],[5700,-7200,450,150],[5550,-3e3,300,150],[5700,900,450,150],[5850,5700,600,150],[5850,-5700,300,150],[6300,-1800,750,150],[6450,3300,900,150],[5850,3900,300,150],[6150,1200,300,150],[6300,2400,450,150],[6150,6900,300,150],[6750,5100,300,150],[-7200,-7200,150,150],[-4800,-7200,150,150],[-2400,-7200,150,150],[1800,-6900,150,450],[7200,-6900,150,450],[-1800,-6750,150,300],[-1200,-6600,150,450],[5400,-6900,150,150],[-2400,-6450,150,300],[4200,-6300,150,450],[-600,-6e3,150,150],[300,-6e3,150,150],[1800,-6e3,150,150],[3300,-6e3,150,150],[-5700,-5700,150,150],[-5100,-5700,150,150],[5100,-5700,150,150],[-6300,-5400,150,150],[-3900,-4950,150,600],[-3300,-5100,150,450],[1800,-5400,150,150],[2700,-5250,150,300],[3300,-4350,150,1200],[6900,-5400,150,150],[-5700,-5100,150,150],[-5100,-5100,150,150],[-1800,-4950,150,300],[-600,-5100,150,150],[5700,-4950,150,300],[-2700,-4800,150,150],[1800,-4800,150,150],[3900,-4800,150,150],[6900,-4800,150,150],[2700,-4500,150,150],[-6900,-4200,150,150],[-3300,-3900,150,450],[-1800,-4050,150,300],[0,-4200,150,150],[4200,-4200,150,150],[5700,-4200,150,150],[-3900,-3900,150,150],[900,-3900,150,150],[1800,-3900,150,150],[2700,-3600,150,450],[-1200,-3300,150,450],[-600,-3600,150,150],[300,-3600,150,150],[4200,-3600,150,150],[-3600,-3300,150,150],[-7200,-2700,150,450],[-4800,-2700,150,450],[-1800,-3e3,150,150],[300,-3e3,150,150],[4500,-3e3,150,150],[6300,-3e3,150,150],[6900,-2850,150,300],[-2700,-2100,150,750],[2700,-2550,150,300],[-1500,-2400,150,150],[900,-2400,150,150],[4200,-900,150,1650],[-6900,-1950,150,300],[-3600,-1800,150,450],[5100,-2100,150,150],[-4800,-1800,150,150],[300,-1800,150,150],[3e3,-1650,150,300],[-900,-1500,150,150],[2400,-900,150,750],[3600,-1350,150,300],[6900,-1500,150,150],[-6900,-1200,150,150],[-4800,-600,150,750],[-2700,-600,150,450],[-2100,-900,150,150],[1500,-900,150,150],[4800,-900,150,150],[5400,-900,150,150],[-4200,-450,150,300],[6600,-600,150,150],[6300,150,150,600],[5400,300,150,450],[-6600,300,150,150],[2700,450,150,300],[3600,300,150,150],[-6e3,600,150,150],[-5400,750,150,300],[-3900,900,150,450],[4800,600,150,150],[7200,750,150,300],[-4500,1200,150,450],[-3300,900,150,150],[-2400,1050,150,300],[4500,900,150,150],[-5100,1200,150,150],[2400,1350,150,300],[3300,1200,150,150],[3900,1350,150,300],[-6900,1500,150,150],[-1500,1500,150,150],[-900,1500,150,150],[600,1500,150,150],[4500,1500,150,150],[6e3,1650,150,300],[6600,1800,150,450],[-5400,1800,150,150],[-3900,1800,150,150],[-2400,2100,150,450],[1200,1800,150,150],[5100,1800,150,150],[600,2250,150,300],[1800,2100,150,150],[-6e3,2700,150,450],[-900,2400,150,150],[1200,3e3,150,750],[4200,2700,150,450],[-5400,2700,150,150],[-1500,2700,150,150],[1800,2700,150,150],[6600,2700,150,150],[600,3e3,150,150],[7200,3e3,150,150],[3600,3450,150,300],[-6e3,3600,150,150],[-4200,3600,150,150],[-3300,3750,150,300],[-2400,3750,150,300],[0,3600,150,150],[600,3600,150,150],[3e3,4050,150,600],[5700,3600,150,150],[-1200,3900,150,150],[1500,3900,150,150],[2400,3900,150,150],[6e3,4800,150,750],[6600,4500,150,450],[-5700,4500,150,150],[-5100,4500,150,150],[-3600,5400,150,1050],[-2700,4500,150,150],[1200,4500,150,150],[2100,4500,150,150],[4800,4500,150,150],[7200,4650,150,300],[-5700,5100,150,150],[-5100,5100,150,150],[-3e3,5700,150,750],[-2400,5400,150,450],[-1500,5550,150,300],[3900,5550,150,300],[6900,5550,150,300],[-5400,5850,150,300],[4500,5700,150,150],[-4800,6150,150,300],[300,6300,150,450],[900,6150,150,300],[3e3,6150,150,300],[5400,6600,150,750],[6300,6300,150,450],[-1800,6750,150,600],[-1200,6300,150,150],[-600,6300,150,150],[2400,6300,150,150],[4500,6600,150,450],[-6600,6750,150,300],[-3900,6600,150,150],[0,6900,150,150],[900,7050,150,300],[-4800,7200,150,150],[3900,7200,150,150],[6300,7200,150,150],[8650,4925,1e3,4725],[8650,-4925,1e3,4725],[-8650,4925,1e3,4725],[-8650,-4925,1e3,4725],[3925,8650,3725,1e3],[3925,-8650,3725,1e3],[-3925,8650,3725,1e3],[-3925,-8650,3725,1e3]]},saveWalls:function($,e){if(!e||e.length<=0)return"Failed: Invalid name";let t=$.walls.slice($.defaultWalls);return t.length>0?(dimension.savedWalls[e]=JSON.parse(JSON.stringify(t)),`Success: saved as ${e}`):"Failed: No walls to save"},loadWalls:function($,e,t){if(!e)return"Failed: Invalid name";let a=t?e:dimension.savedWalls[e];if(!a)return"Failed: Invalid name";a=JSON.parse(JSON.stringify(a));let n=$.walls.length;if(n>$.defaultWalls){for(let i=$.defaultWalls;i=0;a--){let n=t[a];n.static||n.ws.data.isPlayer||n.remove()}for(let i=e.tanks.length-1;i>=0;i--)e.tanks[i].removeBullets();for(let s=e.polygons.length-1;s>=0;s--)e.polygons[s].remove()}},antibot:function(){for(let $ in dimension.dims){let e=dimension.dims[$].tanks;for(let t=e.length-1;t>=0;t--){let a=e[t];!a.static&&a.ws.data.isPlayer&&a.score<1e4&&(a.remove(),a.ws.close())}}},sendTankTo:function($){if(!$.tank.alive)return;$.tank.alive=!1;let e=$.dim;$.dim=dimension.dims[e];let t={dim:$.dim,ai:$.tank.aiInput,aiRam:$.tank.aiRam,polygon:$.tank.polygon,invisible:$.tank.invisible,noKillNotification:$.tank.noKillNotification,forceDeathScore:$.tank.forceDeathScore,x:$.x||0,y:$.y||0,d:$.tank.d,upgrades:$.tank.upgrades,upgradeCount:$.tank.upgradeCount,radiant:$.tank.radiant,name:$.tank.name,team:$.tank.team,score:$.tank.score,weapon:$.tank.weapon,body:$.tank.body,passive:$.tank.passive};if($.tank.team&&($.tank.ws.data.lastTeam=$.tank.team),$.dim)$.dim.newTanks.push([t,$.tank.ws,$.tank.dim.name]),$.tank.remove(!0);else if(!dimension.isolate||$.override){if($.tank.ws.data.isPlayer){if($.tank.ws.data.uid>=0){if(delete t.aiRam,delete t.ai,delete t.dim,t.commands=$.tank.ws.data.commands,$.tank.ws.accountData){let a=Math.floor((_performance.now()-$.tank.ws.timeStart)/1e3);$.tank.ws.accountData.timeAlive+=a}args.parentPort.postMessage(["send",[$.tank.ws.data.uid,e,[t,$.tank.dim.name],$.tank.ws.accountData,$.tank.ws.accountName]])}}else"string"!=typeof $.tank.ai&&$.tank.ai||(delete t.dim,t.commands={},args.parentPort.postMessage(["sendBot",[e,[t,$.tank.dim.name]]]));$.tank.remove(!0)}},getBulletSpeed:function($,e){let t=4.5*$.speed*(1+e.upgrades[1]/30);return 1===$.type||3===$.type?t*=1.5:(2===$.type||4===$.type)&&(t=2.3*$.speed*(1+e.upgrades[1]/60)),t},getBulletData:function($,e){let t=1,a=1;return 0===$?(a=1.5,t=100):1===$?(a=12,t=600):2===$?(a=0,t=100):3===$?(a=12,t=600):4===$&&(a=0,t=100),[a,t/=1+e.upgrades[1]/30]},aimAtTarget:function($,e,t){t*=2;let a=e.x-$.x,n=e.y-$.y,i=e.xv*e.xv+e.yv*e.yv-t*t,s=2*(a*e.xv+n*e.yv),o=s*s-4*i*(a*a+n*n);if(!(o>0))return[a,n];{let _=Math.sqrt(o),r=[(-s+_)/(2*i),(-s-_)/(2*i)];if(r[0]>0&&r[1]>0)r=r[0]0)r=r[0];else{if(!(r[1]>0))return[a,n];r=r[1]}let d;return[a+r*e.xv,n+r*e.yv]}},wallRestitution:.1,averageAngles:function($,e,t){let a=2*Math.PI;$=($%a+a)%a;let n=(a+e-$)%a;return n>Math.PI?(($+(n-a)/(t+1))%a+a)%a:(($+n/(t+1))%a+a)%a},confine:function($,e,t){$.x<-e?($.x=-e,$.xv=Math.abs($.xv*dimension.wallRestitution)+t):$.x>e&&($.x=e,$.xv=-Math.abs($.xv*dimension.wallRestitution)-t),$.y<-e?($.y=-e,$.yv=Math.abs($.yv*dimension.wallRestitution)+t):$.y>e&&($.y=e,$.yv=-Math.abs($.yv*dimension.wallRestitution)-t)},getRadiantMultiplier:function($){return $<=0?1:$<=1?1===$?25:Math.pow(25,$):25*Math.pow(4,$-1)},dims:{},isSameTeam:function($,e){return $&&e&&($===e||$.team&&$.team===e.team||$.parent&&($.parent===e.parent||$.parent===e)||e.parent&&e.parent===$)},isolate:!1,create:function($){if(!($.name in dimension.dims)){let e=$.darkness>0?Math.round(100*$.darkness):0,t=$.maxPolygonCount||0;args.lessPolygons&&(t*=.1);let a={playerCount:function(){let $=0;for(let e=a.tanks.length-1;e>=0;e--){let t=a.tanks[e];t.ws&&t.ws.data&&t.ws.data.isPlayer&&$++}return $},sizeScale:$.sizeScale>=0?$.sizeScale:1.01,entryMessage:$.entryMessage||!1,exitMessage:$.exitMessage||!1,ambientParticles:$.ambientParticles||[],sandbox:!!$.sandbox,noPolygons:!!$.noPolygons,forceRespawnScore:$.forceRespawnScore,removeFallens:!!$.removeFallens,autoScale:$.autoScale||!1,allowScale:!!$.allowScale,onDeath:$.onDeath||function(){},onUpdate:$.onUpdate||function(){},freeJoin:!!$.freeJoin,fillWalls:!!$.fillWalls,displayName:$.displayName||"",displayColor:$.displayColor||0,displayRadiant:$.displayRadiant||0,friction:!0,nextSpawnPolyhedra:!1,lastPolyhedra:0,mapSize:$.mapSize||100,_mapSize:0,mapSizeSpeed:0,lastMapSize:$.mapSize||100,gridSize:$.gridSize||30,background:$.background,grid:$.grid,maxPolygonSides:$.maxPolygonSides||0,_maxPolygonSides:$.maxPolygonSides||0,maxPolygonCount:t,_maxPolygonCount:t,name:$.name,tanks:[],type:$.type||"ffa",ids:{tank:[],bullet:[],polygon:[],wormhole:[]},spawnPlayer:$.spawnPlayer||function(){return[0,0]},spawnPolygon:$.spawnPolygon||!1,newTanks:[],darkness:e,darknessUpdated:!1,setDarkness:function($){let e=$>0?Math.round(100*$):0;e!==a.darkness&&(a.darkness=e,a.darknessUpdated=!0)},resizedWormholes:{},rupturedWormholes:{},fadeTimeChanges:{},removedWormholes:{},addedWormholes:{},updatedTanks:{},updatedGates:{},updatedPortals:{},updatedWalls:{},removedWalls:{},bullets:[],polygons:[],bases:[],walls:$.walls||[],defaultWalls:0,gates:$.gates||[],wormholes:{},chatMessages:{},leaderboard:[],leaderboardChanges:{},remove:function(){dimension.dims[a.name]===a&&delete dimension.dims[a.name]},add:function($,e){let t=a[$];0>t.indexOf(e)&&t.push(e)},delete:function($,e){let t=a[$],n=t.indexOf(e);n>=0&&t.splice(n,1)},broadcast:function($){for(let e=a.tanks.length-1;e>=0;e--){let t=a.tanks[e];t.ws&&t.ws.sendPacket&&t.ws.sendPacket("announcement",$)}}};if(a.defaultWalls=a.walls.length,"ffa"===a.name||"4teams"===a.name||"2teams"===a.name){let n=function(){let $=Math.floor(4*Math.pow(Math.random(),2)),e=`crasher${$+3}-0`,t=0;if(4096*Math.random()<1)for(t++;9*Math.random()<1;)t++;generator.tank({dim:a,x:(1-2*Math.random())*(a.mapSize-2e3),y:(1-2*Math.random())*(a.mapSize-2e3),name:"an Awakened "+["Triangle","Square","Pentagon","Hexagon"][$],weapon:e,body:e,noKillNotification:!0,score:5250*Math.pow(4,$),radiant:t,team:5,ai:"fallen",aiRam:!0,invincible:!1,onDeath:function(){setTimeout(n,1e4+2e4*Math.random())},polygon:!0})};for(let i=0;i<10;i++)setTimeout(n,1e4+2e4*Math.random());let s=!1,o=function(){let $=1+Math.floor(3*Math.pow(Math.random(),4)),e=(1-2*Math.random())*(a.mapSize-2e3),t=(1-2*Math.random())*(a.mapSize-2e3);generator.wormhole({x:e,y:t,size:175,type:1,time:300,dim:a,ruptured:!1,action:function($){dimension.sendTankTo({tank:$,dim:"abyssHallway"})}});let n=generator.tank({dim:a,x:e,y:t,name:"Peacekeeper",weapon:"peacekeeper"+$,body:"peacekeeper"+$,score:1e6*Math.pow(5,$),forceDeathScore:1e6*Math.pow(5,$),radiant:1,team:8,ai:"peacekeeper",invincible:!1}),i=2*Math.PI*Math.random();return n.xv=15*Math.sin(i),n.yv=15*Math.cos(i),n.d=-i,n};setTimeout(function(){s=o(),setInterval(function(){s.alive||(s=o())},18e5)},1e4+0*Math.random())}return dimension.dims[a.name]=a,startTick(a),a}},reset:function($){for(let e=$.tanks.length-1;e>=0;e--){let t=$.tanks[e];t._d=[],t.firedBarrels={},t.lastLevelSent!==t.level&&(t.lastLevelSent=t.level)}$.updatedTanks={},$.chatMessages={},$.updatedGates={},$.resizedWormholes={},$.rupturedWormholes={},$.fadeTimeChanges={},$.removedWormholes={},$.addedWormholes={},$.updatedPortals={},$.updatedWalls={},$.removedWalls={},$.mapSizeUpdated=!1,$.darknessUpdated=!1},bounceCircles:function($,e,t,a,n){let i=Math.sqrt(t.distance)||0;i<=1&&(i=1);let s=(t.size-i+1)*.01*a;s>.5?s=.5:s$.size?c=(c=u/p)*c:d=(d=p/u)*d,(!$.static||$.canBePushed)&&(d*=dimension.tickMultiplier/($.density||1),$.xv+=_*d,$.yv+=r*d),(!e.static||e.canBePushed)&&(c*=dimension.tickMultiplier/(e.density||1),e.xv+=-_*c,e.yv+=-r*c)},collideWall:function($){let e=$.rect,t=$.circle.object;if($.cinX||$.cinY){if($.cinX&&$.cinY)Math.abs((t.y-e.y)*e.w)>Math.abs((t.x-e.x)*e.h)?t.y>e.y?t.y=$.rect.top+$.size:t.y=$.rect.bottom-$.size:t.x>e.x?t.x=$.rect.right+$.size:t.x=$.rect.left-$.size,"tank"!==t.objectType&&t.remove();else{if($.cinY&&$.inX){let a=t.x>e.x;a?t.x=$.rect.right+$.size:t.x=$.rect.left-$.size,t.xv=(a?1:-1)*Math.abs(t.xv*dimension.wallRestitution)}if($.cinX&&$.inY){let n=t.y>e.y;n?t.y=$.rect.top+$.size:t.y=$.rect.bottom-$.size,t.yv=(n?1:-1)*Math.abs(t.yv*dimension.wallRestitution)}}}else{let i=Math.sqrt($.distance);i<.1&&(i=.1);let s=t.size/i;t.x=$.cx+(t.x-$.cx)*s,t.y=$.cy+(t.y-$.cy)*s}},bounceGate:function($,e,t){t*=dimension.tickMultiplier,(0===$.d)+(2===$.d)?e.xv>0?(e.xv=-t,e.x=$.left-e.size-1):(e.xv=t,e.x=$.right+e.size+1):e.yv>0?(e.yv=-t,e.y=$.bottom-e.size-1):(e.yv=t,e.y=$.top+e.size+1)},collideGate:function($,e){let t=$.rect,a=t.object[5];if(2===t.gateType||e.timeExisted<1){let n=t.d<2?30:-30;0===t.d||2===t.d?e.xv=n:e.yv=n,1===t.gateType&&e.radiant>0&&(t.object[5]=!0,t.object[6]=75)}else 1===t.gateType?a||e.parent&&e.parent.radiant>0||(e.radiant>0?(t.object[5]=!0,t.object[6]=75):0===t.d||2===t.d?e.xv>0?(e.xv=-30,e.x=t.left-e.size-1):(e.xv=30,e.x=t.right+e.size+1):e.yv>0?(e.yv=-30,e.y=t.bottom-e.size-1):(e.yv=30,e.y=t.top+e.size+1)):0===t.gateType?e.level>=60&&7!==e.team?6!==e.team&&(e.ascend(),e.ws&&e.ws.sendPacket&&e.ws.sendPacket("setStats",e.upgrades)):dimension.bounceGate(t,e,30):3!==t.gateType||a||([e.xv>0,e.yv>0,e.xv<0,e.yv<0][t.d]?(t.object[5]=!0,t.object[6]=15,0===t.d||2===t.d?e.xv=2===t.d?-100:100:e.yv=3===t.d?-100:100):0===t.d||2===t.d?2===t.d?(e.xv=-30,e.x=t.left-e.size-1):(e.xv=30,e.x=t.right+e.size+1):3===t.d?(e.yv=-30,e.y=t.bottom-e.size-1):(e.yv=30,e.y=t.top+e.size+1))},polygonDamage:3,bulletDamage:1,checkAngle:function($,e,t,a){return dimension.validateAngle(Math.atan2(-t,a),$,e)},validateAngle:function($,e,t){return!(t<=0)&&(!(e<=0)&&!(e>=0)||!(t>0)||Math.abs((($-e+Math.PI)%(2*Math.PI)+2*Math.PI)%(2*Math.PI)-Math.PI)<=t)},clampAngle:function($,e,t){if((e<=0||e>=0)&&t>0){let a=(($-e+Math.PI)%(2*Math.PI)+2*Math.PI)%(2*Math.PI)-Math.PI;if(!(Math.abs(a)<=t))return a<0?e-t:e+t}return $},collide:function($,e,t){let a={tank:0,detectEnemies:1,bullet:2,polygon:3,detectFriends:4,wall:5,gate:6,wormhole:7},n=$.object,i=e.object;if(a[$.type]>a[e.type]&&([$,e]=[e,$],[n,i]=[i,n]),"tank"===$.type){if("tank"===e.type)dimension.bounceCircles(n,i,t,1,.2),dimension.isSameTeam(n,i)||n.invincible||i.invincible||(n.inBase||n.prevInBase||n.damage(10*dimension.tickMultiplier*i.bodyDamage*i.levelMultiplier*i.bodyDamageMultiplier,i,"tanks"),i.inBase||i.prevInBase||i.damage(10*dimension.tickMultiplier*n.bodyDamage*n.levelMultiplier*n.bodyDamageMultiplier,n,"tanks"));else if("detectEnemies"===e.type){if(!dimension.isSameTeam(e.parent,n)&&!(n.invincible||n.inBase||n.prevInBase)&&dimension.checkAngle(e.d,e.range,n.x-e.x,n.y-e.y)){e.objects.push(n);let s=Math.sqrt(t.distance)-t.size;e.distances.push(s),(s=0?n.bodyDamage:1)*n.levelMultiplier*(n.bodyDamageMultiplier>=0?n.bodyDamageMultiplier:1));let o=[0,1,2,1,2,0][i.type];0===o?dimension.bounceCircles(n,i,t,.02,0):1===o?dimension.bounceCircles(n,i,t,.5,0):dimension.bounceCircles(n,i,t,.02,0)}}}else if("polygon"===e.type)dimension.bounceCircles(n,i,t,1,.2),n.invincible||5===n.team||(n.inBase||n.prevInBase||n.ignorePolygonDamage||n.damage(dimension.tickMultiplier*dimension.polygonDamage,i,"polygons"),i.damage(10*dimension.tickMultiplier*n.bodyDamage*n.levelMultiplier*n.bodyDamageMultiplier,n,"tanks"));else if("detectFriends"===e.type){if(dimension.isSameTeam(e.parent,n)){e.objects.push(n);let _=Math.sqrt(t.distance)-t.size;e.distances.push(_),(_=60||i.ruptured)&&!(n.invincible&&n.invincibleTime||n.static)){i._objects[n.id]=n;let r=i.x-n.x,d=i.y-n.y,c=r*r+d*d,u=.01*(c>1?1/Math.sqrt(c):1);n.xv+=r*u,n.yv+=d*u}else dimension.bounceCircles(n,i,t,1,.5)}else if(1===i.type){if((n.radiant>0||i.ruptured)&&!(n.invincible&&n.invincibleTime||n.static)){i._objects[n.id]=n;let p=i.x-n.x,m=i.y-n.y,f=p*p+m*m,g=.01*(f>1?1/Math.sqrt(f):1);n.xv+=p*g,n.yv+=m*g}else dimension.bounceCircles(n,i,t,1,.5)}else i._objects[n.id]=n}}else dimension.isSameTeam(n,i)?e.noInvincibility||(n.inBase=!0):(dimension.collideWall(t,n),e.object.team>=0&&!(n.inBase||n.prevInBase||n.static||n.invincible)&&n.maxHealth&&(n.health-=dimension.tickMultiplier*n.maxHealth*.003,n.regenTime=0))}else if("detectEnemies"===$.type){if("polygon"===e.type){if(5!==$.parent.team&&dimension.checkAngle($.d,$.range,i.x-$.x,i.y-$.y)){$.objects.push(i);let y=Math.sqrt(t.distance)-t.size;$.distances.push(y),(y<$.closest||!1===$.closest)&&($.closest=y,$.closestObject=i)}}else if("bullet"===e.type&&!dimension.isSameTeam($.parent,i.parent)){$.bullets&&$.objects.push(i);let h=Math.sqrt(t.distance)-t.size;$.bullets&&$.distances.push(h),(h<$.closestBulletDistance||!1===$.closestBullet)&&($.closestBulletDistance=h,$.closestBullet=i)}}else if("bullet"===$.type){if("bullet"===e.type){if(dimension.isSameTeam(n.parent,i.parent)){let k=[0,1,2,1,2,0][n.type];k===[0,1,2,1,2,0][i.type]&&(0===k||(1===k?dimension.bounceCircles(n,i,t,.5,0):dimension.bounceCircles(n,i,t,1,0)))}else if(n.health>=0&&i.health>=0){dimension.bounceCircles(n,i,t,.5,.1);let v=2,b=dimension.tickMultiplier*dimension.bulletDamage*i.barrel.data.damage*i.parent.levelMultiplier*v*i.damageMultiplier,w=dimension.tickMultiplier*dimension.bulletDamage*n.barrel.data.damage*n.parent.levelMultiplier*v*n.damageMultiplier,x=b>n.health,z=w>i.health;if(x||z){let T=n.health/b,S=i.health/w,P=T=0)||n.inBase||n.prevInBase||n.static||n.invincible||(n.damage(dimension.tickMultiplier*n.maxHealth*.003),n.regenTime=0)):"gate"===e.type?dimension.collideGate(t,n):"wormhole"===e.type&&2===i.type&&dimension.bounceCircles(n,i,t,1,.5)}else"polygon"===$.type?"polygon"===e.type?dimension.bounceCircles(n,i,t,1,.2):"wall"===e.type?(dimension.collideWall(t,n),e.object.team>=0&&(n.health-=dimension.tickMultiplier*n.maxHealth*.003,n.regenTime=0)):"gate"===e.type?dimension.collideGate(t,n):"wormhole"===e.type&&dimension.bounceCircles(n,i,t,1,.5):$.type},getRadiantName:function($){return $<1?"":$<5?["Radiant","Gleaming","Luminous","Lustrous"][$-1]:`Highly Radiant (${$})`},getPolygonName:function($){return $<0?["Tetrahedron","Cube","Octahedron","Dodecahedron","Icosahedron"][-$-1]:$<3?"???":$<21?["Triangle","Square","Pentagon","Hexagon","Heptagon","Octagon","Nonagon","Decagon","Hendecagon","Dodecagon","Tridecagon","Tetradecagon","Pentadecagon","Hexadecagon","Heptadecagon","Octadecagon","Nonadecagon","Icosagon",][$-3]:`Circle (${$})`},getFullPolygonName:function($){let e=dimension.getPolygonName($.sides),t;return(t=$.radiant<1?0>"AEIOU".indexOf(e[0])?"a ":"an ":`a ${dimension.getRadiantName($.radiant)} `)+e},updateTurret:function($,e,t){if($.position="weaponTurret",$.active=!t.passive,1===$.rotationType)$.d+=$.rotationSpeed,$.d=$.d%(2*Math.PI);else if(!$.rotationType){let a=$.detector.closestTank||$.detector.closestObject;if(a){let n=dimension.aimAtTarget({x:$.gameX,y:$.gameY},a,$.barrels[0]?dimension.getBulletSpeed($.barrels[0].data,t):0);$.d=e.d+dimension.clampAngle(Math.atan2(-n[0],n[1])-e.d,$.angle,$.angleRange)}else{$.active=!1;let i=!0;if(t.firing){let s,o=Math.atan2($.gameX-t.mousePosition[0],t.mousePosition[1]-$.gameY)-e.d;dimension.validateAngle(o,$.angle,$.angleRange)&&($.d=e.d+o,i=!1)}if(i){if($.angle>=0||$.angle<=0){let _=($.angle+e.d)%(2*Math.PI);$.d=dimension.averageAngles($.d,_,2)}else $.d+=.01*dimension.tickMultiplier,$.d>=2*Math.PI&&($.d-=2*Math.PI)}}}},update:function($,e,t){if(($.onUpdate&&$.onUpdate({now:t}),$.mapSizeSpeed>0)?Math.abs($.mapSize-$._mapSize)<=$.mapSizeSpeed?($.mapSize=$._mapSize,$.mapSizeSpeed=0):$.mapSize+=$.mapSize>$._mapSize?-$.mapSizeSpeed:$.mapSizeSpeed:$._mapSize=$.mapSize,$.tanks.length>1e3){for(let a=$.tanks.length-1;a>=0;a--){let n=$.tanks[a];n.static||n.ws.data.isPlayer||n.remove()}if($.tanks.length>1e3)for(let i=$.tanks.length-1;i>=0;i--){let s=$.tanks[i];s.static||s.remove()}}if(t-$.lastPolyhedra>12e4&&($.lastPolyhedra=t,.01>Math.random()&&($.nextSpawnPolyhedra=!0)),e.gameUpdate){$.lastMapSize!==$.mapSize&&($.mapSizeUpdated=$.lastMapSize=$.mapSize);for(let o=$.newTanks.length-1;o>=0;o--){let _=$.newTanks[o],r=_[1],d=0,c=0,u=0;if(d=_[0].team>=5&&!(dimension.noPinkTeam&&6===_[0].team)?_[0].team:"2teams"===$.type?r.data.lastTeam>0&&r.data.lastTeam<3?r.data.lastTeam:1+Math.floor(2*Math.random()):"ffa"===$.type?0:r.data.lastTeam>0&&r.data.lastTeam<5?r.data.lastTeam:1+Math.floor(4*Math.random()),r.data.lastTeam=d,_[0].team=d,_[1].data.tank=generator.tank(_[0],_[1]),[c,u]=$.spawnPlayer(d,_[1].data.tank,_[2]),_[1].data.tank.x=c,_[1].data.tank.y=u,console.log("dim",`name:${_[0].name} score:${Math.round(_[0].score)} dim:${$.name}`),_[1].data.waiting=!1,r&&r.accountData){let p=r.accountData;p.dims[$.name]=1;let m=_[1].data.tank;if(p.dims.ffa&&p.dims["2teams"]&&p.dims["4teams"]&&!p.achievements[8]){let f=p.achievements[8]=createAchievement(8);sendAchievement(m,f)}if(m.celestial&&"sanctuary"===$.type){if(!p.achievements[3]){let g=p.achievements[3]=createAchievement(3);sendAchievement(m,g)}if(m.level>=90&&!p.achievements[5]){let y=p.achievements[5]=createAchievement(5);sendAchievement(m,y)}}if("crossroads"===$.type&&!p.achievements[4]){let h=p.achievements[4]=createAchievement(4);sendAchievement(m,h)}if("abyss"===$.type&&!p.achievements[17]){let k=p.achievements[17]=createAchievement(17);sendAchievement(m,k)}}_[1].sendPacket&&_[1].sendPacket("gameStart",packer.gameStart({tank:_[1].data.tank,dim:_[0].dim,upgrades:_[1].data.tank.upgrades,saveCode:_[1].data.saveCode})),_[1].data.isPlayer&&!_[1].data.tank.invisible&&(_[0].dim.broadcast(`${_[1].data.tank.name} has spawned.`),_[1].accountName&&_[1].accountData&&_[1].accountData.timeAlive<=0&&_[1].sendPacket("announcement",`Logged in to account: ${_[1].accountName}`))}$.newTanks=[]}let v=[],b=[];for(let w=$.gates.length-1;w>=0;w--){let x=$.gates[w];1===x[0]||3===x[0]?(x[6]>0&&(x[6]-=.01*dimension.tickMultiplier,x[6]<=0&&(x[6]=0)),x[5]=0!==x[6]):(x[5]=!1,x[6]=0)}let z=[];for(let T=$.tanks.length-1;T>=0;T--){let S=$.tanks[T];if(S.timeExisted+=dimension.tickTime,S.score>=0||(S.score=0,S.update(),S.dim.updatedTanks[S.id]=S),S.xv||(S.xv=0),S.yv||(S.yv=0),S.x||(S.x=0),S.y||(S.y=0),S.d||(S.d=0),S.ai&&"function"==typeof S.ai)try{S.ai({now:t,options:e})}catch(P){}if((!S.regen||S.regen<1)&&(S.regen=1),S.regenTime<1){let D=25-S.upgrades[6]/1.4;S.regenTime+=.01*dimension.tickMultiplier/D*(S.regenTime>.75?1:1+.3*(S.regen-1)),S.regenTime>1&&(S.regenTime=1)}else if(S.healthS.maxHealth&&(S.health=S.maxHealth)}S.regen=1,S.bodyDamageMultiplier=1+S.upgrades[5]/17.6;let j=800*S.levelMultiplier*S.maxHealthMultiplier*(S.celestial?4:1)*(1+S.upgrades[7]/22.5);if(j!=S.maxHealth&&S.setMaxHealth(j),S.mousePosition[0]=S.x+S.controlPosition[0],S.mousePosition[1]=S.y+S.controlPosition[1],S.dragTarget)for(let B=S.dragTarget.length-1;B>=0;B--){let C=S.dragTarget[B];C.static||(C.x=S.mousePosition[0],C.y=S.mousePosition[1])}if(S.dragWall){let M=S.dragWall,I=S.mousePosition[0],H=S.mousePosition[1],U=2;if(S.dragWallSnap&&(I=50*Math.round(I/50),H=50*Math.round(H/50),U=.8),M[0]!==I||M[1]!==H){M[0]=Math.round((M[0]*U+I)/(U+1)),M[1]=Math.round((M[1]*U+H)/(U+1));let N=$.walls.indexOf(M);N>=0?$.updatedWalls[N]=M:S.dragWall=!1}}e.updateFinalDamage&&(S.finalDamage.tanks=generator.updateFinalDamage(S.finalDamage.tanks),S.finalDamage.polygons=generator.updateFinalDamage(S.finalDamage.polygons)),S.x+=S.xv,S.y+=S.yv,S.invincibleTime&&(S.invincibleTime>t?(S.firing||S.input.movement[0]||S.input.movement[1])&&S.invincibleTime-t>5e3&&(S.invincibleTime=t+5e3):(S.invincibleTime=!1,S.invincible=!1));let F=S.speed*dimension.tickMultiplier*.14*(S.size>30?10/(S.size-20):1)*(1+.1*S.upgrades[4])*S.movementSpeed,R=$.friction?dimension.power97:1;1!==S.friction&&(S.friction<1?R=1-(1-R)*S.friction:R/=S.friction),1.01!==$.sizeScale&&(F*=Math.pow($.sizeScale/1.01,S.level)),S.xv=S.xv*R+dimension.tickMultiplier*S.input.movement[0]*F,S.yv=S.yv*R+dimension.tickMultiplier*S.input.movement[1]*F,e.recordDirection&&S._d.push((Math.round(S.d/Math.PI*1e3)%2e3+2e3)%2e3);let O=!S.static&&!S.fullFov,A={x:S.x,y:S.y,size:S.size,object:S,type:"tank",noCollide:S.noHitBox},Y={x:S.x,y:S.y,size:1.5*S.size+200,object:S,type:"bullet",str:"tanks"};if(v.push(A),O){b.push(Y);let E={x:S.x,y:S.y,size:1800*Math.sqrt(S.size/75)*S.weaponCameraSize*S.bodyCameraSize,object:S,type:"fov",fov:{tanks:{},polygons:{},bullets:{}}};b.push(E),z.push(E)}{let X={x:S.x,y:S.y,size:300+S.size*S.range,object:S,type:"detectEnemies",parent:S,objects:[],distances:[],closest:!1,closestObject:!1,closestTank:!1,closestTankDistance:!1,closestBullet:!1,closestBulletDistance:!1,possible:[]};S.detector=X,v.push(X)}let q=Math.sin(S.d),G=Math.cos(S.d),L=function($,e,t){let a=Math.sin($.d),n=Math.cos($.d),i=t?$.gameX:S.x,s=t?$.gameY:S.y,o=t?e.relativeSize*S.size:S.size;return[i+o*(e.x*n+e.y*a),s-o*(e.y*n-e.x*a)]},K=function($,e,t){for(let a=0,n=e.length;a=0||Q.angle<=0?Q.angle:0),range:Q.angleRange,size:10*S.size*Q.size+400,object:Q,type:"detectEnemies",parent:S,objects:[],distances:[],closest:!1,closestObject:!1,closestTank:!1,closestTankDistance:!1,closestBullet:!1,closestBulletDistance:!1,possible:[]};Q.detector=Z,v.push(Z)}}for(let $$=0,$e=S.auras.length;$$<$e;$$++){let $t=S.auras[$$];if($t.gameSize=S.size*$t.auraSize,!1===S.passive){let $a={x:S.x+S.size*($t.x*G+$t.y*q),y:S.y-S.size*($t.y*G-$t.x*q),size:$t.gameSize,object:$t,type:"detectEnemies",parent:S,objects:[],distances:[],closest:!1,closestObject:!1,closestTank:!1,closestTankDistance:!1,closestBullet:!1,closestBulletDistance:!1,possible:[]};if(2===$t.type)$a.bullets=!0;else if(1===$t.type)$a.type="detectFriends";else if(0!==$t.type)continue;$a.x,$a.y,$a.size,$t.detector=$a,$t.gameX=$a.x,$t.gameY=$a.y,v.push($a)}}}for(let $n=$.bullets.length-1;$n>=0;$n--){let $l=$.bullets[$n],$i=$l.parent;$l.x+=$l.xv,$l.y+=$l.yv;let $s=Math.sin($l.d),$o=Math.cos($l.d);(1===$l.type||2===$l.type||3===$l.type||4===$l.type)&&$.friction&&($l.xv*=dimension.power97,$l.yv*=dimension.power97);let $_={x:$l.x,y:$l.y,size:$l.size,object:$l,type:"bullet"},$r={x:$l.x,y:$l.y,size:1.5*$l.size+200,object:$l,type:"bullet",str:"bullets"};if(v.push($_),b.push($r),$l.auras)for(let $d=0,$3=$l.auras.length;$d<$3;$d++){let $c=$l.auras[$d];if($c.gameSize=$l.size*$c.auraSize,!1===$i.passive){let $u={x:$l.x+$l.size*($c.x*$o+$c.y*$s),y:$l.y-$l.size*($c.y*$o-$c.x*$s),size:$c.gameSize,object:$c,type:"detectEnemies",parent:$i,objects:[],distances:[],closest:!1,closestObject:!1,closestTank:!1,closestTankDistance:!1,closestBullet:!1,closestBulletDistance:!1,possible:[]};if(2===$c.type)$u.bullets=!0;else if(1===$c.type)$u.type="detectFriends";else if(0!==$c.type)continue;$u.x,$u.y,$u.size,$c.detector=$u,$c.gameX=$u.x,$c.gameY=$u.y,v.push($u)}}if($l.timeExisted+=.01*dimension.tickMultiplier,($l.timeExisted>$l.lifeTime&&2!==$l.type&&4!==$l.type||$l.health<=0)&&$l.remove(),$l.turrets&&$l.turrets[0])for(let $p=0,$m=$l.turrets.length;$p<$m;$p++){let $f=$l.turrets[$p],$g={x:$l.x-$l.size*($f.x*$o+$f.y*$s),y:$l.y+$l.size*($f.y*$o-$f.x*$s),size:10*$l.size*$f.size+400,object:$f,type:"detectEnemies",parent:$l.parent,objects:[],distances:[],closest:!1,closestObject:!1,closestTank:!1,closestTankDistance:!1,closestBullet:!1,closestBulletDistance:!1,possible:[]};$f.detector=$g,$f.gameX=$g.x,$f.gameY=$g.y,v.push($g)}}for(let $1=$.polygons.length-1;$1>=0;$1--){let $0=$.polygons[$1];if(e.gameUpdate&&($0.finalDamage.tanks=generator.updateFinalDamage($0.finalDamage.tanks)),$0.regenTime<1)$0.regenTime+=.02*dimension.tickMultiplier/(9+2*Math.abs($0.sides)),$0.regenTime>1&&($0.regenTime=1);else if($0.health<$0.maxHealth){let $y=$0.sides>=3?$0.sides:10-$0.sides;$0.health+=dimension.tickMultiplier*$0.maxHealth*.004/($y*$y*.1-.15),$0.health>$0.maxHealth&&($0.health=$0.maxHealth)}$0.x+=$0.xv,$0.y+=$0.yv,$.friction&&($0.xv*=dimension.power97,$0.yv*=dimension.power97);let $h=.005*dimension.tickMultiplier*$0.speed;$0.d+=$h,$0.d>=2*Math.PI&&($0.d-=2*Math.PI),$h*=8,$0.xv+=Math.sin($0.d)*$h,$0.yv-=Math.cos($0.d)*$h;let $k={x:$0.x,y:$0.y,size:$0.size,object:$0,type:"polygon"},$4={x:$0.x,y:$0.y,size:1.5*$0.size+200,object:$0,type:"bullet",str:"polygons"};v.push($k),b.push($4),$0.removeTime++,$0.removeTime>=600*dimension.tickRate&&$0.health>=$0.maxHealth&&$0.remove()}for(let $2=$.walls.length-1;$2>=0;$2--){let $v=$.walls[$2];if(!$v||$v[5]&&$v[5].noHitBox)continue;let $b={x:$v[0],y:$v[1],w:$v[2],h:$v[3],type:"wall",rectangular:!0,object:{team:$v[4]||-1},noInvincibility:!!$v[5]&&$v[5].noInvincibility};v.push($b)}for(let $5=$.gates.length-1;$5>=0;$5--){let $7=$.gates[$5],$w,$x;0===$7[3]||2===$7[3]?($w=30,$x=$7[4]):($w=$7[4],$x=30);let $6={gateType:$7[0],x:$7[1],y:$7[2],d:$7[3],noClip:!0,object:$7,w:$w,h:$x,type:"gate",rectangular:!0};v.push($6)}for(let $z in $.wormholes){let $T=$.wormholes[$z];if($T.type<2){let $S=Object.keys($T._objects).length+1;if($T.time<10?$T.time-=.01*dimension.tickMultiplier:$T.time-=.01*dimension.tickMultiplier*(1+$S),$T.time<0){for(let $P in $T._objects)$T.action($T._objects[$P]);$T.remove();continue}$T.time<10&&($T.fadeTime=(10-$T.time)/10,$.fadeTimeChanges[$T.id]=$T)}else $T.time=0;let $D={x:$T.x,y:$T.y,object:$T,objects:{},size:$T.size,type:"wormhole"};$T._objects={},v.push($D)}for(let $W=v.length-1;$W>=0;$W--){let $j=v[$W],$B=$j.object;"tank"===$j.type&&($B.fov.tanks=$.tanks,$B.fov.bullets=$.bullets,$B.fov.polygons=$.polygons)}try{Detector.detectCollisions(v,function($,e,t){dimension.collide($,e,t)})}catch($C){return dimension.antilag()}if(e.gameUpdate){View.detectCollisions(b,function($,e,t){if("fov"===e.type&&([$,e]=[e,$]),"fov"===$.type){let a=$.fov,n=e.object;"bullet"===e.type&&(a[e.str][n.id]=n)}});for(let $M=z.length-1;$M>=0;$M--){let $8=z[$M],$I=$8.object;$I.fov.bullets=Object.values($8.fov.bullets),$I.fov.polygons=Object.values($8.fov.polygons)}}for(let $H in $.wormholes){let $9=$.wormholes[$H],$U=$9._objects;if($9.type<2){let $N=0;for(let $F in $U){let $R=$U[$F].size;$N+=$R*$R*2,!($F in $9.objects)&&(!$9.ruptured&&Math.random()<.03+.07*$9.entries&&($9.rupture(),$.fadeTimeChanges[$9.id]=$9),$9.entries++)}$9.objects=$9._objects,$N!==$9.contents&&($9.contents=$N,$9.size=Math.sqrt($9.defaultSize+$N),$.resizedWormholes[$9.id]=$9)}else{for(let $O in $U){let $A=$U[$O];$9.action($A),$O in $9.objects||!($A.team>=0)||($9.color=$A.team,$9.radiant=$A.radiant||0,$.updatedPortals[$9.id]=$9)}$9.objects=$9._objects}}for(let $Y=$.bullets.length-1;$Y>=0;$Y--){let $E=$.bullets[$Y],$X=$E.parent;if(dimension.confine($E,$.mapSize-($E.size<2*dimension.clipSize?$E.size/2:$E.size-dimension.clipSize),$.mapSizeSpeed>0?$.mapSize>$._mapSize?$.mapSizeSpeed:-$.mapSizeSpeed:0),2===$E.type||4===$E.type){let $q=dimension.tickMultiplier*$E.speed*.05,$G=1,$L=[$X.x,$X.y],$K=!1;$E.target=!1,$X.firing||$X.droneControl?($L=$X.mousePosition,$K=!0,$X.droneControl&&($q=-$q)):!1==$X.passive&&$X.detector&&($X.detector.closestObject?($E.target=$X.detector.closestObject,$L=[$E.target.x,$E.target.y],$K=!0):$E.target=!1);let $J;if($q>=0){if($J=Math.atan2($E.x-$L[0],$L[1]-$E.y),4===$E.type&&$K&&2!==$E.visualType){let $V=[$E.x-$L[0],$E.y-$L[1]];($V=Math.sqrt($V[0]*$V[0]+$V[1]*$V[1])-$E.size-($E.target?$E.target.size:0))<($X.size+.5*$E.size)*($X.firing?2.5:.5)+$E.size&&($G=-1)}}else $J=Math.atan2($L[0]-$E.x,$E.y-$L[1]),$q=-$q;if($E.timeExisted<1.5){let $Q=10*(1-$E.timeExisted/1.5);$E.d=dimension.averageAngles($E.d,$J,$Q)}else $E.d=$J;$q*=2===$E.type?1:.8,$E.xv+=-dimension.tickMultiplier*Math.sin($E.d)*$q*$G,$E.yv+=dimension.tickMultiplier*Math.cos($E.d)*$q*$G}if(3===$E.type||4===$E.type){for(let $Z=0,e$=$E._barrels.length;$Z=9)continue;ee.current+=.01*dimension.tickMultiplier;let et=.5*ee.data.reload*(1-$X.upgrades[3]/30),ea;if(2===ee.data.type||4===ee.data.type?ea=!(ee.bullets.length>=ee.data.drones*(1+$X.upgrades[0]/30)):(ea=4===$E.type?$X.firing||$X.droneControl||!$X.passive&&$E.target:!$X.passive,ee.turret&&!ee.turret.active&&(ea=!1)),ea){if(ee.current>=et){et?(ee.current-=et,ee.current>=et&&(ee.current=ee.current%et)):ee.current=0,(1===ee.data.type||3===ee.data.type)&&ee.bullets.length>ee.maxTraps&&ee.bullets[0].remove();let en=(ee.turret?ee.turret.d:$E.d)+ee.data.d,el=$E.x,ei=$E.y,es=-ee.data.x,eo=-ee.data.y+2*ee.data.height,e_=Math.sin(en),er=Math.cos(en),ed=dimension.getBulletSpeed(ee.data,$E.parent),e3=$E.parent,[ec,eu]=dimension.getBulletData(ee.data.type,$E.parent),ep=ee.data.relativeSize*e3.size,em=(ee.data.relativeSizeS||ee.data.relativeSize)*ee.data.width;if(8===ee.data.type){let ef=generator.polygon({x:el+ep*(er*es-e_*eo),y:ei+ep*(er*eo+e_*es),d:en,sides:3,dim:e3.dim,radiant:1});ef.xv=-e_*ed,ef.yv=er*ed}else{let eg=e_,e1=er;ee.data.spread&&(en+=(Math.random()-.5)*ee.data.spread*Math.PI%(2*Math.PI),eg=Math.sin(en),e1=Math.cos(en)),generator.bullet({dim:$,parent:e3,barrelId:ee.id,size:em,d:en,damage:(1+e3.upgrades[2]/22.5)*(1+e3.upgrades[1]/60),health:ee.data.penetration*eu*(1+e3.upgrades[0]/17.6),lifeTime:ee.data.time*ec,x:el+ep*(er*es-e_*eo),y:ei+ep*(er*eo+e_*es),xv:-eg*ed,yv:e1*ed,speed:ed,barrel:ee})}if(ee.data.recoil){let e0=.6*ee.data.recoil*em*em*(1+e3.upgrades[1]/30);$E.xv+=e0*e_,$E.yv-=e0*er}}}else{let ey=et*(1-ee.data.delay);ee.current>ey&&(ee.current=ey)}}if($E.auras)for(let eh=0,ek=$E.auras.length;eh=0;ev--){let eb=e4.detector.objects[ev];if(!(eb.invincible||eb.inBase||eb.prevInBase)){let e5=2*eb.size,e7=e4.detector.distances[ev]+e5,ew=e7<0?1:(1-e7/e5)*.5+.5;eb.damage(dimension.tickMultiplier*ew*e2*e4.auraDamage*5*$X.levelMultiplier,$X,"tanks")}}else if(1===e4.type&&e4.healing)for(let ex=e4.detector.objects.length-1;ex>=0;ex--)e4.detector.objects[ex].regen+=(e4.healing-1)*(1+$X.upgrades[3]/20)*.1*(1+$X.upgrades[6]/15);else if(2===e4.type&&e4.auraPull)for(let e6=e4.detector.objects.length-1;e6>=0;e6--){let ez=e4.detector.objects[e6];if(!(ez.invincible||ez.inBase||ez.prevInBase)){let eT=ez.x-e4.gameX,eS=ez.y-e4.gameY,eP=Math.sqrt(eT*eT+eS*eS),eD=.3*e4.auraPull*($E.size*$X.weight)/(ez.size*(ez.weight||1));eP=eP<1?eD:eD/eP,ez.xv-=eT*eP,ez.yv-=eS*eP}}}}}if($E.turrets&&$E.turrets[0])for(let eW=0,ej=$E.turrets.length;eW=0;eC--){let eM=$.tanks[eC];dimension.confine(eM,$.mapSize-(eM.size<2*dimension.clipSize?eM.size/2:eM.size-dimension.clipSize),$.mapSizeSpeed>0?$.mapSize>$._mapSize?$.mapSizeSpeed:-$.mapSizeSpeed:0),eM.prevInBase=eM.inBase,eM.inBase=!1;let e8=!1;if(eM.detector&&eM.detector.closestObject&&(e8=eM.detector.closestObject),"peacekeeper"===eM.ai){let eI=eM.detector.closestTank;if(eI&&(eI.x>=0||eI.x<=0)&&(eI.y>=0||eI.y<=0)){eM.mousePosition=[eI.x,eI.y];let eH=[eI.x-eM.x,eI.y-eM.y];eM.controlPosition=[eH[0],eH[1]];let e9=Math.sqrt(eH[0]*eH[0]+eH[1]*eH[1])||1;e9Math.random()&&(eM.d=2*Math.random()*Math.PI)}eM.droneControl=!1,eM.aiRam&&(eM.firing=!0)}else if(7===eM.team&&!eM.ws.data.isPlayer||"fallen"===eM.ai){eM.passive=!1;let eR=tankData.bodyUpgradeMap[eM.body],eO=tankData.weaponUpgradeMap[eM.weapon];if(eO&&eM.level>=eO.level){let eA=eO.upgrades[Math.floor(Math.random()*eO.upgrades.length)];eM.removeBullets(),generator.setTankWeapon(eM,eA),eM.firedBarrels={},generator.updateTank(eM),eM.update(),eM.dim.updatedTanks[eM.id]=eM}if(eR&&eM.level>=eR.level){let eY=eR.upgrades[Math.floor(Math.random()*eR.upgrades.length)];eM.removeBullets(),generator.setTankBody(eM,eY),eM.firedBarrels={},generator.updateTank(eM),eM.update(),eM.dim.updatedTanks[eM.id]=eM}if(eM.upgradeCount<120&&eM.upgradeCount=0||e8.x<=0)&&(e8.y>=0||e8.y<=0)){eM.mousePosition=[e8.x,e8.y];let eG=[e8.x-eM.x,e8.y-eM.y];eM.controlPosition=[eG[0],eG[1]];let eL=Math.sqrt(eG[0]*eG[0]+eG[1]*eG[1])||1;(eL2*Math.PI&&(eM.d-=2*Math.PI)):(eM.input.movement=[eJ,eV],eM.firing=!1,e.gameUpdate&&.01>Math.random()&&(eM.d=2*Math.random()*Math.PI))}eM.droneControl=!1,eM.aiRam&&(eM.firing=!0)}for(let eQ=0,eZ=eM._turrets.length;eQ=0;tl--){let ti=ta.detector.objects[tl];if(!(ti.invincible||ti.inBase||ti.prevInBase)){let ts=2*ti.size,to=ta.detector.distances[tl]+ts,t_=to<0?1:(1-to/ts)*.5+.5;ti.damage(dimension.tickMultiplier*t_*tn*ta.auraDamage*5*eM.levelMultiplier,eM,"tanks")}}else if(1===ta.type&&ta.healing)for(let tr=ta.detector.objects.length-1;tr>=0;tr--)ta.detector.objects[tr].regen+=ta.healing*(1+eM.upgrades[3]/20)*.7*(1+eM.upgrades[6]/15)-1;else if(2===ta.type&&ta.auraPull)for(let td=ta.detector.objects.length-1;td>=0;td--){let t3=ta.detector.objects[td];if(!(t3.invincible||t3.inBase||t3.prevInBase)){let tc=t3.x-ta.gameX,tu=t3.y-ta.gameY,tp=Math.sqrt(tc*tc+tu*tu),tm=.3*ta.auraPull*(eM.size*eM.weight)/(t3.size*(t3.weight||1));tp=tp<1?tm:tm/tp,t3.xv-=tc*tp,t3.yv-=tu*tp}}}}for(let tf=0,tg=eM._barrels.length;tf=9||t1.child)continue;t1.current+=.01*dimension.tickMultiplier;let t0=.5*t1.data.reload*(1-eM.upgrades[3]/30),ty=eM.firing;if(t1.turret&&(ty=!!t1.turret.detector.closest&&t1.turret.active),(2===t1.data.type||4===t1.data.type)&&(ty=!(t1.bullets.length>=t1.data.drones*(1+eM.upgrades[0]/30))&&(!eM.passive||eM.firing)),ty){if(t1.current>=t0){t0?(t1.current-=t0,t1.current>=t0&&(t1.current=t1.current%t0)):t1.current=0,(1===t1.data.type||3===t1.data.type)&&t1.bullets.length>t1.maxTraps&&t1.bullets[0].remove();let th=(t1.turret?t1.turret.d:eM.d)+t1.data.d,tk=t1.turret?t1.turret.gameX:eM.x,t4=t1.turret?t1.turret.gameY:eM.y,t2=Math.sin(th),tv=Math.cos(th),tb=-t1.data.x,t5=-t1.data.y+2*t1.data.height,t7=dimension.getBulletSpeed(t1.data,eM),[tw,tx]=dimension.getBulletData(t1.data.type,eM),t6=t1.data.relativeSize*eM.size;eM.firedBarrels[tf]=tf;let tz=(t1.data.relativeSizeS||t1.data.relativeSize)*t1.data.width;if(8===t1.data.type){let tT=generator.polygon({x:tk+t6*(tv*tb-t2*t5),y:t4+t6*(tv*t5+t2*tb),d:th,sides:t1.data.polygonSides,dim:eM.dim,radiant:1+eM.radiant});tT.xv=-t2*t7*5,tT.yv=tv*t7*5}else{let tS=t2,tP=tv;t1.data.spread&&(th+=(Math.random()-.5)*t1.data.spread*Math.PI%(2*Math.PI),tS=Math.sin(th),tP=Math.cos(th)),generator.bullet({dim:$,parent:eM,barrelId:tf,size:tz,d:th,damage:(1+eM.upgrades[2]/22.5)*(1+eM.upgrades[1]/60),health:t1.data.penetration*tx*(1+eM.upgrades[0]/17.6),lifeTime:t1.data.time*tw,x:tk+t6*(tv*tb-t2*t5),y:t4+t6*(tv*t5+t2*tb),xv:-tS*t7,yv:tP*t7,speed:t7,barrel:t1})}if(t1.data.recoil&&!eM.static){let tD=.6*t1.data.recoil*tz*(1+eM.upgrades[1]/30);eM.xv+=tD*t2,eM.yv-=tD*tv}}}else{let tW=t0*(1-t1.data.delay);t1.current>tW&&(t1.current=tW)}}if(eM.health<=0){let tj=!0,tB=!0,tC={},tM={};for(let t8=eM.dim.tanks.length-1;t8>=0;t8--){let tI=eM.dim.tanks[t8];tC[tI.id]=tI}for(let tH=eM.dim.polygons.length-1;tH>=0;tH--){let t9=eM.dim.polygons[tH];tM[t9.id]=t9}if(eM.onDeath&&eM.onDeath({tank:eM,preventDefault:function(){tj=!1},preventRemove:function(){tB=!1},dimTanks:tC,dimPolygons:tM}),eM.dim.onDeath&&eM.dim.onDeath({tank:eM,preventDefault:function(){tj=!1},preventRemove:function(){tB=!1},dimTanks:tC,dimPolygons:tM}),tj){tB&&eM.remove(),eM.noKillNotification||console.log("killedTank",`name:${eM.name} score:${eM.score} dim:${eM.dim.name}`);let tU=eM.score;eM.forceDeathScore>=0&&(tU=eM.forceDeathScore);let tN=0,tF=tU*dimension.getRadiantMultiplier(eM.radiant)*.8,tR={},tO={},tA=[],tY={},tE=0;for(let tX in eM.finalDamage.tanks){let tq=tC[tX];if(tq&&!tq.static){let tG=eM.finalDamage.tanks[tX],tL=0;for(let tK=0;tK<16;tK++)tL+=tG[tK];tR[tX]=tL,tA.push(tq.name),tY[tX]=tE,tE++,tN+=tL}}for(let tJ in eM.finalDamage.polygons){let tV=tM[tJ];if(tV){let tQ=eM.finalDamage.polygons[tJ],tZ=0;for(let a$=0;a$<16;a$++)tZ+=tQ[a$];tO[tJ]=tZ,tA.push(dimension.getFullPolygonName(tV)),tN+=tZ}}let ae=[!1,0];for(let at in tR){let aa=tR[at]/tN,an=tC[at],al=aa*tF;if(al&&(aa>ae[1]&&(ae[1]=aa,ae[0]=an),an.score+=al,$.skinwalkers&&(an.removeBullets(),generator.setTankWeapon(an,eM.weapon),generator.setTankBody(an,eM.body),an.firedBarrels={},generator.updateTank(an),an.dim.updatedTanks[an.id]=an),an.update(),an.ws.sendPacket&&!eM.noKillNotification)){let ai=tY[at],as=tA.slice(0,ai).concat(tA.slice(ai+1)),ao=as.length;0===ao?an.ws.sendPacket("announcement",`You killed ${eM.name}.`):1===ao?an.ws.sendPacket("announcement",`You and ${as[0]} killed ${eM.name}.`):an.ws.sendPacket("announcement",`You, ${as.slice(0,ao-1).join(", ")}, and ${as[ao-1]} killed ${eM.name}.`)}}if(ae[0]&&ae[0].ws&&ae[0].ws.accountData){let a_=ae[0].ws.accountData;if(eM&&(eM.celestial?(a_.celestialKills++,args.parentPort.postMessage(["celestialKilled",[ae[0].ws.accountName]])):a_.tankKills++,!a_.achievements[0])){let ar=a_.achievements[0]=createAchievement(0);sendAchievement(ae[0],ar)}}for(let ad in tO){let a3=tO[ad]/tN,ac=tM[ad],au=a3*tF/(2*(ac.radiant<1?1:15*Math.pow(3,ac.radiant-1)));au&&(ac.score+=au,ac.update())}if(eM.ws&&eM.ws.data.isPlayer&&createMessage("1210052935728369665","`"+eM.name.replaceAll("`","")+" died to "+tA.join(", ")+"`"),gameEnd(eM),eM.ws.sendPacket&&tB){let ap=Math.round(.2*eM.score);tN<=0&&(ap=Math.round(.8*eM.score)),eM.dim.forceRespawnScore>=0&&(ap=eM.dim.forceRespawnScore),eM.ws.data.respawnScore=ap,eM.ws.data.isPlayer&&(eM.ws.data.uid>=0||args.standalone)&&(args.standalone?(console.log("death",[tA,ap]),eM.ws.sendPacket("death",[tA,ap])):(eM.ws.data.ready=!1,args.parentPort.postMessage(["death",[eM.ws.data.uid,ap,[tA,ap],eM.ws.data.lastTeam]])))}}}}$.polygons.length<$.maxPolygonCount&&!$.noPolygons&&$.maxPolygonSides>=3?spawnPolygon($):$.polygons.length>2*$.maxPolygonCount&&$.polygons[0]&&$.polygons[0].remove();for(let am=$.polygons.length-1;am>=0;am--){let af=$.polygons[am];if(dimension.confine(af,$.mapSize-(af.size<2*dimension.clipSize?af.size/2:af.size-dimension.clipSize),$.mapSizeSpeed>0?$.mapSize>$._mapSize?$.mapSizeSpeed:-$.mapSizeSpeed:0),af.health<=0){let ag=0,a1=af.score*dimension.getRadiantMultiplier(af.radiant),a0=a1>=1e8||af.radiant>3,ay={},ah=[],ak={},a4={},a2=dimension.getFullPolygonName(af);for(let av=af.dim.tanks.length-1;av>=0;av--){let ab=af.dim.tanks[av];a4[ab.id]=ab}let a5=0;for(let a7 in af.finalDamage.tanks){let aw=a4[a7];if(aw&&!aw.static){let ax=af.finalDamage.tanks[a7],a6=0;for(let az=0;az<16;az++)a6+=ax[az];ay[a7]=a6,ah.push(aw.name),ak[a7]=a5,a5++,ag+=a6}}let aT=[!1,0],aS=0;for(let aP in ay){let aD=ay[aP]/ag,aW=a4[aP],aj=aD*a1;if(aj){if(aD>aT[1]&&(aT[1]=aD,aT[0]=aW),aS++,aD<.1&&aW.ws&&aW.ws.accountData){let aB=aW.ws.accountData;if(!aB.achievements[2]){let aC=aB.achievements[2]=createAchievement(2);sendAchievement(aW,aC)}}if(aW.score+=aj,aj>1e6&&aW.ws&&aW.ws.accountData&&(aW.ws.accountData.ohNode=!1,aW.ws.accountData.classic=!1),aW.update(),aW.ws.sendPacket&&a0){let aM=ak[aP],a8=ah.slice(0,aM).concat(ah.slice(aM+1)),aI=a8.length;0===aI?aW.ws.sendPacket("announcement",`You killed ${a2}.`):1===aI?aW.ws.sendPacket("announcement",`You and ${a8[0]} killed ${a2}.`):aW.ws.sendPacket("announcement",`You, ${a8.slice(0,aI-1).join(", ")}, and ${a8[aI-1]} killed ${a2}.`)}}}if(aT[0]&&aT[0].ws&&aT[0].ws.accountData){let aH=aT[0].ws.accountData;if(aH.polygonKills++,af.radiant>0){if(aH.radiantPolygonKills++,!aH.achievements[6]){let a9=aH.achievements[6]=createAchievement(6);sendAchievement(aT[0],a9)}if(af.radiant>=4&&!aH.achievements[18]){let aU=aH.achievements[18]=createAchievement(18);sendAchievement(aT[0],aU)}}if(1===aS&&af.sides>=10&&!aH.achievements[1]){let aN=aH.achievements[1]=createAchievement(1);sendAchievement(aT[0],aN)}if(af.sides>=13&&!aH.achievements[9]){let aF=aH.achievements[9]=createAchievement(9);sendAchievement(aT[0],aF)}}af.remove()}}if(e.gameUpdate){for(let aR=$.gates.length-1;aR>=0;aR--){let aO=$.gates[aR];aO[5]!==aO[7]&&(aO[7]=aO[5],$.updatedGates[aR]=[aR,aO[5]])}let aA=dimension.leaderboard($),aY=[],aE={};for(let aX=0;aX<8;aX++){let aq=aA[aX],aG;aG=aq?{place:aX,id:aq.id,type:"tank"===aq.objectType?1:0,score:Math.round(aq.score),sides:aq.sides,radiant:aq.radiant}:{place:aX,id:-aX-1,type:0,score:1,sides:0,radiant:0};let aL=$.leaderboard[aX];aL&&(aL.id!==aG.id||Math.round(aL.score)!==aG.score||aL.type!==aG.type||aL.radiant!==aG.radiant)&&(aE[aX]=aG),aY.push(aG)}$.leaderboard=aY;let aK=[];for(let aJ in aE){let aV=aE[aJ];aK.push([aJ,aV.id,aV.type?0:[aV.sides,aV.radiant],Math.round(aV.score)])}$.leaderboardChanges=aK}},leaderboard:function($){let e=[];for(let t=0,a=$.polygons.length;t1||n.score*dimension.getRadiantMultiplier(n.radiant)>=1e9)&&e.push(n)}let i=$.tanks.concat(e).sort(($,e)=>$.displayScore===e.displayScore?e.radiant-$.radiant:e.displayScore-$.displayScore),s=[],o=0;for(let _=0,r=i.length;_=10));_++);return s}},generator={getId:function($,e){let t=e.ids[$],a=t.length;if(0===a)return t.push(0),0;let n=0;for(;t[n]===n&&n=0&&a.splice(n,1)},5e3)},updateTank:function($){$._barrels=[];let e=function(t){$._barrels.push(t),(1===t.data.type||3===t.data.type)&&(t.maxTraps=12/t.data.reload*3);let a=t.data.relativeSizeS*t.data.width;if(t.data&&(3===t.data.type||4===t.data.type)){let n=t.data.bulletWeapon;if(n)for(let i=0,s=n.barrels.length;i0||(a=1);let s=.5*t;if($.turrets)for(let o=0,_=$.turrets.length;o<_;o++){let r={...$.turrets[o]};r.gameX=e.x,r.gameY=e.y,r.detector={},r.d=0,r.position="turret";let d=r.sectionWeapon.barrels||[];r.barrels=[],r.relativeSize=r.size*s;for(let c=0,u=d.length;c0&&(e[t]=a.slice(1).concat(0))}return e},log1:1/Math.log(1.2),log2:1/Math.log(4),getLevel:function($){return Math.floor(Math.round(1e6*Math.log($/500+1)*generator.log1)/1e6)+1},getCelestialLevel:function($){return Math.floor(Math.round(1e6*Math.log(($-23477631)/5e6+1)*generator.log1)/1e6)+75},getSides:function($){return Math.floor(Math.round(1e6*Math.log(1+3*($-250)/1e3)*generator.log2)/1e6)+3},tank:function($,e){let t=!1;e||(e={data:{},sendPacket:function(){}},t=!0);let a={id:generator.getId("tank",$.dim),lastChat:0,chat:function($){a.lastChat=_performance.now(),a.dim.chatMessages[a.id]=$},friction:$.friction>=0?$.friction:1,canBePushed:$.canBePushed||!$.static,alwaysShowOnMinimap:$.alwaysShowOnMinimap||!1,polygon:$.polygon||!1,noKillNotification:$.noKillNotification||!1,invisible:$.invisible||!1,dim:$.dim||!1,ignorePolygonDamage:$.ignorePolygonDamage||!1,weight:$.weight||1,density:$.density||1,speed:$.speed||1,onDeath:$.onDeath||function(){},forceDeathScore:$.forceDeathScore>=0?$.forceDeathScore:-1,x:$.x||0,y:$.y||0,d:$.d||0,fullFov:!1,_d:[],xv:0,yv:0,range:"range"in $?$.range:12,static:$.static||!1,clip:$.clip||!1,firing:!1,droneControl:!1,firedBarrels:{},upgrades:$.upgrades||[0,0,0,0,0,0,0,0],maxHealthMultiplier:1,upgradeCount:$.upgradeCount||0,alive:!0,timeExisted:0,countUpgrades:function(){let $=0;for(let e=0;e<8;e++)$+=a.upgrades[e];a.upgradeCount=$},bodyDamageMultiplier:1,radiant:$.radiant||0,controlPosition:[0,0],mousePosition:[0,0],name:$.name||"",team:$.team||0,score:$.score||0,displayScore:$.score||0,level:0,lastSendLevel:0,levelMultiplier:1,health:800,maxHealth:800,regenTime:1,size:30,detector:!1,input:{movement:[0,0]},typing:$.typing||!1,passive:$.passive||!1,invincible:!("invincible"in $)||$.invincible,invincibleTime:_performance.now()+3e4,weapon:$.weapon||"node",body:$.body||"base",turrets:[],auras:[],bullets:{},ascend:function(){a.ws.accountData&&!a.ws.accountData.ascended&&(a.ws.accountData.ascended=!0,args.parentPort.postMessage(["ascention",[a.ws.accountName]])),a.upgrades=[0,0,0,0,0,0,0,0],a.countUpgrades(),a.weapon="nova",a.body="celestial",7!==a.team&&(a.team=6),a.dim.updatedTanks[a.id]=a,a.update(),a.removeBullets(),generator.setTankWeapon(a,a.weapon),generator.setTankBody(a,a.body),a.firedBarrels={},generator.updateTank(a),e.data.tank.dim.updatedTanks[e.data.tank.id]=e.data.tank},fov:{tanks:[],polygons:[],bullets:[]},finalDamage:{tanks:{},polygons:{}},removeBullets:function(){for(let $ in a.bullets)a.bullets[$].remove()},setMaxHealth:function($){a.health=a.health/a.maxHealth*$,a.maxHealth=$},damage:function($,e,t){if($>0){a.ws.accountData&&(a.ws.accountData.pristine=!1),a.health-=$,a.health<0&&(a.health=0),a.regenTime=0;let n=a.finalDamage[t];n&&(n[e.id]?n[e.id][15]+=$:n[e.id]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$])}},remove:function($){a.alive=!1,a.removeBullets();let t=a.dim.tanks.indexOf(a);t>=0&&a.dim.tanks.splice(t,1),generator.removeId("tank",a.id,a.dim),e&&e.data&&e.data.tank===a&&(e.data.tank=!1),a.dim.autoScale&&(a.dim.mapSize,a.dim.autoScale())},update:function(){let $=tankData.bodies[a.body],e=1;if($&&$.celestial&&(a.celestial=!0),$&&$.size&&(e=$.size),a.ws.accountData){let t=a.ws.accountData;if(a.score>=1e9&&!t.achievements[16]){let n=t.achievements[16]=createAchievement(16);sendAchievement(a,n)}}if(a.celestial)a.score<23477631&&(a.score=23477631),a.level=generator.getCelestialLevel(a.score);else{a.level=generator.getLevel(a.score);let i=a.ws.accountData;if(a.level>=75&&i&&!i.achievements[11]){let s=i.achievements[11]=createAchievement(11);sendAchievement(a,s)}if(a.level>=45&&i&&a.ws){if(i.ohNode&&(i.ohNode=!1,!i.achievements[13])){let o=i.achievements[13]=createAchievement(13);sendAchievement(a,o)}if(i.classic&&(i.classic=!1,!i.achievements[10])){let _=i.achievements[10]=createAchievement(10);sendAchievement(a,_)}if(a.level>=60&&i.pristine&&(i.pristine=!1,!i.achievements[24])){let r=i.achievements[24]=createAchievement(24);sendAchievement(a,r)}}}if(a.displayScore=a.score*dimension.getRadiantMultiplier(a.radiant),a.levelMultiplier=Math.pow(1.01,a.level-(a.celestial?15:1)),a.size=30*Math.pow(a.dim.sizeScale,a.level-(a.celestial?0:1))*(a.celestial?1.5:1)*e,a.size>1e3&&(a.size=1e3),a.barrels)for(let d=a.barrels.length-1;d>=0;d--){let c=a.barrels[d].bullets;for(let u=c.length-1;u>=0;u--)c[u].size=a.size*c[u].rawSize}7!==a.team||a.ws.data.isPlayer||(a.name=`Fallen ${a.weapon&&a.weapon[0]?a.weapon[0].toUpperCase()+a.weapon.slice(1):"???"}-${a.body&&a.body[0]?a.body[0].toUpperCase()+a.body.slice(1):"???"}`)},ws:e,setWs:function($){a.ws=e=$},objectType:"tank",aiInput:$.ai};if(t&&(e.data.tank=a),"fallen"===$.ai)a.ai="fallen",a.aiRam=!!$.aiRam;else if("defender"===$.ai){a.range=5;let n=2*Math.random()*Math.PI,i=0;a.ai=function($){a.d=dimension.averageAngles(a.d,n,100),i<$.now&&(i=$.now+1e4+1e4*Math.random(),n=2*Math.random()*Math.PI)}}else"peacekeeper"===a.ai?a.ai="peacekeeper":$.ai&&(a.ai=$.ai);return a.update(),generator.setTankWeapon(a,a.weapon)||generator.setTankWeapon(a,"node"),generator.setTankBody(a,a.body)||generator.setTankBody(a,"base"),a.dim&&(a.dim.updatedTanks[a.id]=a,a.dim.add("tanks",a)),a.dim.autoScale&&(a.dim.mapSize,a.dim.autoScale()),a},bullet:function($){let e=$.parent._barrels[$.barrelId],t=$.barrel||e,a={id:generator.getId("bullet",$.dim),type:e.data.type,visualType:e.data.visualType||e.data.type,parent:$.parent,parentId:$.parent.id,barrelId:$.barrelId,barrel:e,barrels:[],_barrels:[],dim:$.dim||!1,damageMultiplier:$.damage||1,timeExisted:0,target:!1,lifeTime:$.lifeTime||1,health:$.health||125,maxHealth:$.health||125,damage:function($){$>0&&(a.health-=$,a.health<0&&(a.health=0))},d:$.d||0,x:$.x||0,y:$.y||0,xv:dimension.tickMultiplier*($.xv||0),yv:dimension.tickMultiplier*($.yv||0),speed:$.speed||0,size:$.size*$.parent.size,rawSize:$.size,remove:function(){if(a===$.parent.bullets[a.id]&&delete $.parent.bullets[a.id],a.barrels)for(let e=a.barrels.length-1;e>=0;e--){let n=a.barrels[e].bullets;for(let i=n.length-1;i>=0;i--)n[i].remove()}let s=a.dim.bullets.indexOf(a);s>=0&&a.dim.bullets.splice(s,1),generator.removeId("bullet",a.id,a.dim),(s=t.bullets.indexOf(a))>=0&&t.bullets.splice(s,1)}};if(3===e.data.type||4===e.data.type){let n=e.data.bulletWeapon;if(n){a.barrels=[];for(let i=0,s=n.barrels.length;i=0&&$.parent._barrels[_].data!==o;_--);a.barrels.push({current:.5*o.reload*(1-a.parent.upgrades[3]/30)*(1-o.delay)-.1,bullets:[],data:o,id:_})}}a._barrels=a.barrels.slice(0);let r=e.data.bulletBody;if(r){a.bodyData=r,a.speed*=r.movementSpeed,a.health*=r.maxHealth,a.damageMultiplier*=r.bodyDamage,a.bodyCameraSize=r.cameraSizeMultiplier,a.turrets=[],a.auras=[];for(let d=0,c=r.turrets.length;d=0&&$.parent._barrels[y].data!==g;y--);let h={current:.5*g.reload*(1-a.parent.upgrades[3]/30)*(1-g.delay)-.1,bullets:[],data:g,turret:u,active:!1,id:y};u.barrels.push(h),a._barrels.push(h)}if(u){let k=u.sectionWeapon;k&&(u.sectionWeapon={...k},u.sectionWeapon.weaponTurrets=generator.checkWeaponTurrets(k,tank,u.relativeSize));let v=u.sectionBody;v&&(u.sectionBody={...v},u.sectionBody.turrets=generator.checkTurrets(v,tank,u.relativeSize))}a.turrets.push(u)}for(let b=0,w=r.auras.length;b4&&createMessage("1187917859742027786",`\`[${new Date().toTimeString().split(" ")[0]}] Spawned ${dimension.getFullPolygonName($)} in ${$.dim.name}!\``)),$.sides=Math.floor($.sides);let e={id:generator.getId("polygon",$.dim),dim:$.dim||!1,x:$.x||0,y:$.y||0,d:$.d||0,xv:0,yv:0,alive:!0,radiant:$.radiant||0,sides:$.sides||3,score:0,health:0,maxHealth:0,regenTime:1,removeTime:0,size:0,finalDamage:{tanks:{}},damage:function($,t,a){if($>0){e.removeTime=0,e.health-=$,e.health<0&&(e.health=0),e.regenTime=0;let n=e.finalDamage[a];n&&(n[t.id]?n[t.id][15]+=$:n[t.id]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$])}},remove:function(){e.alive=!1;let $=e.dim.polygons.indexOf(e);$>=0&&e.dim.polygons.splice($,1),generator.removeId("polygon",e.id,e.dim)},update:function(){if(e.sides<0)return;e.score<150&&(e.score=250),e.displayScore=e.score*dimension.getRadiantMultiplier(e.radiant);let $=generator.getSides(e.score),t=Math.floor(e.dim.maxPolygonSides);if(t<3&&(t=3),$>t&&($=t),$!==e.sides){e.sides=$,e.size=generator.getPolygonSize(e.sides);let a=generator.getPolygonHealth(e.sides);e.speed=dimension.tickMultiplier*generator.getPolygonSpeed(e.sides),e.health*=a/e.maxHealth,e.maxHealth=a}}};return e.sides<0?e.score=1e9*Math.pow(3,-e.sides-1):e.score=250+1e3*(Math.pow(4,e.sides-3)-1)/3,e.displayScore=e.score*dimension.getRadiantMultiplier(e.radiant),e.size=generator.getPolygonSize(e.sides),e.speed=dimension.tickMultiplier*generator.getPolygonSpeed(e.sides),e.health=e.maxHealth=generator.getPolygonHealth(e.sides),e.dim&&e.dim.add("polygons",e),e},getPolygonSize:function($){return $>=3?20*Math.pow(1.5,$-3):50*Math.pow(1.4,-$-1)},getPolygonSpeed:function($){return $>=3?Math.pow(.6,$-3):.5*Math.pow(.4,-$-1)},getPolygonHealth:function($){return $>=3?15*Math.pow(3.5,$-3):5e4*Math.pow(2,-$-1)},wormhole:function($){let e=$.size||75,t={id:generator.getId("wormhole",$.dim),dim:$.dim||!1,type:$.type||0,color:$.color>=0?$.color:8,radiant:$.radiant>=0||$.radiant<=0?$.radiant:0===$.type?0:1,x:$.x||0,y:$.y||0,objects:{},_objects:{},time:$.time||30,fadeTime:0,action:$.action||function(){},onRupture:$.onRupture,ruptured:$.ruptured||!1,entries:0,contents:0,size:e,defaultSize:e*e,remove:function(){t.dim.wormholes[t.id]===t&&delete t.dim.wormholes[t.id],t.dim.removedWormholes[t.id]=t,generator.removeId("wormhole",t.id,t.dim)},rupture:function(){!t.ruptured&&(t.ruptured=!0,t.time=30+20*Math.random(),t.dim.rupturedWormholes[t.id]=t,t.onRupture&&t.onRupture(t))}};return t.dim&&(t.dim.wormholes[t.id]=t,t.dim.addedWormholes[t.id]=t),t}},packer={gameStart:function($){let e=$.dim,t=[];for(let a=e.tanks.length-1;a>=0;a--){let n=e.tanks[a];t.push([n.id,n.name,n.team,n.radiant,n.weapon,n.body,!!n.ws&&!!n.ws.accountNameParsed])}let i=dimension.leaderboard(e),s=[];for(let o=0;o<8;o++){let _=i[o];_?s.push([_.id,"tank"===_.objectType?0:[_.sides,_.radiant],Math.round(_.score)]):s.push([-o-1,[0,0],1])}let r=[];for(let d=0,c=e.gates.length;d=0){let t=[0];for(let a in $.tanks){let n=$.tanks[a],i=(Math.round(n.d/Math.PI*1e3)%2e3+2e3)%2e3,s=[],o=n._d.length;if(o<=1)s=i;else{let _=!0;for(let r=0;r<5;r++)r0&&n._d[r]!==s[r-1]&&(_=!1)):s.push(i);_&&(s=i)}let d=[];for(let c=0,u=n._turrets.length;c=0&&m.push(f),t.push(m)}e.push(t)}if(Object.keys($.dim.updatedTanks)[0]>=0){let g=[1];for(let y in $.dim.updatedTanks){let h=$.dim.updatedTanks[y],k=[h.id,h.name,h.team,h.radiant,h.weapon,h.body,!!h.ws&&!!h.ws.accountData&&!!h.ws.accountData.accountNameParsed];g.push(k)}e.push(g)}if(Object.keys($.dim.chatMessages)[0]>=0){let v=[2];for(let b in $.dim.chatMessages)v.push([b,$.dim.chatMessages[b]]);e.push(v)}if(Object.keys($.bullets)[0]>=0){let w=[3],x={},z={};for(let T in $.bullets){let S=$.bullets[T],P=S.parentId,D=S.barrelId;P in x||(x[P]={},z[P]=P);let W=x[P],j=[S.id,Math.round(S.x),Math.round(S.y),(Math.round(S.d/Math.PI*100)%200+200)%200,Math.floor((1-S.health/S.maxHealth)*100)];if(S.turrets&&S.turrets[0]){let B=[];for(let C in S.turrets){let M=S.turrets[C];B.push((Math.round(M.d/Math.PI*100)%200+200)%200)}j.push(B)}D in W?W[D].push(j):W[D]=[D,j]}for(let I in x){let H=x[I],U=[z[I]];for(let N in H)U.push(H[N]);w.push(U)}e.push(w)}if(Object.keys($.polygons)[0]>=0){let F=[4],R={},O={},A={};for(let Y in $.polygons){let E=$.polygons[Y],X=R[E.radiant];if(X||(X=R[E.radiant]={},O[E.radiant]=E.radiant),X[E.sides])X[E.sides][E.id]=E;else{let q={};q[E.id]=E,X[E.sides]=q,A[E.sides]=E.sides}}for(let G in R){let L=R[G=O[G]],K=[G];for(let J in L){let V=L[J],Q=[A[J]];for(let Z in V){let $$=V[Z];Q.push([$$.id,Math.round($$.x),Math.round($$.y),(Math.round($$.d/Math.PI*500)%1e3+1e3)%1e3,Math.floor((1-$$.health/$$.maxHealth)*500),])}K.push(Q)}F.push(K)}e.push(F)}if(Object.keys($.dim.leaderboardChanges)[0]>=0){let $e=[5].concat($.dim.leaderboardChanges);e.push($e)}if(Object.keys($.dim.updatedGates)[0]>=0){let $t=[6];for(let $a in $.dim.updatedGates){let $n=$.dim.updatedGates[$a];$t.push($n)}e.push($t)}if(Object.keys($.dim.resizedWormholes)[0]>=0){let $l=[7];for(let $i in $.dim.resizedWormholes){let $s=$.dim.resizedWormholes[$i];$l.push([$s.id,Math.round($s.size)])}e.push($l)}if(Object.keys($.dim.rupturedWormholes)[0]>=0){let $o=[8];for(let $_ in $.dim.rupturedWormholes){let $r=$.dim.rupturedWormholes[$_];$o.push($r.id)}e.push($o)}if(Object.keys($.dim.fadeTimeChanges)[0]>=0){let $d=[9];for(let $3 in $.dim.fadeTimeChanges){let $c=$.dim.fadeTimeChanges[$3];$d.push([$c.id,Math.round(100*$c.fadeTime)])}e.push($d)}if(Object.keys($.dim.removedWormholes)[0]>=0){let $u=[10];for(let $p in $.dim.removedWormholes){let $m=$.dim.removedWormholes[$p];$u.push($m.id)}e.push($u)}if(Object.keys($.dim.addedWormholes)[0]>=0){let $f=[11];for(let $g in $.dim.addedWormholes){let $1=$.dim.addedWormholes[$g];$f.push([$1.id,$1.x,$1.y,$1.type,$1.size,$1.ruptured||!1,Math.round(100*$1.fadeTime),$1.color,$1.radiant])}e.push($f)}if($.dim.darknessUpdated?e.push([12,$.dim.darkness]):$.tank.darknessUpdated>=0&&(e.push([12,$.tank.darknessUpdated]),$.tank.darknessUpdated=-1),Object.keys($.dim.updatedPortals)[0]>=0){let $0=[13];for(let $y in $.dim.updatedPortals){let $h=$.dim.updatedPortals[$y];$0.push([$h.id,$h.color,$h.radiant])}e.push($0)}if(Object.keys($.dim.updatedWalls)[0]>=0){let $k=[14];for(let $4 in $.dim.updatedWalls){let $2=$.dim.updatedWalls[$4];$2&&$k.push([parseInt($4),$2[4]||!1,$2[0],$2[1],$2[2],$2[3]])}e.push($k)}if($.dim.mapSizeUpdated&&e.push([15,$.dim.mapSizeUpdated]),Object.keys($.dim.removedWalls)[0]>=0){let $v=[16];for(let $b in $.dim.removedWalls){let $5=$.dim.removedWalls[$b];$v.push($5)}e.push($v)}return e}},commands={getTargets:function($,e){if(!$)return;let t=[],a=e.dim.tanks;switch($){case"all":return e.dim.tanks.concat(e.dim.polygons).concat(e.dim.bullets);case"bullets":return e.dim.bullets.slice();case"tanks":let n=[];for(let i=a.length-1;i>=0;i--){let s=a[i];s.polygon||n.push(s)}return n;case"polygons":return e.dim.polygons.slice();case"me":return[e];case"fallens":for(let o=a.length-1;o>=0;o--){let _=a[o];7!==_.team||_.ws.data.isPlayer||t.push(_)}return t;case"pinks":case"celes":case"celestials":for(let r=a.length-1;r>=0;r--){let d=a[r];6===d.team&&t.push(d)}return t;case"blues":for(let c=a.length-1;c>=0;c--){let u=a[c];1===u.team&&t.push(u)}return t;case"reds":for(let p=a.length-1;p>=0;p--){let m=a[p];2===m.team&&t.push(m)}return t;case"greens":for(let f=a.length-1;f>=0;f--){let g=a[f];3===g.team&&t.push(g)}return t;case"purples":for(let y=a.length-1;y>=0;y--){let h=a[y];4===h.team&&t.push(h)}return t;case"yellows":for(let k=a.length-1;k>=0;k--){let v=a[k];8===v.team&&t.push(v)}return t;case"others":for(let b=a.length-1;b>=0;b--){let w=a[b];w!==e&&t.push(w)}return t;case"polyps":for(let x=a.length-1;x>=0;x--){let z=a[x];5===z.team&&t.push(z)}return t;default:let T=$[0],S=parseInt($.slice(1));if(S>=0){if("t"===T){let P=e.dim.tanks;for(let D=P.length-1;D>=0;D--){let W=P[D];if(W.id===S)return[W]}}if("p"===T){let j=e.dim.polygons;for(let B=j.length-1;B>=0;B--){let C=j[B];if(C.id===S)return[C]}}}}},parse:function($,e,t){let a=[];for(let n=0,i=$.length;n=0)&&!(o<=0)||!(r>=0)&&!(r<=0))return{ok:!1,error:`Failed to parse position '${o} ${r}'`};a.push([o,r])}}else if("targets"===s){let d=e.splice(0,1)[0],c=commands.getTargets(d,t);if(!c||!(c.length>0))return{ok:!1,error:`Cannot find targets with selector '${d}'`};a.push(c)}else if("int"===s){let u=e.splice(0,1)[0],p=parseInt(u);if(!(p>=0)&&!(p<=0))return{ok:!1,error:`Cannot parse int '${u}'`};a.push(p)}else if("float"===s){let m=e.splice(0,1)[0],f=parseFloat(m);if(!(f>=0)&&!(f<=0))return{ok:!1,error:`Cannot parse float '${m}'`};a.push(f)}else if("string"===s)a.push(e.splice(0,1)[0]);else if("*"===s){a.push(e.join(" ")),e=[];break}}return e.length>0?{ok:!1,error:`Too many arguments! '${e.join(" ")}'`}:a},rules:{name:[[["targets","*"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];"tank"===s.objectType&&(s.name=n,s.dim.updatedTanks[s.id]=s)}}],[["*"],function($,e,t){e.name=$[0],e.dim.updatedTanks[e.id]=e}],],radiant:[[["float"],function($,e,t){e.radiant=$[0],e.dim.updatedTanks[e.id]=e,e.update()}],[["targets","float"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];"radiant"in s&&(s.radiant=n,"tank"===s.objectType&&(s.dim.updatedTanks[s.id]=s),s.update&&s.update())}}],],missile:[[["targets","position"],function($,e,t){let a=$[0],n=$[1],i=function($){if(!$.alive)return;let e=generator.tank({dim:$.dim,x:n[0],y:n[1],name:"I'm hungry, and I want "+$.name+"s",weapon:"abyssling",body:"abyssling",forceDeathScore:2e7,score:1e9,radiant:1,team:8,invincible:!1,ai:function(a){let n=[0,0],i=$.x,s=$.y;if(!$.alive){e.remove();return}try{t.update(a.now,i,s,[e.x,e.y]);let o=t.getImpulse(e.x,e.y);if(t.directPath(e.x,e.y,i,s))n[0]=i,n[1]=s,t.lastTarget=n;else if(o>=0){let _=[50,0,-50,0][o],r=[0,50,0,-50][o];n[0]=_?e.x+_:e.x,n[1]=r?e.y+r:e.y,t.lastTarget=n}else n=t.lastTarget}catch(d){console.log(d)}e.firing=!0;let c=[n[0]-e.x,n[1]-e.y];e.d=dimension.averageAngles(e.d,Math.atan2(-c[0],c[1]),2),e.input.movement[0]=-Math.sin(e.d),e.input.movement[1]=Math.cos(e.d)}}),t=pathfind.controller({tank:$,range:Math.ceil($.dim.mapSize/100*2),maxSteps:1e3,updateInterval:1e3,dx:0,dy:0,r:100});return t.lastTarget=[e.x,e.y],e};for(let s=a.length-1;s>=0;s--){let o=a[s];o.static||i(o)}}]],fallen:[[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];"tank"!==i.objectType||i.static||((i.invisible||i.noHitBox)&&i.remove(),i.team=7,i.invincible=!1,i.invincibleTime=0,i.ws.sendPacket&&i.ws.data.isPlayer&&(i.ws.data.uid>=0||args.standalone)&&(args.standalone?i.ws.sendPacket("death",[["/fallen"],0]):(e.ws.data.ready=!1,args.parentPort.postMessage(["death",[i.ws.data.uid,0,[["/fallen"],0],i.ws.data.lastTeam]]))),i.ws&&(i.ws.data.tank=!1,i.ws.data.respawnScore=0,i.ws={data:{isPlayer:!1},sendPacket:function(){}}),i.dim.updatedTanks[i.id]=i)}}]],bot:[[["position","*"],function($,e){let t=$[0];generator.tank({dim:e.dim,x:t[0],y:t[1],name:$[1],weapon:"node",body:"base",score:0,radiant:0,team:8})}]],fallenbot:[[["position","*"],function($,e){let t=$[0];generator.tank({dim:e.dim,x:t[0],y:t[1],name:$[1],weapon:"node",body:"base",score:0,radiant:0,team:7})}]],drag:[[[],function($,e,t){e.dragTarget=!1}],[["targets"],function($,e,t){let a=$[0];e.dragTarget=a}]],dragwall:[[[],function($,e,t){e.dragWall=!1}],[["string"],function($,e,t){let a=e.dim;if("w"===$[0][0]){let n=parseInt($[0].slice(1)),i=a.walls[n];i&&n>=a.defaultWalls&&(e.dragWall=i)}else"snap"===$[0]?e.dragWallSnap=!0:($[0]="nosnap",delete e.dragWallSnap)}]],wallsize:[[["int","int"],function($,e,t){let a=e.dim.walls.indexOf(e.dragWall);e.dragWall&&a>=0&&(e.dragWall[2]=$[0]>10?$[0]:10,e.dragWall[3]=$[1]>10?$[1]:10,e.dim.updatedWalls[a]=e.dragWall)}]],wallteam:[[["int"],function($,e,t){let a=e.dim.walls.indexOf(e.dragWall);e.dragWall&&a>=0&&(e.dragWall[4]=$[0]>=0?$[0]:0,e.dim.updatedWalls[a]=e.dragWall)}]],createwall:[[[],function($,e,t){let a=[e.mousePosition[0],e.mousePosition[1],100,100],n=e.dim,i=0;for(i=n.defaultWalls,l=n.walls.length;i0&&(t.sendPacket("eval",`navigator.clipboard.writeText(${JSON.stringify(JSON.stringify(a))})`),t.sendPacket("announcement","Copied to clipboard"))}]],loadwalls:[[["string"],function($,e,t){let a=dimension.loadWalls(e.dim,$[0]);t.sendPacket("announcement",a)}]],uploadwalls:[[["*"],function($,e,t){try{let a=JSON.parse($[0]);if(a&&a.length>0){let n=dimension.loadWalls(e.dim,a,!0);t.sendPacket("announcement",n)}else t.sendPacket("announcement","Failed: ")}catch(i){t.sendPacket("announcement","Failed: "+i)}}]],removewall:[[["string"],function($,e,t){let a=e.dim;if("walls"===$[0]){let n=a.walls.length;if(n>a.defaultWalls){for(let i=a.defaultWalls;i=a.defaultWalls){let o=a.walls.length-1;s===o?a.walls.splice(o,1):delete a.walls[s],a.removedWalls[s]=s}}}]],kill:[[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];i.static&&(i.invincible||i.inBase||i.prevInBase)||(i.health=0,"regenTime"in i&&(i.regenTime=0))}}]],maxstats:[[[],function($,e,t){$[0],e.upgrades=[15,15,15,15,15,15,15,15],e.countUpgrades(),e.ws.sendPacket("setStats",e.upgrades)}],[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];i.static||"tank"!==i.objectType||(i.upgrades=[15,15,15,15,15,15,15,15],i.countUpgrades(),i.ws.sendPacket("setStats",i.upgrades))}}]],reset:[[[],function($,e,t){e.health=e.maxHealth,e.upgrades=[0,0,0,0,0,0,0,0],e.score=0,e.countUpgrades(),e.removeBullets(),generator.setTankWeapon(e,"node"),generator.setTankBody(e,"base"),e.firedBarrels={},e.update(),generator.updateTank(e),e.dim.updatedTanks[e.id]=e,e.removeBullets(),e.ws.sendPacket("setStats",e.upgrades)}],[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];i.static||"tank"!==i.objectType||(i.health=i.maxHealth,i.upgrades=[0,0,0,0,0,0,0,0],i.score=0,i.countUpgrades(),i.removeBullets(),generator.setTankWeapon(i,"node"),generator.setTankBody(i,"base"),i.firedBarrels={},i.update(),generator.updateTank(i),i.dim.updatedTanks[i.id]=i,i.removeBullets(),i.ws.sendPacket("setStats",i.upgrades))}}]],resetstats:[[[],function($,e,t){e.upgrades=[0,0,0,0,0,0,0,0],e.countUpgrades(),e.ws.sendPacket("setStats",e.upgrades)}],[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];i.static||"tank"!==i.objectType||(i.upgrades=[0,0,0,0,0,0,0,0],i.countUpgrades(),i.ws.sendPacket("setStats",i.upgrades))}}]],ascend:[[[],function($,e,t){e.ascend(),e.update(),e.dim.updatedTanks[e.id]=e,e.ws.sendPacket("setStats",e.upgrades)}],[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];"tank"===i.objectType&&!i.static&&(i.ascend(),i.update(),i.dim.updatedTanks[i.id]=i,i.ws&&i.ws.sendPacket("setStats",i.upgrades))}}]],announce:[[["*"],function($,e,t){let a=e.dim.tanks;for(let n=a.length-1;n>=0;n--){let i=a[n];i.ws&&i.ws.sendPacket("announcement",$[0])}}]],globalannounce:[[["*"],function($,e,t){args.parentPort.postMessage(["globalAnnounce",$[0]])}]],pulltanks:[[[],function($,e,t){for(let a in dimension.dims)if(!a.startsWith("pvp")){let n=dimension.dims[a].tanks;for(let i=n.length-1;i>=0;i--){let s=n[i];!s||"tank"!==s.objectType||s.static||s.dim===e.dim||e.polygon||dimension.sendTankTo({tank:s,dim:e.dim.name})}}}]],ban:[[["targets"],function($,e,t){}]],kick:[[["targets"],function($,e,t){}]],remove:[[["targets"],function($,e,t){let a=$[0];for(let n=a.length-1;n>=0;n--){let i=a[n];i.remove&&!i.static&&(i.remove(),i.ws&&i.ws.sendPacket&&(i.ws.data.respawnScore=0,i.ws.data.tank=!1,i.ws.data.isPlayer&&(i.ws.data.uid>=0||args.standalone)&&(args.standalone?i.ws.sendPacket("death",[["/remove"],0]):(e.ws.data.ready=!1,args.parentPort.postMessage(["death",[i.ws.data.uid,0,[["/remove"],0],i.ws.data.lastTeam]])))))}}]],wormhole:[[["position","string"],function($,e,t){generator.wormhole({x:$[0][0],y:$[0][1],size:40,type:1,time:30,dim:e.dim,ruptured:!0,action:function(e){dimension.sendTankTo({tank:e,dim:$[1]})}})}]],tp:[[["targets"],function($,e,t){let a=$[0],n=e.mousePosition;for(let i=a.length-1;i>=0;i--){let s=a[i];s.static||(s.x=n[0],s.y=n[1])}}],[["targets","position"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];s.static||(s.x=n[0],s.y=n[1])}}]],polygon:[[["int"],function($,e,t){let a=$[0];a>=3&&a<=20&&generator.polygon({x:e.x,y:e.y,d:2*Math.PI*Math.random(),sides:a,dim:e.dim,radiant:0})}],[["int","int"],function($,e,t){let a=$[0],n=$[1];a>=3&&a<=20&&generator.polygon({x:e.x,y:e.y,d:2*Math.PI*Math.random(),sides:a,dim:e.dim,radiant:n})}],[["int","position"],function($,e,t){let a=$[0],n=$[1];a>=3&&generator.polygon({x:n[0],y:n[1],d:2*Math.PI*Math.random(),sides:a,dim:e.dim,radiant:0})}],[["int","int","position"],function($,e,t){let a=$[0],n=$[1],i=$[2];a>=3&&generator.polygon({x:i[0],y:i[1],d:2*Math.PI*Math.random(),sides:a,dim:e.dim,radiant:n})}]],polyhedra:[[["int"],function($,e,t){let a=$[0];a>=1&&a<=5&&generator.polygon({x:e.x,y:e.y,d:2*Math.PI*Math.random(),sides:-a,dim:e.dim,radiant:0})}],[["int","int"],function($,e,t){let a=$[0],n=$[1];a>=1&&a<=5&&generator.polygon({x:e.x,y:e.y,d:2*Math.PI*Math.random(),sides:-a,dim:e.dim,radiant:n})}],[["int","position"],function($,e,t){let a=$[0],n=$[1];a>=1&&a<=5&&generator.polygon({x:n[0],y:n[1],d:2*Math.PI*Math.random(),sides:-a,dim:e.dim,radiant:0})}],[["int","int","position"],function($,e,t){let a=$[0],n=$[1],i=$[2];a>=1&&a<=5&&generator.polygon({x:i[0],y:i[1],d:2*Math.PI*Math.random(),sides:-a,dim:e.dim,radiant:n})}]],darkness:[[["float"],function($,e,t){e.dim.setDarkness($[0])}]],overridedarkness:[[["targets","float"],function($,e,t){let a=$[0],n=$[1];if(n>=0){n=Math.round(100*n);for(let i=a.length-1;i>=0;i--){let s=a[i];"score"in s&&!s.static&&(!("sides"in s)||s.sides>=0)&&(s.darknessUpdated=n)}}}]],maxpolygonsides:[[[],function($,e,t){let a=e.dim;a.maxPolygonSides=a._maxPolygonSides}],[["int"],function($,e,t){e.dim.maxPolygonSides=$[0]}],],maxpolygoncount:[[[],function($,e,t){let a=e.dim;a.maxPolygonCount=a._maxPolygonCount}],[["int"],function($,e,t){e.dim.maxPolygonCount=$[0]}],],mapsize:[[[],function($,e,t){let a=e.dim;a.allowScale&&(a._mapSize=a.mapSize,a.mapSizeSpeed=0)}],[["int"],function($,e,t){let a=e.dim;if(a.allowScale){let n=$[0];n<1&&(n=1),n>1e5&&(n=1e5),a.mapSize=n}}],[["int","int"],function($,e,t){let a=e.dim;if(a.allowScale){let n=$[0],i=$[1];n<1&&(n=1),n>1e5&&(n=1e5),i<1&&(i=1),a._mapSize=n,a.mapSizeSpeed=.01*i}}]],xp:[[["float"],function($,e,t){e.score=$[0],e.dim.updatedTanks[e.id]=e,e.update()}],[["targets","float"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];"score"in s&&!s.static&&(!("sides"in s)||s.sides>=0)&&(s.score=n,"tank"===s.objectType&&(s.dim.updatedTanks[s.id]=s),s.update&&s.update())}}]],addxp:[[["float"],function($,e,t){e.score+=$[0],e.dim.updatedTanks[e.id]=e,e.update()}],[["targets","float"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];"score"in s&&!s.static&&(!("sides"in s)||s.sides>=0)&&(s.score+=n,"tank"===s.objectType&&(s.dim.updatedTanks[s.id]=s),s.update&&s.update())}}]],maxxp:[[["float"],function($,e,t){e.score>$[0]&&(e.score=$[0],e.dim.updatedTanks[e.id]=e,e.update())}],[["targets","float"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];"score"in s&&!s.static&&(!("sides"in s)||s.sides>=0)&&s.score>n&&(s.score=n,"tank"===s.objectType&&(s.dim.updatedTanks[s.id]=s),s.update&&s.update())}}]],minxp:[[["float"],function($,e,t){e.score<$[0]&&(e.score=$[0],e.dim.updatedTanks[e.id]=e,e.update())}],[["targets","float"],function($,e,t){let a=$[0],n=$[1];for(let i=a.length-1;i>=0;i--){let s=a[i];"score"in s&&!s.static&&(!("sides"in s)||s.sides>=0)&&s.score=0||"random"===n)for(let s=i.length-1;s>=0;s--){let o=i[s];"team"in o&&"tank"===o.objectType&&!o.static&&(o.team="random"===n?1+Math.floor(4*Math.random()):a,o.dim.updatedTanks[o.id]=o)}}}],[["string"],function($,e,t){let a={ffa:0,blue:1,red:2,green:3,purple:4,polygon:5,celestial:6,cele:6,pink:6,fallen:7,gray:7,yellow:8};if($[0]){let n=$[0].toLowerCase();((a=a[n])>=0||"random"===n)&&(e.team="random"===n?1+Math.floor(4*Math.random()):a,e.dim.updatedTanks[e.id]=e)}}]],weapon:[[["string"],function($,e,t){let a=$[0]||"";a!==e.weapon&&a in tankData.weapons&&(e.removeBullets(),generator.setTankWeapon(e,a),e.firedBarrels={},e.update(),generator.updateTank(e),e.dim.updatedTanks[e.id]=e)}],[["targets","string"],function($,e,t){let a=$[0],n=$[1];if(n in tankData.weapons)for(let i=a.length-1;i>=0;i--){let s=a[i];s&&"tank"===s.objectType&&n!==s.weapon&&(s.removeBullets(),generator.setTankWeapon(s,n),s.firedBarrels={},s.update(),generator.updateTank(s),s.dim.updatedTanks[s.id]=s)}}]],body:[[["string"],function($,e,t){let a=$[0]||"";a!==e.body&&a in tankData.bodies&&(e.removeBullets(),generator.setTankBody(e,a),e.firedBarrels={},e.update(),generator.updateTank(e),e.dim.updatedTanks[e.id]=e)}],[["targets","string"],function($,e,t){let a=$[0],n=$[1];if(n in tankData.bodies)for(let i=a.length-1;i>=0;i--){let s=a[i];s&&"tank"===s.objectType&&n!==s.body&&(s.removeBullets(),generator.setTankBody(s,n),s.firedBarrels={},s.update(),generator.updateTank(s),s.dim.updatedTanks[s.id]=s)}}]],dim:[[["string"],function($,e,t){let a=$[0];a&&dimension.sendTankTo({dim:a,tank:e})}],[["targets","string"],function($,e,t){let a=$[0],n=$[1];if(!(n&&e&&e.dim.name.startsWith("pvp")^n.startsWith("pvp"))&&n)for(let i=a.length-1;i>=0;i--){let s=a[i];s&&"tank"===s.objectType&&!s.static&&dimension.sendTankTo({dim:n,tank:s})}}]],s:[[["string"],function($,e,t){let a=$[0];a&&dimension.sendTankTo({dim:a,tank:e,override:!0})}],[["targets","string"],function($,e,t){let a=$[0],n=$[1];if(!(n&&e&&e.dim.name.startsWith("pvp")^n.startsWith("pvp"))&&n)for(let i=a.length-1;i>=0;i--){let s=a[i];s&&"tank"===s.objectType&&!s.static&&dimension.sendTankTo({dim:n,tank:s,override:!0})}}]],vanish:[[[],function($,e,t){e.invisible=!0,e.ws.sendPacket("announcement","Vanished into thin air.")}],[["string"],function($,e,t){let a=$[0];["true","yes","me"].indexOf(a)>=0?(e.invisible=!0,e.ws.sendPacket("announcement","Vanished into thin air.")):["false","no"].indexOf(a)>=0&&(e.invisible=!1,e.ws.sendPacket("announcement","Popped into existence."))}],[["targets","string"],function($,e,t){let a=$[0],n=$[1],i=!1;if(["true","yes","me"].indexOf(n)>=0)i=!0;else{if(!(["false","no"].indexOf(n)>=0))return;i=!1}for(let s=a.length-1;s>=0;s--){let o=a[s];o&&"tank"===o.objectType&&!o.static&&(o.invisible=i,o.ws.sendPacket("announcement",i?"Vanished into thin air.":"Popped into existence."))}}]],god:[[[],function($,e,t){e.invincible=!0,e.invincibleTime=!1,e.ws.sendPacket("announcement","You are now invincible.")}],[["string"],function($,e,t){let a=$[0];["true","yes","me"].indexOf(a)>=0?(e.invincible=!0,e.invincibleTime=!1,e.ws.sendPacket("announcement","You are now invincible.")):["false","no"].indexOf(a)>=0&&(e.invincible=!1,e.invincibleTime=!1,e.ws.sendPacket("announcement","You are now not invincible."))}],[["targets","string"],function($,e,t){let a=$[0],n=$[1],i=!1;if(["true","yes","me"].indexOf(n)>=0)i=!0;else{if(!(["false","no"].indexOf(n)>=0))return;i=!1}for(let s=a.length-1;s>=0;s--){let o=a[s];o&&"tank"===o.objectType&&!o.static&&(o.invincible=i,o.invincibleTime=!1,o.ws.sendPacket("announcement",i?"You are now invincible.":"You are now not invincible."))}}]],antilag:[[[],function($,e,t){dimension.antilag()}]],antibot:[[[],function($,e,t){dimension.antibot()}]],restart:[[[],function($,e,t){args.parentPort.postMessage(["restart"])}]],fullfov:[[[],function($,e,t){e.fullFov=!0}],[["string"],function($,e,t){let a=$[0];["true","yes","me"].indexOf(a)>=0?e.fullFov=!0:["false","no"].indexOf(a)>=0&&(e.fullFov=!1)}]]},execute:function($,e,t,a){e.dim;let n=$.slice(1).split(" "),i=n[0];if(n=n.slice(1),"help"===i){let s=[];for(let o in commands.rules)s.push(o),s.length>5&&(t.sendPacket("announcement",s.join(", ")),s=[]);return s.length&&t.sendPacket("announcement",s.join(", ")),t.sendPacket("announcement","List of commands: "),!1}let _=commands.rules[i];if(!_)return t.sendPacket("announcement","That command doesnt exist. /help"),!1;if(!(t.data.commands&&t.data.commands[i]||a))return t.sendPacket("announcement","You don't have access to use that command."),!1;if(_){let r=[];for(let d=0,c=_.length;d{$.data={ready:!1,tank:!1,waiting:!1,lastChat:0,respawnScore:0,lastTeam:0,admin:!1,isPlayer:!0,closed:!1,commands:{},saveCode:"",timeStart:!1},$._headers&&($._headers["scenexe2-savecode"]&&($.data.saveCode=$._headers["scenexe2-savecode"]),$._headers["scenexe2-uid"]>=0&&($.data.uid=parseInt($._headers["scenexe2-uid"])),$._headers["scenexe2-lastteam"]>=0&&($.data.lastTeam=parseInt($._headers["scenexe2-lastteam"])),$._headers["scenexe2-accountdata"]&&$._headers["scenexe2-accountname"]&&($.accountData=JSON.parse($._headers["scenexe2-accountdata"]),$.accountName=$._headers["scenexe2-accountname"],$.accountNameParsed=$.accountData.accountNameParsed));let t=function($){return $};$.sendPacket=function(e){e in game.codes.recieve&&$.send&&(arguments.length>1?$.send(t(pack([game.codes.recieve[e],arguments[1]]))):$.send(t(pack([game.codes.recieve[e]]))))};let a=[];for(let n in dimension.dims){let i=dimension.dims[n];i.freeJoin&&a.push([n,i.displayName,i.displayColor,i.displayRadiant])}clients.push($);let s=!1;$.failedHeaderCheck&&(s=!0),$.data.ready=1,args.standalone&&setTimeout(function(){$.sendPacket("ready",a)}),$.on("message",e=>{let t;try{t=unpack(e)}catch(a){$.close(),$.sendPacket=function(){};return}if(t[0]in game.codes.send)try{let n=game.codes.send[t[0]];if("captcha"===n)return;if("ping"===n)return;if("token"===n)return;else if(!$.data.ready)return;if("restore"===n);else if("joinGame"===n){if($.timeStart=_performance.now(),t[1][2],!1===$.data.tank&&!1===$.data.waiting&&t[1]){if($.sendPacket("waiting",[!1]),args.testing){let i=access.testing;for(let s=i.length-1;s>=0;s--)$.data.commands[i[s]]=!0}let o=0;if(40960*Math.random()<1)for(o++;9*Math.random()<1;)o++;let _=dimension.dims[t[1][1]];if(!_)return;let r=t[1][0];if(r&&(r=r.slice(0,50),void 0!==checkName&&!checkName(r))){$.close(),$.sendPacket=function(){};return}if(t[1][3]){let d=t[1][3];if(!1===d[0])$.data.respawnScore=d[1]||0;else{d[0].dim=_,_.newTanks.push([d[0],$,d[1]]),$.data.commands={...$.data.commands,...d[0].commands},$.data.lastTeam=d[0].team;return}}let c=0;c="2teams"===_.type?$.data.lastTeam>0&&$.data.lastTeam<3?$.data.lastTeam:1+Math.floor(2*Math.random()):"ffa"===_.type?0:$.data.lastTeam>0&&$.data.lastTeam<5?$.data.lastTeam:1+Math.floor(4*Math.random()),$.data.lastTeam=c;let u=$.data.respawnScore||0;$.accountData&&(u<100?($.accountData.ohNode=!0,$.accountData.classic=!0,$.accountData.pristine=!0):($.accountData.ohNode=!1,$.accountData.classic=!1,$.accountData.pristine=!1));let p={dim:_,x:0,y:0,name:r||"",weapon:"node",body:"base",score:u,radiant:o,team:c};if(console.log("joinGame",`name:${r} score:${Math.round(u)} dim:${_.name}`),$.data.waiting=!0,_.newTanks.push([p,$]),$.data.respawnScore=0,____.indexOf($.accountName)>=0){let m=access.p2;if(_.name.includes("sandbox")){for(let f=m.length-1;f>=0;f--)$.data.commands[m[f]]=!0;setTimeout(function(){$.sendPacket("announcement","Command access granted.")},500)}}}}else if("direction"===n){if($.data.tank){if(!1===t[1])$.data.tank.input.movement=[0,0];else if(t[1]>=0&&t[1]<=200){let g=t[1]/100*Math.PI;$.data.tank.input.movement=[Math.cos(g),Math.sin(g)]}}}else if("d"===n)$.data.tank&&($.data.tank.d=(t[1]%200+200)%200/100*Math.PI);else if("chat"===n){if($.data.tank.ws!==$)return;let y=t[1];if("_0x3c4a"===y){$.____||setTimeout(function(){$.data.tank&&($.data.tank.remove(),$.data.tank=!1)},1e4+1e4*Math.random());return}if(y&&(y=y.slice(0,100)),"/"===y[0]){if((y==="/"+secret.p1||args.autoAdmin)&&!$.____){for(i in commands.rules)$.data.commands[i]=!0;$.____=!0,$.sendPacket("announcement","Command access granted.")}if(y==="/"+secret.p2&&!$.____){let h=access.p2;for(let k=h.length-1;k>=0;k--)$.data.commands[h[k]]=!0;$.____=!0,$.sendPacket("announcement","Command access granted.")}if($.data.tank){let v=commands.execute(y,$.data.tank,$);v&&console.log("command used",$.data.tank.dim?$.data.tank.dim.name:"undefined",$.accountNameParsed,y),v&&$.accountName&&$.accountName&&commands.rules[y.slice(1).split(" ")[0]]&&($.accountName=!1,$.accountData=!1,$.sendPacket("announcement","Alert: You can no longer earn achievements and this run won't be saved!"))}}else{let b=_performance.now();if(b-$.data.lastChat<750)$.sendPacket("announcement","You are sending chat messages too quickly. Please slow down.");else if($.data.tank&&y&&y.length>0){$.data.lastChat=b;let w=$.data.tank.dim;$.data.tank.id in w.chatMessages?$.sendPacket("announcement","You are sending chat messages too quickly. Please slow down."):$.data.tank.chat(y)}}}else if("typing"===n)$.data.tank&&($.data.tank.typing=!!t[1]);else if("passive"===n)$.data.tank&&($.data.tank.passive=!!t[1]);else if("firing"===n)$.data.tank&&($.data.tank.firing=t[1]%2==1,$.data.tank.droneControl=!(t[1]<2));else if("controlPosition"===n){if($.data.tank){let x=t[1][0]||0,z=t[1][1]||0;$.data.tank.controlPosition=[x,z]}}else if("upgradeStat"===n){if($.data.tank){$.data.tank.countUpgrades();let T=t[1][0];if(T>=0&&T<=7){let S=t[1][1],P=S-$.data.tank.upgrades[T],D=tankData.bodies[$.data.tank.body];D=D&&D.celestial?14:0,P>0&&$.data.tank.upgradeCount+P+D<$.data.tank.level&&S<=15?($.data.tank.upgradeCount+=P,$.data.tank.upgrades[T]=S):$.sendPacket("setStats",$.data.tank.upgrades)}}}else if("upgradeWeapon"===n){if($.data.tank){let W=t[1]||"",j=tankData.weaponUpgradeMap[$.data.tank.weapon];j&&W in tankData.weapons&&j.upgrades.indexOf(W)>=0&&$.data.tank.level>=j.level&&($.data.tank.removeBullets(),generator.setTankWeapon($.data.tank,W),$.data.tank.firedBarrels={},generator.updateTank($.data.tank),$.data.tank.dim.updatedTanks[$.data.tank.id]=$.data.tank)}}else if("upgradeBody"===n){if($.data.tank){let B=t[1]||"",C=tankData.bodyUpgradeMap[$.data.tank.body];C&&B in tankData.bodies&&C.upgrades.indexOf(B)>=0&&$.data.tank.level>=C.level&&($.data.tank.removeBullets(),generator.setTankBody($.data.tank,B),$.data.tank.firedBarrels={},generator.updateTank($.data.tank),$.data.tank.dim.updatedTanks[$.data.tank.id]=$.data.tank)}}else $.close(),$.sendPacket=function(){}}catch(M){console.log(M)}else $.close(),$.sendPacket=function(){}}),$.on("close",()=>{$.closed=!0;let e=clients.indexOf($);e>=0&&clients.splice(e,1),game.clients=clients=Array.from(server.clients);let t=function(){if($.data.tank){let e=$.data.tank;gameEnd(e),e.ws.send=!1,delete $.data.uid,e.team=7,(e.invisible||e.noHitBox||e.dim.removeFallens)&&e.remove(),e.invincible=!1,e.invincibleTime=0,e.ws.data.isPlayer=!1,e.ws.accountName=!1,e.ws.accountData=!1,e.name=`Fallen ${e.weapon&&e.weapon[0]?e.weapon[0].toUpperCase()+e.weapon.slice(1):"???"}-${e.body&&e.body[0]?e.body[0].toUpperCase()+e.body.slice(1):"???"}`,e.dim.updatedTanks[e.id]=e;let t=0;for(let a=e.dim.tanks.length-1;a>=0;a--)7===e.dim.tanks[a].team&&!e.ws.data.isPlayer&&t++;t>=10?e.remove():("sanctuary"===e.dim.name||"abyss"===e.dim.name)&&dimension.sendTankTo({tank:e,dim:["ffa","2teams","4teams"][Math.floor(3*Math.random())]}),console.log("removeTank",`name:${e.name} score:${e.score} dim:${e.dim.name}`)}};t()})});let startTick=function($){let e=0,t=0,a=[];function n(n){a.push(n+1e3);let i=0;for(;a[i]=24?t=0:t++;let s=e>=4;if(dimension.update($,{recordDirection:!0,updateFinalDamage:0===t,gameUpdate:s},n),s){e=0;for(let o=$.tanks.length-1;o>=0;o--){let _=$.tanks[o],r=_.ws;r.data.isPlayer&&r.sendPacket("gameUpdate",packer.gameUpdate({tank:_,tanks:_.fov.tanks,bullets:_.fov.bullets,polygons:_.fov.polygons,id:_.id,score:Math.floor(_.score),dim:_.dim}))}dimension.reset($)}else e++}setInterval(function(){let $=_performance.now();for(let e in game.tokens){let t=game.tokens[e],a=game.tokenUses[e],n=a.length;for(let i=0;i=3)&&(delete game.tokens[e],delete game.tokenUses[e],console.log(`Delete token ${e}, total ${Object.keys(game.tokens).length}`))}},5e3);let i=0,s=0;setInterval(function(){let $=_performance.now();$-s>500&&dimension.antilag(),$>=i&&(s=$,i+=20*(1+Math.floor(($-i)*.05)),n($))},9)},wormhole={count:function($,e){let t=[];for(let a in $.wormholes){let n=$.wormholes[a];n.type===e&&t.push(n)}return t},main:function($){setInterval(function(){if(.3>Math.random()){let e=wormhole.count($,0),t=0;if(Math.random()<(t=0===e.length?.5:2/(3+e.length))){let a=$.mapSize-2e3,n=(2*Math.random()-1)*a,i=(2*Math.random()-1)*a;Math.random()>.01?generator.wormhole({x:n,y:i,size:100,type:0,time:30+60*Math.random(),dim:$,action:function($){let e=tankData.bodies[$.body]||{};6===$.team||e.celestial||$.ascend(),7!==$.team?dimension.sendTankTo({tank:$,dim:"sanctuary"}):dimension.sendTankTo({tank:$,dim:["ffa","2teams","4teams"][Math.floor(3*Math.random())]})},onRupture:function($){$.action=function($){dimension.sendTankTo({tank:$,dim:"crossroadsLobby"})}}}):generator.wormhole({x:n,y:i,size:100,type:0,radiant:1,time:30+60*Math.random(),dim:$,action:function($){dimension.sendTankTo({tank:$,dim:"abyssHallway"})}})}}},1e3)}},load=function(p){try{eval(fs.readFileSync(p).toString())}catch(e){console.log(`Failed to load dim from ${p}: ${e}`)}},special=function(p,dim){if(dim)try{eval(fs.readFileSync(p).toString())}catch(e){console.log(`Failed to load special from ${p}: ${e}`)}};eval(args.start);let createAbyssling=function($){if($.tank.isAbyssling)return;let e=$.tank,t=generator.tank({weight:$.weight,speed:$.speed,dim:$.dim,x:"x"in $?$.x:3600,y:$.y||0,name:"I'm hungry, and I want "+e.name+"s",weapon:"abyssling",body:"abyssling",forceDeathScore:2e7,score:1e9,radiant:1,team:8,invincible:!1,clip:!0,ai:function($){let a=$.now,n=[e.x-t.x,e.y-t.y],i=Math.sqrt(n[0]*n[0]+n[1]*n[1]);if(i<1&&(i=1),t.input.movement=[n[0]/i,n[1]/i],t.d=Math.atan2(-n[0],n[1]),a-e.lastChat>5e3&&.002>Math.random()){let s=["pls feed me","come to daddy","they never said i had to chase my food","im thirsty","why are you running :(","come here, lets be friends","im friendly, come have a hug"];s.push(`omg, ${e.weapon&&e.weapon[0]?e.weapon[0].toUpperCase()+e.weapon.slice(1):"???"}-${e.body&&e.body[0]?e.body[0].toUpperCase()+e.body.slice(1):"???"}s, my favourite`),t.chat(s[Math.floor(Math.random()*s.length)])}e.alive||t.remove()}});return t.isAbyssling=!0,t.firing=!0,t},addBot=function($){let e=$[1],t=0,a=0,n=0;t=e[0].team>=5&&!(dimension.noPinkTeam&&6===e[0].team)?e[0].team:"2teams"===dim.type?ws.data.lastTeam>0&&ws.data.lastTeam<3?ws.data.lastTeam:1+Math.floor(2*Math.random()):"ffa"===dim.type?0:ws.data.lastTeam>0&&ws.data.lastTeam<5?ws.data.lastTeam:1+Math.floor(4*Math.random()),e[0].team=t,e[0].dim=dimension.dims[$[0]];let i=generator.tank(e[0]);[a,n]=e[0].dim.spawnPlayer(t,i,e[1]),i.x=a,i.y=n},spawnPolygon=function($){let e;e=$.spawnPolygon?$.spawnPolygon():[(.5>Math.random()?1:-1)*$.mapSize*Math.random(),(.5>Math.random()?1:-1)*$.mapSize*Math.random()];let t=5+5*Math.random();for(let a=0;a=0;a--){let n=$.polygons[a];n.sides in t?t[n.sides]++:t[n.sides]=1}let i=0,s=$===dimension.dims.abyss||$===dimension.dims.abyssHallway,o=$===dimension.dims.crossroads;if((s&&Math.random()>.15||"assault"===$.name)&&i++,$.gleaming&&Math.random()>.5&&(i++,Math.random()>.75&&i++),o&&12.5*Math.random()<1&&i++,4096*Math.random()<1&&i++,i>0){let _=s?12:9;for(;Math.random()*_<1;)i++}let r={},d=0,c=1;for(let u=3;u<=$.maxPolygonSides;u++){let p=1*c/(1+(t[u]||0));u>5&&(s||o)?(r[u]=50*p,d+=50*p):(r[u]=p,d+=p),o?c*=.3:c*=s?.35:.3}let m=Math.random()*d,f=0,g=3;for(let y in r)if(m<(f+=r[y])){g=parseInt(y);break}if($.nextSpawnPolyhedra){for($.nextSpawnPolyhedra=!1,g=-1,i=0;g>-5&&5*Math.random()<1;)g--;if(4096*Math.random()<1)for(i++;9*Math.random()<1;)i++}generator.polygon({x:e[0],y:e[1],d:2*Math.PI*Math.random(),sides:g,dim:$,radiant:i})};return setInterval(function(){let $={};for(let e in dimension.dims){let t=dimension.dims[e];$[e]=t.playerCount()}args.parentPort.postMessage(["playerCount",$])},1e3),{game,dimension,packer,generator,Detector,View,httpServer,server,commands,addBot,____:function($){____=$}}};module.exports={run:function(options,t){let text=fs.readFileSync(options.tankDataFile||"./tankData.js").toString(),window={};eval(text),secret=options.secret;let data=main(window.tankData,options);return t&&eval(t),data}},process.on("SIGINT",function(){console.log("\nExit from SIGINT (Ctrl-C)"),process.exit(0)});