View difference between Paste ID: hFWYCmzs and G5rUq6cC
SHOW: | | - or go back to the newest paste.
1
// ==UserScript==
2
// @name        RednelssBots
3
// @namespace   RednelssBots
4
// @include     http://agar.io/
5
// @version     1.00
6
// @grant       none
7
// @author      youtube.com/RednelssPlay
8
// ==/UserScript==
9
10
var changed = 0;
11
12
window.addEventListener('beforescriptexecute', function (e) {
13
    src = e.target.src;
14
    if (src.search(/main_out\.js..../) != -1) {
15
        changed++;
16
        e.preventDefault();
17
        e.stopPropagation();
18
        append(new_main_out);
19
    };
20
    if (changed == 1)
21
        window.removeEventListener(e.type, arguments.callee, true);
22
}, true);
23
24
function append(s) {
25
    console.log('append fired');
26
    document.head.appendChild(document.createElement('script'))
27
    .innerHTML = s.toString().replace(/^function.*{|}$/g, '');
28
}
29
30
function new_main_out() {
31
    var totalBotCount = 0;
32
33
    function game(h, r, bot, botUrl, botName) {
34
35
        var window = h;
36
        var canvas;
37
        var botsUrl;
38
        var botsCount = 250;
39
        var botsCreated = false;
40
41
        if(bot){
42
            totalBotCount++;
43
            botName = botName + "_b" + totalBotCount;
44
        }
45
46
        function init() {
47
48
49
            if(bot){
50
                console.log("bot - " + botName);
51
                connectTo(botUrl);
52
                setInterval(sendPosition, 100);
53
                return;
54
            }
55
56
            //! bot
57
58
            loadRegions();
59
            setInterval(loadRegions, 18E4);
60
61
            A = X = document.getElementById("canvas");
62
            canvas = A;
63
64
            d = canvas.getContext("2d");
65
66
            canvas.onmousedown = function(a) {
67
                if (fa) {
68
                    var b = a.clientX - (5 + k / 5 / 2), c = a.clientY - (5 + k / 5 / 2);
69
                    if (Math.sqrt(b * b + c * c) <= k / 5 / 2) {
70
                        sendPosition();
71
                        sendCommand(17);
72
                        return
73
                    }
74
                }
75
                O = a.clientX;
76
                P = a.clientY;
77
                Y();
78
                sendPosition()
79
            };
80
            canvas.onmousemove = function(e) {
81
                O = e.clientX;
82
                P = e.clientY;
83
                Y()
84
            };
85
            canvas.onmouseup = function() {};
86
87
            var a = !1, b = !1, c = !1;
88
            if(!bot) window.onkeydown = function(e) {
89
                32 != e.keyCode || a || (sendPosition(), sendCommand(17), a = !0);
90
                81 != e.keyCode || b || (sendCommand(18), b = !0);
91
                87 != e.keyCode || c || (sendPosition(), sendCommand(21), c = !0);
92
                27 == e.keyCode && r("#overlays").fadeIn(200)
93
            };
94
            if(!bot) window.onkeyup = function(e) {
95
                32 == e.keyCode && (a = !1);
96
                87 == e.keyCode && (c = !1);
97
                81 == e.keyCode && b && (sendCommand(19), b = !1)
98
            };
99
            if(!bot) window.onblur = function() {
100
                sendCommand(19);
101
                c = b = a = !1
102
            };
103
104
            h.onresize = ga;
105
            ga();
106
107
            window.requestAnimationFrame ? window.requestAnimationFrame(ha) : setInterval(Z, 1E3 / 60);
108
109
            setInterval(sendPosition, 100);
110
111
            ia(r("#region").val())
112
113
        }
114
115
116
117
        function va() {
118
            if (.5 > g)
119
                G = null;
120
            else {
121
                for (var a = Number.POSITIVE_INFINITY, b = Number.POSITIVE_INFINITY, c = Number.NEGATIVE_INFINITY, e = Number.NEGATIVE_INFINITY, d = 0, f = 0; f < p.length; f++)
122
                    p[f].shouldRender() && (d = Math.max(p[f].size, d), a = Math.min(p[f].x, a), b = Math.min(p[f].y, b), c = Math.max(p[f].x, c), e = Math.max(p[f].y, e));
123
                G = QUAD.init({minX: a - (d + 100),minY: b - (d + 100),maxX: c + (d + 100),maxY: e + (d + 100)});
124
                for (f = 0; f < p.length; f++)
125
                    if (a = p[f], a.shouldRender())
126
                        for (b = 0; b < a.points.length; ++b)
127
                            G.insert(a.points[b])
128
                            }
129
        }
130
        function Y() {
131
            Q = (O - k / 2) / g + s;
132
            R = (P - q / 2) / g + t
133
        }
134
        function loadRegions() {
135
            null == S && (S = {}, r("#region").children().each(function() {
136
                var a = r(this), b = a.val();
137
                b && (S[b] = a.text())
138
            }));
139
            r.get("http://m.agar.io/info", function(a) {
140
                for (var b in a.regions)
141
                    r('#region option[value="' + 
142
                      b + '"]').text(S[b] + " (" + a.regions[b].numPlayers + " players)")
143
                    }, "json")
144
        }
145
        function hideMenu() {
146
            if(bot) return;
147
            r("#adsBottom").hide();
148
            r("#overlays").hide()
149
            //autoRestart = true;
150
        }
151
        function ia(a) {
152
            a && a != $ && ($ = a, ka())
153
        }
154
        function la() {
155
            r.ajax("http://m.agar.io/", 
156
                   {
157
                       error: function() {
158
                           setTimeout(la, 1E3)
159
                       },
160
                       success: function(a) {
161
                           a = a.split("\n");
162
                           connectTo("ws://" + a[0])
163
                       },
164
                       dataType: "text",
165
                       method: "POST",
166
                       cache: false,
167
                       crossDomain: !0,
168
                       data: $ || "?"})
169
        }
170
        function ka() {
171
            if(!bot) r("#connecting").show();
172
            la()
173
        }
174
        function connectTo(url) {
175
            l && (l.onopen = null, l.onmessage = null, l.onclose = null, l.close(), l = null);
176
            C = [];
177
            m = [];
178
            w = {};
179
            p = [];
180
            D = [];
181
            u = [];
182
            console.log("Connecting to " + url);
183
            l = new WebSocket(url);
184
            l.binaryType = "arraybuffer";
185
            l.onopen = function(){
186
                onConnected(url)
187
            };
188
            l.onmessage = xa;
189
            l.onclose = ya;
190
            l.onerror = function() {
191
                console.log("socket error")
192
            }
193
        }
194
        function onConnected(url) {
195
            r("#connecting").hide();
196
            console.log("socket open");
197
198
            botsUrl = url;
199
200
            var a = new ArrayBuffer(5);
201
            var b = new DataView(a);
202
            b.setUint8(0, 255);
203
            b.setUint32(1, 1, !0);
204
            l.send(a);
205
206
            restartGame()
207
        }
208
        function ya(a) {
209
            console.log("socket close");
210
            setTimeout(ka, 500)
211
        }
212
        function xa(a) {
213
            function b() {
214
                for (var a = ""; ; ) {
215
                    var b = e.getUint16(c, !0);
216
                    c += 2;
217
                    if (0 == b)
218
                        break;
219
                    a += String.fromCharCode(b)
220
                }
221
                return a
222
            }
223
            var c = 1, e = new DataView(a.data);
224
            switch (e.getUint8(0)) {
225
                case 16:
226
                    za(e);
227
                    break;
228
                case 17:
229
                    x = e.getFloat64(1, !0);
230
                    y = e.getFloat64(9, !0);
231
                    H = e.getFloat64(17, !0);
232
                    break;
233
                case 20:
234
                    m = [];
235
                    C = [];
236
                    break;
237
                case 32:
238
                    C.push(e.getUint32(1, !0));
239
                    break;
240
                case 48:
241
                    for (u = []; c < e.byteLength; )
242
                        u.push({id: 0,name: b()});
243
                    oa();
244
                    break;
245
                case 49:
246
                    a = e.getUint32(c, !0);
247
                    c += 4;
248
                    u = [];
249
                    for (var d = 0; d < a; ++d) {
250
                        var f = e.getUint32(c, !0), c = c + 4;
251
                        u.push({id: f,name: b()})
252
                    }
253
                    oa();
254
                    break;
255
                case 64:
256
                    I = e.getFloat64(1, !0), J = e.getFloat64(9, !0), K = e.getFloat64(17, !0), L = e.getFloat64(25, !0), x = (K + I) / 2, y = (L + J) / 2, H = 1, 0 == m.length && (s = x, t = y, g = H)
257
            }
258
        }
259
        function za(a) {
260
            E = +new Date;
261
            var b = Math.random(), c = 1;
262
            aa = !1;
263
            for (var e = a.getUint16(c, !0), c = c + 2, d = 0; d < e; ++d) {
264
                var f = w[a.getUint32(c, !0)], g = w[a.getUint32(c + 4, !0)], c = c + 8;
265
                f && g && (g.destroy(), g.ox = g.x, g.oy = g.y, g.oSize = g.size, g.nx = f.x, g.ny = f.y, g.nSize = g.size, g.updateTime = E)
266
            }
267
            for (; ; ) {
268
                e = a.getUint32(c, !0);
269
                c += 4;
270
                if (0 == e)
271
                    break;
272
                d = a.getFloat64(c, !0);
273
                c += 8;
274
                f = a.getFloat64(c, !0);
275
                c += 8;
276
                g = a.getFloat64(c, !0);
277
                c += 8;
278
                a.getUint8(c++);
279
                for (var h = a.getUint8(c++), l = a.getUint8(c++), k = 
280
                     a.getUint8(c++), h = (h << 16 | l << 8 | k).toString(16); 6 > h.length; )
281
                    h = "0" + h;
282
                h = "#" + h;
283
                k = a.getUint8(c++);
284
                l = !!(k & 1);
285
                k & 2 && (c += 4);
286
                k & 4 && (c += 8);
287
                k & 8 && (c += 16);
288
                for (k = ""; ; ) {
289
                    var n = a.getUint16(c, !0), c = c + 2;
290
                    if (0 == n)
291
                        break;
292
                    k += String.fromCharCode(n)
293
                }
294
                n = null;
295
                w.hasOwnProperty(e) ? (n = w[e], n.updatePos(), n.ox = n.x, n.oy = n.y, n.oSize = n.size, n.color = h) : (n = new pa(e, d, f, g, h, l, k), n.pX = d, n.pY = f);
296
                n.nx = d;
297
                n.ny = f;
298
                n.nSize = g;
299
                n.updateCode = b;
300
                n.updateTime = E;
301
                -1 != C.indexOf(e) && -1 == m.indexOf(n) && (document.getElementById("overlays").style.display = "none", m.push(n), 1 == m.length && (s = n.x, t = n.y))
302
            }
303
            a.getUint16(c, !0);
304
            c += 2;
305
            f = a.getUint32(c, !0);
306
            c += 4;
307
            for (d = 0; d < f; d++)
308
                e = a.getUint32(c, !0), c += 4, w[e] && (w[e].updateCode = b);
309
            for (d = 0; d < p.length; d++)
310
                p[d].updateCode != b && p[d--].destroy();
311
            aa && 0 == m.length
312
            && showOverlays()
313
        }
314
315
        function showOverlays(){
316
            if(! bot)
317
                r("#overlays").fadeIn(3E3);
318
            else
319
                restartGame();
320
        }
321
322
        function sendPosition() {
323
            if (null != l && l.readyState == l.OPEN) {
324
                var a = O - k / 2, b = P - q / 2;
325
                64 > a * a + b * b || qa == Q && ra == R;
326
                qa = Q;
327
                ra = R;
328
                var x = Q;
329
                var y = R;
330
331
                if(!bot){
332
                    clientX = x;
333
                    clientY = y;
334
                } else {
335
                    x = clientX;
336
                    y = clientY;
337
                }
338
339
                a = new ArrayBuffer(21);
340
                b = new DataView(a);
341
                b.setUint8(0, 16);
342
                b.setFloat64(1, x, !0);
343
                b.setFloat64(9, y, !0);
344
                b.setUint32(17, 0, !0);
345
346
                //if(bot) console.log("X="+x+", Y="+y);
347
348
                l.send(a);
349
            }
350
        }
351
        function restartGame() {
352
            if (null != l && l.readyState == l.OPEN && null != M) {
353
                var a = new ArrayBuffer(1 + 2 * M.length), b = new DataView(a);
354
                b.setUint8(0, 0);
355
                for (var c = 0; c < M.length; ++c)
356
                    b.setUint16(1 + 2 * c, M.charCodeAt(c), !0);
357
                l.send(a)
358
            }
359
        }
360
        function sendCommand(a) {
361
            if (null != l && l.readyState == l.OPEN) {
362
                var b = new ArrayBuffer(1);
363
                (new DataView(b)).setUint8(0, a);
364
                l.send(b)
365
            }
366
        }
367
        function ha() {
368
            Z();
369
            h.requestAnimationFrame(ha)
370
        }
371
        function ga() {
372
            k = h.innerWidth;
373
            q = h.innerHeight;
374
            X.width = A.width = k;
375
            X.height = A.height = q;
376
            Z()
377
        }
378
        function Aa() {
379
            if (0 != m.length) {
380
                for (var a = 0, b = 0; b < m.length; b++)
381
                    a += m[b].size;
382
                a = Math.pow(Math.min(64 / a, 1), .4) * Math.max(q / 1080, k / 1920);
383
                g = (9 * g + a) / 10
384
            }
385
        }
386
        function Z() {
387
388
            if(bot) return;
389
390
            var g = 0.5;
391
            var a = +new Date;
392
            ++Ba;
393
            E = +new Date;
394
            if (0 < m.length) {
395
                Aa();
396
                for (var b = 0, c = 0, e = 0; e < m.length; e++)
397
                    m[e].updatePos(), b += m[e].x / m.length, c += m[e].y / m.length;
398
                x = b;
399
                y = c;
400
                H = g;
401
                s = (s + b) / 2;
402
                t = (t + c) / 2
403
            } else
404
                x > K - (k / 2 - 100) / g && (x = K - (k / 2 - 100) / g), y > L - (q / 2 - 100) / g && (y = L - (q / 2 - 100) / g), x < I + (k / 2 - 100) / g && (x = (I + k / 2 - 100) / g), y < J + (q / 2 - 100) / g && (y = (J + q / 2 - 100) / g), s = (29 * s + x) / 30, t = (29 * t + y) / 30, g = (9 * g + H) / 10;
405
            va();
406
            Y();
407
            d.clearRect(0, 0, k, q);
408
            d.fillStyle = ba ? "#111111" : "#F2FBFF";
409
            d.fillRect(0, 0, k, q);
410
            d.save();
411
            d.strokeStyle = ba ? "#AAAAAA" : "#000000";
412
            d.globalAlpha = .2;
413
            d.scale(g, g);
414
            b = k / g;
415
            c = q / g;
416
            for (e = -.5 + (-s + b / 2) % 50; e < b; e += 50)
417
                d.beginPath(), d.moveTo(e, 0), d.lineTo(e, c), d.stroke();
418
            for (e = -.5 + (-t + c / 2) % 50; e < c; e += 50)
419
                d.beginPath(), d.moveTo(0, e), d.lineTo(b, e), d.stroke();
420
            d.restore();
421
            p.sort(function(a, b) {
422
                return a.size == b.size ? a.id - b.id : a.size - b.size
423
            });
424
            d.save();
425
            d.translate(k / 2, q / 2);
426
            d.scale(g, g);
427
            d.translate(-s, -t);
428
            for (e = 0; e < D.length; e++)
429
                D[e].draw();
430
            for (e = 0; e < p.length; e++)
431
                p[e].draw();
432
            d.restore();
433
            z && 0 != u.length && d.drawImage(z, k - z.width - 10, 10);
434
            N = Math.max(N, Ca());
435
            0 != N && (null == T && (T = new U(24, "#FFFFFF")), T.setValue("Score: " + ~~(N / 100)), c = T.render(), b = c.width, d.globalAlpha = .2, d.fillStyle = "#000000", d.fillRect(10, q - 10 - 24 - 10, b + 10, 34), d.globalAlpha = 1, d.drawImage(c, 15, q - 10 - 24 - 5));
436
            Da();
437
            a = +new Date - a;
438
            a > 1E3 / 60 ? v -= .01 : a < 1E3 / 65 && (v += .01);
439
            .4 > v && (v = .4);
440
            1 < v && (v = 1)
441
        }
442
        function Da() {
443
            if (fa && ca.width) {
444
                var a = k / 5;
445
                d.drawImage(ca, 5, 5, a, a)
446
            }
447
        }
448
        function Ca() {
449
            for (var a = 0, b = 0; b < m.length; b++)
450
                a += m[b].nSize * m[b].nSize;
451
            return a
452
        }
453
        function oa() {
454
            if(bot) return;
455
            if (0 != u.length)
456
                if (V) {
457
                    z = document.createElement("canvas");
458
                    var a = z.getContext("2d"), b = 60 + 24 * u.length, c = Math.min(200, .3 * k) / 200;
459
                    z.width = 200 * c;
460
                    z.height = b * c;
461
                    a.scale(c, c);
462
                    a.globalAlpha = .4;
463
                    a.fillStyle = "#000000";
464
                    a.fillRect(0, 0, 200, b);
465
                    a.globalAlpha = 1;
466
                    a.fillStyle = "#FFFFFF";
467
                    c = null;
468
                    c = "Leaderboard";
469
                    a.font = "30px Ubuntu";
470
                    a.fillText(c, 100 - a.measureText(c).width / 2, 40);
471
                    a.font = "20px Ubuntu";
472
                    for (b = 0; b < u.length; ++b)
473
                        c = u[b].name || "An unnamed cell", V || (c = "An unnamed cell"), -1 != C.indexOf(u[b].id) ? (m[0].name && 
474
                                                                                                                      (c = m[0].name), a.fillStyle = "#FFAAAA") : a.fillStyle = "#FFFFFF", c = b + 1 + ". " + c, a.fillText(c, 100 - a.measureText(c).width / 2, 70 + 24 * b)
475
                        } else
476
                            z = null
477
                            }
478
        function pa(a, b, c, e, d, f, g) {
479
            p.push(this);
480
            w[a] = this;
481
            this.id = a;
482
            this.ox = this.x = b;
483
            this.oy = this.y = c;
484
            this.oSize = this.size = e;
485
            this.color = d;
486
            this.isVirus = f;
487
            this.points = [];
488
            this.pointsAcc = [];
489
            this.createPoints();
490
            this.setName(g)
491
        }
492
        function U(a, b, c, e) {
493
            a && (this._size = a);
494
            b && (this._color = b);
495
            this._stroke = !!c;
496
            e && (this._strokeColor = e)
497
        }
498
499
500
501
        var X, d, A, k, q, G = null, l = null, s = 0, t = 0, C = [], m = [], w = {}, p = [], D = [], u = [], O = 0, P = 0, Q = -1, R = -1, Ba = 0, E = 0, M = null, I = 0, J = 0, K = 1E4, L = 1E4, g = 1, $ = null, sa = !0, V = !0, da = !1, aa = !1, N = 0, ba = !1, ta = !1, x = 0, y = 0, H = 1, fa = "ontouchstart" in h && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), ca = new Image;
502
        ca.src = "img/split.png";
503
        var S = null;
504
505
506
        if(!bot) h.setNick = function(a) {
507
            hideMenu();
508
            M = a;
509
            restartGame();
510
            N = 0
511
512
            if( !bot && ! botsCreated){
513
514
                console.log("create bots...");
515
                botsCreated = true;
516
                for (i = 0; i < botsCount; i++) {
517
                    //нужно делать паузу перед новым ботом,
518
                    //чтобы сервер не отклонил слишком частые соединения
519
                    setTimeout(function(){
520
                        game(window, r, true, botsUrl, M);
521
                    }, 500);
522
                }
523
524
            }
525
526
        };
527
        else {
528
            M = botName;
529
        }
530
531
532
533
        if(!bot) h.setRegion = ia;
534
        if(!bot) h.setSkins = function(a) {
535
            sa = a
536
        };
537
        if(!bot) h.setNames = function(a) {
538
            V = a
539
        };
540
        if(!bot) h.setDarkTheme = function(a) {
541
            ba = a
542
        };
543
        if(!bot) h.setColors = function(a) {
544
            da = a
545
        };
546
        if(!bot) h.setShowMass = function(a) {
547
            ta = a
548
        };
549
        if(!bot) h.spectate = function() {
550
            sendCommand(1);
551
            hideMenu()
552
        };
553
        if(!bot) h.connect = loadRegions;
554
555
        var qa = -1, ra = -1, z = null, v = 1, T = null, W = {}, Ea = "poland;usa;china;russia;canada;australia;spain;brazil;germany;ukraine;france;sweden;hitler;north korea;south korea;japan;united kingdom;earth;greece;latvia;lithuania;estonia;finland;norway;cia;maldivas;austria;nigeria;reddit;yaranaika;confederate;9gag;indiana;4chan;italy;ussr;pewdiepie;bulgaria;tumblr;2ch.hk;hong kong;portugal;jamaica;german empire;mexico;sanik;switzerland;croatia;chile;indonesia;bangladesh;thailand;iran;iraq;peru;moon;botswana;bosnia;netherlands;european union;taiwan;pakistan;hungary;satanist;qing dynasty;nazi;matriarchy;patriarchy;feminism;ireland;texas;facepunch;prodota;cambodia;steam;piccolo;ea;india;kc;denmark;quebec;ayy lmao;sealand;bait;tsarist russia;origin;vinesauce;stalin;belgium;luxembourg;stussy;prussia;8ch;argentina;scotland;sir;romania;belarus;wojak;isis;doge".split(";"), Fa = ["m'blob"];
556
        pa.prototype = {id: 0,points: null,pointsAcc: null,name: null,nameCache: null,sizeCache: null,x: 0,y: 0,size: 0,ox: 0,oy: 0,oSize: 0,nx: 0,ny: 0,nSize: 0,updateTime: 0,updateCode: 0,drawTime: 0,destroyed: !1,isVirus: !1,destroy: function() {
557
            var a;
558
            for (a = 0; a < p.length; a++)
559
                if (p[a] == this) {
560
                    p.splice(a, 1);
561
                    break
562
                }
563
            delete w[this.id];
564
            a = m.indexOf(this);
565
            -1 != a && (aa = !0, m.splice(a, 1));
566
            a = C.indexOf(this.id);
567
            -1 != a && C.splice(a, 1);
568
            this.destroyed = !0;
569
            D.push(this)
570
        },getNameSize: function() {
571
            return Math.max(~~(.3 * this.size), 24)
572
        },setName: function(a) {
573
            if (this.name = a)
574
                null == this.nameCache ? this.nameCache = new U(this.getNameSize(), "#FFFFFF", !0, "#000000") : this.nameCache.setSize(this.getNameSize()), this.nameCache.setValue(this.name)
575
                },createPoints: function() {
576
                    for (var a = this.getNumPoints(); this.points.length > a; ) {
577
                        var b = ~~(Math.random() * this.points.length);
578
                        this.points.splice(b, 1);
579
                        this.pointsAcc.splice(b, 1)
580
                    }
581
                    0 == this.points.length && 0 < a && (this.points.push({c: this,v: this.size,x: this.x,y: this.y}), this.pointsAcc.push(Math.random() - .5));
582
                    for (; this.points.length < a; ) {
583
                        var b = ~~(Math.random() * this.points.length), c = this.points[b];
584
                        this.points.splice(b, 0, {c: this,v: c.v,x: c.x,y: c.y});
585
                        this.pointsAcc.splice(b, 0, this.pointsAcc[b])
586
                    }
587
                },getNumPoints: function() {
588
                    var a = 10;
589
                    20 > this.size && (a = 5);
590
                    this.isVirus && (a = 30);
591
                    return ~~Math.max(this.size * g * (this.isVirus ? Math.min(2 * v, 1) : v), a)
592
                },movePoints: function() {
593
                    this.createPoints();
594
                    for (var a = this.points, b = this.pointsAcc, c = b.concat(), e = a.concat(), d = e.length, f = 0; f < d; ++f) {
595
                        var g = c[(f - 1 + d) % d], h = c[(f + 1) % d];
596
                        b[f] += Math.random() - .5;
597
                        b[f] *= .7;
598
                        10 < b[f] && (b[f] = 10);
599
                        -10 > b[f] && (b[f] = -10);
600
                        b[f] = (g + h + 8 * b[f]) / 10
601
                    }
602
                    for (var k = this, f = 0; f < d; ++f) {
603
                        c = e[f].v;
604
                        g = e[(f - 1 + d) % d].v;
605
                        h = e[(f + 1) % d].v;
606
                        if (15 < this.size && null != G) {
607
                            var l = !1, n = a[f].x, m = a[f].y;
608
                            G.retrieve2(n - 5, m - 5, 10, 10, function(a) {
609
                                a.c != k && 25 > (n - a.x) * (n - a.x) + (m - a.y) * (m - a.y) && (l = !0)
610
                            });
611
                            !l && (a[f].x < I || a[f].y < J || a[f].x > K || a[f].y > L) && (l = !0);
612
                            l && (0 < b[f] && (b[f] = 0), b[f] -= 1)
613
                        }
614
                        c += b[f];
615
                        0 > c && (c = 0);
616
                        c = (12 * c + this.size) / 13;
617
                        a[f].v = (g + h + 8 * c) / 10;
618
                        g = 2 * Math.PI / d;
619
                        h = this.points[f].v;
620
                        this.isVirus && 0 == f % 2 && (h += 5);
621
                        a[f].x = this.x + Math.cos(g * f) * h;
622
                        a[f].y = this.y + Math.sin(g * f) *
623
                            h
624
                    }
625
                },updatePos: function() {
626
                    var a;
627
                    a = (E - this.updateTime) / 120;
628
                    a = 0 > a ? 0 : 1 < a ? 1 : a;
629
                    a = a * a * (3 - 2 * a);
630
                    this.getNameSize();
631
                    if (this.destroyed && 1 <= a) {
632
                        var b = D.indexOf(this);
633
                        -1 != b && D.splice(b, 1)
634
                    }
635
                    this.x = a * (this.nx - this.ox) + this.ox;
636
                    this.y = a * (this.ny - this.oy) + this.oy;
637
                    this.size = a * (this.nSize - this.oSize) + this.oSize;
638
                    return a
639
                },shouldRender: function() {
640
                    return this.x + this.size + 40 < s - k / 2 / g || this.y + this.size + 40 < t - q / 2 / g || this.x - this.size - 40 > s + k / 2 / g || this.y - this.size - 40 > t + q / 2 / g ? !1 : !0
641
                },draw: function() {
642
                    if (this.shouldRender()) {
643
                        var a = !this.isVirus &&
644
                            .5 > g;
645
                        d.save();
646
                        this.drawTime = E;
647
                        var b = this.updatePos();
648
                        this.destroyed && (d.globalAlpha *= 1 - b);
649
                        d.lineWidth = 10;
650
                        d.lineCap = "round";
651
                        d.lineJoin = this.isVirus ? "mitter" : "round";
652
                        da ? (d.fillStyle = "#FFFFFF", d.strokeStyle = "#AAAAAA") : (d.fillStyle = this.color, d.strokeStyle = this.color);
653
                        if (a)
654
                            d.beginPath(), d.arc(this.x, this.y, this.size, 0, 2 * Math.PI, !1);
655
                        else
656
                            for (this.movePoints(), d.beginPath(), a = this.getNumPoints(), d.moveTo(this.points[0].x, this.points[0].y), b = 1; b <= a; ++b) {
657
                                var c = b % a;
658
                                d.lineTo(this.points[c].x, this.points[c].y)
659
                            }
660
                        d.closePath();
661
                        a = this.name.toLowerCase();
662
                        sa ? -1 != Ea.indexOf(a) ? (W.hasOwnProperty(a) || (W[a] = new Image, W[a].src = "skins/" + a + ".png"), b = W[a]) : b = null : b = null;
663
                        a = b ? -1 != Fa.indexOf(a) : !1;
664
                        d.stroke();
665
                        d.fill();
666
                        null != b && 0 < b.width && !a && (d.save(), d.clip(), d.drawImage(b, this.x - this.size, this.y - this.size, 2 * this.size, 2 * this.size), d.restore());
667
                        if (da || 15 < this.size)
668
                            d.strokeStyle = "#000000", d.globalAlpha *= .1, d.stroke();
669
                        d.globalAlpha = 1;
670
                        null != b && 0 < b.width && a && d.drawImage(b, this.x - 2 * this.size, this.y - 2 * this.size, 4 * this.size, 4 * this.size);
671
                        b = -1 != m.indexOf(this);
672
                        a = ~~this.y;
673
                        if ((V || b) && this.name && this.nameCache) {
674
                            var e = this.nameCache;
675
                            e.setValue(this.name);
676
                            e.setSize(this.getNameSize());
677
                            c = Math.ceil(10 * g) / 10;
678
                            e.setScale(c);
679
                            var e = e.render(), h = ~~(e.width / c), c = ~~(e.height / c);
680
                            d.drawImage(e, ~~this.x - ~~(h / 2), a - ~~(c / 2), h, c);
681
                            a += e.height / 2 + 4
682
                        }
683
                        ta && b && (null == this.sizeCache && (this.sizeCache = new U(this.getNameSize() / 2, "#FFFFFF", !0, "#000000")), b = this.sizeCache, b.setSize(this.getNameSize() / 2), b.setValue(~~(this.size * this.size / 100)), c = Math.ceil(10 * g) / 10, b.setScale(c),
684
                                    e = b.render(), h = ~~(e.width / c), c = ~~(e.height / c), d.drawImage(e, ~~this.x - ~~(h / 2), a - ~~(c / 2), h, c));
685
                        d.restore()
686
                    }
687
                }};
688
        U.prototype = {_value: "",_color: "#000000",_stroke: !1,_strokeColor: "#000000",_size: 16,_canvas: null,_ctx: null,_dirty: !1,_scale: 1,setSize: function(a) {
689
            this._size != a && (this._size = a, this._dirty = !0)
690
        },setScale: function(a) {
691
            this._scale != a && (this._scale = a, this._dirty = !0)
692
        },setColor: function(a) {
693
            this._color != a && (this._color = a, this._dirty = !0)
694
        },setStroke: function(a) {
695
            this._stroke != a && (this._stroke = a, this._dirty = !0)
696
        },setStrokeColor: function(a) {
697
            this._strokeColor != a && (this._strokeColor = a, this._dirty = !0)
698
        },setValue: function(a) {
699
            a != this._value && (this._value = a, this._dirty = !0)
700
        },render: function() {
701
            null == this._canvas && (this._canvas = document.createElement("canvas"), this._ctx = this._canvas.getContext("2d"));
702
            if (this._dirty) {
703
                this._dirty = !1;
704
                var a = this._canvas, b = this._ctx, c = this._value, d = this._scale, g = this._size, f = g + "px Ubuntu";
705
                b.font = f;
706
                var h = b.measureText(c).width, k = ~~(.2 * g);
707
                a.width = (h + 6) * d;
708
                a.height = (g + k) * d;
709
                b.font = f;
710
                b.scale(d, d);
711
                b.globalAlpha = 1;
712
                b.lineWidth = 3;
713
                b.strokeStyle = this._strokeColor;
714
                b.fillStyle = this._color;
715
                this._stroke && b.strokeText(c, 3, g - k / 2);
716
                b.fillText(c, 3, g - k / 2)
717
            }
718
            return this._canvas
719
        }};
720
721
722
723
        if(!bot) h.onload = init;
724
        else init();
725
726
727
    }
728
729
    var playerX = 0;
730
    var playerY = 0;
731
732
    game(window, jQuery);
733
}