@utsp/core
Version:
UTSP core engine - Universal Text Stream Protocol data management
7 lines • 118 kB
JavaScript
"use strict";var oe=Object.defineProperty;var ft=Object.getOwnPropertyDescriptor;var Ut=Object.getOwnPropertyNames;var wt=Object.prototype.hasOwnProperty;var Ot=(x,e,t)=>e in x?oe(x,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):x[e]=t;var g=(x,e)=>oe(x,"name",{value:e,configurable:!0});var F=(x,e)=>()=>(x&&(e=x(x=0)),e);var ie=(x,e)=>{for(var t in e)oe(x,t,{get:e[t],enumerable:!0})},vt=(x,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ut(e))!wt.call(x,n)&&n!==t&&oe(x,n,{get:()=>e[n],enumerable:!(r=ft(e,n))||r.enumerable});return x};var M=x=>vt(oe({},"__esModule",{value:!0}),x);var m=(x,e,t)=>(Ot(x,typeof e!="symbol"?e+"":e,t),t);var Fe,it=F(()=>{"use strict";Fe=(o=>(o[o.Rectangle=1]="Rectangle",o[o.Circle=2]="Circle",o[o.Line=3]="Line",o[o.Ellipse=4]="Ellipse",o[o.Triangle=5]="Triangle",o))(Fe||{})});var E,I,X=F(()=>{"use strict";E=class E{constructor(e){m(this,"data");m(this,"view");this.data=new Uint8Array(e),this.view=new DataView(this.data.buffer)}static from(e){let t=new E(0);return t.data=e,t.view=new DataView(e.buffer,e.byteOffset,e.byteLength),t}static allocUnsafe(e){return new E(e)}get length(){return this.data.length}toUint8Array(){return this.data}readUInt8(e){return this.view.getUint8(e)}readInt8(e){return this.view.getInt8(e)}readUInt16BE(e){return this.view.getUint16(e,!1)}readInt16BE(e){return this.view.getInt16(e,!1)}readUInt16LE(e){return this.view.getUint16(e,!0)}readInt16LE(e){return this.view.getInt16(e,!0)}readUInt32BE(e){return this.view.getUint32(e,!1)}readInt32BE(e){return this.view.getInt32(e,!1)}readUInt32LE(e){return this.view.getUint32(e,!0)}readInt32LE(e){return this.view.getInt32(e,!0)}readBigUInt64BE(e){return this.view.getBigUint64(e,!1)}readBigInt64BE(e){return this.view.getBigInt64(e,!1)}readBigUInt64LE(e){return this.view.getBigUint64(e,!0)}readBigInt64LE(e){return this.view.getBigInt64(e,!0)}writeUInt8(e,t){this.view.setUint8(t,e)}writeInt8(e,t){this.view.setInt8(t,e)}writeUInt16BE(e,t){this.view.setUint16(t,e,!1)}writeInt16BE(e,t){this.view.setInt16(t,e,!1)}writeUInt16LE(e,t){this.view.setUint16(t,e,!0)}writeInt16LE(e,t){this.view.setInt16(t,e,!0)}writeUInt32BE(e,t){this.view.setUint32(t,e,!1)}writeInt32BE(e,t){this.view.setInt32(t,e,!1)}writeUInt32LE(e,t){this.view.setUint32(t,e,!0)}writeInt32LE(e,t){this.view.setInt32(t,e,!0)}writeBigUInt64BE(e,t){this.view.setBigUint64(t,e,!1)}writeBigInt64BE(e,t){this.view.setBigInt64(t,e,!1)}writeBigUInt64LE(e,t){this.view.setBigUint64(t,e,!0)}writeBigInt64LE(e,t){this.view.setBigInt64(t,e,!0)}copy(e,t=0,r=0,n=this.length){let o=this.data.subarray(r,n);return e.data.set(o,t),o.length}slice(e,t){let r=this.data.slice(e,t);return E.from(r)}subarray(e,t){let r=this.data.subarray(e,t);return E.from(r)}toBuffer(){return typeof Buffer<"u"&&Buffer.from?Buffer.from(this.data):this.data}static fromNodeBuffer(e){return e instanceof Uint8Array?E.from(e):E.from(new Uint8Array(e))}};g(E,"BufferCompat");I=E});var Ge,fe,at=F(()=>{"use strict";Ge=class Ge{decode(e,t=0){this.checkSize(e,t,7);let n=t,o=e.readUInt8(n++),s=e.readUInt16BE(n);n+=2;let i=e.readUInt16BE(n);n+=2;let a=e.readUInt8(n++)+1,d=e.readUInt8(n++)+1;return{display:{id:o,originX:s,originY:i,sizeX:a,sizeY:d},bytesRead:7}}checkSize(e,t,r){if(t+r>e.length)throw new Error(`Buffer too short for display: need ${r} bytes at offset ${t}, but only ${e.length-t} bytes available`)}};g(Ge,"DisplayDecoder");fe=Ge});var je,Ue,dt=F(()=>{"use strict";je=class je{decode(e,t=0){if(t>=e.length)throw new Error("Buffer too short to decode order type");let r=e.readUInt8(t);switch(r){case 1:return this.decodeCharOrder(e,t);case 2:return this.decodeTextOrder(e,t);case 23:return this.decodeTextMultilineOrder(e,t);case 3:return this.decodeSubFrameOrder(e,t);case 4:return this.decodeSubFrameMultiColorOrder(e,t);case 5:return this.decodeFullFrameOrder(e,t);case 6:return this.decodeFullFrameMultiColorOrder(e,t);case 7:return this.decodeSpriteOrder(e,t);case 8:return this.decodeSpriteMultiColorOrder(e,t);case 9:return this.decodeColorMapOrder(e,t);case 10:return this.decodeShapeOrder(e,t);case 11:return this.decodeDotCloudOrder(e,t);case 12:return this.decodeDotCloudMultiColorOrder(e,t);case 17:return this.decodeBitmaskOrder(e,t);case 18:return this.decodeBitmask4Order(e,t);case 24:return this.decodeBitmask16Order(e,t);case 13:return this.decodeSpriteCloudOrder(e,t);case 14:return this.decodeSpriteCloudMultiColorOrder(e,t);case 15:return this.decodeSpriteCloudVariedOrder(e,t);case 16:return this.decodeSpriteCloudVariedMultiColorOrder(e,t);case 19:return this.decodeClearOrder(e,t);case 20:return this.decodeFillCharOrder(e,t);case 21:return this.decodeFillSpriteOrder(e,t);case 22:return this.decodeFillSpriteMultiColorOrder(e,t);case 32:return this.decodeTriggerSoundOrder(e,t);case 33:return this.decodeTriggerGlobalSoundOrder(e,t);default:throw new Error(`Unknown order type: 0x${r.toString(16)}`)}}decodeCharOrder(e,t){this.checkSize(e,t,6);let r=t;return{order:{type:1,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),charCode:e.readUInt8(r+3),bgColorCode:e.readUInt8(r+4),fgColorCode:e.readUInt8(r+5)},bytesRead:6}}decodeTextOrder(e,t){this.checkSize(e,t,5);let r=t,n=e.readUInt8(r+3);this.checkSize(e,t,5+n);let o=e.subarray(r+4,r+4+n),s=new TextDecoder().decode(o.toUint8Array());return{order:{type:2,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),text:s,bgColorCode:e.readUInt8(r+4+n),fgColorCode:e.readUInt8(r+5+n)},bytesRead:6+n}}decodeTextMultilineOrder(e,t){this.checkSize(e,t,5);let r=t,n=e.readUInt8(r+3);this.checkSize(e,t,5+n);let o=e.subarray(r+4,r+4+n),s=new TextDecoder().decode(o.toUint8Array());return{order:{type:23,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),text:s,bgColorCode:e.readUInt8(r+4+n),fgColorCode:e.readUInt8(r+5+n)},bytesRead:6+n}}decodeSubFrameOrder(e,t){this.checkSize(e,t,7);let r=t,n=e.readUInt8(r+3),o=e.readUInt8(r+4),s=n*o;this.checkSize(e,t,7+s);let i=[];for(let d=0;d<s;d++)i.push(e.readUInt8(r+7+d));return{order:{type:3,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),sizeX:n,sizeY:o,bgColorCode:e.readUInt8(r+5),fgColorCode:e.readUInt8(r+6),frame:i},bytesRead:7+s}}decodeSubFrameMultiColorOrder(e,t){this.checkSize(e,t,5);let r=t,n=e.readUInt8(r+3),o=e.readUInt8(r+4),s=n*o;this.checkSize(e,t,5+s*3);let i=[];for(let d=0;d<s;d++){let l=r+5+d*3;i.push({charCode:e.readUInt8(l),bgColorCode:e.readUInt8(l+1),fgColorCode:e.readUInt8(l+2)})}return{order:{type:4,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),sizeX:n,sizeY:o,frame:i},bytesRead:5+s*3}}decodeFullFrameOrder(e,t,r){this.checkSize(e,t,3);let n=t,o=r||e.length-t-3;this.checkSize(e,t,3+o);let s=[];for(let a=0;a<o;a++)s.push(e.readUInt8(n+3+a));return{order:{type:5,bgColorCode:e.readUInt8(n+1),fgColorCode:e.readUInt8(n+2),frame:s},bytesRead:3+o}}decodeFullFrameMultiColorOrder(e,t,r){this.checkSize(e,t,1);let n=t,o=r||Math.floor((e.length-t-1)/3);this.checkSize(e,t,1+o*3);let s=[];for(let a=0;a<o;a++){let d=n+1+a*3;s.push({charCode:e.readUInt8(d),bgColorCode:e.readUInt8(d+1),fgColorCode:e.readUInt8(d+2)})}return{order:{type:6,frame:s},bytesRead:1+o*3}}decodeSpriteOrder(e,t){this.checkSize(e,t,6);let r=t;return{order:{type:7,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),spriteIndex:e.readUInt8(r+3),bgColorCode:e.readUInt8(r+4),fgColorCode:e.readUInt8(r+5)},bytesRead:6}}decodeSpriteMultiColorOrder(e,t){this.checkSize(e,t,4);let r=t;return{order:{type:8,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),spriteIndex:e.readUInt8(r+3)},bytesRead:4}}decodeColorMapOrder(e,t){this.checkSize(e,t,5);let r=t,n=e.readUInt8(r+3),o=e.readUInt8(r+4),s=n*o;this.checkSize(e,t,5+s*2);let i=[];for(let d=0;d<s;d++){let l=r+5+d*2;i.push({bgColorCode:e.readUInt8(l),fgColorCode:e.readUInt8(l+1)})}return{order:{type:9,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),sizeX:n,sizeY:o,colorData:i},bytesRead:5+s*2}}decodeShapeOrder(e,t){this.checkSize(e,t,2);let r=t,n=e.readUInt8(r+1),{shapeData:o,bytesRead:s}=this.decodeShapeData(e,r+2,n);return{order:{type:10,shapeType:n,shapeData:o},bytesRead:2+s}}decodeShapeData(e,t,r){let n=t;switch(r){case 1:return this.checkSize(e,t,8),{shapeData:{posX:e.readUInt8(n),posY:e.readUInt8(n+1),width:e.readUInt8(n+2),height:e.readUInt8(n+3),filled:e.readUInt8(n+4)===1,charCode:e.readUInt8(n+5),bgColorCode:e.readUInt8(n+6),fgColorCode:e.readUInt8(n+7)},bytesRead:8};case 2:return this.checkSize(e,t,7),{shapeData:{centerX:e.readUInt8(n),centerY:e.readUInt8(n+1),radius:e.readUInt8(n+2),filled:e.readUInt8(n+3)===1,charCode:e.readUInt8(n+4),bgColorCode:e.readUInt8(n+5),fgColorCode:e.readUInt8(n+6)},bytesRead:7};case 3:return this.checkSize(e,t,7),{shapeData:{x1:e.readUInt8(n),y1:e.readUInt8(n+1),x2:e.readUInt8(n+2),y2:e.readUInt8(n+3),charCode:e.readUInt8(n+4),bgColorCode:e.readUInt8(n+5),fgColorCode:e.readUInt8(n+6)},bytesRead:7};case 4:return this.checkSize(e,t,8),{shapeData:{centerX:e.readUInt8(n),centerY:e.readUInt8(n+1),radiusX:e.readUInt8(n+2),radiusY:e.readUInt8(n+3),filled:e.readUInt8(n+4)===1,charCode:e.readUInt8(n+5),bgColorCode:e.readUInt8(n+6),fgColorCode:e.readUInt8(n+7)},bytesRead:8};case 5:return this.checkSize(e,t,10),{shapeData:{x1:e.readUInt8(n),y1:e.readUInt8(n+1),x2:e.readUInt8(n+2),y2:e.readUInt8(n+3),x3:e.readUInt8(n+4),y3:e.readUInt8(n+5),filled:e.readUInt8(n+6)===1,charCode:e.readUInt8(n+7),bgColorCode:e.readUInt8(n+8),fgColorCode:e.readUInt8(n+9)},bytesRead:10};default:throw new Error(`Unknown shape type: ${r}`)}}decodeDotCloudOrder(e,t){this.checkSize(e,t,6);let r=t,n=e.readUInt16BE(r+4);this.checkSize(e,t,6+n*2);let o=[];for(let i=0;i<n;i++){let a=r+6+i*2;o.push({posX:e.readUInt8(a),posY:e.readUInt8(a+1)})}return{order:{type:11,charCode:e.readUInt8(r+1),bgColorCode:e.readUInt8(r+2),fgColorCode:e.readUInt8(r+3),positions:o},bytesRead:6+n*2}}decodeDotCloudMultiColorOrder(e,t){this.checkSize(e,t,3);let r=t,n=e.readUInt16BE(r+1);this.checkSize(e,t,3+n*5);let o=[];for(let i=0;i<n;i++){let a=r+3+i*5;o.push({charCode:e.readUInt8(a),bgColorCode:e.readUInt8(a+1),fgColorCode:e.readUInt8(a+2),posX:e.readUInt8(a+3),posY:e.readUInt8(a+4)})}return{order:{type:12,dots:o},bytesRead:3+n*5}}decodeBitmaskOrder(e,t){this.checkSize(e,t,9);let r=t,n=e.readUInt8(r+3),o=e.readUInt8(r+4),s=Math.ceil(n*o/8);this.checkSize(e,t,9+s);let i=new Uint8Array(s);for(let d=0;d<s;d++)i[d]=e.readUInt8(r+9+d);return{order:{type:17,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),sizeX:n,sizeY:o,charCode:e.readUInt8(r+5),bgColorCode:e.readUInt8(r+6),fgColorCode:e.readUInt8(r+7),override:e.readUInt8(r+8)===1,mask:i},bytesRead:9+s}}decodeBitmask4Order(e,t){this.checkSize(e,t,15);let r=t,n=e.readUInt8(r+3),o=e.readUInt8(r+4),s=Math.ceil(n*o/4);this.checkSize(e,t,15+s);let i=[{charCode:e.readUInt8(r+6),bgColorCode:e.readUInt8(r+7),fgColorCode:e.readUInt8(r+8)},{charCode:e.readUInt8(r+9),bgColorCode:e.readUInt8(r+10),fgColorCode:e.readUInt8(r+11)},{charCode:e.readUInt8(r+12),bgColorCode:e.readUInt8(r+13),fgColorCode:e.readUInt8(r+14)}],a=new Uint8Array(s);for(let l=0;l<s;l++)a[l]=e.readUInt8(r+15+l);return{order:{type:18,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),sizeX:n,sizeY:o,override:e.readUInt8(r+5)===1,variants:i,mask:a},bytesRead:15+s}}decodeBitmask16Order(e,t){this.checkSize(e,t,51);let r=t,n=e.readUInt8(r+3),o=e.readUInt8(r+4),s=Math.ceil(n*o/2);this.checkSize(e,t,51+s);let i=[];for(let l=0;l<15;l++){let c=r+6+l*3;i.push({charCode:e.readUInt8(c),bgColorCode:e.readUInt8(c+1),fgColorCode:e.readUInt8(c+2)})}let a=new Uint8Array(s);for(let l=0;l<s;l++)a[l]=e.readUInt8(r+51+l);return{order:{type:24,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),sizeX:n,sizeY:o,override:e.readUInt8(r+5)===1,variants:i,mask:a},bytesRead:51+s}}decodeSpriteCloudOrder(e,t){this.checkSize(e,t,6);let r=t,n=e.readUInt16BE(r+4);this.checkSize(e,t,6+n*2);let o=[];for(let i=0;i<n;i++){let a=r+6+i*2;o.push({posX:e.readUInt8(a),posY:e.readUInt8(a+1)})}return{order:{type:13,spriteIndex:e.readUInt8(r+1),bgColorCode:e.readUInt8(r+2),fgColorCode:e.readUInt8(r+3),positions:o},bytesRead:6+n*2}}decodeSpriteCloudMultiColorOrder(e,t){this.checkSize(e,t,4);let r=t,n=e.readUInt16BE(r+2);this.checkSize(e,t,4+n*2);let o=[];for(let i=0;i<n;i++){let a=r+4+i*2;o.push({posX:e.readUInt8(a),posY:e.readUInt8(a+1)})}return{order:{type:14,spriteIndex:e.readUInt8(r+1),positions:o},bytesRead:4+n*2}}decodeSpriteCloudVariedOrder(e,t){this.checkSize(e,t,3);let r=t,n=e.readUInt16BE(r+1);this.checkSize(e,t,3+n*5);let o=[];for(let i=0;i<n;i++){let a=r+3+i*5;o.push({spriteIndex:e.readUInt8(a),bgColorCode:e.readUInt8(a+1),fgColorCode:e.readUInt8(a+2),posX:e.readUInt8(a+3),posY:e.readUInt8(a+4)})}return{order:{type:15,sprites:o},bytesRead:3+n*5}}decodeSpriteCloudVariedMultiColorOrder(e,t){this.checkSize(e,t,3);let r=t,n=e.readUInt16BE(r+1);this.checkSize(e,t,3+n*3);let o=[];for(let i=0;i<n;i++){let a=r+3+i*3;o.push({spriteIndex:e.readUInt8(a),posX:e.readUInt8(a+1),posY:e.readUInt8(a+2)})}return{order:{type:16,sprites:o},bytesRead:3+n*3}}decodeClearOrder(e,t){this.checkSize(e,t,4);let r=t;return{order:{type:19,charCode:e.readUInt8(r+1),bgColorCode:e.readUInt8(r+2),fgColorCode:e.readUInt8(r+3)},bytesRead:4}}decodeFillCharOrder(e,t){this.checkSize(e,t,5);let r=t,n=e.readUInt8(r+1),o=e.readUInt8(r+2),s=n*o;this.checkSize(e,t,5+s);let i=[];for(let d=0;d<s;d++)i.push(e.readUInt8(r+5+d));return{order:{type:20,patternWidth:n,patternHeight:o,bgColorCode:e.readUInt8(r+3),fgColorCode:e.readUInt8(r+4),pattern:i},bytesRead:5+s}}decodeFillSpriteOrder(e,t){this.checkSize(e,t,4);let r=t;return{order:{type:21,spriteIndex:e.readUInt8(r+1),bgColorCode:e.readUInt8(r+2),fgColorCode:e.readUInt8(r+3)},bytesRead:4}}decodeFillSpriteMultiColorOrder(e,t){this.checkSize(e,t,2);let r=t;return{order:{type:22,spriteIndex:e.readUInt8(r+1)},bytesRead:2}}decodeTriggerSoundOrder(e,t){this.checkSize(e,t,5);let r=t;return{order:{type:32,posX:e.readUInt8(r+1),posY:e.readUInt8(r+2),soundId:e.readUInt8(r+3),loop:e.readUInt8(r+4)===1},bytesRead:5}}decodeTriggerGlobalSoundOrder(e,t){this.checkSize(e,t,3);let r=t;return{order:{type:33,soundId:e.readUInt8(r+1),loop:e.readUInt8(r+2)===1},bytesRead:3}}checkSize(e,t,r){if(t+r>e.length)throw new Error(`Buffer too short: need ${r} bytes at offset ${t}, but only ${e.length-t} bytes available`)}};g(je,"OrderDecoder");Ue=je});var qe,we,lt=F(()=>{"use strict";dt();qe=class qe{constructor(){m(this,"orderDecoder");this.orderDecoder=new Ue}decode(e,t=0){this.checkSize(e,t,13);let n=t,o=e.readUInt16BE(n);n+=2;let s=e.readUInt8(n++),i=e.readUInt8(n++),a=e.readUInt16BE(n);n+=2;let d=e.readUInt16BE(n);n+=2;let l=e.readUInt16BE(n);n+=2;let c=e.readUInt16BE(n);n+=2;let u=e.readUInt8(n++),p=[],h=n;for(let y=0;y<u;y++){let f=this.orderDecoder.decode(e,h);p.push(f.order),h+=f.bytesRead}return{layer:{id:o,updateFlags:s,zIndex:i,originX:a,originY:d,width:l,height:c,orderCount:u,orders:p},bytesRead:h-t}}checkSize(e,t,r){if(t+r>e.length)throw new Error(`Buffer too short for layer: need ${r} bytes at offset ${t}, but only ${e.length-t} bytes available`)}};g(qe,"LayerDecoder");we=qe});var ut={};ie(ut,{UpdatePacketDecoder:()=>le});var Ke,le,Je=F(()=>{"use strict";at();lt();X();Ke=class Ke{constructor(){m(this,"displayDecoder");m(this,"layerDecoder");this.displayDecoder=new fe,this.layerDecoder=new we}decode(e,t=0){let r=I.from(e);this.checkSize(r,t,11);let o=t,s=Number(r.readBigUInt64BE(o));o+=8;let i=r.readUInt8(o);o+=1;let a=[];for(let u=0;u<i;u++){let p=this.displayDecoder.decode(r,o);a.push(p.display),o+=p.bytesRead}this.checkSize(r,o,2);let d=r.readUInt16BE(o);o+=2;let l=[];for(let u=0;u<d;u++){let p=this.layerDecoder.decode(r,o);l.push(p.layer),o+=p.bytesRead}return{tick:s,displayCount:i,displays:a,layerCount:d,layers:l}}isValid(e,t=0){let r=I.from(e);try{return this.checkSize(r,t,11),!0}catch{return!1}}decodeHeader(e,t=0){let r=I.from(e);this.checkSize(r,t,11);let n=t,o=Number(r.readBigUInt64BE(n));n+=8;let s=r.readUInt8(n);n+=1,n+=s*7,this.checkSize(r,n,2);let i=r.readUInt16BE(n);return{tick:o,displayCount:s,layerCount:i}}checkSize(e,t,r){if(t+r>e.length)throw new Error(`Buffer too short for update packet: need ${r} bytes at offset ${t}, but only ${e.length-t} bytes available`)}};g(Ke,"UpdatePacketDecoder");le=Ke});var Y={};ie(Y,{LoadType:()=>Oe});var Oe,D=F(()=>{"use strict";Oe=(s=>(s[s.ColorPalette=1]="ColorPalette",s[s.Sprite=2]="Sprite",s[s.MulticolorSprite=3]="MulticolorSprite",s[s.BitmapFont=4]="BitmapFont",s[s.Sound=5]="Sound",s[s.WebFont=6]="WebFont",s))(Oe||{})});var ct={};ie(ct,{LoadDecoder:()=>Qe});var et,Qe,pt=F(()=>{"use strict";X();et=class et{decode(e,t=0){let r=I.from(e);if(t>=r.length)throw new Error("Buffer too short to decode load type");let n=r.readUInt8(t);switch(n){case 1:return this.decodeColorPalette(r,t);case 2:return this.decodeSprite(r,t);case 3:return this.decodeMulticolorSprite(r,t);case 4:return this.decodeBitmapFont(r,t);case 5:return this.decodeSound(r,t);case 6:return this.decodeWebFont(r,t);default:throw new Error(`Unknown load type: 0x${n.toString(16)}`)}}decodeColorPalette(e,t){let r=t;this.checkSize(e,t,2,"ColorPalette header");let n=e.readUInt8(t++),o=e.readUInt8(t++);this.checkSize(e,t,o*6,`ColorPalette ${o} colors`);let s=[];for(let a=0;a<o;a++)s.push({colorId:e.readUInt8(t++),r:e.readUInt8(t++),g:e.readUInt8(t++),b:e.readUInt8(t++),a:e.readUInt8(t++),e:e.readUInt8(t++)});return{load:{loadType:1,colors:s},bytesRead:t-r}}decodeSprite(e,t){let r=t;this.checkSize(e,t,2,"Sprite header");let n=e.readUInt8(t++),o=e.readUInt8(t++),s=[];for(let a=0;a<o;a++){this.checkSize(e,t,3,`Sprite ${a} header`);let d=e.readUInt8(t++),l=e.readUInt8(t++),c=e.readUInt8(t++),u=l*c;this.checkSize(e,t,u,`Sprite ${a} data`);let p=[];for(let h=0;h<u;h++)p.push(e.readUInt8(t++));s.push({spriteId:d,sizeX:l,sizeY:c,data:p})}return{load:{loadType:2,sprites:s},bytesRead:t-r}}decodeMulticolorSprite(e,t){let r=t;this.checkSize(e,t,2,"MulticolorSprite header");let n=e.readUInt8(t++),o=e.readUInt8(t++),s=[];for(let a=0;a<o;a++){this.checkSize(e,t,3,`MulticolorSprite ${a} header`);let d=e.readUInt8(t++),l=e.readUInt8(t++),c=e.readUInt8(t++),u=l*c,p=u*3;this.checkSize(e,t,p,`MulticolorSprite ${a} data`);let h=[];for(let C=0;C<u;C++)h.push({charCode:e.readUInt8(t++),fgColorId:e.readUInt8(t++),bgColorId:e.readUInt8(t++)});s.push({spriteId:d,sizeX:l,sizeY:c,data:h})}return{load:{loadType:3,sprites:s},bytesRead:t-r}}decodeBitmapFont(e,t){let r=t;this.checkSize(e,t,7,"BitmapFont header");let n=e.readUInt8(t++),o=e.readUInt8(t++),s=e.readUInt8(t++),i=e.readUInt8(t++),a=e.readUInt8(t++),d=e.readUInt8(t++),l=e.readUInt8(t++),c=Math.ceil(s*i/8),u=[];for(let h=0;h<l;h++){this.checkSize(e,t,1+c,`BitmapFont character ${h}`);let C=e.readUInt8(t++),y=new Uint8Array(c);for(let f=0;f<c;f++)y[f]=e.readUInt8(t++);u.push({charCode:C,bitmap:y})}return{load:{loadType:4,fontId:o,width:s,height:i,cellWidth:a,cellHeight:d,characters:u},bytesRead:t-r}}decodeSound(e,t){let r=t;this.checkSize(e,t,2,"Sound header");let n=e.readUInt8(t++),o=e.readUInt8(t++),s=[];for(let a=0;a<o;a++){this.checkSize(e,t,3,`Sound ${a} header`);let d=e.readUInt8(t++),l=e.readUInt16BE(t);t+=2,this.checkSize(e,t,l,`Sound ${a} MIDI data`);let c=new Uint8Array(l);for(let u=0;u<l;u++)c[u]=e.readUInt8(t++);s.push({soundId:d,midiData:c})}return{load:{loadType:5,sounds:s},bytesRead:t-r}}checkSize(e,t,r,n){if(t+r>e.length)throw new Error(`Buffer too short for ${n}: need ${r} bytes at offset ${t}, but only ${e.length-t} bytes remaining`)}decodeWebFont(e,t){let r=t,n=new TextDecoder;this.checkSize(e,t,5,"WebFont header");let o=e.readUInt8(t++),s=e.readUInt8(t++),i=e.readUInt8(t++),a=e.readUInt8(t++);this.checkSize(e,t,a,"WebFont family string");let d=new Uint8Array(a);for(let p=0;p<a;p++)d[p]=e.readUInt8(t++);let l=n.decode(d);this.checkSize(e,t,2,"WebFont fontSize");let c=e.readUInt16BE(t);t+=2;let u={loadType:6,fontId:s,fontFamily:l,fontSize:c};if(i&1&&(this.checkSize(e,t,2,"WebFont offsetX"),u.offsetX=e.readInt16BE(t),t+=2),i&2&&(this.checkSize(e,t,2,"WebFont offsetY"),u.offsetY=e.readInt16BE(t),t+=2),i&4&&(this.checkSize(e,t,2,"WebFont charSpacing"),u.charSpacing=e.readInt16BE(t),t+=2),i&8){this.checkSize(e,t,2,"WebFont lineHeight");let p=e.readUInt16BE(t);u.lineHeight=p/100,t+=2}if(i&16){this.checkSize(e,t,1,"WebFont weight length");let p=e.readUInt8(t++);this.checkSize(e,t,p,"WebFont weight string");let h=new Uint8Array(p);for(let C=0;C<p;C++)h[C]=e.readUInt8(t++);u.fontWeight=n.decode(h)}if(i&32){this.checkSize(e,t,1,"WebFont style length");let p=e.readUInt8(t++);this.checkSize(e,t,p,"WebFont style string");let h=new Uint8Array(p);for(let C=0;C<p;C++)h[C]=e.readUInt8(t++);u.fontStyle=n.decode(h)}return{load:u,bytesRead:t-r}}};g(et,"LoadDecoder");Qe=et});var te={};ie(te,{LoadEncoder:()=>tt});var rt,tt,re=F(()=>{"use strict";X();rt=class rt{encode(e){switch(e.loadType){case 1:return this.encodeColorPalette(e);case 2:return this.encodeSprite(e);case 3:return this.encodeMulticolorSprite(e);case 4:return this.encodeBitmapFont(e);case 5:return this.encodeSound(e);case 6:return this.encodeWebFont(e);default:throw new Error(`Unknown load type: ${e.loadType}`)}}encodeColorPalette(e){let t=e.colors.length;if(t>255)throw new Error(`Palette size ${t} exceeds maximum of 255`);let r=I.allocUnsafe(2+t*6),n=0;r.writeUInt8(1,n++),r.writeUInt8(t,n++);for(let o of e.colors)r.writeUInt8(o.colorId,n++),r.writeUInt8(o.r,n++),r.writeUInt8(o.g,n++),r.writeUInt8(o.b,n++),r.writeUInt8(o.a,n++),r.writeUInt8(o.e??0,n++);return r.toUint8Array()}encodeSprite(e){let t=e.sprites.length;if(t>255)throw new Error(`Sprite count ${t} exceeds maximum of 255`);let r=2;for(let s of e.sprites)r+=3,r+=s.data.length;let n=I.allocUnsafe(r),o=0;n.writeUInt8(2,o++),n.writeUInt8(t,o++);for(let s of e.sprites){if(s.data.length!==s.sizeX*s.sizeY)throw new Error(`Sprite ${s.spriteId}: data length ${s.data.length} does not match size ${s.sizeX}x${s.sizeY}`);n.writeUInt8(s.spriteId,o++),n.writeUInt8(s.sizeX,o++),n.writeUInt8(s.sizeY,o++);for(let i of s.data)n.writeUInt8(i,o++)}return n.toUint8Array()}encodeMulticolorSprite(e){let t=e.sprites.length;if(t>255)throw new Error(`Sprite count ${t} exceeds maximum of 255`);let r=2;for(let s of e.sprites)r+=3,r+=s.data.length*3;let n=I.allocUnsafe(r),o=0;n.writeUInt8(3,o++),n.writeUInt8(t,o++);for(let s of e.sprites){if(s.data.length!==s.sizeX*s.sizeY)throw new Error(`Sprite ${s.spriteId}: data length ${s.data.length} does not match size ${s.sizeX}x${s.sizeY}`);n.writeUInt8(s.spriteId,o++),n.writeUInt8(s.sizeX,o++),n.writeUInt8(s.sizeY,o++);for(let i of s.data)n.writeUInt8(i.charCode,o++),n.writeUInt8(i.fgColorId,o++),n.writeUInt8(i.bgColorId,o++)}return n.toUint8Array()}encodeBitmapFont(e){let t=e.characters.length;if(t>255)throw new Error(`Character count ${t} exceeds maximum of 255`);let r=Math.ceil(e.width*e.height/8),n=7+t*(1+r),o=I.allocUnsafe(n),s=0;o.writeUInt8(4,s++),o.writeUInt8(e.fontId,s++),o.writeUInt8(e.width,s++),o.writeUInt8(e.height,s++),o.writeUInt8(e.cellWidth,s++),o.writeUInt8(e.cellHeight,s++),o.writeUInt8(t,s++);for(let i of e.characters){if(i.bitmap.length!==r)throw new Error(`Character ${i.charCode}: bitmap size ${i.bitmap.length} does not match expected ${r} bytes`);o.writeUInt8(i.charCode,s++);for(let a=0;a<i.bitmap.length;a++)o.writeUInt8(i.bitmap[a],s++)}return o.toUint8Array()}encodeSound(e){let t=e.sounds.length;if(t>255)throw new Error(`Sound count ${t} exceeds maximum of 255`);let r=2;for(let s of e.sounds){if(s.midiData.length>65535)throw new Error(`Sound ${s.soundId}: MIDI data size ${s.midiData.length} exceeds maximum of 65535 bytes`);r+=3,r+=s.midiData.length}let n=I.allocUnsafe(r),o=0;n.writeUInt8(5,o++),n.writeUInt8(t,o++);for(let s of e.sounds){n.writeUInt8(s.soundId,o++),n.writeUInt16BE(s.midiData.length,o),o+=2;for(let i=0;i<s.midiData.length;i++)n.writeUInt8(s.midiData[i],o++)}return n.toUint8Array()}encodeWebFont(e){let t=new TextEncoder,r=t.encode(e.fontFamily),n=e.fontWeight?t.encode(e.fontWeight):new Uint8Array(0),o=e.fontStyle?t.encode(e.fontStyle):new Uint8Array(0),s=0;e.offsetX!==void 0&&(s|=1),e.offsetY!==void 0&&(s|=2),e.charSpacing!==void 0&&(s|=4),e.lineHeight!==void 0&&(s|=8),e.fontWeight!==void 0&&(s|=16),e.fontStyle!==void 0&&(s|=32);let i=4;i+=r.length,i+=2,e.offsetX!==void 0&&(i+=2),e.offsetY!==void 0&&(i+=2),e.charSpacing!==void 0&&(i+=2),e.lineHeight!==void 0&&(i+=2),e.fontWeight!==void 0&&(i+=1+n.length),e.fontStyle!==void 0&&(i+=1+o.length);let a=I.allocUnsafe(i),d=0;a.writeUInt8(6,d++),a.writeUInt8(e.fontId,d++),a.writeUInt8(s,d++),a.writeUInt8(r.length,d++);for(let l=0;l<r.length;l++)a.writeUInt8(r[l],d++);if(a.writeUInt16BE(e.fontSize,d),d+=2,e.offsetX!==void 0&&(a.writeInt16BE(e.offsetX,d),d+=2),e.offsetY!==void 0&&(a.writeInt16BE(e.offsetY,d),d+=2),e.charSpacing!==void 0&&(a.writeInt16BE(e.charSpacing,d),d+=2),e.lineHeight!==void 0&&(a.writeUInt16BE(Math.round(e.lineHeight*100),d),d+=2),e.fontWeight!==void 0){a.writeUInt8(n.length,d++);for(let l=0;l<n.length;l++)a.writeUInt8(n[l],d++)}if(e.fontStyle!==void 0){a.writeUInt8(o.length,d++);for(let l=0;l<o.length;l++)a.writeUInt8(o[l],d++)}return a.toUint8Array()}};g(rt,"LoadEncoder");tt=rt});var ir={};ie(ir,{ASCII_8X8_FONT:()=>W,BITMASK16_ORDER_MIN_SIZE:()=>Zt,BITMASK4_ORDER_MIN_SIZE:()=>Vt,BITMASK_ORDER_MIN_SIZE:()=>Ht,BitmapFont:()=>K,BitmapFontRegistry:()=>Q,CHAR_ORDER_SIZE:()=>At,CIRCLE_SHAPE_SIZE:()=>Xt,CLEAR_ORDER_SIZE:()=>Jt,COLORMAP_ORDER_MIN_SIZE:()=>Dt,COLOR_SKIP:()=>k,CellBuffer:()=>R,CharCodeBuffer:()=>N,Core:()=>ve,CoreStats:()=>j,DISPLAY_HEADER_SIZE:()=>cr,DOTCLOUD_MULTICOLOR_ORDER_MIN_SIZE:()=>$t,DOTCLOUD_ORDER_MIN_SIZE:()=>Nt,Display:()=>_,ELLIPSE_SHAPE_SIZE:()=>Wt,FILLCHAR_ORDER_MIN_SIZE:()=>Qt,FILLSPRITE_MULTICOLOR_ORDER_SIZE:()=>tr,FILLSPRITE_ORDER_SIZE:()=>er,FULLFRAME_MULTICOLOR_ORDER_MIN_SIZE:()=>Et,FULLFRAME_ORDER_MIN_SIZE:()=>Ft,FontType:()=>_e,InputBindingRegistry:()=>H,LAYER_CELL_COUNT:()=>lr,LAYER_HEADER_SIZE:()=>pr,LAYER_SIZE:()=>ce,LINE_SHAPE_SIZE:()=>Yt,Layer:()=>$,LoadType:()=>Oe,OrderBuilder:()=>Ae,OrderType:()=>nt,RECTANGLE_SHAPE_SIZE:()=>Pt,SHAPE_ORDER_MIN_SIZE:()=>Tt,SPRITECLOUD_MULTICOLOR_ORDER_MIN_SIZE:()=>jt,SPRITECLOUD_ORDER_MIN_SIZE:()=>Gt,SPRITECLOUD_VARIED_MULTICOLOR_ORDER_MIN_SIZE:()=>Kt,SPRITECLOUD_VARIED_ORDER_MIN_SIZE:()=>qt,SPRITE_MULTICOLOR_ORDER_SIZE:()=>Lt,SPRITE_ORDER_SIZE:()=>Rt,SUBFRAME_MULTICOLOR_ORDER_MIN_SIZE:()=>zt,SUBFRAME_ORDER_MIN_SIZE:()=>Mt,ShapeType:()=>Fe,SoundRegistry:()=>ee,SpriteRegistry:()=>q,TEXT_MULTILINE_ORDER_MIN_SIZE:()=>kt,TEXT_ORDER_MIN_SIZE:()=>Bt,TRIANGLE_SHAPE_SIZE:()=>_t,TRIGGERGLOBALSOUND_ORDER_SIZE:()=>nr,TRIGGERSOUND_ORDER_SIZE:()=>rr,UPDATE_PACKET_HEADER_SIZE:()=>ur,UpdateFlags:()=>ot,UpdateFlagsHelper:()=>Be,UpdatePacketDecoder:()=>le,User:()=>Z,UserStats:()=>V,Vector2:()=>It.Vector2,WebFont:()=>L,WebFontRegistry:()=>J,createASCII8x8FontLoad:()=>Ct,createEmptyCompressedInputPacket:()=>he,decodeCompressedInput:()=>ge,decodeInt8ToAxis:()=>xe,encodeAxisToInt8:()=>me,encodeCompressedInput:()=>bt,getASCII8x8FontConfig:()=>gt,getAllCharCodes:()=>xt,getButtonByteCount:()=>P,getCharBitmap:()=>ht,getCompressedPacketSize:()=>Ce,getOrderTypeName:()=>St,hasChar:()=>mt,isValidOrderType:()=>yt});module.exports=M(ir);var se=require("@utsp/types");var ke=class ke{constructor(e=0,t=60,r=40){m(this,"id");m(this,"origin");m(this,"size");m(this,"previousOrigin",new se.Vector2(0,0));m(this,"previousSize",new se.Vector2(0,0));m(this,"toDraw",[]);if(e<0||e>255)throw new Error(`Display ID must be between 0 and 255, got ${e}`);if(t<1||t>256)throw new Error(`Display sizeX must be between 1 and 256, got ${t}`);if(r<1||r>256)throw new Error(`Display sizeY must be between 1 and 256, got ${r}`);this.id=e,this.origin=new se.Vector2(0,0),this.size=new se.Vector2(t,r),this.toDraw=new Array(this.size.x*this.size.y).fill(null).map(()=>({charCode:0,fgColorCode:0,bgColorCode:0}))}getId(){return this.id}getOrigin(){return this.origin}setOrigin(e){this.origin=e}moveOrigin(e,t){this.origin.x+=e,this.origin.y+=t}hasOriginChanged(){return this.origin.x!==this.previousOrigin.x||this.origin.y!==this.previousOrigin.y}hasSizeChanged(){return this.size.x!==this.previousSize.x||this.size.y!==this.previousSize.y}hasChanged(){return this.hasOriginChanged()||this.hasSizeChanged()}resetChangeTracking(){this.previousOrigin.x=this.origin.x,this.previousOrigin.y=this.origin.y,this.previousSize.x=this.size.x,this.previousSize.y=this.size.y}getSize(){return this.size}setSize(e){if(e.x<1||e.x>256)throw new Error(`Display sizeX must be between 1 and 256, got ${e.x}`);if(e.y<1||e.y>256)throw new Error(`Display sizeY must be between 1 and 256, got ${e.y}`);this.size=e,this.toDraw=new Array(this.size.x*this.size.y).fill(null).map(()=>({charCode:0,fgColorCode:0,bgColorCode:0}))}};g(ke,"Display");var _=ke;var ce=256,lr=65536,k=255,ur=9,cr=5,pr=13,At=6,Bt=6,kt=6,Mt=7,zt=5,Ft=3,Et=1,Rt=6,Lt=4,Dt=5,Tt=2,Pt=8,Xt=7,Yt=7,Wt=8,_t=10,Nt=6,$t=3,Ht=9,Vt=15,Zt=51,Gt=6,jt=4,qt=3,Kt=3,Jt=4,Qt=5,er=4,tr=2,rr=5,nr=3;var Me=class Me{constructor(e=65536){m(this,"data");m(this,"size");this.size=e,this.data=new Uint8Array(e*3),this.clear()}clear(){this.clearWithColor(0,255,255)}clearWithColor(e,t,r){for(let n=0;n<this.size;n++){let o=n*3;this.data[o]=e,this.data[o+1]=t,this.data[o+2]=r}}set(e,t,r,n){let o=e*3;this.data[o]=t,this.data[o+1]=r,this.data[o+2]=n}fillCharsUniform(e,t,r,n){for(let o=0;o<e.length;o++){let s=e[o]*3;this.data[s]=t,this.data[s+1]=r,this.data[s+2]=n}}get(e){let t=e*3;return{charCode:this.data[t],fgColorCode:this.data[t+1],bgColorCode:this.data[t+2]}}setCharOnly(e,t){this.data[e*3]=t}setColorsOnly(e,t,r){this.data[e*3+1]=t,this.data[e*3+2]=r}getCharCode(e){return this.data[e*3]}getFgColorCode(e){return this.data[e*3+1]}getBgColorCode(e){return this.data[e*3+2]}getRawData(){return this.data}getSize(){return this.size}};g(Me,"CellBuffer");var R=Me,ze=class ze{constructor(e){m(this,"data");m(this,"size");this.size=e,this.data=new Uint8Array(e)}clear(){this.data.fill(0)}set(e,t){this.data[e]=t}get(e){return this.data[e]}getRawData(){return this.data}getSize(){return this.size}};g(ze,"CharCodeBuffer");var N=ze;var st=require("@utsp/types");var or=new Map([[9474,179],[9472,196],[9484,218],[9488,191],[9492,192],[9496,217],[9500,195],[9508,180],[9516,194],[9524,193],[9532,197],[9553,186],[9552,205],[9556,201],[9559,187],[9562,200],[9565,188],[9568,204],[9571,185],[9574,203],[9577,202],[9580,206],[9608,219],[9619,178],[9618,177],[9617,176],[9600,223],[9604,220],[9612,221],[9616,222]]);function ae(x){if(x<128)return x;let e=or.get(x);return e!==void 0?e:x&255}g(ae,"unicodeToCp437");var Ee=class Ee{constructor(){m(this,"currentWidth",256);m(this,"currentHeight",256)}rasterizeOrders(e,t,r,n,o="add",s){this.currentWidth=r,this.currentHeight=n,o==="set"&&this.clearBuffer(t);for(let i of e)this.rasterizeOrder(i,t,s)}clearBuffer(e){e.clear()}rasterizeOrder(e,t,r){switch(e.type){case 1:this.rasterizeChar(e,t);break;case 2:this.rasterizeText(e,t);break;case 23:this.rasterizeTextMultiline(e,t);break;case 3:this.rasterizeSubFrame(e,t);break;case 4:this.rasterizeSubFrameMultiColor(e,t);break;case 5:this.rasterizeFullFrame(e,t);break;case 6:this.rasterizeFullFrameMultiColor(e,t);break;case 7:this.rasterizeSprite(e,t,r);break;case 8:this.rasterizeSpriteMultiColor(e,t,r);break;case 9:this.rasterizeColorMap(e,t);break;case 10:this.rasterizeShape(e,t);break;case 11:this.rasterizeDotCloud(e,t);break;case 12:this.rasterizeDotCloudMultiColor(e,t);break;case 17:this.rasterizeBitmask(e,t);break;case 18:this.rasterizeBitmask4(e,t);break;case 24:this.rasterizeBitmask16(e,t);break;case 13:this.rasterizeSpriteCloud(e,t,r);break;case 14:this.rasterizeSpriteCloudMultiColor(e,t,r);break;case 15:this.rasterizeSpriteCloudVaried(e,t,r);break;case 16:this.rasterizeSpriteCloudVariedMultiColor(e,t,r);break;case 19:this.rasterizeClear(e,t);break;case 20:this.rasterizeFillChar(e,t);break;case 21:this.rasterizeFillSprite(e,t,r);break;case 22:this.rasterizeFillSpriteMultiColor(e,t,r);break;default:break}}rasterizeChar(e,t){let{posX:r,posY:n,charCode:o,bgColorCode:s,fgColorCode:i}=e;if(!this.isInBounds(r,n))return;let a=n*this.currentWidth+r;t.set(a,o,i,s)}rasterizeText(e,t){let{posX:r,posY:n,text:o,bgColorCode:s,fgColorCode:i}=e;if(this.isInBounds(r,n))for(let a=0;a<o.length;a++){let d=r+a;if(d>=this.currentWidth)break;let l=n*this.currentWidth+d,c=o.charCodeAt(a),u=ae(c);t.set(l,u,i,s)}}rasterizeTextMultiline(e,t){let{posX:r,posY:n,text:o,bgColorCode:s,fgColorCode:i}=e,a=o.split(`
`),d=n;for(let l of a){if(d>=this.currentHeight)break;if(d>=0&&this.isInBounds(r,d))for(let c=0;c<l.length;c++){let u=r+c;if(u>=this.currentWidth)break;let p=d*this.currentWidth+u,h=l.charCodeAt(c),C=ae(h);t.set(p,C,i,s)}d++}}rasterizeSubFrame(e,t){let{posX:r,posY:n,sizeX:o,sizeY:s,frame:i,bgColorCode:a,fgColorCode:d}=e;for(let l=0;l<s;l++){let c=n+l;if(!(c<0||c>=this.currentHeight))for(let u=0;u<o;u++){let p=r+u;if(p<0||p>=this.currentWidth)continue;let h=l*o+u;if(h>=i.length)break;let C=c*this.currentWidth+p;t.set(C,i[h],d,a)}}}rasterizeSubFrameMultiColor(e,t){let{posX:r,posY:n,sizeX:o,sizeY:s,frame:i}=e;for(let a=0;a<s;a++){let d=n+a;if(!(d<0||d>=this.currentHeight))for(let l=0;l<o;l++){let c=r+l;if(c<0||c>=this.currentWidth)continue;let u=a*o+l;if(u>=i.length)break;let p=i[u],h=d*this.currentWidth+c;t.set(h,p.charCode,p.fgColorCode,p.bgColorCode)}}}rasterizeFullFrame(e,t){let{frame:r,bgColorCode:n,fgColorCode:o}=e,s=this.currentWidth*this.currentHeight;for(let i=0;i<s&&i<r.length;i++)t.set(i,r[i],o,n)}rasterizeFullFrameMultiColor(e,t){let{frame:r}=e,n=this.currentWidth*this.currentHeight;for(let o=0;o<n&&o<r.length;o++){let s=r[o];t.set(o,s.charCode,s.fgColorCode,s.bgColorCode)}}rasterizeColorMap(e,t){let{posX:r,posY:n,sizeX:o,sizeY:s,colorData:i}=e;for(let a=0;a<s;a++){let d=n+a;if(!(d<0||d>=this.currentHeight))for(let l=0;l<o;l++){let c=r+l;if(c<0||c>=this.currentWidth)continue;let u=a*o+l;if(u>=i.length)break;let p=d*this.currentWidth+c,h=i[u];t.setColorsOnly(p,h.fgColorCode,h.bgColorCode)}}}rasterizeShape(e,t){let{shapeType:r,shapeData:n}=e;switch(r){case 1:this.rasterizeRectangle(n,t);break;case 2:this.rasterizeCircle(n,t);break;case 3:this.rasterizeLine(n,t);break;case 4:this.rasterizeEllipse(n,t);break;case 5:this.rasterizeTriangle(n,t);break}}rasterizeRectangle(e,t){let{posX:r,posY:n,width:o,height:s,filled:i,charCode:a,bgColorCode:d,fgColorCode:l}=e;if(i)for(let c=0;c<s;c++){let u=n+c;if(!(u<0||u>=this.currentHeight))for(let p=0;p<o;p++){let h=r+p;if(h<0||h>=this.currentWidth)continue;let C=u*this.currentWidth+h;t.set(C,a,l,d)}}else{for(let c=0;c<o;c++)this.setCell(r+c,n,a,d,l,t),this.setCell(r+c,n+s-1,a,d,l,t);for(let c=0;c<s;c++)this.setCell(r,n+c,a,d,l,t),this.setCell(r+o-1,n+c,a,d,l,t)}}rasterizeCircle(e,t){let{centerX:r,centerY:n,radius:o,filled:s,charCode:i,bgColorCode:a,fgColorCode:d}=e;if(s)for(let l=-o;l<=o;l++){let c=n+l;if(!(c<0||c>=this.currentHeight))for(let u=-o;u<=o;u++){let p=r+u;if(!(p<0||p>=this.currentWidth)&&u*u+l*l<=o*o){let h=c*this.currentWidth+p;t.set(h,i,d,a)}}}else{let l=o,c=0,u=0;for(;l>=c;)this.setCell(r+l,n+c,i,a,d,t),this.setCell(r+c,n+l,i,a,d,t),this.setCell(r-c,n+l,i,a,d,t),this.setCell(r-l,n+c,i,a,d,t),this.setCell(r-l,n-c,i,a,d,t),this.setCell(r-c,n-l,i,a,d,t),this.setCell(r+c,n-l,i,a,d,t),this.setCell(r+l,n-c,i,a,d,t),u<=0&&(c+=1,u+=2*c+1),u>0&&(l-=1,u-=2*l+1)}}rasterizeLine(e,t){let{x1:r,y1:n,x2:o,y2:s,charCode:i,bgColorCode:a,fgColorCode:d}=e,l=Math.abs(o-r),c=Math.abs(s-n),u=r<o?1:-1,p=n<s?1:-1,h=l-c,C=r,y=n;for(;this.setCell(C,y,i,a,d,t),!(C===o&&y===s);){let f=2*h;f>-c&&(h-=c,C+=u),f<l&&(h+=l,y+=p)}}rasterizeEllipse(e,t){let{centerX:r,centerY:n,radiusX:o,radiusY:s,filled:i,charCode:a,bgColorCode:d,fgColorCode:l}=e;if(i)for(let c=-s;c<=s;c++){let u=n+c;if(!(u<0||u>=this.currentHeight))for(let p=-o;p<=o;p++){let h=r+p;if(h<0||h>=this.currentWidth)continue;if(p*p/(o*o)+c*c/(s*s)<=1){let y=u*this.currentWidth+h;t.set(y,a,l,d)}}}else{let c=Math.max(o,s)*8;for(let u=0;u<c;u++){let p=2*Math.PI*u/c,h=Math.round(r+o*Math.cos(p)),C=Math.round(n+s*Math.sin(p));this.setCell(h,C,a,d,l,t)}}}rasterizeTriangle(e,t){let{x1:r,y1:n,x2:o,y2:s,x3:i,y3:a,filled:d,charCode:l,bgColorCode:c,fgColorCode:u}=e;if(d){let p=[{x:r,y:n},{x:o,y:s},{x:i,y:a}].sort((b,v)=>b.y-v.y),[h,C,y]=p,f=g((b,v,B)=>{let O=Math.round(Math.min(v,B)),w=Math.round(Math.max(v,B));for(let z=O;z<=w;z++)if(z>=0&&z<this.currentWidth&&b>=0&&b<this.currentHeight){let ue=b*this.currentWidth+z;t.set(ue,l,u,c)}},"drawLine"),U=g((b,v,B,O,w)=>O===v?B:B+(b-v)*(w-B)/(O-v),"interpolate");for(let b=h.y;b<=C.y;b++){let v=U(b,h.y,h.x,y.y,y.x),B=U(b,h.y,h.x,C.y,C.x);f(b,v,B)}for(let b=C.y+1;b<=y.y;b++){let v=U(b,h.y,h.x,y.y,y.x),B=U(b,C.y,C.x,y.y,y.x);f(b,v,B)}}else this.drawLineSegment(r,n,o,s,l,c,u,t),this.drawLineSegment(o,s,i,a,l,c,u,t),this.drawLineSegment(i,a,r,n,l,c,u,t)}drawLineSegment(e,t,r,n,o,s,i,a){let d=Math.abs(r-e),l=Math.abs(n-t),c=e<r?1:-1,u=t<n?1:-1,p=d-l,h=e,C=t;for(;this.setCell(h,C,o,s,i,a),!(h===r&&C===n);){let y=2*p;y>-l&&(p-=l,h+=c),y<d&&(p+=d,C+=u)}}rasterizeDotCloud(e,t){let{charCode:r,bgColorCode:n,fgColorCode:o,positions:s}=e,i=t.getRawData(),a=this.currentWidth;for(let d=0;d<s.length;d++){if(s[d].posX<0||s[d].posX>=a||s[d].posY<0||s[d].posY>=this.currentHeight)continue;let l=(s[d].posY*a+s[d].posX)*3;i[l]=r,i[l+1]=o,i[l+2]=n}}rasterizeDotCloudMultiColor(e,t){let{dots:r}=e;for(let n of r)this.setCell(n.posX,n.posY,n.charCode,n.bgColorCode,n.fgColorCode,t)}rasterizeBitmask(e,t){let{posX:r,posY:n,sizeX:o,sizeY:s,charCode:i,bgColorCode:a,fgColorCode:d,override:l,mask:c}=e;for(let u=0;u<s;u++){let p=n+u;if(!(p<0||p>=this.currentHeight))for(let h=0;h<o;h++){let C=r+h;if(C<0||C>=this.currentWidth)continue;let y=u*o+h,f=Math.floor(y/8),U=y%8,b=(c[f]&1<<U)!==0,v=p*this.currentWidth+C;b?t.set(v,i,d,a):l&&t.set(v,255,255,255)}}}rasterizeBitmask4(e,t){let{posX:r,posY:n,sizeX:o,sizeY:s,override:i,variants:a,mask:d}=e;for(let l=0;l<s;l++){let c=n+l;if(!(c<0||c>=this.currentHeight))for(let u=0;u<o;u++){let p=r+u;if(p<0||p>=this.currentWidth)continue;let h=l*o+u,C=Math.floor(h/4),y=h%4*2,f=d[C]>>y&3,U=c*this.currentWidth+p;if(f>0){let b=a[f-1];t.set(U,b.charCode,b.fgColorCode,b.bgColorCode)}else i&&t.set(U,255,255,255)}}}rasterizeBitmask16(e,t){let{posX:r,posY:n,sizeX:o,sizeY:s,override:i,variants:a,mask:d}=e;for(let l=0;l<s;l++){let c=n+l;if(!(c<0||c>=this.currentHeight))for(let u=0;u<o;u++){let p=r+u;if(p<0||p>=this.currentWidth)continue;let h=l*o+u,C=Math.floor(h/2),y=h%2*4,f=d[C]>>y&15,U=c*this.currentWidth+p;if(f>0){let b=a[f-1];t.set(U,b.charCode,b.fgColorCode,b.bgColorCode)}else i&&t.set(U,255,255,255)}}}rasterizeClear(e,t){let{charCode:r,bgColorCode:n,fgColorCode:o}=e;t.clearWithColor(r,o,n)}rasterizeFillChar(e,t){let{patternWidth:r,patternHeight:n,pattern:o,bgColorCode:s,fgColorCode:i}=e;for(let a=0;a<this.currentHeight;a++)for(let d=0;d<this.currentWidth;d++){let l=d%r,u=a%n*r+l;if(u<o.length){let p=a*this.currentWidth+d;t.set(p,o[u],i,s)}}}rasterizeSprite(e,t,r){if(!r)return;let{posX:n,posY:o,spriteIndex:s,bgColorCode:i,fgColorCode:a}=e,d=r.getUnicolorSprite(s);if(!d)return;let l=d.data;for(let c=0;c<d.sizeY;c++)for(let u=0;u<d.sizeX;u++){let p=n+u,h=o+c;if(!this.isInBounds(p,h))continue;let C=c*d.sizeX+u,y=l.get(C);this.setCell(p,h,y,i,a,t)}}rasterizeSpriteMultiColor(e,t,r){if(!r)return;let{posX:n,posY:o,spriteIndex:s}=e,i=r.getMulticolorSprite(s);if(!i)return;let a=i.data;for(let d=0;d<i.sizeY;d++)for(let l=0;l<i.sizeX;l++){let c=n+l,u=o+d;if(!this.isInBounds(c,u))continue;let p=d*i.sizeX+l,h=a.getCharCode(p),C=a.getFgColorCode(p),y=a.getBgColorCode(p);this.setCell(c,u,h,y,C,t)}}rasterizeSpriteCloud(e,t,r){if(!r)return;let{spriteIndex:n,bgColorCode:o,fgColorCode:s,positions:i}=e,a=r.getUnicolorSprite(n);if(a){if(a.sizeX===1&&a.sizeY===1){let d=a.data.get(0),l=t.getRawData(),c=this.currentWidth;for(let u=0;u<i.length;u++){if(i[u].posX<0||i[u].posX>=c||i[u].posY<0||i[u].posY>=this.currentHeight)continue;let p=(i[u].posY*c+i[u].posX)*3;l[p]=d,l[p+1]=s,l[p+2]=o}return}for(let d=0;d<i.length;d++){let l=a.data;for(let c=0;c<a.sizeY;c++)for(let u=0;u<a.sizeX;u++){let p=i[d].posX+u,h=i[d].posY+c;if(!this.isInBounds(p,h))continue;let C=c*a.sizeX+u,y=l.get(C);this.setCell(p,h,y,o,s,t)}}}}rasterizeSpriteCloudMultiColor(e,t,r){if(!r)return;let{spriteIndex:n,positions:o}=e,s=r.getMulticolorSprite(n);if(s)for(let i=0;i<o.length;i++){let a=s.data;for(let d=0;d<s.sizeY;d++)for(let l=0;l<s.sizeX;l++){let c=o[i].posX+l,u=o[i].posY+d;if(!this.isInBounds(c,u))continue;let p=d*s.sizeX+l,h=a.getCharCode(p),C=a.getFgColorCode(p),y=a.getBgColorCode(p);this.setCell(c,u,h,y,C,t)}}}rasterizeSpriteCloudVaried(e,t,r){if(!r)return;let{sprites:n}=e;for(let o=0;o<n.length;o++){let s=n[o],i=r.getUnicolorSprite(s.spriteIndex);if(!i)continue;let a=i.data;for(let d=0;d<i.sizeY;d++)for(let l=0;l<i.sizeX;l++){let c=s.posX+l,u=s.posY+d;if(!this.isInBounds(c,u))continue;let p=d*i.sizeX+l,h=a.get(p);this.setCell(c,u,h,s.bgColorCode,s.fgColorCode,t)}}}rasterizeSpriteCloudVariedMultiColor(e,t,r){if(!r)return;let{sprites:n}=e;for(let o=0;o<n.length;o++){let s=n[o],i=r.getMulticolorSprite(s.spriteIndex);if(!i)continue;let a=i.data;for(let d=0;d<i.sizeY;d++)for(let l=0;l<i.sizeX;l++){let c=s.posX+l,u=s.posY+d;if(!this.isInBounds(c,u))continue;let p=d*i.sizeX+l,h=a.getCharCode(p),C=a.getFgColorCode(p),y=a.getBgColorCode(p);this.setCell(c,u,h,y,C,t)}}}rasterizeFillSprite(e,t,r){if(!r)return;let{spriteIndex:n,bgColorCode:o,fgColorCode:s}=e,i=r.getUnicolorSprite(n);if(!i)return;let a=i.data;for(let d=0;d<this.currentHeight;d++)for(let l=0;l<this.currentWidth;l++){let c=l%i.sizeX,p=d%i.sizeY*i.sizeX+c,h=a.get(p),C=d*this.currentWidth+l;t.set(C,h,s,o)}}rasterizeFillSpriteMultiColor(e,t,r){if(!r)return;let{spriteIndex:n}=e,o=r.getMulticolorSprite(n);if(!o)return;let s=o.data;for(let i=0;i<this.currentHeight;i++)for(let a=0;a<this.currentWidth;a++){let d=a%o.sizeX,c=i%o.sizeY*o.sizeX+d,u=s.getCharCode(c),p=s.getFgColorCode(c),h=s.getBgColorCode(c),C=i*this.currentWidth+a;t.set(C,u,p,h)}}setCell(e,t,r,n,o,s){if(!this.isInBounds(e,t))return;let i=t*this.currentWidth+e;s.set(i,r,o,n)}isInBounds(e,t){return e>=0&&e<this.currentWidth&&t>=0&&t<this.currentHeight}};g(Ee,"LayerRasterizer");var pe=Ee;var T=class T{constructor(e,t,r,n,o=!1){m(this,"id",0);m(this,"origin");m(this,"orders",[]);m(this,"zOrder",0);m(this,"data");m(this,"width");m(this,"height");m(this,"isStatic",!1);m(this,"spriteRegistry");m(this,"mode","server");m(this,"previousOrigin");m(this,"previousZOrder");m(this,"enabled",!0);m(this,"useSetMode",!1);m(this,"needsCommit",!1);if(r<1||r>256||n<1||n>256)throw new Error(`Layer size must be 1-256, got ${r}\xD7${n}`);this.origin=e,this.zOrder=t,this.width=r,this.height=n,this.isStatic=o,this.data=new R(r*n),this.previousOrigin=new st.Vector2(e.x,e.y),this.previousZOrder=t}setMode(e){this.mode=e}setSpriteRegistry(e){this.spriteRegistry=e}getOrders(){return this.orders}addOrders(e){this.orders.push(...e),this.useSetMode=!1,(this.mode==="client"||this.mode==="standalone")&&T.rasterizer.rasterizeOrders(e,this.data,this.width,this.height,"add",this.spriteRegistry)}setOrders(e){this.orders=e,this.useSetMode=!0,(this.mode==="client"||this.mode==="standalone")&&T.rasterizer.rasterizeOrders(e,this.data,this.width,this.height,"set",this.spriteRegistry)}clearOrders(){this.orders=[],(this.mode==="client"||this.mode==="standalone")&&T.rasterizer.clearBuffer(this.data)}getOrigin(){return this.origin}setOrigin(e){this.origin=e}getZOrder(){return this.zOrder}setZOrder(e){this.zOrder=e}getId(){return this.id}setId(e){this.id=e}getData(){return this.data}getWidth(){return this.width}getHeight(){return this.height}getCellAt(e,t){return e<0||e>=this.width||t<0||t>=this.height?null:this.data.get(t*this.width+e)}setStatic(e){this.isStatic=e}getStatic(){return this.isStatic}setEnabled(e){this.enabled=e}isEnabled(){return this.enabled}hasOriginChanged(){return this.origin.x!==this.previousOrigin.x||this.origin.y!==this.previousOrigin.y}hasZOrderChanged(){return this.zOrder!==this.previousZOrder}calculateUpdateFlags(){if(!this.enabled)return 0;let e=1;return this.useSetMode&&(e|=2),this.hasOriginChanged()&&(e|=4),this.hasZOrderChanged()&&(e|=8),(this.orders.length>0||this.needsCommit&&this.useSetMode)&&(e|=4),e}resetChangeTracking(){this.previousOrigin.x=this.origin.x,this.previousOrigin.y=this.origin.y,this.previousZOrder=this.zOrder}commit(){this.needsCommit=!0}getNeedsCommit(){return this.needsCommit}resetCommit(){this.needsCommit=!1}};g(T,"Layer"),m(T,"rasterizer",new pe);var $=T;var Re=class Re{constructor(){m(this,"axes",new Map);m(this,"buttons",new Map);m(this,"axisNameToId",new Map);m(this,"buttonNameToId",new Map);m(this,"version",1)}defineAxis(e,t,r=[],n=-1,o=1,s=0){if(e<0||e>255)throw new Error(`Axis bindingId must be between 0 and 255, got ${e}`);if(this.axes.has(e))throw new Error(`Axis bindingId ${e} is already defined`);if(this.axisNameToId.has(t)){let a=this.axisNameToId.get(t);throw new Error(`Axis name "${t}" is already defined with bindingId ${a}`)}let i={bindingId:e,name:t,min:n,max:o,defaultValue:s,sources:r};this.axes.set(e,i),this.axisNameToId.set(t,e),this.version++}defineButton(e,t,r=[],n=!1){if(e<0||e>255)throw new Error(`Button bindingId must be between 0 and 255, got ${e}`);if(this.buttons.has(e))throw new Error(`Button bindingId ${e} is already defined`);if(this.buttonNameToId.has(t)){let s=this.buttonNameToId.get(t);throw new Error(`Button name "${t}" is already defined with bindingId ${s}`)}let o={bindingId:e,name:t,defaultValue:n,sources:r};this.buttons.set(e,o),this.buttonNameToId.set(t,e),this.version++}evaluateAxis(e,t){let r=this.axes.get(e);if(!r)return 0;let n=0;for(let s of r.sources){let a=t.get(s.sourceId)??0,d=s.deadzone??0;Math.abs(a)<d?a=0:a=(a>0?1:-1)*((Math.abs(a)-d)/(1-d));let l=s.scale??1;a*=l;let c=s.sensitivity??1;a*=c,s.invert&&(a=-a),n+=a}return Math.max(r.min,Math.min(r.max,n))}evaluateButton(e,t){let r=this.buttons.get(e);if(!r)return!1;for(let n of r.sources)if(t.get(n.sourceId)??!1)return!0;return!1}toLoadPacket(){let e={type:"input-binding",version:this.version,axes:Array.from(this.axes.values()),buttons:Array.from(this.buttons.values())};return JSON.stringify(e)}toLoadPacketObject(){return{type:"input-binding",version:this.version,axes:Array.from(this.axes.values()),buttons:Array.from(this.buttons.values())}}getAxisBindingId(e){return this.axisNameToId.get(e)??null}getButtonBindingId(e){return this.buttonNameToId.get(e)??null}getAxisName(e){return this.axes.get(e)?.name??null}getButtonName(e){return this.buttons.get(e)?.name??null}getAxisBinding(e){return this.axes.get(e)??null}getButtonBinding(e){return this.buttons.get(e)??null}hasAxis(e){return this.axes.has(e)}hasButton(e){return this.buttons.has(e)}getAxisCount(){return this.axes.size}getButtonCount(){return this.buttons.size}getAllAxes(){return Array.from(this.axes.values())}getAllButtons(){return Array.from(this.buttons.values())}getVersion(){return this.version}removeAxis(e){let t=this.axes.get(e);return t?(this.axes.delete(e),this.axisNameToId.delete(t.name),this.version++,!0):!1}removeButton(e){let t=this.buttons.get(e);return t?(this.buttons.delete(e),this.buttonNameToId.delete(t.name),this.version++,!0):!1}clearAxes(){this.axes.clear(),this.axisNameToId.clear(),this.version++}clearButtons(){this.buttons.clear(),this.buttonNameToId.clear(),this.version++}clear(){this.axes.clear(),this.axisNameToId.clear(),this.buttons.clear(),this.buttonNameToId.clear(),this.version=1}toString(){let e=`InputBindingRegistry (version ${this.version})
`;return e+=`Axes (${this.axes.size}):
`,this.axes.forEach(t=>{e+=` [${t.bindingId}] ${t.name}: `,e+=`${t.min} to ${t.max} (default: ${t.defaultValue})
`}),e+=`Buttons (${this.buttons.size}):
`,this.buttons.forEach(t=>{e+=` [${t.bindingId}] ${t.name}: `,e+=`(default: ${t.defaultValue})
`}),e}};g(Re,"InputBindingRegistry");var H=Re;function he(x=0n){return{tick:x,axes:new Map,buttons:new Map,displayId:0,mouseX:0,mouseY:0,mouseOverDisplay:!1,textInputs:[]}}g(he,"createEmptyCompressedInputPacket");function me(x){let e=Math.max(-1,Math.min(1,x));return Math.round(e*127)}g(me,"encodeAxisToInt8");function xe(x){return x/127}g(xe,"decodeInt8ToAxis");function P(x){return x===0?0:Math.ceil(x/8)}g(P,"getButtonByteCount");function Ce(x,e){let r=x,n=P(e);return 8+r+n+4}g(Ce,"getCompressedPacketSize");function ge(x,e){let t=e.getAllAxes().length,r=e.getAllButtons().length,n=P(r),o=8+t+n+4;if(x.length<o)throw new Error(`Invalid compressed input packet: expected at least ${o} bytes (${t} axes + ${r} buttons), got ${x.length}`);let s=new DataView(x.buffer,x.byteOffset,x.byteLength),i=0,a=he();a.tick=s.getBigUint64(i,!0),i+=8;for(let l=0;l<t;l++){let c=x[i],u=c>127?c-256:c,p=xe(u);a.axes.set(l,p),i+=1}for(let l=0;l<n;l++){let c=x[i];for(let u=0;u<8;u++){let p=l*8+u;if(p<r){let h=(c&1<<u)!==0;a.buttons.set(p,h)}}i+=1}a.displayId=x[i],i+=1,a.mouseX=x[i],i+=1,a.mouseY=x[i],i+=1;let d=x[i];if(a.mouseOverDisplay=(d&1)!==0,i+=1,i<x.length){let l=x[i];i+=1;let c=new TextDecoder;a.textInputs=[];for(let u=0;u<l&&i<x.length;u++){let p=x[i];if(i+=1,i+p<=x.length){let h=x.slice(i,i+p),C=c.decode(h);a.textInputs.push(C),i+=p}}}return a}g(ge,"decodeCompressedInput");var de=require("@utsp/types");var Le=class Le{constructor(e,t){m(this,"enabled",!1);m(this,"currentStats",null);m(this,"_userId");m(this,"_userName");this._userId=e,this._userName=t}setEnabled(e){this.enabled=e,e||(this.currentStats=null)}isEnabled(){return this.enabled}get userId(){return this.currentStats?.userId??this._userId}get userName(){return this.currentStats?.userName??this._userName}get tick(){return this.currentStats?.tick??0}get timestamp(){return this.currentStats?.timestamp??0}get displayCount(){return this.currentStats?.displayCount??0}get totalDisplayArea(){return this.currentStats?.totalDisplayArea??0}get totalLayers(){return this.currentStats?.totalLayers??0}get visibleLayers(){return this.currentStats?.visibleLayers??0}get staticLayers(){return this.currentStats?.staticLayers??0}get dynamicLayers(){return this.currentStats?.dynamicLayers??0}get totalOrders(){return this.currentStats?.totalOrders??0}get ordersByLayer(){ret