quake2ts 0.0.52 → 0.0.55
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/apps/demo/dist/assets/index-BBC0sAl6.js +1 -0
- package/apps/demo/dist/index.html +20 -0
- package/apps/viewer/dist/browser/index.global.js +1 -1
- package/apps/viewer/dist/browser/index.global.js.map +1 -1
- package/apps/viewer/dist/cjs/index.cjs +2627 -414
- package/apps/viewer/dist/cjs/index.cjs.map +1 -1
- package/apps/viewer/dist/esm/index.js +2627 -414
- package/apps/viewer/dist/esm/index.js.map +1 -1
- package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
- package/apps/viewer/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +2101 -108
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +2107 -108
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts +3 -2
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/client/dist/types/prediction.d.ts +3 -1
- package/packages/client/dist/types/prediction.d.ts.map +1 -1
- package/packages/engine/dist/browser/index.global.js +15 -15
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +18 -2
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +17 -2
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/host.d.ts +5 -2
- package/packages/engine/dist/types/host.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +3 -2
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/types/render/camera.d.ts +8 -0
- package/packages/engine/dist/types/render/camera.d.ts.map +1 -0
- package/packages/engine/dist/types/render/draw.d.ts +9 -0
- package/packages/engine/dist/types/render/draw.d.ts.map +1 -0
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +200 -3
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +200 -3
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/spawn.d.ts +1 -0
- package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +1 -0
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +2 -1
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +68 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +67 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/index.d.ts +2 -1
- package/packages/shared/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/types/pmove/apply.d.ts +5 -0
- package/packages/shared/dist/types/pmove/apply.d.ts.map +1 -0
- package/packages/shared/dist/types/pmove/index.d.ts +18 -0
- package/packages/shared/dist/types/pmove/index.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/index.d.ts +6 -0
- package/packages/shared/dist/types/protocol/index.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts +11 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Quake2Engine=(()=>{var $a=Object.create;var Fn=Object.defineProperty;var Ja=Object.getOwnPropertyDescriptor;var Qa=Object.getOwnPropertyNames;var Za=Object.getPrototypeOf,ec=Object.prototype.hasOwnProperty;var tc=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),rc=(r,e)=>{for(var t in e)Fn(r,t,{get:e[t],enumerable:!0})},ds=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Qa(e))!ec.call(r,o)&&o!==t&&Fn(r,o,{get:()=>e[o],enumerable:!(n=Ja(e,o))||n.enumerable});return r};var nc=(r,e,t)=>(t=r!=null?$a(Za(r)):{},ds(e||!r||!r.__esModule?Fn(t,"default",{value:r,enumerable:!0}):t,r)),oc=r=>ds(Fn({},"__esModule",{value:!0}),r);var Gs=tc((Zu,Us)=>{"use strict";Us.exports=Worker});var Nl={};rc(Nl,{ATTN_IDLE:()=>va,ATTN_LOOP_NONE:()=>xa,ATTN_NONE:()=>Co,ATTN_NORM:()=>ba,ATTN_STATIC:()=>Sa,AssetDependencyError:()=>Nt,AssetDependencyTracker:()=>Mn,AssetManager:()=>wo,AudioApi:()=>Oo,AudioContextController:()=>To,AudioRegistry:()=>fr,AudioRegistryError:()=>Sn,AudioSystem:()=>Do,BSP_SURFACE_FRAGMENT_SOURCE:()=>Ni,BSP_SURFACE_VERTEX_SOURCE:()=>Bi,BSP_VERTEX_LAYOUT:()=>Di,BspSurfacePipeline:()=>Vo,ConfigStringRegistry:()=>Xt,Cvar:()=>wr,CvarRegistry:()=>On,EngineHost:()=>Wt,EngineRuntime:()=>Mr,FixedTimestepLoop:()=>At,Framebuffer:()=>Bo,IndexBuffer:()=>we,LruCache:()=>it,MAX_SOUND_CHANNELS:()=>Pi,MD2_FRAGMENT_SHADER:()=>Ki,MD2_VERTEX_SHADER:()=>qi,MD3_FRAGMENT_SHADER:()=>es,MD3_VERTEX_SHADER:()=>Zi,Md2Loader:()=>Kt,Md2MeshBuffers:()=>Go,Md2ParseError:()=>j,Md2Pipeline:()=>Wo,Md3Loader:()=>Yt,Md3ModelMesh:()=>Xo,Md3ParseError:()=>xe,Md3Pipeline:()=>qo,Md3SurfaceMesh:()=>Cn,MusicSystem:()=>Ho,PARTICLE_FRAGMENT_SHADER:()=>rs,PARTICLE_VERTEX_SHADER:()=>ts,PakArchive:()=>qt,PakIndexStore:()=>Mo,PakIngestionError:()=>ot,PakParseError:()=>ge,PakValidationError:()=>Mt,PakValidator:()=>Nn,ParticleRenderer:()=>Yo,ParticleSystem:()=>Ko,RERELEASE_KNOWN_PAKS:()=>si,SKYBOX_FRAGMENT_SHADER:()=>Wi,SKYBOX_VERTEX_SHADER:()=>Gi,SOUND_FULLVOLUME:()=>pr,SOUND_LOOP_ATTENUATE:()=>_a,ShaderProgram:()=>ie,SkyboxPipeline:()=>Uo,SoundChannel:()=>Lo,SoundPrecache:()=>Po,SoundRegistry:()=>Fo,Texture2D:()=>hr,TextureCache:()=>jt,TextureCubeMap:()=>yr,VertexArray:()=>le,VertexBuffer:()=>se,VirtualFileSystem:()=>Bn,advanceAnimation:()=>ks,applySurfaceState:()=>Ra,attenuationToDistanceMultiplier:()=>Vt,boxIntersectsFrustum:()=>Ln,buildBspGeometry:()=>Ca,buildMd2Geometry:()=>Yi,buildMd2VertexData:()=>ji,buildMd3SurfaceGeometry:()=>Ji,buildMd3VertexData:()=>Qi,calculateMaxAudibleDistance:()=>Eo,calculatePakChecksum:()=>Cs,computeFrameBlend:()=>Ds,computeSkyScroll:()=>Ha,createAnimationState:()=>Hs,createAudioGraph:()=>zo,createEngine:()=>Bl,createEngineRuntime:()=>ws,createInitialChannels:()=>Io,createProgramFromSources:()=>La,createWebGLContext:()=>Ma,decodeOgg:()=>Ao,deriveSurfaceRenderState:()=>Ui,extractFrustumPlanes:()=>Ea,filesToPakSources:()=>ai,findLeafForPoint:()=>Oi,gatherVisibleFaces:()=>Pa,groupMd2Animations:()=>Is,ingestPakFiles:()=>Es,ingestPaks:()=>Vn,interpolateMd3Tag:()=>Ba,interpolateVec3:()=>Os,parseMd2:()=>ci,parseMd3:()=>li,parsePcx:()=>Bs,parseWal:()=>Gn,parseWalTexture:()=>Vs,parseWav:()=>Xn,pcxToRgba:()=>Wn,pickChannel:()=>Ro,preparePcxTexture:()=>Ns,removeViewTranslation:()=>Da,resolveLightStyles:()=>Vi,spatializeOrigin:()=>ko,spawnBlood:()=>Ua,spawnBulletImpact:()=>Na,spawnExplosion:()=>Va,spawnMuzzleFlash:()=>Wa,spawnTeleportFlash:()=>Ga,spawnTrail:()=>Xa,walToRgba:()=>ui,wireDropTarget:()=>Ts,wireFileInput:()=>zs});var ic=()=>typeof performance<"u"?performance.now():Date.now(),sc=r=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>r()):setTimeout(r,25)},At=class{constructor(e,t={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),t=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(t,e),this.running&&this.options.schedule(this.tick)};let n=t.fixedDeltaMs??25,o=t.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:t.maxDeltaMs??n*o,startTimeMs:t.startTimeMs,now:t.now??ic,schedule:t.schedule??sc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let t=(this.lastTimeMs??0)+e;this.lastTimeMs=t,this.advance(e,t)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,t){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:t}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:t,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Wt=class{constructor(e,t,n={}){this.game=e;this.client=t;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e)};this.renderClient=e=>{this.client&&this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame})};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new At({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var ms={x:0,y:0,z:0};var Xl=Math.PI/180;function fs(r,e){return{x:r.x-e.x,y:r.y-e.y,z:r.z-e.z}}function ac(r,e){return{x:r.x*e,y:r.y*e,z:r.z*e}}function $o(r,e){return r.x*e.x+r.y*e.y+r.z*e.z}function cc(r){return $o(r,r)}function Jo(r){return Math.sqrt(cc(r))}function Ee(r){let e=Jo(r);return e===0?r:ac(r,1/e)}var ql=Math.PI/180,Kl=180/Math.PI;function lc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ps(r,e){let t=e.x,n=e.y,o=e.z;return{x:r[0]*t+r[4]*n+r[8]*o+r[12],y:r[1]*t+r[5]*n+r[9]*o+r[13],z:r[2]*t+r[6]*n+r[10]*o+r[14]}}function hs(r,e){let t=lc();return t[0]=e[0].x,t[1]=e[0].y,t[2]=e[0].z,t[4]=e[1].x,t[5]=e[1].y,t[6]=e[1].z,t[8]=e[2].x,t[9]=e[2].y,t[10]=e[2].z,t[12]=r.x,t[13]=r.y,t[14]=r.z,t}var Re=1,nt=2;var Qo=8,Zo=16,uc=32;var dc=16384;var Pn=65536,ys=1<<17,mc=1<<18,fc=1<<19,pc=1<<20,hc=1<<21,yc=1<<22,gc=1<<23,Yl=1<<24,In=1<<25,xc=1<<26,jl=1<<27,$l=1<<28,Jl=1<<29,Rn=1<<30,Ql=1<<31;var Ar=0;var gs=4,xs=8,bs=16,vs=32,Ss=64;var Zl=1<<25,eu=1<<28,tu=1<<29,ru=1<<30,nu=1<<31;var ou=Re|nt,iu=Re|Pn|nt|In|Rn,su=Re|Pn|nt,au=Re|ys|nt|In|Rn,cu=uc|Qo|Zo,lu=Re|Zo|Qo,bc=Re|In|Rn|nt|xc,uu=mc|fc|pc|hc|yc|gc,du=Re|Qo|Zo|In|Rn,mu=Re|Pn|nt,fu=Re|nt,pu=Re|Pn|nt|ys,hu=bc|dc;var yu=Number.MAX_SAFE_INTEGER-1;var kn=(r=>(r[r.None=0]="None",r[r.Archive=1]="Archive",r[r.UserInfo=2]="UserInfo",r[r.ServerInfo=4]="ServerInfo",r[r.Latch=8]="Latch",r[r.Cheat=16]="Cheat",r))(kn||{});var Dn=256;var ei=256,ti=8192,Hn=2048,ri=512,ni=256,oi=Dn*2,ii=256,jo=32,_r=96;var R=(r=>(r[r.Name=0]="Name",r[r.CdTrack=1]="CdTrack",r[r.Sky=2]="Sky",r[r.SkyAxis=3]="SkyAxis",r[r.SkyRotate=4]="SkyRotate",r[r.StatusBar=5]="StatusBar",r[r.AirAccel=59]="AirAccel",r[r.MaxClients=60]="MaxClients",r[r.MapChecksum=61]="MapChecksum",r[r.Models=62]="Models",r[r.Sounds=62+ti]="Sounds",r[r.Images=r.Sounds+Hn]="Images",r[r.Lights=r.Images+ri]="Lights",r[r.ShadowLights=r.Lights+ei]="ShadowLights",r[r.Items=r.ShadowLights+ii]="Items",r[r.PlayerSkins=r.Items+ni]="PlayerSkins",r[r.General=r.PlayerSkins+Dn]="General",r[r.WheelWeapons=r.General+oi]="WheelWeapons",r[r.WheelAmmo=r.WheelWeapons+jo]="WheelAmmo",r[r.WheelPowerups=r.WheelAmmo+jo]="WheelPowerups",r[r.CdLoopCount=r.WheelPowerups+jo]="CdLoopCount",r[r.GameStyle=r.CdLoopCount+1]="GameStyle",r[r.MaxConfigStrings=r.GameStyle+1]="MaxConfigStrings",r))(R||{}),_s=R.MaxConfigStrings;function As(r){return r>=5&&r<59?_r*(59-r):r>=R.General&&r<R.WheelWeapons?_r*(R.MaxConfigStrings-r):_r}function vc(r){if(r<0||r>=R.MaxConfigStrings)throw new RangeError(`Configstring index ${r} is out of range (0-${R.MaxConfigStrings-1})`)}function Ms(r,e){let t=As(r);if(e.length>t)throw new RangeError(`Configstring ${r} exceeds maximum length (${e.length} > ${t}); limit is ${_r} chars per slot`)}var Xt=class{constructor(){this.values=new Map;this.modelCursor=R.Models;this.soundCursor=R.Sounds;this.imageCursor=R.Images;this.lightCursor=R.Lights;this.shadowLightCursor=R.ShadowLights;this.itemCursor=R.Items;this.playerSkinCursor=R.PlayerSkins;this.generalCursor=R.General}set(e,t){return vc(e),Ms(e,t),this.values.set(e,t),e}get(e){return this.values.get(e)}getAll(){let e=new Array(_s).fill("");for(let[t,n]of this.values.entries())e[t]=n;return e}modelIndex(e){return this.register(e,R.Models,ti,"modelCursor")}soundIndex(e){return this.register(e,R.Sounds,Hn,"soundCursor")}findSoundIndex(e){for(let t=R.Sounds;t<R.Sounds+Hn;t+=1)if(this.values.get(t)===e)return t}imageIndex(e){return this.register(e,R.Images,ri,"imageCursor")}lightIndex(e){return this.register(e,R.Lights,ei,"lightCursor")}shadowLightIndex(e){return this.register(e,R.ShadowLights,ii,"shadowLightCursor")}itemIndex(e){return this.register(e,R.Items,ni,"itemCursor")}playerSkinIndex(e){return this.register(e,R.PlayerSkins,Dn,"playerSkinCursor")}generalIndex(e){return this.register(e,R.General,oi,"generalCursor")}register(e,t,n,o){for(let a=t;a<t+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=t+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${t}`);return Ms(i,e),this.values.set(i,e),this[o]=i+1,i}};var Mr=class{constructor(e,t){this.engine=e;this.host=t;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function ws(r,e,t,n){return new Mr(r,new Wt(e,t,n))}var wr=class{constructor({name:e,defaultValue:t,description:n,flags:o=kn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=t,this.description=n,this.flags=o,this._value=t,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&kn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let t=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,t)}},On=class{constructor(){this.cvars=new Map}register(e){let t=this.cvars.get(e.name);if(t)return t;let n=new wr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,t){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(t),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let t of this.cvars.values())e=t.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,t)=>e.name.localeCompare(t.name))}};var Sc="PACK";function _c(r,e,t){let n=[];for(let o=0;o<t;o+=1){let i=r.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function X(r){return r.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Ac(){let r=new Uint32Array(256);for(let e=0;e<256;e+=1){let t=e;for(let n=0;n<8;n+=1)t=(t&1)!==0?3988292384^t>>>1:t>>>1;r[e]=t>>>0}return r}var Mc=Ac();function Ls(r){let e=4294967295;for(let t=0;t<r.length;t+=1){let n=r[t];e=Mc[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var ge=class extends Error{},qt=class r{constructor(e,t,n,o){this.name=e;this.buffer=t;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=t.byteLength}static fromArrayBuffer(e,t){let n=new DataView(t);if(t.byteLength<12)throw new ge("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Sc)throw new ge(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new ge(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new ge(`Invalid directory length: ${s}`);if(i+s>t.byteLength)throw new ge("Directory exceeds buffer length");let c=s/64,l=[],u=new Map;for(let d=0;d<c;d+=1){let m=i+d*64,p=_c(n,m,56),h=X(p),y=n.getInt32(m+56,!0),g=n.getInt32(m+60,!0);if(y<0||g<0||y+g>t.byteLength)throw new ge(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${y}, length=${g})`);if(!h)throw new ge(`Entry ${d} has an empty name`);let b={name:h,offset:y,length:g};u.set(h,b)}return l.push(...u.values()),new r(e,t,l,Ls(new Uint8Array(t)))}getEntry(e){return this.entries.get(X(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let t=this.getEntry(e);if(!t)throw new ge(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,t.offset,t.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Cs(r){return Ls(new Uint8Array(r))}var Bn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(t=>this.mountPak(t))}mountPak(e){this.mounts.push(e);for(let t of e.listEntries()){let n=X(t.name);this.files.set(n,{archive:e,entry:t})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(X(e))}stat(e){let t=this.files.get(X(e));if(t)return{path:t.entry.name,size:t.entry.length,sourcePak:t.archive.name}}async readFile(e){let t=this.files.get(X(e));if(!t)throw new Error(`File not found in VFS: ${e}`);return t.archive.readFile(e)}list(e=""){let t=X(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=t?`${t}/`:"";for(let s of this.files.values()){if(t&&!s.entry.name.startsWith(i))continue;let a=t?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let t=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(t)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var si=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Mt=class extends Error{constructor(t){super(t.status==="unknown"?`Unknown PAK not allowed: ${t.name}`:`PAK checksum mismatch for ${t.name}`);this.result=t;this.name="PakValidationError"}},Nn=class{constructor(e=si){this.known=new Map;e.forEach(t=>this.known.set(this.normalizePakName(t.name),t))}validateArchive(e,t){let n=this.normalizePakName(t??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,t){let n=this.validateArchive(e,t);if(n.status==="mismatch")throw new Mt(n);return n}normalizePakName(e){let t=X(e),n=t.split("/"),o=n.pop()??t,i=n.pop();return i?`${o}@${i}`:o}};var ot=class extends Error{constructor(t,n){super(`Failed to ingest PAK: ${t}`);this.file=t;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function wc(r,e){if(typeof r.arrayBuffer=="function"){let t=await r.arrayBuffer();return e?.({file:"blob",loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}if(typeof FileReader<"u")return new Promise((t,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||r.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?t(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(r)});if(typeof Response<"u"){let t=await new Response(r).arrayBuffer();return e?.({file:"blob",loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}if(typeof r.stream=="function"){let t=r.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await t.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:r.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new ot("blob",new Error("Unsupported Blob type"))}async function Lc(r,e){if(r.data instanceof ArrayBuffer)return e?.({file:r.name,loadedBytes:r.data.byteLength,totalBytes:r.data.byteLength,state:"reading"}),r.data;if(r.data instanceof Blob){let n=r.data.size;return wc(r.data,o=>e?.({...o,file:r.name,totalBytes:n}))}let t=r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength);return e?.({file:r.name,loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}async function Vn(r,e,t){let n=typeof t=="function"?{onProgress:t}:t??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let u=await Lc(l,n.onProgress),d=qt.fromArrayBuffer(l.name,u),m=n.validator?.validateArchive(d);if(m){n.onValidationResult?.(m);let p=m.status==="mismatch",h=m.status==="unknown";if(p&&i||h&&!s){let y=new Mt(m);if(n.onError?.(l.name,y),a)throw new ot(l.name,y);c.push({archive:d,mounted:!1,validation:m});continue}}if(r.mountPak(d),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(d)}catch(p){if(n.onError?.(l.name,p),a)throw new ot(l.name,p)}n.onProgress?.({file:l.name,loadedBytes:u.byteLength,totalBytes:u.byteLength,state:"parsed"}),c.push({archive:d,mounted:!0,validation:m})}catch(u){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,u),a)throw new ot(l.name,u)}return c}var it=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}set(e,t){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,t),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,t])=>({key:e,value:t}))}};function Cc(r){return Array.isArray(r)?r:Array.from(r)}function ai(r){return Cc(r).map(e=>({name:e.name,data:e}))}async function Es(r,e,t){let n=ai(e);return Vn(r,n,t??{})}function Ts(r,e){let t=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return r.addEventListener("dragover",t),r.addEventListener("drop",n),()=>{r.removeEventListener("dragover",t),r.removeEventListener("drop",n)}}function zs(r,e){let t=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return r.addEventListener("change",t),()=>r.removeEventListener("change",t)}var Ec=844121161,Tc=8,Fs=68,zc=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],j=class extends Error{},Kt=class{constructor(e){this.vfs=e}async load(e){let t=await this.vfs.readFile(e),n=new Uint8Array(t.byteLength);return n.set(t),ci(n.buffer)}};function Ps(r,e,t){let n=[];for(let o=0;o<t;o+=1){let i=r.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function Lr(r,e,t,n){if(t!==0&&(e<Fs||e+t>r.byteLength))throw new j(`${n} section is out of bounds`)}function Fc(r){if(r.byteLength<Fs)throw new j("MD2 buffer too small to contain header");let e=new DataView(r),t=e.getInt32(0,!0),n=e.getInt32(4,!0);if(t!==Ec)throw new j(`Invalid MD2 ident: ${t}`);if(n!==Tc)throw new j(`Unsupported MD2 version: ${n}`);let o={ident:t,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new j(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>r.byteLength)throw new j("MD2 offset_end exceeds buffer length");return o}function Pc(r,e){let t=e.numSkins*64;Lr(r,e.offsetSkins,t,"skins");let n=new DataView(r,e.offsetSkins,t),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ps(n,i*64,64)});return o}function Ic(r,e){let t=e.numTexCoords*4;Lr(r,e.offsetTexCoords,t,"texcoords");let n=new DataView(r,e.offsetTexCoords,t),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function Rc(r,e){let t=e.numTriangles*12;Lr(r,e.offsetTriangles,t,"triangles");let n=new DataView(r,e.offsetTriangles,t),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new j("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function kc(r,e){let t=e.numFrames*e.frameSize;Lr(r,e.offsetFrames,t,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(r,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ps(s,24,16),u=[];for(let d=0;d<e.numVertices;d+=1){let m=40+d*4,p={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=zc[h];if(!y)throw new j(`Invalid normal index ${h} in frame ${l}`);u.push({position:p,normalIndex:h,normal:y})}n.push({name:l,vertices:u})}return n}function Dc(r,e){let t=e.numGlCommands*4;if(Lr(r,e.offsetGlCommands,t,"gl commands"),t===0)return[];let n=new DataView(r,e.offsetGlCommands,t),o=[],i=0;for(;;){if(i+4>t)throw new j("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>t)throw new j("GL command vertex block exceeds buffer");for(let u=0;u<a;u+=1){let d=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new j("GL command references invalid vertex index");c.push({s:d,t:m,vertexIndex:p})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==t)throw new j("GL command list did not consume expected data");return o}function ci(r){let e=Fc(r),t=Pc(r,e),n=Ic(r,e),o=Rc(r,e),i=kc(r,e),s=Dc(r,e);return{header:e,skins:t,texCoords:n,triangles:o,frames:i,glCommands:s}}function Is(r){let e=[],t=0;for(;t<r.length;){let n=r[t].name,o=n.replace(/\d+$/,"")||n,i=t;for(;i+1<r.length&&(r[i+1].name.replace(/\d+$/,"")||r[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:t,lastFrame:i}),t=i+1}return e}var Rs=860898377,Hc=15,xe=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Cr(r,e,t){let n=new Uint8Array(r.buffer,r.byteOffset+e,t);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function Oc(r){let e=(r>>8&255)*(2*Math.PI/255),t=(r&255)*(2*Math.PI/255),n=Math.sin(t);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(t)}}function Un(r,e,t,n){if(e<0||e+t>n)throw new xe(`${r} exceeds buffer bounds`)}function Bc(r){let e=r.getInt32(0,!0);if(e!==Rs)throw new xe(`Invalid MD3 ident: ${e}`);let t=r.getInt32(4,!0);if(t!==Hc)throw new xe(`Unsupported MD3 version: ${t}`);let n=Cr(r,8,64),o=r.getInt32(72,!0),i=r.getInt32(76,!0),s=r.getInt32(80,!0),a=r.getInt32(84,!0),c=r.getInt32(88,!0),l=r.getInt32(92,!0),u=r.getInt32(96,!0),d=r.getInt32(100,!0),m=r.getInt32(104,!0);if(i<=0||a<0||s<0)throw new xe("Invalid MD3 counts");return{ident:e,version:t,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:u,ofsSurfaces:d,ofsEnd:m}}function Nc(r,e){let t=[];Un("Frames",e.ofsFrames,e.numFrames*56,r.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;t.push({minBounds:{x:r.getFloat32(i,!0),y:r.getFloat32(i+4,!0),z:r.getFloat32(i+8,!0)},maxBounds:{x:r.getFloat32(i+12,!0),y:r.getFloat32(i+16,!0),z:r.getFloat32(i+20,!0)},localOrigin:{x:r.getFloat32(i+24,!0),y:r.getFloat32(i+28,!0),z:r.getFloat32(i+32,!0)},radius:r.getFloat32(i+36,!0),name:Cr(r,i+40,16)})}return t}function Vc(r,e){let t=[],o=e.numFrames*e.numTags*112;Un("Tags",e.ofsTags,o,r.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,u=l+12;s.push({name:Cr(r,c,64),origin:{x:r.getFloat32(l,!0),y:r.getFloat32(l+4,!0),z:r.getFloat32(l+8,!0)},axis:[{x:r.getFloat32(u,!0),y:r.getFloat32(u+4,!0),z:r.getFloat32(u+8,!0)},{x:r.getFloat32(u+12,!0),y:r.getFloat32(u+16,!0),z:r.getFloat32(u+20,!0)},{x:r.getFloat32(u+24,!0),y:r.getFloat32(u+28,!0),z:r.getFloat32(u+32,!0)}]})}t.push(s)}return t}function Uc(r,e){let t=r.getInt32(e,!0);if(t!==Rs)throw new xe(`Invalid surface ident at ${e}: ${t}`);let n=Cr(r,e+4,64),o=r.getInt32(e+68,!0),i=r.getInt32(e+72,!0),s=r.getInt32(e+76,!0),a=r.getInt32(e+80,!0),c=r.getInt32(e+84,!0),l=r.getInt32(e+88,!0),u=r.getInt32(e+92,!0),d=r.getInt32(e+96,!0),m=r.getInt32(e+100,!0),p=r.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new xe(`Invalid surface counts for ${n}`);let h=p;Un(`Surface ${n}`,e,h,r.byteLength);let y=[],g=e+l;for(let N=0;N<c;N+=1){let K=g+N*12;y.push({indices:[r.getInt32(K,!0),r.getInt32(K+4,!0),r.getInt32(K+8,!0)]})}let b=[],L=e+u;for(let N=0;N<s;N+=1){let K=L+N*68;b.push({name:Cr(r,K,64),shaderIndex:r.getInt32(K+64,!0)})}let C=[],W=e+d;for(let N=0;N<a;N+=1){let K=W+N*8;C.push({s:r.getFloat32(K,!0),t:r.getFloat32(K+4,!0)})}let H=[],Le=e+m;for(let N=0;N<i;N+=1){let K=[];for(let Ie=0;Ie<a;Ie+=1){let Ce=Le+(N*a+Ie)*8,et=r.getInt16(Ce,!0)/64,vr=r.getInt16(Ce+2,!0)/64,Ut=r.getInt16(Ce+4,!0)/64,tt=r.getUint16(Ce+6,!0);K.push({position:{x:et,y:vr,z:Ut},latLng:tt,normal:Oc(tt)})}H.push(K)}return{surface:{name:n,flags:o,numFrames:i,shaders:b,triangles:y,texCoords:C,vertices:H},nextOffset:e+p}}function li(r){if(r.byteLength<108)throw new xe("MD3 buffer too small for header");let e=new DataView(r),t=Bc(e);Un("MD3 end",t.ofsEnd,0,r.byteLength);let n=Nc(e,t),o=Vc(e,t),i=[],s=t.ofsSurfaces;for(let a=0;a<t.numSurfaces;a+=1){let{surface:c,nextOffset:l}=Uc(e,s);i.push(c),s=l}if(s!==t.ofsEnd)throw new xe("Surface parsing did not reach ofsEnd");return{header:t,frames:n,tags:o,surfaces:i}}var Yt=class{constructor(e){this.vfs=e}async load(e){let t=await this.vfs.readFile(e);return li(t.slice().buffer)}};function ks(r,e){let t=(r.sequence.end-r.sequence.start+1)/r.sequence.fps,n=r.sequence.loop!==!1,o=r.time+e;return n?o=(o%t+t)%t:o>t&&(o=t),{...r,time:Math.max(0,Math.min(o,t))}}function Ds(r){let e=r.sequence.end-r.sequence.start+1,t=1/r.sequence.fps,n=r.sequence.loop!==!1,o=r.time/t;if(!n&&o>=e)return{frame:r.sequence.end,nextFrame:r.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=r.sequence.start+s,c=s+1>=e?n?r.sequence.start:r.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Hs(r){return{sequence:r,time:0}}function Os(r,e,t){return{x:r.x+(e.x-r.x)*t,y:r.y+(e.y-r.y)*t,z:r.z+(e.z-r.z)*t}}var Er=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Gn(r){if(r.byteLength<100)throw new Er("WAL buffer too small");let e=new DataView(r),t=new Uint8Array(r,0,32),n=new TextDecoder("utf-8").decode(t).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(r,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),u=e.getInt32(92,!0),d=e.getInt32(96,!0);if(o<=0||i<=0)throw new Er("Invalid WAL dimensions");let m=[],p=o,h=i;for(let y=0;y<s.length;y+=1){let g=s[y],b=Math.max(1,p*h|0);if(g<=0||g+b>r.byteLength)throw new Er(`Invalid WAL mip offset for level ${y}`);let L=new Uint8Array(r,g,b);m.push({level:y,width:p,height:h,data:L}),p=Math.max(1,p>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:u,value:d}}var wt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Bs(r){if(r.byteLength<128)throw new wt("PCX buffer too small for header");let e=new DataView(r),t=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(t!==10||n!==1)throw new wt("Unsupported PCX encoding");if(o!==8)throw new wt("Only 8bpp PCX files are supported");let l=a-i+1,u=c-s+1,d=e.getUint16(66,!0),m=r.byteLength-769;if(m<128||new DataView(r,m,1).getUint8(0)!==12)throw new wt("Missing PCX palette");let p=new Uint8Array(r,m+1,768),h=new Uint8Array(r,128,m-128),y=new Uint8Array(l*u),g=0,b=0;for(let L=0;L<u;L+=1){let C=0;for(;C<d&&g<h.length;){let W=1,H=h[g++];if((H&192)===192){if(W=H&63,g>=h.length)throw new wt("Unexpected end of PCX RLE data");H=h[g++]}for(let Le=0;Le<W&&C<d;Le+=1)C<l&&(y[b++]=H),C+=1}}return{width:l,height:u,bitsPerPixel:o,pixels:y,palette:p}}function Wn(r){let e=new Uint8Array(r.width*r.height*4);for(let t=0;t<r.pixels.length;t+=1){let n=r.pixels[t],o=n*3,i=t*4;e[i]=r.palette[o],e[i+1]=r.palette[o+1],e[i+2]=r.palette[o+2],e[i+3]=n===255?0:255}return e}var jt=class{constructor(e={}){this.cache=new it(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,t){this.cache.set(e.toLowerCase(),t)}clear(){this.cache.clear()}};function ui(r,e){let t=[];for(let n of r.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}t.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:r.width,height:r.height,levels:t,source:"wal"}}function Ns(r){let e=Wn(r),t={level:0,width:r.width,height:r.height,rgba:e};return{width:r.width,height:r.height,levels:[t],source:"pcx"}}function Vs(r,e){return ui(Gn(r),e)}var Lt=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function di(r,e,t){return new TextDecoder("ascii").decode(new Uint8Array(r.buffer,r.byteOffset+e,t))}function Xn(r){if(r.byteLength<44)throw new Lt("WAV buffer too small");let e=new DataView(r);if(di(e,0,4)!=="RIFF"||di(e,8,4)!=="WAVE")throw new Lt("Invalid WAV header");let t=12,n=-1,o=-1,i=0,s=0;for(;t+8<=r.byteLength;){let h=di(e,t,4),y=e.getUint32(t+4,!0),g=t+8;h==="fmt "?(n=g,i=y):h==="data"&&(o=g,s=y),t=g+y}if(n===-1||o===-1)throw new Lt("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),u=e.getUint16(n+14,!0);if(a!==1)throw new Lt("Only PCM WAV is supported");let d=u/8,m=s/(d*c),p=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let g=h*c+y,b=o+g*d,L=0;if(u===8)L=e.getUint8(b),p[g]=(L-128)/128;else if(u===16)L=e.getInt16(b,!0),p[g]=L/32768;else if(u===24){let C=e.getUint8(b),W=e.getUint8(b+1),H=e.getInt8(b+2);L=C|W<<8|H<<16,p[g]=L/8388608}else throw new Lt(`Unsupported bitsPerSample: ${u}`)}return{sampleRate:l,channels:c,bitsPerSample:u,samples:p}}var Gc=(r,e=4294967295,t=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^t:s<<1;n[o]=s}for(o=0;o<r.length;o++)a=a<<8^n[255&(a>>24^r[o])];return a};var mi=(r,e=Gc)=>{let t=g=>new Uint8Array(g.length/2).map(((b,L)=>parseInt(g.substring(2*L,2*(L+1)),16))),n=g=>t(g)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((g,b)=>o.set(g,b)));let i=new Uint8Array(r.length),s,a,c,l=!1,u=0,d=42,m=r.length>13&&r.substring(0,9)==="dynEncode",p=0;m&&(p=11,a=n(r.substring(9,p)),a<=1&&(p+=2,d=n(r.substring(11,p))),a===1&&(p+=8,c=(g=>new DataView(t(g).buffer).getInt32(0,!0))(r.substring(13,p))));let h=256-d;for(let g=p;g<r.length;g++)if(s=r.charCodeAt(g),s!==61||l){if(s===92&&g<r.length-5&&m){let b=r.charCodeAt(g+1);b!==117&&b!==85||(s=parseInt(r.substring(g+2,g+6),16),g+=5)}if(s>255){let b=o.get(s);b&&(s=b+127)}l&&(l=!1,s-=64),i[u++]=s<d&&s>0?s+h:s-d}else l=!0;let y=i.subarray(0,u);if(m&&a===1){let g=e(y);if(g!==c){let b="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",b+`
|
|
2
|
-
`,"Expected: "+c+"; Got: "+
|
|
3
|
-
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(b)}}return y};function O(){let r=Uint8Array,e=Float32Array;O.modules||Object.defineProperties(O,{modules:{value:new WeakMap},setModule:{value(t,n){O.modules.set(t,Promise.resolve(n))}},getModule:{value(t,n){let o=O.modules.get(t);return o||(n?o=WebAssembly.compile(mi(n)):(n=t.wasm,o=O.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),O.modules.set(t,o)),o}},concatFloat32:{value(t,n){let o=new e(n),i=0,s=0;for(;i<t.length;)o.set(t[i],s),s+=t[i++].length;return o}},getDecodedAudio:{value:(t,n,o,i,s)=>({errors:t,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(t,n,o,i,s,a){let c=[],l,u;for(l=0;l<o;l++){let d=[];for(u=0;u<n.length;)d.push(n[u++][l]||[]);c.push(O.concatFloat32(d,i))}return O.getDecodedAudio(t,c,i,s,a)}},inflateDynEncodeString:{value(t){return t=mi(t),new Promise(n=>{let o=String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;O.getModule(O,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new r(c),u=new DataView(c),d=s.get("__heap_base"),m=t.length,p=d;d+=4,u.setInt32(p,m,!0);let h=d;d+=m,l.set(t,h);let y=d;d+=4,u.setInt32(y,l.byteLength-d,!0),a(d,y,h,p),n(l.slice(d,d+u.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(t,n,o)=>{let i=[],s=0;for(;s<n;)i.push(t.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(t,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*t);return o&&this._pointers.add(i),{ptr:i,len:t,buf:new n(this._wasm.HEAP,i,t)}},this.free=()=>{this._pointers.forEach(t=>{this._wasm.free(t)}),this._pointers.clear()},this.codeToString=t=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[t];i!==0;i=o[++t])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(t,n,o,i,s,a)=>{t.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(t,n)=>(n&&O.setModule(t,n),this._wasm=new t(O).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Ws=nc(Gs(),1);var Wc=()=>globalThis.Worker||Ws.default,$t=class extends Wc(){constructor(e,t,n,o){O.modules||new O;let i=O.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,u,d)=>{let m,p,h=new Promise(y=>{p=y});self.onmessage=({data:{id:y,command:g,data:b}})=>{let L=h,C={id:y},W;g==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:u},EmscriptenWASM:{value:d},module:{value:b.module},isWebWorker:{value:!0}}),m=new l(b.options),p()):g==="free"?m.free():g==="ready"?L=L.then(()=>m.ready):g==="reset"?L=L.then(()=>m.reset()):(Object.assign(C,m[g](Array.isArray(b)?b.map(H=>new Uint8Array(H)):new Uint8Array(b))),W=C.channelData?C.channelData.map(H=>H.buffer):[]),L.then(()=>self.postMessage(C,W))}}).toString()})(${n}, ${O}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),O.modules.set(n,i)}super(i,{name:t}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o(O).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,t){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:t}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var qn=(r,e)=>{Object.defineProperty(r,"name",{value:e})};var B=Symbol,Xs=", ",_=(()=>{let r="front",e="side",t="rear",n="left",o="center",i="right";return["",r+" ",e+" ",t+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(Xs)))})(),ke="LFE",st="monophonic (mono)",at="stereo",Tr="surround",V=(r,...e)=>`${[st,at,`linear ${Tr}`,"quadraphonic",`5.0 ${Tr}`,`5.1 ${Tr}`,`6.1 ${Tr}`,`7.1 ${Tr}`][r-1]} (${e.join(Xs)})`,zr=[st,V(2,_[0][0]),V(3,_[0][2]),V(4,_[1][0],_[3][0]),V(5,_[1][2],_[3][0]),V(6,_[1][2],_[3][0],ke),V(7,_[1][2],_[2][0],_[3][4],ke),V(8,_[1][2],_[2][0],_[3][0],ke)],qs=192e3,Ks=176400,Kn=96e3,Yn=88200,Ys=64e3,ct=48e3,Jt=44100,Qt=32e3,Zt=24e3,er=22050,tr=16e3,jn=12e3,$n=11025,rr=8e3,js=7350,Te="absoluteGranulePosition",w="bandwidth",Q="bitDepth",Z="bitrate",Fr=Z+"Maximum",Pr=Z+"Minimum",Ir=Z+"Nominal",De="buffer",Rr=De+"Fullness",D="codec",ee=D+"Frames",kr="coupledStreamCount",nr="crc",Dr=nr+"16",Hr=nr+"32",k="data",S="description",He="duration",or="emphasis",Or="hasOpusPadding",ue="header",lt="isContinuedPacket",Br="isCopyrighted",ut="isFirstPage",Nr="isHome",de="isLastPage",Ue="isOriginal",Ge="isPrivate",Vr="isVbr",ae="layer",f="length",M="mode",We=M+"Extension",Jn="mpeg",Xe=Jn+"Version",Ur="numberAACFrames",Gr="outputGain",Ct="preSkip",Wr="profile",Qn=B(),qe="protection",fi="rawData",be="segments",E="subarray",dt="version",Et="vorbis",Xr=Et+"Comments",ir=Et+"Setup",Zn="block",qr=Zn+"ingStrategy",eo=B(),Ke=Zn+"Size",mt=Zn+"size0",ft=Zn+"size1",Kr=B(),to="channel",Ye=to+"MappingFamily",Yr=to+"MappingTable",te=to+"Mode",jr=B(),v=to+"s",$s="copyright",$r=$s+"Id",Jr=$s+"IdStart",je="frame",$e=je+"Count",ce=je+"Length",ro="Number",Je=je+ro,Oe=je+"Padding",A=je+"Size",Js="Rate",Qr="inputSample"+Js,pi="page",Tt=pi+"Checksum",sr=B(),pt=pi+"SegmentTable",q=pi+"Sequence"+ro,hi="sample",Zr=hi+ro,T=hi+Js,Be=B(),z=hi+"s",no="stream",en=no+"Count",tn=no+"Info",Ne=no+"Serial"+ro,yi=no+"StructureVersion",gi="total",zt=gi+"BytesOut",Ft=gi+"Duration",Pt=gi+"Samples",F=B(),ve=B(),rn=B(),ht=B(),ze=B(),oo=B(),xi=B(),yt=B(),P=B(),Se=B(),_e=B(),Ve=B(),gt=B(),io=B(),Fe=B(),Pe=B(),Ae=B(),so=B(),re=Uint8Array,xt=DataView,I="reserved",ne="bad",ar="free",nn="none",ao="16bit CRC";var bi=(r,e,t)=>{for(let n=0;n<r[f];n++){let o=e(n);for(let i=8;i>0;i--)o=t(o);r[n]=o}return r},qc=bi(new re(256),r=>r,r=>r&128?7^r<<1:r<<1),U=[bi(new Uint16Array(256),r=>r<<8,r=>r<<1^(r&32768?32773:0))],G=[bi(new Uint32Array(256),r=>r,r=>r>>>1^(r&1)*3988292384)];for(let r=0;r<15;r++){U.push(new Uint16Array(256)),G.push(new Uint32Array(256));for(let e=0;e<=255;e++)U[r+1][e]=U[0][U[r][e]>>>8]^U[r][e]<<8,G[r+1][e]=G[r][e]>>>8^G[0][G[r][e]&255]}var Zs=r=>{let e=0,t=r[f];for(let n=0;n!==t;n++)e=qc[e^r[n]];return e},ea=r=>{let e=r[f],t=e-16,n=0,o=0;for(;o<=t;)n^=r[o++]<<8|r[o++],n=U[15][n>>8]^U[14][n&255]^U[13][r[o++]]^U[12][r[o++]]^U[11][r[o++]]^U[10][r[o++]]^U[9][r[o++]]^U[8][r[o++]]^U[7][r[o++]]^U[6][r[o++]]^U[5][r[o++]]^U[4][r[o++]]^U[3][r[o++]]^U[2][r[o++]]^U[1][r[o++]]^U[0][r[o++]];for(;o!==e;)n=(n&255)<<8^U[0][n>>8^r[o++]];return n},ta=r=>{let e=r[f],t=e-16,n=0,o=0;for(;o<=t;)n=G[15][(r[o++]^n)&255]^G[14][(r[o++]^n>>>8)&255]^G[13][(r[o++]^n>>>16)&255]^G[12][r[o++]^n>>>24]^G[11][r[o++]]^G[10][r[o++]]^G[9][r[o++]]^G[8][r[o++]]^G[7][r[o++]]^G[6][r[o++]]^G[5][r[o++]]^G[4][r[o++]]^G[3][r[o++]]^G[2][r[o++]]^G[1][r[o++]]^G[0][r[o++]];for(;o!==e;)n=G[0][(n^r[o++])&255]^n>>>8;return n^-1},sn=(...r)=>{let e=new re(r.reduce((t,n)=>t+n[f],0));return r.reduce((t,n)=>(e.set(n,t),t+n[f]),0),e},me=r=>String.fromCharCode(...r),Qs=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],on=r=>Qs[r&15]<<4|Qs[r>>4],co=class{constructor(e){this._data=e,this._pos=e[f]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let t=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(on(this._data[t-1])<<8)+on(this._data[t])>>7-n&255}},ra=(r,e)=>{try{return r.getBigInt64(e,!0)}catch{let t=r.getUint8(e+7)&128?-1:1,n=r.getUint32(e,!0),o=r.getUint32(e+4,!0);return t===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),t*(n+o*2**32)}};var an=class{constructor(e,t){this._onCodecHeader=e,this._onCodecUpdate=t,this[Fe]()}[Pe](){this._isEnabled=!0}[Fe](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[io](e,t){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},t),this._codecShouldUpdate=!1}}[P](e){let t=this._headerCache.get(e);return t&&this._updateCurrentHeader(e),t}[Se](e,t,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...t}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,t),this._codecUpdateData.set(t,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var Y=new WeakMap,$=new WeakMap;var oe=class{constructor(e,t){this._codecParser=e,this._headerCache=t}*[xi](){let e;do{if(e=yield*this.Frame[_e](this._codecParser,this._headerCache,0),e)return e;this._codecParser[ve](1)}while(!0)}*[yt](e){let t=yield*this[xi](),n=$.get(t)[f];if(e||this._codecParser._flushing||(yield*this.Header[P](this._codecParser,this._headerCache,n)))return this._headerCache[Pe](),this._codecParser[ve](n),this._codecParser[ht](t),t;this._codecParser[ze](`Missing ${je} at ${n} bytes from current position.`,`Dropping current ${je} and trying again.`),this._headerCache[Fe](),this._codecParser[ve](1)}};var It=class{constructor(e,t){$.set(this,{[ue]:e}),this[k]=t}};var fe=class extends It{static*[_e](e,t,n,o,i){let s=yield*e[P](n,o,i);if(s){let a=Y.get(s)[ce],c=Y.get(s)[z],l=(yield*n[F](a,i))[E](0,a);return new t(s,l,c)}else return null}constructor(e,t,n){super(e,t),this[ue]=e,this[z]=n,this[He]=n/e[T]*1e3,this[Je]=null,this[zt]=null,this[Pt]=null,this[Ft]=null,$.get(this)[f]=t[f]}};var vi="unsynchronizationFlag",Si="extendedHeaderFlag",_i="experimentalFlag",Ai="footerPresent",cn=class r{static*getID3v2Header(e,t,n){let i={},s=yield*e[F](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[F](10,n),i[dt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[vi]=!!(s[5]&128),i[Si]=!!(s[5]&64),i[_i]=!!(s[5]&32),i[Ai]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[f]=10+a,new r(i)}constructor(e){this[dt]=e[dt],this[vi]=e[vi],this[Si]=e[Si],this[_i]=e[_i],this[Ai]=e[Ai],this[f]=e[f]}};var pe=class{constructor(e){Y.set(this,e),this[Q]=e[Q],this[Z]=null,this[v]=e[v],this[te]=e[te],this[T]=e[T]}};var aa={0:[ar,ar,ar,ar,ar],16:[32,32,32,32,8],240:[ne,ne,ne,ne,ne]},lo=(r,e,t)=>8*((r+t)%e+e)*(1<<(r+t)/e)-8*e*(e/8|0);for(let r=2;r<15;r++)aa[r<<4]=[r*32,lo(r,4,0),lo(r,4,-1),lo(r,8,4),lo(r,8,0)];var Kc=0,Yc=1,jc=2,$c=3,na=4,uo="bands ",mo=" to 31",oa={0:uo+4+mo,16:uo+8+mo,32:uo+12+mo,48:uo+16+mo},Rt="bitrateIndex",ln="v2",go="v1",fo="Intensity stereo ",po=", MS stereo ",ho="on",yo="off",Jc={0:fo+yo+po+yo,16:fo+ho+po+yo,32:fo+yo+po+ho,48:fo+ho+po+ho},Mi={0:{[S]:I},2:{[S]:"Layer III",[Oe]:1,[We]:Jc,[go]:{[Rt]:jc,[z]:1152},[ln]:{[Rt]:na,[z]:576}},4:{[S]:"Layer II",[Oe]:1,[We]:oa,[z]:1152,[go]:{[Rt]:Yc},[ln]:{[Rt]:na}},6:{[S]:"Layer I",[Oe]:4,[We]:oa,[z]:384,[go]:{[Rt]:Kc},[ln]:{[Rt]:$c}}},wi="MPEG Version ",ia="ISO/IEC ",Qc={0:{[S]:`${wi}2.5 (later extension of MPEG 2)`,[ae]:ln,[T]:{0:$n,4:jn,8:rr,12:I}},8:{[S]:I},16:{[S]:`${wi}2 (${ia}13818-3)`,[ae]:ln,[T]:{0:er,4:Zt,8:tr,12:I}},24:{[S]:`${wi}1 (${ia}11172-3)`,[ae]:go,[T]:{0:Jt,4:ct,8:Qt,12:I}},length:f},Zc={0:ao,1:nn},el={0:nn,1:"50/15 ms",2:I,3:"CCIT J.17"},sa={0:{[v]:2,[S]:at},64:{[v]:2,[S]:"joint "+at},128:{[v]:2,[S]:"dual channel"},192:{[v]:1,[S]:st}},kt=class r extends pe{static*[P](e,t,n){let o={},i=yield*cn.getID3v2Header(e,t,n);i&&(yield*e[F](i[f],n),e[ve](i[f]));let s=yield*e[F](4,n),a=me(s[E](0,4)),c=t[P](a);if(c)return new r(c);if(s[0]!==255||s[1]<224)return null;let l=Qc[s[1]&24];if(l[S]===I)return null;let u=s[1]&6;if(Mi[u][S]===I)return null;let d={...Mi[u],...Mi[u][l[ae]]};if(o[Xe]=l[S],o[ae]=d[S],o[z]=d[z],o[qe]=Zc[s[1]&1],o[f]=4,o[Z]=aa[s[2]&240][d[Rt]],o[Z]===ne||(o[T]=l[T][s[2]&12],o[T]===I)||(o[Oe]=s[2]&2&&d[Oe],o[Ge]=!!(s[2]&1),o[ce]=Math.floor(125*o[Z]*o[z]/o[T]+o[Oe]),!o[ce]))return null;let m=s[3]&192;if(o[te]=sa[m][S],o[v]=sa[m][v],o[We]=d[We][s[3]&48],o[Br]=!!(s[3]&8),o[Ue]=!!(s[3]&4),o[or]=el[s[3]&3],o[or]===I)return null;o[Q]=16;{let{length:p,frameLength:h,samples:y,...g}=o;t[Se](a,o,g)}return new r(o)}constructor(e){super(e),this[Z]=e[Z],this[or]=e[or],this[Oe]=e[Oe],this[Br]=e[Br],this[Ue]=e[Ue],this[Ge]=e[Ge],this[ae]=e[ae],this[We]=e[We],this[Xe]=e[Xe],this[qe]=e[qe]}};var un=class r extends fe{static*[_e](e,t,n){return yield*super[_e](kt,r,e,t,n)}constructor(e,t,n){super(e,t,n)}};var dn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=un,this.Header=kt,n(this[D])}get[D](){return Jn}*[Ve](){return yield*this[yt]()}};var tl={0:"MPEG-4",8:"MPEG-2"},rl={0:"valid",2:ne,4:ne,6:ne},nl={0:ao,1:nn},ol={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},il={0:Kn,4:Yn,8:Ys,12:ct,16:Jt,20:Qt,24:Zt,28:er,32:tr,36:jn,40:$n,44:rr,48:js,52:I,56:I,60:"frequency is written explicitly"},ca={0:{[v]:0,[S]:"Defined in AOT Specific Config"},64:{[v]:1,[S]:st},128:{[v]:2,[S]:V(2,_[0][0])},192:{[v]:3,[S]:V(3,_[1][3])},256:{[v]:4,[S]:V(4,_[1][3],_[3][4])},320:{[v]:5,[S]:V(5,_[1][3],_[3][0])},384:{[v]:6,[S]:V(6,_[1][3],_[3][0],ke)},448:{[v]:8,[S]:V(8,_[1][3],_[2][0],_[3][0],ke)}},Dt=class r extends pe{static*[P](e,t,n){let o={},i=yield*e[F](7,n),s=me([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=t[P](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[Xe]=tl[i[1]&8],o[ae]=rl[i[1]&6],o[ae]===ne))return null;let l=i[1]&1;o[qe]=nl[l],o[f]=l?7:9,o[Qn]=i[2]&192,o[Be]=i[2]&60;let u=i[2]&2;if(o[Wr]=ol[o[Qn]],o[T]=il[o[Be]],o[T]===I)return null;o[Ge]=!!u,o[jr]=(i[2]<<8|i[3])&448,o[te]=ca[o[jr]][S],o[v]=ca[o[jr]][v],o[Ue]=!!(i[3]&32),o[Nr]=!!(i[3]&8),o[$r]=!!(i[3]&8),o[Jr]=!!(i[3]&4),o[Q]=16,o[z]=1024,o[Ur]=i[6]&3;{let{length:d,channelModeBits:m,profileBits:p,sampleRateBits:h,frameLength:y,samples:g,numberAACFrames:b,...L}=o;t[Se](s,o,L)}}if(o[ce]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[ce])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Rr]=c===2047?"VBR":c,new r(o)}constructor(e){super(e),this[$r]=e[$r],this[Jr]=e[Jr],this[Rr]=e[Rr],this[Nr]=e[Nr],this[Ue]=e[Ue],this[Ge]=e[Ge],this[ae]=e[ae],this[f]=e[f],this[Xe]=e[Xe],this[Ur]=e[Ur],this[Wr]=e[Wr],this[qe]=e[qe]}get audioSpecificConfig(){let e=Y.get(this),t=e[Qn]+64<<5|e[Be]<<5|e[jr]>>3,n=new re(2);return new xt(n[De]).setUint16(0,t,!1),n}};var mn=class r extends fe{static*[_e](e,t,n){return yield*super[_e](Dt,r,e,t,n)}constructor(e,t,n){super(e,t,n)}};var fn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=mn,this.Header=Dt,n(this[D])}get[D](){return"aac"}*[Ve](){return yield*this[yt]()}};var bt=class r extends fe{static _getFrameFooterCrc16(e){return(e[e[f]-2]<<8)+e[e[f]-1]}static[so](e){let t=r._getFrameFooterCrc16(e),n=ea(e[E](0,-2));return t===n}constructor(e,t,n){t[tn]=n,t[Dr]=r._getFrameFooterCrc16(e),super(t,e,Y.get(t)[z])}};var la="get from STREAMINFO metadata block",sl={0:"Fixed",1:"Variable"},ua={0:I,16:192};for(let r=2;r<16;r++)ua[r<<4]=r<6?576*2**(r-2):2**r;var al={0:la,1:Yn,2:Ks,3:qs,4:rr,5:tr,6:er,7:Zt,8:Qt,9:Jt,10:ct,11:Kn,15:ne},cl={0:{[v]:1,[S]:st},16:{[v]:2,[S]:V(2,_[0][0])},32:{[v]:3,[S]:V(3,_[0][1])},48:{[v]:4,[S]:V(4,_[1][0],_[3][0])},64:{[v]:5,[S]:V(5,_[1][1],_[3][0])},80:{[v]:6,[S]:V(6,_[1][1],ke,_[3][0])},96:{[v]:7,[S]:V(7,_[1][1],ke,_[3][4],_[2][0])},112:{[v]:8,[S]:V(8,_[1][1],ke,_[3][0],_[2][0])},128:{[v]:2,[S]:`${at} (left, diff)`},144:{[v]:2,[S]:`${at} (diff, right)`},160:{[v]:2,[S]:`${at} (avg, diff)`},176:I,192:I,208:I,224:I,240:I},ll={0:la,2:8,4:12,6:I,8:16,10:20,12:24,14:I},vt=class r extends pe{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let t=1;for(let s=64;s&e[0];s>>=1)t++;let n=t-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>t)<<i,{value:o,length:t}}static[Ae](e,t){let n={[F]:function*(){return e}};return r[P](n,t,0).next().value}static*[P](e,t,n){let o=yield*e[F](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=me(o[E](0,4)),a=t[P](s);if(a)Object.assign(i,a);else{if(i[eo]=o[1]&1,i[qr]=sl[i[eo]],i[Kr]=o[2]&240,i[Be]=o[2]&15,i[Ke]=ua[i[Kr]],i[Ke]===I||(i[T]=al[i[Be]],i[T]===ne)||o[3]&1)return null;let l=cl[o[3]&240];if(l===I||(i[v]=l[v],i[te]=l[S],i[Q]=ll[o[3]&14],i[Q]===I))return null}i[f]=5,o=yield*e[F](i[f]+8,n);let c=r._decodeUTF8Int(o[E](4));if(!c||(i[eo]?i[Zr]=c.value:i[Je]=c.value,i[f]+=c[f],i[Kr]===96?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[Ke]=o[i[f]-1]+1,i[f]+=1):i[Kr]===112&&(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[Ke]=(o[i[f]-1]<<8)+o[i[f]]+1,i[f]+=2),i[z]=i[Ke],i[Be]===12?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=o[i[f]-1]*1e3,i[f]+=1):i[Be]===13?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=(o[i[f]-1]<<8)+o[i[f]],i[f]+=2):i[Be]===14&&(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=((o[i[f]-1]<<8)+o[i[f]])*10,i[f]+=2),o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[nr]=o[i[f]-1],i[nr]!==Zs(o[E](0,i[f]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:u,sampleNumber:d,samples:m,sampleRateBits:p,blockSizeBits:h,crc:y,length:g,...b}=i;t[Se](s,i,b)}return new r(i)}constructor(e){super(e),this[Dr]=null,this[qr]=e[qr],this[Ke]=e[Ke],this[Je]=e[Je],this[Zr]=e[Zr],this[tn]=null}};var ul=2,dl=512*1024,Ht=class extends oe{constructor(e,t,n){super(e,t),this.Frame=bt,this.Header=vt,n(this[D])}get[D](){return"flac"}*_getNextFrameSyncOffset(e){let t=yield*this._codecParser[F](2,0),n=t[f]-2;for(;e<n;){if(t[e]===255){let i=t[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[Ve](){do{let e=yield*vt[P](this._codecParser,this._headerCache,0);if(e){let t=Y.get(e)[f]+ul;for(;t<=dl;){if(this._codecParser._flushing||(yield*vt[P](this._codecParser,this._headerCache,t))){let n=yield*this._codecParser[F](t);if(this._codecParser._flushing||(n=n[E](0,t)),bt[so](n)){let o=new bt(n,e);return this._headerCache[Pe](),this._codecParser[ve](t),this._codecParser[ht](o),o}}t=yield*this._getNextFrameSyncOffset(t+1)}this._codecParser[ze](`Unable to sync FLAC frame after searching ${t} bytes.`),this._codecParser[ve](t)}else this._codecParser[ve](yield*this._getNextFrameSyncOffset(1))}while(!0)}[gt](e){return e[q]===0?(this._headerCache[Pe](),this._streamInfo=e[k][E](13)):e[q]===1||(e[ee]=$.get(e)[be].map(t=>{let n=vt[Ae](t,this._headerCache);if(n)return new bt(t,n,this._streamInfo);this._codecParser[ze]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(t=>!!t)),e}};var Ot=class r{static*[P](e,t,n){let o={},i=yield*e[F](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[yi]=i[4],i[5]&248))return null;o[de]=!!(i[5]&4),o[ut]=!!(i[5]&2),o[lt]=!!(i[5]&1);let a=new xt(re.from(i[E](0,28))[De]);o[Te]=ra(a,6),o[Ne]=a.getInt32(14,!0),o[q]=a.getInt32(18,!0),o[Tt]=a.getInt32(22,!0);let c=i[26];o[f]=c+27,i=yield*e[F](o[f],n),o[ce]=0,o[pt]=[],o[sr]=re.from(i[E](27,o[f]));for(let l=0,u=0;l<c;l++){let d=o[sr][l];o[ce]+=d,u+=d,(d!==255||l===c-1)&&(o[pt].push(u),u=0)}return new r(o)}constructor(e){Y.set(this,e),this[Te]=e[Te],this[lt]=e[lt],this[ut]=e[ut],this[de]=e[de],this[pt]=e[pt],this[q]=e[q],this[Tt]=e[Tt],this[Ne]=e[Ne]}};var pn=class r extends It{static*[_e](e,t,n){let o=yield*Ot[P](e,t,n);if(o){let i=Y.get(o)[ce],s=Y.get(o)[f],a=s+i,c=(yield*e[F](a,0))[E](0,a),l=c[E](s,a);return new r(o,l,c)}else return null}constructor(e,t,n){super(e,t),$.get(this)[f]=n[f],this[ee]=[],this[fi]=n,this[Te]=e[Te],this[Hr]=e[Tt],this[He]=0,this[lt]=e[lt],this[ut]=e[ut],this[de]=e[de],this[q]=e[q],this[z]=0,this[Ne]=e[Ne]}};var cr=class extends fe{constructor(e,t,n){super(t,e,n)}};var da={0:zr.slice(0,2),1:zr},Me="SILK-only",J="CELT-only",xo="Hybrid",St="narrowband",bo="medium-band",_t="wideband",lr="super-wideband",ur="fullband",ml={0:{[M]:Me,[w]:St,[A]:10},8:{[M]:Me,[w]:St,[A]:20},16:{[M]:Me,[w]:St,[A]:40},24:{[M]:Me,[w]:St,[A]:60},32:{[M]:Me,[w]:bo,[A]:10},40:{[M]:Me,[w]:bo,[A]:20},48:{[M]:Me,[w]:bo,[A]:40},56:{[M]:Me,[w]:bo,[A]:60},64:{[M]:Me,[w]:_t,[A]:10},72:{[M]:Me,[w]:_t,[A]:20},80:{[M]:Me,[w]:_t,[A]:40},88:{[M]:Me,[w]:_t,[A]:60},96:{[M]:xo,[w]:lr,[A]:10},104:{[M]:xo,[w]:lr,[A]:20},112:{[M]:xo,[w]:ur,[A]:10},120:{[M]:xo,[w]:ur,[A]:20},128:{[M]:J,[w]:St,[A]:2.5},136:{[M]:J,[w]:St,[A]:5},144:{[M]:J,[w]:St,[A]:10},152:{[M]:J,[w]:St,[A]:20},160:{[M]:J,[w]:_t,[A]:2.5},168:{[M]:J,[w]:_t,[A]:5},176:{[M]:J,[w]:_t,[A]:10},184:{[M]:J,[w]:_t,[A]:20},192:{[M]:J,[w]:lr,[A]:2.5},200:{[M]:J,[w]:lr,[A]:5},208:{[M]:J,[w]:lr,[A]:10},216:{[M]:J,[w]:lr,[A]:20},224:{[M]:J,[w]:ur,[A]:2.5},232:{[M]:J,[w]:ur,[A]:5},240:{[M]:J,[w]:ur,[A]:10},248:{[M]:J,[w]:ur,[A]:20}},dr=class r extends pe{static[Ae](e,t,n){let o={};if(o[v]=e[9],o[Ye]=e[18],o[f]=o[Ye]!==0?21+o[v]:19,e[f]<o[f])throw new Error("Out of data while inside an Ogg Page");let i=t[0]&3,s=i===3?2:1,a=me(e[E](0,o[f]))+me(t[E](0,s)),c=n[P](a);if(c)return new r(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[k]=re.from(e[E](0,o[f]));let l=new xt(o[k][De]);if(o[Q]=16,o[Ct]=l.getUint16(10,!0),o[Qr]=l.getUint32(12,!0),o[T]=ct,o[Gr]=l.getInt16(16,!0),o[Ye]in da&&(o[te]=da[o[Ye]][o[v]-1],!o[te]))return null;o[Ye]!==0&&(o[en]=e[19],o[kr]=e[20],o[Yr]=[...e[E](21,o[v]+21)]);let u=ml[248&t[0]];switch(o[M]=u[M],o[w]=u[w],o[A]=u[A],i){case 0:o[$e]=1;break;case 1:case 2:o[$e]=2;break;case 3:o[Vr]=!!(128&t[1]),o[Or]=!!(64&t[1]),o[$e]=63&t[1];break;default:return null}{let{length:d,data:m,channelMappingFamily:p,...h}=o;n[Se](a,o,h)}return new r(o)}constructor(e){super(e),this[k]=e[k],this[w]=e[w],this[Ye]=e[Ye],this[Yr]=e[Yr],this[kr]=e[kr],this[$e]=e[$e],this[A]=e[A],this[Or]=e[Or],this[Qr]=e[Qr],this[Vr]=e[Vr],this[M]=e[M],this[Gr]=e[Gr],this[Ct]=e[Ct],this[en]=e[en]}};var hn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=cr,this.Header=dr,n(this[D]),this._identificationHeader=null,this._preSkipRemaining=null}get[D](){return"opus"}[gt](e){return e[q]===0?(this._headerCache[Pe](),this._identificationHeader=e[k]):e[q]===1||(e[ee]=$.get(e)[be].map(t=>{let n=dr[Ae](this._identificationHeader,t,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Ct]);let o=n[A]*n[$e]/1e3*n[T];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new cr(t,n,o)}this._codecParser[oo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var mr=class extends fe{constructor(e,t,n){super(t,e,n)}};var Li={};for(let r=0;r<8;r++)Li[r+6]=2**(6+r);var yn=class r extends pe{static[Ae](e,t,n,o){if(e[f]<30)throw new Error("Out of data while inside an Ogg Page");let i=me(e[E](0,30)),s=t[P](i);if(s)return new r(s);let a={[f]:30};if(i.substr(0,7)!=="vorbis")return null;a[k]=re.from(e[E](0,30));let c=new xt(a[k][De]);if(a[dt]=c.getUint32(7,!0),a[dt]!==0||(a[v]=e[11],a[te]=zr[a[v]-1]||"application defined",a[T]=c.getUint32(12,!0),a[Fr]=c.getInt32(16,!0),a[Ir]=c.getInt32(20,!0),a[Pr]=c.getInt32(24,!0),a[ft]=Li[(e[28]&240)>>4],a[mt]=Li[e[28]&15],a[mt]>a[ft])||e[29]!==1)return null;a[Q]=32,a[ir]=o,a[Xr]=n;{let{length:l,data:u,version:d,vorbisSetup:m,vorbisComments:p,...h}=a;t[Se](i,a,h)}return new r(a)}constructor(e){super(e),this[Fr]=e[Fr],this[Pr]=e[Pr],this[Ir]=e[Ir],this[mt]=e[mt],this[ft]=e[ft],this[k]=e[k],this[Xr]=e[Xr],this[ir]=e[ir]}};var gn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=mr,n(this[D]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[D](){return Et}[gt](e){e[ee]=[];for(let t of $.get(e)[be])if(t[0]===1)this._headerCache[Pe](),this._identificationHeader=e[k],this._setupComplete=!1;else if(t[0]===3)this._vorbisComments=t;else if(t[0]===5)this._vorbisSetup=t,this._mode=this._parseSetupHeader(t),this._setupComplete=!0;else if(this._setupComplete){let n=yn[Ae](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[ee].push(new mr(t,n,this._getSamples(t,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,t){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?t[ft]:t[mt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let t=new co(e),n={count:0,blockFlags:[]};for(;(t.read(1)&1)!==1;);let o;for(;n.count<64&&t.position>0;){on(t.read(8));let i=0;for(;t.read(8)===0&&i++<3;);if(i===4)o=t.read(7),n.blockFlags.unshift(o&1),t.position+=6,n.count++;else{((on(o)&126)>>1)+1!==n.count&&this._codecParser[ze]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Ci=class{constructor(e,t,n){this._codecParser=e,this._headerCache=t,this._onCodec=n,this._continuedPacket=new re,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[D](){return this._codec||""}_updateCodec(e,t){this._codec!==e&&(this._headerCache[Fe](),this._parser=new t(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let t=me(e[E](0,8));switch(t){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",hn),!0;case(/^\x7fFLAC/.test(t)&&t):return this._updateCodec("flac",Ht),!0;case(/^\x01vorbis/.test(t)&&t):return this._updateCodec(Et,gn),!0;default:return!1}}_checkPageSequenceNumber(e){e[q]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[q]>1&&this._codecParser[ze]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[q]}`),this._pageSequenceNumber=e[q]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[q],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let t=$.get(e),n=Y.get(t[ue]),o=0;if(t[be]=n[pt].map(i=>e[k][E](o,o+=i)),this._continuedPacket[f]&&(t[be][0]=sn(this._continuedPacket,t[be][0]),this._continuedPacket=new re),n[sr][n[sr][f]-1]===255&&(this._continuedPacket=sn(this._continuedPacket,t[be].pop())),this._previousAbsoluteGranulePosition!==null&&(e[z]=Number(e[Te]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Te],this._isSupported){let i=this._parser[gt](e);return this._codecParser[ht](i),i}else return e}},xn=class extends oe{constructor(e,t,n){super(e,t),this._onCodec=n,this.Frame=pn,this.Header=Ot,this._streams=new Map,this._currentSerialNumber=null}get[D](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Ve](){let e=yield*this[yt](!0);this._currentSerialNumber=e[Ne];let t=this._streams.get(this._currentSerialNumber);return t||(t=new Ci(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,t)),e[de]&&this._streams.delete(this._currentSerialNumber),t._parsePage(e)}};var Ei=()=>{},bn=class{constructor(e,{onCodec:t,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=t||Ei,this._onCodecHeader=n||Ei,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?ta:Ei,this[Fe]()}get[D](){return this._parser?this._parser[D]:""}[Fe](){this._headerCache=new an(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Fe]()}*parseChunk(e){for(let t=this._generator.next(e);t.value;t=this._generator.next())yield t.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new fn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new dn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Ht(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new xn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[Ve]();e&&(yield e)}}*[F](e=0,t=0){let n;for(;this._rawData[f]<=e+t;){if(n=yield,this._flushing)return this._rawData[E](t);n&&(this._totalBytesIn+=n[f],this._rawData=sn(this._rawData,n))}return this._rawData[E](t)}[ve](e){this._currentReadPosition+=e,this._rawData=this._rawData[E](e)}[rn](e){this._sampleRate=e[ue][T],e[ue][Z]=e[He]>0?Math.round(e[k][f]/e[He])*8:0,e[Je]=this._frameNumber++,e[zt]=this._totalBytesOut,e[Pt]=this._totalSamples,e[Ft]=this._totalSamples/this._sampleRate*1e3,e[Hr]=this._crc32(e[k]),this._headerCache[io](e[ue][Z],e[Ft]),this._totalBytesOut+=e[k][f],this._totalSamples+=e[z]}[ht](e){if(e[ee]){if(e[de]){let t=e[z];e[ee].forEach(n=>{let o=n[z];t<o&&(n[z]=t>0?t:0,n[He]=n[z]/n[ue][T]*1e3),t-=o,this[rn](n)})}else e[z]=0,e[ee].forEach(t=>{e[z]+=t[z],this[rn](t)});e[He]=e[z]/this._sampleRate*1e3||0,e[Pt]=this._totalSamples,e[Ft]=this._totalSamples/this._sampleRate*1e3||0,e[zt]=this._totalBytesOut}else this[rn](e)}_log(e,t){if(this._enableLogging){let n=[`${D}: ${this[D]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${zt}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[f]));t.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",t.reduce((i,s)=>i+`
|
|
4
|
-
`+s,""))}}[
|
|
1
|
+
"use strict";var Quake2Engine=(()=>{var cc=Object.create;var Hn=Object.defineProperty;var lc=Object.getOwnPropertyDescriptor;var dc=Object.getOwnPropertyNames;var uc=Object.getPrototypeOf,mc=Object.prototype.hasOwnProperty;var fc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ys=(t,e)=>{for(var r in e)Hn(t,r,{get:e[r],enumerable:!0})},xs=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of dc(e))!mc.call(t,o)&&o!==r&&Hn(t,o,{get:()=>e[o],enumerable:!(n=lc(e,o))||n.enumerable});return t};var pc=(t,e,r)=>(r=t!=null?cc(uc(t)):{},xs(e||!t||!t.__esModule?Hn(r,"default",{value:t,enumerable:!0}):r,t)),hc=t=>xs(Hn({},"__esModule",{value:!0}),t);var js=fc((ru,Ks)=>{"use strict";Ks.exports=Worker});var Gd={};ys(Gd,{ATTN_IDLE:()=>La,ATTN_LOOP_NONE:()=>_a,ATTN_NONE:()=>Io,ATTN_NORM:()=>wa,ATTN_STATIC:()=>za,AssetDependencyError:()=>Wt,AssetDependencyTracker:()=>En,AssetManager:()=>Po,AudioApi:()=>Wo,AudioContextController:()=>ko,AudioRegistry:()=>gr,AudioRegistryError:()=>Ln,AudioSystem:()=>Uo,BSP_SURFACE_FRAGMENT_SOURCE:()=>qi,BSP_SURFACE_VERTEX_SOURCE:()=>Xi,BSP_VERTEX_LAYOUT:()=>Ui,BspSurfacePipeline:()=>Yo,ConfigStringRegistry:()=>$t,Cvar:()=>Tr,CvarRegistry:()=>Wn,EngineHost:()=>jt,EngineRuntime:()=>Er,FixedTimestepLoop:()=>zt,Framebuffer:()=>Xo,IndexBuffer:()=>Re,LruCache:()=>ct,MAX_SOUND_CHANNELS:()=>Oi,MD2_FRAGMENT_SHADER:()=>Zi,MD2_VERTEX_SHADER:()=>Ji,MD3_FRAGMENT_SHADER:()=>ss,MD3_VERTEX_SHADER:()=>is,Md2Loader:()=>Jt,Md2MeshBuffers:()=>jo,Md2ParseError:()=>oe,Md2Pipeline:()=>$o,Md3Loader:()=>Zt,Md3ModelMesh:()=>Qo,Md3ParseError:()=>ze,Md3Pipeline:()=>Jo,Md3SurfaceMesh:()=>Fn,MusicSystem:()=>Go,PARTICLE_FRAGMENT_SHADER:()=>cs,PARTICLE_VERTEX_SHADER:()=>as,PakArchive:()=>Qt,PakIndexStore:()=>To,PakIngestionError:()=>at,PakParseError:()=>Le,PakValidationError:()=>Ct,PakValidator:()=>qn,ParticleRenderer:()=>ei,ParticleSystem:()=>Zo,RERELEASE_KNOWN_PAKS:()=>mi,SKYBOX_FRAGMENT_SHADER:()=>$i,SKYBOX_VERTEX_SHADER:()=>ji,SOUND_FULLVOLUME:()=>br,SOUND_LOOP_ATTENUATE:()=>Ca,ShaderProgram:()=>pe,SkyboxPipeline:()=>Ko,SoundChannel:()=>Fo,SoundPrecache:()=>Oo,SoundRegistry:()=>Ho,Texture2D:()=>vr,TextureCache:()=>er,TextureCubeMap:()=>Sr,VertexArray:()=>be,VertexBuffer:()=>he,VirtualFileSystem:()=>Xn,advanceAnimation:()=>Vs,applySurfaceState:()=>Ba,attenuationToDistanceMultiplier:()=>Xt,boxIntersectsFrustum:()=>Pn,buildBspGeometry:()=>Ia,buildMd2Geometry:()=>es,buildMd2VertexData:()=>ts,buildMd3SurfaceGeometry:()=>ns,buildMd3VertexData:()=>os,calculateMaxAudibleDistance:()=>Ro,calculatePakChecksum:()=>Is,computeFrameBlend:()=>Us,computeSkyScroll:()=>Ga,createAnimationState:()=>Gs,createAudioGraph:()=>Do,createCamera:()=>Ja,createEngine:()=>Ud,createEngineRuntime:()=>Ps,createInitialChannels:()=>No,createProgramFromSources:()=>Fa,createWebGLContext:()=>Ta,decodeOgg:()=>Eo,deriveSurfaceRenderState:()=>Ki,extractFrustumPlanes:()=>Ra,filesToPakSources:()=>fi,findLeafForPoint:()=>Wi,gatherVisibleFaces:()=>Oa,groupMd2Animations:()=>Ns,ingestPakFiles:()=>Rs,ingestPaks:()=>Yn,interpolateMd3Tag:()=>Za,interpolateVec3:()=>Ws,parseMd2:()=>pi,parseMd3:()=>hi,parsePcx:()=>Xs,parseWal:()=>jn,parseWalTexture:()=>Ys,parseWav:()=>Qn,pcxToRgba:()=>$n,pickChannel:()=>Bo,preparePcxTexture:()=>qs,removeViewTranslation:()=>Ua,resolveLightStyles:()=>Yi,spatializeOrigin:()=>Vo,spawnBlood:()=>rc,spawnBulletImpact:()=>ec,spawnExplosion:()=>tc,spawnMuzzleFlash:()=>oc,spawnTeleportFlash:()=>nc,spawnTrail:()=>ic,walToRgba:()=>yi,wireDropTarget:()=>ks,wireFileInput:()=>Ds});var yc=()=>typeof performance<"u"?performance.now():Date.now(),xc=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},zt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??yc,schedule:r.schedule??xc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var jt=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new zt({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var gs={x:0,y:0,z:0};var Kd=Math.PI/180;function bs(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function gc(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function ri(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function bc(t){return ri(t,t)}function ni(t){return Math.sqrt(bc(t))}function ke(t){let e=ni(t);return e===0?t:gc(t,1/e)}var jd=Math.PI/180,$d=180/Math.PI;function vc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function vs(t,e){let r=e.x,n=e.y,o=e.z;return{x:t[0]*r+t[4]*n+t[8]*o+t[12],y:t[1]*r+t[5]*n+t[9]*o+t[13],z:t[2]*r+t[6]*n+t[10]*o+t[14]}}function Ss(t,e){let r=vc();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var Be=1,st=2;var oi=8,ii=16,Sc=32;var Mc=16384;var On=65536,Ms=1<<17,Ac=1<<18,_c=1<<19,wc=1<<20,Lc=1<<21,zc=1<<22,Cc=1<<23,Qd=1<<24,Nn=1<<25,Ec=1<<26,Jd=1<<27,Zd=1<<28,e0=1<<29,Bn=1<<30,t0=1<<31;var Cr=0;var As=4,_s=8,ws=16,Ls=32,zs=64;var r0=1<<25,n0=1<<28,o0=1<<29,i0=1<<30,s0=1<<31;var a0=Be|st,c0=Be|On|st|Nn|Bn,l0=Be|On|st,d0=Be|Ms|st|Nn|Bn,u0=Sc|oi|ii,m0=Be|ii|oi,Tc=Be|Nn|Bn|st|Ec,f0=Ac|_c|wc|Lc|zc|Cc,p0=Be|oi|ii|Nn|Bn,h0=Be|On|st,y0=Be|st,x0=Be|On|st|Ms,g0=Tc|Mc;var b0=Number.MAX_SAFE_INTEGER-1;var Vn=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Vn||{});var Un=256;var si=256,ai=8192,Gn=2048,ci=512,li=256,di=Un*2,ui=256,ti=32,zr=96;var X=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+ai]="Sounds",t[t.Images=t.Sounds+Gn]="Images",t[t.Lights=t.Images+ci]="Lights",t[t.ShadowLights=t.Lights+si]="ShadowLights",t[t.Items=t.ShadowLights+ui]="Items",t[t.PlayerSkins=t.Items+li]="PlayerSkins",t[t.General=t.PlayerSkins+Un]="General",t[t.WheelWeapons=t.General+di]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+ti]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+ti]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+ti]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),Cs=X.MaxConfigStrings;function Es(t){return t>=5&&t<59?zr*(59-t):t>=X.General&&t<X.WheelWeapons?zr*(X.MaxConfigStrings-t):zr}function Pc(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Ts(t,e){let r=Es(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${zr} chars per slot`)}var $t=class{constructor(){this.values=new Map;this.modelCursor=X.Models;this.soundCursor=X.Sounds;this.imageCursor=X.Images;this.lightCursor=X.Lights;this.shadowLightCursor=X.ShadowLights;this.itemCursor=X.Items;this.playerSkinCursor=X.PlayerSkins;this.generalCursor=X.General}set(e,r){return Pc(e),Ts(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(Cs).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,ai,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,Gn,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+Gn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,ci,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,si,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,ui,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,li,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,Un,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,di,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Ts(i,e),this.values.set(i,e),this[o]=i+1,i}};var Er=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Ps(t,e,r,n){return new Er(t,new jt(e,r,n))}var Tr=class{constructor({name:e,defaultValue:r,description:n,flags:o=Vn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&Vn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},Wn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Tr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Fc="PACK";function Ic(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function te(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Rc(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var kc=Rc();function Fs(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=kc[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Le=class extends Error{},Qt=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Le("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Fc)throw new Le(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new Le(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new Le(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new Le("Directory exceeds buffer length");let c=s/64,l=[],d=new Map;for(let u=0;u<c;u+=1){let m=i+u*64,f=Ic(n,m,56),h=te(f),y=n.getInt32(m+56,!0),p=n.getInt32(m+60,!0);if(y<0||p<0||y+p>r.byteLength)throw new Le(`Invalid entry bounds for ${f||"<unnamed>"} (offset=${y}, length=${p})`);if(!h)throw new Le(`Entry ${u} has an empty name`);let x={name:h,offset:y,length:p};d.set(h,x)}return l.push(...d.values()),new t(e,r,l,Fs(new Uint8Array(r)))}getEntry(e){return this.entries.get(te(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new Le(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Is(t){return Fs(new Uint8Array(t))}var Xn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=te(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(te(e))}stat(e){let r=this.files.get(te(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(te(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=te(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var mi=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Ct=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},qn=class{constructor(e=mi){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Ct(n);return n}normalizePakName(e){let r=te(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var at=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Dc(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new at("blob",new Error("Unsupported Blob type"))}async function Hc(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Dc(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Yn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let d=await Hc(l,n.onProgress),u=Qt.fromArrayBuffer(l.name,d),m=n.validator?.validateArchive(u);if(m){n.onValidationResult?.(m);let f=m.status==="mismatch",h=m.status==="unknown";if(f&&i||h&&!s){let y=new Ct(m);if(n.onError?.(l.name,y),a)throw new at(l.name,y);c.push({archive:u,mounted:!1,validation:m});continue}}if(t.mountPak(u),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(f){if(n.onError?.(l.name,f),a)throw new at(l.name,f)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:u,mounted:!0,validation:m})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new at(l.name,d)}return c}var ct=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function Oc(t){return Array.isArray(t)?t:Array.from(t)}function fi(t){return Oc(t).map(e=>({name:e.name,data:e}))}async function Rs(t,e,r){let n=fi(e);return Yn(t,n,r??{})}function ks(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Ds(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var Nc=844121161,Bc=8,Hs=68,Vc=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],oe=class extends Error{},Jt=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),pi(n.buffer)}};function Os(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function Pr(t,e,r,n){if(r!==0&&(e<Hs||e+r>t.byteLength))throw new oe(`${n} section is out of bounds`)}function Uc(t){if(t.byteLength<Hs)throw new oe("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==Nc)throw new oe(`Invalid MD2 ident: ${r}`);if(n!==Bc)throw new oe(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new oe(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new oe("MD2 offset_end exceeds buffer length");return o}function Gc(t,e){let r=e.numSkins*64;Pr(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Os(n,i*64,64)});return o}function Wc(t,e){let r=e.numTexCoords*4;Pr(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function Xc(t,e){let r=e.numTriangles*12;Pr(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new oe("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function qc(t,e){let r=e.numFrames*e.frameSize;Pr(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Os(s,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let m=40+u*4,f={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=Vc[h];if(!y)throw new oe(`Invalid normal index ${h} in frame ${l}`);d.push({position:f,normalIndex:h,normal:y})}n.push({name:l,vertices:d})}return n}function Yc(t,e){let r=e.numGlCommands*4;if(Pr(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new oe("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>r)throw new oe("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),f=n.getInt32(i+8,!0);if(i+=12,f<0||f>=e.numVertices)throw new oe("GL command references invalid vertex index");c.push({s:u,t:m,vertexIndex:f})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new oe("GL command list did not consume expected data");return o}function pi(t){let e=Uc(t),r=Gc(t,e),n=Wc(t,e),o=Xc(t,e),i=qc(t,e),s=Yc(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function Ns(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var Bs=860898377,Kc=15,ze=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Fr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function jc(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function Kn(t,e,r,n){if(e<0||e+r>n)throw new ze(`${t} exceeds buffer bounds`)}function $c(t){let e=t.getInt32(0,!0);if(e!==Bs)throw new ze(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==Kc)throw new ze(`Unsupported MD3 version: ${r}`);let n=Fr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),u=t.getInt32(100,!0),m=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new ze("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:u,ofsEnd:m}}function Qc(t,e){let r=[];Kn("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Fr(t,i+40,16)})}return r}function Jc(t,e){let r=[],o=e.numFrames*e.numTags*112;Kn("Tags",e.ofsTags,o,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,d=l+12;s.push({name:Fr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(s)}return r}function Zc(t,e){let r=t.getInt32(e,!0);if(r!==Bs)throw new ze(`Invalid surface ident at ${e}: ${r}`);let n=Fr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),u=t.getInt32(e+96,!0),m=t.getInt32(e+100,!0),f=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new ze(`Invalid surface counts for ${n}`);let h=f;Kn(`Surface ${n}`,e,h,t.byteLength);let y=[],p=e+l;for(let w=0;w<c;w+=1){let L=p+w*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let x=[],M=e+d;for(let w=0;w<s;w+=1){let L=M+w*68;x.push({name:Fr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let b=[],S=e+u;for(let w=0;w<a;w+=1){let L=S+w*8;b.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let v=[],A=e+m;for(let w=0;w<i;w+=1){let L=[];for(let P=0;P<a;P+=1){let _=A+(w*a+P)*8,N=t.getInt16(_,!0)/64,U=t.getInt16(_+2,!0)/64,V=t.getInt16(_+4,!0)/64,F=t.getUint16(_+6,!0);L.push({position:{x:N,y:U,z:V},latLng:F,normal:jc(F)})}v.push(L)}return{surface:{name:n,flags:o,numFrames:i,shaders:x,triangles:y,texCoords:b,vertices:v},nextOffset:e+f}}function hi(t){if(t.byteLength<108)throw new ze("MD3 buffer too small for header");let e=new DataView(t),r=$c(e);Kn("MD3 end",r.ofsEnd,0,t.byteLength);let n=Qc(e,r),o=Jc(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=Zc(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new ze("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var Zt=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return hi(r.slice().buffer)}};function Vs(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function Us(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Gs(t){return{sequence:t,time:0}}function Ws(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var Ir=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function jn(t){if(t.byteLength<100)throw new Ir("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),u=e.getInt32(96,!0);if(o<=0||i<=0)throw new Ir("Invalid WAL dimensions");let m=[],f=o,h=i;for(let y=0;y<s.length;y+=1){let p=s[y],x=Math.max(1,f*h|0);if(p<=0||p+x>t.byteLength)throw new Ir(`Invalid WAL mip offset for level ${y}`);let M=new Uint8Array(t,p,x);m.push({level:y,width:f,height:h,data:M}),f=Math.max(1,f>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:d,value:u}}var Et=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Xs(t){if(t.byteLength<128)throw new Et("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new Et("Unsupported PCX encoding");if(o!==8)throw new Et("Only 8bpp PCX files are supported");let l=a-i+1,d=c-s+1,u=e.getUint16(66,!0),m=t.byteLength-769;if(m<128||new DataView(t,m,1).getUint8(0)!==12)throw new Et("Missing PCX palette");let f=new Uint8Array(t,m+1,768),h=new Uint8Array(t,128,m-128),y=new Uint8Array(l*d),p=0,x=0;for(let M=0;M<d;M+=1){let b=0;for(;b<u&&p<h.length;){let S=1,v=h[p++];if((v&192)===192){if(S=v&63,p>=h.length)throw new Et("Unexpected end of PCX RLE data");v=h[p++]}for(let A=0;A<S&&b<u;A+=1)b<l&&(y[x++]=v),b+=1}}return{width:l,height:d,bitsPerPixel:o,pixels:y,palette:f}}function $n(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var er=class{constructor(e={}){this.cache=new ct(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function yi(t,e){let r=[];for(let n of t.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function qs(t){let e=$n(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Ys(t,e){return yi(jn(t),e)}var Tt=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function xi(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function Qn(t){if(t.byteLength<44)throw new Tt("WAV buffer too small");let e=new DataView(t);if(xi(e,0,4)!=="RIFF"||xi(e,8,4)!=="WAVE")throw new Tt("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let h=xi(e,r,4),y=e.getUint32(r+4,!0),p=r+8;h==="fmt "?(n=p,i=y):h==="data"&&(o=p,s=y),r=p+y}if(n===-1||o===-1)throw new Tt("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(a!==1)throw new Tt("Only PCM WAV is supported");let u=d/8,m=s/(u*c),f=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let p=h*c+y,x=o+p*u,M=0;if(d===8)M=e.getUint8(x),f[p]=(M-128)/128;else if(d===16)M=e.getInt16(x,!0),f[p]=M/32768;else if(d===24){let b=e.getUint8(x),S=e.getUint8(x+1),v=e.getInt8(x+2);M=b|S<<8|v<<16,f[p]=M/8388608}else throw new Tt(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:f}}var el=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var gi=(t,e=el)=>{let r=p=>new Uint8Array(p.length/2).map(((x,M)=>parseInt(p.substring(2*M,2*(M+1)),16))),n=p=>r(p)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,x)=>o.set(p,x)));let i=new Uint8Array(t.length),s,a,c,l=!1,d=0,u=42,m=t.length>13&&t.substring(0,9)==="dynEncode",f=0;m&&(f=11,a=n(t.substring(9,f)),a<=1&&(f+=2,u=n(t.substring(11,f))),a===1&&(f+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,f))));let h=256-u;for(let p=f;p<t.length;p++)if(s=t.charCodeAt(p),s!==61||l){if(s===92&&p<t.length-5&&m){let x=t.charCodeAt(p+1);x!==117&&x!==85||(s=parseInt(t.substring(p+2,p+6),16),p+=5)}if(s>255){let x=o.get(s);x&&(s=x+127)}l&&(l=!1,s-=64),i[d++]=s<u&&s>0?s+h:s-u}else l=!0;let y=i.subarray(0,d);if(m&&a===1){let p=e(y);if(p!==c){let x="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",x+`
|
|
2
|
+
`,"Expected: "+c+"; Got: "+p+`
|
|
3
|
+
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(x)}}return y};function j(){let t=Uint8Array,e=Float32Array;j.modules||Object.defineProperties(j,{modules:{value:new WeakMap},setModule:{value(r,n){j.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=j.modules.get(r);return o||(n?o=WebAssembly.compile(gi(n)):(n=r.wasm,o=j.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),j.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,n,o,i,s,a){let c=[],l,d;for(l=0;l<o;l++){let u=[];for(d=0;d<n.length;)u.push(n[d++][l]||[]);c.push(j.concatFloat32(u,i))}return j.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=gi(r),new Promise(n=>{let o=String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;j.getModule(j,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new t(c),d=new DataView(c),u=s.get("__heap_base"),m=r.length,f=u;u+=4,d.setInt32(f,m,!0);let h=u;u+=m,l.set(r,h);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,h,f),n(l.slice(u,u+d.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&j.setModule(r,n),this._wasm=new r(j).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var $s=pc(js(),1);var tl=()=>globalThis.Worker||$s.default,tr=class extends tl(){constructor(e,r,n,o){j.modules||new j;let i=j.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let m,f,h=new Promise(y=>{f=y});self.onmessage=({data:{id:y,command:p,data:x}})=>{let M=h,b={id:y},S;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:x.module},isWebWorker:{value:!0}}),m=new l(x.options),f()):p==="free"?m.free():p==="ready"?M=M.then(()=>m.ready):p==="reset"?M=M.then(()=>m.reset()):(Object.assign(b,m[p](Array.isArray(x)?x.map(v=>new Uint8Array(v)):new Uint8Array(x))),S=b.channelData?b.channelData.map(v=>v.buffer):[]),M.then(()=>self.postMessage(b,S))}}).toString()})(${n}, ${j}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),j.modules.set(n,i)}super(i,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o(j).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var Jn=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var $=Symbol,Qs=", ",T=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(Qs)))})(),Ve="LFE",lt="monophonic (mono)",dt="stereo",Rr="surround",Q=(t,...e)=>`${[lt,dt,`linear ${Rr}`,"quadraphonic",`5.0 ${Rr}`,`5.1 ${Rr}`,`6.1 ${Rr}`,`7.1 ${Rr}`][t-1]} (${e.join(Qs)})`,kr=[lt,Q(2,T[0][0]),Q(3,T[0][2]),Q(4,T[1][0],T[3][0]),Q(5,T[1][2],T[3][0]),Q(6,T[1][2],T[3][0],Ve),Q(7,T[1][2],T[2][0],T[3][4],Ve),Q(8,T[1][2],T[2][0],T[3][0],Ve)],Js=192e3,Zs=176400,Zn=96e3,eo=88200,ea=64e3,ut=48e3,rr=44100,nr=32e3,or=24e3,ir=22050,sr=16e3,to=12e3,ro=11025,ar=8e3,ta=7350,De="absoluteGranulePosition",k="bandwidth",ae="bitDepth",ce="bitrate",Dr=ce+"Maximum",Hr=ce+"Minimum",Or=ce+"Nominal",Ue="buffer",Nr=Ue+"Fullness",Y="codec",le=Y+"Frames",Br="coupledStreamCount",cr="crc",Vr=cr+"16",Ur=cr+"32",q="data",E="description",Ge="duration",lr="emphasis",Gr="hasOpusPadding",ve="header",mt="isContinuedPacket",Wr="isCopyrighted",ft="isFirstPage",Xr="isHome",Se="isLastPage",Ke="isOriginal",je="isPrivate",qr="isVbr",xe="layer",g="length",R="mode",$e=R+"Extension",no="mpeg",Qe=no+"Version",Yr="numberAACFrames",Kr="outputGain",Pt="preSkip",jr="profile",oo=$(),Je="protection",bi="rawData",Ce="segments",D="subarray",pt="version",Ft="vorbis",$r=Ft+"Comments",dr=Ft+"Setup",io="block",Qr=io+"ingStrategy",so=$(),Ze=io+"Size",ht=io+"size0",yt=io+"size1",Jr=$(),ao="channel",et=ao+"MappingFamily",Zr=ao+"MappingTable",de=ao+"Mode",en=$(),C=ao+"s",ra="copyright",tn=ra+"Id",rn=ra+"IdStart",tt="frame",rt=tt+"Count",ge=tt+"Length",co="Number",nt=tt+co,We=tt+"Padding",I=tt+"Size",na="Rate",nn="inputSample"+na,vi="page",It=vi+"Checksum",ur=$(),xt=vi+"SegmentTable",re=vi+"Sequence"+co,Si="sample",on=Si+co,H=Si+na,Xe=$(),O=Si+"s",lo="stream",sn=lo+"Count",an=lo+"Info",qe=lo+"Serial"+co,Mi=lo+"StructureVersion",Ai="total",Rt=Ai+"BytesOut",kt=Ai+"Duration",Dt=Ai+"Samples",B=$(),Ee=$(),cn=$(),gt=$(),He=$(),uo=$(),_i=$(),bt=$(),G=$(),Te=$(),Pe=$(),Ye=$(),vt=$(),mo=$(),Oe=$(),Ne=$(),Fe=$(),fo=$(),ue=Uint8Array,St=DataView,W="reserved",me="bad",mr="free",ln="none",po="16bit CRC";var wi=(t,e,r)=>{for(let n=0;n<t[g];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},nl=wi(new ue(256),t=>t,t=>t&128?7^t<<1:t<<1),J=[wi(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],Z=[wi(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){J.push(new Uint16Array(256)),Z.push(new Uint32Array(256));for(let e=0;e<=255;e++)J[t+1][e]=J[0][J[t][e]>>>8]^J[t][e]<<8,Z[t+1][e]=Z[t][e]>>>8^Z[0][Z[t][e]&255]}var ia=t=>{let e=0,r=t[g];for(let n=0;n!==r;n++)e=nl[e^t[n]];return e},sa=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=J[15][n>>8]^J[14][n&255]^J[13][t[o++]]^J[12][t[o++]]^J[11][t[o++]]^J[10][t[o++]]^J[9][t[o++]]^J[8][t[o++]]^J[7][t[o++]]^J[6][t[o++]]^J[5][t[o++]]^J[4][t[o++]]^J[3][t[o++]]^J[2][t[o++]]^J[1][t[o++]]^J[0][t[o++]];for(;o!==e;)n=(n&255)<<8^J[0][n>>8^t[o++]];return n},aa=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n=Z[15][(t[o++]^n)&255]^Z[14][(t[o++]^n>>>8)&255]^Z[13][(t[o++]^n>>>16)&255]^Z[12][t[o++]^n>>>24]^Z[11][t[o++]]^Z[10][t[o++]]^Z[9][t[o++]]^Z[8][t[o++]]^Z[7][t[o++]]^Z[6][t[o++]]^Z[5][t[o++]]^Z[4][t[o++]]^Z[3][t[o++]]^Z[2][t[o++]]^Z[1][t[o++]]^Z[0][t[o++]];for(;o!==e;)n=Z[0][(n^t[o++])&255]^n>>>8;return n^-1},un=(...t)=>{let e=new ue(t.reduce((r,n)=>r+n[g],0));return t.reduce((r,n)=>(e.set(n,r),r+n[g]),0),e},Me=t=>String.fromCharCode(...t),oa=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],dn=t=>oa[t&15]<<4|oa[t>>4],ho=class{constructor(e){this._data=e,this._pos=e[g]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(dn(this._data[r-1])<<8)+dn(this._data[r])>>7-n&255}},ca=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var mn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Oe]()}[Ne](){this._isEnabled=!0}[Oe](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[mo](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[G](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Te](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var ne=new WeakMap,ie=new WeakMap;var fe=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[_i](){let e;do{if(e=yield*this.Frame[Pe](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Ee](1)}while(!0)}*[bt](e){let r=yield*this[_i](),n=ie.get(r)[g];if(e||this._codecParser._flushing||(yield*this.Header[G](this._codecParser,this._headerCache,n)))return this._headerCache[Ne](),this._codecParser[Ee](n),this._codecParser[gt](r),r;this._codecParser[He](`Missing ${tt} at ${n} bytes from current position.`,`Dropping current ${tt} and trying again.`),this._headerCache[Oe](),this._codecParser[Ee](1)}};var Ht=class{constructor(e,r){ie.set(this,{[ve]:e}),this[q]=r}};var Ae=class extends Ht{static*[Pe](e,r,n,o,i){let s=yield*e[G](n,o,i);if(s){let a=ne.get(s)[ge],c=ne.get(s)[O],l=(yield*n[B](a,i))[D](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[ve]=e,this[O]=n,this[Ge]=n/e[H]*1e3,this[nt]=null,this[Rt]=null,this[Dt]=null,this[kt]=null,ie.get(this)[g]=r[g]}};var Li="unsynchronizationFlag",zi="extendedHeaderFlag",Ci="experimentalFlag",Ei="footerPresent",fn=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[B](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[B](10,n),i[pt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[Li]=!!(s[5]&128),i[zi]=!!(s[5]&64),i[Ci]=!!(s[5]&32),i[Ei]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[g]=10+a,new t(i)}constructor(e){this[pt]=e[pt],this[Li]=e[Li],this[zi]=e[zi],this[Ci]=e[Ci],this[Ei]=e[Ei],this[g]=e[g]}};var _e=class{constructor(e){ne.set(this,e),this[ae]=e[ae],this[ce]=null,this[C]=e[C],this[de]=e[de],this[H]=e[H]}};var fa={0:[mr,mr,mr,mr,mr],16:[32,32,32,32,8],240:[me,me,me,me,me]},yo=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)fa[t<<4]=[t*32,yo(t,4,0),yo(t,4,-1),yo(t,8,4),yo(t,8,0)];var ol=0,il=1,sl=2,al=3,la=4,xo="bands ",go=" to 31",da={0:xo+4+go,16:xo+8+go,32:xo+12+go,48:xo+16+go},Ot="bitrateIndex",pn="v2",Ao="v1",bo="Intensity stereo ",vo=", MS stereo ",So="on",Mo="off",cl={0:bo+Mo+vo+Mo,16:bo+So+vo+Mo,32:bo+Mo+vo+So,48:bo+So+vo+So},Ti={0:{[E]:W},2:{[E]:"Layer III",[We]:1,[$e]:cl,[Ao]:{[Ot]:sl,[O]:1152},[pn]:{[Ot]:la,[O]:576}},4:{[E]:"Layer II",[We]:1,[$e]:da,[O]:1152,[Ao]:{[Ot]:il},[pn]:{[Ot]:la}},6:{[E]:"Layer I",[We]:4,[$e]:da,[O]:384,[Ao]:{[Ot]:ol},[pn]:{[Ot]:al}}},Pi="MPEG Version ",ua="ISO/IEC ",ll={0:{[E]:`${Pi}2.5 (later extension of MPEG 2)`,[xe]:pn,[H]:{0:ro,4:to,8:ar,12:W}},8:{[E]:W},16:{[E]:`${Pi}2 (${ua}13818-3)`,[xe]:pn,[H]:{0:ir,4:or,8:sr,12:W}},24:{[E]:`${Pi}1 (${ua}11172-3)`,[xe]:Ao,[H]:{0:rr,4:ut,8:nr,12:W}},length:g},dl={0:po,1:ln},ul={0:ln,1:"50/15 ms",2:W,3:"CCIT J.17"},ma={0:{[C]:2,[E]:dt},64:{[C]:2,[E]:"joint "+dt},128:{[C]:2,[E]:"dual channel"},192:{[C]:1,[E]:lt}},Nt=class t extends _e{static*[G](e,r,n){let o={},i=yield*fn.getID3v2Header(e,r,n);i&&(yield*e[B](i[g],n),e[Ee](i[g]));let s=yield*e[B](4,n),a=Me(s[D](0,4)),c=r[G](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=ll[s[1]&24];if(l[E]===W)return null;let d=s[1]&6;if(Ti[d][E]===W)return null;let u={...Ti[d],...Ti[d][l[xe]]};if(o[Qe]=l[E],o[xe]=u[E],o[O]=u[O],o[Je]=dl[s[1]&1],o[g]=4,o[ce]=fa[s[2]&240][u[Ot]],o[ce]===me||(o[H]=l[H][s[2]&12],o[H]===W)||(o[We]=s[2]&2&&u[We],o[je]=!!(s[2]&1),o[ge]=Math.floor(125*o[ce]*o[O]/o[H]+o[We]),!o[ge]))return null;let m=s[3]&192;if(o[de]=ma[m][E],o[C]=ma[m][C],o[$e]=u[$e][s[3]&48],o[Wr]=!!(s[3]&8),o[Ke]=!!(s[3]&4),o[lr]=ul[s[3]&3],o[lr]===W)return null;o[ae]=16;{let{length:f,frameLength:h,samples:y,...p}=o;r[Te](a,o,p)}return new t(o)}constructor(e){super(e),this[ce]=e[ce],this[lr]=e[lr],this[We]=e[We],this[Wr]=e[Wr],this[Ke]=e[Ke],this[je]=e[je],this[xe]=e[xe],this[$e]=e[$e],this[Qe]=e[Qe],this[Je]=e[Je]}};var hn=class t extends Ae{static*[Pe](e,r,n){return yield*super[Pe](Nt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var yn=class extends fe{constructor(e,r,n){super(e,r),this.Frame=hn,this.Header=Nt,n(this[Y])}get[Y](){return no}*[Ye](){return yield*this[bt]()}};var ml={0:"MPEG-4",8:"MPEG-2"},fl={0:"valid",2:me,4:me,6:me},pl={0:po,1:ln},hl={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},yl={0:Zn,4:eo,8:ea,12:ut,16:rr,20:nr,24:or,28:ir,32:sr,36:to,40:ro,44:ar,48:ta,52:W,56:W,60:"frequency is written explicitly"},pa={0:{[C]:0,[E]:"Defined in AOT Specific Config"},64:{[C]:1,[E]:lt},128:{[C]:2,[E]:Q(2,T[0][0])},192:{[C]:3,[E]:Q(3,T[1][3])},256:{[C]:4,[E]:Q(4,T[1][3],T[3][4])},320:{[C]:5,[E]:Q(5,T[1][3],T[3][0])},384:{[C]:6,[E]:Q(6,T[1][3],T[3][0],Ve)},448:{[C]:8,[E]:Q(8,T[1][3],T[2][0],T[3][0],Ve)}},Bt=class t extends _e{static*[G](e,r,n){let o={},i=yield*e[B](7,n),s=Me([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[G](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[Qe]=ml[i[1]&8],o[xe]=fl[i[1]&6],o[xe]===me))return null;let l=i[1]&1;o[Je]=pl[l],o[g]=l?7:9,o[oo]=i[2]&192,o[Xe]=i[2]&60;let d=i[2]&2;if(o[jr]=hl[o[oo]],o[H]=yl[o[Xe]],o[H]===W)return null;o[je]=!!d,o[en]=(i[2]<<8|i[3])&448,o[de]=pa[o[en]][E],o[C]=pa[o[en]][C],o[Ke]=!!(i[3]&32),o[Xr]=!!(i[3]&8),o[tn]=!!(i[3]&8),o[rn]=!!(i[3]&4),o[ae]=16,o[O]=1024,o[Yr]=i[6]&3;{let{length:u,channelModeBits:m,profileBits:f,sampleRateBits:h,frameLength:y,samples:p,numberAACFrames:x,...M}=o;r[Te](s,o,M)}}if(o[ge]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[ge])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Nr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[tn]=e[tn],this[rn]=e[rn],this[Nr]=e[Nr],this[Xr]=e[Xr],this[Ke]=e[Ke],this[je]=e[je],this[xe]=e[xe],this[g]=e[g],this[Qe]=e[Qe],this[Yr]=e[Yr],this[jr]=e[jr],this[Je]=e[Je]}get audioSpecificConfig(){let e=ne.get(this),r=e[oo]+64<<5|e[Xe]<<5|e[en]>>3,n=new ue(2);return new St(n[Ue]).setUint16(0,r,!1),n}};var xn=class t extends Ae{static*[Pe](e,r,n){return yield*super[Pe](Bt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var gn=class extends fe{constructor(e,r,n){super(e,r),this.Frame=xn,this.Header=Bt,n(this[Y])}get[Y](){return"aac"}*[Ye](){return yield*this[bt]()}};var Mt=class t extends Ae{static _getFrameFooterCrc16(e){return(e[e[g]-2]<<8)+e[e[g]-1]}static[fo](e){let r=t._getFrameFooterCrc16(e),n=sa(e[D](0,-2));return r===n}constructor(e,r,n){r[an]=n,r[Vr]=t._getFrameFooterCrc16(e),super(r,e,ne.get(r)[O])}};var ha="get from STREAMINFO metadata block",xl={0:"Fixed",1:"Variable"},ya={0:W,16:192};for(let t=2;t<16;t++)ya[t<<4]=t<6?576*2**(t-2):2**t;var gl={0:ha,1:eo,2:Zs,3:Js,4:ar,5:sr,6:ir,7:or,8:nr,9:rr,10:ut,11:Zn,15:me},bl={0:{[C]:1,[E]:lt},16:{[C]:2,[E]:Q(2,T[0][0])},32:{[C]:3,[E]:Q(3,T[0][1])},48:{[C]:4,[E]:Q(4,T[1][0],T[3][0])},64:{[C]:5,[E]:Q(5,T[1][1],T[3][0])},80:{[C]:6,[E]:Q(6,T[1][1],Ve,T[3][0])},96:{[C]:7,[E]:Q(7,T[1][1],Ve,T[3][4],T[2][0])},112:{[C]:8,[E]:Q(8,T[1][1],Ve,T[3][0],T[2][0])},128:{[C]:2,[E]:`${dt} (left, diff)`},144:{[C]:2,[E]:`${dt} (diff, right)`},160:{[C]:2,[E]:`${dt} (avg, diff)`},176:W,192:W,208:W,224:W,240:W},vl={0:ha,2:8,4:12,6:W,8:16,10:20,12:24,14:W},At=class t extends _e{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>r)<<i,{value:o,length:r}}static[Fe](e,r){let n={[B]:function*(){return e}};return t[G](n,r,0).next().value}static*[G](e,r,n){let o=yield*e[B](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=Me(o[D](0,4)),a=r[G](s);if(a)Object.assign(i,a);else{if(i[so]=o[1]&1,i[Qr]=xl[i[so]],i[Jr]=o[2]&240,i[Xe]=o[2]&15,i[Ze]=ya[i[Jr]],i[Ze]===W||(i[H]=gl[i[Xe]],i[H]===me)||o[3]&1)return null;let l=bl[o[3]&240];if(l===W||(i[C]=l[C],i[de]=l[E],i[ae]=vl[o[3]&14],i[ae]===W))return null}i[g]=5,o=yield*e[B](i[g]+8,n);let c=t._decodeUTF8Int(o[D](4));if(!c||(i[so]?i[on]=c.value:i[nt]=c.value,i[g]+=c[g],i[Jr]===96?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[Ze]=o[i[g]-1]+1,i[g]+=1):i[Jr]===112&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[Ze]=(o[i[g]-1]<<8)+o[i[g]]+1,i[g]+=2),i[O]=i[Ze],i[Xe]===12?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=o[i[g]-1]*1e3,i[g]+=1):i[Xe]===13?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=(o[i[g]-1]<<8)+o[i[g]],i[g]+=2):i[Xe]===14&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=((o[i[g]-1]<<8)+o[i[g]])*10,i[g]+=2),o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[cr]=o[i[g]-1],i[cr]!==ia(o[D](0,i[g]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:m,sampleRateBits:f,blockSizeBits:h,crc:y,length:p,...x}=i;r[Te](s,i,x)}return new t(i)}constructor(e){super(e),this[Vr]=null,this[Qr]=e[Qr],this[Ze]=e[Ze],this[nt]=e[nt],this[on]=e[on],this[an]=null}};var Sl=2,Ml=512*1024,Vt=class extends fe{constructor(e,r,n){super(e,r),this.Frame=Mt,this.Header=At,n(this[Y])}get[Y](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[B](2,0),n=r[g]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[Ye](){do{let e=yield*At[G](this._codecParser,this._headerCache,0);if(e){let r=ne.get(e)[g]+Sl;for(;r<=Ml;){if(this._codecParser._flushing||(yield*At[G](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[B](r);if(this._codecParser._flushing||(n=n[D](0,r)),Mt[fo](n)){let o=new Mt(n,e);return this._headerCache[Ne](),this._codecParser[Ee](r),this._codecParser[gt](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[He](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Ee](r)}else this._codecParser[Ee](yield*this._getNextFrameSyncOffset(1))}while(!0)}[vt](e){return e[re]===0?(this._headerCache[Ne](),this._streamInfo=e[q][D](13)):e[re]===1||(e[le]=ie.get(e)[Ce].map(r=>{let n=At[Fe](r,this._headerCache);if(n)return new Mt(r,n,this._streamInfo);this._codecParser[He]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Ut=class t{static*[G](e,r,n){let o={},i=yield*e[B](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[Mi]=i[4],i[5]&248))return null;o[Se]=!!(i[5]&4),o[ft]=!!(i[5]&2),o[mt]=!!(i[5]&1);let a=new St(ue.from(i[D](0,28))[Ue]);o[De]=ca(a,6),o[qe]=a.getInt32(14,!0),o[re]=a.getInt32(18,!0),o[It]=a.getInt32(22,!0);let c=i[26];o[g]=c+27,i=yield*e[B](o[g],n),o[ge]=0,o[xt]=[],o[ur]=ue.from(i[D](27,o[g]));for(let l=0,d=0;l<c;l++){let u=o[ur][l];o[ge]+=u,d+=u,(u!==255||l===c-1)&&(o[xt].push(d),d=0)}return new t(o)}constructor(e){ne.set(this,e),this[De]=e[De],this[mt]=e[mt],this[ft]=e[ft],this[Se]=e[Se],this[xt]=e[xt],this[re]=e[re],this[It]=e[It],this[qe]=e[qe]}};var bn=class t extends Ht{static*[Pe](e,r,n){let o=yield*Ut[G](e,r,n);if(o){let i=ne.get(o)[ge],s=ne.get(o)[g],a=s+i,c=(yield*e[B](a,0))[D](0,a),l=c[D](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),ie.get(this)[g]=n[g],this[le]=[],this[bi]=n,this[De]=e[De],this[Ur]=e[It],this[Ge]=0,this[mt]=e[mt],this[ft]=e[ft],this[Se]=e[Se],this[re]=e[re],this[O]=0,this[qe]=e[qe]}};var fr=class extends Ae{constructor(e,r,n){super(r,e,n)}};var xa={0:kr.slice(0,2),1:kr},Ie="SILK-only",se="CELT-only",_o="Hybrid",_t="narrowband",wo="medium-band",wt="wideband",pr="super-wideband",hr="fullband",Al={0:{[R]:Ie,[k]:_t,[I]:10},8:{[R]:Ie,[k]:_t,[I]:20},16:{[R]:Ie,[k]:_t,[I]:40},24:{[R]:Ie,[k]:_t,[I]:60},32:{[R]:Ie,[k]:wo,[I]:10},40:{[R]:Ie,[k]:wo,[I]:20},48:{[R]:Ie,[k]:wo,[I]:40},56:{[R]:Ie,[k]:wo,[I]:60},64:{[R]:Ie,[k]:wt,[I]:10},72:{[R]:Ie,[k]:wt,[I]:20},80:{[R]:Ie,[k]:wt,[I]:40},88:{[R]:Ie,[k]:wt,[I]:60},96:{[R]:_o,[k]:pr,[I]:10},104:{[R]:_o,[k]:pr,[I]:20},112:{[R]:_o,[k]:hr,[I]:10},120:{[R]:_o,[k]:hr,[I]:20},128:{[R]:se,[k]:_t,[I]:2.5},136:{[R]:se,[k]:_t,[I]:5},144:{[R]:se,[k]:_t,[I]:10},152:{[R]:se,[k]:_t,[I]:20},160:{[R]:se,[k]:wt,[I]:2.5},168:{[R]:se,[k]:wt,[I]:5},176:{[R]:se,[k]:wt,[I]:10},184:{[R]:se,[k]:wt,[I]:20},192:{[R]:se,[k]:pr,[I]:2.5},200:{[R]:se,[k]:pr,[I]:5},208:{[R]:se,[k]:pr,[I]:10},216:{[R]:se,[k]:pr,[I]:20},224:{[R]:se,[k]:hr,[I]:2.5},232:{[R]:se,[k]:hr,[I]:5},240:{[R]:se,[k]:hr,[I]:10},248:{[R]:se,[k]:hr,[I]:20}},yr=class t extends _e{static[Fe](e,r,n){let o={};if(o[C]=e[9],o[et]=e[18],o[g]=o[et]!==0?21+o[C]:19,e[g]<o[g])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=Me(e[D](0,o[g]))+Me(r[D](0,s)),c=n[G](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[q]=ue.from(e[D](0,o[g]));let l=new St(o[q][Ue]);if(o[ae]=16,o[Pt]=l.getUint16(10,!0),o[nn]=l.getUint32(12,!0),o[H]=ut,o[Kr]=l.getInt16(16,!0),o[et]in xa&&(o[de]=xa[o[et]][o[C]-1],!o[de]))return null;o[et]!==0&&(o[sn]=e[19],o[Br]=e[20],o[Zr]=[...e[D](21,o[C]+21)]);let d=Al[248&r[0]];switch(o[R]=d[R],o[k]=d[k],o[I]=d[I],i){case 0:o[rt]=1;break;case 1:case 2:o[rt]=2;break;case 3:o[qr]=!!(128&r[1]),o[Gr]=!!(64&r[1]),o[rt]=63&r[1];break;default:return null}{let{length:u,data:m,channelMappingFamily:f,...h}=o;n[Te](a,o,h)}return new t(o)}constructor(e){super(e),this[q]=e[q],this[k]=e[k],this[et]=e[et],this[Zr]=e[Zr],this[Br]=e[Br],this[rt]=e[rt],this[I]=e[I],this[Gr]=e[Gr],this[nn]=e[nn],this[qr]=e[qr],this[R]=e[R],this[Kr]=e[Kr],this[Pt]=e[Pt],this[sn]=e[sn]}};var vn=class extends fe{constructor(e,r,n){super(e,r),this.Frame=fr,this.Header=yr,n(this[Y]),this._identificationHeader=null,this._preSkipRemaining=null}get[Y](){return"opus"}[vt](e){return e[re]===0?(this._headerCache[Ne](),this._identificationHeader=e[q]):e[re]===1||(e[le]=ie.get(e)[Ce].map(r=>{let n=yr[Fe](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Pt]);let o=n[I]*n[rt]/1e3*n[H];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new fr(r,n,o)}this._codecParser[uo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var xr=class extends Ae{constructor(e,r,n){super(r,e,n)}};var Fi={};for(let t=0;t<8;t++)Fi[t+6]=2**(6+t);var Sn=class t extends _e{static[Fe](e,r,n,o){if(e[g]<30)throw new Error("Out of data while inside an Ogg Page");let i=Me(e[D](0,30)),s=r[G](i);if(s)return new t(s);let a={[g]:30};if(i.substr(0,7)!=="vorbis")return null;a[q]=ue.from(e[D](0,30));let c=new St(a[q][Ue]);if(a[pt]=c.getUint32(7,!0),a[pt]!==0||(a[C]=e[11],a[de]=kr[a[C]-1]||"application defined",a[H]=c.getUint32(12,!0),a[Dr]=c.getInt32(16,!0),a[Or]=c.getInt32(20,!0),a[Hr]=c.getInt32(24,!0),a[yt]=Fi[(e[28]&240)>>4],a[ht]=Fi[e[28]&15],a[ht]>a[yt])||e[29]!==1)return null;a[ae]=32,a[dr]=o,a[$r]=n;{let{length:l,data:d,version:u,vorbisSetup:m,vorbisComments:f,...h}=a;r[Te](i,a,h)}return new t(a)}constructor(e){super(e),this[Dr]=e[Dr],this[Hr]=e[Hr],this[Or]=e[Or],this[ht]=e[ht],this[yt]=e[yt],this[q]=e[q],this[$r]=e[$r],this[dr]=e[dr]}};var Mn=class extends fe{constructor(e,r,n){super(e,r),this.Frame=xr,n(this[Y]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[Y](){return Ft}[vt](e){e[le]=[];for(let r of ie.get(e)[Ce])if(r[0]===1)this._headerCache[Ne](),this._identificationHeader=e[q],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=Sn[Fe](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[le].push(new xr(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[yt]:r[ht],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new ho(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){dn(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((dn(o)&126)>>1)+1!==n.count&&this._codecParser[He]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Ii=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new ue,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[Y](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Oe](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Me(e[D](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",vn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Vt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(Ft,Mn),!0;default:return!1}}_checkPageSequenceNumber(e){e[re]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[re]>1&&this._codecParser[He]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[re]}`),this._pageSequenceNumber=e[re]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[re],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=ie.get(e),n=ne.get(r[ve]),o=0;if(r[Ce]=n[xt].map(i=>e[q][D](o,o+=i)),this._continuedPacket[g]&&(r[Ce][0]=un(this._continuedPacket,r[Ce][0]),this._continuedPacket=new ue),n[ur][n[ur][g]-1]===255&&(this._continuedPacket=un(this._continuedPacket,r[Ce].pop())),this._previousAbsoluteGranulePosition!==null&&(e[O]=Number(e[De]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[De],this._isSupported){let i=this._parser[vt](e);return this._codecParser[gt](i),i}else return e}},An=class extends fe{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=bn,this.Header=Ut,this._streams=new Map,this._currentSerialNumber=null}get[Y](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Ye](){let e=yield*this[bt](!0);this._currentSerialNumber=e[qe];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Ii(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[Se]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ri=()=>{},_n=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Ri,this._onCodecHeader=n||Ri,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?aa:Ri,this[Oe]()}get[Y](){return this._parser?this._parser[Y]:""}[Oe](){this._headerCache=new mn(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Oe]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new gn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new yn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Vt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new An(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[Ye]();e&&(yield e)}}*[B](e=0,r=0){let n;for(;this._rawData[g]<=e+r;){if(n=yield,this._flushing)return this._rawData[D](r);n&&(this._totalBytesIn+=n[g],this._rawData=un(this._rawData,n))}return this._rawData[D](r)}[Ee](e){this._currentReadPosition+=e,this._rawData=this._rawData[D](e)}[cn](e){this._sampleRate=e[ve][H],e[ve][ce]=e[Ge]>0?Math.round(e[q][g]/e[Ge])*8:0,e[nt]=this._frameNumber++,e[Rt]=this._totalBytesOut,e[Dt]=this._totalSamples,e[kt]=this._totalSamples/this._sampleRate*1e3,e[Ur]=this._crc32(e[q]),this._headerCache[mo](e[ve][ce],e[kt]),this._totalBytesOut+=e[q][g],this._totalSamples+=e[O]}[gt](e){if(e[le]){if(e[Se]){let r=e[O];e[le].forEach(n=>{let o=n[O];r<o&&(n[O]=r>0?r:0,n[Ge]=n[O]/n[ve][H]*1e3),r-=o,this[cn](n)})}else e[O]=0,e[le].forEach(r=>{e[O]+=r[O],this[cn](r)});e[Ge]=e[O]/this._sampleRate*1e3||0,e[Dt]=this._totalSamples,e[kt]=this._totalSamples/this._sampleRate*1e3||0,e[Rt]=this._totalBytesOut}else this[cn](e)}_log(e,r){if(this._enableLogging){let n=[`${Y}: ${this[Y]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Rt}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[g]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
|
|
4
|
+
`+s,""))}}[He](...e){this._log(console.warn,e)}[uo](...e){this._log(console.error,e)}};var ga=_n;var Lo=le;var zo=q;var ba=ve;var va=Se;var Sa=dr;var Ma=Dt;function ot(t){var e=e;function r(){}e={};function n(z){throw z}var o,i,s,a,c,l,d,u,m,f,h;function y(){var z=h.buffer;o=new Int8Array(z),i=new Int16Array(z),a=new Uint8Array(z),c=new Uint16Array(z),s=new Int32Array(z),l=new Uint32Array(z),d=new Float32Array(z),u=new Float64Array(z),m=new BigInt64Array(z),f=new BigUint64Array(z)}for(var p=z=>{for(var we,Lr,Kt=0,Rn=0,kn=z.length,Dn=new Uint8Array((kn*3>>2)-(z[kn-2]=="=")-(z[kn-1]=="="));Kt<kn;Kt+=4,Rn+=3)we=K[z.charCodeAt(Kt+1)],Lr=K[z.charCodeAt(Kt+2)],Dn[Rn]=K[z.charCodeAt(Kt)]<<2|we>>4,Dn[Rn+1]=we<<4|Lr>>2,Dn[Rn+2]=Lr<<6|K[z.charCodeAt(Kt+3)];return Dn},x=()=>n(""),M=()=>{},b={},S=z=>z(),v=()=>performance.now(),A=(z,we)=>{if(b[z]&&(clearTimeout(b[z].id),delete b[z]),!we)return 0;var Lr=setTimeout(()=>{delete b[z],S(()=>hs(z,v()))},we);return b[z]={id:Lr,timeout_ms:we},0},w=Math.atan,L=Math.cos,P=Math.exp,_=Math.log,N=Math.pow,U=Math.sin,V=z=>{var we=a.length;return z>>>=0,!1},F=z=>{throw`exit(${z})`},K=new Uint8Array(123),ye=25;ye>=0;--ye)K[48+ye]=52+ye,K[65+ye]=ye,K[97+ye]=26+ye;K[43]=62,K[47]=63;var Lt={e:x,d:M,f:A,b:w,a:L,i:P,h:_,g:N,c:U,k:V,j:F};function In(z){wr=z.n,ls=z.o,ds=z.p,us=z.q,ms=z.r,fs=z.s,ps=z.t,hs=z.v}var wr,ls,ds,us,ms,fs,ps,hs;function sc(z){z.m()}ot.wasm||Object.defineProperty(ot,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØäÂLÚªã9ÚØ[äº\ ¼¡³R=}L]Èÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹=
|
|
5
5
|
¨¨%ýv²±»oúâLa:ê±ÊäÌÓ.÷Øý×>àW>z¯°8¯ñ\Ñós9\§ôÊ@Ü (tÃø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍÞã¾>÷CõË"*k?¿~7~H2ÛÜâ.ÏQä;6{ÜãFÑá'DD¤±°HQ>MínÎÏÎöʵÑÓ
ÞÌP¼P¨Þ*X²E=M¦qíxMñ=MÌë4/<gNO/¢ ¢>a~Ï®ììììì0ìa笡çëOÓÇM Q9tùµyuéµµÞÏ/±Óõò}E{òÓJ¹Û|·ôfÒ c¬Wêaûÿlʽp¹|)ÖEL¦ }ypÕSϹI]¢ºãæ°ÿo¶7ÛRq¾ÔÅEߨ]æËwÚ{óçVwó1¾EØpàe"Æùû¡Áª Ààð´LõÎxEÓ¢N¦
9ëùi& Ò§Ø!ÇFçS=MbäO?߷縪7ùa}5ðûÕtsUþ£KïgN¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔèE£ZƼ{hµmÙ¾6ÆÑ+xñ´«þ¸=Mߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#ax$qf=}ø ô bÏ×W÷LôoÝWQÕÓ)u÷½èV|¥Gà¨Ö¸@ê|ÇK5ò A·Â9CS2¸¼¿,äÝÑÝy!ÑR%ÆÝÎ0Âv§ qTcó±hØÉã=}Z=}Ælüën¯ð(-°ÜwVÏï.th¥íS~SÏ»ZZÔZ
|
|
6
6
|
3BÌÛ¬<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J×y@ÔyOÇmô½ü¾|S?2àú¤F?½ûoo3ô;<àáûÜ8ì²7ïë¨RäY¹|ÓºÌF,Ð-¸*\P!FJÒ8= o6HwLrúº¶ÐÛ\Ù¬o¢9IqÝ.ôf¶ÎÈ{Ī×N|Mfs
¤ÉÝàâ§*+ã§ô¯î¬7ç×§ä)!Z¨É,Äp~ý·wsSGóäsE\ýïé§Ö:Ò'Cç(_X$\¦½eÒ8$XF|eíÙÓ¡¤Û<ØÞÛ¸9¿ðÃÎ#b~× 4éîÿÏq
|
|
7
7
|
ód|0wU&®è·vh6¨{ÚçÚ18Ó(ÓY\0¦= çèíß)Ø=}[xü-v?N(Kkg0}âÚ´ð¬ÕQNÍ¢usѳ=}. ëg
û= ÍMBp'²¨ x4è@9t§eݵ¾âð½ z?Z¹FH'̯¿<K,üµ<{ ¶JãývåàÆeù0Ð"F¥ÃÒÞþÔÉvCzl}ðN£ Í^P%²¸FX»WÎêô¶
äÉJ^g×SÃã.Ät*'ªG«ÒB<ÜÓ
¿ºp\àuV¯£ÅݽáÞ ùß=}ÎÚ^ÿí>¥!¨ â=M·?*/¤"å)â·ÿîÿî*(%*2[½"üríÔ4l½»a}¯CwpCÓèìGc-ã6®=M32k?Êg
!So-x>³G+ã@ò, ÁïáåN0þÙè.~È÷¡vTr¶Ã[üB±º»ávëw¹{pܺû"Aæ±9Æ^¹³òïRIAy5GÂwÉf4@Tù|qý7ðªwBL|Ôqv!ª°|]KiÐJVQ5¸åõ§å"H¼0e¬<óBîÚSÏUìHPÙA+çÉ'seÌNf°@ÈM,ð½egÖ¬x©û½2~«Ò1;Ö«
¯°4&90èE»Ó׺çʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö·%!É
|
|
@@ -138,7 +138,7 @@ KÙ:KµºKí{K]ûK£[KÚKóKÓ½R׿ÿ'P^j9TîçmóþL¿_o©×hÙtÙ
|
|
|
138
138
|
Ái;ªäÀ%n= =M+W= ÓÖc[aS
|
|
139
139
|
FÁð]NôÝ'= qr(¶ù¤nü«òÿ¿d&ÿÈõT4Þ=}z|ö ¿OW×SMtdH.ÏãRX&§o3ØÜXÍ^ÊMí£W´iâ]NüOå£S£Å·ç÷ݧ½GÑUy¹¦ß§/6P0(Cúýb"þ¥°VÙÄá£ÓÙ@¾YýòD{òÃv?EP©=MBé\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±ÏÁÕ¯¦ðvZmT}3xËz×cºrÑM=Mc-É©Ô7½wæc§Î»cû¾yfÙWòÆÝÔc¥³ôØf«Äñ·9ø%g:y^+{U]¤þ
[&fÓÏYë«Gªõ¹¦Öðþ¬moÛø?/ÛS.[S9ÛùC
/û2²Y£ÎÑ%/sy¢×ÌùJW6Oí\g0^JùêßÏ0í[Ü'ÏÔ>À-¿[ÔW?Y]±ØÙÃî<~ÎëR~Ìf¾Z/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©IÇüñY8}Ffú@Rú1éþ3÷ËótQøvû|³Îaá,Óé>BG6Òê}ÃJ|¶=}°öf6õk¶ÌºHgNjÒ{æ¾M;9·é§WèO±Ä3ÒËÒyt ;ù´à©a|Ó^!ÝøûÂÄ
|
|
140
140
|
(VV¸ÇÙcÏ>yoçzÃvòG{3Þ£½c×ôíÅé;°OÛGØ<wÜW> rU]q{û'ùÝír{*øï?t-ígùWÿ
&§]m}×ût¥Ë~ß&>&Õv!b#ÅÌq¢µ|jÍüùÉ^Æ&ôþ~sIµ"]d)uâ´ºvk Å\<Íÿöê½Â
|
|
141
|
-
ïBçϧmÙIólÜoëVb¦¯éWÇû3`});var ja={a:qa};this.setModule=x=>{r.setModule(Qe,x)},this.getModule=()=>r.getModule(Qe),this.instantiate=()=>(this.getModule().then(x=>WebAssembly.instantiate(x,ja)).then(x=>{let ye=x.exports;Ka(ye),h=ye.l,y(),Ya(ye),t()}),this.ready=new Promise(x=>{t=x}).then(()=>{this.HEAP=h.buffer,this.malloc=os,this.free=ls,this.create_decoder=ns,this.send_setup=is,this.init_dsp=ss,this.decode_packets=as,this.destroy_decoder=cs}),this)}function Bt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(r=>{this._common=r,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=r=>{this._input.buf.set(r),this._inputLen.buf[0]=r.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=r=>{let e=[],t=0,n=[];for(let o=0;o<r.length;o++){let i=r[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let u=new Float32Array(s);s&&u.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(u)}e.push(a),t+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let u=this._common.codeToString(this._errors.buf[l]),d=this._common.codeToString(this._errors.buf[l+1]);n.push({message:u+" vorbis_synthesis"+d,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],t,this._sampleRate.buf[0],16)},this._isWebWorker=Bt.isWebWorker,this._WASMAudioDecoderCommon=Bt.WASMAudioDecoderCommon||O,this._EmscriptenWASM=Bt.EmscriptenWASM||Qe,this._module=Bt.module,this._inputSize=128*1024,this._ready=this._init(),this}var _o=Symbol(),Ze=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new O,this._init(),this._ready=this[_o](Bt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new ma("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[_o](e){if(this._decoder){let t=this._decoder;await t.ready.then(()=>t.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let t=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[So][0]===1&&this._decoder.sendSetupHeader(s[So]),s[vo].length)){let a=s[vo][0][fa];this._decoder.sendSetupHeader(a[ha]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}t.push(...s[vo].map(a=>a[So]))}let n=await this._decoder.decodePackets(t);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[pa]){let i=this._totalSamplesDecoded-o[ya];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let t=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),t}};var Ti=class extends $t{constructor(e){super(e,"ogg-vorbis-decoder",Bt,Qe)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},vn=class extends Ze{constructor(){super(),this._ready=super[_o](Ti)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};qn(Ze,"OggVorbisDecoder");qn(vn,"OggVorbisDecoderWebWorker");var zi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Ao(r,e=new Ze){await e.ready;let t=await e.decode(new Uint8Array(r)),n=t.errors;if(n&&n.length>0)throw new zi(n.map(o=>o.message).join("; "));return{sampleRate:t.sampleRate,channels:t.channelData.length,bitDepth:t.bitDepth,channelData:t.channelData}}var Sn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},fr=class{constructor(e,t={}){this.vfs=e;this.refCounts=new Map;this.cache=new it(t.cacheSize??64)}get size(){return this.cache.size}async load(e){let t=e.toLowerCase(),n=this.cache.get(t);if(n)return this.refCounts.set(t,(this.refCounts.get(t)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(t,s),this.refCounts.set(t,1),s}release(e){let t=e.toLowerCase(),n=this.refCounts.get(t)??0;n<=1?(this.cache.delete(t),this.refCounts.delete(t)):this.refCounts.set(t,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,t){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Xn(t),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Ao(t);throw new Sn(`Unsupported audio format: ${e}`)}};var fl="quake2ts-pak-indexes",pl="pak-indexes";function ga(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function _n(r,e){let t=ga();return t?new Promise((n,o)=>{let i=t.open(r,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function An(r,e,t,n){return new Promise((o,i)=>{let a=r.transaction(e,t).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Fi(r,e){return`${X(r)}:${e.toString(16)}`}function hl(r){return r.map(e=>({...e}))}var Mo=class{constructor(e=fl,t=pl){this.dbName=e;this.storeName=t}get isSupported(){return!!ga()}async persist(e){if(!this.isSupported)return;let t=e.validate(),n={...t,key:Fi(e.name,t.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:hl(t.entries)},o=await _n(this.dbName,this.storeName);return await An(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,t){if(!this.isSupported)return;let n=await _n(this.dbName,this.storeName),o=t!==void 0?Fi(e,t):void 0,i=await An(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=X(e),a=i.filter(c=>X(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,t){if(!this.isSupported)return!1;let n=await _n(this.dbName,this.storeName),o=t!==void 0?Fi(e,t):void 0,i=await An(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${X(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await _n(this.dbName,this.storeName);await An(e,this.storeName,"readwrite",t=>t.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await _n(this.dbName,this.storeName),t=await An(e,this.storeName,"readonly",n=>n.getAll());return e.close(),t.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Nt=class extends Error{constructor(t,n){super(n??`Missing dependencies: ${t.join(", ")}`);this.missing=t;this.name="AssetDependencyError"}},Mn=class{constructor(){this.nodes=new Map}register(e,t=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};t.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),t.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let t=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,t);if(n.length>0)throw new Nt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);t.loaded=!0,this.nodes.set(e,t)}markUnloaded(e){let t=this.nodes.get(e);t&&(t.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let t=this.nodes.get(e);return t?this.getMissingDependencies(e,t):[]}reset(){this.nodes.clear()}getMissingDependencies(e,t){let n=[];for(let o of t.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},wo=class{constructor(e,t={}){this.vfs=e;this.textures=new jt({capacity:t.textureCacheCapacity??128}),this.audio=new fr(e,{cacheSize:t.audioCacheSize??64}),this.dependencyTracker=t.dependencyTracker??new Mn,this.md2=new Kt(e),this.md3=new Yt(e)}isAssetLoaded(e,t){return this.dependencyTracker.isLoaded(this.makeKey(e,t))}registerTexture(e,t){this.textures.set(e,t);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let t=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),t}async loadMd2Model(e,t=[]){let n=this.makeKey("model",e),o=t.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Nt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,t=[]){let n=this.makeKey("model",e),o=t.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Nt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,t){return`${e}:${X(t)}`}};var Pi=32,Lo=(d=>(d[d.Auto=0]="Auto",d[d.Weapon=1]="Weapon",d[d.Voice=2]="Voice",d[d.Item=3]="Item",d[d.Body=4]="Body",d[d.Aux=5]="Aux",d[d.Footstep=6]="Footstep",d[d.Aux3=7]="Aux3",d[d.NoPhsAdd=8]="NoPhsAdd",d[d.Reliable=16]="Reliable",d[d.ForcePos=32]="ForcePos",d))(Lo||{}),xa=-1,Co=0,ba=1,va=2,Sa=3,pr=80,_a=.003;function Vt(r){return r===3?r*.001:r*5e-4}function Eo(r){let e=Vt(r);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var To=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function zo(r){let e=r.getContext(),t=e.createGain();t.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,t.connect(o),o.connect(n)):t.connect(n),n.connect(e.destination),{context:e,master:t,compressor:n,filter:o}}var Fo=class{constructor(e=new Xt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,t){let n=this.registerName(e);return this.buffers.set(n,t),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Po=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((t,n)=>{if(!t.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return t.decodeAudioData(n)})}async precache(e){let t=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of t)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,u=await this.decodeAudio(o,l);this.registry.register(i,u),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let t=X(e.replace(/^\//,""));return t.startsWith(this.soundRoot)?t:X(`${this.soundRoot}${t}`)}};var yl=7,wn=r=>r&yl;function Io(r){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===r}))}function Ro(r,e,t,n){if(t<0)throw new Error("pickChannel: entchannel must be non-negative");let o=wn(t),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<r.length;a+=1){let c=r[a],l=wn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let u=c.endTimeMs-n.nowMs;(i===-1||u<s)&&(s=u,i=a)}return i===-1?void 0:i}function ko(r,e,t,n,o){if(o)return{left:t,right:t,distanceComponent:0};let i=fs(r,e.origin),s=Jo(i),a=Ee(i),c=s-80;c<0&&(c=0),c*=Vt(n);let l=$o(e.right,a),u=e.mono??!1,d=u||n===0?1:.5*(1+l),m=u||n===0?1:.5*(1-l),p=Math.max(0,Math.floor(t*(1-c)*d));return{left:Math.max(0,Math.floor(t*(1-c)*m)),right:p,distanceComponent:c}}var Do=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Io(e.playerEntity),this.listener=e.listener??{origin:ms,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=zo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let t=this.registry.get(e.soundIndex);if(!t)return;let n=this.graph.context,o=n.currentTime*1e3,i=Ro(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=t,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),u=this.createPanner(n,e.attenuation),d=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=Aa(d?.gainScale??1),p=this.resolveOcclusion?this.createOcclusionFilter(n,d?.lowpassHz??2e4):void 0;this.applyOriginToPanner(u,c);let h=e.entity===this.playerEntity,y=ko(c,this.listener,e.volume,e.attenuation,h),b=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=b*m;let L=n.currentTime+(e.timeOffsetMs??0)/1e3,C=(e.looping?Number.POSITIVE_INFINITY:t.duration*1e3)+L*1e3;a.connect(u),p?(u.connect(p),p.connect(l)):u.connect(l),l.connect(this.graph.master),a.start(L),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let W={channelIndex:i,entnum:e.entity,entchannel:wn(e.channel),endTimeMs:C,source:a,panner:u,gain:l,baseGain:b,origin:c,attenuation:e.attenuation,occlusion:p?{scale:m,lowpassHz:d?.lowpassHz,filter:p}:d?{scale:m,lowpassHz:d.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:wn(e.channel),endTimeMs:C,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,W),W}stop(e){let t=this.activeSources.get(e);t&&(t.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[t,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[t].active=!1,this.activeSources.delete(t))}updateEntityPosition(e,t){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,t),n.origin=t,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,t,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,t,n,o){return this.play({entity:0,channel:0,soundIndex:t,volume:n,attenuation:o,origin:e})}ambientSound(e,t,n){return this.play({entity:0,channel:0,soundIndex:t,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,t=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?t:2e4)}createPanner(e,t){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,t)}configurePanner(e,t){let n=Vt(t);return e.refDistance=80,e.maxDistance=Eo(t),e.rolloffFactor=n,e.distanceModel=t===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,t){e.positionX.value=t.x,e.positionY.value=t.y,e.positionZ.value=t.z}createOcclusionFilter(e,t){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Ii(t,10,2e4),n}applyOcclusion(e,t){let n=Aa(t?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=t?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Ii(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=t?.lowpassHz):t&&(e.occlusion={scale:n,lowpassHz:t.lowpassHz})}},Ii=(r,e,t)=>Math.min(t,Math.max(e,r)),Aa=r=>Ii(r,0,1);var Ho=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async t=>t),this.volume=e.volume??1}async play(e,{loop:t=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=t,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=t,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),t=!!this.element?.paused;return{track:this.track,paused:t,playing:e,volume:this.volume}}};var Oo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,t,n,o,i,s){this.system.play({entity:e,channel:t,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,t,n,o){this.system.positionedSound(e,t,n,o)}loop_sound(e,t,n,o,i){this.system.play({entity:e,channel:t,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,t=!0){return this.music?this.music.play(e,{loop:t}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,t,n){this.system.ambientSound(e,t,n)}play_channel(e){this.system.play({...e})}};function gl(r){r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.enable(r.CULL_FACE),r.cullFace(r.BACK),r.enable(r.BLEND),r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA)}function xl(r,e,t,n){for(let o of e){let i=r.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of t){let i=r.getExtension(o);i&&n.set(o,i)}}function Ma(r,e={}){let{contextAttributes:t,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=r.getContext("webgl2",t??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");gl(i);let s=new Map;xl(i,n,o,s);let a=!1,c=new Set,l=new Set,u=m=>{a=!0,m.preventDefault();for(let p of c)p()},d=()=>{a=!1;for(let m of l)m()};return r.addEventListener("webglcontextlost",u),r.addEventListener("webglcontextrestored",d),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){r.removeEventListener("webglcontextlost",u),r.removeEventListener("webglcontextrestored",d),c.clear(),l.clear(),s.clear()}}}function wa(r,e,t){let n=r.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(r.shaderSource(n,t),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS)){let i=r.getShaderInfoLog(n)??"Unknown shader compile failure";throw r.deleteShader(n),new Error(i)}return n}function bl(r,e,t,n){let o=r.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(r.attachShader(o,e),r.attachShader(o,t),n)for(let[s,a]of Object.entries(n))r.bindAttribLocation(o,a,s);if(r.linkProgram(o),!r.getProgramParameter(o,r.LINK_STATUS)){let s=r.getProgramInfoLog(o)??"Unknown shader link failure";throw r.deleteProgram(o),new Error(s)}return o}var ie=class r{constructor(e,t){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=t}static create(e,t,n){let o=wa(e,e.VERTEX_SHADER,t.vertex),i=wa(e,e.FRAGMENT_SHADER,t.fragment);try{let s=bl(e,o,i,n);return new r(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let t=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,t)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let t=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,t)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function La(r,e,t){return ie.create(r,e,t)}var se=class{constructor(e,t=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,t)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,t=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,t)}update(e,t=0){this.bind(),this.gl.bufferSubData(this.target,t,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},we=class extends se{constructor(e,t=e.STATIC_DRAW){super(e,t,e.ELEMENT_ARRAY_BUFFER)}},le=class{constructor(e){this.gl=e;let t=e.createVertexArray();if(!t)throw new Error("Failed to allocate vertex array object");this.vao=t}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,t){this.bind(),t&&t.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},hr=class{constructor(e,t=e.TEXTURE_2D){this.gl=e,this.target=t;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,t,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,t,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},yr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let t=e.createTexture();if(!t)throw new Error("Failed to allocate cubemap texture");this.texture=t}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,t,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,t,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Bo=class{constructor(e){this.gl=e;let t=e.createFramebuffer();if(!t)throw new Error("Failed to allocate framebuffer");this.framebuffer=t}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,t,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,t.target,t.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var ki=4,Ri=7*ki,Di=[{index:0,size:3,type:5126,stride:Ri,offset:0},{index:1,size:2,type:5126,stride:Ri,offset:3*ki},{index:2,size:2,type:5126,stride:Ri,offset:5*ki}];function vl(r,e){return{width:r,height:r,padding:e,data:new Uint8Array(r*r*4),cursorX:0,cursorY:0,rowHeight:0}}function Sl(r){let e=r.width*r.height;if(e===0)throw new Error("Invalid lightmap with zero area");let t=r.samples.byteLength/e;if(!Number.isInteger(t)||t<3||t>4)throw new Error("Unsupported lightmap channel count");return t}function _l(r,e,t){let n=Sl(t),o=r.width*4,i=e.x+r.padding,s=e.y+r.padding,a=0;for(let c=0;c<t.height;c++){let l=(s+c)*o+i*4;for(let u=0;u<t.width;u++){let d=l+u*4;r.data[d]=t.samples[a],r.data[d+1]=t.samples[a+1],r.data[d+2]=t.samples[a+2],r.data[d+3]=n===4?t.samples[a+3]:255,a+=n}}}function Al(r,e,t){let n=e.width+t.lightmapPadding*2,o=e.height+t.lightmapPadding*2;if(n>t.atlasSize||o>t.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of r){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+t.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:r.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+t.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=vl(t.atlasSize,t.lightmapPadding);r.push(i);let s={atlasIndex:r.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+t.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function No(r){return r instanceof Float32Array?r:new Float32Array(r)}function Ml(r,e){if(!r){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return r instanceof Uint16Array?r:new Uint16Array(r)}function wl(r,e){let t=new Float32Array(r.length);for(let n=0;n<r.length;n+=2)t[n]=e.offset[0]+r[n]*e.scale[0],t[n+1]=e.offset[1]+r[n+1]*e.scale[1];return t}function Ll(r,e){let t=No(r.vertices),n=No(r.textureCoords),o=e?wl(No(r.lightmapCoords??r.textureCoords),e):No(r.lightmapCoords??new Float32Array(n.length)),i=t.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,u=a*7;s[u]=t[c],s[u+1]=t[c+1],s[u+2]=t[c+2],s[u+3]=n[l],s[u+4]=n[l+1],s[u+5]=o[l],s[u+6]=o[l+1]}return s}function Ca(r,e,t={}){let n={atlasSize:t.atlasSize??1024,lightmapPadding:t.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:u,atlas:d}=Al(o,c.lightmap,n);_l(d,u,c.lightmap),i.set(l,{atlasIndex:u.atlasIndex,offset:[(u.x+n.lightmapPadding)/n.atlasSize,(u.y+n.lightmapPadding)/n.atlasSize],scale:[u.width/n.atlasSize,u.height/n.atlasSize]})});let s=o.map(c=>{let l=new hr(r);return l.setParameters({wrapS:r.CLAMP_TO_EDGE,wrapT:r.CLAMP_TO_EDGE,minFilter:r.LINEAR,magFilter:r.LINEAR}),l.uploadImage(0,r.RGBA,c.width,c.height,0,r.RGBA,r.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let u=i.get(l),d=Ll(c,u),m=Ml(c.indices,d.length/7),p=new se(r,r.STATIC_DRAW,r.ARRAY_BUFFER);p.upload(d);let h=new we(r,r.STATIC_DRAW);h.upload(m);let y=new le(r);return y.configureAttributes(Di,p),{vao:y,vertexBuffer:p,indexBuffer:h,indexCount:m.length,texture:c.texture,surfaceFlags:c.surfaceFlags??Ar,lightmap:u,vertexData:d,indexData:m}}),lightmaps:s}}function gr(r){let{normal:e,distance:t}=r,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return r;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:t*o}}function Ea(r){if(r.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=r[0],t=r[4],n=r[8],o=r[12],i=r[1],s=r[5],a=r[9],c=r[13],l=r[2],u=r[6],d=r[10],m=r[14],p=r[3],h=r[7],y=r[11],g=r[15];return[gr({normal:{x:p+e,y:h+t,z:y+n},distance:g+o}),gr({normal:{x:p-e,y:h-t,z:y-n},distance:g-o}),gr({normal:{x:p+i,y:h+s,z:y+a},distance:g+c}),gr({normal:{x:p-i,y:h-s,z:y-a},distance:g-c}),gr({normal:{x:p+l,y:h+u,z:y+d},distance:g+m}),gr({normal:{x:p-l,y:h-u,z:y-d},distance:g-m})]}function Cl(r,e){return r.normal.x*e.x+r.normal.y*e.y+r.normal.z*e.z+r.distance}function Ln(r,e,t){for(let n of t){let o=n.normal.x>=0?e.x:r.x,i=n.normal.y>=0?e.y:r.y,s=n.normal.z>=0?e.z:r.z;if(Cl(n,{x:o,y:i,z:s})<0)return!1}return!0}function Ta(r){return r<0}function za(r){return-r-1}function Fa(r,e){return r.normal[0]*e.x+r.normal[1]*e.y+r.normal[2]*e.z-r.dist}function El(r,e,t){if(!r||e<0||t<0)return!0;let n=Math.ceil(r.numClusters/8),o=r.clusters[e].pvs,i=Math.floor(t/8),s=1<<t%8;return i<0||i>=n?!1:(o[i]&s)!==0}function Tl(r,e){let t={x:r.mins[0],y:r.mins[1],z:r.mins[2]},n={x:r.maxs[0],y:r.maxs[1],z:r.maxs[2]};return Ln(t,n,e)}function Oi(r,e){let t=0;for(;t>=0;){let n=r.nodes[t],o=r.planes[n.planeIndex],s=Fa(o,e)>=0?0:1,a=n.children[s];if(Ta(a))return za(a);t=a}return-1}function zl(r,e){let t=r.leafs[e],n=[];for(let o=0;o<t.numLeafFaces;o+=1)n.push(r.leafLists.leafFaces[e][o]);return n}function Hi(r,e,t,n,o,i,s){if(Ta(e)){let m=za(e),p=r.leafs[m];if(!El(r.visibility,o,p.cluster)||!Tl(p,n))return;let h={x:(p.mins[0]+p.maxs[0])*.5,y:(p.mins[1]+p.maxs[1])*.5,z:(p.mins[2]+p.maxs[2])*.5},y=h.x-t.x,g=h.y-t.y,b=h.z-t.z,L=-(y*y+g*g+b*b);for(let C of zl(r,m))s.has(C)||(s.add(C),i.push({faceIndex:C,leafIndex:m,sortKey:L}));return}let a=r.nodes[e],c=r.planes[a.planeIndex],l=Fa(c,t),u=l>=0?a.children[0]:a.children[1],d=l>=0?a.children[1]:a.children[0];Ln({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(Hi(r,u,t,n,o,i,s),Hi(r,d,t,n,o,i,s))}function Pa(r,e,t){let n=Oi(r,e),o=n>=0?r.leafs[n].cluster:-1,i=[];return Hi(r,0,e,t,o,i,new Set),i}var Bi=`#version 300 es
|
|
141
|
+
ïBçϧmÙIólÜoëVb¦¯éWÇû3`});var ac={a:Lt};this.setModule=z=>{t.setModule(ot,z)},this.getModule=()=>t.getModule(ot),this.instantiate=()=>(this.getModule().then(z=>WebAssembly.instantiate(z,ac)).then(z=>{let we=z.exports;In(we),h=we.l,y(),sc(we),r()}),this.ready=new Promise(z=>{r=z}).then(()=>{this.HEAP=h.buffer,this.malloc=ls,this.free=ps,this.create_decoder=wr,this.send_setup=ds,this.init_dsp=us,this.decode_packets=ms,this.destroy_decoder=fs}),this)}function Gt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let d=new Float32Array(s);s&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(d)}e.push(a),r+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let d=this._common.codeToString(this._errors.buf[l]),u=this._common.codeToString(this._errors.buf[l+1]);n.push({message:d+" vorbis_synthesis"+u,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=Gt.isWebWorker,this._WASMAudioDecoderCommon=Gt.WASMAudioDecoderCommon||j,this._EmscriptenWASM=Gt.EmscriptenWASM||ot,this._module=Gt.module,this._inputSize=128*1024,this._ready=this._init(),this}var Co=Symbol(),it=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new j,this._init(),this._ready=this[Co](Gt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new ga("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Co](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[zo][0]===1&&this._decoder.sendSetupHeader(s[zo]),s[Lo].length)){let a=s[Lo][0][ba];this._decoder.sendSetupHeader(a[Sa]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[Lo].map(a=>a[zo]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[va]){let i=this._totalSamplesDecoded-o[Ma];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var ki=class extends tr{constructor(e){super(e,"ogg-vorbis-decoder",Gt,ot)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},wn=class extends it{constructor(){super(),this._ready=super[Co](ki)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};Jn(it,"OggVorbisDecoder");Jn(wn,"OggVorbisDecoderWebWorker");var Di=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Eo(t,e=new it){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Di(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Ln=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},gr=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ct(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Qn(r),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Eo(r);throw new Ln(`Unsupported audio format: ${e}`)}};var _l="quake2ts-pak-indexes",wl="pak-indexes";function Aa(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function zn(t,e){let r=Aa();return r?new Promise((n,o)=>{let i=r.open(t,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Cn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Hi(t,e){return`${te(t)}:${e.toString(16)}`}function Ll(t){return t.map(e=>({...e}))}var To=class{constructor(e=_l,r=wl){this.dbName=e;this.storeName=r}get isSupported(){return!!Aa()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Hi(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Ll(r.entries)},o=await zn(this.dbName,this.storeName);return await Cn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await zn(this.dbName,this.storeName),o=r!==void 0?Hi(e,r):void 0,i=await Cn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=te(e),a=i.filter(c=>te(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await zn(this.dbName,this.storeName),o=r!==void 0?Hi(e,r):void 0,i=await Cn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${te(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await zn(this.dbName,this.storeName);await Cn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await zn(this.dbName,this.storeName),r=await Cn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Wt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},En=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new Wt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},Po=class{constructor(e,r={}){this.vfs=e;this.textures=new er({capacity:r.textureCacheCapacity??128}),this.audio=new gr(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new En,this.md2=new Jt(e),this.md3=new Zt(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Wt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Wt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${te(r)}`}};var Oi=32,Fo=(u=>(u[u.Auto=0]="Auto",u[u.Weapon=1]="Weapon",u[u.Voice=2]="Voice",u[u.Item=3]="Item",u[u.Body=4]="Body",u[u.Aux=5]="Aux",u[u.Footstep=6]="Footstep",u[u.Aux3=7]="Aux3",u[u.NoPhsAdd=8]="NoPhsAdd",u[u.Reliable=16]="Reliable",u[u.ForcePos=32]="ForcePos",u))(Fo||{}),_a=-1,Io=0,wa=1,La=2,za=3,br=80,Ca=.003;function Xt(t){return t===3?t*.001:t*5e-4}function Ro(t){let e=Xt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var ko=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function Do(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var Ho=class{constructor(e=new $t){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Oo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,d=await this.decodeAudio(o,l);this.registry.register(i,d),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let r=te(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:te(`${this.soundRoot}${r}`)}};var zl=7,Tn=t=>t&zl;function No(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Bo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Tn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Tn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(i===-1||d<s)&&(s=d,i=a)}return i===-1?void 0:i}function Vo(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=bs(t,e.origin),s=ni(i),a=ke(i),c=s-80;c<0&&(c=0),c*=Xt(n);let l=ri(e.right,a),d=e.mono??!1,u=d||n===0?1:.5*(1+l),m=d||n===0?1:.5*(1-l),f=Math.max(0,Math.floor(r*(1-c)*u));return{left:Math.max(0,Math.floor(r*(1-c)*m)),right:f,distanceComponent:c}}var Uo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=No(e.playerEntity),this.listener=e.listener??{origin:gs,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Do(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Bo(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=r,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),u=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=Ea(u?.gainScale??1),f=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let h=e.entity===this.playerEntity,y=Vo(c,this.listener,e.volume,e.attenuation,h),x=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=x*m;let M=n.currentTime+(e.timeOffsetMs??0)/1e3,b=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+M*1e3;a.connect(d),f?(d.connect(f),f.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(M),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let S={channelIndex:i,entnum:e.entity,entchannel:Tn(e.channel),endTimeMs:b,source:a,panner:d,gain:l,baseGain:x,origin:c,attenuation:e.attenuation,occlusion:f?{scale:m,lowpassHz:u?.lowpassHz,filter:f}:u?{scale:m,lowpassHz:u.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Tn(e.channel),endTimeMs:b,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,S),S}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=Xt(r);return e.refDistance=80,e.maxDistance=Ro(r),e.rolloffFactor=n,e.distanceModel=r===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Ni(r,10,2e4),n}applyOcclusion(e,r){let n=Ea(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Ni(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Ni=(t,e,r)=>Math.min(r,Math.max(e,t)),Ea=t=>Ni(t,0,1);var Go=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=r,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var Wo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function Cl(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function El(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function Ta(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");Cl(i);let s=new Map;El(i,n,o,s);let a=!1,c=new Set,l=new Set,d=m=>{a=!0,m.preventDefault();for(let f of c)f()},u=()=>{a=!1;for(let m of l)m()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",u),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",u),c.clear(),l.clear(),s.clear()}}}function Pa(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Tl(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var pe=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=Pa(e,e.VERTEX_SHADER,r.vertex),i=Pa(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Tl(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Fa(t,e,r){return pe.create(t,e,r)}var he=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},Re=class extends he{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},be=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},vr=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},Sr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Xo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var Vi=4,Bi=7*Vi,Ui=[{index:0,size:3,type:5126,stride:Bi,offset:0},{index:1,size:2,type:5126,stride:Bi,offset:3*Vi},{index:2,size:2,type:5126,stride:Bi,offset:5*Vi}];function Pl(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Fl(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function Il(t,e,r){let n=Fl(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let d=0;d<r.width;d++){let u=l+d*4;t.data[u]=r.samples[a],t.data[u+1]=r.samples[a+1],t.data[u+2]=r.samples[a+2],t.data[u+3]=n===4?r.samples[a+3]:255,a+=n}}}function Rl(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=Pl(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function qo(t){return t instanceof Float32Array?t:new Float32Array(t)}function kl(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function Dl(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function Hl(t,e){let r=qo(t.vertices),n=qo(t.textureCoords),o=e?Dl(qo(t.lightmapCoords??t.textureCoords),e):qo(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,d=a*7;s[d]=r[c],s[d+1]=r[c+1],s[d+2]=r[c+2],s[d+3]=n[l],s[d+4]=n[l+1],s[d+5]=o[l],s[d+6]=o[l+1]}return s}function Ia(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:d,atlas:u}=Rl(o,c.lightmap,n);Il(u,d,c.lightmap),i.set(l,{atlasIndex:d.atlasIndex,offset:[(d.x+n.lightmapPadding)/n.atlasSize,(d.y+n.lightmapPadding)/n.atlasSize],scale:[d.width/n.atlasSize,d.height/n.atlasSize]})});let s=o.map(c=>{let l=new vr(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let d=i.get(l),u=Hl(c,d),m=kl(c.indices,u.length/7),f=new he(t,t.STATIC_DRAW,t.ARRAY_BUFFER);f.upload(u);let h=new Re(t,t.STATIC_DRAW);h.upload(m);let y=new be(t);return y.configureAttributes(Ui,f),{vao:y,vertexBuffer:f,indexBuffer:h,indexCount:m.length,texture:c.texture,surfaceFlags:c.surfaceFlags??Cr,lightmap:d,vertexData:u,indexData:m}}),lightmaps:s}}function Mr(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function Ra(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],d=t[6],u=t[10],m=t[14],f=t[3],h=t[7],y=t[11],p=t[15];return[Mr({normal:{x:f+e,y:h+r,z:y+n},distance:p+o}),Mr({normal:{x:f-e,y:h-r,z:y-n},distance:p-o}),Mr({normal:{x:f+i,y:h+s,z:y+a},distance:p+c}),Mr({normal:{x:f-i,y:h-s,z:y-a},distance:p-c}),Mr({normal:{x:f+l,y:h+d,z:y+u},distance:p+m}),Mr({normal:{x:f-l,y:h-d,z:y-u},distance:p-m})]}function Ol(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function Pn(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(Ol(n,{x:o,y:i,z:s})<0)return!1}return!0}function ka(t){return t<0}function Da(t){return-t-1}function Ha(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function Nl(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function Bl(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return Pn(r,n,e)}function Wi(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=Ha(o,e)>=0?0:1,a=n.children[s];if(ka(a))return Da(a);r=a}return-1}function Vl(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function Gi(t,e,r,n,o,i,s){if(ka(e)){let m=Da(e),f=t.leafs[m];if(!Nl(t.visibility,o,f.cluster)||!Bl(f,n))return;let h={x:(f.mins[0]+f.maxs[0])*.5,y:(f.mins[1]+f.maxs[1])*.5,z:(f.mins[2]+f.maxs[2])*.5},y=h.x-r.x,p=h.y-r.y,x=h.z-r.z,M=-(y*y+p*p+x*x);for(let b of Vl(t,m))s.has(b)||(s.add(b),i.push({faceIndex:b,leafIndex:m,sortKey:M}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=Ha(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];Pn({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(Gi(t,d,r,n,o,i,s),Gi(t,u,r,n,o,i,s))}function Oa(t,e,r){let n=Wi(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return Gi(t,0,e,r,o,i,new Set),i}var Xi=`#version 300 es
|
|
142
142
|
precision highp float;
|
|
143
143
|
|
|
144
144
|
layout(location = 0) in vec3 a_position;
|
|
@@ -160,7 +160,7 @@ void main() {
|
|
|
160
160
|
v_texCoord = applyScroll(a_texCoord, u_texScroll);
|
|
161
161
|
v_lightmapCoord = applyScroll(a_lightmapCoord, u_lightmapScroll);
|
|
162
162
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
163
|
-
}`,
|
|
163
|
+
}`,qi=`#version 300 es
|
|
164
164
|
precision highp float;
|
|
165
165
|
|
|
166
166
|
in vec2 v_texCoord;
|
|
@@ -197,7 +197,7 @@ void main() {
|
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
o_color = vec4(base.rgb, base.a * u_alpha);
|
|
200
|
-
}`,
|
|
200
|
+
}`,Na=[0,255,255,255];function Yi(t=Na,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function Ul(t){return[-(t*.25%1),0]}function Ki(t=Cr,e=0){let r=(t&zs)!==0,n=(t&_s)!==0,o=(t&As)!==0,i=(t&ws)!==0,s=(t&Ls)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,d=r?Ul(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:o}}var Yo=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:Xi,fragment:qi},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:r,styleIndices:n=Na,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s=1,surfaceFlags:a=Cr,timeSeconds:c=0}=e,l=Ki(a,c),d=Yi(n,o);return this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,d),this.gl.uniform1f(this.uniformAlpha,l.alpha),this.gl.uniform1i(this.uniformApplyLightmap,l.sky?0:1),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s),l}dispose(){this.program.dispose()}};function Ba(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Va=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]),ji=`#version 300 es
|
|
201
201
|
precision highp float;
|
|
202
202
|
|
|
203
203
|
layout(location = 0) in vec3 a_position;
|
|
@@ -212,7 +212,7 @@ void main() {
|
|
|
212
212
|
dir.xy += u_scroll;
|
|
213
213
|
v_direction = dir;
|
|
214
214
|
gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
|
|
215
|
-
}
|
|
215
|
+
}`,$i=`#version 300 es
|
|
216
216
|
precision highp float;
|
|
217
217
|
|
|
218
218
|
in vec3 v_direction;
|
|
@@ -222,7 +222,7 @@ out vec4 o_color;
|
|
|
222
222
|
|
|
223
223
|
void main() {
|
|
224
224
|
o_color = texture(u_skybox, v_direction);
|
|
225
|
-
}`,
|
|
225
|
+
}`,Ko=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:ji,fragment:$i},{a_position:0}),this.vao=new be(e),this.vbo=new he(e,e.STATIC_DRAW),this.vbo.upload(Va,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new Sr(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Va.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Ua(t){let e=t.slice();return e[12]=0,e[13]=0,e[14]=0,e}function Ga(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var Ji=`#version 300 es
|
|
226
226
|
precision highp float;
|
|
227
227
|
|
|
228
228
|
layout(location = 0) in vec3 a_position;
|
|
@@ -240,7 +240,7 @@ void main() {
|
|
|
240
240
|
v_light = max(dot(normal, normalize(u_lightDir)), 0.0);
|
|
241
241
|
v_texCoord = a_texCoord;
|
|
242
242
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
243
|
-
}`,
|
|
243
|
+
}`,Zi=`#version 300 es
|
|
244
244
|
precision highp float;
|
|
245
245
|
|
|
246
246
|
in vec2 v_texCoord;
|
|
@@ -254,7 +254,7 @@ out vec4 o_color;
|
|
|
254
254
|
void main() {
|
|
255
255
|
vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
|
|
256
256
|
o_color = vec4(albedo.rgb * v_light, albedo.a);
|
|
257
|
-
}`;function Pl(r){let e=r.x*r.x+r.y*r.y+r.z*r.z;if(e<=0)return{x:0,y:0,z:1};let t=1/Math.sqrt(e);return{x:r.x*t,y:r.y*t,z:r.z*t}}function Xi(r,e,t){return r+(e-r)*t}function Oa(r,e,t){return{x:Xi(r.x,e.x,t),y:Xi(r.y,e.y,t),z:Xi(r.z,e.z,t)}}function Il(r,e,t){return[r/t.skinWidth,1-e/t.skinHeight]}function Yi(r){if(r.glCommands.length===0){let n=[],o=[];return r.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],u=r.texCoords[l];n.push({vertexIndex:c,texCoord:Il(u.s,u.t,r.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],t=[];for(let n of r.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;t.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)t.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(t)}}function ji(r,e,t){let{currentFrame:n,nextFrame:o,lerp:i}=t,s=r.frames[n],a=r.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,u)=>{let d=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!d||!m)throw new Error("MD2 vertex index out of range for frame");let p=Oa(d.position,m.position,i),h=Pl(Oa(d.normal,m.normal,i)),y=u*8;c[y]=p.x,c[y+1]=p.y,c[y+2]=p.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Go=class{constructor(e,t,n){this.gl=e,this.geometry=Yi(t),this.vertexBuffer=new se(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(t,n)}update(e,t){let n=ji(e,this.geometry,t);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Wo=class{constructor(e){this.gl=e,this.program=ie.create(e,{vertex:qi,fragment:Ki},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:t,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,t),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Rl=[.2,.2,.2],kl={x:0,y:0,z:1},Dl=[.8,.8,.8];function $i(r,e,t){return r+(e-r)*t}function br(r,e,t){return{x:$i(r.x,e.x,t),y:$i(r.y,e.y,t),z:$i(r.z,e.z,t)}}function xr(r){return r<0?0:r>1?1:r}function Ji(r){let e=[],t=[];for(let n of r.triangles){let o=e.length,[i,s,a]=n.indices,c=r.texCoords[i],l=r.texCoords[s],u=r.texCoords[a];if(!c||!l||!u)throw new Error(`Missing texCoord for triangle in surface ${r.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[u.s,1-u.t]}),t.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(t)}}function Hl(r,e,t){let n=t?.ambient??Rl,o=t?.directional??{direction:kl,color:Dl},i=Ee(r),s=Ee(o.direction),a=xr(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,u=n[2]+o.color[2]*a;if(t?.dynamicLights){let d=t.modelMatrix?ps(t.modelMatrix,e):e;for(let m of t.dynamicLights){let p=d.x-m.origin.x,h=d.y-m.origin.y,y=d.z-m.origin.z,g=p*p+h*h+y*y,b=m.radius*m.radius;if(g<b&&b>0){let L=1-Math.sqrt(g)/m.radius,C=Math.sqrt(g),W=C>0?xr(-(p*i.x+h*i.y+y*i.z)/C):0,H=xr(L*W);c+=m.color[0]*H,l+=m.color[1]*H,u+=m.color[2]*H}}}return[xr(c),xr(l),xr(u)]}function Qi(r,e,t,n){let o=r.vertices[t.currentFrame],i=r.vertices[t.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],u=i[a.vertexIndex];if(!l||!u)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let d=br(l.position,u.position,t.lerp),m=Ee(br(l.normal,u.normal,t.lerp)),p=Hl(m,d,n),h=c*12;s[h]=d.x,s[h+1]=d.y,s[h+2]=d.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=p[0],s[h+9]=p[1],s[h+10]=p[2],s[h+11]=1}),s}function Ba(r,e,t){let n=r.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===t);if(o===-1)return null;let i=r.tags[e.currentFrame]?.[o],s=r.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${t} is missing for one of the interpolated frames`);let a=br(i.origin,s.origin,e.lerp),c=Ee(br(i.axis[0],s.axis[0],e.lerp)),l=Ee(br(i.axis[1],s.axis[1],e.lerp)),u=Ee(br(i.axis[2],s.axis[2],e.lerp)),d=c,m=Ee({x:l.x-d.x*(d.x*l.x+d.y*l.y+d.z*l.z),y:l.y-d.y*(d.x*l.x+d.y*l.y+d.z*l.z),z:l.z-d.z*(d.x*l.x+d.y*l.y+d.z*l.z)}),p=Ee({x:d.y*m.z-d.z*m.y,y:d.z*m.x-d.x*m.z,z:d.x*m.y-d.y*m.x}),h=[d,m,p];return{origin:a,axis:h,matrix:hs(a,h)}}var Zi=`#version 300 es
|
|
257
|
+
}`;function Gl(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function Qi(t,e,r){return t+(e-t)*r}function Wa(t,e,r){return{x:Qi(t.x,e.x,r),y:Qi(t.y,e.y,r),z:Qi(t.z,e.z,r)}}function Wl(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function es(t){if(t.glCommands.length===0){let n=[],o=[];return t.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:Wl(d.s,d.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function ts(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let u=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!u||!m)throw new Error("MD2 vertex index out of range for frame");let f=Wa(u.position,m.position,i),h=Gl(Wa(u.normal,m.normal,i)),y=d*8;c[y]=f.x,c[y+1]=f.y,c[y+2]=f.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var jo=class{constructor(e,r,n){this.gl=e,this.geometry=es(r),this.vertexBuffer=new he(e,e.STATIC_DRAW),this.indexBuffer=new Re(e,e.STATIC_DRAW),this.vertexArray=new be(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=ts(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},$o=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:Ji,fragment:Zi},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:r,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var ee=1e-6,qt=typeof Float32Array<"u"?Float32Array:Array;var Ip=Math.PI/180,Rp=180/Math.PI;var Yt={};ys(Yt,{add:()=>Td,adjoint:()=>Zl,clone:()=>Yl,copy:()=>Kl,create:()=>ql,decompose:()=>yd,determinant:()=>ed,equals:()=>Rd,exactEquals:()=>Id,frob:()=>Ed,fromQuat:()=>bd,fromQuat2:()=>fd,fromRotation:()=>ld,fromRotationTranslation:()=>Ya,fromRotationTranslationScale:()=>xd,fromRotationTranslationScaleOrigin:()=>gd,fromScaling:()=>cd,fromTranslation:()=>ad,fromValues:()=>jl,fromXRotation:()=>dd,fromYRotation:()=>ud,fromZRotation:()=>md,frustum:()=>vd,getRotation:()=>hd,getScaling:()=>Ka,getTranslation:()=>pd,identity:()=>Xa,invert:()=>Jl,lookAt:()=>Ld,mul:()=>kd,multiply:()=>qa,multiplyScalar:()=>Pd,multiplyScalarAndAdd:()=>Fd,ortho:()=>_d,orthoNO:()=>$a,orthoZO:()=>wd,perspective:()=>Sd,perspectiveFromFieldOfView:()=>Ad,perspectiveNO:()=>ja,perspectiveZO:()=>Md,rotate:()=>nd,rotateX:()=>od,rotateY:()=>id,rotateZ:()=>sd,scale:()=>rd,set:()=>$l,str:()=>Cd,sub:()=>Dd,subtract:()=>Qa,targetTo:()=>zd,translate:()=>td,transpose:()=>Ql});function ql(){var t=new qt(16);return qt!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function Yl(t){var e=new qt(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Kl(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function jl(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y){var p=new qt(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=o,p[5]=i,p[6]=s,p[7]=a,p[8]=c,p[9]=l,p[10]=d,p[11]=u,p[12]=m,p[13]=f,p[14]=h,p[15]=y,p}function $l(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=o,t[4]=i,t[5]=s,t[6]=a,t[7]=c,t[8]=l,t[9]=d,t[10]=u,t[11]=m,t[12]=f,t[13]=h,t[14]=y,t[15]=p,t}function Xa(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Ql(t,e){if(t===e){var r=e[1],n=e[2],o=e[3],i=e[6],s=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=o,t[13]=s,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function Jl(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,b=r*c-o*s,S=r*l-i*s,v=n*c-o*a,A=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,_=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p,F=M*V-b*U+S*N+v*_-A*P+w*L;return F?(F=1/F,t[0]=(a*V-c*U+l*N)*F,t[1]=(o*U-n*V-i*N)*F,t[2]=(y*w-p*A+x*v)*F,t[3]=(m*A-u*w-f*v)*F,t[4]=(c*_-s*V-l*P)*F,t[5]=(r*V-o*_+i*P)*F,t[6]=(p*S-h*w-x*b)*F,t[7]=(d*w-m*S+f*b)*F,t[8]=(s*U-a*_+l*L)*F,t[9]=(n*_-r*U-i*L)*F,t[10]=(h*A-y*S+x*M)*F,t[11]=(u*S-d*A-f*M)*F,t[12]=(a*P-s*N-c*L)*F,t[13]=(r*N-n*P+o*L)*F,t[14]=(y*b-h*v-p*M)*F,t[15]=(d*v-u*b+m*M)*F,t):null}function Zl(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,b=r*c-o*s,S=r*l-i*s,v=n*c-o*a,A=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,_=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p;return t[0]=a*V-c*U+l*N,t[1]=o*U-n*V-i*N,t[2]=y*w-p*A+x*v,t[3]=m*A-u*w-f*v,t[4]=c*_-s*V-l*P,t[5]=r*V-o*_+i*P,t[6]=p*S-h*w-x*b,t[7]=d*w-m*S+f*b,t[8]=s*U-a*_+l*L,t[9]=n*_-r*U-i*L,t[10]=h*A-y*S+x*M,t[11]=u*S-d*A-f*M,t[12]=a*P-s*N-c*L,t[13]=r*N-n*P+o*L,t[14]=y*b-h*v-p*M,t[15]=d*v-u*b+m*M,t}function ed(t){var e=t[0],r=t[1],n=t[2],o=t[3],i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],m=t[11],f=t[12],h=t[13],y=t[14],p=t[15],x=e*s-r*i,M=e*a-n*i,b=r*a-n*s,S=l*h-d*f,v=l*y-u*f,A=d*y-u*h,w=e*A-r*v+n*S,L=i*A-s*v+a*S,P=l*b-d*M+u*x,_=f*b-h*M+y*x;return c*w-o*L+p*P-m*_}function qa(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=e[8],m=e[9],f=e[10],h=e[11],y=e[12],p=e[13],x=e[14],M=e[15],b=r[0],S=r[1],v=r[2],A=r[3];return t[0]=b*n+S*a+v*u+A*y,t[1]=b*o+S*c+v*m+A*p,t[2]=b*i+S*l+v*f+A*x,t[3]=b*s+S*d+v*h+A*M,b=r[4],S=r[5],v=r[6],A=r[7],t[4]=b*n+S*a+v*u+A*y,t[5]=b*o+S*c+v*m+A*p,t[6]=b*i+S*l+v*f+A*x,t[7]=b*s+S*d+v*h+A*M,b=r[8],S=r[9],v=r[10],A=r[11],t[8]=b*n+S*a+v*u+A*y,t[9]=b*o+S*c+v*m+A*p,t[10]=b*i+S*l+v*f+A*x,t[11]=b*s+S*d+v*h+A*M,b=r[12],S=r[13],v=r[14],A=r[15],t[12]=b*n+S*a+v*u+A*y,t[13]=b*o+S*c+v*m+A*p,t[14]=b*i+S*l+v*f+A*x,t[15]=b*s+S*d+v*h+A*M,t}function td(t,e,r){var n=r[0],o=r[1],i=r[2],s,a,c,l,d,u,m,f,h,y,p,x;return e===t?(t[12]=e[0]*n+e[4]*o+e[8]*i+e[12],t[13]=e[1]*n+e[5]*o+e[9]*i+e[13],t[14]=e[2]*n+e[6]*o+e[10]*i+e[14],t[15]=e[3]*n+e[7]*o+e[11]*i+e[15]):(s=e[0],a=e[1],c=e[2],l=e[3],d=e[4],u=e[5],m=e[6],f=e[7],h=e[8],y=e[9],p=e[10],x=e[11],t[0]=s,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=m,t[7]=f,t[8]=h,t[9]=y,t[10]=p,t[11]=x,t[12]=s*n+d*o+h*i+e[12],t[13]=a*n+u*o+y*i+e[13],t[14]=c*n+m*o+p*i+e[14],t[15]=l*n+f*o+x*i+e[15]),t}function rd(t,e,r){var n=r[0],o=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*o,t[5]=e[5]*o,t[6]=e[6]*o,t[7]=e[7]*o,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function nd(t,e,r,n){var o=n[0],i=n[1],s=n[2],a=Math.sqrt(o*o+i*i+s*s),c,l,d,u,m,f,h,y,p,x,M,b,S,v,A,w,L,P,_,N,U,V,F,K;return a<ee?null:(a=1/a,o*=a,i*=a,s*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],m=e[1],f=e[2],h=e[3],y=e[4],p=e[5],x=e[6],M=e[7],b=e[8],S=e[9],v=e[10],A=e[11],w=o*o*d+l,L=i*o*d+s*c,P=s*o*d-i*c,_=o*i*d-s*c,N=i*i*d+l,U=s*i*d+o*c,V=o*s*d+i*c,F=i*s*d-o*c,K=s*s*d+l,t[0]=u*w+y*L+b*P,t[1]=m*w+p*L+S*P,t[2]=f*w+x*L+v*P,t[3]=h*w+M*L+A*P,t[4]=u*_+y*N+b*U,t[5]=m*_+p*N+S*U,t[6]=f*_+x*N+v*U,t[7]=h*_+M*N+A*U,t[8]=u*V+y*F+b*K,t[9]=m*V+p*F+S*K,t[10]=f*V+x*F+v*K,t[11]=h*V+M*F+A*K,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function od(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*o+l*n,t[5]=s*o+d*n,t[6]=a*o+u*n,t[7]=c*o+m*n,t[8]=l*o-i*n,t[9]=d*o-s*n,t[10]=u*o-a*n,t[11]=m*o-c*n,t}function id(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o-l*n,t[1]=s*o-d*n,t[2]=a*o-u*n,t[3]=c*o-m*n,t[8]=i*n+l*o,t[9]=s*n+d*o,t[10]=a*n+u*o,t[11]=c*n+m*o,t}function sd(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[4],d=e[5],u=e[6],m=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o+l*n,t[1]=s*o+d*n,t[2]=a*o+u*n,t[3]=c*o+m*n,t[4]=l*o-i*n,t[5]=d*o-s*n,t[6]=u*o-a*n,t[7]=m*o-c*n,t}function ad(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function cd(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ld(t,e,r){var n=r[0],o=r[1],i=r[2],s=Math.sqrt(n*n+o*o+i*i),a,c,l;return s<ee?null:(s=1/s,n*=s,o*=s,i*=s,a=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=o*n*l+i*a,t[2]=i*n*l-o*a,t[3]=0,t[4]=n*o*l-i*a,t[5]=o*o*l+c,t[6]=i*o*l+n*a,t[7]=0,t[8]=n*i*l+o*a,t[9]=o*i*l-n*a,t[10]=i*i*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function dd(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ud(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function md(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Ya(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=n+n,c=o+o,l=i+i,d=n*a,u=n*c,m=n*l,f=o*c,h=o*l,y=i*l,p=s*a,x=s*c,M=s*l;return t[0]=1-(f+y),t[1]=u+M,t[2]=m-x,t[3]=0,t[4]=u-M,t[5]=1-(d+y),t[6]=h+p,t[7]=0,t[8]=m+x,t[9]=h-p,t[10]=1-(d+f),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function fd(t,e){var r=new qt(3),n=-e[0],o=-e[1],i=-e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=n*n+o*o+i*i+s*s;return u>0?(r[0]=(a*s+d*n+c*i-l*o)*2/u,r[1]=(c*s+d*o+l*n-a*i)*2/u,r[2]=(l*s+d*i+a*o-c*n)*2/u):(r[0]=(a*s+d*n+c*i-l*o)*2,r[1]=(c*s+d*o+l*n-a*i)*2,r[2]=(l*s+d*i+a*o-c*n)*2),Ya(t,e,r),t}function pd(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function Ka(t,e){var r=e[0],n=e[1],o=e[2],i=e[4],s=e[5],a=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+o*o),t[1]=Math.sqrt(i*i+s*s+a*a),t[2]=Math.sqrt(c*c+l*l+d*d),t}function hd(t,e){var r=new qt(3);Ka(r,e);var n=1/r[0],o=1/r[1],i=1/r[2],s=e[0]*n,a=e[1]*o,c=e[2]*i,l=e[4]*n,d=e[5]*o,u=e[6]*i,m=e[8]*n,f=e[9]*o,h=e[10]*i,y=s+d+h,p=0;return y>0?(p=Math.sqrt(y+1)*2,t[3]=.25*p,t[0]=(u-f)/p,t[1]=(m-c)/p,t[2]=(a-l)/p):s>d&&s>h?(p=Math.sqrt(1+s-d-h)*2,t[3]=(u-f)/p,t[0]=.25*p,t[1]=(a+l)/p,t[2]=(m+c)/p):d>h?(p=Math.sqrt(1+d-s-h)*2,t[3]=(m-c)/p,t[0]=(a+l)/p,t[1]=.25*p,t[2]=(u+f)/p):(p=Math.sqrt(1+h-s-d)*2,t[3]=(a-l)/p,t[0]=(m+c)/p,t[1]=(u+f)/p,t[2]=.25*p),t}function yd(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var o=n[0],i=n[1],s=n[2],a=n[4],c=n[5],l=n[6],d=n[8],u=n[9],m=n[10];r[0]=Math.sqrt(o*o+i*i+s*s),r[1]=Math.sqrt(a*a+c*c+l*l),r[2]=Math.sqrt(d*d+u*u+m*m);var f=1/r[0],h=1/r[1],y=1/r[2],p=o*f,x=i*h,M=s*y,b=a*f,S=c*h,v=l*y,A=d*f,w=u*h,L=m*y,P=p+S+L,_=0;return P>0?(_=Math.sqrt(P+1)*2,t[3]=.25*_,t[0]=(v-w)/_,t[1]=(A-M)/_,t[2]=(x-b)/_):p>S&&p>L?(_=Math.sqrt(1+p-S-L)*2,t[3]=(v-w)/_,t[0]=.25*_,t[1]=(x+b)/_,t[2]=(A+M)/_):S>L?(_=Math.sqrt(1+S-p-L)*2,t[3]=(A-M)/_,t[0]=(x+b)/_,t[1]=.25*_,t[2]=(v+w)/_):(_=Math.sqrt(1+L-p-S)*2,t[3]=(x-b)/_,t[0]=(A+M)/_,t[1]=(v+w)/_,t[2]=.25*_),t}function xd(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=e[3],c=o+o,l=i+i,d=s+s,u=o*c,m=o*l,f=o*d,h=i*l,y=i*d,p=s*d,x=a*c,M=a*l,b=a*d,S=n[0],v=n[1],A=n[2];return t[0]=(1-(h+p))*S,t[1]=(m+b)*S,t[2]=(f-M)*S,t[3]=0,t[4]=(m-b)*v,t[5]=(1-(u+p))*v,t[6]=(y+x)*v,t[7]=0,t[8]=(f+M)*A,t[9]=(y-x)*A,t[10]=(1-(u+h))*A,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function gd(t,e,r,n,o){var i=e[0],s=e[1],a=e[2],c=e[3],l=i+i,d=s+s,u=a+a,m=i*l,f=i*d,h=i*u,y=s*d,p=s*u,x=a*u,M=c*l,b=c*d,S=c*u,v=n[0],A=n[1],w=n[2],L=o[0],P=o[1],_=o[2],N=(1-(y+x))*v,U=(f+S)*v,V=(h-b)*v,F=(f-S)*A,K=(1-(m+x))*A,ye=(p+M)*A,Lt=(h+b)*w,In=(p-M)*w,wr=(1-(m+y))*w;return t[0]=N,t[1]=U,t[2]=V,t[3]=0,t[4]=F,t[5]=K,t[6]=ye,t[7]=0,t[8]=Lt,t[9]=In,t[10]=wr,t[11]=0,t[12]=r[0]+L-(N*L+F*P+Lt*_),t[13]=r[1]+P-(U*L+K*P+In*_),t[14]=r[2]+_-(V*L+ye*P+wr*_),t[15]=1,t}function bd(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=r+r,a=n+n,c=o+o,l=r*s,d=n*s,u=n*a,m=o*s,f=o*a,h=o*c,y=i*s,p=i*a,x=i*c;return t[0]=1-u-h,t[1]=d+x,t[2]=m-p,t[3]=0,t[4]=d-x,t[5]=1-l-h,t[6]=f+y,t[7]=0,t[8]=m+p,t[9]=f-y,t[10]=1-l-u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function vd(t,e,r,n,o,i,s){var a=1/(r-e),c=1/(o-n),l=1/(i-s);return t[0]=i*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(o+n)*c,t[10]=(s+i)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*i*2*l,t[15]=0,t}function ja(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=(o+n)*s,t[14]=2*o*n*s}else t[10]=-1,t[14]=-2*n;return t}var Sd=ja;function Md(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=o*s,t[14]=o*n*s}else t[10]=-1,t[14]=-n;return t}function Ad(t,e,r,n){var o=Math.tan(e.upDegrees*Math.PI/180),i=Math.tan(e.downDegrees*Math.PI/180),s=Math.tan(e.leftDegrees*Math.PI/180),a=Math.tan(e.rightDegrees*Math.PI/180),c=2/(s+a),l=2/(o+i);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((s-a)*c*.5),t[9]=(o-i)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function $a(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=(s+i)*l,t[15]=1,t}var _d=$a;function wd(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=i*l,t[15]=1,t}function Ld(t,e,r,n){var o,i,s,a,c,l,d,u,m,f,h=e[0],y=e[1],p=e[2],x=n[0],M=n[1],b=n[2],S=r[0],v=r[1],A=r[2];return Math.abs(h-S)<ee&&Math.abs(y-v)<ee&&Math.abs(p-A)<ee?Xa(t):(d=h-S,u=y-v,m=p-A,f=1/Math.sqrt(d*d+u*u+m*m),d*=f,u*=f,m*=f,o=M*m-b*u,i=b*d-x*m,s=x*u-M*d,f=Math.sqrt(o*o+i*i+s*s),f?(f=1/f,o*=f,i*=f,s*=f):(o=0,i=0,s=0),a=u*s-m*i,c=m*o-d*s,l=d*i-u*o,f=Math.sqrt(a*a+c*c+l*l),f?(f=1/f,a*=f,c*=f,l*=f):(a=0,c=0,l=0),t[0]=o,t[1]=a,t[2]=d,t[3]=0,t[4]=i,t[5]=c,t[6]=u,t[7]=0,t[8]=s,t[9]=l,t[10]=m,t[11]=0,t[12]=-(o*h+i*y+s*p),t[13]=-(a*h+c*y+l*p),t[14]=-(d*h+u*y+m*p),t[15]=1,t)}function zd(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=n[0],c=n[1],l=n[2],d=o-r[0],u=i-r[1],m=s-r[2],f=d*d+u*u+m*m;f>0&&(f=1/Math.sqrt(f),d*=f,u*=f,m*=f);var h=c*m-l*u,y=l*d-a*m,p=a*u-c*d;return f=h*h+y*y+p*p,f>0&&(f=1/Math.sqrt(f),h*=f,y*=f,p*=f),t[0]=h,t[1]=y,t[2]=p,t[3]=0,t[4]=u*p-m*y,t[5]=m*h-d*p,t[6]=d*y-u*h,t[7]=0,t[8]=d,t[9]=u,t[10]=m,t[11]=0,t[12]=o,t[13]=i,t[14]=s,t[15]=1,t}function Cd(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function Ed(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function Td(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function Qa(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function Pd(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function Fd(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function Id(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function Rd(t,e){var r=t[0],n=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],m=t[10],f=t[11],h=t[12],y=t[13],p=t[14],x=t[15],M=e[0],b=e[1],S=e[2],v=e[3],A=e[4],w=e[5],L=e[6],P=e[7],_=e[8],N=e[9],U=e[10],V=e[11],F=e[12],K=e[13],ye=e[14],Lt=e[15];return Math.abs(r-M)<=ee*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(n-b)<=ee*Math.max(1,Math.abs(n),Math.abs(b))&&Math.abs(o-S)<=ee*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(i-v)<=ee*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(s-A)<=ee*Math.max(1,Math.abs(s),Math.abs(A))&&Math.abs(a-w)<=ee*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(c-L)<=ee*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-P)<=ee*Math.max(1,Math.abs(l),Math.abs(P))&&Math.abs(d-_)<=ee*Math.max(1,Math.abs(d),Math.abs(_))&&Math.abs(u-N)<=ee*Math.max(1,Math.abs(u),Math.abs(N))&&Math.abs(m-U)<=ee*Math.max(1,Math.abs(m),Math.abs(U))&&Math.abs(f-V)<=ee*Math.max(1,Math.abs(f),Math.abs(V))&&Math.abs(h-F)<=ee*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(y-K)<=ee*Math.max(1,Math.abs(y),Math.abs(K))&&Math.abs(p-ye)<=ee*Math.max(1,Math.abs(p),Math.abs(ye))&&Math.abs(x-Lt)<=ee*Math.max(1,Math.abs(x),Math.abs(Lt))}var kd=qa,Dd=Qa;var Ja=(t,e,r,n,o,i,s)=>{let a=Yt.create();Yt.lookAt(a,t,e,r);let c=Yt.create();return Yt.perspective(c,n,o,i,s),{position:t,viewMatrix:a,projectionMatrix:c}};var Hd=[.2,.2,.2],Od={x:0,y:0,z:1},Nd=[.8,.8,.8];function rs(t,e,r){return t+(e-t)*r}function _r(t,e,r){return{x:rs(t.x,e.x,r),y:rs(t.y,e.y,r),z:rs(t.z,e.z,r)}}function Ar(t){return t<0?0:t>1?1:t}function ns(t){let e=[],r=[];for(let n of t.triangles){let o=e.length,[i,s,a]=n.indices,c=t.texCoords[i],l=t.texCoords[s],d=t.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(r)}}function Bd(t,e,r){let n=r?.ambient??Hd,o=r?.directional??{direction:Od,color:Nd},i=ke(t),s=ke(o.direction),a=Ar(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,d=n[2]+o.color[2]*a;if(r?.dynamicLights){let u=r.modelMatrix?vs(r.modelMatrix,e):e;for(let m of r.dynamicLights){let f=u.x-m.origin.x,h=u.y-m.origin.y,y=u.z-m.origin.z,p=f*f+h*h+y*y,x=m.radius*m.radius;if(p<x&&x>0){let M=1-Math.sqrt(p)/m.radius,b=Math.sqrt(p),S=b>0?Ar(-(f*i.x+h*i.y+y*i.z)/b):0,v=Ar(M*S);c+=m.color[0]*v,l+=m.color[1]*v,d+=m.color[2]*v}}}return[Ar(c),Ar(l),Ar(d)]}function os(t,e,r,n){let o=t.vertices[r.currentFrame],i=t.vertices[r.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],d=i[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let u=_r(l.position,d.position,r.lerp),m=ke(_r(l.normal,d.normal,r.lerp)),f=Bd(m,u,n),h=c*12;s[h]=u.x,s[h+1]=u.y,s[h+2]=u.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=f[0],s[h+9]=f[1],s[h+10]=f[2],s[h+11]=1}),s}function Za(t,e,r){let n=t.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===r);if(o===-1)return null;let i=t.tags[e.currentFrame]?.[o],s=t.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=_r(i.origin,s.origin,e.lerp),c=ke(_r(i.axis[0],s.axis[0],e.lerp)),l=ke(_r(i.axis[1],s.axis[1],e.lerp)),d=ke(_r(i.axis[2],s.axis[2],e.lerp)),u=c,m=ke({x:l.x-u.x*(u.x*l.x+u.y*l.y+u.z*l.z),y:l.y-u.y*(u.x*l.x+u.y*l.y+u.z*l.z),z:l.z-u.z*(u.x*l.x+u.y*l.y+u.z*l.z)}),f=ke({x:u.y*m.z-u.z*m.y,y:u.z*m.x-u.x*m.z,z:u.x*m.y-u.y*m.x}),h=[u,m,f];return{origin:a,axis:h,matrix:Ss(a,h)}}var is=`#version 300 es
|
|
258
258
|
precision highp float;
|
|
259
259
|
|
|
260
260
|
layout(location = 0) in vec3 a_position;
|
|
@@ -271,7 +271,7 @@ void main() {
|
|
|
271
271
|
v_texCoord = a_texCoord;
|
|
272
272
|
v_color = a_color;
|
|
273
273
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
274
|
-
}`,
|
|
274
|
+
}`,ss=`#version 300 es
|
|
275
275
|
precision highp float;
|
|
276
276
|
|
|
277
277
|
in vec2 v_texCoord;
|
|
@@ -285,7 +285,7 @@ out vec4 o_color;
|
|
|
285
285
|
void main() {
|
|
286
286
|
vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
|
|
287
287
|
o_color = vec4(albedo.rgb * v_color.rgb, albedo.a * v_color.a);
|
|
288
|
-
}`,
|
|
288
|
+
}`,Fn=class{constructor(e,r,n,o){this.gl=e,this.geometry=ns(r),this.vertexBuffer=new he(e,e.STATIC_DRAW),this.indexBuffer=new Re(e,e.STATIC_DRAW),this.vertexArray=new be(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,o)}update(e,r,n){let o=os(e,this.geometry,r,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Qo=class{constructor(e,r,n,o){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=o,r.surfaces.forEach(i=>{this.surfaces.set(i.name,new Fn(e,i,n,o))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},Jo=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:is,fragment:ss},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,r){let n=r?.diffuseSampler??0,o=r?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Vd=[1,1,1,1],Zo=class{constructor(e,r=Math.random){this.maxParticles=e,this.random=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??Vd,o=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=o.x,this.velocityY[r]=o.y,this.velocityZ[r]=o.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,r}update(e,r={}){let n=r.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,r){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(a==="additive"?1:0)!==this.blendMode[d])continue;l+=1;let u=n.length/9,m=this.size[d]*.5,f=this.fade[d]?Math.max(this.remaining[d]/this.lifetime[d],0):1,h=this.blendMode[d]===1?1.2:1,y=this.colorR[d]*h,p=this.colorG[d]*h,x=this.colorB[d]*h,M=this.colorA[d]*f,b=this.positionX[d],S=this.positionY[d],v=this.positionZ[d],A=e.x*m,w=e.y*m,L=e.z*m,P=r.x*m,_=r.y*m,N=r.z*m,U=[{x:b-A-P,y:S-w-_,z:v-L-N},{x:b+A-P,y:S+w-_,z:v+L-N},{x:b-A+P,y:S-w+_,z:v-L+N},{x:b+A+P,y:S+w+_,z:v+L+N}],V=[[0,1],[1,1],[0,0],[1,0]];U.forEach((F,K)=>{n.push(F.x,F.y,F.z,V[K]?.[0]??0,V[K]?.[1]??0,y,p,x,M)}),o.push(u,u+1,u+2,u+2,u+1,u+3)}l>0&&i.push({blendMode:a,start:c,count:o.length-c})};return s("alpha"),s("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(o),batches:i}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},as=`#version 300 es
|
|
289
289
|
precision highp float;
|
|
290
290
|
|
|
291
291
|
layout(location = 0) in vec3 a_position;
|
|
@@ -301,7 +301,7 @@ void main() {
|
|
|
301
301
|
v_uv = a_uv;
|
|
302
302
|
v_color = a_color;
|
|
303
303
|
gl_Position = u_viewProjection * vec4(a_position, 1.0);
|
|
304
|
-
}`,
|
|
304
|
+
}`,cs=`#version 300 es
|
|
305
305
|
precision highp float;
|
|
306
306
|
|
|
307
307
|
in vec2 v_uv;
|
|
@@ -313,5 +313,5 @@ void main() {
|
|
|
313
313
|
float dist = distance(v_uv, vec2(0.5));
|
|
314
314
|
float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
|
|
315
315
|
o_color = vec4(v_color.rgb, alpha);
|
|
316
|
-
}`,
|
|
316
|
+
}`,ei=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=pe.create(e,{vertex:as,fragment:cs}),this.vertexBuffer=new he(e,e.DYNAMIC_DRAW),this.indexBuffer=new Re(e,e.DYNAMIC_DRAW),this.vertexArray=new be(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let o=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(o,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(o),this.gl.depthMask(!1),this.program.use();let i=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(i,!1,e.viewProjection),this.vertexArray.bind();for(let s of r.batches)s.blendMode==="additive"?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFuncSeparate(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,s.count,this.gl.UNSIGNED_SHORT,s.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function ec(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let o=0;o<12;o+=1){let i=200+e.random()*180,s=e.random()*.35;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*80,y:n.y*i+(e.random()-.5)*80,z:Math.max(n.z*i,120)+s*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.random()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let o=0;o<8;o+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*40,y:(e.random()-.5)*40,z:80+e.random()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function tc(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let o=e.random()*Math.PI*2,i=Math.acos(2*e.random()-1),s=220+e.random()*260,a={x:Math.sin(i)*Math.cos(o),y:Math.sin(i)*Math.sin(o),z:Math.cos(i)};e.spawn({position:r,velocity:{x:a.x*s,y:a.y*s,z:a.z*s},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*30,y:(e.random()-.5)*30,z:120+e.random()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function rc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let o=0;o<24;o+=1){let i=120+e.random()*180;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*70,y:n.y*i+(e.random()-.5)*70,z:n.z*i+e.random()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function nc(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let o=e.random()*Math.PI*2,i=8+e.random()*8;e.spawn({position:r,velocity:{x:Math.cos(o)*i,y:Math.sin(o)*i,z:100+e.random()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function oc(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let o=0;o<10;o+=1){let i=350+e.random()*100;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*30,y:n.y*i+(e.random()-.5)*30,z:n.z*i+(e.random()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function ic(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let o=0;o<6;o+=1)e.spawn({position:{x:r.x+n.x*o*2,y:r.y+n.y*o*2,z:r.z+n.z*o*2},velocity:{x:(e.random()-.5)*15,y:(e.random()-.5)*15,z:20+e.random()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Ud(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new zt(e,r)}}}return hc(Gd);})();
|
|
317
317
|
//# sourceMappingURL=index.global.js.map
|