Last active
January 7, 2026 18:18
-
-
Save jakeayy/ba46bcf4fb2589a4fc608516addf888c to your computer and use it in GitHub Desktop.
Revisions
-
jakeayy renamed this gist
Jan 7, 2026 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
jakeayy created this gist
Jan 7, 2026 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,559 @@ import LZString from "lz-string"; class ByteBuffer { off: number = 0; constructor(public buf: Buffer, public littleEndian: boolean) {} readShort() { const v = this.buf[this.littleEndian ? "readInt16LE" : "readInt16BE"]( this.off, ); this.off += 2; return v; } readDouble() { const v = this.buf[this.littleEndian ? "readDoubleLE" : "readDoubleBE"]( this.off, ); this.off += 8; return v; } readFloat() { const v = this.buf[this.littleEndian ? "readFloatLE" : "readFloatBE"]( this.off, ); this.off += 4; return v; } readByte() { return this.buf[this.off++]; } readBoolean() { return Boolean(this.readByte()); } readUTF() { const length = this.readShort(); return this.buf.toString("utf-8", this.off, (this.off += length)); } readUint() { const v = this.buf[this.littleEndian ? "readUint32LE" : "readUint32BE"]( this.off, ); this.off += 4; return v; } readInt() { const v = this.buf[this.littleEndian ? "readInt32LE" : "readInt32BE"]( this.off ); this.off += 4; return v; } static fromBase64(data: string, littleEndian: boolean) { return new this(Buffer.from(data, "base64"), littleEndian); } } class MapUtils { static getBlankMap() { return { v: 1, s: { re: false, nc: false, pq: 1, gd: 25, fl: false, }, physics: { shapes: [], fixtures: [], bodies: [], bro: [], joints: [], ppm: 12, }, spawns: [], capZones: [], m: { a: "noauthor", n: "noname", dbv: 2, dbid: -1, authid: -1, date: "", rxid: 0, rxn: "", rxa: "", rxdb: 1, cr: [], pub: false, mo: "", }, }; } static getNewBoxShape() { return { type: "bx", w: 10, h: 40, c: [0, 0], a: 0, sk: false, }; } static getNewPolyShape() { return { type: "po", v: [], s: 1, a: 0, c: [0, 0], }; } static getNewFixture() { return { n: "Def Fix", fr: 0.3, fp: null, re: 0.8, de: 0.3, f: 5209260, d: false, np: false, ng: false, }; } static getNewBody() { return { p: [0, 0], a: 0, lv: [0, 0], av: 0, cf: { x: 0, y: 0, w: true, ct: 0, }, fx: [], fz: { on: false, x: 0, y: 0, d: true, p: true, a: true, t: 0, cf: 0, }, s: { type: "s", n: "Unnamed", fric: 0.3, fricp: false, re: 0.8, de: 0.3, ld: 0, ad: 0, fr: false, bu: false, f_c: 1, f_p: true, f_1: true, f_2: true, f_3: true, f_4: true, }, }; } static getNewSpawn() { return { x: 400, y: 300, xv: 0, yv: 0, priority: 5, r: true, f: true, b: true, gr: false, ye: false, n: "Spawn", }; } static getNewCapZone() { return { n: "Cap Zone", ty: 1, l: 10, i: -1, }; } static getNewRevoluteJoint() { return { type: "rv", d: { la: 0, ua: 0, mmt: 0, ms: 0, el: false, em: false, cc: false, bf: 0, dl: true, }, aa: [0, 0], }; } static getNewDistanceJoint() { return { type: "d", d: { fh: 0, dr: 0, cc: false, bf: 0, dl: true, }, aa: [0, 0], ab: [0, 0], }; } static getNewLPJJoint() { return { type: "lpj", d: { cc: false, bf: 0, dl: true, }, pax: 0, pay: 0, pa: 0, pf: 0, pl: 0, pu: 0, plen: 0, pms: 0, }; } static getNewLSJJoint() { return { type: "lsj", d: { cc: false, bf: 0, dl: true, }, sax: 0, say: 0, sf: 0, slen: 0, }; } static getNewGearJoint() { return { type: "g", n: "Gear Joint", ja: -1, jb: -1, r: 1, }; } static getNewCircleShape() { return { type: "ci", r: 25, c: [0, 0], sk: false, }; } } const game = { mapVersion: 15, }; function decodeFromDatabase(levelData: string) { const decompressed = LZString.decompressFromEncodedURIComponent(levelData); let buffer = ByteBuffer.fromBase64(decompressed, false); const level = MapUtils.getBlankMap(); const physics = level.physics; level.v = buffer.readShort(); if (level.v > game.mapVersion) { throw new Error("Future map version, please refresh page"); } level.s.re = buffer.readBoolean(); level.s.nc = buffer.readBoolean(); if (level.v >= 3) { level.s.pq = buffer.readShort(); } if (level.v >= 4 && level.v <= 12) { level.s.gd = buffer.readShort(); } else if (level.v >= 13) { level.s.gd = buffer.readFloat(); } if (level.v >= 9) { level.s.fl = buffer.readBoolean(); } level.m.rxn = buffer.readUTF(); level.m.rxa = buffer.readUTF(); level.m.rxid = buffer.readUint(); level.m.rxdb = buffer.readShort(); level.m.n = buffer.readUTF(); level.m.a = buffer.readUTF(); if (level.v >= 10) { level.m.vu = buffer.readUint(); level.m.vd = buffer.readUint(); } if (level.v >= 4) { let size = buffer.readShort(); for (let i = 0; i < size; i++) { level.m.cr.push(buffer.readUTF()); } } if (level.v >= 5) { level.m.mo = buffer.readUTF(); level.m.dbid = buffer.readInt(); } if (level.v >= 7) { level.m.pub = buffer.readBoolean(); } if (level.v >= 8) { level.m.dbv = buffer.readInt(); } physics.ppm = buffer.readShort(); let size = buffer.readShort(); for (let i = 0; i < size; i++) { physics.bro[i] = buffer.readShort(); } size = buffer.readShort(); for (let i = 0; i < size; i++) { let type = buffer.readShort(); if (type == 1) { physics.shapes[i] = MapUtils.getNewBoxShape(); physics.shapes[i].w = buffer.readDouble(); physics.shapes[i].h = buffer.readDouble(); physics.shapes[i].c = [buffer.readDouble(), buffer.readDouble()]; physics.shapes[i].a = buffer.readDouble(); physics.shapes[i].sk = buffer.readBoolean(); } if (type == 2) { physics.shapes[i] = MapUtils.getNewCircleShape(); physics.shapes[i].r = buffer.readDouble(); physics.shapes[i].c = [buffer.readDouble(), buffer.readDouble()]; physics.shapes[i].sk = buffer.readBoolean(); } if (type == 3) { physics.shapes[i] = MapUtils.getNewPolyShape(); physics.shapes[i].s = buffer.readDouble(); physics.shapes[i].a = buffer.readDouble(); physics.shapes[i].c = [buffer.readDouble(), buffer.readDouble()]; let inner_size = buffer.readShort(); physics.shapes[i].v = []; for (let j = 0; j < inner_size; j++) { physics.shapes[i].v.push([buffer.readDouble(), buffer.readDouble()]); } } } size = buffer.readShort(); for (let i = 0; i < size; i++) { physics.fixtures[i] = MapUtils.getNewFixture(); physics.fixtures[i].sh = buffer.readShort(); physics.fixtures[i].n = buffer.readUTF(); physics.fixtures[i].fr = buffer.readDouble(); if (physics.fixtures[i].fr == Number.MAX_VALUE) { physics.fixtures[i].fr = null; } let type = buffer.readShort(); if (type == 0) { physics.fixtures[i].fp = null; } if (type == 1) { physics.fixtures[i].fp = false; } if (type == 2) { physics.fixtures[i].fp = true; } physics.fixtures[i].re = buffer.readDouble(); if (physics.fixtures[i].re == Number.MAX_VALUE) { physics.fixtures[i].re = null; } physics.fixtures[i].de = buffer.readDouble(); if (physics.fixtures[i].de == Number.MAX_VALUE) { physics.fixtures[i].de = null; } physics.fixtures[i].f = buffer.readUint(); physics.fixtures[i].d = buffer.readBoolean(); physics.fixtures[i].np = buffer.readBoolean(); if (level.v >= 11) { physics.fixtures[i].ng = buffer.readBoolean(); } if (level.v >= 12) { physics.fixtures[i].ig = buffer.readBoolean(); } } size = buffer.readShort(); for (let i = 0; i < size; i++) { physics.bodies[i] = MapUtils.getNewBody(); physics.bodies[i].s.type = buffer.readUTF(); physics.bodies[i].s.n = buffer.readUTF(); physics.bodies[i].p = [buffer.readDouble(), buffer.readDouble()]; physics.bodies[i].a = buffer.readDouble(); physics.bodies[i].s.fric = buffer.readDouble(); physics.bodies[i].s.fricp = buffer.readBoolean(); physics.bodies[i].s.re = buffer.readDouble(); physics.bodies[i].s.de = buffer.readDouble(); physics.bodies[i].lv = [buffer.readDouble(), buffer.readDouble()]; physics.bodies[i].av = buffer.readDouble(); physics.bodies[i].s.ld = buffer.readDouble(); physics.bodies[i].s.ad = buffer.readDouble(); physics.bodies[i].s.fr = buffer.readBoolean(); physics.bodies[i].s.bu = buffer.readBoolean(); physics.bodies[i].cf.x = buffer.readDouble(); physics.bodies[i].cf.y = buffer.readDouble(); physics.bodies[i].cf.ct = buffer.readDouble(); physics.bodies[i].cf.w = buffer.readBoolean(); physics.bodies[i].s.f_c = buffer.readShort(); physics.bodies[i].s.f_1 = buffer.readBoolean(); physics.bodies[i].s.f_2 = buffer.readBoolean(); physics.bodies[i].s.f_3 = buffer.readBoolean(); physics.bodies[i].s.f_4 = buffer.readBoolean(); if (level.v >= 2) { physics.bodies[i].s.f_p = buffer.readBoolean(); } if (level.v >= 14) { physics.bodies[i].fz.on = buffer.readBoolean(); if (physics.bodies[i].fz.on) { physics.bodies[i].fz.x = buffer.readDouble(); physics.bodies[i].fz.y = buffer.readDouble(); physics.bodies[i].fz.d = buffer.readBoolean(); physics.bodies[i].fz.p = buffer.readBoolean(); physics.bodies[i].fz.a = buffer.readBoolean(); if (level.v >= 15) { physics.bodies[i].fz.t = buffer.readShort(); physics.bodies[i].fz.cf = buffer.readDouble(); } } } let inner_size = buffer.readShort(); for (let j = 0; j < inner_size; j++) { physics.bodies[i].fx.push(buffer.readShort()); } } size = buffer.readShort(); for (let i = 0; i < size; i++) { level.spawns[i] = MapUtils.getNewSpawn(); let spawn = level.spawns[i]; spawn.x = buffer.readDouble(); spawn.y = buffer.readDouble(); spawn.xv = buffer.readDouble(); spawn.yv = buffer.readDouble(); spawn.priority = buffer.readShort(); spawn.r = buffer.readBoolean(); spawn.f = buffer.readBoolean(); spawn.b = buffer.readBoolean(); spawn.gr = buffer.readBoolean(); spawn.ye = buffer.readBoolean(); spawn.n = buffer.readUTF(); } size = buffer.readShort(); for (let i = 0; i < size; i++) { level.capZones[i] = MapUtils.getNewCapZone(); level.capZones[i].n = buffer.readUTF(); level.capZones[i].l = buffer.readDouble(); level.capZones[i].i = buffer.readShort(); if (level.v >= 6) { level.capZones[i].ty = buffer.readShort(); } } size = buffer.readShort(); for (let i = 0; i < size; i++) { let type = buffer.readShort(); if (type == 1) { physics.joints[i] = MapUtils.getNewRevoluteJoint(); let joint = physics.joints[i]; joint.d.la = buffer.readDouble(); joint.d.ua = buffer.readDouble(); joint.d.mmt = buffer.readDouble(); joint.d.ms = buffer.readDouble(); joint.d.el = buffer.readBoolean(); joint.d.em = buffer.readBoolean(); joint.aa = [buffer.readDouble(), buffer.readDouble()]; } if (type == 2) { physics.joints[i] = MapUtils.getNewDistanceJoint(); let joint = physics.joints[i]; joint.d.fh = buffer.readDouble(); joint.d.dr = buffer.readDouble(); joint.aa = [buffer.readDouble(), buffer.readDouble()]; joint.ab = [buffer.readDouble(), buffer.readDouble()]; } if (type == 3) { physics.joints[i] = MapUtils.getNewLPJJoint(); let joint = physics.joints[i]; joint.pax = buffer.readDouble(); joint.pay = buffer.readDouble(); joint.pa = buffer.readDouble(); joint.pf = buffer.readDouble(); joint.pl = buffer.readDouble(); joint.pu = buffer.readDouble(); joint.plen = buffer.readDouble(); joint.pms = buffer.readDouble(); } if (type == 4) { physics.joints[i] = MapUtils.getNewLSJJoint(); let joint = physics.joints[i]; joint.sax = buffer.readDouble(); joint.say = buffer.readDouble(); joint.sf = buffer.readDouble(); joint.slen = buffer.readDouble(); } if (type == 5) { physics.joints[i] = MapUtils.getNewGearJoint(); let joint = physics.joints[i]; joint.n = buffer.readUTF(); joint.ja = buffer.readShort(); joint.jb = buffer.readShort(); joint.r = buffer.readDouble(); } if (type != 5) { physics.joints[i].ba = buffer.readShort(); physics.joints[i].bb = buffer.readShort(); physics.joints[i].d.cc = buffer.readBoolean(); physics.joints[i].d.bf = buffer.readDouble(); physics.joints[i].d.dl = buffer.readBoolean(); } } return level; } console.log( decodeFromDatabase( "ILAcJAhBFBjBzCTlMsSAlAlgIwMqQBWsAdgGoAuAmgLYAeADjjQlQEyMBaNV8AcgHdgAGQwANADYTYARgCckWnQAWAUxoBVFCjTAKAMVUB1MgC8xABn24A4voBsnaBEwzh8AKJIAwiADWwDZCugCSIEJewFqQiAASIIjezgDSIADOwAAiIHwgACxZQs6QXh6IACrozvrORuiwgSCc6AD2SAwgAFLA+tp9-f0AsgD0choAbjYMANTTACYUA0vLhfps2tn42oOQOM4oAjYWiMjZYoPbkDT726MTU7MLK8-aQTY29gx0AOwACpCZHDAHDfewhfQCCzlACuaRiVG0AlimSEp2AlkuAgCBzWG2BeEusFRyEOzRQZwsl0IAxGY0mM3mixezJAHkOnROqGAAENfCgdspoQBHWCqUwCaBsQ6zLCQWB8DzfABO6Mp-KIfQE+jkePKCL6mV+wzIwjoQoAZuMSHsWczIALhaLxZLpdNZfLFSqqNzLhZ9SSHHjYKZLvB-UgkSj+hpvL8LihoDA8bRtt5OvHkONhn5OHRzS1oXg8hkQCNwLaK0gUTZypyINkNOGIDs-AUEzZhnWQNluakUB5IOM27dy5XK5EKwOYojMtjkGhutop13lmhoE2q0ax2PdBW0L8V8ALlptNB9DZtGgAPI3F5n4QDUzDYnblm-YBkE-ILzQvrQJK2jsNiHtAHg+v0T4vq+Ly5LWlzAae2p4rk0HaJBqEshmtqgcOXJ4Lezxnuaj7PhhzLvhgfQ7NOZFASBmS4Sg6Fkc8743thAGYZANHIKBBHIMxLHLGx-FHsAaoJkm5LACh-JRH+mSiRAglCQMlTseqE4kopeKUSx2R6f2wDTDSwyjqp-Rsh4c5VsARiidRh5ajZLg9FRMBKduhrDBZyyUr+iLnkJAgeKJ2Trv03m+UsoAlJqHgXjowBFpcPFkVF0X9LFi44i50EhYxUDADlGxbplfSxRgTn6AF87Fe5OCHq+GXlSg4AAKzxZ5lZah0SURQaZWtagA54FB4T6A+SVkO5Y0sTs0CiQIs4keNrXvlQG7RQKIHWatw3IO+9mXFV82QGQ3X7QdEC5BgbTqqdCYeIVrUqQdWEsmeM0sgOWlIGeiV9G9w2XQMfGXlEW2-X++gvdksnfpgTVHmZ131stoPpTJfQDo9I5o92IW1a1aB3UuSNDKjBNsrETjSbAX5IAO7USRGsQla5qh9YjACea1IrA-FoLAeUQEk3gvah4tw8A76ptyf3IEkmSHtkBKpn4YT9OLqt2aLgzeEK919OLxu2VQPOpqYgva6BfJojgH2lt4ADMnDI0kHj27ZsBO0e3jfHBJt20GnX8t4wx8B7IfSXMjPNpkRBrSAyuK1kwCqFRmQq8nwDc1kZBkNCzD6BQnD2fAGhsMoyiwDYZDDN8wzNy3zeoua0yt63ciN13LcCJAvzmska1eJkhfFzQpfl9AlfV7X9e933pHAB3y+jEvfdCDQNjKCEu4QGE49FyXZcV1XNd1w3TfL+3nfLz3N9b8AO97wfpYFyfU9n7PF8L9f6877r0foAl+u994Jk-pPae5955X03l3IBD8EGt23uA9+8lj7QJ-nPS+i8n6IJAGvZBBDUFgLfigBEWDT4z1wf-FB-ciH3z7iA2+5CIHIAaNQ7+tC-7wNIYw1ezCu6sK3pAMQ2BDyIG4TA3+cD8GgKEcAhhbdxGSO0AEGROC+EKLYUokhgC1FYEPG0LRvD5EAL0cQlhKjnyQCVGYNOGQzGwLwZY5++ibECNUdCIw5QtYkigTQ1x9DvEr2sSI2xA9BjQFMH7SkLi5FuKiUw5RYTomxL9gURJdD+GKIid3KJ9jHHaHADknR7jCGeMiek+0mSkpBJ4SEvJVjhGFNqQ40wis4rlIsSk6p7TDGdO6UfCewSkmhPyW0luojEGQF8f4nQFxenJPSakgxt86lxJ0M4FZkzWlpKGSU+cWg9ktI8QUmZRSJHGJ0FQsZTSJnnKqZc5uszUHFK6ToLhDzZG5N0Rc6ZbyinDCoKYM2UBpG-O0X0tZAyrm1NBeCnQmjoXmNWVMw5t9vBYCwBoPKkBTFouaQCl5QKN7pJxXiglzjiVPNJWQ+FwLEVgohegIQZyGWCNeRSwBVL8U6ASXS-5lTGU8vef3flBLsnCoqf08VUTvDmgsHIcsNxIBlNlbCzFGyxFDxHhASIfJOWiu5eSiVqj9XEiNWPLVGKDm6rmVaw1KdRlfz+XKuFCranOtZCnZZdr9mAqxXq4e1qU67MDc8sV5qim+uAEa05UauVt3WV4wx8ajX3PdTC+1wbHUfMzSnH5Ob0VBrJSGp1YaXXAG8FC0tJLTWpqZbyzZRb0AlmOpAGQDbKiA2QMIFeLJhiSxAMMRwNBuBTpoIQYY5RBhxMXQugmK7IFrgHMAUCNaoBEiyNyNgDA0iHHgCuNAQdyImX6FmfowwLBLqXbnVdrVIgEV3IlSI0iQDFGcIlfQ2I5hkGYO1ZQOATB+CROBOq3JR39F+Jevo16+i3vvQuwYj6n2ZRfegTdG6irAAaHZYoPbsHl0qHMNlCbIBYACS8Ed2sqbkjnah+9GGn3FFZOul1fJIBkliGQIw7VoRUCMDICQnAdjQgo2eHULJMidn6IO5Ovw5DMdU6xldugX0bpuM4Rcf6QAAaAyBsDEGIZUCwLaODAxEPaGQ6puJ6H1OqSw+u3cuh7pduI8EsjFGBwc2eHRk2DHThMZQyGJzaN2OUZw1x4IvH+OCeE6J8TwAw5PVFksOTyNFN9GU-Z1DEXrqaa-dpiAzh4z6eAIZmgwHQNkD8KBUW8MKxWavT5JDd78uOcKxhFzOG3MgDVJ5htlEEYYUC9oCO5kqyhfsz1g6UXtMTjHogHjIA+MCaEyJsTP4FKYxC9lodh0VNhb9vNoSxX+ubrK7LEAlXqu1ZM0FaaLX4PaBsygOzKHuvne3H10CA3dzDZI344AGlEb+ZWBNlAU2DSzZY79zKi3ON+tCugeLm2ktiYWqJf8MG4eHaUyd-LiPoqXYB9dr9yU7v-sAzV4z9WtT9tct9N8b2UAfeQF91TP3Se2n+7h7D9oQDA+88AKgacBxGGRje0dsONjw+Y3z3yyOYt+t6Oj9bCWtvJZ2PAXH+hIMvCywpo7SA8uneV6pcnpWqffUq-oJUhwZCntVJZ9nmZ2u2c699q3QkBeA-1MdOyPkyT9kgJD5Y0OlbBZm-OsLfuhKq63eruLUAcCxUIFtRrtoTd9By9oC3JPE8YRt2uG7+oHfjCRFNOq+F3fWa959n3POS+9ap651ykBsTB6MD5OO2xxIVmjz4WP9ZFeLrbxhZPy3AirbJLsWKMglo6Vk-J-PZuIBF5Q1P6CZfKfXaBD0bE+hq98eQq9xvN6W8Pt36+APXfUS958tyByQ-bQj7FmP7sE-l13+3DPi6rEMULuhtolttilvYEJHntoAXigNvmpv-pWPvjphnDTiAGQFgMJnQGkKoH4HFIiJ0KzsbuvrAZviAAgUunfhcKzC8KEJ3mLIgMRHyCEM4BZt4BcIuBILWgiJ0EIPdPEFQPrJACQBZL0BTi4GQIIFQGIHMMTIlNkEgbaBHKjNADYBlroGdkoQMEaHYjyEpJELztoegLoZRvnLxOnMYS8PoM3OAGoRoR-FYc8DgKovoTjOEE4SsJAC3GYf0Lsp4SsCELYZuuoX0JoQEcsCQK4a-u4cAEYdod4FmD5AOOYf9JYREabqoaERDGJBkRBNEQYR4XkRsOaM3L4X+OkcUcgFeMEfYWEY4VUVzgUbEfEUoR4KYSkX4ZUY0SABgLUdkQ0loRkZAIOnoTEUuEUT0ayD4Z0RUYoVMSABoP0Q4bkQseIs0RMXEQsXdkkeUaeN0T0WIMsfUasVMUQBsUZFsZWMMNMHgLEN8GQKFBQDYB4B4HgK1qhB4PoIQB4GkKQXEbEAaq8LscsNAAALxglAA", ), );