@primitiv/client 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +285 -0
- package/README.md +34 -0
- package/dist/audio.cjs +1 -0
- package/dist/audio.d.ts +1 -0
- package/dist/audio.mjs +1 -0
- package/dist/core.cjs +4 -0
- package/dist/core.d.ts +1 -0
- package/dist/core.mjs +4 -0
- package/dist/index.cjs +204 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +204 -0
- package/dist/input.cjs +1 -0
- package/dist/input.d.ts +1 -0
- package/dist/input.mjs +1 -0
- package/dist/network.cjs +1 -0
- package/dist/network.d.ts +2 -0
- package/dist/network.mjs +1 -0
- package/dist/render.cjs +204 -0
- package/dist/render.d.ts +1 -0
- package/dist/render.mjs +204 -0
- package/dist/types.cjs +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.mjs +1 -0
- package/package.json +86 -0
package/dist/core.cjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";var ce=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ht=Object.prototype.hasOwnProperty;var ut=(e,t)=>{for(var r in t)ce(e,r,{get:t[r],enumerable:!0})},ct=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of dt(t))!ht.call(e,s)&&s!==r&&ce(e,s,{get:()=>t[s],enumerable:!(i=lt(t,s))||i.enumerable});return e};var ft=e=>ct(ce({},"__esModule",{value:!0}),e);var cr={};ut(cr,{COLOR_SKIP:()=>Rt,CellStruct:()=>Le,Display:()=>$e,DisplayCompositor:()=>sr,Engine:()=>ir,EngineStats:()=>it,EventEmitter:()=>ur,FontType:()=>Qe,Grid:()=>oe,ImageFont:()=>qe,ImageFontRegistry:()=>Je,InputBindingRegistry:()=>Ce,LAYER_SIZE:()=>Yt,Layer:()=>Ve,LayerRasterizer:()=>Xe,MacroRegistry:()=>et,OrderBuilder:()=>ar,OrderDecoder:()=>st,OrderEncoder:()=>rt,SoundRegistry:()=>_e,SpriteRegistry:()=>Ge,TickPacketDecoder:()=>hr,TickPacketEncoder:()=>Ue,UNICODE_TO_CP437:()=>Se,User:()=>He,UserUpdateBuilder:()=>Lt,UserUpdateParser:()=>Vt,cp437ToUnicode:()=>Gt,cp437ToUnicodeCodepoint:()=>We,decodeCompressedInput:()=>Ht,encodeCompressedInput:()=>$t,encodeCp437String:()=>jt,getAtlasColumns:()=>xe,getAtlasDimensions:()=>qt,getMaxCharCode:()=>je,hasCP437Mapping:()=>Qt,stringToCp437:()=>Wt,unicodeToCp437:()=>z});module.exports=ft(cr);var Me=class v{x;y;constructor(t=0,r=0){this.x=t,this.y=r}static zero(){return new v(0,0)}static one(){return new v(1,1)}static up(){return new v(0,-1)}static down(){return new v(0,1)}static left(){return new v(-1,0)}static right(){return new v(1,0)}add(t){return new v(this.x+t.x,this.y+t.y)}subtract(t){return new v(this.x-t.x,this.y-t.y)}multiply(t){return new v(this.x*t,this.y*t)}divide(t){if(t===0)throw new Error("Division by zero");return new v(this.x/t,this.y/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSquared(){return this.x*this.x+this.y*this.y}normalize(){let t=this.length();return t===0?v.zero():this.divide(t)}distance(t){return this.subtract(t).length()}distanceSquared(t){return this.subtract(t).lengthSquared()}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}angle(){return Math.atan2(this.y,this.x)}angleTo(t){return Math.atan2(t.y-this.y,t.x-this.x)}rotate(t){let r=Math.cos(t),i=Math.sin(t);return new v(this.x*r-this.y*i,this.x*i+this.y*r)}lerp(t,r){return new v(this.x+(t.x-this.x)*r,this.y+(t.y-this.y)*r)}clone(){return new v(this.x,this.y)}equals(t){return this.x===t.x&&this.y===t.y}toString(){return`Vector2(${this.x}, ${this.y})`}toArray(){return[this.x,this.y]}set(t,r){return this.x=t,this.y=r,this}copy(t){return this.x=t.x,this.y=t.y,this}addInPlace(t){return this.x+=t.x,this.y+=t.y,this}subtractInPlace(t){return this.x-=t.x,this.y-=t.y,this}multiplyInPlace(t){return this.x*=t,this.y*=t,this}divideInPlace(t){if(t===0)throw new Error("Division by zero");return this.x/=t,this.y/=t,this}normalizeInPlace(){let t=this.length();return t===0?(this.x=0,this.y=0):(this.x/=t,this.y/=t),this}};var gt=(e=>(e[e.Keyboard=0]="Keyboard",e[e.Mouse=1]="Mouse",e[e.Gamepad=2]="Gamepad",e[e.Touch=3]="Touch",e[e.TVRemote=4]="TVRemote",e[e.TextInput=5]="TextInput",e[e.Motion=6]="Motion",e[e.TouchZone=7]="TouchZone",e))(gt||{}),pt=(e=>(e[e.KeyA=0]="KeyA",e[e.KeyB=1]="KeyB",e[e.KeyC=2]="KeyC",e[e.KeyD=3]="KeyD",e[e.KeyE=4]="KeyE",e[e.KeyF=5]="KeyF",e[e.KeyG=6]="KeyG",e[e.KeyH=7]="KeyH",e[e.KeyI=8]="KeyI",e[e.KeyJ=9]="KeyJ",e[e.KeyK=10]="KeyK",e[e.KeyL=11]="KeyL",e[e.KeyM=12]="KeyM",e[e.KeyN=13]="KeyN",e[e.KeyO=14]="KeyO",e[e.KeyP=15]="KeyP",e[e.KeyQ=16]="KeyQ",e[e.KeyR=17]="KeyR",e[e.KeyS=18]="KeyS",e[e.KeyT=19]="KeyT",e[e.KeyU=20]="KeyU",e[e.KeyV=21]="KeyV",e[e.KeyW=22]="KeyW",e[e.KeyX=23]="KeyX",e[e.KeyY=24]="KeyY",e[e.KeyZ=25]="KeyZ",e[e.Digit0=26]="Digit0",e[e.Digit1=27]="Digit1",e[e.Digit2=28]="Digit2",e[e.Digit3=29]="Digit3",e[e.Digit4=30]="Digit4",e[e.Digit5=31]="Digit5",e[e.Digit6=32]="Digit6",e[e.Digit7=33]="Digit7",e[e.Digit8=34]="Digit8",e[e.Digit9=35]="Digit9",e[e.ArrowUp=36]="ArrowUp",e[e.ArrowDown=37]="ArrowDown",e[e.ArrowLeft=38]="ArrowLeft",e[e.ArrowRight=39]="ArrowRight",e[e.Space=40]="Space",e[e.Enter=41]="Enter",e[e.Escape=42]="Escape",e[e.Backspace=43]="Backspace",e[e.Tab=44]="Tab",e[e.ShiftLeft=45]="ShiftLeft",e[e.ShiftRight=46]="ShiftRight",e[e.ControlLeft=47]="ControlLeft",e[e.ControlRight=48]="ControlRight",e[e.AltLeft=49]="AltLeft",e[e.AltRight=50]="AltRight",e[e.MetaLeft=51]="MetaLeft",e[e.MetaRight=52]="MetaRight",e[e.CapsLock=53]="CapsLock",e[e.Delete=54]="Delete",e[e.Insert=55]="Insert",e[e.Home=56]="Home",e[e.End=57]="End",e[e.PageUp=58]="PageUp",e[e.PageDown=59]="PageDown",e[e.F1=60]="F1",e[e.F2=61]="F2",e[e.F3=62]="F3",e[e.F4=63]="F4",e[e.F5=64]="F5",e[e.F6=65]="F6",e[e.F7=66]="F7",e[e.F8=67]="F8",e[e.F9=68]="F9",e[e.F10=69]="F10",e[e.F11=70]="F11",e[e.F12=71]="F12",e[e.Minus=72]="Minus",e[e.Equal=73]="Equal",e[e.BracketLeft=74]="BracketLeft",e[e.BracketRight=75]="BracketRight",e[e.Backslash=76]="Backslash",e[e.Semicolon=77]="Semicolon",e[e.Quote=78]="Quote",e[e.Comma=79]="Comma",e[e.Period=80]="Period",e[e.Slash=81]="Slash",e[e.Backquote=82]="Backquote",e[e.Numpad0=91]="Numpad0",e[e.Numpad1=92]="Numpad1",e[e.Numpad2=93]="Numpad2",e[e.Numpad3=94]="Numpad3",e[e.Numpad4=95]="Numpad4",e[e.Numpad5=96]="Numpad5",e[e.Numpad6=97]="Numpad6",e[e.Numpad7=98]="Numpad7",e[e.Numpad8=99]="Numpad8",e[e.Numpad9=100]="Numpad9",e[e.NumpadAdd=101]="NumpadAdd",e[e.NumpadSubtract=102]="NumpadSubtract",e[e.NumpadMultiply=103]="NumpadMultiply",e[e.NumpadDivide=104]="NumpadDivide",e[e.NumpadDecimal=105]="NumpadDecimal",e[e.NumpadEnter=106]="NumpadEnter",e[e.NumLock=107]="NumLock",e[e.PrintScreen=111]="PrintScreen",e[e.ScrollLock=112]="ScrollLock",e[e.Pause=113]="Pause",e[e.ContextMenu=114]="ContextMenu",e))(pt||{});var yt=(e=>(e[e.LeftButton=0]="LeftButton",e[e.MiddleButton=1]="MiddleButton",e[e.RightButton=2]="RightButton",e[e.Button4=3]="Button4",e[e.Button5=4]="Button5",e[e.PositionX=100]="PositionX",e[e.PositionY=101]="PositionY",e[e.DeltaX=102]="DeltaX",e[e.DeltaY=103]="DeltaY",e[e.WheelDeltaY=104]="WheelDeltaY",e[e.WheelDeltaX=105]="WheelDeltaX",e))(yt||{});var wt=(e=>(e[e.ButtonA=0]="ButtonA",e[e.ButtonB=1]="ButtonB",e[e.ButtonX=2]="ButtonX",e[e.ButtonY=3]="ButtonY",e[e.LeftShoulder=4]="LeftShoulder",e[e.RightShoulder=5]="RightShoulder",e[e.LeftTrigger=6]="LeftTrigger",e[e.RightTrigger=7]="RightTrigger",e[e.Select=8]="Select",e[e.Start=9]="Start",e[e.LeftStick=10]="LeftStick",e[e.RightStick=11]="RightStick",e[e.DPadUp=12]="DPadUp",e[e.DPadDown=13]="DPadDown",e[e.DPadLeft=14]="DPadLeft",e[e.DPadRight=15]="DPadRight",e[e.Home=16]="Home",e[e.Touchpad=17]="Touchpad",e[e.LeftStickX=100]="LeftStickX",e[e.LeftStickY=101]="LeftStickY",e[e.RightStickX=102]="RightStickX",e[e.RightStickY=103]="RightStickY",e[e.LeftTriggerAxis=104]="LeftTriggerAxis",e[e.RightTriggerAxis=105]="RightTriggerAxis",e))(wt||{});var mt=(e=>(e[e.Touch0=0]="Touch0",e[e.Touch1=1]="Touch1",e[e.Touch2=2]="Touch2",e[e.Touch3=3]="Touch3",e[e.Touch4=4]="Touch4",e[e.Touch5=5]="Touch5",e[e.Touch6=6]="Touch6",e[e.Touch7=7]="Touch7",e[e.Touch8=8]="Touch8",e[e.Touch9=9]="Touch9",e[e.Touch0X=100]="Touch0X",e[e.Touch0Y=101]="Touch0Y",e[e.Touch1X=102]="Touch1X",e[e.Touch1Y=103]="Touch1Y",e[e.Touch2X=104]="Touch2X",e[e.Touch2Y=105]="Touch2Y",e[e.Touch3X=106]="Touch3X",e[e.Touch3Y=107]="Touch3Y",e[e.Touch4X=108]="Touch4X",e[e.Touch4Y=109]="Touch4Y",e[e.Touch5X=110]="Touch5X",e[e.Touch5Y=111]="Touch5Y",e[e.Touch6X=112]="Touch6X",e[e.Touch6Y=113]="Touch6Y",e[e.Touch7X=114]="Touch7X",e[e.Touch7Y=115]="Touch7Y",e[e.Touch8X=116]="Touch8X",e[e.Touch8Y=117]="Touch8Y",e[e.Touch9X=118]="Touch9X",e[e.Touch9Y=119]="Touch9Y",e[e.PinchScale=200]="PinchScale",e[e.RotationAngle=201]="RotationAngle",e[e.SwipeVelocityX=202]="SwipeVelocityX",e[e.SwipeVelocityY=203]="SwipeVelocityY",e))(mt||{});var bt=(e=>(e[e.Zone0=0]="Zone0",e[e.Zone1=1]="Zone1",e[e.Zone2=2]="Zone2",e[e.Zone3=3]="Zone3",e[e.Zone4=4]="Zone4",e[e.Zone5=5]="Zone5",e[e.Zone6=6]="Zone6",e[e.Zone7=7]="Zone7",e[e.Zone8=8]="Zone8",e[e.Zone9=9]="Zone9",e[e.Zone10=10]="Zone10",e[e.Zone11=11]="Zone11",e[e.Zone12=12]="Zone12",e[e.Zone13=13]="Zone13",e[e.Zone14=14]="Zone14",e[e.Zone15=15]="Zone15",e[e.Zone16=16]="Zone16",e[e.Zone17=17]="Zone17",e[e.Zone18=18]="Zone18",e[e.Zone19=19]="Zone19",e[e.Zone20=20]="Zone20",e[e.Zone21=21]="Zone21",e[e.Zone22=22]="Zone22",e[e.Zone23=23]="Zone23",e[e.Zone24=24]="Zone24",e[e.Zone25=25]="Zone25",e[e.Zone26=26]="Zone26",e[e.Zone27=27]="Zone27",e[e.Zone28=28]="Zone28",e[e.Zone29=29]="Zone29",e[e.Zone30=30]="Zone30",e[e.Zone31=31]="Zone31",e[e.Zone0X=100]="Zone0X",e[e.Zone0Y=101]="Zone0Y",e[e.Zone1X=102]="Zone1X",e[e.Zone1Y=103]="Zone1Y",e[e.Zone2X=104]="Zone2X",e[e.Zone2Y=105]="Zone2Y",e[e.Zone3X=106]="Zone3X",e[e.Zone3Y=107]="Zone3Y",e[e.Zone4X=108]="Zone4X",e[e.Zone4Y=109]="Zone4Y",e[e.Zone5X=110]="Zone5X",e[e.Zone5Y=111]="Zone5Y",e[e.Zone6X=112]="Zone6X",e[e.Zone6Y=113]="Zone6Y",e[e.Zone7X=114]="Zone7X",e[e.Zone7Y=115]="Zone7Y",e[e.Zone8X=116]="Zone8X",e[e.Zone8Y=117]="Zone8Y",e[e.Zone9X=118]="Zone9X",e[e.Zone9Y=119]="Zone9Y",e[e.Zone10X=120]="Zone10X",e[e.Zone10Y=121]="Zone10Y",e[e.Zone11X=122]="Zone11X",e[e.Zone11Y=123]="Zone11Y",e[e.Zone12X=124]="Zone12X",e[e.Zone12Y=125]="Zone12Y",e[e.Zone13X=126]="Zone13X",e[e.Zone13Y=127]="Zone13Y",e[e.Zone14X=128]="Zone14X",e[e.Zone14Y=129]="Zone14Y",e[e.Zone15X=130]="Zone15X",e[e.Zone15Y=131]="Zone15Y",e[e.Zone16X=132]="Zone16X",e[e.Zone16Y=133]="Zone16Y",e[e.Zone17X=134]="Zone17X",e[e.Zone17Y=135]="Zone17Y",e[e.Zone18X=136]="Zone18X",e[e.Zone18Y=137]="Zone18Y",e[e.Zone19X=138]="Zone19X",e[e.Zone19Y=139]="Zone19Y",e[e.Zone20X=140]="Zone20X",e[e.Zone20Y=141]="Zone20Y",e[e.Zone21X=142]="Zone21X",e[e.Zone21Y=143]="Zone21Y",e[e.Zone22X=144]="Zone22X",e[e.Zone22Y=145]="Zone22Y",e[e.Zone23X=146]="Zone23X",e[e.Zone23Y=147]="Zone23Y",e[e.Zone24X=148]="Zone24X",e[e.Zone24Y=149]="Zone24Y",e[e.Zone25X=150]="Zone25X",e[e.Zone25Y=151]="Zone25Y",e[e.Zone26X=152]="Zone26X",e[e.Zone26Y=153]="Zone26Y",e[e.Zone27X=154]="Zone27X",e[e.Zone27Y=155]="Zone27Y",e[e.Zone28X=156]="Zone28X",e[e.Zone28Y=157]="Zone28Y",e[e.Zone29X=158]="Zone29X",e[e.Zone29Y=159]="Zone29Y",e[e.Zone30X=160]="Zone30X",e[e.Zone30Y=161]="Zone30Y",e[e.Zone31X=162]="Zone31X",e[e.Zone31Y=163]="Zone31Y",e))(bt||{});var Ut=(e=>(e[e.DPadUp=0]="DPadUp",e[e.DPadDown=1]="DPadDown",e[e.DPadLeft=2]="DPadLeft",e[e.DPadRight=3]="DPadRight",e[e.DPadCenter=4]="DPadCenter",e[e.Play=5]="Play",e[e.Pause=6]="Pause",e[e.PlayPause=7]="PlayPause",e[e.Stop=8]="Stop",e[e.Rewind=9]="Rewind",e[e.FastForward=10]="FastForward",e[e.Previous=11]="Previous",e[e.Next=12]="Next",e[e.Record=13]="Record",e[e.VolumeUp=15]="VolumeUp",e[e.VolumeDown=16]="VolumeDown",e[e.Mute=17]="Mute",e[e.ChannelUp=18]="ChannelUp",e[e.ChannelDown=19]="ChannelDown",e[e.Back=20]="Back",e[e.Home=21]="Home",e[e.Menu=22]="Menu",e[e.Info=23]="Info",e[e.Guide=24]="Guide",e[e.Exit=25]="Exit",e[e.Red=30]="Red",e[e.Green=31]="Green",e[e.Yellow=32]="Yellow",e[e.Blue=33]="Blue",e[e.Digit0=40]="Digit0",e[e.Digit1=41]="Digit1",e[e.Digit2=42]="Digit2",e[e.Digit3=43]="Digit3",e[e.Digit4=44]="Digit4",e[e.Digit5=45]="Digit5",e[e.Digit6=46]="Digit6",e[e.Digit7=47]="Digit7",e[e.Digit8=48]="Digit8",e[e.Digit9=49]="Digit9",e[e.Input=50]="Input",e[e.Settings=51]="Settings",e[e.Subtitle=52]="Subtitle",e[e.Audio=53]="Audio",e[e.Power=54]="Power",e[e.PointerX=100]="PointerX",e[e.PointerY=101]="PointerY",e[e.GyroX=102]="GyroX",e[e.GyroY=103]="GyroY",e[e.GyroZ=104]="GyroZ",e))(Ut||{});function Ie(){return{axes:new Map,buttons:new Map,displayId:0,mouseX:0,mouseY:0,mouseOverDisplay:!1,isTabHidden:!1,textInputs:[],displayViewports:[],touchPositions:[]}}function ke(e){return Math.round(Math.max(-1,Math.min(1,e))*127)}function ve(e){return Math.max(-1,Math.min(1,e/127))}function fe(e){return Math.ceil(e/8)}var Ct=(e=>(e.TerminalGL="webgl",e.Terminal2D="terminal2d",e.TerminalANSI="ansi",e))(Ct||{}),ge=(e=>(e[e.None=0]="None",e[e.Eighth=1]="Eighth",e[e.Quarter=2]="Quarter",e[e.Half=3]="Half",e[e.Integer=4]="Integer",e[e.Responsive=5]="Responsive",e))(ge||{});var u=(e=>(e[e.Char=1]="Char",e[e.Text=2]="Text",e[e.SubFrame=3]="SubFrame",e[e.SubFrameMulti=4]="SubFrameMulti",e[e.FullFrame=5]="FullFrame",e[e.FullFrameMulti=6]="FullFrameMulti",e[e.Sprite=7]="Sprite",e[e.SpriteMulti=8]="SpriteMulti",e[e.ColorMap=9]="ColorMap",e[e.Shape=10]="Shape",e[e.DotCloud=11]="DotCloud",e[e.DotCloudMulti=12]="DotCloudMulti",e[e.SpriteCloud=13]="SpriteCloud",e[e.SpriteCloudMulti=14]="SpriteCloudMulti",e[e.SpriteCloudVaried=15]="SpriteCloudVaried",e[e.SpriteCloudVariedMulti=16]="SpriteCloudVariedMulti",e[e.Bitmask=17]="Bitmask",e[e.Bitmask4=18]="Bitmask4",e[e.Fill=19]="Fill",e[e.FillChar=20]="FillChar",e[e.FillSprite=21]="FillSprite",e[e.FillSpriteMulti=22]="FillSpriteMulti",e[e.TextMultiline=23]="TextMultiline",e[e.Bitmask16=24]="Bitmask16",e[e.Polyline=25]="Polyline",e[e.Audio=32]="Audio",e[e.Vibration=33]="Vibration",e[e.PostProcess=34]="PostProcess",e))(u||{}),U=(e=>(e[e.Rectangle=1]="Rectangle",e[e.Circle=2]="Circle",e[e.Line=3]="Line",e[e.Ellipse=4]="Ellipse",e[e.Triangle=5]="Triangle",e))(U||{}),St=(e=>(e[e.FastPath=255]="FastPath",e[e.Fragment=254]="Fragment",e))(St||{});var xt=(e=>(e[e.Enabled=1]="Enabled",e[e.SetMode=2]="SetMode",e[e.Position=4]="Position",e[e.ZOrder=8]="ZOrder",e[e.Orders=16]="Orders",e[e.IsMacroLayer=32]="IsMacroLayer",e[e.Is16BitMode=64]="Is16BitMode",e))(xt||{}),Mt=(e=>(e.WAITING_FOR_WELCOME="waiting_for_welcome",e.AUTHENTICATING="authenticating",e.LOADING="loading",e.ACTIVE="active",e.DISCONNECTED="disconnected",e))(Mt||{});var ee={trace:0,debug:1,info:2,warn:3,error:4,silent:5},O=[],ye="info",re=new Map,N=new Map,It=typeof performance<"u"&&typeof performance.now=="function"?()=>performance.now():()=>Date.now(),te=null;function Ee(e){let t=null,r=-1;for(let[i,s]of re)if(kt(i,e)){let a=i.length;a>r&&(r=a,t=s)}return t??ye}function kt(e,t){if(e==="*")return!0;if(e.endsWith(":*")){let r=e.slice(0,-1);return t===e.slice(0,-2)||t.startsWith(r)}return e===t}function Be(){for(let[e,t]of N)t.c(Ee(e))}var Y=class G{namespace;r;i;s;constructor(t,r,i){this.namespace=t,this.i=r,this.s=i,this.r=ee[Ee(t)]}static create(t){let r=N.get(t);return r||(r=new G(t),N.set(t,r)),r}child(t){return G.create(`${this.namespace}:${t}`)}forClient(t,r){let i=`${this.namespace}:client:${t}`,s=N.get(i);return s?(s.i=t,s.s=r):(s=new G(i,t,r),N.set(i,s)),s}static dispose(t){N.delete(t)}trace(t,r){this.n("trace",t,r)}debug(t,r){this.n("debug",t,r)}info(t,r){this.n("info",t,r)}warn(t,r){this.n("warn",t,r)}error(t,r){this.n("error",t,r)}isEnabled(t){return ee[t]>=this.r}c(t){this.r=ee[t]}n(t,r,i){if(ee[t]<this.r||O.length===0)return;let s=typeof r=="function"?r():r,a={timestamp:It(),level:t,namespace:this.namespace,message:s};te!==null&&(a.tick=te()),i!==void 0&&(a.data=i),this.i!==void 0&&(a.clientId=this.i),this.s!==void 0&&(a.username=this.s);for(let o=0;o<O.length;o++)O[o](a)}static setLevel(t,r){r===void 0?ye=t:re.set(t,r),Be()}static clearLevelOverrides(){re.clear(),Be()}static enable(t){G.setLevel(t,"trace")}static disable(t){G.setLevel(t,"silent")}static addHandler(t){return O.push(t),()=>{let r=O.indexOf(t);r!==-1&&O.splice(r,1)}}static clearHandlers(){O.length=0}static get handlerCount(){return O.length}static setTickProvider(t){te=t}static reset(){O.length=0,re.clear(),N.clear(),ye="info",te=null}},q="\x1B[0m",vt={trace:"\x1B[90m",debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},Bt="\x1B[35m",Te="\x1B[2m",Tt="\x1B[93m",Ft={trace:"color:#888",debug:"color:#0cc",info:"color:#0a0",warn:"color:#cc0",error:"color:#c00;font-weight:bold"},Et="color:#c0c;font-weight:bold",Fe="color:#888",At="color:#c90;font-weight:bold",Ae={trace:"debug",debug:"debug",info:"info",warn:"warn",error:"error"},Zt=typeof globalThis<"u"&&typeof globalThis.process=="object"&&typeof globalThis.process?.versions=="object";function pe(e,t){return String(e).padStart(t,"0")}function Ze(e){let t=Math.floor(e/1e3)%60,r=Math.floor(e/6e4)%60,i=Math.floor(e%1e3);return`${pe(r,2)}:${pe(t,2)}.${pe(i,3)}`}function De(e){return e.toUpperCase().padEnd(5)}function Pe(e){if(e.clientId===void 0)return"";let t=e.username?`/${e.username}`:"";return` [client:${e.clientId}${t}]`}function Dt(e){let t=`${Te}${Ze(e.timestamp)}${q}`,r=e.tick!==void 0?` ${Tt}#${e.tick}${q}`:"",i=`${vt[e.level]}${De(e.level)}${q}`,s=`${Bt}${e.namespace}${q}`,a=e.clientId!==void 0?`${Te}${Pe(e)}${q}`:"",o=Ae[e.level],l=`${t}${r} ${i} ${s}${a}`;e.data!==void 0?console[o](l,e.message,e.data):console[o](l,e.message)}function Pt(e){let t=Ae[e.level],r=Pe(e),i=e.tick!==void 0?` %c#${e.tick}`:"",s=e.tick!==void 0?[At]:[],a=`%c${Ze(e.timestamp)}${i} %c${De(e.level)} %c${e.namespace}%c${r} %c${e.message}`,o=[Fe,...s,Ft[e.level],Et,Fe,""];e.data!==void 0?console[t](a,...o,e.data):console[t](a,...o)}var Ot=Zt?Dt:Pt;Y.handlerCount===0&&Y.addHandler(Ot);var Rt=255,Yt=256,oe=class ze{width;height;size;data;constructor(t,r){this.width=t,this.height=r,this.size=t*r,this.data=new Uint32Array(this.size)}clear(){this.data.fill(255<<24|255<<16|0)}fill(t,r,i){let s=i<<24|r<<16|t;this.data.fill(s)}setSafe(t,r,i,s,a){t<0||t>=this.width||r<0||r>=this.height||(this.data[r*this.width+t]=a<<24|s<<16|i)}set(t,r,i,s){this.data[t]=s<<24|i<<16|r}setPacked(t,r){this.data[t]=r}get(t){return this.data[t]}unpack(t){let r=this.data[t];return{char:r&65535,fg:r>>>16&255,bg:r>>>24&255}}clone(){let t=new ze(this.width,this.height);return t.data.set(this.data),t}},Le=class{static pack(e,t,r){return r<<24|t<<16|e}static getChar(e){return e&65535}static getFg(e){return e>>>16&255}static getBg(e){return e>>>24&255}},Xe=class{rasterize(e,t,r){for(let i of t)this.executeOrder(e,i,r)}executeOrder(e,t,r){switch(t.type){case u.Char:this.drawChar(e,t);break;case u.Text:this.drawText(e,t);break;case u.TextMultiline:this.drawTextMultiline(e,t);break;case u.SubFrame:this.drawSubFrame(e,t);break;case u.SubFrameMulti:this.drawSubFrameMulti(e,t);break;case u.FullFrame:this.drawFullFrame(e,t);break;case u.FullFrameMulti:this.drawFullFrameMulti(e,t);break;case u.ColorMap:this.drawColorMap(e,t);break;case u.DotCloud:this.drawDotCloud(e,t);break;case u.DotCloudMulti:this.drawDotCloudMulti(e,t);break;case u.SpriteCloud:this.drawSpriteCloud(e,t,r);break;case u.SpriteCloudMulti:this.drawSpriteCloudMulti(e,t,r);break;case u.SpriteCloudVaried:this.drawSpriteCloudVaried(e,t,r);break;case u.SpriteCloudVariedMulti:this.drawSpriteCloudVariedMulti(e,t,r);break;case u.Bitmask:this.drawBitmask(e,t);break;case u.Bitmask4:this.drawBitmask4(e,t);break;case u.Bitmask16:this.drawBitmask16(e,t);break;case u.Polyline:this.drawPolyline(e,t);break;case u.Fill:this.drawFill(e,t);break;case u.FillChar:this.drawFillChar(e,t);break;case u.FillSprite:this.drawFillSprite(e,t,r);break;case u.FillSpriteMulti:this.drawFillSpriteMulti(e,t,r);break;case u.Sprite:this.drawSprite(e,t,r);break;case u.SpriteMulti:this.drawSpriteMulti(e,t,r);break;case u.Shape:this.drawShape(e,t);break}}drawChar(e,t){let{x:r,y:i,char:s,fg:a,bg:o}=t;e.setSafe(r,i,s,a,o)}drawText(e,t){let{x:r,y:i,text:s,fg:a,bg:o}=t;if(typeof s=="string")for(let l=0;l<s.length;l++){let n=s.charCodeAt(l);e.setSafe(r+l,i,n,a,o)}}drawTextMultiline(e,t){let{x:r,y:i,text:s,fg:a,bg:o}=t;if(typeof s!="string")return;let l=s.split(`
|
|
2
|
+
`);for(let n=0;n<l.length;n++){let d=l[n];for(let h=0;h<d.length;h++){let c=d.charCodeAt(h);e.setSafe(r+h,i+n,c,a,o)}}}drawSubFrame(e,t){let{x:r,y:i,width:s,height:a,frame:o,fg:l,bg:n}=t;for(let d=0;d<a;d++)for(let h=0;h<s;h++){let c=d*s+h;c<o.length&&e.setSafe(r+h,i+d,o[c],l,n)}}drawSubFrameMulti(e,t){let{x:r,y:i,width:s,height:a,frame:o}=t;for(let l=0;l<a;l++)for(let n=0;n<s;n++){let d=l*s+n;if(d<o.length){let h=o[d];e.setSafe(r+n,i+l,h.char,h.fg,h.bg)}}}drawFullFrame(e,t){let{frame:r,fg:i,bg:s}=t,a=e.width,o=e.height,l=0;for(let n=0;n<o;n++)for(let d=0;d<a;d++){if(l>=r.length)return;e.setSafe(d,n,r[l],i,s),l++}}drawFullFrameMulti(e,t){let{frame:r}=t,i=e.width,s=e.height,a=0;for(let o=0;o<s;o++)for(let l=0;l<i;l++){if(a>=r.length)return;let n=r[a];e.setSafe(l,o,n.char,n.fg,n.bg),a++}}drawColorMap(e,t){let{x:r,y:i,width:s,height:a,data:o}=t;for(let l=0;l<a;l++)for(let n=0;n<s;n++){let d=l*s+n;if(d<o.length){let h=o[d];if(r+n>=0&&r+n<e.width&&i+l>=0&&i+l<e.height){let c=(i+l)*e.width+(r+n),f=e.data[c]&65535;e.data[c]=h.bg<<24|h.fg<<16|f}}}}drawFill(e,t){let{char:r,fg:i,bg:s,x:a,y:o,width:l,height:n}=t,d=a??0,h=o??0,c=l??e.width,f=n??e.height;if(d===0&&h===0&&c===e.width&&f===e.height){let g=s<<24|i<<16|r&65535;e.data.fill(g);return}for(let g=h;g<h+f;g++)for(let p=d;p<d+c;p++)e.setSafe(p,g,r,i,s)}drawFillChar(e,t){let{patternWidth:r,patternHeight:i,pattern:s,fg:a,bg:o}=t;if(!(r<=0||i<=0))for(let l=0;l<e.height;l++)for(let n=0;n<e.width;n++){let d=n%r,h=l%i,c=s[h*r+d];e.setSafe(n,l,c,a,o)}}drawFillSprite(e,t,r){if(!r)return;let i=r.getUnicolorSprite(t.spriteId);if(i)for(let s=0;s<e.height;s+=i.height)for(let a=0;a<e.width;a+=i.width)for(let o=0;o<i.height;o++)for(let l=0;l<i.width;l++){let n=i.data[o*i.width+l];e.setSafe(a+l,s+o,n,t.fg,t.bg)}}drawFillSpriteMulti(e,t,r){if(!r)return;let i=r.getMulticolorSprite(t.spriteId);if(i)for(let s=0;s<e.height;s+=i.height)for(let a=0;a<e.width;a+=i.width)for(let o=0;o<i.height;o++)for(let l=0;l<i.width;l++){let n=i.data[o*i.width+l],d=a+l,h=s+o;d>=0&&d<e.width&&h>=0&&h<e.height&&(e.data[h*e.width+d]=n)}}drawSprite(e,t,r){if(!r)return;let{x:i,y:s,spriteId:a,fg:o,bg:l}=t,n=r.getUnicolorSprite(a);if(n)for(let d=0;d<n.height;d++)for(let h=0;h<n.width;h++){let c=n.data[d*n.width+h];e.setSafe(i+h,s+d,c,o,l)}}drawSpriteMulti(e,t,r){if(!r)return;let{x:i,y:s,spriteId:a}=t,o=r.getMulticolorSprite(a);if(o)for(let l=0;l<o.height;l++)for(let n=0;n<o.width;n++){let d=o.data[l*o.width+n],h=i+n,c=s+l;h>=0&&h<e.width&&c>=0&&c<e.height&&(e.data[c*e.width+h]=d)}}drawDotCloud(e,t){let{positions:r,char:i,fg:s,bg:a}=t;for(let o of r)e.setSafe(o.x,o.y,i,s,a)}drawDotCloudMulti(e,t){for(let r of t.dots)e.setSafe(r.x,r.y,r.char,r.fg,r.bg)}drawSpriteCloud(e,t,r){if(!r)return;let i=r.getUnicolorSprite(t.spriteId);if(i)for(let s of t.positions)for(let a=0;a<i.height;a++)for(let o=0;o<i.width;o++){let l=i.data[a*i.width+o];e.setSafe(s.x+o,s.y+a,l,t.fg,t.bg)}}drawSpriteCloudMulti(e,t,r){if(!r)return;let i=r.getMulticolorSprite(t.spriteId);if(i)for(let s of t.positions)for(let a=0;a<i.height;a++)for(let o=0;o<i.width;o++){let l=i.data[a*i.width+o],n=s.x+o,d=s.y+a;n>=0&&n<e.width&&d>=0&&d<e.height&&(e.data[d*e.width+n]=l)}}drawSpriteCloudVaried(e,t,r){if(r)for(let i of t.sprites){let s=r.getUnicolorSprite(i.spriteId);if(s)for(let a=0;a<s.height;a++)for(let o=0;o<s.width;o++){let l=s.data[a*s.width+o];e.setSafe(i.x+o,i.y+a,l,i.fg,i.bg)}}}drawSpriteCloudVariedMulti(e,t,r){if(r)for(let i of t.sprites){let s=r.getMulticolorSprite(i.spriteId);if(s)for(let a=0;a<s.height;a++)for(let o=0;o<s.width;o++){let l=s.data[a*s.width+o],n=i.x+o,d=i.y+a;n>=0&&n<e.width&&d>=0&&d<e.height&&(e.data[d*e.width+n]=l)}}}drawBitmask(e,t){let{x:r,y:i,width:s,height:a,mask:o,char:l,fg:n,bg:d,override:h}=t;for(let c=0;c<a;c++)for(let f=0;f<s;f++){let g=c*s+f,p=g>>3,w=g&7;o[p]&1<<w?e.setSafe(r+f,i+c,l,n,d):h&&e.setSafe(r+f,i+c,0,255,255)}}drawBitmask4(e,t){let{x:r,y:i,width:s,height:a,mask:o,variants:l,override:n}=t;for(let d=0;d<a;d++)for(let h=0;h<s;h++){let c=d*s+h,f=c>>2,g=(c&3)*2,p=o[f]>>g&3;if(p>0){let w=l[p-1];w&&e.setSafe(r+h,i+d,w.char,w.fg,w.bg)}else n&&e.setSafe(r+h,i+d,0,255,255)}}drawBitmask16(e,t){let{x:r,y:i,width:s,height:a,mask:o,variants:l,override:n}=t;for(let d=0;d<a;d++)for(let h=0;h<s;h++){let c=d*s+h,f=c>>1,g=(c&1)*4,p=o[f]>>g&15;if(p>0){let w=l[p-1];w&&e.setSafe(r+h,i+d,w.char,w.fg,w.bg)}else n&&e.setSafe(r+h,i+d,0,255,255)}}drawPolyline(e,t){let{points:r,char:i,fg:s,bg:a}=t;if(!(r.length<2))for(let o=0;o<r.length-1;o++){let l=r[o],n=r[o+1];this.drawLineBresenham(e,l.x,l.y,n.x,n.y,i,s,a)}}drawLineBresenham(e,t,r,i,s,a,o,l){let n=Math.abs(i-t),d=Math.abs(s-r),h=t<i?1:-1,c=r<s?1:-1,f=n-d;for(;e.setSafe(t,r,a,o,l),!(t===i&&r===s);){let g=2*f;g>-d&&(f-=d,t+=h),g<n&&(f+=n,r+=c)}}drawShape(e,t){switch(t.shapeType){case U.Rectangle:this.drawRectangle(e,t);break;case U.Circle:this.drawCircle(e,t);break;case U.Line:t.x1!==void 0&&t.y1!==void 0&&t.x2!==void 0&&t.y2!==void 0&&this.drawLineBresenham(e,t.x1,t.y1,t.x2,t.y2,t.char,t.fg,t.bg);break;case U.Ellipse:this.drawEllipse(e,t);break;case U.Triangle:this.drawTriangle(e,t);break}}drawRectangle(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x??0,l=t.y??0,n=t.width??0,d=t.height??0;if(a)for(let h=l;h<l+d;h++)for(let c=o;c<o+n;c++)e.setSafe(c,h,r,i,s);else{for(let h=o;h<o+n;h++)e.setSafe(h,l,r,i,s),e.setSafe(h,l+d-1,r,i,s);for(let h=l+1;h<l+d-1;h++)e.setSafe(o,h,r,i,s),e.setSafe(o+n-1,h,r,i,s)}}drawCircle(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x??0,l=t.y??0,n=t.radius??0;if(n<=0)return;let d=n,h=0,c=0;for(;d>=h;){if(a){for(let f=o-d;f<=o+d;f++)e.setSafe(f,l+h,r,i,s);for(let f=o-d;f<=o+d;f++)e.setSafe(f,l-h,r,i,s);for(let f=o-h;f<=o+h;f++)e.setSafe(f,l+d,r,i,s);for(let f=o-h;f<=o+h;f++)e.setSafe(f,l-d,r,i,s)}else e.setSafe(o+d,l+h,r,i,s),e.setSafe(o+h,l+d,r,i,s),e.setSafe(o-h,l+d,r,i,s),e.setSafe(o-d,l+h,r,i,s),e.setSafe(o-d,l-h,r,i,s),e.setSafe(o-h,l-d,r,i,s),e.setSafe(o+h,l-d,r,i,s),e.setSafe(o+d,l-h,r,i,s);c<=0&&(h+=1,c+=2*h+1),c>0&&(d-=1,c-=2*d+1)}}drawEllipse(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x??0,l=t.y??0,n=t.radiusX??t.radius??0,d=t.radiusY??t.radius??0;if(n<=0||d<=0)return;let h=0,c=d,f=d*d-n*n*d+.25*n*n,g=2*d*d*h,p=2*n*n*c;for(;g<p;){if(a)for(let m=o-h;m<=o+h;m++)e.setSafe(m,l+c,r,i,s),e.setSafe(m,l-c,r,i,s);else e.setSafe(o+h,l+c,r,i,s),e.setSafe(o-h,l+c,r,i,s),e.setSafe(o+h,l-c,r,i,s),e.setSafe(o-h,l-c,r,i,s);f<0?(h++,g+=2*d*d,f+=g+d*d):(h++,c--,g+=2*d*d,p-=2*n*n,f+=g-p+d*d)}let w=d*d*((h+.5)*(h+.5))+n*n*((c-1)*(c-1))-n*n*d*d;for(;c>=0;){if(a)for(let m=o-h;m<=o+h;m++)e.setSafe(m,l+c,r,i,s),e.setSafe(m,l-c,r,i,s);else e.setSafe(o+h,l+c,r,i,s),e.setSafe(o-h,l+c,r,i,s),e.setSafe(o+h,l-c,r,i,s),e.setSafe(o-h,l-c,r,i,s);w>0?(c--,p-=2*n*n,w+=n*n-p):(c--,h++,g+=2*d*d,p-=2*n*n,w+=g-p+n*n)}}drawTriangle(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x1??0,l=t.y1??0,n=t.x2??0,d=t.y2??0,h=t.x3??0,c=t.y3??0;if(!a){this.drawLineBresenham(e,o,l,n,d,r,i,s),this.drawLineBresenham(e,n,d,h,c,r,i,s),this.drawLineBresenham(e,h,c,o,l,r,i,s);return}let f=o,g=l,p=n,w=d,m=h,k=c;if(g>w){let x=f;f=p,p=x,x=g,g=w,w=x}if(g>k){let x=f;f=m,m=x,x=g,g=k,k=x}if(w>k){let x=p;p=m,m=x,x=w,w=k,k=x}let Z=k-g;if(Z!==0)for(let x=0;x<Z;x++){let D=x>w-g||w===g,L=D?k-w:w-g,X=x/Z,R=(x-(D?w-g:0))/L,E=Math.floor(f+(m-f)*X),B;if(D?B=Math.floor(p+(m-p)*R):B=Math.floor(f+(p-f)*R),E>B){let V=E;E=B,B=V}for(let V=E;V<=B;V++)e.setSafe(V,g+x,r,i,s)}}},Ve=class Ne{id=0;grid;x=0;y=0;origin;zIndex=0;visible=!0;opacity=1;name;isMacroLayer;width;height;mustBeReliable=!1;spriteRegistry;charCodeMode;is16bit;pendingOrders=[];enabled=!0;needsCommit=!1;static rasterizer=new Xe;constructor(t,r,i,s,a){i<1||i>256||s<1||s>256;let o={};typeof a=="boolean"?o={mustBeReliable:a}:a&&(o=a),this.origin=t,this.x=t.x,this.y=t.y,this.zIndex=r,this.name=o.name,this.width=i,this.height=s,this.mustBeReliable=o.mustBeReliable??!1,this.isMacroLayer=o.isMacroLayer??!1,this.charCodeMode=o.charCodeMode??"8bit",this.is16bit=this.charCodeMode==="16bit",this.grid=new oe(i,s),this.grid.clear()}setId(t){this.id=t}setSpriteRegistry(t){this.spriteRegistry=t}resize(t,r){this.grid=new oe(t,r),this.width=t,this.height=r}getMustBeReliable(){return this.mustBeReliable}getName(){return this.name}getIsMacroLayer(){return this.isMacroLayer}getWidth(){return this.width}getHeight(){return this.height}getOrigin(){return this.origin}setOrders(t){this.pendingOrders=t,this.grid.clear(),Ne.rasterizer.rasterize(this.grid,t,this.spriteRegistry),this.needsCommit=!0}getPendingOrders(){return this.pendingOrders}clearPendingOrders(){this.pendingOrders.length=0}commit(){this.needsCommit=!0}getNeedsCommit(){return this.needsCommit}clearCommit(){this.needsCommit=!1}isEnabled(){return this.enabled}},$e=class{id;x=0;y=0;width;height;cellWidth=8;cellHeight=8;postProcess={};scalingMode=ge.None;activePaletteSlot=0;renderPasses;constructor(e,t,r){this.id=e,this.width=t,this.height=r}teleport(e,t){this.x=e,this.y=t}resize(e,t){this.width=e,this.height=t}setCellSize(e,t){this.cellWidth=Math.max(1,Math.min(255,Math.round(e))),this.cellHeight=Math.max(1,Math.min(255,Math.round(t)))}getCellSize(){return{cellWidth:this.cellWidth,cellHeight:this.cellHeight}}setScalingMode(e){this.scalingMode=e}setAmbientEffect(e){this.postProcess.ambientEffect||(this.postProcess.ambientEffect={enabled:!1,blur:30,scale:1.3}),typeof e=="boolean"?this.postProcess.ambientEffect.enabled=e:this.postProcess.ambientEffect={...this.postProcess.ambientEffect,...e,enabled:!0}}setPostProcess(e){if(e===null){this.postProcess={};return}this.postProcess={...this.postProcess,...e}}setOrigin(e){this.x=e.x,this.y=e.y}switchPalette(e){this.activePaletteSlot=e}setRenderPasses(e){if(!e||e.length===0){this.renderPasses=void 0;return}if(e.length>4)throw new Error(`Display.setRenderPasses: max 4 passes, got ${e.length}`);this.renderPasses=e.map(t=>this.normalizePass(t))}getRenderPasses(){return this.renderPasses}normalizePass(e){let t=Math.max(0,Math.min(255,e.zMin)),r=Math.max(0,Math.min(255,e.zMax));if(t>r){let i=t;t=r,r=i}return{id:e.id,zMin:t,zMax:r,enabled:e.enabled!==!1}}},Ce=class{axes=new Map;buttons=new Map;touchZones=new Map;axisNameToId=new Map;buttonNameToId=new Map;touchZoneNameToId=new Map;version=1;n=null;s=null;o=null;defineAxis(e,t,r=[],i=-1,s=1,a=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))throw new Error(`Axis name "${t}" is already defined`);let o={bindingId:e,name:t,min:i,max:s,defaultValue:a,sources:r};this.axes.set(e,o),this.axisNameToId.set(t,e),this.n=null,this.version++}defineButton(e,t,r=[],i=!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))throw new Error(`Button name "${t}" is already defined`);let s={bindingId:e,name:t,defaultValue:i,sources:r};this.buttons.set(e,s),this.buttonNameToId.set(t,e),this.s=null,this.version++}defineTouchZone(e,t,r,i,s,a){if(e<0||e>31)throw new Error(`Touch zone zoneId must be between 0 and 31, got ${e}`);if(this.touchZones.has(e))throw new Error(`Touch zone zoneId ${e} is already defined`);if(this.touchZoneNameToId.has(t))throw new Error(`Touch zone name "${t}" is already defined`);let o={zoneId:e,name:t,x:r,y:i,width:s,height:a};this.touchZones.set(e,o),this.touchZoneNameToId.set(t,e),this.o=null,this.version++}evaluateAxis(e,t){let r=this.axes.get(e);if(!r)return 0;let i=0;for(let s of r.sources){let a=t.get(s.sourceId)??0,o=s.deadzone??0;Math.abs(a)<o?a=0:a=(a>0?1:-1)*((Math.abs(a)-o)/(1-o)),a*=(s.scale??1)*(s.sensitivity??1),s.invert&&(a=-a),i+=a}return Math.max(r.min,Math.min(r.max,i))}evaluateButton(e,t){let r=this.buttons.get(e);if(!r)return!1;for(let i of r.sources)if(t.get(i.sourceId)===!0)return!0;return r.defaultValue}toLoadPacket(){return{type:"input-binding",version:this.version,axes:Array.from(this.axes.values()),buttons:Array.from(this.buttons.values()),touchZones:this.touchZones.size>0?Array.from(this.touchZones.values()):void 0}}getAllAxes(){return this.n||(this.n=Array.from(this.axes.values()).sort((e,t)=>e.bindingId-t.bindingId)),this.n}getAllButtons(){return this.s||(this.s=Array.from(this.buttons.values()).sort((e,t)=>e.bindingId-t.bindingId)),this.s}getAllTouchZones(){return this.o||(this.o=Array.from(this.touchZones.values()).sort((e,t)=>e.zoneId-t.zoneId)),this.o}getAxisCount(){return this.axes.size}getButtonCount(){return this.buttons.size}getAxisId(e){return this.axisNameToId.get(e)??null}getButtonId(e){return this.buttonNameToId.get(e)??null}clear(){this.axes.clear(),this.buttons.clear(),this.touchZones.clear(),this.axisNameToId.clear(),this.buttonNameToId.clear(),this.touchZoneNameToId.clear(),this.n=null,this.s=null,this.o=null,this.version++}},He=class{id;name;data={};bridgeInbox=[];d=new Map;u=new Map;e=new Map;isTabHidden=!1;layers=new Map;displays=new Map;nextLayerId=1;t=null;i=null;spriteRegistry;macroRegistry=null;commandQueue=[];l=[];nextSoundInstanceId=1;axes=new Map;buttons=new Map;justPressed=new Set;justReleased=new Set;mouseX=0;mouseY=0;activeDisplay=0;mouseOver=!1;constructor(e,t){this.id=e,this.name=t}setSpriteRegistry(e){this.spriteRegistry=e;for(let t of this.layers.values())t.setSpriteRegistry(e)}addLayer(e,t){let r=this.nextLayerId++;e.setId(r),this.layers.set(e.id,e),this.t=null,this.spriteRegistry&&e.setSpriteRegistry(this.spriteRegistry)}addDisplay(e){this.displays.set(e.id,e),this.i=null}getMouseDisplayInfo(){return this.mouseOver?{localX:this.mouseX,localY:this.mouseY,displayId:this.activeDisplay}:null}inputRegistry=new Ce;getInputBindingRegistry(){return this.inputRegistry}applyInput(e,t){this.mouseX=e.mouseX,this.mouseY=e.mouseY,this.mouseOver=e.mouseOverDisplay,this.activeDisplay=e.displayId;for(let r of t.getAllAxes()){let i=e.axes.get(r.bindingId)??r.defaultValue;this.axes.set(r.name,i)}for(let r of t.getAllButtons()){let i=e.buttons.get(r.bindingId)??r.defaultValue,s=this.buttons.get(r.name)??!1;i&&!s?this.justPressed.add(r.name):!i&&s&&this.justReleased.add(r.name),this.buttons.set(r.name,i)}}poll(){this.justPressed.clear(),this.justReleased.clear(),this.commandQueue.length=0}playSound(e,t){let r=this.nextSoundInstanceId++,i={type:u.Audio,sound:e,instanceId:r,...t};return this.commandQueue.push(i),r}stopSound(e){let t={type:u.Audio,sound:e,stop:!0};this.commandQueue.push(t)}stopAllSounds(){let e={type:u.Audio,sound:"all",stop:!0};this.commandQueue.push(e)}fadeOutSound(e,t){let r={type:u.Audio,sound:e,fadeOut:t};this.commandQueue.push(r)}fadeOutAllSounds(e){let t={type:u.Audio,sound:"all",fadeOut:e};this.commandQueue.push(t)}pauseSound(e){let t={type:u.Audio,sound:e,pause:!0};this.commandQueue.push(t)}pauseAllSounds(){let e={type:u.Audio,sound:"all",pause:!0};this.commandQueue.push(e)}resumeSound(e){let t={type:u.Audio,sound:e,resume:!0};this.commandQueue.push(t)}resumeAllSounds(){let e={type:u.Audio,sound:"all",resume:!0};this.commandQueue.push(e)}setSoundEffects(e,t){let r={type:u.Audio,sound:e,...t};this.commandQueue.push(r)}setListenerPosition(e,t){let r={type:u.Audio,sound:"__listener_position__",x:e,y:t};this.commandQueue.push(r)}configureSpatialAudio(e){let t={type:u.Audio,sound:"__configure_spatial__",...e};this.commandQueue.push(t)}sendSounds(){this.m=!0}m=!1;vibrate(e){let t={type:u.Vibration,pattern:e};this.commandQueue.push(t)}vibrateGamepad(e){let t={type:u.Vibration,target:"gamepad",gamepadIndex:e.gamepadIndex??0,duration:e.duration,strongMagnitude:e.strongMagnitude??1,weakMagnitude:e.weakMagnitude??1,startDelay:e.startDelay??0};this.commandQueue.push(t)}setPostProcess(e,t){let r=this.displays.get(e);r&&r.setPostProcess(t)}setAmbientEffect(e,t){let r=this.displays.get(e);r&&r.setAmbientEffect(t)}setScalingMode(e,t){let r=this.displays.get(e);r&&r.setScalingMode(t)}switchPalette(e,t){let r=this.displays.get(e);r&&r.switchPalette(t)}setOrigin(e,t){let r=this.displays.get(e);r&&r.setOrigin(t)}flushCommands(){let e=this.commandQueue;return this.commandQueue=this.l,this.l=e,this.commandQueue.length=0,e}getAxis(e){return this.axes.get(e)??0}getButton(e){return this.buttons.get(e)??!1}isJustPressed(e){return this.justPressed.has(e)}isJustReleased(e){return this.justReleased.has(e)}createLayer(e,t,r){if(this.layers.has(e))throw new Error(`Layer ${e} already exists`);let i=new Ve(new Me(0,0),0,t,r);return i.setId(e),this.layers.set(e,i),this.t=null,i}getLayer(e){return this.layers.get(e)}removeLayer(e){let t=this.layers.delete(e);return t&&(this.t=null),t}getLayers(){return this.t===null&&(this.t=Array.from(this.layers.values())),this.t}createDisplay(e,t,r){if(this.displays.has(e))throw new Error(`Display ${e} already exists`);let i=new $e(e,t,r);return this.displays.set(e,i),this.i=null,i}getDisplay(e){return this.displays.get(e)}removeDisplay(e){let t=this.displays.delete(e);return t&&(this.i=null),t}getDisplays(){return this.i===null&&(this.i=Array.from(this.displays.values())),this.i}defineButton(e,t,r,i=!1){this.inputRegistry.defineButton(e,t,r,i)}defineAxis(e,t,r,i=-1,s=1,a=0){this.inputRegistry.defineAxis(e,t,r,i,s,a)}handleAudioAck(e){switch(e.type){case"sound-loaded":this.d.set(e.soundId,{name:e.name,loadedAt:Date.now()}),this.u.delete(e.soundId);break;case"sound-error":this.u.set(e.soundId,{name:e.name,error:e.error,at:Date.now()});break;case"playback-started":this.e.set(e.instanceId,{soundId:e.soundId,startedAt:Date.now()});break;case"playback-ended":this.e.delete(e.instanceId);break;case"playback-error":e.instanceId!=null&&this.e.delete(e.instanceId);break}}isSoundLoaded(e){return this.d.has(e)}getLoadedSounds(){return this.d}getSoundLoadError(e){return this.u.get(e)?.error}getSoundLoadErrors(){return this.u}isSoundPlaying(e){return this.e.has(e)}getPlayingSounds(){return this.e}getPlayingSoundCount(){return this.e.size}setMacroRegistry(e){this.macroRegistry=e}getMacroRegistry(){return this.macroRegistry}loadMacro(e,t){if(!this.macroRegistry)throw new Error("MacroRegistry not set");return this.macroRegistry.registerTemplate(e,t)}createMacroInstance(e){if(!this.macroRegistry)throw new Error("MacroRegistry not set");return this.macroRegistry.createInstance(e)}updateMacroInstance(e,t){this.macroRegistry?.updateInstance(e,t)}removeMacroInstance(e){this.macroRegistry?.removeInstance(e)}pauseMacroInstance(e){this.macroRegistry?.pauseInstance(e)}resumeMacroInstance(e){this.macroRegistry?.resumeInstance(e)}onMacroEvent(e,t,r){this.macroRegistry?.onEvent(e,t,r)}handleMacroFeedback(e){this.macroRegistry?.handleFeedback(e)}},zt=Y.create("core:update-builder"),Lt=class{buffer;view;offset=0;textEncoder=new TextEncoder;constructor(e=1024){this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer)}serialize(e){this.offset=0;let t=e.flushCommands();this.writeUint8(Math.min(t.length,255));for(let r of t)this.writeOrder(r);return this.buffer.slice(0,this.offset)}writeOrder(e){switch(this.writeUint8(e.type),e.type){case u.Audio:this.writeAudioOrder(e);break;case u.Vibration:this.writeVibrationOrder(e);break;case u.PostProcess:this.writePostProcessOrder(e);break;default:zt.warn(`Unsupported order type ${e.type}`);break}}writeAudioOrder(e){typeof e.sound=="number"?(this.writeUint8(0),this.writeUint16(e.sound)):(this.writeUint8(1),this.writeString(e.sound)),this.writeUint16(e.instanceId??0);let t=0;e.stop&&(t|=1),e.pause&&(t|=2),e.resume&&(t|=4),e.loop&&(t|=8),this.writeUint8(t),this.writeUint8(Math.floor((e.volume??1)*255)),this.writeUint8(Math.floor((e.pitch??1)*100)),this.writeInt16(e.x??0),this.writeInt16(e.y??0)}writeVibrationOrder(e){if("target"in e&&e.target==="gamepad"){this.writeUint8(0);return}let t=Array.isArray(e.pattern)?e.pattern:[e.pattern];this.writeUint8(Math.min(t.length,255));for(let r of t)this.writeUint16(r)}writePostProcessOrder(e){this.writeUint8(e.displayId),this.writeUint8(e.enabled?1:0),this.writeUint8(Math.min(255,Math.floor((e.bloom??0)*100))),this.writeUint8(Math.min(255,Math.floor((e.chromaticAberration??0)*100))),this.writeUint8(Math.min(255,Math.floor((e.scanlineOpacity??0)*255)))}ensureCapacity(e){if(this.offset+e>this.buffer.length){let t=Math.max(this.buffer.length*2,this.offset+e),r=new Uint8Array(t);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}writeUint8(e){this.ensureCapacity(1),this.buffer[this.offset++]=e}writeUint16(e){this.ensureCapacity(2),this.view.setUint16(this.offset,e,!1),this.offset+=2}writeInt16(e){this.ensureCapacity(2),this.view.setInt16(this.offset,e,!1),this.offset+=2}writeString(e){let t=this.textEncoder.encode(e);this.writeUint8(Math.min(t.length,255)),this.ensureCapacity(t.length),this.buffer.set(t,this.offset),this.offset+=t.length}},Xt=Y.create("core:update-parser"),Vt=class{textDecoder=new TextDecoder;parse(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),r=0,i=[];if(r>=e.byteLength)return i;let s=e[r++];for(let a=0;a<s&&!(r>=e.byteLength);a++){let o=this.parseOrder(e,t,r);if(o)i.push(o.order),r=o.newOffset;else break}return i}parseOrder(e,t,r){let i=e[r++];switch(i){case u.Audio:return this.parseAudioOrder(e,t,r);case u.Vibration:return this.parseVibrationOrder(e,t,r);case u.PostProcess:return this.parsePostProcessOrder(e,t,r);default:return Xt.warn(`Unsupported order type ${i}`),null}}parseAudioOrder(e,t,r){let i=e[r++],s;if(i===0)s=t.getUint16(r,!1),r+=2;else{let w=e[r++];s=this.textDecoder.decode(e.slice(r,r+w)),r+=w}let a=t.getUint16(r,!1);r+=2;let o=e[r++],l=(o&1)!==0,n=(o&2)!==0,d=(o&4)!==0,h=(o&8)!==0,c=e[r++]/255,f=e[r++]/100,g=t.getInt16(r,!1);r+=2;let p=t.getInt16(r,!1);return r+=2,{order:{type:u.Audio,sound:s,instanceId:a,volume:c,pitch:f,loop:h,stop:l,pause:n,resume:d,x:g,y:p},newOffset:r}}parseVibrationOrder(e,t,r){let i=e[r++],s=[];for(let a=0;a<i;a++)s.push(t.getUint16(r,!1)),r+=2;return{order:{type:u.Vibration,pattern:s},newOffset:r}}parsePostProcessOrder(e,t,r){let i=e[r++],s=e[r++]!==0,a=e[r++]/100,o=e[r++]/100,l=e[r++]/255;return{order:{type:u.PostProcess,displayId:i,enabled:s,bloom:a,chromaticAberration:o,scanlineOpacity:l},newOffset:r}}},Nt=new TextDecoder;function $t(e){let t=Array.from(e.axes.entries()).sort((p,w)=>p[0]-w[0]),r=Array.from(e.buttons.entries()).sort((p,w)=>p[0]-w[0]),i=fe(r.length),s=new TextEncoder,a=e.textInputs.map(p=>s.encode(p)),o=1+a.reduce((p,w)=>p+1+w.length,0),l=1+e.displayViewports.length*5,n=1+e.touchPositions.length*4,d=2+t.length+i+4+o+l+n,h=new Uint8Array(d),c=new DataView(h.buffer),f=0;h[f++]=t.length&255,h[f++]=r.length&255;for(let[,p]of t)h[f++]=ke(p)+256&255;for(let p=0;p<i;p++){let w=0;for(let m=0;m<8;m++){let k=p*8+m;k<r.length&&r[k][1]&&(w|=1<<m)}h[f++]=w}h[f++]=e.displayId&255,h[f++]=e.mouseX&255,h[f++]=e.mouseY&255;let g=0;e.mouseOverDisplay&&(g|=1),e.isTabHidden&&(g|=2),h[f++]=g,h[f++]=Math.min(a.length,255);for(let p of a){let w=Math.min(p.length,255);h[f++]=w,h.set(p.slice(0,w),f),f+=w}h[f++]=Math.min(e.displayViewports.length,255);for(let p of e.displayViewports)h[f++]=p.displayId&255,c.setUint16(f,p.pixelWidth,!1),f+=2,c.setUint16(f,p.pixelHeight,!1),f+=2;h[f++]=Math.min(e.touchPositions.length,255);for(let p of e.touchPositions)h[f++]=p.id&15,h[f++]=p.x&255,h[f++]=p.y&255,h[f++]=p.over?1:0;return h}function Ht(e,t){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=0,s=Ie(),a=e[i++],o=e[i++],l=fe(o);for(let d=0;d<a;d++){let h=e[i++],c=h>127?h-256:h;s.axes.set(d,ve(c))}for(let d=0;d<l;d++){let h=e[i++];for(let c=0;c<8;c++){let f=d*8+c;f<o&&s.buttons.set(f,(h&1<<c)!==0)}}s.displayId=e[i++],s.mouseX=e[i++],s.mouseY=e[i++];let n=e[i++];if(s.mouseOverDisplay=(n&1)!==0,s.isTabHidden=(n&2)!==0,i<e.length){let d=e[i++];for(let h=0;h<d;h++){let c=e[i++];s.textInputs.push(Nt.decode(e.subarray(i,i+c))),i+=c}}if(i<e.length){let d=e[i++];for(let h=0;h<d;h++){let c=e[i++],f=r.getUint16(i,!1);i+=2;let g=r.getUint16(i,!1);i+=2,s.displayViewports.push({displayId:c,pixelWidth:f,pixelHeight:g})}}if(i<e.length){let d=e[i++];for(let h=0;h<d;h++){let c=e[i++]&15,f=e[i++],g=e[i++],p=(e[i++]&1)!==0;s.touchPositions.push({id:c,x:f,y:g,over:p})}}return s}var Ke=[[0,0],[9786,1],[9787,2],[9829,3],[9830,4],[9827,5],[9824,6],[8226,7],[9688,8],[9675,9],[9689,10],[9794,11],[9792,12],[9834,13],[9835,14],[9788,15],[9658,16],[9668,17],[8597,18],[8252,19],[182,20],[167,21],[9644,22],[8616,23],[8593,24],[8595,25],[8594,26],[8592,27],[8735,28],[8596,29],[9650,30],[9660,31],[8962,127],[199,128],[252,129],[233,130],[226,131],[228,132],[224,133],[229,134],[231,135],[234,136],[235,137],[232,138],[239,139],[238,140],[236,141],[196,142],[197,143],[201,144],[230,145],[198,146],[244,147],[246,148],[242,149],[251,150],[249,151],[255,152],[214,153],[220,154],[162,155],[163,156],[165,157],[8359,158],[402,159],[225,160],[237,161],[243,162],[250,163],[241,164],[209,165],[170,166],[186,167],[191,168],[8976,169],[172,170],[189,171],[188,172],[161,173],[171,174],[187,175],[9617,176],[9618,177],[9619,178],[9474,179],[9508,180],[9569,181],[9570,182],[9558,183],[9557,184],[9571,185],[9553,186],[9559,187],[9565,188],[9564,189],[9563,190],[9488,191],[9492,192],[9524,193],[9516,194],[9500,195],[9472,196],[9532,197],[9566,198],[9567,199],[9562,200],[9556,201],[9577,202],[9574,203],[9568,204],[9552,205],[9580,206],[9575,207],[9576,208],[9572,209],[9573,210],[9561,211],[9560,212],[9554,213],[9555,214],[9579,215],[9578,216],[9496,217],[9484,218],[9608,219],[9604,220],[9612,221],[9616,222],[9600,223],[945,224],[223,225],[915,226],[960,227],[931,228],[963,229],[181,230],[964,231],[934,232],[920,233],[937,234],[948,235],[8734,236],[966,237],[949,238],[8745,239],[8801,240],[177,241],[8805,242],[8804,243],[8992,244],[8993,245],[247,246],[8776,247],[176,248],[8729,249],[183,250],[8730,251],[8319,252],[178,253],[9632,254],[160,255]],Se=new Map(Ke),Kt=new Map(Ke.map(([e,t])=>[t,e]));function z(e){if(e<128)return e;let t=Se.get(e);return t!==void 0?t:e&255}function Wt(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=z(e.charCodeAt(r));return t}function We(e){let t=e&255;return t<128?t:Kt.get(t)??t}function Gt(e){return String.fromCharCode(We(e))}function Qt(e){return e<128?!0:Se.has(e)}function jt(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(z(e.charCodeAt(r)));return t}var Ge=class{unicolorSprites=new Map;multicolorSprites=new Map;loadUnicolorSprites(e){for(let t of e){let{spriteId:r,width:i,height:s,data:a}=t,o=new Uint16Array(i*s);if(typeof a=="string"){let n=a.replace(/\n/g,"");for(let d=0;d<Math.min(n.length,i*s);d++)o[d]=z(n.charCodeAt(d))}else if(Array.isArray(a)&&a.length>0&&typeof a[0]=="string"){let n=a;for(let d=0;d<Math.min(n.length,s);d++){let h=n[d];if(h)for(let c=0;c<Math.min(h.length,i);c++)o[d*i+c]=z(h.charCodeAt(c))}}else{let n=a;for(let d=0;d<Math.min(n.length,i*s);d++)o[d]=n[d]}let l={id:r,width:i,height:s,data:o};this.unicolorSprites.set(l.id,l)}}loadMulticolorSprites(e){for(let t of e){let{spriteId:r,width:i,height:s,data:a}=t,o=new Uint32Array(i*s);for(let n=0;n<Math.min(a.length,i*s);n++){let d=a[n],h=0;typeof d.charCode=="string"?h=z(d.charCode.charCodeAt(0)):h=d.charCode||0;let c=d.fgColorId||0,f=d.bgColorId||0;o[n]=Le.pack(h,c,f)}let l={id:r,width:i,height:s,data:o};this.multicolorSprites.set(l.id,l)}}getUnicolorSprite(e){return this.unicolorSprites.get(e)}getMulticolorSprite(e){return this.multicolorSprites.get(e)}hasUnicolorSprite(e){return this.unicolorSprites.has(e)}hasMulticolorSprite(e){return this.multicolorSprites.has(e)}clearAll(){this.unicolorSprites.clear(),this.multicolorSprites.clear()}},Qe=(e=>(e.Bitmap="bitmap",e.Image="image",e))(Qe||{});function xe(e){return Math.sqrt(e)*16}function je(e){return e*256-1}function qt(e,t){let r=xe(e)*t;return{width:r,height:r}}var qe=class{constructor(e,t){this.fontId=e,this.config=t,this.atlasColumns=xe(t.atlasBlocks),this.maxCharCode=je(t.atlasBlocks)}atlasColumns;maxCharCode;blocks=new Map;addBlock(e,t){if(e<0||e>=this.config.atlasBlocks)throw new Error(`Invalid block index ${e} for font with ${this.config.atlasBlocks} blocks`);this.blocks.set(e,t)}getBlock(e){return this.blocks.get(e)}getFontId(){return this.fontId}getConfig(){return{glyphWidth:this.config.glyphWidth,glyphHeight:this.config.glyphHeight,cellWidth:this.config.cellWidth,cellHeight:this.config.cellHeight,atlasBlocks:this.config.atlasBlocks}}getGlyphWidth(){return this.config.glyphWidth}getGlyphHeight(){return this.config.glyphHeight}getCellWidth(){return this.config.cellWidth??this.config.glyphWidth}getCellHeight(){return this.config.cellHeight??this.config.glyphHeight}getAtlasBlocks(){return this.config.atlasBlocks}getAtlasColumns(){return this.atlasColumns}getMaxCharCode(){return this.maxCharCode}getAtlasDimensions(){return{width:this.atlasColumns*this.config.glyphWidth,height:this.atlasColumns*this.config.glyphHeight}}getCharUV(e){if(e<0||e>this.maxCharCode)return null;let t=e%this.atlasColumns,r=Math.floor(e/this.atlasColumns),i=t/this.atlasColumns,s=r/this.atlasColumns,a=(t+1)/this.atlasColumns,o=(r+1)/this.atlasColumns;return{u1:i,v1:s,u2:a,v2:o}}isValidCharCode(e){return e>=0&&e<=this.maxCharCode}},Je=class{fonts=new Map;nameToId=new Map;nextId=0;allocateId(e){if(this.nextId>255)throw new Error(`Cannot register font "${e}": maximum 256 fonts reached`);return this.nextId++}registerFont(e,t){if(this.nameToId.has(e))throw new Error(`ImageFont with name "${e}" already exists`);let r=this.allocateId(e),i={glyphWidth:t.glyphWidth,glyphHeight:t.glyphHeight,cellWidth:t.cellWidth,cellHeight:t.cellHeight,atlasBlocks:t.atlasBlocks??1},s=new qe(r,i);return this.fonts.set(r,s),this.nameToId.set(e,r),r}unregisterFont(e){let t=this.nameToId.get(e);t!==void 0&&(this.fonts.delete(t),this.nameToId.delete(e))}hasFont(e){return this.nameToId.has(e)}addBlock(e,t,r){let i=this.fonts.get(e);if(!i)throw new Error(`ImageFont with ID ${e} not found`);i.addBlock(t,r)}getFont(e){return this.fonts.get(e)}getFontByName(e){let t=this.nameToId.get(e);if(t!==void 0)return this.fonts.get(t)}getFontId(e){return this.nameToId.get(e)}getAllFonts(){return Array.from(this.fonts.values())}getFontName(e){for(let[t,r]of this.nameToId)if(r===e)return t}},_e=class{sounds=new Map;nameToId=new Map;nextId=0;registerFile(e,t,r){let i=this.allocateId(e),s={soundId:i,name:e,loadType:"file",format:t,data:r};return this.addEntry(s),i}registerExternal(e,t,r,i,s){let a=this.allocateId(e),o={soundId:a,name:e,loadType:"external",format:t,url:r,size:i,checksum:s};return this.addEntry(o),a}get(e){if(typeof e=="number")return this.sounds.get(e);let t=this.nameToId.get(e);return t!==void 0?this.sounds.get(t):void 0}has(e){return this.get(e)!==void 0}toLoadPackets(){let e=[],t=Array.from(this.sounds.values()),r=t.length,i=t.filter(a=>a.loadType==="file");i.length>0&&e.push({type:"sound",mode:"file",sounds:i.map(a=>({soundId:a.soundId,name:a.name,format:a.format,data:a.data})),totalSounds:r});let s=t.filter(a=>a.loadType==="external");return s.length>0&&e.push({type:"sound",mode:"external",sounds:s.map(a=>({soundId:a.soundId,name:a.name,format:a.format,url:a.url,size:a.size,checksum:a.checksum})),totalSounds:r}),e}allocateId(e){if(this.nameToId.has(e))throw new Error(`Sound with name "${e}" already exists`);for(;this.sounds.has(this.nextId);)if(this.nextId++,this.nextId>255)throw new Error("Maximum number of sounds (256) reached");return this.nextId++}addEntry(e){this.sounds.set(e.soundId,e),this.nameToId.set(e.name,e.soundId)}},Oe=Y.create("core:macro-registry"),et=class{templates=new Map;templateNameToId=new Map;nextTemplateId=0;instances=new Map;instanceNameToId=new Map;nextInstanceId=1;pendingDefines=[];pendingOrders=[];feedbackHandlers=new Map;registerTemplate(e,t){if(this.templateNameToId.has(e))return this.templateNameToId.get(e);let r=this.nextTemplateId++;if(r>65535)throw new Error("Max 65535 macro templates");return this.templates.set(r,t),this.templateNameToId.set(e,r),this.pendingDefines.push({templateId:r,template:t}),Oe.debug(`Template registered: "${e}" \u2192 id=${r}`),r}getTemplate(e){if(typeof e=="string"){let t=this.templateNameToId.get(e);return t!==void 0?this.templates.get(t):void 0}return this.templates.get(e)}getTemplateId(e){return this.templateNameToId.get(e)}createInstance(e){let t=this.templateNameToId.get(e.macro);if(t===void 0)throw new Error(`Unknown macro template: "${e.macro}"`);let r=this.nextInstanceId++;if(r>65535)throw new Error("Max 65535 macro instances");let i={instanceId:r,templateId:t,layerId:e.layer,x:e.x,y:e.y,zIndex:e.zIndex??0,params:e.params??{},state:"running"};return this.instances.set(r,i),e.name&&this.instanceNameToId.set(e.name,r),this.pendingOrders.push({cmd:1,instanceId:r,templateId:t,layerId:e.layer,x:e.x,y:e.y,zIndex:e.zIndex??0,params:e.params??{}}),Oe.debug(`Instance created: id=${r} macro="${e.macro}" layer=${e.layer}`),r}updateInstance(e,t){let r=this.resolveInstanceId(e);if(r===void 0)return;let i=this.instances.get(r);i&&(Object.assign(i.params,t),this.pendingOrders.push({cmd:2,instanceId:r,params:t}))}removeInstance(e){let t=this.resolveInstanceId(e);if(t!==void 0){this.instances.delete(t);for(let[r,i]of this.instanceNameToId)if(i===t){this.instanceNameToId.delete(r);break}this.feedbackHandlers.delete(t),this.pendingOrders.push({cmd:3,instanceId:t})}}pauseInstance(e){let t=this.resolveInstanceId(e);if(t===void 0)return;let r=this.instances.get(t);r&&(r.state="paused"),this.pendingOrders.push({cmd:4,instanceId:t})}resumeInstance(e){let t=this.resolveInstanceId(e);if(t===void 0)return;let r=this.instances.get(t);r&&(r.state="running"),this.pendingOrders.push({cmd:5,instanceId:t})}getPendingDefines(){return this.pendingDefines}getPendingOrders(){return this.pendingOrders}clearPendingDefines(){this.pendingDefines.length=0}clearPendingOrders(){this.pendingOrders.length=0}getAllDefines(){let e=[];for(let[t,r]of this.templates)e.push({templateId:t,template:r});return e}getActiveInstanceOrders(){let e=[];for(let t of this.instances.values())e.push({cmd:1,instanceId:t.instanceId,templateId:t.templateId,layerId:t.layerId,x:t.x,y:t.y,zIndex:t.zIndex,params:t.params});return e}onEvent(e,t,r){let i=this.resolveInstanceId(e);if(i===void 0)return;let s=this.feedbackHandlers.get(i);s||(s=new Map,this.feedbackHandlers.set(i,s));let a=s.get(t);a||(a=[],s.set(t,a)),a.push(r)}handleFeedback(e){let t=this.feedbackHandlers.get(e.instanceId);if(!t)return;let r,i;switch(e.cmd){case 1:r="click",i=void 0;break;case 2:r="change",i=e.value;break;case 3:r="submit",i=e.text;break;case 4:r="select",i=e.index;break;case 5:r="custom",i=e.data;break;default:return}let s=t.get(r);if(s)for(let a of s)a(i)}resolveInstanceId(e){return typeof e=="number"?e:this.instanceNameToId.get(e)}},tt=class{buffer;view;offset=0;constructor(e=4096){this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer)}reset(){this.offset=0}ensure(e){if(this.offset+e>this.buffer.length){let t=this.buffer.length*2;for(;t<this.offset+e;)t*=2;let r=new Uint8Array(t);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}ensureAndGetBuffer(e){return this.ensure(e),this.buffer}writeU8(e){this.ensure(1),this.buffer[this.offset++]=e&255}writeI8(e){this.ensure(1),this.view.setInt8(this.offset,e),this.offset+=1}writeU16BE(e){this.ensure(2),this.view.setUint16(this.offset,e,!1),this.offset+=2}writeI16BE(e){this.ensure(2),this.view.setInt16(this.offset,e,!1),this.offset+=2}writeU16LE(e){this.ensure(2),this.view.setUint16(this.offset,e,!0),this.offset+=2}writeBytes(e){this.ensure(e.length),this.buffer.set(e,this.offset),this.offset+=e.length}toUint8Array(){return this.buffer.slice(0,this.offset)}getView(){return this.buffer.subarray(0,this.offset)}},Re=new TextEncoder;function M(e,t,r){r?e.writeU16LE(t):e.writeU8(t&255)}var rt=class b{static p=new tt(4096);static encode(t,r=!1){let i=b.p;i.reset();for(let s of t)b.encodeOne(i,s,r);return i.toUint8Array()}static encodeInto(t,r,i=!1){for(let s of r)b.encodeOne(t,s,i)}static encodeOne(t,r,i){switch(r.type){case u.Char:b.encodeChar(t,r,i);break;case u.Text:b.encodeText(t,r);break;case u.TextMultiline:b.encodeTextMultiline(t,r);break;case u.SubFrame:b.encodeSubFrame(t,r,i);break;case u.SubFrameMulti:b.encodeSubFrameMulti(t,r,i);break;case u.FullFrame:b.encodeFullFrame(t,r,i);break;case u.FullFrameMulti:b.encodeFullFrameMulti(t,r,i);break;case u.Sprite:b.encodeSprite(t,r);break;case u.SpriteMulti:b.encodeSpriteMulti(t,r);break;case u.ColorMap:b.encodeColorMap(t,r);break;case u.Shape:b.encodeShape(t,r,i);break;case u.Polyline:b.encodePolyline(t,r,i);break;case u.DotCloud:b.encodeDotCloud(t,r,i);break;case u.DotCloudMulti:b.encodeDotCloudMulti(t,r,i);break;case u.SpriteCloud:b.encodeSpriteCloud(t,r);break;case u.SpriteCloudMulti:b.encodeSpriteCloudMulti(t,r);break;case u.SpriteCloudVaried:b.encodeSpriteCloudVaried(t,r);break;case u.SpriteCloudVariedMulti:b.encodeSpriteCloudVariedMulti(t,r);break;case u.Bitmask:b.encodeBitmask(t,r,i);break;case u.Bitmask4:b.encodeBitmask4(t,r,i);break;case u.Bitmask16:b.encodeBitmask16(t,r,i);break;case u.Fill:b.encodeFill(t,r,i);break;case u.FillChar:b.encodeFillChar(t,r,i);break;case u.FillSprite:b.encodeFillSprite(t,r);break;case u.FillSpriteMulti:b.encodeFillSpriteMulti(t,r);break;default:break}}static encodeChar(t,r,i){t.writeU8(u.Char),t.writeU8(r.x),t.writeU8(r.y),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeText(t,r){t.writeU8(u.Text),t.writeU8(r.x),t.writeU8(r.y);let i=r.text.length*3,s=t.ensureAndGetBuffer(1+i),a=t.offset;t.offset++;let{written:o}=Re.encodeInto(r.text,s.subarray(t.offset,t.offset+i));s[a]=o,t.offset+=o,t.writeU8(r.bg),t.writeU8(r.fg)}static encodeTextMultiline(t,r){t.writeU8(u.TextMultiline),t.writeU8(r.x),t.writeU8(r.y);let i=r.text.length*3,s=t.ensureAndGetBuffer(1+i),a=t.offset;t.offset++;let{written:o}=Re.encodeInto(r.text,s.subarray(t.offset,t.offset+i));s[a]=o,t.offset+=o,t.writeU8(r.bg),t.writeU8(r.fg)}static encodeSubFrame(t,r,i){t.writeU8(u.SubFrame),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),t.writeU8(r.bg),t.writeU8(r.fg);for(let s of r.frame)M(t,s,i)}static encodeSubFrameMulti(t,r,i){t.writeU8(u.SubFrameMulti),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1);for(let s of r.frame)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg)}static encodeFullFrame(t,r,i){t.writeU8(u.FullFrame),t.writeU8(r.bg),t.writeU8(r.fg);for(let s of r.frame)M(t,s,i)}static encodeFullFrameMulti(t,r,i){t.writeU8(u.FullFrameMulti);for(let s of r.frame)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg)}static encodeSprite(t,r){t.writeU8(u.Sprite),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.spriteId),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeSpriteMulti(t,r){t.writeU8(u.SpriteMulti),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.spriteId)}static encodeColorMap(t,r){t.writeU8(u.ColorMap),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1);for(let i of r.data)t.writeU8(i.bg),t.writeU8(i.fg)}static encodeShape(t,r,i){switch(t.writeU8(u.Shape),t.writeU8(r.shapeType),r.shapeType){case U.Rectangle:t.writeU8(r.x??0),t.writeU8(r.y??0),t.writeU8((r.width??1)-1),t.writeU8((r.height??1)-1),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Circle:t.writeU8(r.x??0),t.writeU8(r.y??0),t.writeU8((r.radius??1)-1),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Line:t.writeU8(r.x1??0),t.writeU8(r.y1??0),t.writeU8(r.x2??0),t.writeU8(r.y2??0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Ellipse:t.writeU8(r.x??0),t.writeU8(r.y??0),t.writeU8((r.radiusX??1)-1),t.writeU8((r.radiusY??1)-1),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Triangle:t.writeU8(r.x1??0),t.writeU8(r.y1??0),t.writeU8(r.x2??0),t.writeU8(r.y2??0),t.writeU8(r.x3??0),t.writeU8(r.y3??0),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break}}static encodePolyline(t,r,i){t.writeU8(u.Polyline),M(t,r.char,i),t.writeU8(r.fg),t.writeU8(r.bg),t.writeU8(r.points.length);for(let s of r.points)t.writeU8(s.x),t.writeU8(s.y)}static encodeDotCloud(t,r,i){t.writeU8(u.DotCloud),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg),t.writeU16BE(r.positions.length);for(let s of r.positions)t.writeU8(s.x),t.writeU8(s.y)}static encodeDotCloudMulti(t,r,i){t.writeU8(u.DotCloudMulti),t.writeU16BE(r.dots.length);for(let s of r.dots)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg),t.writeU8(s.x),t.writeU8(s.y)}static encodeSpriteCloud(t,r){t.writeU8(u.SpriteCloud),t.writeU8(r.spriteId),t.writeU8(r.bg),t.writeU8(r.fg),t.writeU16BE(r.positions.length);for(let i of r.positions)t.writeU8(i.x),t.writeU8(i.y)}static encodeSpriteCloudMulti(t,r){t.writeU8(u.SpriteCloudMulti),t.writeU8(r.spriteId),t.writeU16BE(r.positions.length);for(let i of r.positions)t.writeU8(i.x),t.writeU8(i.y)}static encodeSpriteCloudVaried(t,r){t.writeU8(u.SpriteCloudVaried),t.writeU16BE(r.sprites.length);for(let i of r.sprites)t.writeU8(i.spriteId),t.writeU8(i.bg),t.writeU8(i.fg),t.writeU8(i.x),t.writeU8(i.y)}static encodeSpriteCloudVariedMulti(t,r){t.writeU8(u.SpriteCloudVariedMulti),t.writeU16BE(r.sprites.length);for(let i of r.sprites)t.writeU8(i.spriteId),t.writeU8(i.x),t.writeU8(i.y)}static encodeBitmask(t,r,i){t.writeU8(u.Bitmask),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg),t.writeU8(r.override?1:0),t.writeBytes(r.mask)}static encodeBitmask4(t,r,i){t.writeU8(u.Bitmask4),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),t.writeU8(r.override?1:0);for(let s of r.variants)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg);t.writeBytes(r.mask)}static encodeBitmask16(t,r,i){t.writeU8(u.Bitmask16),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),t.writeU8(r.override?1:0),t.writeU8(r.variants.length);for(let s of r.variants)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg);t.writeBytes(r.mask)}static encodeFill(t,r,i){t.writeU8(u.Fill),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeFillChar(t,r,i){t.writeU8(u.FillChar),t.writeU8(r.patternWidth-1),t.writeU8(r.patternHeight-1),t.writeU8(r.bg),t.writeU8(r.fg);for(let s of r.pattern)M(t,s,i)}static encodeFillSprite(t,r){t.writeU8(u.FillSprite),t.writeU8(r.spriteId),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeFillSpriteMulti(t,r){t.writeU8(u.FillSpriteMulti),t.writeU8(r.spriteId)}},ie=new TextEncoder,Jt=32,_t=64,we=[],me=[],Q=[],j=[],er=[],tr=[],rr=new tt(8192),be={reliable:new Uint8Array(0),volatile:new Uint8Array(0)},Ue=class F{static encode(t){let r=t.getDisplays(),i=t.getLayers(),s=t.flushCommands();we.length=0,me.length=0;for(let h of i)h.getNeedsCommit()&&(h.getMustBeReliable()?we.push(h):me.push(h));Q.length=0,j.length=0;for(let h of s)switch(h.type){case u.Audio:Q.push(h);break;case u.Vibration:j.push(h);break}let a=t.getMacroRegistry(),o=a?.getPendingOrders()??[],l=a?.getPendingDefines()??[],n=F.encodePacket(r,we,Q,j,void 0,o,l),d=F.encodePacket(r,me,er,tr);return a?.clearPendingOrders(),a?.clearPendingDefines(),be.reliable=n,be.volatile=d,be}static encodeFull(t,r){let i=t.getDisplays(),s=t.getLayers(),a=t.flushCommands();Q.length=0,j.length=0;for(let h of a)switch(h.type){case u.Audio:Q.push(h);break;case u.Vibration:j.push(h);break}let o;if(r){o=new Map;for(let h of i){let c=h.activePaletteSlot;r.has(c)&&!o.has(c)&&o.set(c,r.get(c))}}let l=t.getMacroRegistry(),n=l?.getAllDefines()??[],d=l?.getActiveInstanceOrders()??[];return F.encodePacket(i,s,Q,j,o,d,n)}static encodePacket(t,r,i,s,a,o,l){let n=rr;n.reset(),n.writeU8(t.length);for(let c of t){n.writeU8(c.id),n.writeI16BE(c.x),n.writeI16BE(c.y),n.writeU16BE(c.width),n.writeU16BE(c.height),n.writeU8(c.activePaletteSlot),n.writeU8(c.scalingMode),n.writeU8(c.cellWidth),n.writeU8(c.cellHeight);let f=c.renderPasses;if(f&&f.length>0){n.writeU8(f.length);for(let g of f)n.writeU8(g.id),n.writeU8(Math.max(0,Math.min(255,g.zMin))),n.writeU8(Math.max(0,Math.min(255,g.zMax))),n.writeU8(g.enabled!==!1?1:0)}else n.writeU8(0)}if(a&&a.size>0){n.writeU8(a.size);for(let[c,f]of a){n.writeU8(c);for(let g=0;g<256;g++){let p=f[g];p?(n.writeU8(p.r??0),n.writeU8(p.g??0),n.writeU8(p.b??0),n.writeU8(p.a??0)):(n.writeU8(0),n.writeU8(0),n.writeU8(0),n.writeU8(0))}}}else n.writeU8(0);n.writeU16BE(r.length);for(let c of r){n.writeU16BE(c.id);let f=0;c.getIsMacroLayer()&&(f|=Jt);let g=c.is16bit;g&&(f|=_t),n.writeU8(f),n.writeI8(c.zIndex);let p=c.getOrigin();n.writeI16BE(p.x),n.writeI16BE(p.y),n.writeU16BE(c.getWidth()),n.writeU16BE(c.getHeight());let w=c.getPendingOrders();n.writeU16BE(w.length),w.length>0&&rt.encodeInto(n,w,g)}n.writeU8(Math.min(i.length,255));for(let c=0;c<Math.min(i.length,255);c++)F.encodeAudioOrder(n,i[c]);n.writeU8(Math.min(s.length,255));for(let c=0;c<Math.min(s.length,255);c++)F.encodeVibrationOrder(n,s[c]);let d=l??[];n.writeU16BE(d.length);for(let c of d)F.encodeMacroDefine(n,c);let h=o??[];n.writeU16BE(h.length);for(let c of h)F.encodeMacroOrder(n,c);return n.writeU8(0),n.toUint8Array()}static encodeAudioOrder(t,r){if(r.stop){t.writeU8(2),F.encodeSoundTarget(t,r.sound);return}if(r.fadeOut!==void 0){t.writeU8(3),F.encodeSoundTarget(t,r.sound),t.writeU16BE(Math.round(r.fadeOut*1e3));return}if(r.pause){t.writeU8(4),F.encodeSoundTarget(t,r.sound);return}if(r.resume){t.writeU8(5),F.encodeSoundTarget(t,r.sound);return}if(r.sound==="__listener_position__"){t.writeU8(7),t.writeI16BE(r.x??0),t.writeI16BE(r.y??0);return}if(r.sound==="__configure_spatial__"){t.writeU8(8),t.writeU16BE(r.maxDistance??100),t.writeU16BE(r.referenceDistance??1),t.writeU8(r.rolloffFactor??1),t.writeU8(r.panSpread??0);return}if(r.instanceId===void 0&&typeof r.sound=="number"&&(r.lowpass!==void 0||r.highpass!==void 0||r.reverb!==void 0||r.pitch!==void 0||r.volume!==void 0)){t.writeU8(6),t.writeU16BE(r.sound);let s=0;r.lowpass!==void 0&&(s|=1),r.highpass!==void 0&&(s|=2),r.reverb!==void 0&&(s|=4),r.pitch!==void 0&&(s|=8),r.volume!==void 0&&(s|=16),t.writeU8(s),r.lowpass!==void 0&&t.writeU16BE(Math.round(r.lowpass)),r.highpass!==void 0&&t.writeU16BE(Math.round(r.highpass)),r.reverb!==void 0&&t.writeU8(Math.round(r.reverb*255)),r.pitch!==void 0&&t.writeU8(Math.round(r.pitch*100)),r.volume!==void 0&&t.writeU8(Math.round(r.volume*255));return}t.writeU8(1),F.encodeSoundTarget(t,r.sound),t.writeU16BE(r.instanceId??0);let i=0;r.volume!==void 0&&(i|=1),r.pitch!==void 0&&(i|=2),r.fadeIn!==void 0&&(i|=4),r.x!==void 0&&r.y!==void 0&&(i|=8),r.lowpass!==void 0&&(i|=16),r.highpass!==void 0&&(i|=32),r.reverb!==void 0&&(i|=64),r.loop&&(i|=128),t.writeU8(i),r.volume!==void 0&&t.writeU8(Math.round(r.volume*255)),r.pitch!==void 0&&t.writeU8(Math.round(r.pitch*100)),r.fadeIn!==void 0&&t.writeU16BE(Math.round(r.fadeIn*1e3)),r.x!==void 0&&r.y!==void 0&&(t.writeI16BE(r.x),t.writeI16BE(r.y)),r.lowpass!==void 0&&t.writeU16BE(Math.round(r.lowpass)),r.highpass!==void 0&&t.writeU16BE(Math.round(r.highpass)),r.reverb!==void 0&&t.writeU8(Math.round(r.reverb*255))}static encodeSoundTarget(t,r){if(typeof r=="number")t.writeU8(0),t.writeU16BE(r);else if(r==="all")t.writeU8(1);else{t.writeU8(2);let i=ie.encode(r);t.writeU8(i.length),t.writeBytes(i)}}static encodeVibrationOrder(t,r){if("target"in r&&r.target==="gamepad")t.writeU8(1),t.writeU8(r.gamepadIndex),t.writeU16BE(r.duration),t.writeU8(Math.round(r.strongMagnitude*255)),t.writeU8(Math.round(r.weakMagnitude*255)),t.writeU16BE(r.startDelay);else{t.writeU8(0);let i=r.pattern;if(typeof i=="number")t.writeU8(1),t.writeU16BE(i);else{t.writeU8(i.length);for(let s of i)t.writeU16BE(s)}}}static encodeMacroDefine(t,r){t.writeU16BE(r.templateId);let i=ie.encode(JSON.stringify(r.template));t.writeU16BE(i.length),t.writeBytes(i)}static encodeMacroOrder(t,r){switch(t.writeU8(r.cmd),t.writeU16BE(r.instanceId),r.cmd){case 1:{let i=r;if(t.writeU16BE(i.templateId),t.writeU16BE(i.layerId),t.writeI16BE(i.x),t.writeI16BE(i.y),t.writeU8(i.zIndex),i.params!==void 0){let s=ie.encode(JSON.stringify(i.params));t.writeU16BE(s.length),t.writeBytes(s)}else t.writeU16BE(0);break}case 2:{let i=r,s=ie.encode(JSON.stringify(i.params));t.writeU16BE(s.length),t.writeBytes(s);break}default:break}}},it=class{samples;head=0;count=0;windowSize;totalTicks=0;c=0;constructor(e=120){this.windowSize=e,this.samples=new Array(e);for(let t=0;t<e;t++)this.samples[t]={durationMs:0,bytes:0,layers:0,orders:0,cells:0,displays:0}}beginTick(){this.c=performance.now()}endTick(e){let t=performance.now()-this.c;this.totalTicks++;let r=this.samples[this.head];r.durationMs=t,r.bytes=e.bytes,r.layers=e.layers,r.orders=e.orders,r.cells=e.cells,r.displays=e.displays,this.head=(this.head+1)%this.windowSize,this.count<this.windowSize&&this.count++}getSnapshot(){if(this.count===0)return{totalTicks:0,lastTickDurationMs:0,avgTickDurationMs:0,peakTickDurationMs:0,lastTickBytes:0,avgTickBytes:0,lastLayerCount:0,lastOrderCount:0,lastCellCount:0,lastDisplayCount:0};let e=(this.head-1+this.windowSize)%this.windowSize,t=this.samples[e],r=0,i=0,s=0,a=this.count<this.windowSize?0:this.head;for(let o=0;o<this.count;o++){let l=this.samples[(a+o)%this.windowSize];r+=l.durationMs,s+=l.bytes,l.durationMs>i&&(i=l.durationMs)}return{totalTicks:this.totalTicks,lastTickDurationMs:t.durationMs,avgTickDurationMs:r/this.count,peakTickDurationMs:i,lastTickBytes:t.bytes,avgTickBytes:s/this.count,lastLayerCount:t.layers,lastOrderCount:t.orders,lastCellCount:t.cells,lastDisplayCount:t.displays}}reset(){this.head=0,this.count=0,this.totalTicks=0;for(let e=0;e<this.windowSize;e++){let t=this.samples[e];t.durationMs=0,t.bytes=0,t.layers=0,t.orders=0,t.cells=0,t.displays=0}}},ir=class ae{static VGA_COLORS=[{colorId:0,r:0,g:0,b:0,a:255},{colorId:1,r:170,g:0,b:0,a:255},{colorId:2,r:0,g:170,b:0,a:255},{colorId:3,r:170,g:85,b:0,a:255},{colorId:4,r:0,g:0,b:170,a:255},{colorId:5,r:170,g:0,b:170,a:255},{colorId:6,r:0,g:170,b:170,a:255},{colorId:7,r:170,g:170,b:170,a:255},{colorId:8,r:85,g:85,b:85,a:255},{colorId:9,r:255,g:85,b:85,a:255},{colorId:10,r:85,g:255,b:85,a:255},{colorId:11,r:255,g:255,b:85,a:255},{colorId:12,r:85,g:85,b:255,a:255},{colorId:13,r:255,g:85,b:255,a:255},{colorId:14,r:85,g:255,b:255,a:255},{colorId:15,r:255,g:255,b:255,a:255}];static SYSTEM_COLORS=[{colorId:240,r:0,g:0,b:0,a:255},{colorId:241,r:60,g:60,b:75,a:255},{colorId:242,r:160,g:160,b:180,a:255},{colorId:243,r:255,g:255,b:255,a:255},{colorId:244,r:230,g:50,b:80,a:255},{colorId:245,r:255,g:120,b:50,a:255},{colorId:246,r:255,g:210,b:60,a:255},{colorId:247,r:130,g:220,b:50,a:255},{colorId:248,r:35,g:100,b:55,a:255},{colorId:249,r:40,g:200,b:220,a:255},{colorId:250,r:60,g:120,b:240,a:255},{colorId:251,r:35,g:55,b:125,a:255},{colorId:252,r:150,g:70,b:210,a:255},{colorId:253,r:130,g:80,b:50,a:255},{colorId:254,r:240,g:210,b:170,a:255}];mode;sessions=new Map;spriteRegistry=new Ge;fontRegistry=new Je;soundRegistry=new _e;inputBindings=new Ce;macroRegistry=new et;stats=new it;getSpriteRegistry(){return this.spriteRegistry}resourceLoader=null;onFontAllocatedCallback=null;onFontBlockAddedCallback=null;constructor(t){this.mode=t.mode,this.initializeDefaultPalette(),this.loadFont(8,8,1,8,8)}setResourceLoader(t){this.resourceLoader=t}createUser(t,r){let i=String(t),s=r??`Player ${t}`,a=new He(i,s);return this.spriteRegistry&&a.setSpriteRegistry(this.spriteRegistry),a.setMacroRegistry(this.macroRegistry),this.sessions.set(i,a),a}removeUser(t){return this.sessions.delete(String(t))}getUser(t){return this.sessions.get(String(t))}endTick(t){this.stats.beginTick();let r=Ue.encode(t),i=t.getLayers(),s=0,a=0;for(let l of i)a+=l.getWidth()*l.getHeight(),l.getNeedsCommit()&&(s+=l.getPendingOrders().length,l.clearPendingOrders(),l.clearCommit());let o=t.getDisplays();return this.stats.endTick({bytes:r.reliable.byteLength+r.volatile.byteLength,layers:i.length,orders:s,cells:a,displays:o.length}),r}getEngineStats(){return this.stats.getSnapshot()}encodeInitialState(t){return Ue.encodeFull(t,this.palettes)}onFontAllocated(t){this.onFontAllocatedCallback=t}onFontBlockAdded(t){this.onFontBlockAddedCallback=t}loadFont(t,r,i,s,a){let o="__default__";this.fontRegistry.getFontId(o)!==void 0&&this.fontRegistry.unregisterFont(o),this.fontRegistry.registerFont(o,{glyphWidth:t,glyphHeight:r,cellWidth:s,cellHeight:a,atlasBlocks:i}),this.onFontAllocatedCallback&&this.onFontAllocatedCallback()}async loadFontBlock(t,r){let i;if(typeof r=="string"){if(!this.resourceLoader)throw new Error("[Engine] No resource loader set. The runtime must call engine.setResourceLoader() before loading font blocks.");i=await this.resourceLoader.load(r)}else i=r;let s=this.fontRegistry.getFontId("__default__");if(s===void 0)throw new Error("[Engine] No font allocated. Call loadFont() first.");this.fontRegistry.addBlock(s,t,i),this.onFontBlockAddedCallback&&this.onFontBlockAddedCallback(t)}async loadFontBlocks(t){await Promise.all(Object.entries(t).map(([r,i])=>this.loadFontBlock(Number(r),i)))}getFontConfig(){return this.fontRegistry.getFontByName("__default__")?.getConfig()}getFontBlock(t){return this.fontRegistry.getFontByName("__default__")?.getBlock(t)}palettes=new Map;detectSoundFormat(t){let r=t.split(".").pop()?.toLowerCase();return{mp3:"mp3",wav:"wav",ogg:"ogg",webm:"webm",aac:"aac",m4a:"aac"}[r||""]||"mp3"}async loadSound(t,r){if(!this.resourceLoader)throw new Error("[Engine] No resource loader set. The runtime must call engine.setResourceLoader() before loading sounds.");let i=this.detectSoundFormat(r),s=await this.resourceLoader.load(r);return this.soundRegistry.registerFile(t,i,s)}async loadSounds(t){let r=Object.entries(t),i=await Promise.all(r.map(([a,o])=>this.loadSound(a,o))),s={};return r.forEach(([a],o)=>{s[a]=i[o]}),s}initializeDefaultPalette(){let t=new Array(256);for(let r=0;r<256;r++)t[r]={colorId:r,r:0,g:0,b:0,a:0};for(let r of ae.VGA_COLORS)t[r.colorId]={...r};for(let r of ae.SYSTEM_COLORS)t[r.colorId]={...r};t[255]={colorId:255,r:0,g:0,b:0,a:0},this.palettes.set(0,t)}loadPaletteToSlot(t,r){let i=new Array(256);for(let s=0;s<256;s++)i[s]={colorId:s,r:0,g:0,b:0,a:0};for(let s of r){let a=s.colorId;a>=0&&a<240&&(i[a]={colorId:a,r:s.r??0,g:s.g??0,b:s.b??0,a:s.a??255})}for(let s of ae.SYSTEM_COLORS)i[s.colorId]={...s};i[255]={colorId:255,r:0,g:0,b:0,a:0},this.palettes.set(t,i)}getPalette(t){return this.palettes.get(t)}},sr=class{composite(e,t,r){let i=e.renderPasses;!i||i.length===0?this.compositeSinglePass(e,t,r):this.compositeMultiPass(e,t,i,r)}compositeSinglePass(e,t,r){let i=[...t].sort((a,o)=>o.zIndex-a.zIndex);r.clear();let s=new Uint8Array(r.size);for(let a of i)a.visible&&this.compositeLayer(e,a,r,s)}compositeMultiPass(e,t,r,i){let s=r.filter(o=>o.enabled!==!1);if(s.length===0){this.compositeSinglePass(e,t,i);return}let a=[...t].filter(o=>o.visible).sort((o,l)=>l.zIndex-o.zIndex);i.clear();for(let o of s){let l=a.filter(h=>h.zIndex>=o.zMin&&h.zIndex<=o.zMax);if(l.length===0)continue;let n=new oe(e.width,e.height);n.clear();let d=new Uint8Array(n.size);for(let h of l)this.compositeLayer(e,h,n,d);this.overlayPass(n,i)}}overlayPass(e,t){let r=e.size;for(let i=0;i<r;i++){let s=e.data[i];(s>>>24&255)!==255&&(t.data[i]=s)}}compositeLayer(e,t,r,i){let s=Math.max(e.x,t.x),a=Math.min(e.x+e.width,t.x+t.grid.width),o=Math.max(e.y,t.y),l=Math.min(e.y+e.height,t.y+t.grid.height);if(s>=a||o>=l)return;let n=a-s,d=l-o,h=e.width,c=t.grid.width,f=(o-e.y)*h+(s-e.x),g=(o-t.y)*c+(s-t.x);for(let p=0;p<d;p++){let w=f,m=g;for(let k=0;k<n;k++){if(!i[w]){let Z=t.grid.data[m],x=Z>>>24&255,D=Z>>>16&255,L=Z&65535,X=r.data[w],R=X>>>24&255,E=X>>>16&255,B=X&65535;L!==0&&(B===0||B===32)&&(B=L),D!==255&&E===255&&(E=D),x!==255&&(R===255&&(R=x),i[w]=1),r.data[w]=R<<24|E<<16|B}w++,m++}f+=h,g+=c}}},ar=class y{orders=[];static toCharCode(t){return typeof t=="number"?t&65535:t.length===0?32:z(t.charCodeAt(0))}static dedent(t){let r=t.split(`
|
|
3
|
+
`);r.length>0&&r[0].trim()===""&&r.shift();let i=1/0;for(let s of r){if(s.trim().length===0)continue;let a=s.match(/^(\s*)/);a&&(i=Math.min(i,a[1].length))}return i===1/0?t.trim():r.map(s=>s.slice(i)).join(`
|
|
4
|
+
`).trim()}static encodeString(t){let r="";for(let i=0;i<t.length;i++){let s=t.charCodeAt(i),a=z(s);r+=String.fromCharCode(a)}return r}getOrders(){return this.orders}clear(){return this.orders=[],this}char(t,r,i,s=15,a=255){return this.orders.push(y.char(t,r,i,s,a)),this}static char(t,r,i,s=15,a=255){return{type:u.Char,x:t,y:r,char:y.toCharCode(i),fg:s,bg:a}}text(t,r,i,s=15,a=255){return this.orders.push(y.text(t,r,i,s,a)),this}static text(t,r,i,s=15,a=255){return{type:u.Text,x:t,y:r,text:y.encodeString(i),fg:s,bg:a}}textMultiline(t,r,i,s=15,a=255){return this.orders.push(y.textMultiline(t,r,i,s,a)),this}static textMultiline(t,r,i,s=15,a=255){return{type:u.TextMultiline,x:t,y:r,text:y.encodeString(y.dedent(i)),fg:s,bg:a}}subFrame(t,r,i,s,a,o=15,l=255){let n={type:u.SubFrame,x:t,y:r,width:i,height:s,frame:a.map(d=>y.toCharCode(d)),fg:o,bg:l};return this.orders.push(n),this}static subFrame(t,r,i,s,a,o=15,l=255){return{type:u.SubFrame,x:t,y:r,width:i,height:s,frame:a.map(n=>y.toCharCode(n)),fg:o,bg:l}}subFrameMulti(t,r,i,s,a){return this.orders.push(y.subFrameMulti(t,r,i,s,a)),this}static subFrameMulti(t,r,i,s,a){return{type:u.SubFrameMulti,x:t,y:r,width:i,height:s,frame:a.map(o=>({char:y.toCharCode(o.charCode??o.char??0),fg:o.fgColorCode??o.fgColor??o.fg??15,bg:o.bgColorCode??o.bgColor??o.bg??255}))}}subFrameMultiColor(t,r,i,s,a){return this.subFrameMulti(t,r,i,s,a)}static subFrameMultiColor(t,r,i,s,a){return y.subFrameMulti(t,r,i,s,a)}fullFrame(t,r=15,i=255){return this.orders.push(y.fullFrame(t,r,i)),this}static fullFrame(t,r=15,i=255){return{type:u.FullFrame,frame:t.map(s=>y.toCharCode(s)),fg:r,bg:i}}fullFrameMulti(t){return this.orders.push(y.fullFrameMulti(t)),this}static fullFrameMulti(t){return{type:u.FullFrameMulti,frame:t.map(r=>({char:y.toCharCode(r.charCode??r.char??0),fg:r.fgColorCode??r.fgColor??r.fg??15,bg:r.bgColorCode??r.bgColor??r.bg??255}))}}fullFrameMultiColor(t){return this.fullFrameMulti(t)}static fullFrameMultiColor(t){return y.fullFrameMulti(t)}sprite(t,r,i,s=15,a=255){return this.orders.push(y.sprite(t,r,i,s,a)),this}static sprite(t,r,i,s=15,a=255){return{type:u.Sprite,x:t,y:r,spriteId:i,fg:s,bg:a}}spriteMulti(t,r,i){return this.orders.push(y.spriteMulti(t,r,i)),this}static spriteMulti(t,r,i){return{type:u.SpriteMulti,x:t,y:r,spriteId:i}}spriteMultiColor(t,r,i){return this.spriteMulti(t,r,i)}static spriteMultiColor(t,r,i){return y.spriteMulti(t,r,i)}colorMap(t,r,i,s,a){let o={type:u.ColorMap,x:t,y:r,width:i,height:s,data:a};return this.orders.push(o),this}rect(t,r,i,s,a,o=15,l=255,n=!0){return this.orders.push(y.rect(t,r,i,s,a,o,l,n)),this}static rect(t,r,i,s,a,o=15,l=255,n=!0){return{type:u.Shape,shapeType:U.Rectangle,x:t,y:r,width:i,height:s,filled:n,char:y.toCharCode(a),fg:o,bg:l}}rectangle(t,r,i,s,a){return this.rect(t,r,i,s,a?.charCode??"\u2588",a?.fgColor??15,a?.bgColor??255,a?.filled??!0)}static rectangle(t,r,i,s,a){return y.rect(t,r,i,s,a?.charCode??"\u2588",a?.fgColor??15,a?.bgColor??255,a?.filled??!0)}circle(t,r,i,s,a=15,o=255,l=!0){let n={type:u.Shape,shapeType:U.Circle,x:t,y:r,radius:i,filled:l,char:y.toCharCode(s),fg:a,bg:o};return this.orders.push(n),this}static circle(t,r,i,s="\u2588",a=15,o=255,l=!0){let n,d=a,h=o,c=l;return typeof s=="object"?(n=y.toCharCode(s.charCode??"\u2588"),d=s.fgColor??15,h=s.bgColor??255,c=s.filled??!0):n=y.toCharCode(s),{type:u.Shape,shapeType:U.Circle,x:t,y:r,radius:i,filled:c,char:n,fg:d,bg:h}}line(t,r,i,s,a,o=15,l=255){return this.orders.push(y.line(t,r,i,s,a,o,l)),this}static line(t,r,i,s,a,o=15,l=255){let n,d=o,h=l;return typeof a=="object"?(n=y.toCharCode(a.charCode??"#"),d=a.fgColor??15,h=a.bgColor??255):n=y.toCharCode(a),{type:u.Shape,shapeType:U.Line,x1:t,y1:r,x2:i,y2:s,filled:!1,char:n,fg:d,bg:h}}triangle(t,r,i,s,a,o,l,n=15,d=255,h=!0){let c={type:u.Shape,shapeType:U.Triangle,x1:t,y1:r,x2:i,y2:s,x3:a,y3:o,filled:h,char:y.toCharCode(l),fg:n,bg:d};return this.orders.push(c),this}static triangle(t,r,i,s,a,o,l="\u2588",n=15,d=255,h=!0){let c,f=n,g=d,p=h;return typeof l=="object"?(c=y.toCharCode(l.charCode??"\u2588"),f=l.fgColor??15,g=l.bgColor??255,p=l.filled??!0):c=y.toCharCode(l),{type:u.Shape,shapeType:U.Triangle,x1:t,y1:r,x2:i,y2:s,x3:a,y3:o,filled:p,char:c,fg:f,bg:g}}ellipse(t,r,i,s,a,o=15,l=255,n=!0){let d={type:u.Shape,shapeType:U.Ellipse,x:t,y:r,radiusX:i,radiusY:s,filled:n,char:y.toCharCode(a),fg:o,bg:l};return this.orders.push(d),this}static ellipse(t,r,i,s,a="\u2588",o=15,l=255,n=!0){let d,h=o,c=l,f=n;return typeof a=="object"?(d=y.toCharCode(a.charCode??"\u2588"),h=a.fgColor??15,c=a.bgColor??255,f=a.filled??!0):d=y.toCharCode(a),{type:u.Shape,shapeType:U.Ellipse,x:t,y:r,radiusX:i,radiusY:s,filled:f,char:d,fg:h,bg:c}}polyline(t,r,i=15,s=255){return this.orders.push(y.polyline(t,r,i,s)),this}static polyline(t,r,i=15,s=255){return{type:u.Polyline,points:t,char:y.toCharCode(r),fg:i,bg:s}}polygon(t,r,i=15,s=255){return this.orders.push(y.polygon(t,r,i,s)),this}static polygon(t,r,i=15,s=255){let a=[...t];return a.length>0&&a.push(a[0]),{type:u.Polyline,points:a,char:y.toCharCode(r),fg:i,bg:s}}dotCloud(t,r,i=15,s=255){return this.orders.push(y.dotCloud(t,r,i,s)),this}static dotCloud(t,r,i=15,s=255){return{type:u.DotCloud,positions:t.map(a=>({x:a.posX??a.x??0,y:a.posY??a.y??0})),char:y.toCharCode(r),fg:i,bg:s}}dotCloudMulti(t){let r={type:u.DotCloudMulti,dots:t.map(i=>({...i,char:y.toCharCode(i.char)}))};return this.orders.push(r),this}static dotCloudMulti(t){return{type:u.DotCloudMulti,dots:t.map(r=>({x:r.posX??r.x??0,y:r.posY??r.y??0,char:y.toCharCode(r.charCode??r.char??0),fg:r.fgColorCode??r.fgColor??r.fg??15,bg:r.bgColorCode??r.bgColor??r.bg??255}))}}dotCloudMultiColor(t){return this.orders.push(y.dotCloudMulti(t)),this}static dotCloudMultiColor(t){return y.dotCloudMulti(t)}spriteCloud(t,r,i=15,s=255){let a={type:u.SpriteCloud,positions:t,spriteId:r,fg:i,bg:s};return this.orders.push(a),this}static spriteCloud(t,r,i=15,s=255){return{type:u.SpriteCloud,positions:r.map(a=>({x:a.posX??a.x??0,y:a.posY??a.y??0})),spriteId:t,fg:i,bg:s}}spriteCloudMulti(t,r){let i={type:u.SpriteCloudMulti,positions:t,spriteId:r};return this.orders.push(i),this}static spriteCloudMulti(t,r){return{type:u.SpriteCloudMulti,positions:r.map(i=>({x:i.posX??i.x??0,y:i.posY??i.y??0})),spriteId:t}}spriteCloudMultiColor(t,r){return this.orders.push(y.spriteCloudMulti(t,r)),this}static spriteCloudMultiColor(t,r){return y.spriteCloudMulti(t,r)}spriteCloudVaried(t){let r={type:u.SpriteCloudVaried,sprites:t};return this.orders.push(r),this}static spriteCloudVaried(t){return{type:u.SpriteCloudVaried,sprites:t.map(r=>({x:r.posX??r.x??0,y:r.posY??r.y??0,spriteId:r.spriteIndex??r.spriteId??0,fg:r.fgColorCode??r.fgColor??r.fg??15,bg:r.bgColorCode??r.bgColor??r.bg??255}))}}spriteCloudVariedMulti(t){let r={type:u.SpriteCloudVariedMulti,sprites:t};return this.orders.push(r),this}static spriteCloudVariedMulti(t){return{type:u.SpriteCloudVariedMulti,sprites:t.map(r=>({x:r.posX??r.x??0,y:r.posY??r.y??0,spriteId:r.spriteIndex??r.spriteId??0}))}}spriteCloudVariedMultiColor(t){return this.orders.push(y.spriteCloudVariedMulti(t)),this}static spriteCloudVariedMultiColor(t){return y.spriteCloudVariedMulti(t)}bitmask(t,r,i,s,a,o,l=15,n=255,d=!1){let h=i*s,c=Math.ceil(h/8),f=new Uint8Array(c);for(let p=0;p<h;p++)if(a[p]&1){let w=Math.floor(p/8),m=p%8;f[w]|=1<<m}let g={type:u.Bitmask,x:t,y:r,width:i,height:s,mask:f,char:y.toCharCode(o),fg:l,bg:n,override:d};return this.orders.push(g),this}static bitmask(t,r,i,s,a,o,l=15,n=255,d=!1){let h=i*s,c=Math.ceil(h/8),f=new Uint8Array(c);for(let g=0;g<h;g++)if(a[g]){let p=Math.floor(g/8),w=g%8;f[p]|=1<<w}return{type:u.Bitmask,x:t,y:r,width:i,height:s,mask:f,char:y.toCharCode(o),fg:l,bg:n,override:d}}bitmask4(t,r,i,s,a,o,l=!1){return this.orders.push(y.bitmask4(t,r,i,s,a,o,l)),this}static bitmask4(t,r,i,s,a,o,l=!1){if(o.length!==3)throw new Error("Bitmask4 requires exactly 3 variants");let n=i*s,d=Math.ceil(n/4),h=new Uint8Array(d);for(let f=0;f<n;f++){let g=a[f]&3;if(g>0){let p=Math.floor(f/4),w=f%4*2;h[p]|=g<<w}}let c=f=>({char:y.toCharCode(f.charCode??f.char),fg:f.fg??f.fgColor??15,bg:f.bg??f.bgColor??0});return{type:u.Bitmask4,x:t,y:r,width:i,height:s,mask:h,variants:[c(o[0]),c(o[1]),c(o[2])],override:l}}bitmask16(t,r,i,s,a,o,l=!1){if(o.length>15)throw new Error("Bitmask16 supports max 15 variants");let n=i*s,d=Math.ceil(n/2),h=new Uint8Array(d);for(let g=0;g<n;g++){let p=a[g]&15;if(p>0){let w=Math.floor(g/2),m=g%2*4;h[w]|=p<<m}}let c=g=>({char:y.toCharCode(g.charCode??g.char),fg:g.fg??g.fgColor??15,bg:g.bg??g.bgColor??0}),f={type:u.Bitmask16,x:t,y:r,width:i,height:s,mask:h,variants:o.map(c),override:l};return this.orders.push(f),this}static bitmask16(t,r,i,s,a,o,l=!1){if(o.length>15)throw new Error("Bitmask16 supports max 15 variants");let n=i*s,d=Math.ceil(n/2),h=new Uint8Array(d);for(let f=0;f<n;f++){let g=a[f]&15;if(g>0){let p=Math.floor(f/2),w=f%2*4;h[p]|=g<<w}}let c=f=>({char:y.toCharCode(f.charCode??f.char),fg:f.fg??f.fgColor??15,bg:f.bg??f.bgColor??0});return{type:u.Bitmask16,x:t,y:r,width:i,height:s,mask:h,variants:o.map(c),override:l}}fill(t,r=15,i=255){return this.orders.push(y.fill(t,r,i)),this}static fill(t,r=15,i=255){return{type:u.Fill,char:y.toCharCode(t),fg:r,bg:i}}fillChar(t,r,i,s=15,a=255){return this.orders.push(y.fillChar(t,r,i,s,a)),this}static fillChar(t,r,i,s=15,a=255){return{type:u.FillChar,patternWidth:t,patternHeight:r,pattern:i.map(o=>y.toCharCode(o)),fg:s,bg:a}}fillSprite(t,r=15,i=255){return this.orders.push(y.fillSprite(t,r,i)),this}static fillSprite(t,r=15,i=255){return{type:u.FillSprite,spriteId:t,fg:r,bg:i}}fillSpriteMulti(t){return this.orders.push(y.fillSpriteMulti(t)),this}static fillSpriteMulti(t){return{type:u.FillSpriteMulti,spriteId:t}}fillSpriteMultiColor(t){return this.fillSpriteMulti(t)}static fillSpriteMultiColor(t){return y.fillSpriteMulti(t)}boxWithBorder(t,r,i,s,a,o){let l=y.boxWithBorder(t,r,i,s,a,o);return this.orders.push(...l),this}static boxWithBorder(t,r,i,s,a={},o={}){return[y.rectangle(t+1,r+1,i-2,s-2,{charCode:o.charCode??"\u2588",fgColor:o.fgColor??8,bgColor:o.bgColor??0,filled:!0}),y.rectangle(t,r,i,s,{charCode:a.charCode??"\u2588",fgColor:a.fgColor??15,bgColor:a.bgColor??0,filled:!1})]}grid(t,r,i,s,a,o,l="+",n=15,d=255){return this.orders.push(y.grid(t,r,i,s,a,o,l,n,d)),this}static grid(t,r,i,s,a,o,l="+",n=15,d=255){let h=[];for(let c=0;c<=a;c++)for(let f=0;f<=o;f++)h.push({x:t+f*i,y:r+c*s});return y.dotCloud(h,l,n,d)}},or=class{view;data;offset;constructor(e,t=0){this.data=e,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.offset=t}get remaining(){return this.data.length-this.offset}readU8(){return this.data[this.offset++]}readI8(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readU16BE(){let e=this.view.getUint16(this.offset,!1);return this.offset+=2,e}readI16BE(){let e=this.view.getInt16(this.offset,!1);return this.offset+=2,e}readU16LE(){let e=this.view.getUint16(this.offset,!0);return this.offset+=2,e}readBytes(e){let t=this.data.slice(this.offset,this.offset+e);return this.offset+=e,t}},Ye=new TextDecoder;function I(e,t){return t?e.readU16LE():e.readU8()}var st=class C{static decode(t,r=!1,i=0,s=0){let a=new or(t),o=[];for(;a.remaining>0;){let l=a.readU8(),n=C.decodeOne(a,l,r,i,s);n&&o.push(n)}return o}static decodeOne(t,r,i,s,a){switch(r){case u.Char:return C.decodeChar(t,i);case u.Text:return C.decodeText(t);case u.TextMultiline:return C.decodeTextMultiline(t);case u.SubFrame:return C.decodeSubFrame(t,i);case u.SubFrameMulti:return C.decodeSubFrameMulti(t,i);case u.FullFrame:return C.decodeFullFrame(t,i,s,a);case u.FullFrameMulti:return C.decodeFullFrameMulti(t,i,s,a);case u.Sprite:return C.decodeSprite(t);case u.SpriteMulti:return C.decodeSpriteMulti(t);case u.ColorMap:return C.decodeColorMap(t);case u.Shape:return C.decodeShape(t,i);case u.Polyline:return C.decodePolyline(t,i);case u.DotCloud:return C.decodeDotCloud(t,i);case u.DotCloudMulti:return C.decodeDotCloudMulti(t,i);case u.SpriteCloud:return C.decodeSpriteCloud(t);case u.SpriteCloudMulti:return C.decodeSpriteCloudMulti(t);case u.SpriteCloudVaried:return C.decodeSpriteCloudVaried(t);case u.SpriteCloudVariedMulti:return C.decodeSpriteCloudVariedMulti(t);case u.Bitmask:return C.decodeBitmask(t,i);case u.Bitmask4:return C.decodeBitmask4(t,i);case u.Bitmask16:return C.decodeBitmask16(t,i);case u.Fill:return C.decodeFill(t,i);case u.FillChar:return C.decodeFillChar(t,i);case u.FillSprite:return C.decodeFillSprite(t);case u.FillSpriteMulti:return C.decodeFillSpriteMulti(t);default:return null}}static decodeChar(t,r){let i=t.readU8(),s=t.readU8(),a=I(t,r),o=t.readU8(),l=t.readU8();return{type:u.Char,x:i,y:s,char:a,fg:l,bg:o}}static decodeText(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readBytes(s),o=Ye.decode(a),l=t.readU8(),n=t.readU8();return{type:u.Text,x:r,y:i,text:o,fg:n,bg:l}}static decodeTextMultiline(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readBytes(s),o=Ye.decode(a),l=t.readU8(),n=t.readU8();return{type:u.TextMultiline,x:r,y:i,text:o,fg:n,bg:l}}static decodeSubFrame(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=t.readU8(),n=t.readU8(),d=a*o,h=new Array(d);for(let c=0;c<d;c++)h[c]=I(t,r);return{type:u.SubFrame,x:i,y:s,width:a,height:o,frame:h,fg:n,bg:l}}static decodeSubFrameMulti(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=a*o,n=new Array(l);for(let d=0;d<l;d++){let h=I(t,r),c=t.readU8(),f=t.readU8();n[d]={char:h,fg:f,bg:c}}return{type:u.SubFrameMulti,x:i,y:s,width:a,height:o,frame:n}}static decodeFullFrame(t,r,i,s){let a=t.readU8(),o=t.readU8(),l=i*s,n=new Array(l);for(let d=0;d<l;d++)n[d]=I(t,r);return{type:u.FullFrame,frame:n,fg:o,bg:a}}static decodeFullFrameMulti(t,r,i,s){let a=i*s,o=new Array(a);for(let l=0;l<a;l++){let n=I(t,r),d=t.readU8(),h=t.readU8();o[l]={char:n,fg:h,bg:d}}return{type:u.FullFrameMulti,frame:o}}static decodeSprite(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readU8(),o=t.readU8();return{type:u.Sprite,x:r,y:i,spriteId:s,fg:o,bg:a}}static decodeSpriteMulti(t){let r=t.readU8(),i=t.readU8(),s=t.readU8();return{type:u.SpriteMulti,x:r,y:i,spriteId:s}}static decodeColorMap(t){let r=t.readU8(),i=t.readU8(),s=t.readU8()+1,a=t.readU8()+1,o=s*a,l=new Array(o);for(let n=0;n<o;n++){let d=t.readU8(),h=t.readU8();l[n]={fg:h,bg:d}}return{type:u.ColorMap,x:r,y:i,width:s,height:a,data:l}}static decodeShape(t,r){let i=t.readU8(),s={type:u.Shape,shapeType:i,filled:!1,char:0,fg:0,bg:0};switch(i){case U.Rectangle:{let a=t.readU8(),o=t.readU8(),l=t.readU8()+1,n=t.readU8()+1,d=t.readU8()!==0,h=I(t,r),c=t.readU8(),f=t.readU8();return{...s,x:a,y:o,width:l,height:n,filled:d,char:h,fg:f,bg:c}}case U.Circle:{let a=t.readU8(),o=t.readU8(),l=t.readU8()+1,n=t.readU8()!==0,d=I(t,r),h=t.readU8(),c=t.readU8();return{...s,x:a,y:o,radius:l,filled:n,char:d,fg:c,bg:h}}case U.Line:{let a=t.readU8(),o=t.readU8(),l=t.readU8(),n=t.readU8(),d=I(t,r),h=t.readU8(),c=t.readU8();return{...s,x1:a,y1:o,x2:l,y2:n,filled:!1,char:d,fg:c,bg:h}}case U.Ellipse:{let a=t.readU8(),o=t.readU8(),l=t.readU8()+1,n=t.readU8()+1,d=t.readU8()!==0,h=I(t,r),c=t.readU8(),f=t.readU8();return{...s,x:a,y:o,radiusX:l,radiusY:n,filled:d,char:h,fg:f,bg:c}}case U.Triangle:{let a=t.readU8(),o=t.readU8(),l=t.readU8(),n=t.readU8(),d=t.readU8(),h=t.readU8(),c=t.readU8()!==0,f=I(t,r),g=t.readU8(),p=t.readU8();return{...s,x1:a,y1:o,x2:l,y2:n,x3:d,y3:h,filled:c,char:f,fg:p,bg:g}}default:return s}}static decodePolyline(t,r){let i=I(t,r),s=t.readU8(),a=t.readU8(),o=t.readU8(),l=new Array(o);for(let n=0;n<o;n++)l[n]={x:t.readU8(),y:t.readU8()};return{type:u.Polyline,points:l,char:i,fg:s,bg:a}}static decodeDotCloud(t,r){let i=I(t,r),s=t.readU8(),a=t.readU8(),o=t.readU16BE(),l=new Array(o);for(let n=0;n<o;n++)l[n]={x:t.readU8(),y:t.readU8()};return{type:u.DotCloud,positions:l,char:i,fg:a,bg:s}}static decodeDotCloudMulti(t,r){let i=t.readU16BE(),s=new Array(i);for(let a=0;a<i;a++){let o=I(t,r),l=t.readU8(),n=t.readU8(),d=t.readU8(),h=t.readU8();s[a]={x:d,y:h,char:o,fg:n,bg:l}}return{type:u.DotCloudMulti,dots:s}}static decodeSpriteCloud(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readU16BE(),o=new Array(a);for(let l=0;l<a;l++)o[l]={x:t.readU8(),y:t.readU8()};return{type:u.SpriteCloud,positions:o,spriteId:r,fg:s,bg:i}}static decodeSpriteCloudMulti(t){let r=t.readU8(),i=t.readU16BE(),s=new Array(i);for(let a=0;a<i;a++)s[a]={x:t.readU8(),y:t.readU8()};return{type:u.SpriteCloudMulti,positions:s,spriteId:r}}static decodeSpriteCloudVaried(t){let r=t.readU16BE(),i=new Array(r);for(let s=0;s<r;s++){let a=t.readU8(),o=t.readU8(),l=t.readU8(),n=t.readU8(),d=t.readU8();i[s]={x:n,y:d,spriteId:a,fg:l,bg:o}}return{type:u.SpriteCloudVaried,sprites:i}}static decodeSpriteCloudVariedMulti(t){let r=t.readU16BE(),i=new Array(r);for(let s=0;s<r;s++){let a=t.readU8(),o=t.readU8(),l=t.readU8();i[s]={x:o,y:l,spriteId:a}}return{type:u.SpriteCloudVariedMulti,sprites:i}}static decodeBitmask(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=I(t,r),n=t.readU8(),d=t.readU8(),h=t.readU8()!==0,c=Math.ceil(a*o/8),f=t.readBytes(c);return{type:u.Bitmask,x:i,y:s,width:a,height:o,mask:f,char:l,fg:d,bg:n,override:h}}static decodeBitmask4(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=t.readU8()!==0,n=[{char:0,fg:0,bg:0},{char:0,fg:0,bg:0},{char:0,fg:0,bg:0}];for(let c=0;c<3;c++)n[c].char=I(t,r),n[c].bg=t.readU8(),n[c].fg=t.readU8();let d=Math.ceil(a*o*2/8),h=t.readBytes(d);return{type:u.Bitmask4,x:i,y:s,width:a,height:o,mask:h,variants:n,override:l}}static decodeBitmask16(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=t.readU8()!==0,n=t.readU8(),d=new Array(n);for(let f=0;f<n;f++){let g=I(t,r),p=t.readU8(),w=t.readU8();d[f]={char:g,fg:w,bg:p}}let h=Math.ceil(a*o*4/8),c=t.readBytes(h);return{type:u.Bitmask16,x:i,y:s,width:a,height:o,mask:c,variants:d,override:l}}static decodeFill(t,r){let i=I(t,r),s=t.readU8(),a=t.readU8();return{type:u.Fill,char:i,fg:a,bg:s}}static decodeFillChar(t,r){let i=t.readU8()+1,s=t.readU8()+1,a=t.readU8(),o=t.readU8(),l=i*s,n=new Array(l);for(let d=0;d<l;d++)n[d]=I(t,r);return{type:u.FillChar,patternWidth:i,patternHeight:s,pattern:n,fg:o,bg:a}}static decodeFillSprite(t){let r=t.readU8(),i=t.readU8(),s=t.readU8();return{type:u.FillSprite,spriteId:r,fg:s,bg:i}}static decodeFillSpriteMulti(t){let r=t.readU8();return{type:u.FillSpriteMulti,spriteId:r}}},nr=32,lr=64,dr=class{view;buf;offset;constructor(e,t=0){this.buf=e,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.offset=t}get remaining(){return this.buf.length-this.offset}get rawBuffer(){return this.buf}readU8(){return this.buf[this.offset++]}readI8(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readU16BE(){let e=this.view.getUint16(this.offset,!1);return this.offset+=2,e}readI16BE(){let e=this.view.getInt16(this.offset,!1);return this.offset+=2,e}readBytes(e){let t=this.buf.slice(this.offset,this.offset+e);return this.offset+=e,t}},se=new TextDecoder,hr=class A{static decode(t){let r=new dr(t),i=r.offset,s=r.readU8(),a=new Array(s);for(let S=0;S<s;S++){let T=r.readU8(),$=r.readI16BE(),P=r.readI16BE(),le=r.readU16BE(),J=r.readU16BE(),de=r.readU8(),he=r.readU8(),ue=r.readU8(),_=r.readU8(),H=r.readU8(),K;if(H>0){K=new Array(H);for(let W=0;W<H;W++)K[W]={id:r.readU8(),zMin:r.readU8(),zMax:r.readU8(),enabled:(r.readU8()&1)!==0}}a[S]={id:T,originX:$,originY:P,width:le,height:J,paletteSlot:de,scalingMode:he,cellWidth:ue,cellHeight:_,renderPasses:K}}let o=r.offset-i,l=r.offset,n=r.readU8(),d=new Array(n);for(let S=0;S<n;S++){let T=r.readU8(),$=new Array(256);for(let P=0;P<256;P++)$[P]={colorId:P,r:r.readU8(),g:r.readU8(),b:r.readU8(),a:r.readU8()};d[S]={slot:T,colors:$}}let h=r.offset-l,c=r.offset,f=r.readU16BE(),g=new Array(f);for(let S=0;S<f;S++){let T=r.offset,$=r.readU16BE(),P=r.readU8(),le=(P&nr)!==0,J=(P&lr)!==0,de=r.readI8(),he=r.readI16BE(),ue=r.readI16BE(),_=r.readU16BE(),H=r.readU16BE(),K=r.readU16BE(),W=[];K>0&&(W=A.decodeOrders(r,K,J,_,H));let nt=r.offset-T;g[S]={id:$,isMacro:le,is16bit:J,zIndex:de,originX:he,originY:ue,width:_,height:H,orders:W,byteSize:nt}}let p=r.offset-c,w=r.offset,m=r.readU8(),k=new Array(m);for(let S=0;S<m;S++)k[S]=A.decodeAudioOrder(r);let Z=r.offset-w,x=r.offset,D=r.readU8(),L=new Array(D);for(let S=0;S<D;S++)L[S]=A.decodeVibrationOrder(r);let X=r.offset-x,R=r.offset,E=[];if(r.remaining>=2){let S=r.readU16BE();E=new Array(S);for(let T=0;T<S;T++)E[T]=A.decodeMacroDefine(r)}let B=r.offset-R,V=r.offset,ne=[];if(r.remaining>=2){let S=r.readU16BE();ne=new Array(S);for(let T=0;T<S;T++)ne[T]=A.decodeMacroOrder(r)}let at=r.offset-V;r.remaining>0&&r.readU8();let ot={displays:o,palettes:h,layers:p,audio:Z,vibration:X,macroDefines:B,macroOrders:at,total:t.byteLength};return{displays:a,palettes:d,layers:g,audioOrders:k,vibrationOrders:L,macroDefines:E,macroOrders:ne,sectionSizes:ot}}static decodeOrders(t,r,i,s,a){let o=t.offset;for(let d=0;d<r;d++)A.skipOneOrder(t,i,s,a);let l=t.offset-o,n=new Uint8Array(t.rawBuffer.buffer,t.rawBuffer.byteOffset+o,l);return st.decode(n,i,s,a)}static skipOneOrder(t,r,i,s){let a=t.readU8(),o=r?2:1;switch(a){case 1:t.offset+=2+o+2;break;case 2:case 23:{t.offset+=2;let l=t.readU8();t.offset+=l+2;break}case 3:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=2,t.offset+=l*n*o;break}case 4:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=l*n*(o+2);break}case 5:{t.offset+=2,t.offset+=i*s*o;break}case 6:t.offset+=i*s*(o+2);break;case 7:t.offset+=5;break;case 8:t.offset+=3;break;case 9:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=l*n*2;break}case 10:{switch(t.readU8()){case 1:t.offset+=5+o+2;break;case 2:t.offset+=4+o+2;break;case 3:t.offset+=4+o+2;break;case 4:t.offset+=5+o+2;break;case 5:t.offset+=7+o+2;break}break}case 25:{t.offset+=o+2;let l=t.readU8();t.offset+=l*2;break}case 11:{t.offset+=o+2;let l=t.readU16BE();t.offset+=l*2;break}case 12:{let l=t.readU16BE();t.offset+=l*(o+2+2);break}case 13:{t.offset+=3;let l=t.readU16BE();t.offset+=l*2;break}case 14:{t.offset+=1;let l=t.readU16BE();t.offset+=l*2;break}case 15:{let l=t.readU16BE();t.offset+=l*5;break}case 16:{let l=t.readU16BE();t.offset+=l*3;break}case 17:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=o+2+1,t.offset+=Math.ceil(l*n/8);break}case 18:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=1,t.offset+=3*(o+2),t.offset+=Math.ceil(l*n*2/8);break}case 24:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=1;let d=t.readU8();t.offset+=d*(o+2),t.offset+=Math.ceil(l*n*4/8);break}case 19:t.offset+=o+2;break;case 20:{let l=t.readU8()+1,n=t.readU8()+1;t.offset+=2,t.offset+=l*n*o;break}case 21:t.offset+=3;break;case 22:t.offset+=1;break;default:break}}static decodeAudioOrder(t){switch(t.readU8()){case 1:{let r=A.decodeSoundTarget(t),i=t.readU16BE(),s=t.readU8(),a={type:u.Audio,sound:r,instanceId:i};return s&1&&(a.volume=t.readU8()/255),s&2&&(a.pitch=t.readU8()/100),s&4&&(a.fadeIn=t.readU16BE()/1e3),s&8&&(a.x=t.readI16BE(),a.y=t.readI16BE()),s&16&&(a.lowpass=t.readU16BE()),s&32&&(a.highpass=t.readU16BE()),s&64&&(a.reverb=t.readU8()/255),s&128&&(a.loop=!0),a}case 2:{let r=A.decodeSoundTarget(t);return{type:u.Audio,sound:r,stop:!0}}case 3:{let r=A.decodeSoundTarget(t),i=t.readU16BE();return{type:u.Audio,sound:r,fadeOut:i/1e3}}case 4:{let r=A.decodeSoundTarget(t);return{type:u.Audio,sound:r,pause:!0}}case 5:{let r=A.decodeSoundTarget(t);return{type:u.Audio,sound:r,resume:!0}}case 6:{let r=t.readU16BE(),i=t.readU8(),s={type:u.Audio,sound:r};return i&1&&(s.lowpass=t.readU16BE()),i&2&&(s.highpass=t.readU16BE()),i&4&&(s.reverb=t.readU8()/255),i&8&&(s.pitch=t.readU8()/100),i&16&&(s.volume=t.readU8()/255),s}case 7:{let r=t.readI16BE(),i=t.readI16BE();return{type:u.Audio,sound:"__listener_position__",x:r,y:i}}case 8:{let r=t.readU16BE(),i=t.readU16BE(),s=t.readU8(),a=t.readU8();return{type:u.Audio,sound:"__configure_spatial__",maxDistance:r,referenceDistance:i,rolloffFactor:s,panSpread:a}}default:return{type:u.Audio,sound:0}}}static decodeSoundTarget(t){switch(t.readU8()){case 0:return t.readU16BE();case 1:return"all";case 2:{let r=t.readU8(),i=t.readBytes(r);return se.decode(i)}default:return 0}}static decodeVibrationOrder(t){if(t.readU8()===1){let s=t.readU8(),a=t.readU16BE(),o=t.readU8()/255,l=t.readU8()/255,n=t.readU16BE();return{type:u.Vibration,target:"gamepad",gamepadIndex:s,duration:a,strongMagnitude:o,weakMagnitude:l,startDelay:n}}let r=t.readU8();if(r===1)return{type:u.Vibration,pattern:t.readU16BE()};let i=new Array(r);for(let s=0;s<r;s++)i[s]=t.readU16BE();return{type:u.Vibration,pattern:i}}static decodeMacroDefine(t){let r=t.readU16BE(),i=t.readU16BE(),s=t.readBytes(i),a=JSON.parse(se.decode(s));return{templateId:r,template:a}}static decodeMacroOrder(t){let r=t.readU8(),i=t.readU16BE();switch(r){case 1:{let s=t.readU16BE(),a=t.readU16BE(),o=t.readI16BE(),l=t.readI16BE(),n=t.readU8(),d=t.readU16BE(),h;if(d>0){let c=t.readBytes(d);h=JSON.parse(se.decode(c))}return{cmd:r,instanceId:i,templateId:s,layerId:a,x:o,y:l,zIndex:n,params:h??{}}}case 2:{let s=t.readU16BE(),a=t.readBytes(s),o=JSON.parse(se.decode(a));return{cmd:r,instanceId:i,params:o}}case 3:return{cmd:r,instanceId:i};case 4:return{cmd:r,instanceId:i};case 5:return{cmd:r,instanceId:i};default:return{cmd:r,instanceId:i}}}},ur=class{listeners=new Map;on(e,t){this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e).push(t)}off(e,t){let r=this.listeners.get(e);if(r){let i=r.indexOf(t);i!==-1&&r.splice(i,1)}}emit(e,t){let r=this.listeners.get(e);r&&r.forEach(i=>i(t))}removeAllListeners(){this.listeners.clear()}};
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@primitiv/core';
|
package/dist/core.mjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var be=class v{x;y;constructor(t=0,r=0){this.x=t,this.y=r}static zero(){return new v(0,0)}static one(){return new v(1,1)}static up(){return new v(0,-1)}static down(){return new v(0,1)}static left(){return new v(-1,0)}static right(){return new v(1,0)}add(t){return new v(this.x+t.x,this.y+t.y)}subtract(t){return new v(this.x-t.x,this.y-t.y)}multiply(t){return new v(this.x*t,this.y*t)}divide(t){if(t===0)throw new Error("Division by zero");return new v(this.x/t,this.y/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSquared(){return this.x*this.x+this.y*this.y}normalize(){let t=this.length();return t===0?v.zero():this.divide(t)}distance(t){return this.subtract(t).length()}distanceSquared(t){return this.subtract(t).lengthSquared()}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}angle(){return Math.atan2(this.y,this.x)}angleTo(t){return Math.atan2(t.y-this.y,t.x-this.x)}rotate(t){let r=Math.cos(t),i=Math.sin(t);return new v(this.x*r-this.y*i,this.x*i+this.y*r)}lerp(t,r){return new v(this.x+(t.x-this.x)*r,this.y+(t.y-this.y)*r)}clone(){return new v(this.x,this.y)}equals(t){return this.x===t.x&&this.y===t.y}toString(){return`Vector2(${this.x}, ${this.y})`}toArray(){return[this.x,this.y]}set(t,r){return this.x=t,this.y=r,this}copy(t){return this.x=t.x,this.y=t.y,this}addInPlace(t){return this.x+=t.x,this.y+=t.y,this}subtractInPlace(t){return this.x-=t.x,this.y-=t.y,this}multiplyInPlace(t){return this.x*=t,this.y*=t,this}divideInPlace(t){if(t===0)throw new Error("Division by zero");return this.x/=t,this.y/=t,this}normalizeInPlace(){let t=this.length();return t===0?(this.x=0,this.y=0):(this.x/=t,this.y/=t),this}};var He=(e=>(e[e.Keyboard=0]="Keyboard",e[e.Mouse=1]="Mouse",e[e.Gamepad=2]="Gamepad",e[e.Touch=3]="Touch",e[e.TVRemote=4]="TVRemote",e[e.TextInput=5]="TextInput",e[e.Motion=6]="Motion",e[e.TouchZone=7]="TouchZone",e))(He||{}),Ke=(e=>(e[e.KeyA=0]="KeyA",e[e.KeyB=1]="KeyB",e[e.KeyC=2]="KeyC",e[e.KeyD=3]="KeyD",e[e.KeyE=4]="KeyE",e[e.KeyF=5]="KeyF",e[e.KeyG=6]="KeyG",e[e.KeyH=7]="KeyH",e[e.KeyI=8]="KeyI",e[e.KeyJ=9]="KeyJ",e[e.KeyK=10]="KeyK",e[e.KeyL=11]="KeyL",e[e.KeyM=12]="KeyM",e[e.KeyN=13]="KeyN",e[e.KeyO=14]="KeyO",e[e.KeyP=15]="KeyP",e[e.KeyQ=16]="KeyQ",e[e.KeyR=17]="KeyR",e[e.KeyS=18]="KeyS",e[e.KeyT=19]="KeyT",e[e.KeyU=20]="KeyU",e[e.KeyV=21]="KeyV",e[e.KeyW=22]="KeyW",e[e.KeyX=23]="KeyX",e[e.KeyY=24]="KeyY",e[e.KeyZ=25]="KeyZ",e[e.Digit0=26]="Digit0",e[e.Digit1=27]="Digit1",e[e.Digit2=28]="Digit2",e[e.Digit3=29]="Digit3",e[e.Digit4=30]="Digit4",e[e.Digit5=31]="Digit5",e[e.Digit6=32]="Digit6",e[e.Digit7=33]="Digit7",e[e.Digit8=34]="Digit8",e[e.Digit9=35]="Digit9",e[e.ArrowUp=36]="ArrowUp",e[e.ArrowDown=37]="ArrowDown",e[e.ArrowLeft=38]="ArrowLeft",e[e.ArrowRight=39]="ArrowRight",e[e.Space=40]="Space",e[e.Enter=41]="Enter",e[e.Escape=42]="Escape",e[e.Backspace=43]="Backspace",e[e.Tab=44]="Tab",e[e.ShiftLeft=45]="ShiftLeft",e[e.ShiftRight=46]="ShiftRight",e[e.ControlLeft=47]="ControlLeft",e[e.ControlRight=48]="ControlRight",e[e.AltLeft=49]="AltLeft",e[e.AltRight=50]="AltRight",e[e.MetaLeft=51]="MetaLeft",e[e.MetaRight=52]="MetaRight",e[e.CapsLock=53]="CapsLock",e[e.Delete=54]="Delete",e[e.Insert=55]="Insert",e[e.Home=56]="Home",e[e.End=57]="End",e[e.PageUp=58]="PageUp",e[e.PageDown=59]="PageDown",e[e.F1=60]="F1",e[e.F2=61]="F2",e[e.F3=62]="F3",e[e.F4=63]="F4",e[e.F5=64]="F5",e[e.F6=65]="F6",e[e.F7=66]="F7",e[e.F8=67]="F8",e[e.F9=68]="F9",e[e.F10=69]="F10",e[e.F11=70]="F11",e[e.F12=71]="F12",e[e.Minus=72]="Minus",e[e.Equal=73]="Equal",e[e.BracketLeft=74]="BracketLeft",e[e.BracketRight=75]="BracketRight",e[e.Backslash=76]="Backslash",e[e.Semicolon=77]="Semicolon",e[e.Quote=78]="Quote",e[e.Comma=79]="Comma",e[e.Period=80]="Period",e[e.Slash=81]="Slash",e[e.Backquote=82]="Backquote",e[e.Numpad0=91]="Numpad0",e[e.Numpad1=92]="Numpad1",e[e.Numpad2=93]="Numpad2",e[e.Numpad3=94]="Numpad3",e[e.Numpad4=95]="Numpad4",e[e.Numpad5=96]="Numpad5",e[e.Numpad6=97]="Numpad6",e[e.Numpad7=98]="Numpad7",e[e.Numpad8=99]="Numpad8",e[e.Numpad9=100]="Numpad9",e[e.NumpadAdd=101]="NumpadAdd",e[e.NumpadSubtract=102]="NumpadSubtract",e[e.NumpadMultiply=103]="NumpadMultiply",e[e.NumpadDivide=104]="NumpadDivide",e[e.NumpadDecimal=105]="NumpadDecimal",e[e.NumpadEnter=106]="NumpadEnter",e[e.NumLock=107]="NumLock",e[e.PrintScreen=111]="PrintScreen",e[e.ScrollLock=112]="ScrollLock",e[e.Pause=113]="Pause",e[e.ContextMenu=114]="ContextMenu",e))(Ke||{});var We=(e=>(e[e.LeftButton=0]="LeftButton",e[e.MiddleButton=1]="MiddleButton",e[e.RightButton=2]="RightButton",e[e.Button4=3]="Button4",e[e.Button5=4]="Button5",e[e.PositionX=100]="PositionX",e[e.PositionY=101]="PositionY",e[e.DeltaX=102]="DeltaX",e[e.DeltaY=103]="DeltaY",e[e.WheelDeltaY=104]="WheelDeltaY",e[e.WheelDeltaX=105]="WheelDeltaX",e))(We||{});var Ge=(e=>(e[e.ButtonA=0]="ButtonA",e[e.ButtonB=1]="ButtonB",e[e.ButtonX=2]="ButtonX",e[e.ButtonY=3]="ButtonY",e[e.LeftShoulder=4]="LeftShoulder",e[e.RightShoulder=5]="RightShoulder",e[e.LeftTrigger=6]="LeftTrigger",e[e.RightTrigger=7]="RightTrigger",e[e.Select=8]="Select",e[e.Start=9]="Start",e[e.LeftStick=10]="LeftStick",e[e.RightStick=11]="RightStick",e[e.DPadUp=12]="DPadUp",e[e.DPadDown=13]="DPadDown",e[e.DPadLeft=14]="DPadLeft",e[e.DPadRight=15]="DPadRight",e[e.Home=16]="Home",e[e.Touchpad=17]="Touchpad",e[e.LeftStickX=100]="LeftStickX",e[e.LeftStickY=101]="LeftStickY",e[e.RightStickX=102]="RightStickX",e[e.RightStickY=103]="RightStickY",e[e.LeftTriggerAxis=104]="LeftTriggerAxis",e[e.RightTriggerAxis=105]="RightTriggerAxis",e))(Ge||{});var Qe=(e=>(e[e.Touch0=0]="Touch0",e[e.Touch1=1]="Touch1",e[e.Touch2=2]="Touch2",e[e.Touch3=3]="Touch3",e[e.Touch4=4]="Touch4",e[e.Touch5=5]="Touch5",e[e.Touch6=6]="Touch6",e[e.Touch7=7]="Touch7",e[e.Touch8=8]="Touch8",e[e.Touch9=9]="Touch9",e[e.Touch0X=100]="Touch0X",e[e.Touch0Y=101]="Touch0Y",e[e.Touch1X=102]="Touch1X",e[e.Touch1Y=103]="Touch1Y",e[e.Touch2X=104]="Touch2X",e[e.Touch2Y=105]="Touch2Y",e[e.Touch3X=106]="Touch3X",e[e.Touch3Y=107]="Touch3Y",e[e.Touch4X=108]="Touch4X",e[e.Touch4Y=109]="Touch4Y",e[e.Touch5X=110]="Touch5X",e[e.Touch5Y=111]="Touch5Y",e[e.Touch6X=112]="Touch6X",e[e.Touch6Y=113]="Touch6Y",e[e.Touch7X=114]="Touch7X",e[e.Touch7Y=115]="Touch7Y",e[e.Touch8X=116]="Touch8X",e[e.Touch8Y=117]="Touch8Y",e[e.Touch9X=118]="Touch9X",e[e.Touch9Y=119]="Touch9Y",e[e.PinchScale=200]="PinchScale",e[e.RotationAngle=201]="RotationAngle",e[e.SwipeVelocityX=202]="SwipeVelocityX",e[e.SwipeVelocityY=203]="SwipeVelocityY",e))(Qe||{});var je=(e=>(e[e.Zone0=0]="Zone0",e[e.Zone1=1]="Zone1",e[e.Zone2=2]="Zone2",e[e.Zone3=3]="Zone3",e[e.Zone4=4]="Zone4",e[e.Zone5=5]="Zone5",e[e.Zone6=6]="Zone6",e[e.Zone7=7]="Zone7",e[e.Zone8=8]="Zone8",e[e.Zone9=9]="Zone9",e[e.Zone10=10]="Zone10",e[e.Zone11=11]="Zone11",e[e.Zone12=12]="Zone12",e[e.Zone13=13]="Zone13",e[e.Zone14=14]="Zone14",e[e.Zone15=15]="Zone15",e[e.Zone16=16]="Zone16",e[e.Zone17=17]="Zone17",e[e.Zone18=18]="Zone18",e[e.Zone19=19]="Zone19",e[e.Zone20=20]="Zone20",e[e.Zone21=21]="Zone21",e[e.Zone22=22]="Zone22",e[e.Zone23=23]="Zone23",e[e.Zone24=24]="Zone24",e[e.Zone25=25]="Zone25",e[e.Zone26=26]="Zone26",e[e.Zone27=27]="Zone27",e[e.Zone28=28]="Zone28",e[e.Zone29=29]="Zone29",e[e.Zone30=30]="Zone30",e[e.Zone31=31]="Zone31",e[e.Zone0X=100]="Zone0X",e[e.Zone0Y=101]="Zone0Y",e[e.Zone1X=102]="Zone1X",e[e.Zone1Y=103]="Zone1Y",e[e.Zone2X=104]="Zone2X",e[e.Zone2Y=105]="Zone2Y",e[e.Zone3X=106]="Zone3X",e[e.Zone3Y=107]="Zone3Y",e[e.Zone4X=108]="Zone4X",e[e.Zone4Y=109]="Zone4Y",e[e.Zone5X=110]="Zone5X",e[e.Zone5Y=111]="Zone5Y",e[e.Zone6X=112]="Zone6X",e[e.Zone6Y=113]="Zone6Y",e[e.Zone7X=114]="Zone7X",e[e.Zone7Y=115]="Zone7Y",e[e.Zone8X=116]="Zone8X",e[e.Zone8Y=117]="Zone8Y",e[e.Zone9X=118]="Zone9X",e[e.Zone9Y=119]="Zone9Y",e[e.Zone10X=120]="Zone10X",e[e.Zone10Y=121]="Zone10Y",e[e.Zone11X=122]="Zone11X",e[e.Zone11Y=123]="Zone11Y",e[e.Zone12X=124]="Zone12X",e[e.Zone12Y=125]="Zone12Y",e[e.Zone13X=126]="Zone13X",e[e.Zone13Y=127]="Zone13Y",e[e.Zone14X=128]="Zone14X",e[e.Zone14Y=129]="Zone14Y",e[e.Zone15X=130]="Zone15X",e[e.Zone15Y=131]="Zone15Y",e[e.Zone16X=132]="Zone16X",e[e.Zone16Y=133]="Zone16Y",e[e.Zone17X=134]="Zone17X",e[e.Zone17Y=135]="Zone17Y",e[e.Zone18X=136]="Zone18X",e[e.Zone18Y=137]="Zone18Y",e[e.Zone19X=138]="Zone19X",e[e.Zone19Y=139]="Zone19Y",e[e.Zone20X=140]="Zone20X",e[e.Zone20Y=141]="Zone20Y",e[e.Zone21X=142]="Zone21X",e[e.Zone21Y=143]="Zone21Y",e[e.Zone22X=144]="Zone22X",e[e.Zone22Y=145]="Zone22Y",e[e.Zone23X=146]="Zone23X",e[e.Zone23Y=147]="Zone23Y",e[e.Zone24X=148]="Zone24X",e[e.Zone24Y=149]="Zone24Y",e[e.Zone25X=150]="Zone25X",e[e.Zone25Y=151]="Zone25Y",e[e.Zone26X=152]="Zone26X",e[e.Zone26Y=153]="Zone26Y",e[e.Zone27X=154]="Zone27X",e[e.Zone27Y=155]="Zone27Y",e[e.Zone28X=156]="Zone28X",e[e.Zone28Y=157]="Zone28Y",e[e.Zone29X=158]="Zone29X",e[e.Zone29Y=159]="Zone29Y",e[e.Zone30X=160]="Zone30X",e[e.Zone30Y=161]="Zone30Y",e[e.Zone31X=162]="Zone31X",e[e.Zone31Y=163]="Zone31Y",e))(je||{});var qe=(e=>(e[e.DPadUp=0]="DPadUp",e[e.DPadDown=1]="DPadDown",e[e.DPadLeft=2]="DPadLeft",e[e.DPadRight=3]="DPadRight",e[e.DPadCenter=4]="DPadCenter",e[e.Play=5]="Play",e[e.Pause=6]="Pause",e[e.PlayPause=7]="PlayPause",e[e.Stop=8]="Stop",e[e.Rewind=9]="Rewind",e[e.FastForward=10]="FastForward",e[e.Previous=11]="Previous",e[e.Next=12]="Next",e[e.Record=13]="Record",e[e.VolumeUp=15]="VolumeUp",e[e.VolumeDown=16]="VolumeDown",e[e.Mute=17]="Mute",e[e.ChannelUp=18]="ChannelUp",e[e.ChannelDown=19]="ChannelDown",e[e.Back=20]="Back",e[e.Home=21]="Home",e[e.Menu=22]="Menu",e[e.Info=23]="Info",e[e.Guide=24]="Guide",e[e.Exit=25]="Exit",e[e.Red=30]="Red",e[e.Green=31]="Green",e[e.Yellow=32]="Yellow",e[e.Blue=33]="Blue",e[e.Digit0=40]="Digit0",e[e.Digit1=41]="Digit1",e[e.Digit2=42]="Digit2",e[e.Digit3=43]="Digit3",e[e.Digit4=44]="Digit4",e[e.Digit5=45]="Digit5",e[e.Digit6=46]="Digit6",e[e.Digit7=47]="Digit7",e[e.Digit8=48]="Digit8",e[e.Digit9=49]="Digit9",e[e.Input=50]="Input",e[e.Settings=51]="Settings",e[e.Subtitle=52]="Subtitle",e[e.Audio=53]="Audio",e[e.Power=54]="Power",e[e.PointerX=100]="PointerX",e[e.PointerY=101]="PointerY",e[e.GyroX=102]="GyroX",e[e.GyroY=103]="GyroY",e[e.GyroZ=104]="GyroZ",e))(qe||{});function Ue(){return{axes:new Map,buttons:new Map,displayId:0,mouseX:0,mouseY:0,mouseOverDisplay:!1,isTabHidden:!1,textInputs:[],displayViewports:[],touchPositions:[]}}function Ce(e){return Math.round(Math.max(-1,Math.min(1,e))*127)}function Se(e){return Math.max(-1,Math.min(1,e/127))}function ue(e){return Math.ceil(e/8)}var Je=(e=>(e.TerminalGL="webgl",e.Terminal2D="terminal2d",e.TerminalANSI="ansi",e))(Je||{}),ce=(e=>(e[e.None=0]="None",e[e.Eighth=1]="Eighth",e[e.Quarter=2]="Quarter",e[e.Half=3]="Half",e[e.Integer=4]="Integer",e[e.Responsive=5]="Responsive",e))(ce||{});var u=(e=>(e[e.Char=1]="Char",e[e.Text=2]="Text",e[e.SubFrame=3]="SubFrame",e[e.SubFrameMulti=4]="SubFrameMulti",e[e.FullFrame=5]="FullFrame",e[e.FullFrameMulti=6]="FullFrameMulti",e[e.Sprite=7]="Sprite",e[e.SpriteMulti=8]="SpriteMulti",e[e.ColorMap=9]="ColorMap",e[e.Shape=10]="Shape",e[e.DotCloud=11]="DotCloud",e[e.DotCloudMulti=12]="DotCloudMulti",e[e.SpriteCloud=13]="SpriteCloud",e[e.SpriteCloudMulti=14]="SpriteCloudMulti",e[e.SpriteCloudVaried=15]="SpriteCloudVaried",e[e.SpriteCloudVariedMulti=16]="SpriteCloudVariedMulti",e[e.Bitmask=17]="Bitmask",e[e.Bitmask4=18]="Bitmask4",e[e.Fill=19]="Fill",e[e.FillChar=20]="FillChar",e[e.FillSprite=21]="FillSprite",e[e.FillSpriteMulti=22]="FillSpriteMulti",e[e.TextMultiline=23]="TextMultiline",e[e.Bitmask16=24]="Bitmask16",e[e.Polyline=25]="Polyline",e[e.Audio=32]="Audio",e[e.Vibration=33]="Vibration",e[e.PostProcess=34]="PostProcess",e))(u||{}),U=(e=>(e[e.Rectangle=1]="Rectangle",e[e.Circle=2]="Circle",e[e.Line=3]="Line",e[e.Ellipse=4]="Ellipse",e[e.Triangle=5]="Triangle",e))(U||{}),_e=(e=>(e[e.FastPath=255]="FastPath",e[e.Fragment=254]="Fragment",e))(_e||{});var et=(e=>(e[e.Enabled=1]="Enabled",e[e.SetMode=2]="SetMode",e[e.Position=4]="Position",e[e.ZOrder=8]="ZOrder",e[e.Orders=16]="Orders",e[e.IsMacroLayer=32]="IsMacroLayer",e[e.Is16BitMode=64]="Is16BitMode",e))(et||{}),tt=(e=>(e.WAITING_FOR_WELCOME="waiting_for_welcome",e.AUTHENTICATING="authenticating",e.LOADING="loading",e.ACTIVE="active",e.DISCONNECTED="disconnected",e))(tt||{});var ee={trace:0,debug:1,info:2,warn:3,error:4,silent:5},O=[],ge="info",re=new Map,V=new Map,rt=typeof performance<"u"&&typeof performance.now=="function"?()=>performance.now():()=>Date.now(),te=null;function ke(e){let t=null,r=-1;for(let[i,s]of re)if(it(i,e)){let a=i.length;a>r&&(r=a,t=s)}return t??ge}function it(e,t){if(e==="*")return!0;if(e.endsWith(":*")){let r=e.slice(0,-1);return t===e.slice(0,-2)||t.startsWith(r)}return e===t}function xe(){for(let[e,t]of V)t.c(ke(e))}var Y=class G{namespace;r;i;s;constructor(t,r,i){this.namespace=t,this.i=r,this.s=i,this.r=ee[ke(t)]}static create(t){let r=V.get(t);return r||(r=new G(t),V.set(t,r)),r}child(t){return G.create(`${this.namespace}:${t}`)}forClient(t,r){let i=`${this.namespace}:client:${t}`,s=V.get(i);return s?(s.i=t,s.s=r):(s=new G(i,t,r),V.set(i,s)),s}static dispose(t){V.delete(t)}trace(t,r){this.n("trace",t,r)}debug(t,r){this.n("debug",t,r)}info(t,r){this.n("info",t,r)}warn(t,r){this.n("warn",t,r)}error(t,r){this.n("error",t,r)}isEnabled(t){return ee[t]>=this.r}c(t){this.r=ee[t]}n(t,r,i){if(ee[t]<this.r||O.length===0)return;let s=typeof r=="function"?r():r,a={timestamp:rt(),level:t,namespace:this.namespace,message:s};te!==null&&(a.tick=te()),i!==void 0&&(a.data=i),this.i!==void 0&&(a.clientId=this.i),this.s!==void 0&&(a.username=this.s);for(let o=0;o<O.length;o++)O[o](a)}static setLevel(t,r){r===void 0?ge=t:re.set(t,r),xe()}static clearLevelOverrides(){re.clear(),xe()}static enable(t){G.setLevel(t,"trace")}static disable(t){G.setLevel(t,"silent")}static addHandler(t){return O.push(t),()=>{let r=O.indexOf(t);r!==-1&&O.splice(r,1)}}static clearHandlers(){O.length=0}static get handlerCount(){return O.length}static setTickProvider(t){te=t}static reset(){O.length=0,re.clear(),V.clear(),ge="info",te=null}},q="\x1B[0m",st={trace:"\x1B[90m",debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},at="\x1B[35m",Me="\x1B[2m",ot="\x1B[93m",nt={trace:"color:#888",debug:"color:#0cc",info:"color:#0a0",warn:"color:#cc0",error:"color:#c00;font-weight:bold"},lt="color:#c0c;font-weight:bold",Ie="color:#888",dt="color:#c90;font-weight:bold",ve={trace:"debug",debug:"debug",info:"info",warn:"warn",error:"error"},ht=typeof globalThis<"u"&&typeof globalThis.process=="object"&&typeof globalThis.process?.versions=="object";function fe(e,t){return String(e).padStart(t,"0")}function Be(e){let t=Math.floor(e/1e3)%60,r=Math.floor(e/6e4)%60,i=Math.floor(e%1e3);return`${fe(r,2)}:${fe(t,2)}.${fe(i,3)}`}function Te(e){return e.toUpperCase().padEnd(5)}function Fe(e){if(e.clientId===void 0)return"";let t=e.username?`/${e.username}`:"";return` [client:${e.clientId}${t}]`}function ut(e){let t=`${Me}${Be(e.timestamp)}${q}`,r=e.tick!==void 0?` ${ot}#${e.tick}${q}`:"",i=`${st[e.level]}${Te(e.level)}${q}`,s=`${at}${e.namespace}${q}`,a=e.clientId!==void 0?`${Me}${Fe(e)}${q}`:"",o=ve[e.level],l=`${t}${r} ${i} ${s}${a}`;e.data!==void 0?console[o](l,e.message,e.data):console[o](l,e.message)}function ct(e){let t=ve[e.level],r=Fe(e),i=e.tick!==void 0?` %c#${e.tick}`:"",s=e.tick!==void 0?[dt]:[],a=`%c${Be(e.timestamp)}${i} %c${Te(e.level)} %c${e.namespace}%c${r} %c${e.message}`,o=[Ie,...s,nt[e.level],lt,Ie,""];e.data!==void 0?console[t](a,...o,e.data):console[t](a,...o)}var ft=ht?ut:ct;Y.handlerCount===0&&Y.addHandler(ft);var Ht=255,Kt=256,me=class Pe{width;height;size;data;constructor(t,r){this.width=t,this.height=r,this.size=t*r,this.data=new Uint32Array(this.size)}clear(){this.data.fill(255<<24|255<<16|0)}fill(t,r,i){let s=i<<24|r<<16|t;this.data.fill(s)}setSafe(t,r,i,s,a){t<0||t>=this.width||r<0||r>=this.height||(this.data[r*this.width+t]=a<<24|s<<16|i)}set(t,r,i,s){this.data[t]=s<<24|i<<16|r}setPacked(t,r){this.data[t]=r}get(t){return this.data[t]}unpack(t){let r=this.data[t];return{char:r&65535,fg:r>>>16&255,bg:r>>>24&255}}clone(){let t=new Pe(this.width,this.height);return t.data.set(this.data),t}},gt=class{static pack(e,t,r){return r<<24|t<<16|e}static getChar(e){return e&65535}static getFg(e){return e>>>16&255}static getBg(e){return e>>>24&255}},pt=class{rasterize(e,t,r){for(let i of t)this.executeOrder(e,i,r)}executeOrder(e,t,r){switch(t.type){case u.Char:this.drawChar(e,t);break;case u.Text:this.drawText(e,t);break;case u.TextMultiline:this.drawTextMultiline(e,t);break;case u.SubFrame:this.drawSubFrame(e,t);break;case u.SubFrameMulti:this.drawSubFrameMulti(e,t);break;case u.FullFrame:this.drawFullFrame(e,t);break;case u.FullFrameMulti:this.drawFullFrameMulti(e,t);break;case u.ColorMap:this.drawColorMap(e,t);break;case u.DotCloud:this.drawDotCloud(e,t);break;case u.DotCloudMulti:this.drawDotCloudMulti(e,t);break;case u.SpriteCloud:this.drawSpriteCloud(e,t,r);break;case u.SpriteCloudMulti:this.drawSpriteCloudMulti(e,t,r);break;case u.SpriteCloudVaried:this.drawSpriteCloudVaried(e,t,r);break;case u.SpriteCloudVariedMulti:this.drawSpriteCloudVariedMulti(e,t,r);break;case u.Bitmask:this.drawBitmask(e,t);break;case u.Bitmask4:this.drawBitmask4(e,t);break;case u.Bitmask16:this.drawBitmask16(e,t);break;case u.Polyline:this.drawPolyline(e,t);break;case u.Fill:this.drawFill(e,t);break;case u.FillChar:this.drawFillChar(e,t);break;case u.FillSprite:this.drawFillSprite(e,t,r);break;case u.FillSpriteMulti:this.drawFillSpriteMulti(e,t,r);break;case u.Sprite:this.drawSprite(e,t,r);break;case u.SpriteMulti:this.drawSpriteMulti(e,t,r);break;case u.Shape:this.drawShape(e,t);break}}drawChar(e,t){let{x:r,y:i,char:s,fg:a,bg:o}=t;e.setSafe(r,i,s,a,o)}drawText(e,t){let{x:r,y:i,text:s,fg:a,bg:o}=t;if(typeof s=="string")for(let l=0;l<s.length;l++){let n=s.charCodeAt(l);e.setSafe(r+l,i,n,a,o)}}drawTextMultiline(e,t){let{x:r,y:i,text:s,fg:a,bg:o}=t;if(typeof s!="string")return;let l=s.split(`
|
|
2
|
+
`);for(let n=0;n<l.length;n++){let d=l[n];for(let h=0;h<d.length;h++){let c=d.charCodeAt(h);e.setSafe(r+h,i+n,c,a,o)}}}drawSubFrame(e,t){let{x:r,y:i,width:s,height:a,frame:o,fg:l,bg:n}=t;for(let d=0;d<a;d++)for(let h=0;h<s;h++){let c=d*s+h;c<o.length&&e.setSafe(r+h,i+d,o[c],l,n)}}drawSubFrameMulti(e,t){let{x:r,y:i,width:s,height:a,frame:o}=t;for(let l=0;l<a;l++)for(let n=0;n<s;n++){let d=l*s+n;if(d<o.length){let h=o[d];e.setSafe(r+n,i+l,h.char,h.fg,h.bg)}}}drawFullFrame(e,t){let{frame:r,fg:i,bg:s}=t,a=e.width,o=e.height,l=0;for(let n=0;n<o;n++)for(let d=0;d<a;d++){if(l>=r.length)return;e.setSafe(d,n,r[l],i,s),l++}}drawFullFrameMulti(e,t){let{frame:r}=t,i=e.width,s=e.height,a=0;for(let o=0;o<s;o++)for(let l=0;l<i;l++){if(a>=r.length)return;let n=r[a];e.setSafe(l,o,n.char,n.fg,n.bg),a++}}drawColorMap(e,t){let{x:r,y:i,width:s,height:a,data:o}=t;for(let l=0;l<a;l++)for(let n=0;n<s;n++){let d=l*s+n;if(d<o.length){let h=o[d];if(r+n>=0&&r+n<e.width&&i+l>=0&&i+l<e.height){let c=(i+l)*e.width+(r+n),f=e.data[c]&65535;e.data[c]=h.bg<<24|h.fg<<16|f}}}}drawFill(e,t){let{char:r,fg:i,bg:s,x:a,y:o,width:l,height:n}=t,d=a??0,h=o??0,c=l??e.width,f=n??e.height;if(d===0&&h===0&&c===e.width&&f===e.height){let g=s<<24|i<<16|r&65535;e.data.fill(g);return}for(let g=h;g<h+f;g++)for(let p=d;p<d+c;p++)e.setSafe(p,g,r,i,s)}drawFillChar(e,t){let{patternWidth:r,patternHeight:i,pattern:s,fg:a,bg:o}=t;if(!(r<=0||i<=0))for(let l=0;l<e.height;l++)for(let n=0;n<e.width;n++){let d=n%r,h=l%i,c=s[h*r+d];e.setSafe(n,l,c,a,o)}}drawFillSprite(e,t,r){if(!r)return;let i=r.getUnicolorSprite(t.spriteId);if(i)for(let s=0;s<e.height;s+=i.height)for(let a=0;a<e.width;a+=i.width)for(let o=0;o<i.height;o++)for(let l=0;l<i.width;l++){let n=i.data[o*i.width+l];e.setSafe(a+l,s+o,n,t.fg,t.bg)}}drawFillSpriteMulti(e,t,r){if(!r)return;let i=r.getMulticolorSprite(t.spriteId);if(i)for(let s=0;s<e.height;s+=i.height)for(let a=0;a<e.width;a+=i.width)for(let o=0;o<i.height;o++)for(let l=0;l<i.width;l++){let n=i.data[o*i.width+l],d=a+l,h=s+o;d>=0&&d<e.width&&h>=0&&h<e.height&&(e.data[h*e.width+d]=n)}}drawSprite(e,t,r){if(!r)return;let{x:i,y:s,spriteId:a,fg:o,bg:l}=t,n=r.getUnicolorSprite(a);if(n)for(let d=0;d<n.height;d++)for(let h=0;h<n.width;h++){let c=n.data[d*n.width+h];e.setSafe(i+h,s+d,c,o,l)}}drawSpriteMulti(e,t,r){if(!r)return;let{x:i,y:s,spriteId:a}=t,o=r.getMulticolorSprite(a);if(o)for(let l=0;l<o.height;l++)for(let n=0;n<o.width;n++){let d=o.data[l*o.width+n],h=i+n,c=s+l;h>=0&&h<e.width&&c>=0&&c<e.height&&(e.data[c*e.width+h]=d)}}drawDotCloud(e,t){let{positions:r,char:i,fg:s,bg:a}=t;for(let o of r)e.setSafe(o.x,o.y,i,s,a)}drawDotCloudMulti(e,t){for(let r of t.dots)e.setSafe(r.x,r.y,r.char,r.fg,r.bg)}drawSpriteCloud(e,t,r){if(!r)return;let i=r.getUnicolorSprite(t.spriteId);if(i)for(let s of t.positions)for(let a=0;a<i.height;a++)for(let o=0;o<i.width;o++){let l=i.data[a*i.width+o];e.setSafe(s.x+o,s.y+a,l,t.fg,t.bg)}}drawSpriteCloudMulti(e,t,r){if(!r)return;let i=r.getMulticolorSprite(t.spriteId);if(i)for(let s of t.positions)for(let a=0;a<i.height;a++)for(let o=0;o<i.width;o++){let l=i.data[a*i.width+o],n=s.x+o,d=s.y+a;n>=0&&n<e.width&&d>=0&&d<e.height&&(e.data[d*e.width+n]=l)}}drawSpriteCloudVaried(e,t,r){if(r)for(let i of t.sprites){let s=r.getUnicolorSprite(i.spriteId);if(s)for(let a=0;a<s.height;a++)for(let o=0;o<s.width;o++){let l=s.data[a*s.width+o];e.setSafe(i.x+o,i.y+a,l,i.fg,i.bg)}}}drawSpriteCloudVariedMulti(e,t,r){if(r)for(let i of t.sprites){let s=r.getMulticolorSprite(i.spriteId);if(s)for(let a=0;a<s.height;a++)for(let o=0;o<s.width;o++){let l=s.data[a*s.width+o],n=i.x+o,d=i.y+a;n>=0&&n<e.width&&d>=0&&d<e.height&&(e.data[d*e.width+n]=l)}}}drawBitmask(e,t){let{x:r,y:i,width:s,height:a,mask:o,char:l,fg:n,bg:d,override:h}=t;for(let c=0;c<a;c++)for(let f=0;f<s;f++){let g=c*s+f,p=g>>3,w=g&7;o[p]&1<<w?e.setSafe(r+f,i+c,l,n,d):h&&e.setSafe(r+f,i+c,0,255,255)}}drawBitmask4(e,t){let{x:r,y:i,width:s,height:a,mask:o,variants:l,override:n}=t;for(let d=0;d<a;d++)for(let h=0;h<s;h++){let c=d*s+h,f=c>>2,g=(c&3)*2,p=o[f]>>g&3;if(p>0){let w=l[p-1];w&&e.setSafe(r+h,i+d,w.char,w.fg,w.bg)}else n&&e.setSafe(r+h,i+d,0,255,255)}}drawBitmask16(e,t){let{x:r,y:i,width:s,height:a,mask:o,variants:l,override:n}=t;for(let d=0;d<a;d++)for(let h=0;h<s;h++){let c=d*s+h,f=c>>1,g=(c&1)*4,p=o[f]>>g&15;if(p>0){let w=l[p-1];w&&e.setSafe(r+h,i+d,w.char,w.fg,w.bg)}else n&&e.setSafe(r+h,i+d,0,255,255)}}drawPolyline(e,t){let{points:r,char:i,fg:s,bg:a}=t;if(!(r.length<2))for(let o=0;o<r.length-1;o++){let l=r[o],n=r[o+1];this.drawLineBresenham(e,l.x,l.y,n.x,n.y,i,s,a)}}drawLineBresenham(e,t,r,i,s,a,o,l){let n=Math.abs(i-t),d=Math.abs(s-r),h=t<i?1:-1,c=r<s?1:-1,f=n-d;for(;e.setSafe(t,r,a,o,l),!(t===i&&r===s);){let g=2*f;g>-d&&(f-=d,t+=h),g<n&&(f+=n,r+=c)}}drawShape(e,t){switch(t.shapeType){case U.Rectangle:this.drawRectangle(e,t);break;case U.Circle:this.drawCircle(e,t);break;case U.Line:t.x1!==void 0&&t.y1!==void 0&&t.x2!==void 0&&t.y2!==void 0&&this.drawLineBresenham(e,t.x1,t.y1,t.x2,t.y2,t.char,t.fg,t.bg);break;case U.Ellipse:this.drawEllipse(e,t);break;case U.Triangle:this.drawTriangle(e,t);break}}drawRectangle(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x??0,l=t.y??0,n=t.width??0,d=t.height??0;if(a)for(let h=l;h<l+d;h++)for(let c=o;c<o+n;c++)e.setSafe(c,h,r,i,s);else{for(let h=o;h<o+n;h++)e.setSafe(h,l,r,i,s),e.setSafe(h,l+d-1,r,i,s);for(let h=l+1;h<l+d-1;h++)e.setSafe(o,h,r,i,s),e.setSafe(o+n-1,h,r,i,s)}}drawCircle(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x??0,l=t.y??0,n=t.radius??0;if(n<=0)return;let d=n,h=0,c=0;for(;d>=h;){if(a){for(let f=o-d;f<=o+d;f++)e.setSafe(f,l+h,r,i,s);for(let f=o-d;f<=o+d;f++)e.setSafe(f,l-h,r,i,s);for(let f=o-h;f<=o+h;f++)e.setSafe(f,l+d,r,i,s);for(let f=o-h;f<=o+h;f++)e.setSafe(f,l-d,r,i,s)}else e.setSafe(o+d,l+h,r,i,s),e.setSafe(o+h,l+d,r,i,s),e.setSafe(o-h,l+d,r,i,s),e.setSafe(o-d,l+h,r,i,s),e.setSafe(o-d,l-h,r,i,s),e.setSafe(o-h,l-d,r,i,s),e.setSafe(o+h,l-d,r,i,s),e.setSafe(o+d,l-h,r,i,s);c<=0&&(h+=1,c+=2*h+1),c>0&&(d-=1,c-=2*d+1)}}drawEllipse(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x??0,l=t.y??0,n=t.radiusX??t.radius??0,d=t.radiusY??t.radius??0;if(n<=0||d<=0)return;let h=0,c=d,f=d*d-n*n*d+.25*n*n,g=2*d*d*h,p=2*n*n*c;for(;g<p;){if(a)for(let m=o-h;m<=o+h;m++)e.setSafe(m,l+c,r,i,s),e.setSafe(m,l-c,r,i,s);else e.setSafe(o+h,l+c,r,i,s),e.setSafe(o-h,l+c,r,i,s),e.setSafe(o+h,l-c,r,i,s),e.setSafe(o-h,l-c,r,i,s);f<0?(h++,g+=2*d*d,f+=g+d*d):(h++,c--,g+=2*d*d,p-=2*n*n,f+=g-p+d*d)}let w=d*d*((h+.5)*(h+.5))+n*n*((c-1)*(c-1))-n*n*d*d;for(;c>=0;){if(a)for(let m=o-h;m<=o+h;m++)e.setSafe(m,l+c,r,i,s),e.setSafe(m,l-c,r,i,s);else e.setSafe(o+h,l+c,r,i,s),e.setSafe(o-h,l+c,r,i,s),e.setSafe(o+h,l-c,r,i,s),e.setSafe(o-h,l-c,r,i,s);w>0?(c--,p-=2*n*n,w+=n*n-p):(c--,h++,g+=2*d*d,p-=2*n*n,w+=g-p+n*n)}}drawTriangle(e,t){let{char:r,fg:i,bg:s,filled:a}=t,o=t.x1??0,l=t.y1??0,n=t.x2??0,d=t.y2??0,h=t.x3??0,c=t.y3??0;if(!a){this.drawLineBresenham(e,o,l,n,d,r,i,s),this.drawLineBresenham(e,n,d,h,c,r,i,s),this.drawLineBresenham(e,h,c,o,l,r,i,s);return}let f=o,g=l,p=n,w=d,m=h,k=c;if(g>w){let x=f;f=p,p=x,x=g,g=w,w=x}if(g>k){let x=f;f=m,m=x,x=g,g=k,k=x}if(w>k){let x=p;p=m,m=x,x=w,w=k,k=x}let Z=k-g;if(Z!==0)for(let x=0;x<Z;x++){let D=x>w-g||w===g,z=D?k-w:w-g,L=x/Z,R=(x-(D?w-g:0))/z,E=Math.floor(f+(m-f)*L),B;if(D?B=Math.floor(p+(m-p)*R):B=Math.floor(f+(p-f)*R),E>B){let X=E;E=B,B=X}for(let X=E;X<=B;X++)e.setSafe(X,g+x,r,i,s)}}},yt=class Oe{id=0;grid;x=0;y=0;origin;zIndex=0;visible=!0;opacity=1;name;isMacroLayer;width;height;mustBeReliable=!1;spriteRegistry;charCodeMode;is16bit;pendingOrders=[];enabled=!0;needsCommit=!1;static rasterizer=new pt;constructor(t,r,i,s,a){i<1||i>256||s<1||s>256;let o={};typeof a=="boolean"?o={mustBeReliable:a}:a&&(o=a),this.origin=t,this.x=t.x,this.y=t.y,this.zIndex=r,this.name=o.name,this.width=i,this.height=s,this.mustBeReliable=o.mustBeReliable??!1,this.isMacroLayer=o.isMacroLayer??!1,this.charCodeMode=o.charCodeMode??"8bit",this.is16bit=this.charCodeMode==="16bit",this.grid=new me(i,s),this.grid.clear()}setId(t){this.id=t}setSpriteRegistry(t){this.spriteRegistry=t}resize(t,r){this.grid=new me(t,r),this.width=t,this.height=r}getMustBeReliable(){return this.mustBeReliable}getName(){return this.name}getIsMacroLayer(){return this.isMacroLayer}getWidth(){return this.width}getHeight(){return this.height}getOrigin(){return this.origin}setOrders(t){this.pendingOrders=t,this.grid.clear(),Oe.rasterizer.rasterize(this.grid,t,this.spriteRegistry),this.needsCommit=!0}getPendingOrders(){return this.pendingOrders}clearPendingOrders(){this.pendingOrders.length=0}commit(){this.needsCommit=!0}getNeedsCommit(){return this.needsCommit}clearCommit(){this.needsCommit=!1}isEnabled(){return this.enabled}},wt=class{id;x=0;y=0;width;height;cellWidth=8;cellHeight=8;postProcess={};scalingMode=ce.None;activePaletteSlot=0;renderPasses;constructor(e,t,r){this.id=e,this.width=t,this.height=r}teleport(e,t){this.x=e,this.y=t}resize(e,t){this.width=e,this.height=t}setCellSize(e,t){this.cellWidth=Math.max(1,Math.min(255,Math.round(e))),this.cellHeight=Math.max(1,Math.min(255,Math.round(t)))}getCellSize(){return{cellWidth:this.cellWidth,cellHeight:this.cellHeight}}setScalingMode(e){this.scalingMode=e}setAmbientEffect(e){this.postProcess.ambientEffect||(this.postProcess.ambientEffect={enabled:!1,blur:30,scale:1.3}),typeof e=="boolean"?this.postProcess.ambientEffect.enabled=e:this.postProcess.ambientEffect={...this.postProcess.ambientEffect,...e,enabled:!0}}setPostProcess(e){if(e===null){this.postProcess={};return}this.postProcess={...this.postProcess,...e}}setOrigin(e){this.x=e.x,this.y=e.y}switchPalette(e){this.activePaletteSlot=e}setRenderPasses(e){if(!e||e.length===0){this.renderPasses=void 0;return}if(e.length>4)throw new Error(`Display.setRenderPasses: max 4 passes, got ${e.length}`);this.renderPasses=e.map(t=>this.normalizePass(t))}getRenderPasses(){return this.renderPasses}normalizePass(e){let t=Math.max(0,Math.min(255,e.zMin)),r=Math.max(0,Math.min(255,e.zMax));if(t>r){let i=t;t=r,r=i}return{id:e.id,zMin:t,zMax:r,enabled:e.enabled!==!1}}},Re=class{axes=new Map;buttons=new Map;touchZones=new Map;axisNameToId=new Map;buttonNameToId=new Map;touchZoneNameToId=new Map;version=1;n=null;s=null;o=null;defineAxis(e,t,r=[],i=-1,s=1,a=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))throw new Error(`Axis name "${t}" is already defined`);let o={bindingId:e,name:t,min:i,max:s,defaultValue:a,sources:r};this.axes.set(e,o),this.axisNameToId.set(t,e),this.n=null,this.version++}defineButton(e,t,r=[],i=!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))throw new Error(`Button name "${t}" is already defined`);let s={bindingId:e,name:t,defaultValue:i,sources:r};this.buttons.set(e,s),this.buttonNameToId.set(t,e),this.s=null,this.version++}defineTouchZone(e,t,r,i,s,a){if(e<0||e>31)throw new Error(`Touch zone zoneId must be between 0 and 31, got ${e}`);if(this.touchZones.has(e))throw new Error(`Touch zone zoneId ${e} is already defined`);if(this.touchZoneNameToId.has(t))throw new Error(`Touch zone name "${t}" is already defined`);let o={zoneId:e,name:t,x:r,y:i,width:s,height:a};this.touchZones.set(e,o),this.touchZoneNameToId.set(t,e),this.o=null,this.version++}evaluateAxis(e,t){let r=this.axes.get(e);if(!r)return 0;let i=0;for(let s of r.sources){let a=t.get(s.sourceId)??0,o=s.deadzone??0;Math.abs(a)<o?a=0:a=(a>0?1:-1)*((Math.abs(a)-o)/(1-o)),a*=(s.scale??1)*(s.sensitivity??1),s.invert&&(a=-a),i+=a}return Math.max(r.min,Math.min(r.max,i))}evaluateButton(e,t){let r=this.buttons.get(e);if(!r)return!1;for(let i of r.sources)if(t.get(i.sourceId)===!0)return!0;return r.defaultValue}toLoadPacket(){return{type:"input-binding",version:this.version,axes:Array.from(this.axes.values()),buttons:Array.from(this.buttons.values()),touchZones:this.touchZones.size>0?Array.from(this.touchZones.values()):void 0}}getAllAxes(){return this.n||(this.n=Array.from(this.axes.values()).sort((e,t)=>e.bindingId-t.bindingId)),this.n}getAllButtons(){return this.s||(this.s=Array.from(this.buttons.values()).sort((e,t)=>e.bindingId-t.bindingId)),this.s}getAllTouchZones(){return this.o||(this.o=Array.from(this.touchZones.values()).sort((e,t)=>e.zoneId-t.zoneId)),this.o}getAxisCount(){return this.axes.size}getButtonCount(){return this.buttons.size}getAxisId(e){return this.axisNameToId.get(e)??null}getButtonId(e){return this.buttonNameToId.get(e)??null}clear(){this.axes.clear(),this.buttons.clear(),this.touchZones.clear(),this.axisNameToId.clear(),this.buttonNameToId.clear(),this.touchZoneNameToId.clear(),this.n=null,this.s=null,this.o=null,this.version++}},mt=class{id;name;data={};bridgeInbox=[];d=new Map;u=new Map;e=new Map;isTabHidden=!1;layers=new Map;displays=new Map;nextLayerId=1;t=null;i=null;spriteRegistry;macroRegistry=null;commandQueue=[];l=[];nextSoundInstanceId=1;axes=new Map;buttons=new Map;justPressed=new Set;justReleased=new Set;mouseX=0;mouseY=0;activeDisplay=0;mouseOver=!1;constructor(e,t){this.id=e,this.name=t}setSpriteRegistry(e){this.spriteRegistry=e;for(let t of this.layers.values())t.setSpriteRegistry(e)}addLayer(e,t){let r=this.nextLayerId++;e.setId(r),this.layers.set(e.id,e),this.t=null,this.spriteRegistry&&e.setSpriteRegistry(this.spriteRegistry)}addDisplay(e){this.displays.set(e.id,e),this.i=null}getMouseDisplayInfo(){return this.mouseOver?{localX:this.mouseX,localY:this.mouseY,displayId:this.activeDisplay}:null}inputRegistry=new Re;getInputBindingRegistry(){return this.inputRegistry}applyInput(e,t){this.mouseX=e.mouseX,this.mouseY=e.mouseY,this.mouseOver=e.mouseOverDisplay,this.activeDisplay=e.displayId;for(let r of t.getAllAxes()){let i=e.axes.get(r.bindingId)??r.defaultValue;this.axes.set(r.name,i)}for(let r of t.getAllButtons()){let i=e.buttons.get(r.bindingId)??r.defaultValue,s=this.buttons.get(r.name)??!1;i&&!s?this.justPressed.add(r.name):!i&&s&&this.justReleased.add(r.name),this.buttons.set(r.name,i)}}poll(){this.justPressed.clear(),this.justReleased.clear(),this.commandQueue.length=0}playSound(e,t){let r=this.nextSoundInstanceId++,i={type:u.Audio,sound:e,instanceId:r,...t};return this.commandQueue.push(i),r}stopSound(e){let t={type:u.Audio,sound:e,stop:!0};this.commandQueue.push(t)}stopAllSounds(){let e={type:u.Audio,sound:"all",stop:!0};this.commandQueue.push(e)}fadeOutSound(e,t){let r={type:u.Audio,sound:e,fadeOut:t};this.commandQueue.push(r)}fadeOutAllSounds(e){let t={type:u.Audio,sound:"all",fadeOut:e};this.commandQueue.push(t)}pauseSound(e){let t={type:u.Audio,sound:e,pause:!0};this.commandQueue.push(t)}pauseAllSounds(){let e={type:u.Audio,sound:"all",pause:!0};this.commandQueue.push(e)}resumeSound(e){let t={type:u.Audio,sound:e,resume:!0};this.commandQueue.push(t)}resumeAllSounds(){let e={type:u.Audio,sound:"all",resume:!0};this.commandQueue.push(e)}setSoundEffects(e,t){let r={type:u.Audio,sound:e,...t};this.commandQueue.push(r)}setListenerPosition(e,t){let r={type:u.Audio,sound:"__listener_position__",x:e,y:t};this.commandQueue.push(r)}configureSpatialAudio(e){let t={type:u.Audio,sound:"__configure_spatial__",...e};this.commandQueue.push(t)}sendSounds(){this.m=!0}m=!1;vibrate(e){let t={type:u.Vibration,pattern:e};this.commandQueue.push(t)}vibrateGamepad(e){let t={type:u.Vibration,target:"gamepad",gamepadIndex:e.gamepadIndex??0,duration:e.duration,strongMagnitude:e.strongMagnitude??1,weakMagnitude:e.weakMagnitude??1,startDelay:e.startDelay??0};this.commandQueue.push(t)}setPostProcess(e,t){let r=this.displays.get(e);r&&r.setPostProcess(t)}setAmbientEffect(e,t){let r=this.displays.get(e);r&&r.setAmbientEffect(t)}setScalingMode(e,t){let r=this.displays.get(e);r&&r.setScalingMode(t)}switchPalette(e,t){let r=this.displays.get(e);r&&r.switchPalette(t)}setOrigin(e,t){let r=this.displays.get(e);r&&r.setOrigin(t)}flushCommands(){let e=this.commandQueue;return this.commandQueue=this.l,this.l=e,this.commandQueue.length=0,e}getAxis(e){return this.axes.get(e)??0}getButton(e){return this.buttons.get(e)??!1}isJustPressed(e){return this.justPressed.has(e)}isJustReleased(e){return this.justReleased.has(e)}createLayer(e,t,r){if(this.layers.has(e))throw new Error(`Layer ${e} already exists`);let i=new yt(new be(0,0),0,t,r);return i.setId(e),this.layers.set(e,i),this.t=null,i}getLayer(e){return this.layers.get(e)}removeLayer(e){let t=this.layers.delete(e);return t&&(this.t=null),t}getLayers(){return this.t===null&&(this.t=Array.from(this.layers.values())),this.t}createDisplay(e,t,r){if(this.displays.has(e))throw new Error(`Display ${e} already exists`);let i=new wt(e,t,r);return this.displays.set(e,i),this.i=null,i}getDisplay(e){return this.displays.get(e)}removeDisplay(e){let t=this.displays.delete(e);return t&&(this.i=null),t}getDisplays(){return this.i===null&&(this.i=Array.from(this.displays.values())),this.i}defineButton(e,t,r,i=!1){this.inputRegistry.defineButton(e,t,r,i)}defineAxis(e,t,r,i=-1,s=1,a=0){this.inputRegistry.defineAxis(e,t,r,i,s,a)}handleAudioAck(e){switch(e.type){case"sound-loaded":this.d.set(e.soundId,{name:e.name,loadedAt:Date.now()}),this.u.delete(e.soundId);break;case"sound-error":this.u.set(e.soundId,{name:e.name,error:e.error,at:Date.now()});break;case"playback-started":this.e.set(e.instanceId,{soundId:e.soundId,startedAt:Date.now()});break;case"playback-ended":this.e.delete(e.instanceId);break;case"playback-error":e.instanceId!=null&&this.e.delete(e.instanceId);break}}isSoundLoaded(e){return this.d.has(e)}getLoadedSounds(){return this.d}getSoundLoadError(e){return this.u.get(e)?.error}getSoundLoadErrors(){return this.u}isSoundPlaying(e){return this.e.has(e)}getPlayingSounds(){return this.e}getPlayingSoundCount(){return this.e.size}setMacroRegistry(e){this.macroRegistry=e}getMacroRegistry(){return this.macroRegistry}loadMacro(e,t){if(!this.macroRegistry)throw new Error("MacroRegistry not set");return this.macroRegistry.registerTemplate(e,t)}createMacroInstance(e){if(!this.macroRegistry)throw new Error("MacroRegistry not set");return this.macroRegistry.createInstance(e)}updateMacroInstance(e,t){this.macroRegistry?.updateInstance(e,t)}removeMacroInstance(e){this.macroRegistry?.removeInstance(e)}pauseMacroInstance(e){this.macroRegistry?.pauseInstance(e)}resumeMacroInstance(e){this.macroRegistry?.resumeInstance(e)}onMacroEvent(e,t,r){this.macroRegistry?.onEvent(e,t,r)}handleMacroFeedback(e){this.macroRegistry?.handleFeedback(e)}},bt=Y.create("core:update-builder"),Jt=class{buffer;view;offset=0;textEncoder=new TextEncoder;constructor(e=1024){this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer)}serialize(e){this.offset=0;let t=e.flushCommands();this.writeUint8(Math.min(t.length,255));for(let r of t)this.writeOrder(r);return this.buffer.slice(0,this.offset)}writeOrder(e){switch(this.writeUint8(e.type),e.type){case u.Audio:this.writeAudioOrder(e);break;case u.Vibration:this.writeVibrationOrder(e);break;case u.PostProcess:this.writePostProcessOrder(e);break;default:bt.warn(`Unsupported order type ${e.type}`);break}}writeAudioOrder(e){typeof e.sound=="number"?(this.writeUint8(0),this.writeUint16(e.sound)):(this.writeUint8(1),this.writeString(e.sound)),this.writeUint16(e.instanceId??0);let t=0;e.stop&&(t|=1),e.pause&&(t|=2),e.resume&&(t|=4),e.loop&&(t|=8),this.writeUint8(t),this.writeUint8(Math.floor((e.volume??1)*255)),this.writeUint8(Math.floor((e.pitch??1)*100)),this.writeInt16(e.x??0),this.writeInt16(e.y??0)}writeVibrationOrder(e){if("target"in e&&e.target==="gamepad"){this.writeUint8(0);return}let t=Array.isArray(e.pattern)?e.pattern:[e.pattern];this.writeUint8(Math.min(t.length,255));for(let r of t)this.writeUint16(r)}writePostProcessOrder(e){this.writeUint8(e.displayId),this.writeUint8(e.enabled?1:0),this.writeUint8(Math.min(255,Math.floor((e.bloom??0)*100))),this.writeUint8(Math.min(255,Math.floor((e.chromaticAberration??0)*100))),this.writeUint8(Math.min(255,Math.floor((e.scanlineOpacity??0)*255)))}ensureCapacity(e){if(this.offset+e>this.buffer.length){let t=Math.max(this.buffer.length*2,this.offset+e),r=new Uint8Array(t);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}writeUint8(e){this.ensureCapacity(1),this.buffer[this.offset++]=e}writeUint16(e){this.ensureCapacity(2),this.view.setUint16(this.offset,e,!1),this.offset+=2}writeInt16(e){this.ensureCapacity(2),this.view.setInt16(this.offset,e,!1),this.offset+=2}writeString(e){let t=this.textEncoder.encode(e);this.writeUint8(Math.min(t.length,255)),this.ensureCapacity(t.length),this.buffer.set(t,this.offset),this.offset+=t.length}},Ut=Y.create("core:update-parser"),tr=class{textDecoder=new TextDecoder;parse(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),r=0,i=[];if(r>=e.byteLength)return i;let s=e[r++];for(let a=0;a<s&&!(r>=e.byteLength);a++){let o=this.parseOrder(e,t,r);if(o)i.push(o.order),r=o.newOffset;else break}return i}parseOrder(e,t,r){let i=e[r++];switch(i){case u.Audio:return this.parseAudioOrder(e,t,r);case u.Vibration:return this.parseVibrationOrder(e,t,r);case u.PostProcess:return this.parsePostProcessOrder(e,t,r);default:return Ut.warn(`Unsupported order type ${i}`),null}}parseAudioOrder(e,t,r){let i=e[r++],s;if(i===0)s=t.getUint16(r,!1),r+=2;else{let w=e[r++];s=this.textDecoder.decode(e.slice(r,r+w)),r+=w}let a=t.getUint16(r,!1);r+=2;let o=e[r++],l=(o&1)!==0,n=(o&2)!==0,d=(o&4)!==0,h=(o&8)!==0,c=e[r++]/255,f=e[r++]/100,g=t.getInt16(r,!1);r+=2;let p=t.getInt16(r,!1);return r+=2,{order:{type:u.Audio,sound:s,instanceId:a,volume:c,pitch:f,loop:h,stop:l,pause:n,resume:d,x:g,y:p},newOffset:r}}parseVibrationOrder(e,t,r){let i=e[r++],s=[];for(let a=0;a<i;a++)s.push(t.getUint16(r,!1)),r+=2;return{order:{type:u.Vibration,pattern:s},newOffset:r}}parsePostProcessOrder(e,t,r){let i=e[r++],s=e[r++]!==0,a=e[r++]/100,o=e[r++]/100,l=e[r++]/255;return{order:{type:u.PostProcess,displayId:i,enabled:s,bloom:a,chromaticAberration:o,scanlineOpacity:l},newOffset:r}}},Ct=new TextDecoder;function ir(e){let t=Array.from(e.axes.entries()).sort((p,w)=>p[0]-w[0]),r=Array.from(e.buttons.entries()).sort((p,w)=>p[0]-w[0]),i=ue(r.length),s=new TextEncoder,a=e.textInputs.map(p=>s.encode(p)),o=1+a.reduce((p,w)=>p+1+w.length,0),l=1+e.displayViewports.length*5,n=1+e.touchPositions.length*4,d=2+t.length+i+4+o+l+n,h=new Uint8Array(d),c=new DataView(h.buffer),f=0;h[f++]=t.length&255,h[f++]=r.length&255;for(let[,p]of t)h[f++]=Ce(p)+256&255;for(let p=0;p<i;p++){let w=0;for(let m=0;m<8;m++){let k=p*8+m;k<r.length&&r[k][1]&&(w|=1<<m)}h[f++]=w}h[f++]=e.displayId&255,h[f++]=e.mouseX&255,h[f++]=e.mouseY&255;let g=0;e.mouseOverDisplay&&(g|=1),e.isTabHidden&&(g|=2),h[f++]=g,h[f++]=Math.min(a.length,255);for(let p of a){let w=Math.min(p.length,255);h[f++]=w,h.set(p.slice(0,w),f),f+=w}h[f++]=Math.min(e.displayViewports.length,255);for(let p of e.displayViewports)h[f++]=p.displayId&255,c.setUint16(f,p.pixelWidth,!1),f+=2,c.setUint16(f,p.pixelHeight,!1),f+=2;h[f++]=Math.min(e.touchPositions.length,255);for(let p of e.touchPositions)h[f++]=p.id&15,h[f++]=p.x&255,h[f++]=p.y&255,h[f++]=p.over?1:0;return h}function sr(e,t){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=0,s=Ue(),a=e[i++],o=e[i++],l=ue(o);for(let d=0;d<a;d++){let h=e[i++],c=h>127?h-256:h;s.axes.set(d,Se(c))}for(let d=0;d<l;d++){let h=e[i++];for(let c=0;c<8;c++){let f=d*8+c;f<o&&s.buttons.set(f,(h&1<<c)!==0)}}s.displayId=e[i++],s.mouseX=e[i++],s.mouseY=e[i++];let n=e[i++];if(s.mouseOverDisplay=(n&1)!==0,s.isTabHidden=(n&2)!==0,i<e.length){let d=e[i++];for(let h=0;h<d;h++){let c=e[i++];s.textInputs.push(Ct.decode(e.subarray(i,i+c))),i+=c}}if(i<e.length){let d=e[i++];for(let h=0;h<d;h++){let c=e[i++],f=r.getUint16(i,!1);i+=2;let g=r.getUint16(i,!1);i+=2,s.displayViewports.push({displayId:c,pixelWidth:f,pixelHeight:g})}}if(i<e.length){let d=e[i++];for(let h=0;h<d;h++){let c=e[i++]&15,f=e[i++],g=e[i++],p=(e[i++]&1)!==0;s.touchPositions.push({id:c,x:f,y:g,over:p})}}return s}var Ye=[[0,0],[9786,1],[9787,2],[9829,3],[9830,4],[9827,5],[9824,6],[8226,7],[9688,8],[9675,9],[9689,10],[9794,11],[9792,12],[9834,13],[9835,14],[9788,15],[9658,16],[9668,17],[8597,18],[8252,19],[182,20],[167,21],[9644,22],[8616,23],[8593,24],[8595,25],[8594,26],[8592,27],[8735,28],[8596,29],[9650,30],[9660,31],[8962,127],[199,128],[252,129],[233,130],[226,131],[228,132],[224,133],[229,134],[231,135],[234,136],[235,137],[232,138],[239,139],[238,140],[236,141],[196,142],[197,143],[201,144],[230,145],[198,146],[244,147],[246,148],[242,149],[251,150],[249,151],[255,152],[214,153],[220,154],[162,155],[163,156],[165,157],[8359,158],[402,159],[225,160],[237,161],[243,162],[250,163],[241,164],[209,165],[170,166],[186,167],[191,168],[8976,169],[172,170],[189,171],[188,172],[161,173],[171,174],[187,175],[9617,176],[9618,177],[9619,178],[9474,179],[9508,180],[9569,181],[9570,182],[9558,183],[9557,184],[9571,185],[9553,186],[9559,187],[9565,188],[9564,189],[9563,190],[9488,191],[9492,192],[9524,193],[9516,194],[9500,195],[9472,196],[9532,197],[9566,198],[9567,199],[9562,200],[9556,201],[9577,202],[9574,203],[9568,204],[9552,205],[9580,206],[9575,207],[9576,208],[9572,209],[9573,210],[9561,211],[9560,212],[9554,213],[9555,214],[9579,215],[9578,216],[9496,217],[9484,218],[9608,219],[9604,220],[9612,221],[9616,222],[9600,223],[945,224],[223,225],[915,226],[960,227],[931,228],[963,229],[181,230],[964,231],[934,232],[920,233],[937,234],[948,235],[8734,236],[966,237],[949,238],[8745,239],[8801,240],[177,241],[8805,242],[8804,243],[8992,244],[8993,245],[247,246],[8776,247],[176,248],[8729,249],[183,250],[8730,251],[8319,252],[178,253],[9632,254],[160,255]],ze=new Map(Ye),St=new Map(Ye.map(([e,t])=>[t,e]));function N(e){if(e<128)return e;let t=ze.get(e);return t!==void 0?t:e&255}function ar(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=N(e.charCodeAt(r));return t}function xt(e){let t=e&255;return t<128?t:St.get(t)??t}function or(e){return String.fromCharCode(xt(e))}function nr(e){return e<128?!0:ze.has(e)}function lr(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(N(e.charCodeAt(r)));return t}var Mt=class{unicolorSprites=new Map;multicolorSprites=new Map;loadUnicolorSprites(e){for(let t of e){let{spriteId:r,width:i,height:s,data:a}=t,o=new Uint16Array(i*s);if(typeof a=="string"){let n=a.replace(/\n/g,"");for(let d=0;d<Math.min(n.length,i*s);d++)o[d]=N(n.charCodeAt(d))}else if(Array.isArray(a)&&a.length>0&&typeof a[0]=="string"){let n=a;for(let d=0;d<Math.min(n.length,s);d++){let h=n[d];if(h)for(let c=0;c<Math.min(h.length,i);c++)o[d*i+c]=N(h.charCodeAt(c))}}else{let n=a;for(let d=0;d<Math.min(n.length,i*s);d++)o[d]=n[d]}let l={id:r,width:i,height:s,data:o};this.unicolorSprites.set(l.id,l)}}loadMulticolorSprites(e){for(let t of e){let{spriteId:r,width:i,height:s,data:a}=t,o=new Uint32Array(i*s);for(let n=0;n<Math.min(a.length,i*s);n++){let d=a[n],h=0;typeof d.charCode=="string"?h=N(d.charCode.charCodeAt(0)):h=d.charCode||0;let c=d.fgColorId||0,f=d.bgColorId||0;o[n]=gt.pack(h,c,f)}let l={id:r,width:i,height:s,data:o};this.multicolorSprites.set(l.id,l)}}getUnicolorSprite(e){return this.unicolorSprites.get(e)}getMulticolorSprite(e){return this.multicolorSprites.get(e)}hasUnicolorSprite(e){return this.unicolorSprites.has(e)}hasMulticolorSprite(e){return this.multicolorSprites.has(e)}clearAll(){this.unicolorSprites.clear(),this.multicolorSprites.clear()}},It=(e=>(e.Bitmap="bitmap",e.Image="image",e))(It||{});function Le(e){return Math.sqrt(e)*16}function kt(e){return e*256-1}function dr(e,t){let r=Le(e)*t;return{width:r,height:r}}var vt=class{constructor(e,t){this.fontId=e,this.config=t,this.atlasColumns=Le(t.atlasBlocks),this.maxCharCode=kt(t.atlasBlocks)}atlasColumns;maxCharCode;blocks=new Map;addBlock(e,t){if(e<0||e>=this.config.atlasBlocks)throw new Error(`Invalid block index ${e} for font with ${this.config.atlasBlocks} blocks`);this.blocks.set(e,t)}getBlock(e){return this.blocks.get(e)}getFontId(){return this.fontId}getConfig(){return{glyphWidth:this.config.glyphWidth,glyphHeight:this.config.glyphHeight,cellWidth:this.config.cellWidth,cellHeight:this.config.cellHeight,atlasBlocks:this.config.atlasBlocks}}getGlyphWidth(){return this.config.glyphWidth}getGlyphHeight(){return this.config.glyphHeight}getCellWidth(){return this.config.cellWidth??this.config.glyphWidth}getCellHeight(){return this.config.cellHeight??this.config.glyphHeight}getAtlasBlocks(){return this.config.atlasBlocks}getAtlasColumns(){return this.atlasColumns}getMaxCharCode(){return this.maxCharCode}getAtlasDimensions(){return{width:this.atlasColumns*this.config.glyphWidth,height:this.atlasColumns*this.config.glyphHeight}}getCharUV(e){if(e<0||e>this.maxCharCode)return null;let t=e%this.atlasColumns,r=Math.floor(e/this.atlasColumns),i=t/this.atlasColumns,s=r/this.atlasColumns,a=(t+1)/this.atlasColumns,o=(r+1)/this.atlasColumns;return{u1:i,v1:s,u2:a,v2:o}}isValidCharCode(e){return e>=0&&e<=this.maxCharCode}},Bt=class{fonts=new Map;nameToId=new Map;nextId=0;allocateId(e){if(this.nextId>255)throw new Error(`Cannot register font "${e}": maximum 256 fonts reached`);return this.nextId++}registerFont(e,t){if(this.nameToId.has(e))throw new Error(`ImageFont with name "${e}" already exists`);let r=this.allocateId(e),i={glyphWidth:t.glyphWidth,glyphHeight:t.glyphHeight,cellWidth:t.cellWidth,cellHeight:t.cellHeight,atlasBlocks:t.atlasBlocks??1},s=new vt(r,i);return this.fonts.set(r,s),this.nameToId.set(e,r),r}unregisterFont(e){let t=this.nameToId.get(e);t!==void 0&&(this.fonts.delete(t),this.nameToId.delete(e))}hasFont(e){return this.nameToId.has(e)}addBlock(e,t,r){let i=this.fonts.get(e);if(!i)throw new Error(`ImageFont with ID ${e} not found`);i.addBlock(t,r)}getFont(e){return this.fonts.get(e)}getFontByName(e){let t=this.nameToId.get(e);if(t!==void 0)return this.fonts.get(t)}getFontId(e){return this.nameToId.get(e)}getAllFonts(){return Array.from(this.fonts.values())}getFontName(e){for(let[t,r]of this.nameToId)if(r===e)return t}},Tt=class{sounds=new Map;nameToId=new Map;nextId=0;registerFile(e,t,r){let i=this.allocateId(e),s={soundId:i,name:e,loadType:"file",format:t,data:r};return this.addEntry(s),i}registerExternal(e,t,r,i,s){let a=this.allocateId(e),o={soundId:a,name:e,loadType:"external",format:t,url:r,size:i,checksum:s};return this.addEntry(o),a}get(e){if(typeof e=="number")return this.sounds.get(e);let t=this.nameToId.get(e);return t!==void 0?this.sounds.get(t):void 0}has(e){return this.get(e)!==void 0}toLoadPackets(){let e=[],t=Array.from(this.sounds.values()),r=t.length,i=t.filter(a=>a.loadType==="file");i.length>0&&e.push({type:"sound",mode:"file",sounds:i.map(a=>({soundId:a.soundId,name:a.name,format:a.format,data:a.data})),totalSounds:r});let s=t.filter(a=>a.loadType==="external");return s.length>0&&e.push({type:"sound",mode:"external",sounds:s.map(a=>({soundId:a.soundId,name:a.name,format:a.format,url:a.url,size:a.size,checksum:a.checksum})),totalSounds:r}),e}allocateId(e){if(this.nameToId.has(e))throw new Error(`Sound with name "${e}" already exists`);for(;this.sounds.has(this.nextId);)if(this.nextId++,this.nextId>255)throw new Error("Maximum number of sounds (256) reached");return this.nextId++}addEntry(e){this.sounds.set(e.soundId,e),this.nameToId.set(e.name,e.soundId)}},Ee=Y.create("core:macro-registry"),Ft=class{templates=new Map;templateNameToId=new Map;nextTemplateId=0;instances=new Map;instanceNameToId=new Map;nextInstanceId=1;pendingDefines=[];pendingOrders=[];feedbackHandlers=new Map;registerTemplate(e,t){if(this.templateNameToId.has(e))return this.templateNameToId.get(e);let r=this.nextTemplateId++;if(r>65535)throw new Error("Max 65535 macro templates");return this.templates.set(r,t),this.templateNameToId.set(e,r),this.pendingDefines.push({templateId:r,template:t}),Ee.debug(`Template registered: "${e}" \u2192 id=${r}`),r}getTemplate(e){if(typeof e=="string"){let t=this.templateNameToId.get(e);return t!==void 0?this.templates.get(t):void 0}return this.templates.get(e)}getTemplateId(e){return this.templateNameToId.get(e)}createInstance(e){let t=this.templateNameToId.get(e.macro);if(t===void 0)throw new Error(`Unknown macro template: "${e.macro}"`);let r=this.nextInstanceId++;if(r>65535)throw new Error("Max 65535 macro instances");let i={instanceId:r,templateId:t,layerId:e.layer,x:e.x,y:e.y,zIndex:e.zIndex??0,params:e.params??{},state:"running"};return this.instances.set(r,i),e.name&&this.instanceNameToId.set(e.name,r),this.pendingOrders.push({cmd:1,instanceId:r,templateId:t,layerId:e.layer,x:e.x,y:e.y,zIndex:e.zIndex??0,params:e.params??{}}),Ee.debug(`Instance created: id=${r} macro="${e.macro}" layer=${e.layer}`),r}updateInstance(e,t){let r=this.resolveInstanceId(e);if(r===void 0)return;let i=this.instances.get(r);i&&(Object.assign(i.params,t),this.pendingOrders.push({cmd:2,instanceId:r,params:t}))}removeInstance(e){let t=this.resolveInstanceId(e);if(t!==void 0){this.instances.delete(t);for(let[r,i]of this.instanceNameToId)if(i===t){this.instanceNameToId.delete(r);break}this.feedbackHandlers.delete(t),this.pendingOrders.push({cmd:3,instanceId:t})}}pauseInstance(e){let t=this.resolveInstanceId(e);if(t===void 0)return;let r=this.instances.get(t);r&&(r.state="paused"),this.pendingOrders.push({cmd:4,instanceId:t})}resumeInstance(e){let t=this.resolveInstanceId(e);if(t===void 0)return;let r=this.instances.get(t);r&&(r.state="running"),this.pendingOrders.push({cmd:5,instanceId:t})}getPendingDefines(){return this.pendingDefines}getPendingOrders(){return this.pendingOrders}clearPendingDefines(){this.pendingDefines.length=0}clearPendingOrders(){this.pendingOrders.length=0}getAllDefines(){let e=[];for(let[t,r]of this.templates)e.push({templateId:t,template:r});return e}getActiveInstanceOrders(){let e=[];for(let t of this.instances.values())e.push({cmd:1,instanceId:t.instanceId,templateId:t.templateId,layerId:t.layerId,x:t.x,y:t.y,zIndex:t.zIndex,params:t.params});return e}onEvent(e,t,r){let i=this.resolveInstanceId(e);if(i===void 0)return;let s=this.feedbackHandlers.get(i);s||(s=new Map,this.feedbackHandlers.set(i,s));let a=s.get(t);a||(a=[],s.set(t,a)),a.push(r)}handleFeedback(e){let t=this.feedbackHandlers.get(e.instanceId);if(!t)return;let r,i;switch(e.cmd){case 1:r="click",i=void 0;break;case 2:r="change",i=e.value;break;case 3:r="submit",i=e.text;break;case 4:r="select",i=e.index;break;case 5:r="custom",i=e.data;break;default:return}let s=t.get(r);if(s)for(let a of s)a(i)}resolveInstanceId(e){return typeof e=="number"?e:this.instanceNameToId.get(e)}},Xe=class{buffer;view;offset=0;constructor(e=4096){this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer)}reset(){this.offset=0}ensure(e){if(this.offset+e>this.buffer.length){let t=this.buffer.length*2;for(;t<this.offset+e;)t*=2;let r=new Uint8Array(t);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}ensureAndGetBuffer(e){return this.ensure(e),this.buffer}writeU8(e){this.ensure(1),this.buffer[this.offset++]=e&255}writeI8(e){this.ensure(1),this.view.setInt8(this.offset,e),this.offset+=1}writeU16BE(e){this.ensure(2),this.view.setUint16(this.offset,e,!1),this.offset+=2}writeI16BE(e){this.ensure(2),this.view.setInt16(this.offset,e,!1),this.offset+=2}writeU16LE(e){this.ensure(2),this.view.setUint16(this.offset,e,!0),this.offset+=2}writeBytes(e){this.ensure(e.length),this.buffer.set(e,this.offset),this.offset+=e.length}toUint8Array(){return this.buffer.slice(0,this.offset)}getView(){return this.buffer.subarray(0,this.offset)}},Ae=new TextEncoder;function M(e,t,r){r?e.writeU16LE(t):e.writeU8(t&255)}var Et=class b{static p=new Xe(4096);static encode(t,r=!1){let i=b.p;i.reset();for(let s of t)b.encodeOne(i,s,r);return i.toUint8Array()}static encodeInto(t,r,i=!1){for(let s of r)b.encodeOne(t,s,i)}static encodeOne(t,r,i){switch(r.type){case u.Char:b.encodeChar(t,r,i);break;case u.Text:b.encodeText(t,r);break;case u.TextMultiline:b.encodeTextMultiline(t,r);break;case u.SubFrame:b.encodeSubFrame(t,r,i);break;case u.SubFrameMulti:b.encodeSubFrameMulti(t,r,i);break;case u.FullFrame:b.encodeFullFrame(t,r,i);break;case u.FullFrameMulti:b.encodeFullFrameMulti(t,r,i);break;case u.Sprite:b.encodeSprite(t,r);break;case u.SpriteMulti:b.encodeSpriteMulti(t,r);break;case u.ColorMap:b.encodeColorMap(t,r);break;case u.Shape:b.encodeShape(t,r,i);break;case u.Polyline:b.encodePolyline(t,r,i);break;case u.DotCloud:b.encodeDotCloud(t,r,i);break;case u.DotCloudMulti:b.encodeDotCloudMulti(t,r,i);break;case u.SpriteCloud:b.encodeSpriteCloud(t,r);break;case u.SpriteCloudMulti:b.encodeSpriteCloudMulti(t,r);break;case u.SpriteCloudVaried:b.encodeSpriteCloudVaried(t,r);break;case u.SpriteCloudVariedMulti:b.encodeSpriteCloudVariedMulti(t,r);break;case u.Bitmask:b.encodeBitmask(t,r,i);break;case u.Bitmask4:b.encodeBitmask4(t,r,i);break;case u.Bitmask16:b.encodeBitmask16(t,r,i);break;case u.Fill:b.encodeFill(t,r,i);break;case u.FillChar:b.encodeFillChar(t,r,i);break;case u.FillSprite:b.encodeFillSprite(t,r);break;case u.FillSpriteMulti:b.encodeFillSpriteMulti(t,r);break;default:break}}static encodeChar(t,r,i){t.writeU8(u.Char),t.writeU8(r.x),t.writeU8(r.y),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeText(t,r){t.writeU8(u.Text),t.writeU8(r.x),t.writeU8(r.y);let i=r.text.length*3,s=t.ensureAndGetBuffer(1+i),a=t.offset;t.offset++;let{written:o}=Ae.encodeInto(r.text,s.subarray(t.offset,t.offset+i));s[a]=o,t.offset+=o,t.writeU8(r.bg),t.writeU8(r.fg)}static encodeTextMultiline(t,r){t.writeU8(u.TextMultiline),t.writeU8(r.x),t.writeU8(r.y);let i=r.text.length*3,s=t.ensureAndGetBuffer(1+i),a=t.offset;t.offset++;let{written:o}=Ae.encodeInto(r.text,s.subarray(t.offset,t.offset+i));s[a]=o,t.offset+=o,t.writeU8(r.bg),t.writeU8(r.fg)}static encodeSubFrame(t,r,i){t.writeU8(u.SubFrame),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),t.writeU8(r.bg),t.writeU8(r.fg);for(let s of r.frame)M(t,s,i)}static encodeSubFrameMulti(t,r,i){t.writeU8(u.SubFrameMulti),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1);for(let s of r.frame)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg)}static encodeFullFrame(t,r,i){t.writeU8(u.FullFrame),t.writeU8(r.bg),t.writeU8(r.fg);for(let s of r.frame)M(t,s,i)}static encodeFullFrameMulti(t,r,i){t.writeU8(u.FullFrameMulti);for(let s of r.frame)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg)}static encodeSprite(t,r){t.writeU8(u.Sprite),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.spriteId),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeSpriteMulti(t,r){t.writeU8(u.SpriteMulti),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.spriteId)}static encodeColorMap(t,r){t.writeU8(u.ColorMap),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1);for(let i of r.data)t.writeU8(i.bg),t.writeU8(i.fg)}static encodeShape(t,r,i){switch(t.writeU8(u.Shape),t.writeU8(r.shapeType),r.shapeType){case U.Rectangle:t.writeU8(r.x??0),t.writeU8(r.y??0),t.writeU8((r.width??1)-1),t.writeU8((r.height??1)-1),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Circle:t.writeU8(r.x??0),t.writeU8(r.y??0),t.writeU8((r.radius??1)-1),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Line:t.writeU8(r.x1??0),t.writeU8(r.y1??0),t.writeU8(r.x2??0),t.writeU8(r.y2??0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Ellipse:t.writeU8(r.x??0),t.writeU8(r.y??0),t.writeU8((r.radiusX??1)-1),t.writeU8((r.radiusY??1)-1),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break;case U.Triangle:t.writeU8(r.x1??0),t.writeU8(r.y1??0),t.writeU8(r.x2??0),t.writeU8(r.y2??0),t.writeU8(r.x3??0),t.writeU8(r.y3??0),t.writeU8(r.filled?1:0),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg);break}}static encodePolyline(t,r,i){t.writeU8(u.Polyline),M(t,r.char,i),t.writeU8(r.fg),t.writeU8(r.bg),t.writeU8(r.points.length);for(let s of r.points)t.writeU8(s.x),t.writeU8(s.y)}static encodeDotCloud(t,r,i){t.writeU8(u.DotCloud),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg),t.writeU16BE(r.positions.length);for(let s of r.positions)t.writeU8(s.x),t.writeU8(s.y)}static encodeDotCloudMulti(t,r,i){t.writeU8(u.DotCloudMulti),t.writeU16BE(r.dots.length);for(let s of r.dots)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg),t.writeU8(s.x),t.writeU8(s.y)}static encodeSpriteCloud(t,r){t.writeU8(u.SpriteCloud),t.writeU8(r.spriteId),t.writeU8(r.bg),t.writeU8(r.fg),t.writeU16BE(r.positions.length);for(let i of r.positions)t.writeU8(i.x),t.writeU8(i.y)}static encodeSpriteCloudMulti(t,r){t.writeU8(u.SpriteCloudMulti),t.writeU8(r.spriteId),t.writeU16BE(r.positions.length);for(let i of r.positions)t.writeU8(i.x),t.writeU8(i.y)}static encodeSpriteCloudVaried(t,r){t.writeU8(u.SpriteCloudVaried),t.writeU16BE(r.sprites.length);for(let i of r.sprites)t.writeU8(i.spriteId),t.writeU8(i.bg),t.writeU8(i.fg),t.writeU8(i.x),t.writeU8(i.y)}static encodeSpriteCloudVariedMulti(t,r){t.writeU8(u.SpriteCloudVariedMulti),t.writeU16BE(r.sprites.length);for(let i of r.sprites)t.writeU8(i.spriteId),t.writeU8(i.x),t.writeU8(i.y)}static encodeBitmask(t,r,i){t.writeU8(u.Bitmask),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg),t.writeU8(r.override?1:0),t.writeBytes(r.mask)}static encodeBitmask4(t,r,i){t.writeU8(u.Bitmask4),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),t.writeU8(r.override?1:0);for(let s of r.variants)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg);t.writeBytes(r.mask)}static encodeBitmask16(t,r,i){t.writeU8(u.Bitmask16),t.writeU8(r.x),t.writeU8(r.y),t.writeU8(r.width-1),t.writeU8(r.height-1),t.writeU8(r.override?1:0),t.writeU8(r.variants.length);for(let s of r.variants)M(t,s.char,i),t.writeU8(s.bg),t.writeU8(s.fg);t.writeBytes(r.mask)}static encodeFill(t,r,i){t.writeU8(u.Fill),M(t,r.char,i),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeFillChar(t,r,i){t.writeU8(u.FillChar),t.writeU8(r.patternWidth-1),t.writeU8(r.patternHeight-1),t.writeU8(r.bg),t.writeU8(r.fg);for(let s of r.pattern)M(t,s,i)}static encodeFillSprite(t,r){t.writeU8(u.FillSprite),t.writeU8(r.spriteId),t.writeU8(r.bg),t.writeU8(r.fg)}static encodeFillSpriteMulti(t,r){t.writeU8(u.FillSpriteMulti),t.writeU8(r.spriteId)}},ie=new TextEncoder,At=32,Zt=64,pe=[],ye=[],Q=[],j=[],Dt=[],Pt=[],Ot=new Xe(8192),we={reliable:new Uint8Array(0),volatile:new Uint8Array(0)},Ze=class F{static encode(t){let r=t.getDisplays(),i=t.getLayers(),s=t.flushCommands();pe.length=0,ye.length=0;for(let h of i)h.getNeedsCommit()&&(h.getMustBeReliable()?pe.push(h):ye.push(h));Q.length=0,j.length=0;for(let h of s)switch(h.type){case u.Audio:Q.push(h);break;case u.Vibration:j.push(h);break}let a=t.getMacroRegistry(),o=a?.getPendingOrders()??[],l=a?.getPendingDefines()??[],n=F.encodePacket(r,pe,Q,j,void 0,o,l),d=F.encodePacket(r,ye,Dt,Pt);return a?.clearPendingOrders(),a?.clearPendingDefines(),we.reliable=n,we.volatile=d,we}static encodeFull(t,r){let i=t.getDisplays(),s=t.getLayers(),a=t.flushCommands();Q.length=0,j.length=0;for(let h of a)switch(h.type){case u.Audio:Q.push(h);break;case u.Vibration:j.push(h);break}let o;if(r){o=new Map;for(let h of i){let c=h.activePaletteSlot;r.has(c)&&!o.has(c)&&o.set(c,r.get(c))}}let l=t.getMacroRegistry(),n=l?.getAllDefines()??[],d=l?.getActiveInstanceOrders()??[];return F.encodePacket(i,s,Q,j,o,d,n)}static encodePacket(t,r,i,s,a,o,l){let n=Ot;n.reset(),n.writeU8(t.length);for(let c of t){n.writeU8(c.id),n.writeI16BE(c.x),n.writeI16BE(c.y),n.writeU16BE(c.width),n.writeU16BE(c.height),n.writeU8(c.activePaletteSlot),n.writeU8(c.scalingMode),n.writeU8(c.cellWidth),n.writeU8(c.cellHeight);let f=c.renderPasses;if(f&&f.length>0){n.writeU8(f.length);for(let g of f)n.writeU8(g.id),n.writeU8(Math.max(0,Math.min(255,g.zMin))),n.writeU8(Math.max(0,Math.min(255,g.zMax))),n.writeU8(g.enabled!==!1?1:0)}else n.writeU8(0)}if(a&&a.size>0){n.writeU8(a.size);for(let[c,f]of a){n.writeU8(c);for(let g=0;g<256;g++){let p=f[g];p?(n.writeU8(p.r??0),n.writeU8(p.g??0),n.writeU8(p.b??0),n.writeU8(p.a??0)):(n.writeU8(0),n.writeU8(0),n.writeU8(0),n.writeU8(0))}}}else n.writeU8(0);n.writeU16BE(r.length);for(let c of r){n.writeU16BE(c.id);let f=0;c.getIsMacroLayer()&&(f|=At);let g=c.is16bit;g&&(f|=Zt),n.writeU8(f),n.writeI8(c.zIndex);let p=c.getOrigin();n.writeI16BE(p.x),n.writeI16BE(p.y),n.writeU16BE(c.getWidth()),n.writeU16BE(c.getHeight());let w=c.getPendingOrders();n.writeU16BE(w.length),w.length>0&&Et.encodeInto(n,w,g)}n.writeU8(Math.min(i.length,255));for(let c=0;c<Math.min(i.length,255);c++)F.encodeAudioOrder(n,i[c]);n.writeU8(Math.min(s.length,255));for(let c=0;c<Math.min(s.length,255);c++)F.encodeVibrationOrder(n,s[c]);let d=l??[];n.writeU16BE(d.length);for(let c of d)F.encodeMacroDefine(n,c);let h=o??[];n.writeU16BE(h.length);for(let c of h)F.encodeMacroOrder(n,c);return n.writeU8(0),n.toUint8Array()}static encodeAudioOrder(t,r){if(r.stop){t.writeU8(2),F.encodeSoundTarget(t,r.sound);return}if(r.fadeOut!==void 0){t.writeU8(3),F.encodeSoundTarget(t,r.sound),t.writeU16BE(Math.round(r.fadeOut*1e3));return}if(r.pause){t.writeU8(4),F.encodeSoundTarget(t,r.sound);return}if(r.resume){t.writeU8(5),F.encodeSoundTarget(t,r.sound);return}if(r.sound==="__listener_position__"){t.writeU8(7),t.writeI16BE(r.x??0),t.writeI16BE(r.y??0);return}if(r.sound==="__configure_spatial__"){t.writeU8(8),t.writeU16BE(r.maxDistance??100),t.writeU16BE(r.referenceDistance??1),t.writeU8(r.rolloffFactor??1),t.writeU8(r.panSpread??0);return}if(r.instanceId===void 0&&typeof r.sound=="number"&&(r.lowpass!==void 0||r.highpass!==void 0||r.reverb!==void 0||r.pitch!==void 0||r.volume!==void 0)){t.writeU8(6),t.writeU16BE(r.sound);let s=0;r.lowpass!==void 0&&(s|=1),r.highpass!==void 0&&(s|=2),r.reverb!==void 0&&(s|=4),r.pitch!==void 0&&(s|=8),r.volume!==void 0&&(s|=16),t.writeU8(s),r.lowpass!==void 0&&t.writeU16BE(Math.round(r.lowpass)),r.highpass!==void 0&&t.writeU16BE(Math.round(r.highpass)),r.reverb!==void 0&&t.writeU8(Math.round(r.reverb*255)),r.pitch!==void 0&&t.writeU8(Math.round(r.pitch*100)),r.volume!==void 0&&t.writeU8(Math.round(r.volume*255));return}t.writeU8(1),F.encodeSoundTarget(t,r.sound),t.writeU16BE(r.instanceId??0);let i=0;r.volume!==void 0&&(i|=1),r.pitch!==void 0&&(i|=2),r.fadeIn!==void 0&&(i|=4),r.x!==void 0&&r.y!==void 0&&(i|=8),r.lowpass!==void 0&&(i|=16),r.highpass!==void 0&&(i|=32),r.reverb!==void 0&&(i|=64),r.loop&&(i|=128),t.writeU8(i),r.volume!==void 0&&t.writeU8(Math.round(r.volume*255)),r.pitch!==void 0&&t.writeU8(Math.round(r.pitch*100)),r.fadeIn!==void 0&&t.writeU16BE(Math.round(r.fadeIn*1e3)),r.x!==void 0&&r.y!==void 0&&(t.writeI16BE(r.x),t.writeI16BE(r.y)),r.lowpass!==void 0&&t.writeU16BE(Math.round(r.lowpass)),r.highpass!==void 0&&t.writeU16BE(Math.round(r.highpass)),r.reverb!==void 0&&t.writeU8(Math.round(r.reverb*255))}static encodeSoundTarget(t,r){if(typeof r=="number")t.writeU8(0),t.writeU16BE(r);else if(r==="all")t.writeU8(1);else{t.writeU8(2);let i=ie.encode(r);t.writeU8(i.length),t.writeBytes(i)}}static encodeVibrationOrder(t,r){if("target"in r&&r.target==="gamepad")t.writeU8(1),t.writeU8(r.gamepadIndex),t.writeU16BE(r.duration),t.writeU8(Math.round(r.strongMagnitude*255)),t.writeU8(Math.round(r.weakMagnitude*255)),t.writeU16BE(r.startDelay);else{t.writeU8(0);let i=r.pattern;if(typeof i=="number")t.writeU8(1),t.writeU16BE(i);else{t.writeU8(i.length);for(let s of i)t.writeU16BE(s)}}}static encodeMacroDefine(t,r){t.writeU16BE(r.templateId);let i=ie.encode(JSON.stringify(r.template));t.writeU16BE(i.length),t.writeBytes(i)}static encodeMacroOrder(t,r){switch(t.writeU8(r.cmd),t.writeU16BE(r.instanceId),r.cmd){case 1:{let i=r;if(t.writeU16BE(i.templateId),t.writeU16BE(i.layerId),t.writeI16BE(i.x),t.writeI16BE(i.y),t.writeU8(i.zIndex),i.params!==void 0){let s=ie.encode(JSON.stringify(i.params));t.writeU16BE(s.length),t.writeBytes(s)}else t.writeU16BE(0);break}case 2:{let i=r,s=ie.encode(JSON.stringify(i.params));t.writeU16BE(s.length),t.writeBytes(s);break}default:break}}},Rt=class{samples;head=0;count=0;windowSize;totalTicks=0;c=0;constructor(e=120){this.windowSize=e,this.samples=new Array(e);for(let t=0;t<e;t++)this.samples[t]={durationMs:0,bytes:0,layers:0,orders:0,cells:0,displays:0}}beginTick(){this.c=performance.now()}endTick(e){let t=performance.now()-this.c;this.totalTicks++;let r=this.samples[this.head];r.durationMs=t,r.bytes=e.bytes,r.layers=e.layers,r.orders=e.orders,r.cells=e.cells,r.displays=e.displays,this.head=(this.head+1)%this.windowSize,this.count<this.windowSize&&this.count++}getSnapshot(){if(this.count===0)return{totalTicks:0,lastTickDurationMs:0,avgTickDurationMs:0,peakTickDurationMs:0,lastTickBytes:0,avgTickBytes:0,lastLayerCount:0,lastOrderCount:0,lastCellCount:0,lastDisplayCount:0};let e=(this.head-1+this.windowSize)%this.windowSize,t=this.samples[e],r=0,i=0,s=0,a=this.count<this.windowSize?0:this.head;for(let o=0;o<this.count;o++){let l=this.samples[(a+o)%this.windowSize];r+=l.durationMs,s+=l.bytes,l.durationMs>i&&(i=l.durationMs)}return{totalTicks:this.totalTicks,lastTickDurationMs:t.durationMs,avgTickDurationMs:r/this.count,peakTickDurationMs:i,lastTickBytes:t.bytes,avgTickBytes:s/this.count,lastLayerCount:t.layers,lastOrderCount:t.orders,lastCellCount:t.cells,lastDisplayCount:t.displays}}reset(){this.head=0,this.count=0,this.totalTicks=0;for(let e=0;e<this.windowSize;e++){let t=this.samples[e];t.durationMs=0,t.bytes=0,t.layers=0,t.orders=0,t.cells=0,t.displays=0}}},fr=class ae{static VGA_COLORS=[{colorId:0,r:0,g:0,b:0,a:255},{colorId:1,r:170,g:0,b:0,a:255},{colorId:2,r:0,g:170,b:0,a:255},{colorId:3,r:170,g:85,b:0,a:255},{colorId:4,r:0,g:0,b:170,a:255},{colorId:5,r:170,g:0,b:170,a:255},{colorId:6,r:0,g:170,b:170,a:255},{colorId:7,r:170,g:170,b:170,a:255},{colorId:8,r:85,g:85,b:85,a:255},{colorId:9,r:255,g:85,b:85,a:255},{colorId:10,r:85,g:255,b:85,a:255},{colorId:11,r:255,g:255,b:85,a:255},{colorId:12,r:85,g:85,b:255,a:255},{colorId:13,r:255,g:85,b:255,a:255},{colorId:14,r:85,g:255,b:255,a:255},{colorId:15,r:255,g:255,b:255,a:255}];static SYSTEM_COLORS=[{colorId:240,r:0,g:0,b:0,a:255},{colorId:241,r:60,g:60,b:75,a:255},{colorId:242,r:160,g:160,b:180,a:255},{colorId:243,r:255,g:255,b:255,a:255},{colorId:244,r:230,g:50,b:80,a:255},{colorId:245,r:255,g:120,b:50,a:255},{colorId:246,r:255,g:210,b:60,a:255},{colorId:247,r:130,g:220,b:50,a:255},{colorId:248,r:35,g:100,b:55,a:255},{colorId:249,r:40,g:200,b:220,a:255},{colorId:250,r:60,g:120,b:240,a:255},{colorId:251,r:35,g:55,b:125,a:255},{colorId:252,r:150,g:70,b:210,a:255},{colorId:253,r:130,g:80,b:50,a:255},{colorId:254,r:240,g:210,b:170,a:255}];mode;sessions=new Map;spriteRegistry=new Mt;fontRegistry=new Bt;soundRegistry=new Tt;inputBindings=new Re;macroRegistry=new Ft;stats=new Rt;getSpriteRegistry(){return this.spriteRegistry}resourceLoader=null;onFontAllocatedCallback=null;onFontBlockAddedCallback=null;constructor(t){this.mode=t.mode,this.initializeDefaultPalette(),this.loadFont(8,8,1,8,8)}setResourceLoader(t){this.resourceLoader=t}createUser(t,r){let i=String(t),s=r??`Player ${t}`,a=new mt(i,s);return this.spriteRegistry&&a.setSpriteRegistry(this.spriteRegistry),a.setMacroRegistry(this.macroRegistry),this.sessions.set(i,a),a}removeUser(t){return this.sessions.delete(String(t))}getUser(t){return this.sessions.get(String(t))}endTick(t){this.stats.beginTick();let r=Ze.encode(t),i=t.getLayers(),s=0,a=0;for(let l of i)a+=l.getWidth()*l.getHeight(),l.getNeedsCommit()&&(s+=l.getPendingOrders().length,l.clearPendingOrders(),l.clearCommit());let o=t.getDisplays();return this.stats.endTick({bytes:r.reliable.byteLength+r.volatile.byteLength,layers:i.length,orders:s,cells:a,displays:o.length}),r}getEngineStats(){return this.stats.getSnapshot()}encodeInitialState(t){return Ze.encodeFull(t,this.palettes)}onFontAllocated(t){this.onFontAllocatedCallback=t}onFontBlockAdded(t){this.onFontBlockAddedCallback=t}loadFont(t,r,i,s,a){let o="__default__";this.fontRegistry.getFontId(o)!==void 0&&this.fontRegistry.unregisterFont(o),this.fontRegistry.registerFont(o,{glyphWidth:t,glyphHeight:r,cellWidth:s,cellHeight:a,atlasBlocks:i}),this.onFontAllocatedCallback&&this.onFontAllocatedCallback()}async loadFontBlock(t,r){let i;if(typeof r=="string"){if(!this.resourceLoader)throw new Error("[Engine] No resource loader set. The runtime must call engine.setResourceLoader() before loading font blocks.");i=await this.resourceLoader.load(r)}else i=r;let s=this.fontRegistry.getFontId("__default__");if(s===void 0)throw new Error("[Engine] No font allocated. Call loadFont() first.");this.fontRegistry.addBlock(s,t,i),this.onFontBlockAddedCallback&&this.onFontBlockAddedCallback(t)}async loadFontBlocks(t){await Promise.all(Object.entries(t).map(([r,i])=>this.loadFontBlock(Number(r),i)))}getFontConfig(){return this.fontRegistry.getFontByName("__default__")?.getConfig()}getFontBlock(t){return this.fontRegistry.getFontByName("__default__")?.getBlock(t)}palettes=new Map;detectSoundFormat(t){let r=t.split(".").pop()?.toLowerCase();return{mp3:"mp3",wav:"wav",ogg:"ogg",webm:"webm",aac:"aac",m4a:"aac"}[r||""]||"mp3"}async loadSound(t,r){if(!this.resourceLoader)throw new Error("[Engine] No resource loader set. The runtime must call engine.setResourceLoader() before loading sounds.");let i=this.detectSoundFormat(r),s=await this.resourceLoader.load(r);return this.soundRegistry.registerFile(t,i,s)}async loadSounds(t){let r=Object.entries(t),i=await Promise.all(r.map(([a,o])=>this.loadSound(a,o))),s={};return r.forEach(([a],o)=>{s[a]=i[o]}),s}initializeDefaultPalette(){let t=new Array(256);for(let r=0;r<256;r++)t[r]={colorId:r,r:0,g:0,b:0,a:0};for(let r of ae.VGA_COLORS)t[r.colorId]={...r};for(let r of ae.SYSTEM_COLORS)t[r.colorId]={...r};t[255]={colorId:255,r:0,g:0,b:0,a:0},this.palettes.set(0,t)}loadPaletteToSlot(t,r){let i=new Array(256);for(let s=0;s<256;s++)i[s]={colorId:s,r:0,g:0,b:0,a:0};for(let s of r){let a=s.colorId;a>=0&&a<240&&(i[a]={colorId:a,r:s.r??0,g:s.g??0,b:s.b??0,a:s.a??255})}for(let s of ae.SYSTEM_COLORS)i[s.colorId]={...s};i[255]={colorId:255,r:0,g:0,b:0,a:0},this.palettes.set(t,i)}getPalette(t){return this.palettes.get(t)}},gr=class{composite(e,t,r){let i=e.renderPasses;!i||i.length===0?this.compositeSinglePass(e,t,r):this.compositeMultiPass(e,t,i,r)}compositeSinglePass(e,t,r){let i=[...t].sort((a,o)=>o.zIndex-a.zIndex);r.clear();let s=new Uint8Array(r.size);for(let a of i)a.visible&&this.compositeLayer(e,a,r,s)}compositeMultiPass(e,t,r,i){let s=r.filter(o=>o.enabled!==!1);if(s.length===0){this.compositeSinglePass(e,t,i);return}let a=[...t].filter(o=>o.visible).sort((o,l)=>l.zIndex-o.zIndex);i.clear();for(let o of s){let l=a.filter(h=>h.zIndex>=o.zMin&&h.zIndex<=o.zMax);if(l.length===0)continue;let n=new me(e.width,e.height);n.clear();let d=new Uint8Array(n.size);for(let h of l)this.compositeLayer(e,h,n,d);this.overlayPass(n,i)}}overlayPass(e,t){let r=e.size;for(let i=0;i<r;i++){let s=e.data[i];(s>>>24&255)!==255&&(t.data[i]=s)}}compositeLayer(e,t,r,i){let s=Math.max(e.x,t.x),a=Math.min(e.x+e.width,t.x+t.grid.width),o=Math.max(e.y,t.y),l=Math.min(e.y+e.height,t.y+t.grid.height);if(s>=a||o>=l)return;let n=a-s,d=l-o,h=e.width,c=t.grid.width,f=(o-e.y)*h+(s-e.x),g=(o-t.y)*c+(s-t.x);for(let p=0;p<d;p++){let w=f,m=g;for(let k=0;k<n;k++){if(!i[w]){let Z=t.grid.data[m],x=Z>>>24&255,D=Z>>>16&255,z=Z&65535,L=r.data[w],R=L>>>24&255,E=L>>>16&255,B=L&65535;z!==0&&(B===0||B===32)&&(B=z),D!==255&&E===255&&(E=D),x!==255&&(R===255&&(R=x),i[w]=1),r.data[w]=R<<24|E<<16|B}w++,m++}f+=h,g+=c}}},yr=class y{orders=[];static toCharCode(t){return typeof t=="number"?t&65535:t.length===0?32:N(t.charCodeAt(0))}static dedent(t){let r=t.split(`
|
|
3
|
+
`);r.length>0&&r[0].trim()===""&&r.shift();let i=1/0;for(let s of r){if(s.trim().length===0)continue;let a=s.match(/^(\s*)/);a&&(i=Math.min(i,a[1].length))}return i===1/0?t.trim():r.map(s=>s.slice(i)).join(`
|
|
4
|
+
`).trim()}static encodeString(t){let r="";for(let i=0;i<t.length;i++){let s=t.charCodeAt(i),a=N(s);r+=String.fromCharCode(a)}return r}getOrders(){return this.orders}clear(){return this.orders=[],this}char(t,r,i,s=15,a=255){return this.orders.push(y.char(t,r,i,s,a)),this}static char(t,r,i,s=15,a=255){return{type:u.Char,x:t,y:r,char:y.toCharCode(i),fg:s,bg:a}}text(t,r,i,s=15,a=255){return this.orders.push(y.text(t,r,i,s,a)),this}static text(t,r,i,s=15,a=255){return{type:u.Text,x:t,y:r,text:y.encodeString(i),fg:s,bg:a}}textMultiline(t,r,i,s=15,a=255){return this.orders.push(y.textMultiline(t,r,i,s,a)),this}static textMultiline(t,r,i,s=15,a=255){return{type:u.TextMultiline,x:t,y:r,text:y.encodeString(y.dedent(i)),fg:s,bg:a}}subFrame(t,r,i,s,a,o=15,l=255){let n={type:u.SubFrame,x:t,y:r,width:i,height:s,frame:a.map(d=>y.toCharCode(d)),fg:o,bg:l};return this.orders.push(n),this}static subFrame(t,r,i,s,a,o=15,l=255){return{type:u.SubFrame,x:t,y:r,width:i,height:s,frame:a.map(n=>y.toCharCode(n)),fg:o,bg:l}}subFrameMulti(t,r,i,s,a){return this.orders.push(y.subFrameMulti(t,r,i,s,a)),this}static subFrameMulti(t,r,i,s,a){return{type:u.SubFrameMulti,x:t,y:r,width:i,height:s,frame:a.map(o=>({char:y.toCharCode(o.charCode??o.char??0),fg:o.fgColorCode??o.fgColor??o.fg??15,bg:o.bgColorCode??o.bgColor??o.bg??255}))}}subFrameMultiColor(t,r,i,s,a){return this.subFrameMulti(t,r,i,s,a)}static subFrameMultiColor(t,r,i,s,a){return y.subFrameMulti(t,r,i,s,a)}fullFrame(t,r=15,i=255){return this.orders.push(y.fullFrame(t,r,i)),this}static fullFrame(t,r=15,i=255){return{type:u.FullFrame,frame:t.map(s=>y.toCharCode(s)),fg:r,bg:i}}fullFrameMulti(t){return this.orders.push(y.fullFrameMulti(t)),this}static fullFrameMulti(t){return{type:u.FullFrameMulti,frame:t.map(r=>({char:y.toCharCode(r.charCode??r.char??0),fg:r.fgColorCode??r.fgColor??r.fg??15,bg:r.bgColorCode??r.bgColor??r.bg??255}))}}fullFrameMultiColor(t){return this.fullFrameMulti(t)}static fullFrameMultiColor(t){return y.fullFrameMulti(t)}sprite(t,r,i,s=15,a=255){return this.orders.push(y.sprite(t,r,i,s,a)),this}static sprite(t,r,i,s=15,a=255){return{type:u.Sprite,x:t,y:r,spriteId:i,fg:s,bg:a}}spriteMulti(t,r,i){return this.orders.push(y.spriteMulti(t,r,i)),this}static spriteMulti(t,r,i){return{type:u.SpriteMulti,x:t,y:r,spriteId:i}}spriteMultiColor(t,r,i){return this.spriteMulti(t,r,i)}static spriteMultiColor(t,r,i){return y.spriteMulti(t,r,i)}colorMap(t,r,i,s,a){let o={type:u.ColorMap,x:t,y:r,width:i,height:s,data:a};return this.orders.push(o),this}rect(t,r,i,s,a,o=15,l=255,n=!0){return this.orders.push(y.rect(t,r,i,s,a,o,l,n)),this}static rect(t,r,i,s,a,o=15,l=255,n=!0){return{type:u.Shape,shapeType:U.Rectangle,x:t,y:r,width:i,height:s,filled:n,char:y.toCharCode(a),fg:o,bg:l}}rectangle(t,r,i,s,a){return this.rect(t,r,i,s,a?.charCode??"\u2588",a?.fgColor??15,a?.bgColor??255,a?.filled??!0)}static rectangle(t,r,i,s,a){return y.rect(t,r,i,s,a?.charCode??"\u2588",a?.fgColor??15,a?.bgColor??255,a?.filled??!0)}circle(t,r,i,s,a=15,o=255,l=!0){let n={type:u.Shape,shapeType:U.Circle,x:t,y:r,radius:i,filled:l,char:y.toCharCode(s),fg:a,bg:o};return this.orders.push(n),this}static circle(t,r,i,s="\u2588",a=15,o=255,l=!0){let n,d=a,h=o,c=l;return typeof s=="object"?(n=y.toCharCode(s.charCode??"\u2588"),d=s.fgColor??15,h=s.bgColor??255,c=s.filled??!0):n=y.toCharCode(s),{type:u.Shape,shapeType:U.Circle,x:t,y:r,radius:i,filled:c,char:n,fg:d,bg:h}}line(t,r,i,s,a,o=15,l=255){return this.orders.push(y.line(t,r,i,s,a,o,l)),this}static line(t,r,i,s,a,o=15,l=255){let n,d=o,h=l;return typeof a=="object"?(n=y.toCharCode(a.charCode??"#"),d=a.fgColor??15,h=a.bgColor??255):n=y.toCharCode(a),{type:u.Shape,shapeType:U.Line,x1:t,y1:r,x2:i,y2:s,filled:!1,char:n,fg:d,bg:h}}triangle(t,r,i,s,a,o,l,n=15,d=255,h=!0){let c={type:u.Shape,shapeType:U.Triangle,x1:t,y1:r,x2:i,y2:s,x3:a,y3:o,filled:h,char:y.toCharCode(l),fg:n,bg:d};return this.orders.push(c),this}static triangle(t,r,i,s,a,o,l="\u2588",n=15,d=255,h=!0){let c,f=n,g=d,p=h;return typeof l=="object"?(c=y.toCharCode(l.charCode??"\u2588"),f=l.fgColor??15,g=l.bgColor??255,p=l.filled??!0):c=y.toCharCode(l),{type:u.Shape,shapeType:U.Triangle,x1:t,y1:r,x2:i,y2:s,x3:a,y3:o,filled:p,char:c,fg:f,bg:g}}ellipse(t,r,i,s,a,o=15,l=255,n=!0){let d={type:u.Shape,shapeType:U.Ellipse,x:t,y:r,radiusX:i,radiusY:s,filled:n,char:y.toCharCode(a),fg:o,bg:l};return this.orders.push(d),this}static ellipse(t,r,i,s,a="\u2588",o=15,l=255,n=!0){let d,h=o,c=l,f=n;return typeof a=="object"?(d=y.toCharCode(a.charCode??"\u2588"),h=a.fgColor??15,c=a.bgColor??255,f=a.filled??!0):d=y.toCharCode(a),{type:u.Shape,shapeType:U.Ellipse,x:t,y:r,radiusX:i,radiusY:s,filled:f,char:d,fg:h,bg:c}}polyline(t,r,i=15,s=255){return this.orders.push(y.polyline(t,r,i,s)),this}static polyline(t,r,i=15,s=255){return{type:u.Polyline,points:t,char:y.toCharCode(r),fg:i,bg:s}}polygon(t,r,i=15,s=255){return this.orders.push(y.polygon(t,r,i,s)),this}static polygon(t,r,i=15,s=255){let a=[...t];return a.length>0&&a.push(a[0]),{type:u.Polyline,points:a,char:y.toCharCode(r),fg:i,bg:s}}dotCloud(t,r,i=15,s=255){return this.orders.push(y.dotCloud(t,r,i,s)),this}static dotCloud(t,r,i=15,s=255){return{type:u.DotCloud,positions:t.map(a=>({x:a.posX??a.x??0,y:a.posY??a.y??0})),char:y.toCharCode(r),fg:i,bg:s}}dotCloudMulti(t){let r={type:u.DotCloudMulti,dots:t.map(i=>({...i,char:y.toCharCode(i.char)}))};return this.orders.push(r),this}static dotCloudMulti(t){return{type:u.DotCloudMulti,dots:t.map(r=>({x:r.posX??r.x??0,y:r.posY??r.y??0,char:y.toCharCode(r.charCode??r.char??0),fg:r.fgColorCode??r.fgColor??r.fg??15,bg:r.bgColorCode??r.bgColor??r.bg??255}))}}dotCloudMultiColor(t){return this.orders.push(y.dotCloudMulti(t)),this}static dotCloudMultiColor(t){return y.dotCloudMulti(t)}spriteCloud(t,r,i=15,s=255){let a={type:u.SpriteCloud,positions:t,spriteId:r,fg:i,bg:s};return this.orders.push(a),this}static spriteCloud(t,r,i=15,s=255){return{type:u.SpriteCloud,positions:r.map(a=>({x:a.posX??a.x??0,y:a.posY??a.y??0})),spriteId:t,fg:i,bg:s}}spriteCloudMulti(t,r){let i={type:u.SpriteCloudMulti,positions:t,spriteId:r};return this.orders.push(i),this}static spriteCloudMulti(t,r){return{type:u.SpriteCloudMulti,positions:r.map(i=>({x:i.posX??i.x??0,y:i.posY??i.y??0})),spriteId:t}}spriteCloudMultiColor(t,r){return this.orders.push(y.spriteCloudMulti(t,r)),this}static spriteCloudMultiColor(t,r){return y.spriteCloudMulti(t,r)}spriteCloudVaried(t){let r={type:u.SpriteCloudVaried,sprites:t};return this.orders.push(r),this}static spriteCloudVaried(t){return{type:u.SpriteCloudVaried,sprites:t.map(r=>({x:r.posX??r.x??0,y:r.posY??r.y??0,spriteId:r.spriteIndex??r.spriteId??0,fg:r.fgColorCode??r.fgColor??r.fg??15,bg:r.bgColorCode??r.bgColor??r.bg??255}))}}spriteCloudVariedMulti(t){let r={type:u.SpriteCloudVariedMulti,sprites:t};return this.orders.push(r),this}static spriteCloudVariedMulti(t){return{type:u.SpriteCloudVariedMulti,sprites:t.map(r=>({x:r.posX??r.x??0,y:r.posY??r.y??0,spriteId:r.spriteIndex??r.spriteId??0}))}}spriteCloudVariedMultiColor(t){return this.orders.push(y.spriteCloudVariedMulti(t)),this}static spriteCloudVariedMultiColor(t){return y.spriteCloudVariedMulti(t)}bitmask(t,r,i,s,a,o,l=15,n=255,d=!1){let h=i*s,c=Math.ceil(h/8),f=new Uint8Array(c);for(let p=0;p<h;p++)if(a[p]&1){let w=Math.floor(p/8),m=p%8;f[w]|=1<<m}let g={type:u.Bitmask,x:t,y:r,width:i,height:s,mask:f,char:y.toCharCode(o),fg:l,bg:n,override:d};return this.orders.push(g),this}static bitmask(t,r,i,s,a,o,l=15,n=255,d=!1){let h=i*s,c=Math.ceil(h/8),f=new Uint8Array(c);for(let g=0;g<h;g++)if(a[g]){let p=Math.floor(g/8),w=g%8;f[p]|=1<<w}return{type:u.Bitmask,x:t,y:r,width:i,height:s,mask:f,char:y.toCharCode(o),fg:l,bg:n,override:d}}bitmask4(t,r,i,s,a,o,l=!1){return this.orders.push(y.bitmask4(t,r,i,s,a,o,l)),this}static bitmask4(t,r,i,s,a,o,l=!1){if(o.length!==3)throw new Error("Bitmask4 requires exactly 3 variants");let n=i*s,d=Math.ceil(n/4),h=new Uint8Array(d);for(let f=0;f<n;f++){let g=a[f]&3;if(g>0){let p=Math.floor(f/4),w=f%4*2;h[p]|=g<<w}}let c=f=>({char:y.toCharCode(f.charCode??f.char),fg:f.fg??f.fgColor??15,bg:f.bg??f.bgColor??0});return{type:u.Bitmask4,x:t,y:r,width:i,height:s,mask:h,variants:[c(o[0]),c(o[1]),c(o[2])],override:l}}bitmask16(t,r,i,s,a,o,l=!1){if(o.length>15)throw new Error("Bitmask16 supports max 15 variants");let n=i*s,d=Math.ceil(n/2),h=new Uint8Array(d);for(let g=0;g<n;g++){let p=a[g]&15;if(p>0){let w=Math.floor(g/2),m=g%2*4;h[w]|=p<<m}}let c=g=>({char:y.toCharCode(g.charCode??g.char),fg:g.fg??g.fgColor??15,bg:g.bg??g.bgColor??0}),f={type:u.Bitmask16,x:t,y:r,width:i,height:s,mask:h,variants:o.map(c),override:l};return this.orders.push(f),this}static bitmask16(t,r,i,s,a,o,l=!1){if(o.length>15)throw new Error("Bitmask16 supports max 15 variants");let n=i*s,d=Math.ceil(n/2),h=new Uint8Array(d);for(let f=0;f<n;f++){let g=a[f]&15;if(g>0){let p=Math.floor(f/2),w=f%2*4;h[p]|=g<<w}}let c=f=>({char:y.toCharCode(f.charCode??f.char),fg:f.fg??f.fgColor??15,bg:f.bg??f.bgColor??0});return{type:u.Bitmask16,x:t,y:r,width:i,height:s,mask:h,variants:o.map(c),override:l}}fill(t,r=15,i=255){return this.orders.push(y.fill(t,r,i)),this}static fill(t,r=15,i=255){return{type:u.Fill,char:y.toCharCode(t),fg:r,bg:i}}fillChar(t,r,i,s=15,a=255){return this.orders.push(y.fillChar(t,r,i,s,a)),this}static fillChar(t,r,i,s=15,a=255){return{type:u.FillChar,patternWidth:t,patternHeight:r,pattern:i.map(o=>y.toCharCode(o)),fg:s,bg:a}}fillSprite(t,r=15,i=255){return this.orders.push(y.fillSprite(t,r,i)),this}static fillSprite(t,r=15,i=255){return{type:u.FillSprite,spriteId:t,fg:r,bg:i}}fillSpriteMulti(t){return this.orders.push(y.fillSpriteMulti(t)),this}static fillSpriteMulti(t){return{type:u.FillSpriteMulti,spriteId:t}}fillSpriteMultiColor(t){return this.fillSpriteMulti(t)}static fillSpriteMultiColor(t){return y.fillSpriteMulti(t)}boxWithBorder(t,r,i,s,a,o){let l=y.boxWithBorder(t,r,i,s,a,o);return this.orders.push(...l),this}static boxWithBorder(t,r,i,s,a={},o={}){return[y.rectangle(t+1,r+1,i-2,s-2,{charCode:o.charCode??"\u2588",fgColor:o.fgColor??8,bgColor:o.bgColor??0,filled:!0}),y.rectangle(t,r,i,s,{charCode:a.charCode??"\u2588",fgColor:a.fgColor??15,bgColor:a.bgColor??0,filled:!1})]}grid(t,r,i,s,a,o,l="+",n=15,d=255){return this.orders.push(y.grid(t,r,i,s,a,o,l,n,d)),this}static grid(t,r,i,s,a,o,l="+",n=15,d=255){let h=[];for(let c=0;c<=a;c++)for(let f=0;f<=o;f++)h.push({x:t+f*i,y:r+c*s});return y.dotCloud(h,l,n,d)}},Yt=class{view;data;offset;constructor(e,t=0){this.data=e,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.offset=t}get remaining(){return this.data.length-this.offset}readU8(){return this.data[this.offset++]}readI8(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readU16BE(){let e=this.view.getUint16(this.offset,!1);return this.offset+=2,e}readI16BE(){let e=this.view.getInt16(this.offset,!1);return this.offset+=2,e}readU16LE(){let e=this.view.getUint16(this.offset,!0);return this.offset+=2,e}readBytes(e){let t=this.data.slice(this.offset,this.offset+e);return this.offset+=e,t}},De=new TextDecoder;function I(e,t){return t?e.readU16LE():e.readU8()}var zt=class C{static decode(t,r=!1,i=0,s=0){let a=new Yt(t),o=[];for(;a.remaining>0;){let l=a.readU8(),n=C.decodeOne(a,l,r,i,s);n&&o.push(n)}return o}static decodeOne(t,r,i,s,a){switch(r){case u.Char:return C.decodeChar(t,i);case u.Text:return C.decodeText(t);case u.TextMultiline:return C.decodeTextMultiline(t);case u.SubFrame:return C.decodeSubFrame(t,i);case u.SubFrameMulti:return C.decodeSubFrameMulti(t,i);case u.FullFrame:return C.decodeFullFrame(t,i,s,a);case u.FullFrameMulti:return C.decodeFullFrameMulti(t,i,s,a);case u.Sprite:return C.decodeSprite(t);case u.SpriteMulti:return C.decodeSpriteMulti(t);case u.ColorMap:return C.decodeColorMap(t);case u.Shape:return C.decodeShape(t,i);case u.Polyline:return C.decodePolyline(t,i);case u.DotCloud:return C.decodeDotCloud(t,i);case u.DotCloudMulti:return C.decodeDotCloudMulti(t,i);case u.SpriteCloud:return C.decodeSpriteCloud(t);case u.SpriteCloudMulti:return C.decodeSpriteCloudMulti(t);case u.SpriteCloudVaried:return C.decodeSpriteCloudVaried(t);case u.SpriteCloudVariedMulti:return C.decodeSpriteCloudVariedMulti(t);case u.Bitmask:return C.decodeBitmask(t,i);case u.Bitmask4:return C.decodeBitmask4(t,i);case u.Bitmask16:return C.decodeBitmask16(t,i);case u.Fill:return C.decodeFill(t,i);case u.FillChar:return C.decodeFillChar(t,i);case u.FillSprite:return C.decodeFillSprite(t);case u.FillSpriteMulti:return C.decodeFillSpriteMulti(t);default:return null}}static decodeChar(t,r){let i=t.readU8(),s=t.readU8(),a=I(t,r),o=t.readU8(),l=t.readU8();return{type:u.Char,x:i,y:s,char:a,fg:l,bg:o}}static decodeText(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readBytes(s),o=De.decode(a),l=t.readU8(),n=t.readU8();return{type:u.Text,x:r,y:i,text:o,fg:n,bg:l}}static decodeTextMultiline(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readBytes(s),o=De.decode(a),l=t.readU8(),n=t.readU8();return{type:u.TextMultiline,x:r,y:i,text:o,fg:n,bg:l}}static decodeSubFrame(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=t.readU8(),n=t.readU8(),d=a*o,h=new Array(d);for(let c=0;c<d;c++)h[c]=I(t,r);return{type:u.SubFrame,x:i,y:s,width:a,height:o,frame:h,fg:n,bg:l}}static decodeSubFrameMulti(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=a*o,n=new Array(l);for(let d=0;d<l;d++){let h=I(t,r),c=t.readU8(),f=t.readU8();n[d]={char:h,fg:f,bg:c}}return{type:u.SubFrameMulti,x:i,y:s,width:a,height:o,frame:n}}static decodeFullFrame(t,r,i,s){let a=t.readU8(),o=t.readU8(),l=i*s,n=new Array(l);for(let d=0;d<l;d++)n[d]=I(t,r);return{type:u.FullFrame,frame:n,fg:o,bg:a}}static decodeFullFrameMulti(t,r,i,s){let a=i*s,o=new Array(a);for(let l=0;l<a;l++){let n=I(t,r),d=t.readU8(),h=t.readU8();o[l]={char:n,fg:h,bg:d}}return{type:u.FullFrameMulti,frame:o}}static decodeSprite(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readU8(),o=t.readU8();return{type:u.Sprite,x:r,y:i,spriteId:s,fg:o,bg:a}}static decodeSpriteMulti(t){let r=t.readU8(),i=t.readU8(),s=t.readU8();return{type:u.SpriteMulti,x:r,y:i,spriteId:s}}static decodeColorMap(t){let r=t.readU8(),i=t.readU8(),s=t.readU8()+1,a=t.readU8()+1,o=s*a,l=new Array(o);for(let n=0;n<o;n++){let d=t.readU8(),h=t.readU8();l[n]={fg:h,bg:d}}return{type:u.ColorMap,x:r,y:i,width:s,height:a,data:l}}static decodeShape(t,r){let i=t.readU8(),s={type:u.Shape,shapeType:i,filled:!1,char:0,fg:0,bg:0};switch(i){case U.Rectangle:{let a=t.readU8(),o=t.readU8(),l=t.readU8()+1,n=t.readU8()+1,d=t.readU8()!==0,h=I(t,r),c=t.readU8(),f=t.readU8();return{...s,x:a,y:o,width:l,height:n,filled:d,char:h,fg:f,bg:c}}case U.Circle:{let a=t.readU8(),o=t.readU8(),l=t.readU8()+1,n=t.readU8()!==0,d=I(t,r),h=t.readU8(),c=t.readU8();return{...s,x:a,y:o,radius:l,filled:n,char:d,fg:c,bg:h}}case U.Line:{let a=t.readU8(),o=t.readU8(),l=t.readU8(),n=t.readU8(),d=I(t,r),h=t.readU8(),c=t.readU8();return{...s,x1:a,y1:o,x2:l,y2:n,filled:!1,char:d,fg:c,bg:h}}case U.Ellipse:{let a=t.readU8(),o=t.readU8(),l=t.readU8()+1,n=t.readU8()+1,d=t.readU8()!==0,h=I(t,r),c=t.readU8(),f=t.readU8();return{...s,x:a,y:o,radiusX:l,radiusY:n,filled:d,char:h,fg:f,bg:c}}case U.Triangle:{let a=t.readU8(),o=t.readU8(),l=t.readU8(),n=t.readU8(),d=t.readU8(),h=t.readU8(),c=t.readU8()!==0,f=I(t,r),g=t.readU8(),p=t.readU8();return{...s,x1:a,y1:o,x2:l,y2:n,x3:d,y3:h,filled:c,char:f,fg:p,bg:g}}default:return s}}static decodePolyline(t,r){let i=I(t,r),s=t.readU8(),a=t.readU8(),o=t.readU8(),l=new Array(o);for(let n=0;n<o;n++)l[n]={x:t.readU8(),y:t.readU8()};return{type:u.Polyline,points:l,char:i,fg:s,bg:a}}static decodeDotCloud(t,r){let i=I(t,r),s=t.readU8(),a=t.readU8(),o=t.readU16BE(),l=new Array(o);for(let n=0;n<o;n++)l[n]={x:t.readU8(),y:t.readU8()};return{type:u.DotCloud,positions:l,char:i,fg:a,bg:s}}static decodeDotCloudMulti(t,r){let i=t.readU16BE(),s=new Array(i);for(let a=0;a<i;a++){let o=I(t,r),l=t.readU8(),n=t.readU8(),d=t.readU8(),h=t.readU8();s[a]={x:d,y:h,char:o,fg:n,bg:l}}return{type:u.DotCloudMulti,dots:s}}static decodeSpriteCloud(t){let r=t.readU8(),i=t.readU8(),s=t.readU8(),a=t.readU16BE(),o=new Array(a);for(let l=0;l<a;l++)o[l]={x:t.readU8(),y:t.readU8()};return{type:u.SpriteCloud,positions:o,spriteId:r,fg:s,bg:i}}static decodeSpriteCloudMulti(t){let r=t.readU8(),i=t.readU16BE(),s=new Array(i);for(let a=0;a<i;a++)s[a]={x:t.readU8(),y:t.readU8()};return{type:u.SpriteCloudMulti,positions:s,spriteId:r}}static decodeSpriteCloudVaried(t){let r=t.readU16BE(),i=new Array(r);for(let s=0;s<r;s++){let a=t.readU8(),o=t.readU8(),l=t.readU8(),n=t.readU8(),d=t.readU8();i[s]={x:n,y:d,spriteId:a,fg:l,bg:o}}return{type:u.SpriteCloudVaried,sprites:i}}static decodeSpriteCloudVariedMulti(t){let r=t.readU16BE(),i=new Array(r);for(let s=0;s<r;s++){let a=t.readU8(),o=t.readU8(),l=t.readU8();i[s]={x:o,y:l,spriteId:a}}return{type:u.SpriteCloudVariedMulti,sprites:i}}static decodeBitmask(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=I(t,r),n=t.readU8(),d=t.readU8(),h=t.readU8()!==0,c=Math.ceil(a*o/8),f=t.readBytes(c);return{type:u.Bitmask,x:i,y:s,width:a,height:o,mask:f,char:l,fg:d,bg:n,override:h}}static decodeBitmask4(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=t.readU8()!==0,n=[{char:0,fg:0,bg:0},{char:0,fg:0,bg:0},{char:0,fg:0,bg:0}];for(let c=0;c<3;c++)n[c].char=I(t,r),n[c].bg=t.readU8(),n[c].fg=t.readU8();let d=Math.ceil(a*o*2/8),h=t.readBytes(d);return{type:u.Bitmask4,x:i,y:s,width:a,height:o,mask:h,variants:n,override:l}}static decodeBitmask16(t,r){let i=t.readU8(),s=t.readU8(),a=t.readU8()+1,o=t.readU8()+1,l=t.readU8()!==0,n=t.readU8(),d=new Array(n);for(let f=0;f<n;f++){let g=I(t,r),p=t.readU8(),w=t.readU8();d[f]={char:g,fg:w,bg:p}}let h=Math.ceil(a*o*4/8),c=t.readBytes(h);return{type:u.Bitmask16,x:i,y:s,width:a,height:o,mask:c,variants:d,override:l}}static decodeFill(t,r){let i=I(t,r),s=t.readU8(),a=t.readU8();return{type:u.Fill,char:i,fg:a,bg:s}}static decodeFillChar(t,r){let i=t.readU8()+1,s=t.readU8()+1,a=t.readU8(),o=t.readU8(),l=i*s,n=new Array(l);for(let d=0;d<l;d++)n[d]=I(t,r);return{type:u.FillChar,patternWidth:i,patternHeight:s,pattern:n,fg:o,bg:a}}static decodeFillSprite(t){let r=t.readU8(),i=t.readU8(),s=t.readU8();return{type:u.FillSprite,spriteId:r,fg:s,bg:i}}static decodeFillSpriteMulti(t){let r=t.readU8();return{type:u.FillSpriteMulti,spriteId:r}}},Lt=32,Xt=64,Vt=class{view;buf;offset;constructor(e,t=0){this.buf=e,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.offset=t}get remaining(){return this.buf.length-this.offset}get rawBuffer(){return this.buf}readU8(){return this.buf[this.offset++]}readI8(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readU16BE(){let e=this.view.getUint16(this.offset,!1);return this.offset+=2,e}readI16BE(){let e=this.view.getInt16(this.offset,!1);return this.offset+=2,e}readBytes(e){let t=this.buf.slice(this.offset,this.offset+e);return this.offset+=e,t}},se=new TextDecoder,br=class A{static decode(t){let r=new Vt(t),i=r.offset,s=r.readU8(),a=new Array(s);for(let S=0;S<s;S++){let T=r.readU8(),$=r.readI16BE(),P=r.readI16BE(),ne=r.readU16BE(),J=r.readU16BE(),le=r.readU8(),de=r.readU8(),he=r.readU8(),_=r.readU8(),H=r.readU8(),K;if(H>0){K=new Array(H);for(let W=0;W<H;W++)K[W]={id:r.readU8(),zMin:r.readU8(),zMax:r.readU8(),enabled:(r.readU8()&1)!==0}}a[S]={id:T,originX:$,originY:P,width:ne,height:J,paletteSlot:le,scalingMode:de,cellWidth:he,cellHeight:_,renderPasses:K}}let o=r.offset-i,l=r.offset,n=r.readU8(),d=new Array(n);for(let S=0;S<n;S++){let T=r.readU8(),$=new Array(256);for(let P=0;P<256;P++)$[P]={colorId:P,r:r.readU8(),g:r.readU8(),b:r.readU8(),a:r.readU8()};d[S]={slot:T,colors:$}}let h=r.offset-l,c=r.offset,f=r.readU16BE(),g=new Array(f);for(let S=0;S<f;S++){let T=r.offset,$=r.readU16BE(),P=r.readU8(),ne=(P&Lt)!==0,J=(P&Xt)!==0,le=r.readI8(),de=r.readI16BE(),he=r.readI16BE(),_=r.readU16BE(),H=r.readU16BE(),K=r.readU16BE(),W=[];K>0&&(W=A.decodeOrders(r,K,J,_,H));let $e=r.offset-T;g[S]={id:$,isMacro:ne,is16bit:J,zIndex:le,originX:de,originY:he,width:_,height:H,orders:W,byteSize:$e}}let p=r.offset-c,w=r.offset,m=r.readU8(),k=new Array(m);for(let S=0;S<m;S++)k[S]=A.decodeAudioOrder(r);let Z=r.offset-w,x=r.offset,D=r.readU8(),z=new Array(D);for(let S=0;S<D;S++)z[S]=A.decodeVibrationOrder(r);let L=r.offset-x,R=r.offset,E=[];if(r.remaining>=2){let S=r.readU16BE();E=new Array(S);for(let T=0;T<S;T++)E[T]=A.decodeMacroDefine(r)}let B=r.offset-R,X=r.offset,oe=[];if(r.remaining>=2){let S=r.readU16BE();oe=new Array(S);for(let T=0;T<S;T++)oe[T]=A.decodeMacroOrder(r)}let Ve=r.offset-X;r.remaining>0&&r.readU8();let Ne={displays:o,palettes:h,layers:p,audio:Z,vibration:L,macroDefines:B,macroOrders:Ve,total:t.byteLength};return{displays:a,palettes:d,layers:g,audioOrders:k,vibrationOrders:z,macroDefines:E,macroOrders:oe,sectionSizes:Ne}}static decodeOrders(t,r,i,s,a){let o=t.offset;for(let d=0;d<r;d++)A.skipOneOrder(t,i,s,a);let l=t.offset-o,n=new Uint8Array(t.rawBuffer.buffer,t.rawBuffer.byteOffset+o,l);return zt.decode(n,i,s,a)}static skipOneOrder(t,r,i,s){let a=t.readU8(),o=r?2:1;switch(a){case 1:t.offset+=2+o+2;break;case 2:case 23:{t.offset+=2;let l=t.readU8();t.offset+=l+2;break}case 3:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=2,t.offset+=l*n*o;break}case 4:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=l*n*(o+2);break}case 5:{t.offset+=2,t.offset+=i*s*o;break}case 6:t.offset+=i*s*(o+2);break;case 7:t.offset+=5;break;case 8:t.offset+=3;break;case 9:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=l*n*2;break}case 10:{switch(t.readU8()){case 1:t.offset+=5+o+2;break;case 2:t.offset+=4+o+2;break;case 3:t.offset+=4+o+2;break;case 4:t.offset+=5+o+2;break;case 5:t.offset+=7+o+2;break}break}case 25:{t.offset+=o+2;let l=t.readU8();t.offset+=l*2;break}case 11:{t.offset+=o+2;let l=t.readU16BE();t.offset+=l*2;break}case 12:{let l=t.readU16BE();t.offset+=l*(o+2+2);break}case 13:{t.offset+=3;let l=t.readU16BE();t.offset+=l*2;break}case 14:{t.offset+=1;let l=t.readU16BE();t.offset+=l*2;break}case 15:{let l=t.readU16BE();t.offset+=l*5;break}case 16:{let l=t.readU16BE();t.offset+=l*3;break}case 17:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=o+2+1,t.offset+=Math.ceil(l*n/8);break}case 18:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=1,t.offset+=3*(o+2),t.offset+=Math.ceil(l*n*2/8);break}case 24:{t.offset+=2;let l=t.readU8()+1,n=t.readU8()+1;t.offset+=1;let d=t.readU8();t.offset+=d*(o+2),t.offset+=Math.ceil(l*n*4/8);break}case 19:t.offset+=o+2;break;case 20:{let l=t.readU8()+1,n=t.readU8()+1;t.offset+=2,t.offset+=l*n*o;break}case 21:t.offset+=3;break;case 22:t.offset+=1;break;default:break}}static decodeAudioOrder(t){switch(t.readU8()){case 1:{let r=A.decodeSoundTarget(t),i=t.readU16BE(),s=t.readU8(),a={type:u.Audio,sound:r,instanceId:i};return s&1&&(a.volume=t.readU8()/255),s&2&&(a.pitch=t.readU8()/100),s&4&&(a.fadeIn=t.readU16BE()/1e3),s&8&&(a.x=t.readI16BE(),a.y=t.readI16BE()),s&16&&(a.lowpass=t.readU16BE()),s&32&&(a.highpass=t.readU16BE()),s&64&&(a.reverb=t.readU8()/255),s&128&&(a.loop=!0),a}case 2:{let r=A.decodeSoundTarget(t);return{type:u.Audio,sound:r,stop:!0}}case 3:{let r=A.decodeSoundTarget(t),i=t.readU16BE();return{type:u.Audio,sound:r,fadeOut:i/1e3}}case 4:{let r=A.decodeSoundTarget(t);return{type:u.Audio,sound:r,pause:!0}}case 5:{let r=A.decodeSoundTarget(t);return{type:u.Audio,sound:r,resume:!0}}case 6:{let r=t.readU16BE(),i=t.readU8(),s={type:u.Audio,sound:r};return i&1&&(s.lowpass=t.readU16BE()),i&2&&(s.highpass=t.readU16BE()),i&4&&(s.reverb=t.readU8()/255),i&8&&(s.pitch=t.readU8()/100),i&16&&(s.volume=t.readU8()/255),s}case 7:{let r=t.readI16BE(),i=t.readI16BE();return{type:u.Audio,sound:"__listener_position__",x:r,y:i}}case 8:{let r=t.readU16BE(),i=t.readU16BE(),s=t.readU8(),a=t.readU8();return{type:u.Audio,sound:"__configure_spatial__",maxDistance:r,referenceDistance:i,rolloffFactor:s,panSpread:a}}default:return{type:u.Audio,sound:0}}}static decodeSoundTarget(t){switch(t.readU8()){case 0:return t.readU16BE();case 1:return"all";case 2:{let r=t.readU8(),i=t.readBytes(r);return se.decode(i)}default:return 0}}static decodeVibrationOrder(t){if(t.readU8()===1){let s=t.readU8(),a=t.readU16BE(),o=t.readU8()/255,l=t.readU8()/255,n=t.readU16BE();return{type:u.Vibration,target:"gamepad",gamepadIndex:s,duration:a,strongMagnitude:o,weakMagnitude:l,startDelay:n}}let r=t.readU8();if(r===1)return{type:u.Vibration,pattern:t.readU16BE()};let i=new Array(r);for(let s=0;s<r;s++)i[s]=t.readU16BE();return{type:u.Vibration,pattern:i}}static decodeMacroDefine(t){let r=t.readU16BE(),i=t.readU16BE(),s=t.readBytes(i),a=JSON.parse(se.decode(s));return{templateId:r,template:a}}static decodeMacroOrder(t){let r=t.readU8(),i=t.readU16BE();switch(r){case 1:{let s=t.readU16BE(),a=t.readU16BE(),o=t.readI16BE(),l=t.readI16BE(),n=t.readU8(),d=t.readU16BE(),h;if(d>0){let c=t.readBytes(d);h=JSON.parse(se.decode(c))}return{cmd:r,instanceId:i,templateId:s,layerId:a,x:o,y:l,zIndex:n,params:h??{}}}case 2:{let s=t.readU16BE(),a=t.readBytes(s),o=JSON.parse(se.decode(a));return{cmd:r,instanceId:i,params:o}}case 3:return{cmd:r,instanceId:i};case 4:return{cmd:r,instanceId:i};case 5:return{cmd:r,instanceId:i};default:return{cmd:r,instanceId:i}}}},Ur=class{listeners=new Map;on(e,t){this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e).push(t)}off(e,t){let r=this.listeners.get(e);if(r){let i=r.indexOf(t);i!==-1&&r.splice(i,1)}}emit(e,t){let r=this.listeners.get(e);r&&r.forEach(i=>i(t))}removeAllListeners(){this.listeners.clear()}};export{Ht as COLOR_SKIP,gt as CellStruct,wt as Display,gr as DisplayCompositor,fr as Engine,Rt as EngineStats,Ur as EventEmitter,It as FontType,me as Grid,vt as ImageFont,Bt as ImageFontRegistry,Re as InputBindingRegistry,Kt as LAYER_SIZE,yt as Layer,pt as LayerRasterizer,Ft as MacroRegistry,yr as OrderBuilder,zt as OrderDecoder,Et as OrderEncoder,Tt as SoundRegistry,Mt as SpriteRegistry,br as TickPacketDecoder,Ze as TickPacketEncoder,ze as UNICODE_TO_CP437,mt as User,Jt as UserUpdateBuilder,tr as UserUpdateParser,or as cp437ToUnicode,xt as cp437ToUnicodeCodepoint,sr as decodeCompressedInput,ir as encodeCompressedInput,lr as encodeCp437String,Le as getAtlasColumns,dr as getAtlasDimensions,kt as getMaxCharCode,nr as hasCP437Mapping,ar as stringToCp437,N as unicodeToCp437};
|