quake2ts 0.0.78 → 0.0.80

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.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +1 -1
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +856 -1
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +856 -1
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/index.d.ts +2 -1
  10. package/packages/client/dist/types/index.d.ts.map +1 -1
  11. package/packages/engine/dist/browser/index.global.js +14 -14
  12. package/packages/engine/dist/browser/index.global.js.map +1 -1
  13. package/packages/engine/dist/cjs/index.cjs +875 -0
  14. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  15. package/packages/engine/dist/esm/index.js +871 -0
  16. package/packages/engine/dist/esm/index.js.map +1 -1
  17. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  18. package/packages/engine/dist/types/demo/demoReader.d.ts +27 -0
  19. package/packages/engine/dist/types/demo/demoReader.d.ts.map +1 -0
  20. package/packages/engine/dist/types/demo/index.d.ts +4 -0
  21. package/packages/engine/dist/types/demo/index.d.ts.map +1 -0
  22. package/packages/engine/dist/types/demo/playback.d.ts +3 -4
  23. package/packages/engine/dist/types/demo/playback.d.ts.map +1 -1
  24. package/packages/engine/dist/types/index.d.ts +1 -0
  25. package/packages/engine/dist/types/index.d.ts.map +1 -1
  26. package/packages/game/dist/browser/index.global.js +1 -1
  27. package/packages/game/dist/browser/index.global.js.map +1 -1
  28. package/packages/game/dist/cjs/index.cjs +88 -0
  29. package/packages/game/dist/cjs/index.cjs.map +1 -1
  30. package/packages/game/dist/esm/index.js +88 -0
  31. package/packages/game/dist/esm/index.js.map +1 -1
  32. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  33. package/packages/game/dist/types/physics/movement.d.ts.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quake2ts",
3
- "version": "0.0.78",
3
+ "version": "0.0.80",
4
4
  "description": "Quake II re-release port to TypeScript with WebGL renderer - A complete game engine with physics, networking, and BSP rendering",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@8.15.7",
@@ -1,2 +1,2 @@
1
- "use strict";var Quake2Client=(()=>{var De=Object.defineProperty;var zn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var Mn=Object.prototype.hasOwnProperty;var Ue=(e,t)=>{for(var n in t)De(e,n,{get:t[n],enumerable:!0})},Rn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of bn(t))!Mn.call(e,i)&&i!==n&&De(e,i,{get:()=>t[i],enumerable:!(r=zn(t,i))||r.enumerable});return e};var Ln=e=>Rn(De({},"__esModule",{value:!0}),e);var wo={};Ue(wo,{ClientPrediction:()=>ne,InputAction:()=>Ce,InputBindings:()=>J,InputCommandBuffer:()=>Fe,InputController:()=>se,ViewEffects:()=>re,createClient:()=>xo,createDefaultBindings:()=>Tn,defaultPredictionState:()=>Z,interpolatePredictionState:()=>Ee,normalizeCommand:()=>fe,normalizeInputCode:()=>ft});var R=1e-6,I=typeof Float32Array<"u"?Float32Array:Array,Be=Math.random;function pe(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var So=Math.PI/180,Ao=180/Math.PI;var P={};Ue(P,{add:()=>pr,adjoint:()=>Dn,clone:()=>kn,copy:()=>Pn,create:()=>Nn,decompose:()=>tr,determinant:()=>Un,equals:()=>xr,exactEquals:()=>yr,frob:()=>mr,fromQuat:()=>ir,fromQuat2:()=>Jn,fromRotation:()=>$n,fromRotationTranslation:()=>wt,fromRotationTranslationScale:()=>nr,fromRotationTranslationScaleOrigin:()=>rr,fromScaling:()=>Yn,fromTranslation:()=>Xn,fromValues:()=>On,fromXRotation:()=>jn,fromYRotation:()=>qn,fromZRotation:()=>Zn,frustum:()=>sr,getRotation:()=>er,getScaling:()=>_t,getTranslation:()=>Qn,identity:()=>yt,invert:()=>Fn,lookAt:()=>dr,mul:()=>wr,multiply:()=>xt,multiplyScalar:()=>vr,multiplyScalarAndAdd:()=>gr,ortho:()=>lr,orthoNO:()=>At,orthoZO:()=>ur,perspective:()=>or,perspectiveFromFieldOfView:()=>cr,perspectiveNO:()=>St,perspectiveZO:()=>ar,rotate:()=>Vn,rotateX:()=>Wn,rotateY:()=>Hn,rotateZ:()=>Kn,scale:()=>Gn,set:()=>In,str:()=>fr,sub:()=>_r,subtract:()=>Et,targetTo:()=>hr,translate:()=>Bn,transpose:()=>Cn});function Nn(){var e=new I(16);return I!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function kn(e){var t=new I(16);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 Pn(e,t){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 On(e,t,n,r,i,s,o,a,c,u,l,d,h,m,p,v){var f=new I(16);return f[0]=e,f[1]=t,f[2]=n,f[3]=r,f[4]=i,f[5]=s,f[6]=o,f[7]=a,f[8]=c,f[9]=u,f[10]=l,f[11]=d,f[12]=h,f[13]=m,f[14]=p,f[15]=v,f}function In(e,t,n,r,i,s,o,a,c,u,l,d,h,m,p,v,f){return e[0]=t,e[1]=n,e[2]=r,e[3]=i,e[4]=s,e[5]=o,e[6]=a,e[7]=c,e[8]=u,e[9]=l,e[10]=d,e[11]=h,e[12]=m,e[13]=p,e[14]=v,e[15]=f,e}function yt(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Cn(e,t){if(e===t){var n=t[1],r=t[2],i=t[3],s=t[6],o=t[7],a=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=s,e[11]=t[14],e[12]=i,e[13]=o,e[14]=a}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function Fn(e,t){var n=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],c=t[6],u=t[7],l=t[8],d=t[9],h=t[10],m=t[11],p=t[12],v=t[13],f=t[14],g=t[15],S=n*a-r*o,_=n*c-i*o,w=n*u-s*o,y=r*c-i*a,x=r*u-s*a,T=i*u-s*c,E=l*v-d*p,z=l*f-h*p,A=l*g-m*p,M=d*f-h*v,L=d*g-m*v,k=h*g-m*f,b=S*k-_*L+w*M+y*A-x*z+T*E;return b?(b=1/b,e[0]=(a*k-c*L+u*M)*b,e[1]=(i*L-r*k-s*M)*b,e[2]=(v*T-f*x+g*y)*b,e[3]=(h*x-d*T-m*y)*b,e[4]=(c*A-o*k-u*z)*b,e[5]=(n*k-i*A+s*z)*b,e[6]=(f*w-p*T-g*_)*b,e[7]=(l*T-h*w+m*_)*b,e[8]=(o*L-a*A+u*E)*b,e[9]=(r*A-n*L-s*E)*b,e[10]=(p*x-v*w+g*S)*b,e[11]=(d*w-l*x-m*S)*b,e[12]=(a*z-o*M-c*E)*b,e[13]=(n*M-r*z+i*E)*b,e[14]=(v*_-p*y-f*S)*b,e[15]=(l*y-d*_+h*S)*b,e):null}function Dn(e,t){var n=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],c=t[6],u=t[7],l=t[8],d=t[9],h=t[10],m=t[11],p=t[12],v=t[13],f=t[14],g=t[15],S=n*a-r*o,_=n*c-i*o,w=n*u-s*o,y=r*c-i*a,x=r*u-s*a,T=i*u-s*c,E=l*v-d*p,z=l*f-h*p,A=l*g-m*p,M=d*f-h*v,L=d*g-m*v,k=h*g-m*f;return e[0]=a*k-c*L+u*M,e[1]=i*L-r*k-s*M,e[2]=v*T-f*x+g*y,e[3]=h*x-d*T-m*y,e[4]=c*A-o*k-u*z,e[5]=n*k-i*A+s*z,e[6]=f*w-p*T-g*_,e[7]=l*T-h*w+m*_,e[8]=o*L-a*A+u*E,e[9]=r*A-n*L-s*E,e[10]=p*x-v*w+g*S,e[11]=d*w-l*x-m*S,e[12]=a*z-o*M-c*E,e[13]=n*M-r*z+i*E,e[14]=v*_-p*y-f*S,e[15]=l*y-d*_+h*S,e}function Un(e){var t=e[0],n=e[1],r=e[2],i=e[3],s=e[4],o=e[5],a=e[6],c=e[7],u=e[8],l=e[9],d=e[10],h=e[11],m=e[12],p=e[13],v=e[14],f=e[15],g=t*o-n*s,S=t*a-r*s,_=n*a-r*o,w=u*p-l*m,y=u*v-d*m,x=l*v-d*p,T=t*x-n*y+r*w,E=s*x-o*y+a*w,z=u*_-l*S+d*g,A=m*_-p*S+v*g;return c*T-i*E+f*z-h*A}function xt(e,t,n){var r=t[0],i=t[1],s=t[2],o=t[3],a=t[4],c=t[5],u=t[6],l=t[7],d=t[8],h=t[9],m=t[10],p=t[11],v=t[12],f=t[13],g=t[14],S=t[15],_=n[0],w=n[1],y=n[2],x=n[3];return e[0]=_*r+w*a+y*d+x*v,e[1]=_*i+w*c+y*h+x*f,e[2]=_*s+w*u+y*m+x*g,e[3]=_*o+w*l+y*p+x*S,_=n[4],w=n[5],y=n[6],x=n[7],e[4]=_*r+w*a+y*d+x*v,e[5]=_*i+w*c+y*h+x*f,e[6]=_*s+w*u+y*m+x*g,e[7]=_*o+w*l+y*p+x*S,_=n[8],w=n[9],y=n[10],x=n[11],e[8]=_*r+w*a+y*d+x*v,e[9]=_*i+w*c+y*h+x*f,e[10]=_*s+w*u+y*m+x*g,e[11]=_*o+w*l+y*p+x*S,_=n[12],w=n[13],y=n[14],x=n[15],e[12]=_*r+w*a+y*d+x*v,e[13]=_*i+w*c+y*h+x*f,e[14]=_*s+w*u+y*m+x*g,e[15]=_*o+w*l+y*p+x*S,e}function Bn(e,t,n){var r=n[0],i=n[1],s=n[2],o,a,c,u,l,d,h,m,p,v,f,g;return t===e?(e[12]=t[0]*r+t[4]*i+t[8]*s+t[12],e[13]=t[1]*r+t[5]*i+t[9]*s+t[13],e[14]=t[2]*r+t[6]*i+t[10]*s+t[14],e[15]=t[3]*r+t[7]*i+t[11]*s+t[15]):(o=t[0],a=t[1],c=t[2],u=t[3],l=t[4],d=t[5],h=t[6],m=t[7],p=t[8],v=t[9],f=t[10],g=t[11],e[0]=o,e[1]=a,e[2]=c,e[3]=u,e[4]=l,e[5]=d,e[6]=h,e[7]=m,e[8]=p,e[9]=v,e[10]=f,e[11]=g,e[12]=o*r+l*i+p*s+t[12],e[13]=a*r+d*i+v*s+t[13],e[14]=c*r+h*i+f*s+t[14],e[15]=u*r+m*i+g*s+t[15]),e}function Gn(e,t,n){var r=n[0],i=n[1],s=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*s,e[9]=t[9]*s,e[10]=t[10]*s,e[11]=t[11]*s,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Vn(e,t,n,r){var i=r[0],s=r[1],o=r[2],a=Math.sqrt(i*i+s*s+o*o),c,u,l,d,h,m,p,v,f,g,S,_,w,y,x,T,E,z,A,M,L,k,b,U;return a<R?null:(a=1/a,i*=a,s*=a,o*=a,c=Math.sin(n),u=Math.cos(n),l=1-u,d=t[0],h=t[1],m=t[2],p=t[3],v=t[4],f=t[5],g=t[6],S=t[7],_=t[8],w=t[9],y=t[10],x=t[11],T=i*i*l+u,E=s*i*l+o*c,z=o*i*l-s*c,A=i*s*l-o*c,M=s*s*l+u,L=o*s*l+i*c,k=i*o*l+s*c,b=s*o*l-i*c,U=o*o*l+u,e[0]=d*T+v*E+_*z,e[1]=h*T+f*E+w*z,e[2]=m*T+g*E+y*z,e[3]=p*T+S*E+x*z,e[4]=d*A+v*M+_*L,e[5]=h*A+f*M+w*L,e[6]=m*A+g*M+y*L,e[7]=p*A+S*M+x*L,e[8]=d*k+v*b+_*U,e[9]=h*k+f*b+w*U,e[10]=m*k+g*b+y*U,e[11]=p*k+S*b+x*U,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Wn(e,t,n){var r=Math.sin(n),i=Math.cos(n),s=t[4],o=t[5],a=t[6],c=t[7],u=t[8],l=t[9],d=t[10],h=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+u*r,e[5]=o*i+l*r,e[6]=a*i+d*r,e[7]=c*i+h*r,e[8]=u*i-s*r,e[9]=l*i-o*r,e[10]=d*i-a*r,e[11]=h*i-c*r,e}function Hn(e,t,n){var r=Math.sin(n),i=Math.cos(n),s=t[0],o=t[1],a=t[2],c=t[3],u=t[8],l=t[9],d=t[10],h=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-u*r,e[1]=o*i-l*r,e[2]=a*i-d*r,e[3]=c*i-h*r,e[8]=s*r+u*i,e[9]=o*r+l*i,e[10]=a*r+d*i,e[11]=c*r+h*i,e}function Kn(e,t,n){var r=Math.sin(n),i=Math.cos(n),s=t[0],o=t[1],a=t[2],c=t[3],u=t[4],l=t[5],d=t[6],h=t[7];return t!==e&&(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[0]=s*i+u*r,e[1]=o*i+l*r,e[2]=a*i+d*r,e[3]=c*i+h*r,e[4]=u*i-s*r,e[5]=l*i-o*r,e[6]=d*i-a*r,e[7]=h*i-c*r,e}function Xn(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function Yn(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function $n(e,t,n){var r=n[0],i=n[1],s=n[2],o=Math.sqrt(r*r+i*i+s*s),a,c,u;return o<R?null:(o=1/o,r*=o,i*=o,s*=o,a=Math.sin(t),c=Math.cos(t),u=1-c,e[0]=r*r*u+c,e[1]=i*r*u+s*a,e[2]=s*r*u-i*a,e[3]=0,e[4]=r*i*u-s*a,e[5]=i*i*u+c,e[6]=s*i*u+r*a,e[7]=0,e[8]=r*s*u+i*a,e[9]=i*s*u-r*a,e[10]=s*s*u+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function jn(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r,e[6]=n,e[7]=0,e[8]=0,e[9]=-n,e[10]=r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function qn(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=0,e[2]=-n,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=n,e[9]=0,e[10]=r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Zn(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=n,e[2]=0,e[3]=0,e[4]=-n,e[5]=r,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function wt(e,t,n){var r=t[0],i=t[1],s=t[2],o=t[3],a=r+r,c=i+i,u=s+s,l=r*a,d=r*c,h=r*u,m=i*c,p=i*u,v=s*u,f=o*a,g=o*c,S=o*u;return e[0]=1-(m+v),e[1]=d+S,e[2]=h-g,e[3]=0,e[4]=d-S,e[5]=1-(l+v),e[6]=p+f,e[7]=0,e[8]=h+g,e[9]=p-f,e[10]=1-(l+m),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Jn(e,t){var n=new I(3),r=-t[0],i=-t[1],s=-t[2],o=t[3],a=t[4],c=t[5],u=t[6],l=t[7],d=r*r+i*i+s*s+o*o;return d>0?(n[0]=(a*o+l*r+c*s-u*i)*2/d,n[1]=(c*o+l*i+u*r-a*s)*2/d,n[2]=(u*o+l*s+a*i-c*r)*2/d):(n[0]=(a*o+l*r+c*s-u*i)*2,n[1]=(c*o+l*i+u*r-a*s)*2,n[2]=(u*o+l*s+a*i-c*r)*2),wt(e,t,n),e}function Qn(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function _t(e,t){var n=t[0],r=t[1],i=t[2],s=t[4],o=t[5],a=t[6],c=t[8],u=t[9],l=t[10];return e[0]=Math.sqrt(n*n+r*r+i*i),e[1]=Math.sqrt(s*s+o*o+a*a),e[2]=Math.sqrt(c*c+u*u+l*l),e}function er(e,t){var n=new I(3);_t(n,t);var r=1/n[0],i=1/n[1],s=1/n[2],o=t[0]*r,a=t[1]*i,c=t[2]*s,u=t[4]*r,l=t[5]*i,d=t[6]*s,h=t[8]*r,m=t[9]*i,p=t[10]*s,v=o+l+p,f=0;return v>0?(f=Math.sqrt(v+1)*2,e[3]=.25*f,e[0]=(d-m)/f,e[1]=(h-c)/f,e[2]=(a-u)/f):o>l&&o>p?(f=Math.sqrt(1+o-l-p)*2,e[3]=(d-m)/f,e[0]=.25*f,e[1]=(a+u)/f,e[2]=(h+c)/f):l>p?(f=Math.sqrt(1+l-o-p)*2,e[3]=(h-c)/f,e[0]=(a+u)/f,e[1]=.25*f,e[2]=(d+m)/f):(f=Math.sqrt(1+p-o-l)*2,e[3]=(a-u)/f,e[0]=(h+c)/f,e[1]=(d+m)/f,e[2]=.25*f),e}function tr(e,t,n,r){t[0]=r[12],t[1]=r[13],t[2]=r[14];var i=r[0],s=r[1],o=r[2],a=r[4],c=r[5],u=r[6],l=r[8],d=r[9],h=r[10];n[0]=Math.sqrt(i*i+s*s+o*o),n[1]=Math.sqrt(a*a+c*c+u*u),n[2]=Math.sqrt(l*l+d*d+h*h);var m=1/n[0],p=1/n[1],v=1/n[2],f=i*m,g=s*p,S=o*v,_=a*m,w=c*p,y=u*v,x=l*m,T=d*p,E=h*v,z=f+w+E,A=0;return z>0?(A=Math.sqrt(z+1)*2,e[3]=.25*A,e[0]=(y-T)/A,e[1]=(x-S)/A,e[2]=(g-_)/A):f>w&&f>E?(A=Math.sqrt(1+f-w-E)*2,e[3]=(y-T)/A,e[0]=.25*A,e[1]=(g+_)/A,e[2]=(x+S)/A):w>E?(A=Math.sqrt(1+w-f-E)*2,e[3]=(x-S)/A,e[0]=(g+_)/A,e[1]=.25*A,e[2]=(y+T)/A):(A=Math.sqrt(1+E-f-w)*2,e[3]=(g-_)/A,e[0]=(x+S)/A,e[1]=(y+T)/A,e[2]=.25*A),e}function nr(e,t,n,r){var i=t[0],s=t[1],o=t[2],a=t[3],c=i+i,u=s+s,l=o+o,d=i*c,h=i*u,m=i*l,p=s*u,v=s*l,f=o*l,g=a*c,S=a*u,_=a*l,w=r[0],y=r[1],x=r[2];return e[0]=(1-(p+f))*w,e[1]=(h+_)*w,e[2]=(m-S)*w,e[3]=0,e[4]=(h-_)*y,e[5]=(1-(d+f))*y,e[6]=(v+g)*y,e[7]=0,e[8]=(m+S)*x,e[9]=(v-g)*x,e[10]=(1-(d+p))*x,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function rr(e,t,n,r,i){var s=t[0],o=t[1],a=t[2],c=t[3],u=s+s,l=o+o,d=a+a,h=s*u,m=s*l,p=s*d,v=o*l,f=o*d,g=a*d,S=c*u,_=c*l,w=c*d,y=r[0],x=r[1],T=r[2],E=i[0],z=i[1],A=i[2],M=(1-(v+g))*y,L=(m+w)*y,k=(p-_)*y,b=(m-w)*x,U=(1-(h+g))*x,oe=(f+S)*x,ae=(p+_)*T,pt=(f-S)*T,vt=(1-(h+v))*T;return e[0]=M,e[1]=L,e[2]=k,e[3]=0,e[4]=b,e[5]=U,e[6]=oe,e[7]=0,e[8]=ae,e[9]=pt,e[10]=vt,e[11]=0,e[12]=n[0]+E-(M*E+b*z+ae*A),e[13]=n[1]+z-(L*E+U*z+pt*A),e[14]=n[2]+A-(k*E+oe*z+vt*A),e[15]=1,e}function ir(e,t){var n=t[0],r=t[1],i=t[2],s=t[3],o=n+n,a=r+r,c=i+i,u=n*o,l=r*o,d=r*a,h=i*o,m=i*a,p=i*c,v=s*o,f=s*a,g=s*c;return e[0]=1-d-p,e[1]=l+g,e[2]=h-f,e[3]=0,e[4]=l-g,e[5]=1-u-p,e[6]=m+v,e[7]=0,e[8]=h+f,e[9]=m-v,e[10]=1-u-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function sr(e,t,n,r,i,s,o){var a=1/(n-t),c=1/(i-r),u=1/(s-o);return e[0]=s*2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(n+t)*a,e[9]=(i+r)*c,e[10]=(o+s)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*s*2*u,e[15]=0,e}function St(e,t,n,r,i){var s=1/Math.tan(t/2);if(e[0]=s/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(r-i);e[10]=(i+r)*o,e[14]=2*i*r*o}else e[10]=-1,e[14]=-2*r;return e}var or=St;function ar(e,t,n,r,i){var s=1/Math.tan(t/2);if(e[0]=s/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var o=1/(r-i);e[10]=i*o,e[14]=i*r*o}else e[10]=-1,e[14]=-r;return e}function cr(e,t,n,r){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),o=Math.tan(t.leftDegrees*Math.PI/180),a=Math.tan(t.rightDegrees*Math.PI/180),c=2/(o+a),u=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=u,e[6]=0,e[7]=0,e[8]=-((o-a)*c*.5),e[9]=(i-s)*u*.5,e[10]=r/(n-r),e[11]=-1,e[12]=0,e[13]=0,e[14]=r*n/(n-r),e[15]=0,e}function At(e,t,n,r,i,s,o){var a=1/(t-n),c=1/(r-i),u=1/(s-o);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(t+n)*a,e[13]=(i+r)*c,e[14]=(o+s)*u,e[15]=1,e}var lr=At;function ur(e,t,n,r,i,s,o){var a=1/(t-n),c=1/(r-i),u=1/(s-o);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=u,e[11]=0,e[12]=(t+n)*a,e[13]=(i+r)*c,e[14]=s*u,e[15]=1,e}function dr(e,t,n,r){var i,s,o,a,c,u,l,d,h,m,p=t[0],v=t[1],f=t[2],g=r[0],S=r[1],_=r[2],w=n[0],y=n[1],x=n[2];return Math.abs(p-w)<R&&Math.abs(v-y)<R&&Math.abs(f-x)<R?yt(e):(l=p-w,d=v-y,h=f-x,m=1/Math.sqrt(l*l+d*d+h*h),l*=m,d*=m,h*=m,i=S*h-_*d,s=_*l-g*h,o=g*d-S*l,m=Math.sqrt(i*i+s*s+o*o),m?(m=1/m,i*=m,s*=m,o*=m):(i=0,s=0,o=0),a=d*o-h*s,c=h*i-l*o,u=l*s-d*i,m=Math.sqrt(a*a+c*c+u*u),m?(m=1/m,a*=m,c*=m,u*=m):(a=0,c=0,u=0),e[0]=i,e[1]=a,e[2]=l,e[3]=0,e[4]=s,e[5]=c,e[6]=d,e[7]=0,e[8]=o,e[9]=u,e[10]=h,e[11]=0,e[12]=-(i*p+s*v+o*f),e[13]=-(a*p+c*v+u*f),e[14]=-(l*p+d*v+h*f),e[15]=1,e)}function hr(e,t,n,r){var i=t[0],s=t[1],o=t[2],a=r[0],c=r[1],u=r[2],l=i-n[0],d=s-n[1],h=o-n[2],m=l*l+d*d+h*h;m>0&&(m=1/Math.sqrt(m),l*=m,d*=m,h*=m);var p=c*h-u*d,v=u*l-a*h,f=a*d-c*l;return m=p*p+v*v+f*f,m>0&&(m=1/Math.sqrt(m),p*=m,v*=m,f*=m),e[0]=p,e[1]=v,e[2]=f,e[3]=0,e[4]=d*f-h*v,e[5]=h*p-l*f,e[6]=l*v-d*p,e[7]=0,e[8]=l,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=s,e[14]=o,e[15]=1,e}function fr(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function mr(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function pr(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e[9]=t[9]+n[9],e[10]=t[10]+n[10],e[11]=t[11]+n[11],e[12]=t[12]+n[12],e[13]=t[13]+n[13],e[14]=t[14]+n[14],e[15]=t[15]+n[15],e}function Et(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e[9]=t[9]-n[9],e[10]=t[10]-n[10],e[11]=t[11]-n[11],e[12]=t[12]-n[12],e[13]=t[13]-n[13],e[14]=t[14]-n[14],e[15]=t[15]-n[15],e}function vr(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e[9]=t[9]*n,e[10]=t[10]*n,e[11]=t[11]*n,e[12]=t[12]*n,e[13]=t[13]*n,e[14]=t[14]*n,e[15]=t[15]*n,e}function gr(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e[4]=t[4]+n[4]*r,e[5]=t[5]+n[5]*r,e[6]=t[6]+n[6]*r,e[7]=t[7]+n[7]*r,e[8]=t[8]+n[8]*r,e[9]=t[9]+n[9]*r,e[10]=t[10]+n[10]*r,e[11]=t[11]+n[11]*r,e[12]=t[12]+n[12]*r,e[13]=t[13]+n[13]*r,e[14]=t[14]+n[14]*r,e[15]=t[15]+n[15]*r,e}function yr(e,t){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]}function xr(e,t){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],c=e[6],u=e[7],l=e[8],d=e[9],h=e[10],m=e[11],p=e[12],v=e[13],f=e[14],g=e[15],S=t[0],_=t[1],w=t[2],y=t[3],x=t[4],T=t[5],E=t[6],z=t[7],A=t[8],M=t[9],L=t[10],k=t[11],b=t[12],U=t[13],oe=t[14],ae=t[15];return Math.abs(n-S)<=R*Math.max(1,Math.abs(n),Math.abs(S))&&Math.abs(r-_)<=R*Math.max(1,Math.abs(r),Math.abs(_))&&Math.abs(i-w)<=R*Math.max(1,Math.abs(i),Math.abs(w))&&Math.abs(s-y)<=R*Math.max(1,Math.abs(s),Math.abs(y))&&Math.abs(o-x)<=R*Math.max(1,Math.abs(o),Math.abs(x))&&Math.abs(a-T)<=R*Math.max(1,Math.abs(a),Math.abs(T))&&Math.abs(c-E)<=R*Math.max(1,Math.abs(c),Math.abs(E))&&Math.abs(u-z)<=R*Math.max(1,Math.abs(u),Math.abs(z))&&Math.abs(l-A)<=R*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(d-M)<=R*Math.max(1,Math.abs(d),Math.abs(M))&&Math.abs(h-L)<=R*Math.max(1,Math.abs(h),Math.abs(L))&&Math.abs(m-k)<=R*Math.max(1,Math.abs(m),Math.abs(k))&&Math.abs(p-b)<=R*Math.max(1,Math.abs(p),Math.abs(b))&&Math.abs(v-U)<=R*Math.max(1,Math.abs(v),Math.abs(U))&&Math.abs(f-oe)<=R*Math.max(1,Math.abs(f),Math.abs(oe))&&Math.abs(g-ae)<=R*Math.max(1,Math.abs(g),Math.abs(ae))}var wr=xt,_r=Et;var N={};Ue(N,{add:()=>zr,angle:()=>jr,bezier:()=>Gr,ceil:()=>br,clone:()=>Sr,copy:()=>Er,create:()=>Tt,cross:()=>Fr,dist:()=>ri,distance:()=>Lt,div:()=>ni,divide:()=>Rt,dot:()=>Ge,equals:()=>Qr,exactEquals:()=>Jr,floor:()=>Mr,forEach:()=>ai,fromValues:()=>Ar,hermite:()=>Br,inverse:()=>Ir,len:()=>si,length:()=>zt,lerp:()=>Dr,max:()=>Lr,min:()=>Rr,mul:()=>ti,multiply:()=>Mt,negate:()=>Or,normalize:()=>Cr,random:()=>Vr,rotateX:()=>Xr,rotateY:()=>Yr,rotateZ:()=>$r,round:()=>Nr,scale:()=>kr,scaleAndAdd:()=>Pr,set:()=>Tr,slerp:()=>Ur,sqrDist:()=>ii,sqrLen:()=>oi,squaredDistance:()=>Nt,squaredLength:()=>kt,str:()=>Zr,sub:()=>ei,subtract:()=>bt,transformMat3:()=>Hr,transformMat4:()=>Wr,transformQuat:()=>Kr,zero:()=>qr});function Tt(){var e=new I(3);return I!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Sr(e){var t=new I(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function zt(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Ar(e,t,n){var r=new I(3);return r[0]=e,r[1]=t,r[2]=n,r}function Er(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Tr(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function zr(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function bt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function Mt(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function Rt(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function br(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Mr(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Rr(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function Lr(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function Nr(e,t){return e[0]=pe(t[0]),e[1]=pe(t[1]),e[2]=pe(t[2]),e}function kr(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function Pr(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e}function Lt(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+r*r+i*i)}function Nt(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return n*n+r*r+i*i}function kt(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function Or(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Ir(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Cr(e,t){var n=t[0],r=t[1],i=t[2],s=n*n+r*r+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function Ge(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Fr(e,t,n){var r=t[0],i=t[1],s=t[2],o=n[0],a=n[1],c=n[2];return e[0]=i*c-s*a,e[1]=s*o-r*c,e[2]=r*a-i*o,e}function Dr(e,t,n,r){var i=t[0],s=t[1],o=t[2];return e[0]=i+r*(n[0]-i),e[1]=s+r*(n[1]-s),e[2]=o+r*(n[2]-o),e}function Ur(e,t,n,r){var i=Math.acos(Math.min(Math.max(Ge(t,n),-1),1)),s=Math.sin(i),o=Math.sin((1-r)*i)/s,a=Math.sin(r*i)/s;return e[0]=o*t[0]+a*n[0],e[1]=o*t[1]+a*n[1],e[2]=o*t[2]+a*n[2],e}function Br(e,t,n,r,i,s){var o=s*s,a=o*(2*s-3)+1,c=o*(s-2)+s,u=o*(s-1),l=o*(3-2*s);return e[0]=t[0]*a+n[0]*c+r[0]*u+i[0]*l,e[1]=t[1]*a+n[1]*c+r[1]*u+i[1]*l,e[2]=t[2]*a+n[2]*c+r[2]*u+i[2]*l,e}function Gr(e,t,n,r,i,s){var o=1-s,a=o*o,c=s*s,u=a*o,l=3*s*a,d=3*c*o,h=c*s;return e[0]=t[0]*u+n[0]*l+r[0]*d+i[0]*h,e[1]=t[1]*u+n[1]*l+r[1]*d+i[1]*h,e[2]=t[2]*u+n[2]*l+r[2]*d+i[2]*h,e}function Vr(e,t){t=t===void 0?1:t;var n=Be()*2*Math.PI,r=Be()*2-1,i=Math.sqrt(1-r*r)*t;return e[0]=Math.cos(n)*i,e[1]=Math.sin(n)*i,e[2]=r*t,e}function Wr(e,t,n){var r=t[0],i=t[1],s=t[2],o=n[3]*r+n[7]*i+n[11]*s+n[15];return o=o||1,e[0]=(n[0]*r+n[4]*i+n[8]*s+n[12])/o,e[1]=(n[1]*r+n[5]*i+n[9]*s+n[13])/o,e[2]=(n[2]*r+n[6]*i+n[10]*s+n[14])/o,e}function Hr(e,t,n){var r=t[0],i=t[1],s=t[2];return e[0]=r*n[0]+i*n[3]+s*n[6],e[1]=r*n[1]+i*n[4]+s*n[7],e[2]=r*n[2]+i*n[5]+s*n[8],e}function Kr(e,t,n){var r=n[0],i=n[1],s=n[2],o=n[3],a=t[0],c=t[1],u=t[2],l=i*u-s*c,d=s*a-r*u,h=r*c-i*a;return l=l+l,d=d+d,h=h+h,e[0]=a+o*l+i*h-s*d,e[1]=c+o*d+s*l-r*h,e[2]=u+o*h+r*d-i*l,e}function Xr(e,t,n,r){var i=[],s=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],s[0]=i[0],s[1]=i[1]*Math.cos(r)-i[2]*Math.sin(r),s[2]=i[1]*Math.sin(r)+i[2]*Math.cos(r),e[0]=s[0]+n[0],e[1]=s[1]+n[1],e[2]=s[2]+n[2],e}function Yr(e,t,n,r){var i=[],s=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],s[0]=i[2]*Math.sin(r)+i[0]*Math.cos(r),s[1]=i[1],s[2]=i[2]*Math.cos(r)-i[0]*Math.sin(r),e[0]=s[0]+n[0],e[1]=s[1]+n[1],e[2]=s[2]+n[2],e}function $r(e,t,n,r){var i=[],s=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],s[0]=i[0]*Math.cos(r)-i[1]*Math.sin(r),s[1]=i[0]*Math.sin(r)+i[1]*Math.cos(r),s[2]=i[2],e[0]=s[0]+n[0],e[1]=s[1]+n[1],e[2]=s[2]+n[2],e}function jr(e,t){var n=e[0],r=e[1],i=e[2],s=t[0],o=t[1],a=t[2],c=Math.sqrt((n*n+r*r+i*i)*(s*s+o*o+a*a)),u=c&&Ge(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function qr(e){return e[0]=0,e[1]=0,e[2]=0,e}function Zr(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Jr(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Qr(e,t){var n=e[0],r=e[1],i=e[2],s=t[0],o=t[1],a=t[2];return Math.abs(n-s)<=R*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(r-o)<=R*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-a)<=R*Math.max(1,Math.abs(i),Math.abs(a))}var ei=bt,ti=Mt,ni=Rt,ri=Lt,ii=Nt,si=zt,oi=kt,ai=(function(){var e=Tt();return function(t,n,r,i,s,o){var a,c;for(n||(n=3),r||(r=0),i?c=Math.min(i*n+r,t.length):c=t.length,a=r;a<c;a+=n)e[0]=t[a],e[1]=t[a+1],e[2]=t[a+2],s(e,e,o),t[a]=e[0],t[a+1]=e[1],t[a+2]=e[2];return t}})();var To=Math.PI/180;var ci=Math.PI/180,zo=180/Math.PI,ce=ci;var B=1,$=2;var Ke=8,Xe=16,li=32;var ui=16384;var ve=65536,Pt=1<<17,di=1<<18,hi=1<<19,fi=1<<20,mi=1<<21,pi=1<<22,vi=1<<23,bo=1<<24,ge=1<<25,gi=1<<26,Mo=1<<27,Ro=1<<28,Lo=1<<29,ye=1<<30,No=1<<31;var ko=1<<25,Po=1<<28,Oo=1<<29,Io=1<<30,Co=1<<31,Fo=B|$,Do=B|ve|$|ge|ye,Uo=B|ve|$,Bo=B|Pt|$|ge|ye,Go=li|Ke|Xe,Vo=B|Xe|Ke,yi=B|ge|ye|$|gi,Wo=di|hi|fi|mi|pi|vi,Ho=B|Ke|Xe|ge|ye,Ko=B|ve|$,Xo=B|$,Yo=B|ve|$|Pt,$o=yi|ui,jo=Number.MAX_SAFE_INTEGER-1;var Ot=256,xi=256,wi=8192,_i=2048,Si=512,Ai=256,Ei=Ot*2,Ti=256,Ve=32;var It=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+wi]="Sounds",e[e.Images=e.Sounds+_i]="Images",e[e.Lights=e.Images+Si]="Lights",e[e.ShadowLights=e.Lights+xi]="ShadowLights",e[e.Items=e.ShadowLights+Ti]="Items",e[e.PlayerSkins=e.Items+Ai]="PlayerSkins",e[e.General=e.PlayerSkins+Ot]="General",e[e.WheelWeapons=e.General+Ei]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ve]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ve]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ve]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(It||{}),qo=It.MaxConfigStrings;function zi(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let n=t;for(let r=0;r<8;r+=1)n=(n&1)!==0?3988292384^n>>>1:n>>>1;e[t]=n>>>0}return e}var Zo=zi();var Jo=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"}]);var bi=19,Qo=8+bi*8;var He=4,We=7*He,ea=[{index:0,size:3,type:5126,stride:We,offset:0},{index:1,size:2,type:5126,stride:We,offset:3*He},{index:2,size:2,type:5126,stride:We,offset:5*He}];var ta=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]);var Ct=class{constructor(){this._position=N.create(),this._angles=N.create(),this._bobAngles=N.create(),this._bobOffset=N.create(),this._kickAngles=N.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=P.create(),this._projectionMatrix=P.create(),this._viewProjectionMatrix=P.create(),this._dirty=!0}get position(){return this._position}set position(e){N.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){N.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){N.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){N.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){N.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let t=P.create();return P.perspective(t,e*ce,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;P.perspective(this._projectionMatrix,this._fov*ce,this._aspect,this._near,this._far);let e=P.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],r=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*ce,s=n*ce,o=r*ce,a=P.create();P.identity(a),P.rotateZ(a,a,-s),P.rotateY(a,a,-i),P.rotateX(a,a,-o);let c=P.create();P.multiply(c,e,a);let u=N.add(N.create(),this._position,this._bobOffset),l=N.negate(N.create(),u),d=N.create();N.transformMat4(d,l,a);let h=N.fromValues(d[1]||0,d[2]||0,d[0]||0);P.copy(this._viewMatrix,c),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],P.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Ft={x:0,y:0,z:0};var sa=Math.PI/180;function le(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function ee(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function X(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Mi(e){return X(e,e)}function xe(e){return Math.sqrt(Mi(e))}function Dt(e){let t=xe(e);return t===0?e:ee(e,1/t)}var Ut=0,Bt=1,Gt=2,Ri=Math.PI/180,oa=180/Math.PI;function Ye(e,t){switch(t){case Ut:return e.x;case Bt:return e.y;case Gt:default:return e.z}}function $e(e){return e*Ri}function Q(e){let t=e%360;return t<0?360+t:t}function ue(e){let t=$e(Ye(e,Bt)),n=$e(Ye(e,Ut)),r=$e(Ye(e,Gt)),i=Math.sin(t),s=Math.cos(t),o=Math.sin(n),a=Math.cos(n),c=Math.sin(r),u=Math.cos(r),l={x:a*s,y:a*i,z:-o},d={x:-c*o*s-u*-i,y:-c*o*i-u*s,z:-c*a},h={x:u*o*s-c*-i,y:u*o*i-c*s,z:u*a};return{forward:l,right:d,up:h}}var G=1,j=2;var qe=8,Ze=16,Li=32;var Ni=16384;var we=65536,Vt=1<<17,ki=1<<18,Pi=1<<19,Oi=1<<20,Ii=1<<21,Ci=1<<22,Fi=1<<23,aa=1<<24,_e=1<<25,Di=1<<26,ca=1<<27,la=1<<28,ua=1<<29,Se=1<<30,da=1<<31;var ha=1<<25,fa=1<<28,ma=1<<29,pa=1<<30,va=1<<31;var ga=G|j,ya=G|we|j|_e|Se,xa=G|we|j,wa=G|Vt|j|_e|Se,_a=Li|qe|Ze,Sa=G|Ze|qe,Ui=G|_e|Se|j|Di,Aa=ki|Pi|Oi|Ii|Ci|Fi,Ea=G|qe|Ze|_e|Se,Ta=G|we|j,za=G|j,ba=G|we|j|Vt,Ma=Ui|Ni;var Ra=Number.MAX_SAFE_INTEGER-1;var Wt=256;var Bi=256,Gi=8192,Vi=2048,Wi=512,Hi=256,Ki=Wt*2,Xi=256,je=32;var Ht=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Gi]="Sounds",e[e.Images=e.Sounds+Vi]="Images",e[e.Lights=e.Images+Wi]="Lights",e[e.ShadowLights=e.Lights+Bi]="ShadowLights",e[e.Items=e.ShadowLights+Xi]="Items",e[e.PlayerSkins=e.Items+Hi]="PlayerSkins",e[e.General=e.PlayerSkins+Wt]="General",e[e.WheelWeapons=e.General+Ki]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+je]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+je]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+je]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Ht||{}),La=Ht.MaxConfigStrings;var de=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(de||{});var C=(e=>(e[e.Ducked=1]="Ducked",e[e.JumpHeld=2]="JumpHeld",e[e.OnGround=4]="OnGround",e[e.TimeWaterJump=8]="TimeWaterJump",e[e.TimeLand=16]="TimeLand",e[e.TimeTeleport=32]="TimeTeleport",e[e.NoPositionalPrediction=64]="NoPositionalPrediction",e[e.OnLadder=128]="OnLadder",e[e.NoAngularPrediction=256]="NoAngularPrediction",e[e.IgnorePlayerCollision=512]="IgnorePlayerCollision",e[e.TimeTrick=1024]="TimeTrick",e))(C||{});function V(e,t){return(e&t)!==0}var Je=(e=>(e[e.Normal=0]="Normal",e[e.Grapple=1]="Grapple",e[e.NoClip=2]="NoClip",e[e.Spectator=3]="Spectator",e[e.Dead=4]="Dead",e[e.Gib=5]="Gib",e[e.Freeze=6]="Freeze",e))(Je||{}),W=(e=>(e[e.None=0]="None",e[e.Attack=1]="Attack",e[e.Use=2]="Use",e[e.Holster=4]="Holster",e[e.Jump=8]="Jump",e[e.Crouch=16]="Crouch",e[e.Any=128]="Any",e))(W||{});function Kt(e){let{velocity:t,frametime:n,onGround:r,groundIsSlick:i,onLadder:s,waterlevel:o,pmFriction:a,pmStopSpeed:c,pmWaterFriction:u}=e,l=xe(t);if(l<1)return{x:0,y:0,z:t.z};let d=0;if(r&&!i||s){let p=l<c?c:l;d+=p*a*n}o>0&&!s&&(d+=l*u*o*n);let h=l-d;if(h<0&&(h=0),h===l)return t;let m=h/l;return ee(t,m)}function Qe(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:s}=e,o=X(t,n),a=r-o;if(a<=0)return t;let c=i*s*r;return c>a&&(c=a),{x:t.x+n.x*c,y:t.y+n.y*c,z:t.z+n.z*c}}function Xt(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:s}=e,o=Math.min(r,30),a=X(t,n),c=o-a;if(c<=0)return t;let u=i*r*s;return u>c&&(u=c),{x:t.x+n.x*u,y:t.y+n.y*u,z:t.z+n.z*u}}function Yt(e){let{forward:t,right:n,cmd:r,maxSpeed:i}=e,s={x:t.x*r.forwardmove+n.x*r.sidemove,y:t.y*r.forwardmove+n.y*r.sidemove,z:0},o=xe(s);if(o>i){let a=i/o;s=ee(s,a),o=i}return{wishdir:o===0?s:Dt(s),wishspeed:o}}function $t(e){let{forward:t,right:n,cmd:r,maxSpeed:i}=e,s={x:t.x*r.forwardmove+n.x*r.sidemove,y:t.y*r.forwardmove+n.y*r.sidemove,z:0};r.upmove>10?s=le(s,{x:0,y:0,z:r.upmove}):r.upmove<-10?s=le(s,{x:0,y:0,z:r.upmove}):s=le(s,{x:0,y:0,z:10});let o=xe(s);if(o>i){let a=i/o;s=ee(s,a),o=i}return o*=.5,{wishdir:o===0?s:Dt(s),wishspeed:o}}function Yi(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function $i(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Ae(e){let{pmFlags:t,cmdAngles:n,deltaAngles:r}=e,i;(t&32)!==0?i={x:0,y:n.y+r.y,z:0}:(i=Yi(n,r),i={...i,x:$i(i.x)});let s=ue(i);return{viewangles:i,...s}}var jt=200,qt=200,Zt=200,Jt=140,Qt=150,en=3;function ji(e){let t=Q(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function tn(e,t){return{x:ji(e.x+t.x),y:Q(e.y+t.y),z:Q(e.z+t.z)}}function nn(e,t){let n=t.sensitivityX??t.sensitivity,r=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*r,y:e.deltaX*n,z:0}}var qi={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},Zi=800,te={x:0,y:0,z:0},Ji=250;function Z(){return{origin:te,velocity:te,viewangles:te,pmFlags:C.OnGround,pmType:Je.Normal,waterlevel:de.None,gravity:Zi,deltaAngles:te,health:0,armor:0,ammo:0}}function rn(e){return e?{...Z(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:te}:Z()}function Y(e,t,n){return e+(t-e)*n}function et(e,t,n){let r=Q(t-e);return r>180&&(r-=360),Q(e+r*n)}function Ee(e,t,n){let r=Math.max(0,Math.min(n,1));return{origin:{x:Y(e.origin.x,t.origin.x,r),y:Y(e.origin.y,t.origin.y,r),z:Y(e.origin.z,t.origin.z,r)},velocity:{x:Y(e.velocity.x,t.velocity.x,r),y:Y(e.velocity.y,t.velocity.y,r),z:Y(e.velocity.z,t.velocity.z,r)},viewangles:{x:et(e.viewangles.x,t.viewangles.x,r),y:et(e.viewangles.y,t.viewangles.y,r),z:et(e.viewangles.z,t.viewangles.z,r)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:Y(e.health,t.health,r),armor:Y(e.armor,t.armor,r),ammo:Y(e.ammo,t.ammo,r)}}function Qi(e,t,n,r){let i=Math.min(Math.max(t.msec,0),Ji)/1e3,s=V(e.pmFlags,C.OnGround),o=V(e.pmFlags,C.OnLadder),a=Kt({velocity:e.velocity,frametime:i,onGround:s,groundIsSlick:n.groundIsSlick,onLadder:o,waterlevel:e.waterlevel,pmFriction:n.pmFriction,pmStopSpeed:n.pmStopSpeed,pmWaterFriction:n.pmWaterFriction}),{viewangles:c,forward:u,right:l}=Ae({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??te}),d=e.waterlevel>de.None?$t({forward:u,right:l,cmd:t,maxSpeed:n.pmWaterSpeed}):Yt({forward:u,right:l,cmd:t,maxSpeed:n.pmMaxSpeed});if(e.waterlevel>de.None)a=Qe({velocity:a,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmWaterAccelerate,frametime:i});else if(s||o){let p=V(e.pmFlags,C.Ducked)?n.pmDuckSpeed:n.pmMaxSpeed,v=d.wishspeed>p?{wishdir:d.wishdir,wishspeed:p}:d;a=Qe({velocity:a,wishdir:v.wishdir,wishspeed:v.wishspeed,accel:n.pmAccelerate,frametime:i})}else a=Xt({velocity:a,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmAirAccelerate,frametime:i}),a={...a,z:a.z-e.gravity*i};let m=r(e.origin,le(e.origin,ee(a,i))).endpos;return{...e,origin:m,velocity:a,viewangles:c}}var ne=class{constructor(t,n={}){this.baseFrame={frame:0,timeMs:0,state:Z()};this.commands=[];this.predicted=Z();this.settings={...qi,...n},this.trace=t,this.predicted=this.baseFrame.state??Z()}setAuthoritative(t){let n=rn(t.state);return this.baseFrame={...t,state:n},this.commands=this.commands.filter(r=>(r.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=rn(this.baseFrame.state);for(let n of this.commands)t=Qi(t,n,this.settings,this.trace);return this.predicted=t,t}};var es={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function ts(e){return{x:Math.max(-14,Math.min(14,e.x)),y:Math.max(-14,Math.min(14,e.y)),z:Math.max(-22,Math.min(30,e.z))}}function ns(e,t,n){return t?e>210?n/400:e>100?n/800:n/1600:0}function rs(e,t,n,r,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let s=ns(t,r,i),o=e+s,c=V(n,C.Ducked)&&r?o*4:o;return{bobTime:o,bobCycle:Math.floor(c),bobCycleRun:Math.floor(o),bobFracSin:Math.abs(Math.sin(c*Math.PI))}}var re=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...es,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,n){let{forward:r,right:i}=ue(Ae({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??Ft}).viewangles),s=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),o=V(t.pmFlags,C.OnGround),a=rs(this.bobTime,s,t.pmFlags,o,n);this.bobTime=a.bobTime,this.bobCycle=a.bobCycle,this.bobCycleRun=a.bobCycleRun,this.bobFracSin=a.bobFracSin;let c=X(t.velocity,r)*this.settings.runPitch,u=X(t.velocity,i)*this.settings.runRoll,l=this.bobFracSin*this.settings.bobPitch*s,d=this.bobFracSin*this.settings.bobRoll*s;V(t.pmFlags,C.Ducked)&&o&&(l*=6,d*=6),c+=Math.min(l,this.settings.maxBobAngle),d=Math.min(d,this.settings.maxBobAngle),this.bobCycle&1&&(d=-d),u+=d;let h=Math.min(this.bobFracSin*s*this.settings.bobUp,this.settings.maxBobHeight),m=0,p=0;if(this.kick&&this.kick.remainingMs>0){let S=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));m+=S*this.kick.pitch,p+=S*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-n),this.kick.remainingMs===0&&(this.kick=void 0)}let g={angles:{x:c+m,y:0,z:u+p},offset:ts({x:0,y:0,z:h}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:s};return this.lastSample=g,g}};var Te=(e,t,n,r,i,s)=>{let o=Math.abs(r).toString();for(let a=0;a<o.length;a++){let c=parseInt(o[a]),u=i[c];u&&e.drawPic(t+a*s,n,u)}};var F={HEALTH_X:100,HEALTH_Y:450,ARMOR_X:200,ARMOR_Y:450,AMMO_X:540,AMMO_Y:450,CENTER_PRINT_X:320,CENTER_PRINT_Y:100,WEAPON_ICON_X:10,WEAPON_ICON_Y:450,POWERUP_X:610,POWERUP_Y:450};var ze=null;var sn=(e,t,n)=>{if(ze){let r=(t-ze.width)/2,i=(n-ze.height)/2;e.drawPic(r,i,ze)}};var is={x:0,y:0,z:0};var Ba=Math.PI/180;var ln=0,un=1,ss=2,os=Math.PI/180,as=180/Math.PI;function on(e,t){switch(t){case ln:return e.x;case un:return e.y;case ss:default:return e.z}}function cs(e){return e*os}function ls(e){return e*as}function an(e){let t=e%360;return t<0?360+t:t}function us(e){let t=on(e,ln),n=on(e,un);if(t===0)return n===0?0:n>0?90:270;let r=ls(Math.atan2(n,t));return r<0?r+360:r}var H=624,ds=397,hs=2567483615,fs=2147483648,ms=2147483647,tt=4294967296,ps=class{constructor(e=5489){this.state=new Uint32Array(H),this.index=H,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<H;t++){let n=this.state[t-1]^this.state[t-1]>>>30,r=Math.imul(n>>>0,1812433253)+t;this.state[t]=r>>>0}this.index=H}nextUint32(){this.index>=H&&this.twist();let e=this.state[this.index++];return e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0}twist(){for(let e=0;e<H;e++){let t=this.state[e]&fs|this.state[(e+1)%H]&ms,n=this.state[(e+ds)%H]^t>>>1;(t&1)!==0&&(n^=hs),this.state[e]=n>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==H)throw new Error(`Expected ${H} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},vs=class{constructor(e={}){this.mt=new ps(e.seed)}frandom(){return this.mt.nextUint32()/tt}frandomRange(e,t){return e+(t-e)*this.frandom()}frandomMax(e){return this.frandomRange(0,e)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let e=Number.EPSILON;return this.frandomRange(-1+e,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(e,t){if(t-e<=1)return e;let n=t-e,r=tt-tt%n,i;do i=this.mt.nextUint32();while(i>=r);return e+i%n}irandom(e){return e<=0?0:this.irandomRange(0,e)}randomTimeRange(e,t){return t<=e?e:this.irandomRange(e,t)}randomTime(e){return this.irandom(e)}randomIndex(e){return this.irandom(e.length)}getState(){return{mt:this.mt.getState()}}setState(e){this.mt.setState(e.mt)}};var K=1,q=2;var it=8,st=16,gs=32;var ys=16384;var Le=65536,dn=1<<17,xs=1<<18,ws=1<<19,_s=1<<20,Ss=1<<21,As=1<<22,Es=1<<23,Ga=1<<24,Ne=1<<25,Ts=1<<26,Va=1<<27,Wa=1<<28,Ha=1<<29,ke=1<<30,Ka=1<<31;var Xa=1<<25,Ya=1<<28,$a=1<<29,ja=1<<30,qa=1<<31,Za=K|q,Ja=K|Le|q|Ne|ke,Qa=K|Le|q,ec=K|dn|q|Ne|ke,tc=gs|it|st,nc=K|st|it,zs=K|Ne|ke|q|Ts,rc=xs|ws|_s|Ss|As|Es,ic=K|it|st|Ne|ke,sc=K|Le|q,oc=K|q,ac=K|Le|q|dn,cc=zs|ys,lc=Number.MAX_SAFE_INTEGER-1;var hn=256,bs=256,Ms=8192,Rs=2048,Ls=512,Ns=256,ks=hn*2,Ps=256,nt=32,fn=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Ms]="Sounds",e[e.Images=e.Sounds+Rs]="Images",e[e.Lights=e.Images+Ls]="Lights",e[e.ShadowLights=e.Lights+bs]="ShadowLights",e[e.Items=e.ShadowLights+Ps]="Items",e[e.PlayerSkins=e.Items+Ns]="PlayerSkins",e[e.General=e.PlayerSkins+hn]="General",e[e.WheelWeapons=e.General+ks]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+nt]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+nt]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+nt]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(fn||{}),uc=fn.MaxConfigStrings;var Os={...is};var dc=Object.freeze({aiflags:0,last_sighting:Os,trail_time:0,pausetime:0});var ot=[{name:"classname",type:"string",save:!0},{name:"spawnflags",type:"int",save:!0},{name:"target",type:"string",save:!0},{name:"targetname",type:"string",save:!0},{name:"killtarget",type:"string",save:!0},{name:"team",type:"string",save:!0},{name:"message",type:"string",save:!0},{name:"pathtarget",type:"string",save:!0},{name:"model",type:"string",save:!0},{name:"item",type:"string",save:!0},{name:"map",type:"string",save:!0},{name:"inventory",type:"inventory",save:!0},{name:"origin",type:"vec3",save:!0},{name:"old_origin",type:"vec3",save:!0},{name:"velocity",type:"vec3",save:!0},{name:"avelocity",type:"vec3",save:!0},{name:"angles",type:"vec3",save:!0},{name:"pos1",type:"vec3",save:!0},{name:"pos2",type:"vec3",save:!0},{name:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",type:"vec3",save:!0},{name:"absmin",type:"vec3",save:!0},{name:"absmax",type:"vec3",save:!0},{name:"size",type:"vec3",save:!0},{name:"mass",type:"int",save:!0},{name:"gravity",type:"float",save:!0},{name:"movetype",type:"int",save:!0},{name:"movedir",type:"vec3",save:!0},{name:"modelindex",type:"int",save:!0},{name:"frame",type:"int",save:!0},{name:"skin",type:"int",save:!0},{name:"effects",type:"int",save:!0},{name:"renderfx",type:"int",save:!0},{name:"health",type:"int",save:!0},{name:"max_health",type:"int",save:!0},{name:"takedamage",type:"boolean",save:!0},{name:"dmg",type:"int",save:!0},{name:"speed",type:"float",save:!0},{name:"accel",type:"float",save:!0},{name:"decel",type:"float",save:!0},{name:"height",type:"float",save:!0},{name:"deadflag",type:"int",save:!0},{name:"count",type:"int",save:!0},{name:"wait",type:"float",save:!0},{name:"delay",type:"float",save:!0},{name:"timestamp",type:"float",save:!0},{name:"lip",type:"int",save:!0},{name:"state",type:"int",save:!0},{name:"sounds",type:"int",save:!0},{name:"noise_index",type:"int",save:!0},{name:"fly_sound_debounce_time",type:"float",save:!0},{name:"enemy",type:"entity",save:!0},{name:"movetarget",type:"entity",save:!0},{name:"target_ent",type:"entity",save:!0},{name:"goalentity",type:"entity",save:!0},{name:"ideal_yaw",type:"float",save:!0},{name:"yaw_speed",type:"float",save:!0},{name:"search_time",type:"float",save:!0},{name:"attack_finished_time",type:"float",save:!0},{name:"pain_finished_time",type:"float",save:!0},{name:"trail_time",type:"float",save:!0},{name:"groundentity",type:"entity",save:!0},{name:"groundentity_linkcount",type:"int",save:!0},{name:"waterlevel",type:"int",save:!0},{name:"watertype",type:"int",save:!0},{name:"nextthink",type:"float",save:!0},{name:"solid",type:"int",save:!0},{name:"flags",type:"int",save:!0},{name:"svflags",type:"int",save:!0},{name:"think",type:"callback",save:!1},{name:"touch",type:"callback",save:!1},{name:"use",type:"callback",save:!1},{name:"blocked",type:"callback",save:!1},{name:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}];var Is=ot.filter(e=>e.save||e.type==="callback"),hc=new Map(Is.map(e=>[e.name,e]));var fc=1/40;var mn=(e=>(e[e.Bullets=0]="Bullets",e[e.Shells=1]="Shells",e[e.Rockets=2]="Rockets",e[e.Grenades=3]="Grenades",e[e.Cells=4]="Cells",e[e.Slugs=5]="Slugs",e))(mn||{}),mc=Object.keys(mn).length/2;var pn={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:"blaster",ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:"shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:"super_shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:"machinegun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:"chaingun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:"grenade_launcher",ammoType:3,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:"rocket_launcher",ammoType:2,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:"hyperblaster",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:"railgun",ammoType:5,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:"bfg10k",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:1}};var pc=1<<24;function Cs(e,t){if(t===0)return{x:0,y:0,z:0};let n=cs(e);return{x:Math.cos(n)*t,y:Math.sin(n)*t,z:0}}function at(e,t,n){let r=Cs(t,n),i=e.origin;return i.x+=r.x,i.y+=r.y,i.z+=r.z,!0}function Pe(e,t){let n=an(e.angles.y),r=e.ideal_yaw;if(n===r){e.angles.y=n;return}let i=e.yaw_speed*t*10,s=r-n;r>n?s>=180&&(s-=360):s<=-180&&(s+=360),s>i?s=i:s<-i&&(s=-i),e.angles.y=an(n+s)}function ct(e,t){if(!t)return;let n={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=us(n)}function Fs(e,t){Pe(e,t)}function Ds(e,t,n){ct(e,e.goalentity),Pe(e,n),t!==0&&at(e,e.angles.y,t)}function Us(e,t,n){ct(e,e.enemy??e.goalentity),Pe(e,n),t!==0&&at(e,e.angles.y,t)}function Bs(e,t,n){ct(e,e.enemy),Pe(e,n),t!==0&&at(e,e.angles.y,t)}var Oe=.1;function Gs(e,t){Fs(e,Oe)}function Vs(e,t){Ds(e,t,Oe)}function Ws(e,t){Us(e,t,Oe)}function Hs(e,t){Bs(e,t,Oe)}var lt,vn,gn,Ks;function Xs(e){e.monsterinfo.current_move=lt}function Ys(e){e.monsterinfo.current_move=vn}function yn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=gn:e.monsterinfo.current_move=lt}function $s(e){}var js=Array.from({length:30},()=>({ai:Gs,dist:0}));lt={firstframe:0,lastframe:29,frames:js,endfunc:Xs};var qs=Array.from({length:40},()=>({ai:Vs,dist:2}));vn={firstframe:30,lastframe:69,frames:qs,endfunc:Ys};var Zs=Array.from({length:20},()=>({ai:Ws,dist:10}));gn={firstframe:70,lastframe:89,frames:Zs,endfunc:yn};var Js=Array.from({length:10},(e,t)=>({ai:Hs,dist:0,think:t===5?$s:null}));Ks={firstframe:90,lastframe:99,frames:Js,endfunc:yn};var vc=new Map(ot.map(e=>[e.name,e]));var rt=2,Qs=1;function D(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function O(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function be(e,t,n){return e===void 0?n:O(e,t)}function Re(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function Me(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let n of e)O(n,`${t} element`);return e}function eo(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=D(e,"level");return{frameNumber:be(t.frameNumber,"level.frameNumber",0),timeSeconds:be(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:be(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:be(t.deltaSeconds,"level.deltaSeconds",0)}}function to(e){if(e===void 0)return new vs().getState();let t=D(e,"rng"),n=D(t.mt,"rng.mt"),r=Me(n.state,"rng.mt.state");return{mt:{index:O(n.index,"rng.mt.index"),state:r}}}function no(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("thinks must be an array");return e.map((t,n)=>{let r=D(t,`thinks[${n}]`);return{time:O(r.time,`thinks[${n}].time`),entityIndex:O(r.entityIndex,`thinks[${n}].entityIndex`)}})}function ro(e){if(e===void 0)return{};let t=D(e,"entity.fields"),n={};for(let[r,i]of Object.entries(t)){if(i===null){n[r]=null;continue}switch(typeof i){case"number":case"string":case"boolean":n[r]=i;break;default:{if(!Array.isArray(i)){let s=D(i,r),o={};for(let[a,c]of Object.entries(s))o[a]=O(c,`${r}.${a}`);n[r]=o;break}if(Array.isArray(i)&&i.length===3){let[s,o,a]=i;n[r]=[O(s,`${r}[0]`),O(o,`${r}[1]`),O(a,`${r}[2]`)];break}throw new Error(`Unsupported entity field value for ${r}`)}}}return n}function io(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,n)=>{let r=D(t,`entities[${n}]`);return{index:O(r.index,`entities[${n}].index`),fields:ro(r.fields)}})}function so(e){let t=D(e,"pool");return{capacity:O(t.capacity,"pool.capacity"),activeOrder:Me(t.activeOrder,"pool.activeOrder"),freeList:Me(t.freeList,"pool.freeList"),pendingFree:Me(t.pendingFree,"pool.pendingFree")}}function oo(e){let t=D(e,"entities");return{timeSeconds:O(t.timeSeconds,"entities.timeSeconds"),pool:so(t.pool),entities:io(t.entities),thinks:no(t.thinks)}}function ao(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("cvars must be an array");return e.map((t,n)=>{let r=D(t,`cvars[${n}]`);return{name:Re(r.name,`cvars[${n}].name`),value:Re(r.value,`cvars[${n}].value`),flags:O(r.flags,`cvars[${n}].flags`)}})}function co(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,n)=>Re(t,`configstrings[${n}]`))}function lo(e){return e===void 0?{}:D(e,"gameState")}function xn(e,t={}){let{allowNewerVersion:n=!0}=t,r=typeof e=="string"?JSON.parse(e):e,i=D(r,"save"),s=i.version??rt,o=O(s,"version");if(o<Qs)throw new Error(`Unsupported save version ${o}`);if(o>rt&&!n)throw new Error(`Save version ${o} is newer than supported ${rt}`);return{version:o,timestamp:O(i.timestamp,"timestamp"),map:Re(i.map,"map"),difficulty:O(i.difficulty,"difficulty"),playtimeSeconds:O(i.playtimeSeconds,"playtimeSeconds"),gameState:lo(i.gameState),level:eo(i.level),rng:to(i.rng),entities:oo(i.entities),cvars:ao(i.cvars),configstrings:co(i.configstrings),player:i.player?i.player:void 0}}var gc=new Set(ot.filter(e=>e.save).map(e=>e.name));var cn=globalThis.TextEncoder;function ie(e){return xn({...e},{allowNewerVersion:!0})}function uo(e){return cn?new cn().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var ho=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:ie(e.save)};this.records.set(e.id,t)}async get(e){let t=this.records.get(e);return t?{id:t.id,metadata:{...t.metadata},save:ie(t.save)}:null}async delete(e){return this.records.delete(e)}async list(){return Array.from(this.records.values()).map(e=>({id:e.id,metadata:{...e.metadata},save:ie(e.save)}))}},fo=class{constructor(e,t,n){this.indexedDB=e,this.dbName=t,this.storeName=n,this.db=null}async init(){this.db||(this.db=await new Promise((e,t)=>{let n=this.indexedDB.open(this.dbName,1);n.onupgradeneeded=()=>{n.result.createObjectStore(this.storeName,{keyPath:"id"})},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB")),n.onsuccess=()=>e(n.result)}))}async runTransaction(e,t){await this.init();let n=this.db;return new Promise((r,i)=>{let o=n.transaction(this.storeName,e).objectStore(this.storeName),a=t(o);a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error??new Error("IndexedDB request failed"))})}async put(e){await this.runTransaction("readwrite",t=>t.put(e))}async get(e){let t=await this.runTransaction("readonly",n=>n.get(e));return t?{id:t.id,metadata:{...t.metadata},save:ie(t.save)}:null}async delete(e){return await this.get(e)?(await this.runTransaction("readwrite",n=>n.delete(e)),!0):!1}async list(){return(await this.runTransaction("readonly",t=>t.getAll())).map(t=>({id:t.id,metadata:{...t.metadata},save:ie(t.save)}))}},ut=class he{constructor(t={}){let{dbName:n=he.DEFAULT_DB_NAME,storeName:r=he.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new fo(i,n,r):this.adapter=new ho}async save(t,n,r={}){let i=ie(n),s={id:t,name:r.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:uo(i)};return await this.adapter.init(),await this.adapter.put({id:t,metadata:s,save:i}),s}async load(t,n={}){await this.adapter.init();let r=await this.adapter.get(t);if(!r)throw new Error(`Save slot ${t} not found`);return xn(r.save,n)}async delete(t){return await this.adapter.init(),this.adapter.delete(t)}async list(){return await this.adapter.init(),(await this.adapter.list()).map(n=>({...n.metadata})).sort((n,r)=>r.timestamp-n.timestamp||n.id.localeCompare(r.id))}async quickSave(t){return this.save(he.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(he.QUICK_SLOT,t)}};ut.DEFAULT_DB_NAME="quake2ts-saves";ut.DEFAULT_STORE="saves";ut.QUICK_SLOT="quicksave";var wn=new Map;var _n=(e,t)=>{if(!t)return;let n=t.inventory.currentWeapon;if(n){let i=Object.values(pn).find(s=>s.weaponId===n);if(i){let s=`w_${i.id.substring(7)}`,o=wn.get(s);o&&e.drawPic(F.WEAPON_ICON_X,F.WEAPON_ICON_Y,o)}}let r=F.POWERUP_X;for(let[i,s]of t.inventory.powerups.entries())if(s&&s>0){let o=`p_${i}`,a=wn.get(o);a&&(e.drawPic(r,F.POWERUP_Y,a),r-=a.width+4)}};var Ie=new Map;var Sn=(e,t)=>{if(!t.damageIndicators)return;let n=e.width,r=e.height,{forward:i,right:s,up:o}=ue(t.viewAngles);for(let a of t.damageIndicators){let{direction:c,strength:u}=a,l={...c},d=Math.sqrt(l.x*l.x+l.y*l.y+l.z*l.z);d>0&&(l.x/=d,l.y/=d,l.z/=d);let h=X(l,s),m=X(l,i),p=Math.atan2(m,h)*180/Math.PI,v,f=0,g=0;p>-45&&p<=45?(v=Ie.get("d_right"),f=n-(v?.width||0),g=(r-(v?.height||0))/2):p>45&&p<=135?(v=Ie.get("d_up"),f=(n-(v?.width||0))/2,g=0):p>135||p<=-135?(v=Ie.get("d_left"),f=0,g=(r-(v?.height||0))/2):(v=Ie.get("d_down"),f=(n-(v?.width||0))/2,g=r-(v?.height||0)),v&&e.drawPic(f,g,v)}};var An=(e,t)=>{let n=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],r=10;for(let i of n)e.drawString(10,r,i),r+=10};var dt=[],ht=0;var En=(e,t,n,r,i,s,o)=>{e.begin2D(),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]),Te(e,F.HEALTH_X,F.HEALTH_Y,r,dt,ht),Te(e,F.ARMOR_X,F.ARMOR_Y,i,dt,ht),Te(e,F.AMMO_X,F.AMMO_Y,s,dt,ht),_n(e,n),Sn(e,t),An(e,o),sn(e,e.width,e.height),e.end2D()};var mo=[{code:"KeyW",command:"+forward"},{code:"ArrowUp",command:"+forward"},{code:"KeyS",command:"+back"},{code:"ArrowDown",command:"+back"},{code:"KeyA",command:"+moveleft"},{code:"KeyD",command:"+moveright"},{code:"Space",command:"+jump"},{code:"ControlLeft",command:"+crouch"},{code:"ShiftLeft",command:"+speed"},{code:"Mouse1",command:"+attack"},{code:"Mouse2",command:"+use"},{code:"Mouse3",command:"+zoom"},{code:"ArrowLeft",command:"+left"},{code:"ArrowRight",command:"+right"},{code:"PageUp",command:"+lookup"},{code:"PageDown",command:"+lookdown"},{code:"Gamepad0-Button7",command:"+attack"},{code:"Gamepad0-Button6",command:"+zoom"},{code:"Gamepad0-Button0",command:"+jump"},{code:"Gamepad0-Button1",command:"+crouch"},{code:"Gamepad0-Button2",command:"+use"},{code:"Gamepad0-Button4",command:"prevweapon"},{code:"Gamepad0-Button5",command:"nextweapon"},{code:"Digit1",command:"weapon 1"},{code:"Digit2",command:"weapon 2"},{code:"Digit3",command:"weapon 3"},{code:"Digit4",command:"weapon 4"},{code:"Digit5",command:"weapon 5"},{code:"Digit6",command:"weapon 6"},{code:"Digit7",command:"weapon 7"},{code:"Digit8",command:"weapon 8"},{code:"Digit9",command:"weapon 9"},{code:"Digit0",command:"weapon 10"}],J=class{constructor(t=mo){this.bindings=new Map;for(let n of t)this.bind(n.code,n.command)}bind(t,n){this.bindings.set(t,n)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function Tn(){return new J}function ft(e){return e}function fe(e){return e.trim().toLowerCase()}var po=250,mt=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,n){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=n,!0):!1)}release(t,n){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=n-this.downTime,this.downTime=0,!0):!1}sample(t,n){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let r=this.msec;this.activeCodes.size>0&&(r+=n-this.downTime,this.downTime=n),this.msec=0;let i=Math.min(r/t,1),s=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:s,fraction:i}}},Ce=(g=>(g.Forward="+forward",g.Back="+back",g.MoveLeft="+moveleft",g.MoveRight="+moveright",g.MoveUp="+moveup",g.MoveDown="+movedown",g.Jump="+jump",g.Crouch="+crouch",g.Attack="+attack",g.Use="+use",g.Holster="+holster",g.TurnLeft="+left",g.TurnRight="+right",g.LookUp="+lookup",g.LookDown="+lookdown",g.SpeedModifier="+speed",g.Zoom="+zoom",g))(Ce||{}),vo={"+attack":W.Attack,"+use":W.Use,"+holster":W.Holster,"+jump":W.Jump,"+crouch":W.Crouch},go=new Map(Object.values(Ce).map(e=>[fe(e),e]));function yo(e){return go.get(fe(e))}function me(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var se=class{constructor(t={},n=new J){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=n,this.forwardSpeed=t.forwardSpeed??jt,this.sideSpeed=t.sideSpeed??qt,this.upSpeed=t.upSpeed??Zt,this.yawSpeed=t.yawSpeed??Jt,this.pitchSpeed=t.pitchSpeed??Qt,this.sensitivity=t.sensitivity??en,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,n=me()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!0,r,n)}handleKeyUp(t,n=me()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!1,r,n)}handleMouseButtonDown(t,n=me()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!0,r,n)}handleMouseButtonUp(t,n=me()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!1,r,n)}handleMouseMove(t,n){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+n})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,n=me(),r){this.pollGamepads(n),this.applyTouchState(n);let i=this.yawSpeed*t/1e3,s=this.pitchSpeed*t/1e3,o=this.sample("+left",t,n),a=this.sample("+right",t,n),c=this.sample("+lookup",t,n),l={x:(this.sample("+lookdown",t,n).fraction-c.fraction)*s,y:(a.fraction-o.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let M=this.gamepadLook.y*(this.invertGamepadY?-1:1);l={x:l.x+M*s*this.gamepadLookScale,y:l.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let M=this.touchLook.y*(this.invertMouseY?-1:1);l={x:l.x+M*s,y:l.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let M=this.sampleMouseDelta(),L=nn(M,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});l={x:l.x+L.x,y:l.y+L.y,z:0}}let d=tn(this.viewAngles,l);this.viewAngles=d;let h=this.sample("+forward",t,n),m=this.sample("+back",t,n),p=this.sample("+moveleft",t,n),v=this.sample("+moveright",t,n),f=this.sample("+moveup",t,n),g=this.sample("+movedown",t,n),S=this.sample("+speed",t,n),_=this.sample("+jump",t,n),w=this.sample("+crouch",t,n),y=this.runByDefault?S.active?.5:1:S.active?1:.5,x=this.forwardSpeed*(h.fraction-m.fraction)*y,T=this.sideSpeed*(v.fraction-p.fraction)*y,E=this.upSpeed*(f.fraction-g.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(x+=this.forwardSpeed*this.gamepadMove.y*y,T+=this.sideSpeed*this.gamepadMove.x*y),(this.touchMove.x!==0||this.touchMove.y!==0)&&(x+=this.forwardSpeed*this.touchMove.y*y,T+=this.sideSpeed*this.touchMove.x*y),this.jumpAddsUpMove&&_.fraction>0&&(E+=this.upSpeed*_.fraction),this.crouchAddsDownMove&&w.fraction>0&&(E-=this.upSpeed*w.fraction),x=this.clampMove(x,this.forwardSpeed),T=this.clampMove(T,this.sideSpeed),E=this.clampMove(E,this.upSpeed);let z=this.collectButtonBits(t,n),A=Math.min(Math.max(Math.round(t),1),po);return(this.anyPressed||z!==W.None)&&(z|=W.Any),this.anyPressed=!1,{msec:A,buttons:z,angles:{...this.viewAngles},forwardmove:x,sidemove:T,upmove:E,serverFrame:r}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let n=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let r=new Set;for(let i of n){if(!i||i.connected===!1)continue;let s=i.index??0,o=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(o[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(o[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(o[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(o[3]??0))};let a=i.buttons??[];for(let c=0;c<a.length;c++){let u=a[c];if(!u)continue;let l=u.pressed||u.value>this.gamepadDeadZone,d=this.gamepadButtonCode(s,c);l&&r.add(d);let h=this.gamepadButtons.get(d)??!1;l!==h&&(this.applyCommand(this.bindings.getBinding(d),l,d,t),this.gamepadButtons.set(d,l))}}for(let[i,s]of this.gamepadButtons.entries())s&&!r.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let n=this.pendingTouchState;if(n&&(this.pendingTouchState=void 0,n.move&&(this.touchMove={x:this.clampAnalog(n.move.x),y:this.clampAnalog(n.move.y)}),n.look&&(this.touchLook={x:this.clampAnalog(n.look.x),y:this.clampAnalog(n.look.y)}),n.buttons))for(let[r,i]of Object.entries(n.buttons)){if(i===void 0)continue;let s=this.touchButtons.get(r)??!1;i!==s&&(this.applyCommand(r,i,this.touchButtonCode(r),t),this.touchButtons.set(r,i))}}applyCommand(t,n,r,i){if(!t)return;let s=yo(t);if(s){let o=this.lookupButton(s);n?(o.press(r,i)&&this.commandQueue.push(s),this.anyPressed=!0):o.release(r,i)&&this.commandQueue.push(s.replace("+","-"))}else n&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let n={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,n}collectButtonBits(t,n){let r=W.None;for(let[i,s]of Object.entries(vo)){let o=this.sample(i,t,n);(o.fraction>0||o.active||o.wasPressed)&&(r|=s)}return r}lookupButton(t){let n=this.buttons.get(t);return n||(n=new mt,this.buttons.set(t,n)),n}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,n,r){return this.lookupButton(t).sample(n,r)}gamepadButtonCode(t,n){return`Gamepad${t}-Button${n}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,n){return Math.abs(n)>Math.abs(t)?n:t}clampMove(t,n){return Math.max(-n,Math.min(n,t))}};var Fe=class{constructor(t,n=new se(t)){this.queued=[];this.controller=n}captureFrame(t,n,r){let i=this.controller.buildCommand(t,n,r),s=this.controller.consumeConsoleCommands(),o={command:i,console:s};return this.queued.push(o),o}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function xo(e){let t=new ne(e.engine.trace),n=new re,r,i,s,o;return{init(a){r=a,a?.state&&t.setAuthoritative(a),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(a){return t.enqueueCommand(a)},render(a){a.latest?.state&&(t.setAuthoritative(a.latest),r=a.latest),a.previous?.state&&a.latest?.state?i=Ee(a.previous.state,a.latest.state,a.alpha):i=a.latest?.state??a.previous?.state??t.getPredictedState();let c=a.latest&&a.previous?Math.max(0,a.latest.timeMs-a.previous.timeMs):0;if(s=n.sample(i,c),i){let{origin:l,viewangles:d}=i;o=new Ct,o.position=N.fromValues(l.x,l.y,l.z),o.angles=N.fromValues(d.x,d.y,d.z),o.fov=90,o.aspect=4/3}let u={};if(e.engine.renderer&&i&&i.client){let l={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},d={origin:i.origin,velocity:i.velocity,viewAngles:i.viewangles,onGround:V(i.pmFlags,C.OnGround),waterLevel:i.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:0,damageIndicators:[]};En(e.engine.renderer,d,i.client,i.health,i.armor,i.ammo,l)}return u},shutdown(){r=void 0,i=void 0},get prediction(){return t},get lastRendered(){return i},get view(){return n},get lastView(){return s},get camera(){return o}}}return Ln(wo);})();
1
+ "use strict";var Quake2Client=(()=>{var Ge=Object.defineProperty;var Ir=Object.getOwnPropertyDescriptor;var Cr=Object.getOwnPropertyNames;var Dr=Object.prototype.hasOwnProperty;var Ve=(e,t)=>{for(var r in t)Ge(e,r,{get:t[r],enumerable:!0})},Br=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Cr(t))!Dr.call(e,i)&&i!==r&&Ge(e,i,{get:()=>t[i],enumerable:!(n=Ir(t,i))||n.enumerable});return e};var Fr=e=>Br(Ge({},"__esModule",{value:!0}),e);var Ja={};Ve(Ja,{ClientPrediction:()=>ie,InputAction:()=>Fe,InputBindings:()=>ee,InputCommandBuffer:()=>Ue,InputController:()=>oe,ViewEffects:()=>se,createClient:()=>Za,createDefaultBindings:()=>kr,defaultPredictionState:()=>Q,interpolatePredictionState:()=>Le,normalizeCommand:()=>pe,normalizeInputCode:()=>gt});var M=1e-6,D=typeof Float32Array<"u"?Float32Array:Array,He=Math.random;function ve(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var eo=Math.PI/180,to=180/Math.PI;var I={};Ve(I,{add:()=>zn,adjoint:()=>Yr,clone:()=>Gr,copy:()=>Vr,create:()=>Ur,decompose:()=>hn,determinant:()=>$r,equals:()=>Rn,exactEquals:()=>bn,frob:()=>En,fromQuat:()=>mn,fromQuat2:()=>cn,fromRotation:()=>nn,fromRotationTranslation:()=>At,fromRotationTranslationScale:()=>dn,fromRotationTranslationScaleOrigin:()=>fn,fromScaling:()=>rn,fromTranslation:()=>tn,fromValues:()=>Hr,fromXRotation:()=>sn,fromYRotation:()=>an,fromZRotation:()=>on,frustum:()=>pn,getRotation:()=>un,getScaling:()=>Et,getTranslation:()=>ln,identity:()=>_t,invert:()=>Xr,lookAt:()=>_n,mul:()=>Mn,multiply:()=>wt,multiplyScalar:()=>Tn,multiplyScalarAndAdd:()=>Ln,ortho:()=>xn,orthoNO:()=>Tt,orthoZO:()=>Sn,perspective:()=>gn,perspectiveFromFieldOfView:()=>yn,perspectiveNO:()=>zt,perspectiveZO:()=>vn,rotate:()=>Zr,rotateX:()=>Jr,rotateY:()=>Qr,rotateZ:()=>en,scale:()=>qr,set:()=>Wr,str:()=>An,sub:()=>Nn,subtract:()=>Lt,targetTo:()=>wn,translate:()=>jr,transpose:()=>Kr});function Ur(){var e=new D(16);return D!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function Gr(e){var t=new D(16);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 Vr(e,t){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 Hr(e,t,r,n,i,s,a,o,c,u,l,h,d,m,p,g){var f=new D(16);return f[0]=e,f[1]=t,f[2]=r,f[3]=n,f[4]=i,f[5]=s,f[6]=a,f[7]=o,f[8]=c,f[9]=u,f[10]=l,f[11]=h,f[12]=d,f[13]=m,f[14]=p,f[15]=g,f}function Wr(e,t,r,n,i,s,a,o,c,u,l,h,d,m,p,g,f){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=a,e[6]=o,e[7]=c,e[8]=u,e[9]=l,e[10]=h,e[11]=d,e[12]=m,e[13]=p,e[14]=g,e[15]=f,e}function _t(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Kr(e,t){if(e===t){var r=t[1],n=t[2],i=t[3],s=t[6],a=t[7],o=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=s,e[11]=t[14],e[12]=i,e[13]=a,e[14]=o}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function Xr(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],u=t[7],l=t[8],h=t[9],d=t[10],m=t[11],p=t[12],g=t[13],f=t[14],v=t[15],A=r*o-n*a,_=r*c-i*a,S=r*u-s*a,y=n*c-i*o,x=n*u-s*o,T=i*u-s*c,z=l*g-h*p,L=l*f-d*p,E=l*v-m*p,R=h*f-d*g,N=h*v-m*g,k=d*v-m*f,b=A*k-_*N+S*R+y*E-x*L+T*z;return b?(b=1/b,e[0]=(o*k-c*N+u*R)*b,e[1]=(i*N-n*k-s*R)*b,e[2]=(g*T-f*x+v*y)*b,e[3]=(d*x-h*T-m*y)*b,e[4]=(c*E-a*k-u*L)*b,e[5]=(r*k-i*E+s*L)*b,e[6]=(f*S-p*T-v*_)*b,e[7]=(l*T-d*S+m*_)*b,e[8]=(a*N-o*E+u*z)*b,e[9]=(n*E-r*N-s*z)*b,e[10]=(p*x-g*S+v*A)*b,e[11]=(h*S-l*x-m*A)*b,e[12]=(o*L-a*R-c*z)*b,e[13]=(r*R-n*L+i*z)*b,e[14]=(g*_-p*y-f*A)*b,e[15]=(l*y-h*_+d*A)*b,e):null}function Yr(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],u=t[7],l=t[8],h=t[9],d=t[10],m=t[11],p=t[12],g=t[13],f=t[14],v=t[15],A=r*o-n*a,_=r*c-i*a,S=r*u-s*a,y=n*c-i*o,x=n*u-s*o,T=i*u-s*c,z=l*g-h*p,L=l*f-d*p,E=l*v-m*p,R=h*f-d*g,N=h*v-m*g,k=d*v-m*f;return e[0]=o*k-c*N+u*R,e[1]=i*N-n*k-s*R,e[2]=g*T-f*x+v*y,e[3]=d*x-h*T-m*y,e[4]=c*E-a*k-u*L,e[5]=r*k-i*E+s*L,e[6]=f*S-p*T-v*_,e[7]=l*T-d*S+m*_,e[8]=a*N-o*E+u*z,e[9]=n*E-r*N-s*z,e[10]=p*x-g*S+v*A,e[11]=h*S-l*x-m*A,e[12]=o*L-a*R-c*z,e[13]=r*R-n*L+i*z,e[14]=g*_-p*y-f*A,e[15]=l*y-h*_+d*A,e}function $r(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],a=e[5],o=e[6],c=e[7],u=e[8],l=e[9],h=e[10],d=e[11],m=e[12],p=e[13],g=e[14],f=e[15],v=t*a-r*s,A=t*o-n*s,_=r*o-n*a,S=u*p-l*m,y=u*g-h*m,x=l*g-h*p,T=t*x-r*y+n*S,z=s*x-a*y+o*S,L=u*_-l*A+h*v,E=m*_-p*A+g*v;return c*T-i*z+f*L-d*E}function wt(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],u=t[6],l=t[7],h=t[8],d=t[9],m=t[10],p=t[11],g=t[12],f=t[13],v=t[14],A=t[15],_=r[0],S=r[1],y=r[2],x=r[3];return e[0]=_*n+S*o+y*h+x*g,e[1]=_*i+S*c+y*d+x*f,e[2]=_*s+S*u+y*m+x*v,e[3]=_*a+S*l+y*p+x*A,_=r[4],S=r[5],y=r[6],x=r[7],e[4]=_*n+S*o+y*h+x*g,e[5]=_*i+S*c+y*d+x*f,e[6]=_*s+S*u+y*m+x*v,e[7]=_*a+S*l+y*p+x*A,_=r[8],S=r[9],y=r[10],x=r[11],e[8]=_*n+S*o+y*h+x*g,e[9]=_*i+S*c+y*d+x*f,e[10]=_*s+S*u+y*m+x*v,e[11]=_*a+S*l+y*p+x*A,_=r[12],S=r[13],y=r[14],x=r[15],e[12]=_*n+S*o+y*h+x*g,e[13]=_*i+S*c+y*d+x*f,e[14]=_*s+S*u+y*m+x*v,e[15]=_*a+S*l+y*p+x*A,e}function jr(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,u,l,h,d,m,p,g,f,v;return t===e?(e[12]=t[0]*n+t[4]*i+t[8]*s+t[12],e[13]=t[1]*n+t[5]*i+t[9]*s+t[13],e[14]=t[2]*n+t[6]*i+t[10]*s+t[14],e[15]=t[3]*n+t[7]*i+t[11]*s+t[15]):(a=t[0],o=t[1],c=t[2],u=t[3],l=t[4],h=t[5],d=t[6],m=t[7],p=t[8],g=t[9],f=t[10],v=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=u,e[4]=l,e[5]=h,e[6]=d,e[7]=m,e[8]=p,e[9]=g,e[10]=f,e[11]=v,e[12]=a*n+l*i+p*s+t[12],e[13]=o*n+h*i+g*s+t[13],e[14]=c*n+d*i+f*s+t[14],e[15]=u*n+m*i+v*s+t[15]),e}function qr(e,t,r){var n=r[0],i=r[1],s=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*s,e[9]=t[9]*s,e[10]=t[10]*s,e[11]=t[11]*s,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Zr(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,u,l,h,d,m,p,g,f,v,A,_,S,y,x,T,z,L,E,R,N,k,b,G;return o<M?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),u=Math.cos(r),l=1-u,h=t[0],d=t[1],m=t[2],p=t[3],g=t[4],f=t[5],v=t[6],A=t[7],_=t[8],S=t[9],y=t[10],x=t[11],T=i*i*l+u,z=s*i*l+a*c,L=a*i*l-s*c,E=i*s*l-a*c,R=s*s*l+u,N=a*s*l+i*c,k=i*a*l+s*c,b=s*a*l-i*c,G=a*a*l+u,e[0]=h*T+g*z+_*L,e[1]=d*T+f*z+S*L,e[2]=m*T+v*z+y*L,e[3]=p*T+A*z+x*L,e[4]=h*E+g*R+_*N,e[5]=d*E+f*R+S*N,e[6]=m*E+v*R+y*N,e[7]=p*E+A*R+x*N,e[8]=h*k+g*b+_*G,e[9]=d*k+f*b+S*G,e[10]=m*k+v*b+y*G,e[11]=p*k+A*b+x*G,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Jr(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],u=t[8],l=t[9],h=t[10],d=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+u*n,e[5]=a*i+l*n,e[6]=o*i+h*n,e[7]=c*i+d*n,e[8]=u*i-s*n,e[9]=l*i-a*n,e[10]=h*i-o*n,e[11]=d*i-c*n,e}function Qr(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],u=t[8],l=t[9],h=t[10],d=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-u*n,e[1]=a*i-l*n,e[2]=o*i-h*n,e[3]=c*i-d*n,e[8]=s*n+u*i,e[9]=a*n+l*i,e[10]=o*n+h*i,e[11]=c*n+d*i,e}function en(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],u=t[4],l=t[5],h=t[6],d=t[7];return t!==e&&(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[0]=s*i+u*n,e[1]=a*i+l*n,e[2]=o*i+h*n,e[3]=c*i+d*n,e[4]=u*i-s*n,e[5]=l*i-a*n,e[6]=h*i-o*n,e[7]=d*i-c*n,e}function tn(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function rn(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function nn(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,u;return a<M?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),u=1-c,e[0]=n*n*u+c,e[1]=i*n*u+s*o,e[2]=s*n*u-i*o,e[3]=0,e[4]=n*i*u-s*o,e[5]=i*i*u+c,e[6]=s*i*u+n*o,e[7]=0,e[8]=n*s*u+i*o,e[9]=i*s*u-n*o,e[10]=s*s*u+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function sn(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=n,e[6]=r,e[7]=0,e[8]=0,e[9]=-r,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function an(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=0,e[2]=-r,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=r,e[9]=0,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function on(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=0,e[4]=-r,e[5]=n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function At(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,u=s+s,l=n*o,h=n*c,d=n*u,m=i*c,p=i*u,g=s*u,f=a*o,v=a*c,A=a*u;return e[0]=1-(m+g),e[1]=h+A,e[2]=d-v,e[3]=0,e[4]=h-A,e[5]=1-(l+g),e[6]=p+f,e[7]=0,e[8]=d+v,e[9]=p-f,e[10]=1-(l+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function cn(e,t){var r=new D(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],u=t[6],l=t[7],h=n*n+i*i+s*s+a*a;return h>0?(r[0]=(o*a+l*n+c*s-u*i)*2/h,r[1]=(c*a+l*i+u*n-o*s)*2/h,r[2]=(u*a+l*s+o*i-c*n)*2/h):(r[0]=(o*a+l*n+c*s-u*i)*2,r[1]=(c*a+l*i+u*n-o*s)*2,r[2]=(u*a+l*s+o*i-c*n)*2),At(e,t,r),e}function ln(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Et(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],a=t[5],o=t[6],c=t[8],u=t[9],l=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+a*a+o*o),e[2]=Math.sqrt(c*c+u*u+l*l),e}function un(e,t){var r=new D(3);Et(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],a=t[0]*n,o=t[1]*i,c=t[2]*s,u=t[4]*n,l=t[5]*i,h=t[6]*s,d=t[8]*n,m=t[9]*i,p=t[10]*s,g=a+l+p,f=0;return g>0?(f=Math.sqrt(g+1)*2,e[3]=.25*f,e[0]=(h-m)/f,e[1]=(d-c)/f,e[2]=(o-u)/f):a>l&&a>p?(f=Math.sqrt(1+a-l-p)*2,e[3]=(h-m)/f,e[0]=.25*f,e[1]=(o+u)/f,e[2]=(d+c)/f):l>p?(f=Math.sqrt(1+l-a-p)*2,e[3]=(d-c)/f,e[0]=(o+u)/f,e[1]=.25*f,e[2]=(h+m)/f):(f=Math.sqrt(1+p-a-l)*2,e[3]=(o-u)/f,e[0]=(d+c)/f,e[1]=(h+m)/f,e[2]=.25*f),e}function hn(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],c=n[5],u=n[6],l=n[8],h=n[9],d=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+u*u),r[2]=Math.sqrt(l*l+h*h+d*d);var m=1/r[0],p=1/r[1],g=1/r[2],f=i*m,v=s*p,A=a*g,_=o*m,S=c*p,y=u*g,x=l*m,T=h*p,z=d*g,L=f+S+z,E=0;return L>0?(E=Math.sqrt(L+1)*2,e[3]=.25*E,e[0]=(y-T)/E,e[1]=(x-A)/E,e[2]=(v-_)/E):f>S&&f>z?(E=Math.sqrt(1+f-S-z)*2,e[3]=(y-T)/E,e[0]=.25*E,e[1]=(v+_)/E,e[2]=(x+A)/E):S>z?(E=Math.sqrt(1+S-f-z)*2,e[3]=(x-A)/E,e[0]=(v+_)/E,e[1]=.25*E,e[2]=(y+T)/E):(E=Math.sqrt(1+z-f-S)*2,e[3]=(v-_)/E,e[0]=(x+A)/E,e[1]=(y+T)/E,e[2]=.25*E),e}function dn(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,u=s+s,l=a+a,h=i*c,d=i*u,m=i*l,p=s*u,g=s*l,f=a*l,v=o*c,A=o*u,_=o*l,S=n[0],y=n[1],x=n[2];return e[0]=(1-(p+f))*S,e[1]=(d+_)*S,e[2]=(m-A)*S,e[3]=0,e[4]=(d-_)*y,e[5]=(1-(h+f))*y,e[6]=(g+v)*y,e[7]=0,e[8]=(m+A)*x,e[9]=(g-v)*x,e[10]=(1-(h+p))*x,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function fn(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],u=s+s,l=a+a,h=o+o,d=s*u,m=s*l,p=s*h,g=a*l,f=a*h,v=o*h,A=c*u,_=c*l,S=c*h,y=n[0],x=n[1],T=n[2],z=i[0],L=i[1],E=i[2],R=(1-(g+v))*y,N=(m+S)*y,k=(p-_)*y,b=(m-S)*x,G=(1-(d+v))*x,ce=(f+A)*x,le=(p+_)*T,yt=(f-A)*T,xt=(1-(d+g))*T;return e[0]=R,e[1]=N,e[2]=k,e[3]=0,e[4]=b,e[5]=G,e[6]=ce,e[7]=0,e[8]=le,e[9]=yt,e[10]=xt,e[11]=0,e[12]=r[0]+z-(R*z+b*L+le*E),e[13]=r[1]+L-(N*z+G*L+yt*E),e[14]=r[2]+E-(k*z+ce*L+xt*E),e[15]=1,e}function mn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,u=r*a,l=n*a,h=n*o,d=i*a,m=i*o,p=i*c,g=s*a,f=s*o,v=s*c;return e[0]=1-h-p,e[1]=l+v,e[2]=d-f,e[3]=0,e[4]=l-v,e[5]=1-u-p,e[6]=m+g,e[7]=0,e[8]=d+f,e[9]=m-g,e[10]=1-u-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function pn(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),u=1/(s-a);return e[0]=s*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(r+t)*o,e[9]=(i+n)*c,e[10]=(a+s)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*u,e[15]=0,e}function zt(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var a=1/(n-i);e[10]=(i+n)*a,e[14]=2*i*n*a}else e[10]=-1,e[14]=-2*n;return e}var gn=zt;function vn(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var a=1/(n-i);e[10]=i*a,e[14]=i*n*a}else e[10]=-1,e[14]=-n;return e}function yn(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),a=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(a+o),u=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=u,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*u*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function Tt(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),u=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*u,e[15]=1,e}var xn=Tt;function Sn(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),u=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=u,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*u,e[15]=1,e}function _n(e,t,r,n){var i,s,a,o,c,u,l,h,d,m,p=t[0],g=t[1],f=t[2],v=n[0],A=n[1],_=n[2],S=r[0],y=r[1],x=r[2];return Math.abs(p-S)<M&&Math.abs(g-y)<M&&Math.abs(f-x)<M?_t(e):(l=p-S,h=g-y,d=f-x,m=1/Math.sqrt(l*l+h*h+d*d),l*=m,h*=m,d*=m,i=A*d-_*h,s=_*l-v*d,a=v*h-A*l,m=Math.sqrt(i*i+s*s+a*a),m?(m=1/m,i*=m,s*=m,a*=m):(i=0,s=0,a=0),o=h*a-d*s,c=d*i-l*a,u=l*s-h*i,m=Math.sqrt(o*o+c*c+u*u),m?(m=1/m,o*=m,c*=m,u*=m):(o=0,c=0,u=0),e[0]=i,e[1]=o,e[2]=l,e[3]=0,e[4]=s,e[5]=c,e[6]=h,e[7]=0,e[8]=a,e[9]=u,e[10]=d,e[11]=0,e[12]=-(i*p+s*g+a*f),e[13]=-(o*p+c*g+u*f),e[14]=-(l*p+h*g+d*f),e[15]=1,e)}function wn(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],u=n[2],l=i-r[0],h=s-r[1],d=a-r[2],m=l*l+h*h+d*d;m>0&&(m=1/Math.sqrt(m),l*=m,h*=m,d*=m);var p=c*d-u*h,g=u*l-o*d,f=o*h-c*l;return m=p*p+g*g+f*f,m>0&&(m=1/Math.sqrt(m),p*=m,g*=m,f*=m),e[0]=p,e[1]=g,e[2]=f,e[3]=0,e[4]=h*f-d*g,e[5]=d*p-l*f,e[6]=l*g-h*p,e[7]=0,e[8]=l,e[9]=h,e[10]=d,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function An(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function En(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function zn(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function Lt(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function Tn(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function Ln(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function bn(e,t){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]}function Rn(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],u=e[7],l=e[8],h=e[9],d=e[10],m=e[11],p=e[12],g=e[13],f=e[14],v=e[15],A=t[0],_=t[1],S=t[2],y=t[3],x=t[4],T=t[5],z=t[6],L=t[7],E=t[8],R=t[9],N=t[10],k=t[11],b=t[12],G=t[13],ce=t[14],le=t[15];return Math.abs(r-A)<=M*Math.max(1,Math.abs(r),Math.abs(A))&&Math.abs(n-_)<=M*Math.max(1,Math.abs(n),Math.abs(_))&&Math.abs(i-S)<=M*Math.max(1,Math.abs(i),Math.abs(S))&&Math.abs(s-y)<=M*Math.max(1,Math.abs(s),Math.abs(y))&&Math.abs(a-x)<=M*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-T)<=M*Math.max(1,Math.abs(o),Math.abs(T))&&Math.abs(c-z)<=M*Math.max(1,Math.abs(c),Math.abs(z))&&Math.abs(u-L)<=M*Math.max(1,Math.abs(u),Math.abs(L))&&Math.abs(l-E)<=M*Math.max(1,Math.abs(l),Math.abs(E))&&Math.abs(h-R)<=M*Math.max(1,Math.abs(h),Math.abs(R))&&Math.abs(d-N)<=M*Math.max(1,Math.abs(d),Math.abs(N))&&Math.abs(m-k)<=M*Math.max(1,Math.abs(m),Math.abs(k))&&Math.abs(p-b)<=M*Math.max(1,Math.abs(p),Math.abs(b))&&Math.abs(g-G)<=M*Math.max(1,Math.abs(g),Math.abs(G))&&Math.abs(f-ce)<=M*Math.max(1,Math.abs(f),Math.abs(ce))&&Math.abs(v-le)<=M*Math.max(1,Math.abs(v),Math.abs(le))}var Mn=wt,Nn=Lt;var O={};Ve(O,{add:()=>Cn,angle:()=>si,bezier:()=>Zn,ceil:()=>Dn,clone:()=>Pn,copy:()=>kn,create:()=>bt,cross:()=>Yn,dist:()=>fi,distance:()=>Ot,div:()=>di,divide:()=>Pt,dot:()=>We,equals:()=>li,exactEquals:()=>ci,floor:()=>Bn,forEach:()=>vi,fromValues:()=>On,hermite:()=>qn,inverse:()=>Kn,len:()=>pi,length:()=>Rt,lerp:()=>$n,max:()=>Un,min:()=>Fn,mul:()=>hi,multiply:()=>Nt,negate:()=>Wn,normalize:()=>Xn,random:()=>Jn,rotateX:()=>ri,rotateY:()=>ni,rotateZ:()=>ii,round:()=>Gn,scale:()=>Vn,scaleAndAdd:()=>Hn,set:()=>In,slerp:()=>jn,sqrDist:()=>mi,sqrLen:()=>gi,squaredDistance:()=>kt,squaredLength:()=>It,str:()=>oi,sub:()=>ui,subtract:()=>Mt,transformMat3:()=>ei,transformMat4:()=>Qn,transformQuat:()=>ti,zero:()=>ai});function bt(){var e=new D(3);return D!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Pn(e){var t=new D(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Rt(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function On(e,t,r){var n=new D(3);return n[0]=e,n[1]=t,n[2]=r,n}function kn(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function In(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function Cn(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function Mt(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function Nt(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e}function Pt(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function Dn(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Bn(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Fn(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e[2]=Math.min(t[2],r[2]),e}function Un(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e[2]=Math.max(t[2],r[2]),e}function Gn(e,t){return e[0]=ve(t[0]),e[1]=ve(t[1]),e[2]=ve(t[2]),e}function Vn(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function Hn(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e}function Ot(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(r*r+n*n+i*i)}function kt(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return r*r+n*n+i*i}function It(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function Wn(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Kn(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Xn(e,t){var r=t[0],n=t[1],i=t[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function We(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Yn(e,t,r){var n=t[0],i=t[1],s=t[2],a=r[0],o=r[1],c=r[2];return e[0]=i*c-s*o,e[1]=s*a-n*c,e[2]=n*o-i*a,e}function $n(e,t,r,n){var i=t[0],s=t[1],a=t[2];return e[0]=i+n*(r[0]-i),e[1]=s+n*(r[1]-s),e[2]=a+n*(r[2]-a),e}function jn(e,t,r,n){var i=Math.acos(Math.min(Math.max(We(t,r),-1),1)),s=Math.sin(i),a=Math.sin((1-n)*i)/s,o=Math.sin(n*i)/s;return e[0]=a*t[0]+o*r[0],e[1]=a*t[1]+o*r[1],e[2]=a*t[2]+o*r[2],e}function qn(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,u=a*(s-1),l=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*u+i[0]*l,e[1]=t[1]*o+r[1]*c+n[1]*u+i[1]*l,e[2]=t[2]*o+r[2]*c+n[2]*u+i[2]*l,e}function Zn(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,u=o*a,l=3*s*o,h=3*c*a,d=c*s;return e[0]=t[0]*u+r[0]*l+n[0]*h+i[0]*d,e[1]=t[1]*u+r[1]*l+n[1]*h+i[1]*d,e[2]=t[2]*u+r[2]*l+n[2]*h+i[2]*d,e}function Jn(e,t){t=t===void 0?1:t;var r=He()*2*Math.PI,n=He()*2-1,i=Math.sqrt(1-n*n)*t;return e[0]=Math.cos(r)*i,e[1]=Math.sin(r)*i,e[2]=n*t,e}function Qn(e,t,r){var n=t[0],i=t[1],s=t[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];return a=a||1,e[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,e[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,e[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a,e}function ei(e,t,r){var n=t[0],i=t[1],s=t[2];return e[0]=n*r[0]+i*r[3]+s*r[6],e[1]=n*r[1]+i*r[4]+s*r[7],e[2]=n*r[2]+i*r[5]+s*r[8],e}function ti(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],u=t[2],l=i*u-s*c,h=s*o-n*u,d=n*c-i*o;return l=l+l,h=h+h,d=d+d,e[0]=o+a*l+i*d-s*h,e[1]=c+a*h+s*l-n*d,e[2]=u+a*d+n*h-i*l,e}function ri(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function ni(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function ii(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function si(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2],c=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),u=c&&We(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function ai(e){return e[0]=0,e[1]=0,e[2]=0,e}function oi(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function ci(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function li(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2];return Math.abs(r-s)<=M*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=M*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=M*Math.max(1,Math.abs(i),Math.abs(o))}var ui=Mt,hi=Nt,di=Pt,fi=Ot,mi=kt,pi=Rt,gi=It,vi=(function(){var e=bt();return function(t,r,n,i,s,a){var o,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,t.length):c=t.length,o=n;o<c;o+=r)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],s(e,e,a),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var no=Math.PI/180;var yi=Math.PI/180,io=180/Math.PI,ue=yi;var V=1,q=2;var $e=8,je=16,xi=32;var Si=16384;var xe=65536,Vt=1<<17,_i=1<<18,wi=1<<19,Ai=1<<20,Ei=1<<21,zi=1<<22,Ti=1<<23,so=1<<24,Se=1<<25,Li=1<<26,ao=1<<27,oo=1<<28,co=1<<29,_e=1<<30,lo=1<<31;var uo=1<<25,ho=1<<28,fo=1<<29,mo=1<<30,po=1<<31,go=V|q,vo=V|xe|q|Se|_e,yo=V|xe|q,xo=V|Vt|q|Se|_e,So=xi|$e|je,_o=V|je|$e,bi=V|Se|_e|q|Li,wo=_i|wi|Ai|Ei|zi|Ti,Ao=V|$e|je|Se|_e,Eo=V|xe|q,zo=V|q,To=V|xe|q|Vt,Lo=bi|Si,bo=Number.MAX_SAFE_INTEGER-1;var Ht=256,Ri=256,Mi=8192,Ni=2048,Pi=512,Oi=256,ki=Ht*2,Ii=256,Ke=32;var Wt=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Mi]="Sounds",e[e.Images=e.Sounds+Ni]="Images",e[e.Lights=e.Images+Pi]="Lights",e[e.ShadowLights=e.Lights+Ri]="ShadowLights",e[e.Items=e.ShadowLights+Ii]="Items",e[e.PlayerSkins=e.Items+Oi]="PlayerSkins",e[e.General=e.PlayerSkins+Ht]="General",e[e.WheelWeapons=e.General+ki]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ke]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ke]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ke]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Wt||{}),Ro=Wt.MaxConfigStrings;var P=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(P||{}),w=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(w||{}),Ci=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}hasMore(){return this.offset<this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){if(this.readByte()>=162){e.x=0,e.y=0,e.z=0;return}e.x=0,e.y=0,e.z=0}};function Di(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e}var Mo=Di();var No=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"}]);var Bi=19,Po=8+Bi*8;var Ye=4,Xe=7*Ye,Oo=[{index:0,size:3,type:5126,stride:Xe,offset:0},{index:1,size:2,type:5126,stride:Xe,offset:3*Ye},{index:2,size:2,type:5126,stride:Xe,offset:5*Ye}];var ko=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]);var Kt=class{constructor(){this._position=O.create(),this._angles=O.create(),this._bobAngles=O.create(),this._bobOffset=O.create(),this._kickAngles=O.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=I.create(),this._projectionMatrix=I.create(),this._viewProjectionMatrix=I.create(),this._dirty=!0}get position(){return this._position}set position(e){O.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){O.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){O.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){O.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){O.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let t=I.create();return I.perspective(t,e*ue,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;I.perspective(this._projectionMatrix,this._fov*ue,this._aspect,this._near,this._far);let e=I.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],r=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],n=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*ue,s=r*ue,a=n*ue,o=I.create();I.identity(o),I.rotateZ(o,o,-s),I.rotateY(o,o,-i),I.rotateX(o,o,-a);let c=I.create();I.multiply(c,e,o);let u=O.add(O.create(),this._position,this._bobOffset),l=O.negate(O.create(),u),h=O.create();O.transformMat4(h,l,o);let d=O.fromValues(h[1]||0,h[2]||0,h[0]||0);I.copy(this._viewMatrix,c),this._viewMatrix[12]=d[0],this._viewMatrix[13]=d[1],this._viewMatrix[14]=d[2],I.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Fi=class{constructor(e){this.buffer=e,this.view=new DataView(e),this.offset=0}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(this.offset+=4,e<0||e>262144)return console.warn(`DemoReader: Invalid block length ${e} at offset ${this.offset-4}`),null;if(this.offset+e>this.buffer.byteLength)return console.warn(`DemoReader: Incomplete block. Expected ${e} bytes, but only ${this.buffer.byteLength-this.offset} remain.`),null;let t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new Ci(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Ui=1,Gi=2,Vi=4,Hi=8,Wi=16,Ki=32;var Xi=128,Yi=256,$i=512,ji=1024,qi=2048,Ct=4096,Dt=16384,Zi=32768,Bt=65536,Ji=1<<17,Ft=1<<18,Ut=1<<19,Qi=1<<20,es=1<<21,ts=1<<22,rs=1<<23,ns=1<<24,Gt=1<<25,is=1<<26,ss=1<<27,ye=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0}),as=class{constructor(e){this.stream=e}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;switch(e){case P.nop:break;case P.disconnect:console.log("Server disconnected");break;case P.reconnect:console.log("Server reconnect");break;case P.print:let t=this.stream.readByte(),r=this.stream.readString();console.log(`[Server Print ${t}]: ${r}`);break;case P.serverdata:this.parseServerData();break;case P.configstring:this.parseConfigString();break;case P.spawnbaseline:this.parseSpawnBaseline();break;case P.centerprint:let n=this.stream.readString();console.log(`[Center Print]: ${n}`);break;case P.download:this.parseDownload();break;case P.frame:this.parseFrame();break;case P.packetentities:this.parsePacketEntities(!1);break;case P.deltapacketentities:this.parsePacketEntities(!0);break;case P.stufftext:let i=this.stream.readString();console.log(`[StuffText]: ${i}`);break;case P.layout:let s=this.stream.readString();break;case P.inventory:this.parseInventory();break;case P.sound:this.parseSound();break;case P.muzzleflash:this.parseMuzzleFlash();break;case P.muzzleflash2:this.parseMuzzleFlash2();break;case P.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${e}`);return}}}parseServerData(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();console.log(`Server Data: Protocol ${e}, Level ${s}, GameDir ${n}`)}parseConfigString(){let e=this.stream.readShort(),t=this.stream.readString()}parseDownload(){let e=this.stream.readShort(),t=this.stream.readByte();e>0&&this.stream.readData(e)}parseInventory(){for(let t=0;t<256;t++)this.stream.readShort()}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte();if(e&1&&this.stream.readByte(),e&2&&this.stream.readByte(),e&16&&this.stream.readByte(),e&8&&this.stream.readShort(),e&4){let r={x:0,y:0,z:0};this.stream.readPos(r)}}parseMuzzleFlash(){let e=this.stream.readShort(),t=this.stream.readByte()}parseMuzzleFlash2(){let e=this.stream.readShort(),t=this.stream.readByte()}parseTempEntity(){let e=this.stream.readByte(),t={x:0,y:0,z:0},r={x:0,y:0,z:0},n={x:0,y:0,z:0};switch(e){case w.BLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case w.GUNSHOT:case w.SPARKS:case w.BULLET_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case w.SCREEN_SPARKS:case w.SHIELD_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case w.SHOTGUN:this.stream.readPos(t),this.stream.readDir(n);break;case w.SPLASH:this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),this.stream.readByte();break;case w.LASER_SPARKS:this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),this.stream.readByte();break;case w.BLUEHYPERBLASTER:this.stream.readPos(t),this.stream.readPos(n);break;case w.BLASTER:this.stream.readPos(t),this.stream.readDir(n);break;case w.RAILTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case w.EXPLOSION2:case w.GRENADE_EXPLOSION:case w.GRENADE_EXPLOSION_WATER:this.stream.readPos(t);break;case w.PLASMA_EXPLOSION:this.stream.readPos(t);break;case w.EXPLOSION1:case w.EXPLOSION1_BIG:case w.ROCKET_EXPLOSION:case w.ROCKET_EXPLOSION_WATER:case w.EXPLOSION1_NP:this.stream.readPos(t);break;case w.BFG_EXPLOSION:this.stream.readPos(t);break;case w.BFG_BIGEXPLOSION:this.stream.readPos(t);break;case w.BFG_LASER:this.stream.readPos(t),this.stream.readPos(r);break;case w.BUBBLETRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case w.PARASITE_ATTACK:case w.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case w.BOSSTPORT:this.stream.readPos(t);break;case w.GRAPPLE_CABLE:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case w.WELDING_SPARKS:this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),this.stream.readByte();break;case w.GREENBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case w.TUNNEL_SPARKS:this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),this.stream.readByte();break;case w.BLASTER2:case w.FLECHETTE:this.stream.readPos(t),this.stream.readDir(n);break;case w.LIGHTNING:this.stream.readShort(),this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case w.DEBUGTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case w.PLAIN_EXPLOSION:this.stream.readPos(t);break;case w.FLASHLIGHT:this.stream.readPos(t),this.stream.readShort();break;case w.FORCEWALL:this.stream.readPos(t),this.stream.readPos(r),this.stream.readByte();break;case w.HEATBEAM:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case w.MONSTER_HEATBEAM:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case w.HEATBEAM_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case w.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(n);break;case w.STEAM:this.stream.readShort()!==-1?(this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),this.stream.readByte(),this.stream.readShort(),this.stream.readLong()):(this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),this.stream.readByte(),this.stream.readShort());break;case w.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(r);break;case w.MOREBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case w.CHAINFIST_SMOKE:this.stream.readPos(t);break;case w.ELECTRIC_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case w.TRACKER_EXPLOSION:this.stream.readPos(t);break;case w.TELEPORT_EFFECT:case w.DBALL_GOAL:this.stream.readPos(t);break;case w.WIDOWBEAMOUT:let s=this.stream.readShort();this.stream.readPos(t);break;case w.NUKEBLAST:this.stream.readPos(t);break;case w.WIDOWSPLASH:this.stream.readPos(t);break;default:console.warn(`CL_ParseTEnt: bad type ${e}`);break}}parseSpawnBaseline(){let e=this.parseEntityBits();this.parseDelta(ye(),ye(),e.number,e.bits)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readByte();this.stream.readData(n);let i=this.stream.readByte();if(i!==P.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${i}`);this.parsePlayerState();let s=this.stream.readByte();if(s!==P.packetentities&&s!==P.deltapacketentities)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${s}`);this.parsePacketEntities(s===P.deltapacketentities)}parsePlayerState(){let e=this.stream.readShort();e&1&&this.stream.readByte(),e&2&&(this.stream.readShort(),this.stream.readShort(),this.stream.readShort()),e&4&&(this.stream.readShort(),this.stream.readShort(),this.stream.readShort()),e&8&&this.stream.readByte(),e&16&&this.stream.readByte(),e&32&&this.stream.readShort(),e&64&&(this.stream.readShort(),this.stream.readShort(),this.stream.readShort()),e&128&&(this.stream.readChar(),this.stream.readChar(),this.stream.readChar()),e&256&&(this.stream.readAngle16(),this.stream.readAngle16(),this.stream.readAngle16()),e&512&&(this.stream.readChar(),this.stream.readChar(),this.stream.readChar()),e&4096&&this.stream.readByte(),e&8192&&(this.stream.readByte(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar()),e&1024&&(this.stream.readByte(),this.stream.readByte(),this.stream.readByte(),this.stream.readByte()),e&2048&&this.stream.readByte(),e&16384&&this.stream.readByte();let t=this.stream.readLong();for(let r=0;r<32;r++)t&1<<r&&this.stream.readShort()}parsePacketEntities(e){for(;;){let t=this.parseEntityBits();if(t.number===0)break;this.parseDelta(ye(),ye(),t.number,t.bits)}}parseEntityBits(){let e=this.stream.readByte();e&Xi&&(e|=this.stream.readByte()<<8),e&Zi&&(e|=this.stream.readByte()<<16),e&rs&&(e|=this.stream.readByte()<<24);let t;return e&Yi?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,r,n){t.number=e.number,t.modelindex=e.modelindex,t.modelindex2=e.modelindex2,t.modelindex3=e.modelindex3,t.modelindex4=e.modelindex4,t.frame=e.frame,t.skinnum=e.skinnum,t.effects=e.effects,t.renderfx=e.renderfx,t.origin.x=e.origin.x,t.origin.y=e.origin.y,t.origin.z=e.origin.z,t.old_origin.x=e.origin.x,t.old_origin.y=e.origin.y,t.old_origin.z=e.origin.z,t.angles.x=e.angles.x,t.angles.y=e.angles.y,t.angles.z=e.angles.z,t.sound=e.sound,t.event=e.event,t.solid=e.solid,t.number=r,n&qi&&(t.modelindex=this.stream.readByte()),n&Qi&&(t.modelindex2=this.stream.readByte()),n&es&&(t.modelindex3=this.stream.readByte()),n&ts&&(t.modelindex4=this.stream.readByte()),n&Wi&&(t.frame=this.stream.readByte()),n&Ji&&(t.frame=this.stream.readShort()),n&Bt&&n&Gt?t.skinnum=this.stream.readLong():n&Bt?t.skinnum=this.stream.readByte():n&Gt&&(t.skinnum=this.stream.readShort()),n&Dt&&n&Ut?t.effects=this.stream.readLong():n&Dt?t.effects=this.stream.readByte():n&Ut&&(t.effects=this.stream.readShort()),n&Ct&&n&Ft?t.renderfx=this.stream.readLong():n&Ct?t.renderfx=this.stream.readByte():n&Ft&&(t.renderfx=this.stream.readShort()),n&Ui&&(t.origin.x=this.stream.readCoord()),n&Gi&&(t.origin.y=this.stream.readCoord()),n&$i&&(t.origin.z=this.stream.readCoord()),n&ji&&(t.angles.x=this.stream.readAngle()),n&Vi&&(t.angles.y=this.stream.readAngle()),n&Hi&&(t.angles.z=this.stream.readAngle()),n&ns&&this.stream.readPos(t.old_origin),n&is&&(t.sound=this.stream.readByte()),n&Ki?t.event=this.stream.readByte():t.event=0,n&ss&&(t.solid=this.stream.readShort())}};var Xt=class{constructor(){this.reader=null,this.state=0,this.playbackSpeed=1,this.accumulatedTime=0,this.frameDuration=100}loadDemo(e){this.reader=new Fi(e),this.state=0,this.accumulatedTime=0}play(){this.reader&&(this.state=1)}pause(){this.state===1&&(this.state=2)}stop(){this.state=0,this.reader&&this.reader.reset(),this.accumulatedTime=0}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.reader.hasMore()){this.state=3;return}let t=this.reader.readNextBlock();if(!t){this.state=3;return}new as(t.data).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Yt={x:0,y:0,z:0};var Vo=Math.PI/180;function he(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function re(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function $(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function os(e){return $(e,e)}function we(e){return Math.sqrt(os(e))}function $t(e){let t=we(e);return t===0?e:re(e,1/t)}var jt=0,qt=1,Zt=2,cs=Math.PI/180,Ho=180/Math.PI;function qe(e,t){switch(t){case jt:return e.x;case qt:return e.y;case Zt:default:return e.z}}function Ze(e){return e*cs}function te(e){let t=e%360;return t<0?360+t:t}function de(e){let t=Ze(qe(e,qt)),r=Ze(qe(e,jt)),n=Ze(qe(e,Zt)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),u=Math.cos(n),l={x:o*s,y:o*i,z:-a},h={x:-c*a*s-u*-i,y:-c*a*i-u*s,z:-c*o},d={x:u*a*s-c*-i,y:u*a*i-c*s,z:u*o};return{forward:l,right:h,up:d}}var H=1,Z=2;var Qe=8,et=16,ls=32;var us=16384;var Ae=65536,Jt=1<<17,hs=1<<18,ds=1<<19,fs=1<<20,ms=1<<21,ps=1<<22,gs=1<<23,Wo=1<<24,Ee=1<<25,vs=1<<26,Ko=1<<27,Xo=1<<28,Yo=1<<29,ze=1<<30,$o=1<<31;var jo=1<<25,qo=1<<28,Zo=1<<29,Jo=1<<30,Qo=1<<31;var ec=H|Z,tc=H|Ae|Z|Ee|ze,rc=H|Ae|Z,nc=H|Jt|Z|Ee|ze,ic=ls|Qe|et,sc=H|et|Qe,ys=H|Ee|ze|Z|vs,ac=hs|ds|fs|ms|ps|gs,oc=H|Qe|et|Ee|ze,cc=H|Ae|Z,lc=H|Z,uc=H|Ae|Z|Jt,hc=ys|us;var dc=Number.MAX_SAFE_INTEGER-1;var Qt=256;var xs=256,Ss=8192,_s=2048,ws=512,As=256,Es=Qt*2,zs=256,Je=32;var er=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Ss]="Sounds",e[e.Images=e.Sounds+_s]="Images",e[e.Lights=e.Images+ws]="Lights",e[e.ShadowLights=e.Lights+xs]="ShadowLights",e[e.Items=e.ShadowLights+zs]="Items",e[e.PlayerSkins=e.Items+As]="PlayerSkins",e[e.General=e.PlayerSkins+Qt]="General",e[e.WheelWeapons=e.General+Es]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Je]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Je]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Je]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(er||{}),fc=er.MaxConfigStrings;var fe=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(fe||{});var B=(e=>(e[e.Ducked=1]="Ducked",e[e.JumpHeld=2]="JumpHeld",e[e.OnGround=4]="OnGround",e[e.TimeWaterJump=8]="TimeWaterJump",e[e.TimeLand=16]="TimeLand",e[e.TimeTeleport=32]="TimeTeleport",e[e.NoPositionalPrediction=64]="NoPositionalPrediction",e[e.OnLadder=128]="OnLadder",e[e.NoAngularPrediction=256]="NoAngularPrediction",e[e.IgnorePlayerCollision=512]="IgnorePlayerCollision",e[e.TimeTrick=1024]="TimeTrick",e))(B||{});function W(e,t){return(e&t)!==0}var tt=(e=>(e[e.Normal=0]="Normal",e[e.Grapple=1]="Grapple",e[e.NoClip=2]="NoClip",e[e.Spectator=3]="Spectator",e[e.Dead=4]="Dead",e[e.Gib=5]="Gib",e[e.Freeze=6]="Freeze",e))(tt||{}),K=(e=>(e[e.None=0]="None",e[e.Attack=1]="Attack",e[e.Use=2]="Use",e[e.Holster=4]="Holster",e[e.Jump=8]="Jump",e[e.Crouch=16]="Crouch",e[e.Any=128]="Any",e))(K||{});function tr(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,l=we(t);if(l<1)return{x:0,y:0,z:t.z};let h=0;if(n&&!i||s){let p=l<c?c:l;h+=p*o*r}a>0&&!s&&(h+=l*u*a*r);let d=l-h;if(d<0&&(d=0),d===l)return t;let m=d/l;return re(t,m)}function rt(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=$(t,r),o=n-a;if(o<=0)return t;let c=i*s*n;return c>o&&(c=o),{x:t.x+r.x*c,y:t.y+r.y*c,z:t.z+r.z*c}}function rr(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=$(t,r),c=a-o;if(c<=0)return t;let u=i*n*s;return u>c&&(u=c),{x:t.x+r.x*u,y:t.y+r.y*u,z:t.z+r.z*u}}function nr(e){let{forward:t,right:r,cmd:n,maxSpeed:i}=e,s={x:t.x*n.forwardmove+r.x*n.sidemove,y:t.y*n.forwardmove+r.y*n.sidemove,z:0},a=we(s);if(a>i){let o=i/a;s=re(s,o),a=i}return{wishdir:a===0?s:$t(s),wishspeed:a}}function ir(e){let{forward:t,right:r,cmd:n,maxSpeed:i}=e,s={x:t.x*n.forwardmove+r.x*n.sidemove,y:t.y*n.forwardmove+r.y*n.sidemove,z:0};n.upmove>10?s=he(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=he(s,{x:0,y:0,z:n.upmove}):s=he(s,{x:0,y:0,z:10});let a=we(s);if(a>i){let o=i/a;s=re(s,o),a=i}return a*=.5,{wishdir:a===0?s:$t(s),wishspeed:a}}function Ts(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function Ls(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Te(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=Ts(r,n),i={...i,x:Ls(i.x)});let s=de(i);return{viewangles:i,...s}}var sr=200,ar=200,or=200,cr=140,lr=150,ur=3;function bs(e){let t=te(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function hr(e,t){return{x:bs(e.x+t.x),y:te(e.y+t.y),z:te(e.z+t.z)}}function dr(e,t){let r=t.sensitivityX??t.sensitivity,n=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*n,y:e.deltaX*r,z:0}}var Rs={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},Ms=800,ne={x:0,y:0,z:0},Ns=250;function Q(){return{origin:ne,velocity:ne,viewangles:ne,pmFlags:B.OnGround,pmType:tt.Normal,waterlevel:fe.None,gravity:Ms,deltaAngles:ne,health:0,armor:0,ammo:0}}function fr(e){return e?{...Q(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:ne}:Q()}function j(e,t,r){return e+(t-e)*r}function nt(e,t,r){let n=te(t-e);return n>180&&(n-=360),te(e+n*r)}function Le(e,t,r){let n=Math.max(0,Math.min(r,1));return{origin:{x:j(e.origin.x,t.origin.x,n),y:j(e.origin.y,t.origin.y,n),z:j(e.origin.z,t.origin.z,n)},velocity:{x:j(e.velocity.x,t.velocity.x,n),y:j(e.velocity.y,t.velocity.y,n),z:j(e.velocity.z,t.velocity.z,n)},viewangles:{x:nt(e.viewangles.x,t.viewangles.x,n),y:nt(e.viewangles.y,t.viewangles.y,n),z:nt(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:j(e.health,t.health,n),armor:j(e.armor,t.armor,n),ammo:j(e.ammo,t.ammo,n)}}function Ps(e,t,r,n){let i=Math.min(Math.max(t.msec,0),Ns)/1e3,s=W(e.pmFlags,B.OnGround),a=W(e.pmFlags,B.OnLadder),o=tr({velocity:e.velocity,frametime:i,onGround:s,groundIsSlick:r.groundIsSlick,onLadder:a,waterlevel:e.waterlevel,pmFriction:r.pmFriction,pmStopSpeed:r.pmStopSpeed,pmWaterFriction:r.pmWaterFriction}),{viewangles:c,forward:u,right:l}=Te({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??ne}),h=e.waterlevel>fe.None?ir({forward:u,right:l,cmd:t,maxSpeed:r.pmWaterSpeed}):nr({forward:u,right:l,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>fe.None)o=rt({velocity:o,wishdir:h.wishdir,wishspeed:h.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=W(e.pmFlags,B.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,g=h.wishspeed>p?{wishdir:h.wishdir,wishspeed:p}:h;o=rt({velocity:o,wishdir:g.wishdir,wishspeed:g.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=rr({velocity:o,wishdir:h.wishdir,wishspeed:h.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,he(e.origin,re(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var ie=class{constructor(t,r={}){this.baseFrame={frame:0,timeMs:0,state:Q()};this.commands=[];this.predicted=Q();this.settings={...Rs,...r},this.trace=t,this.predicted=this.baseFrame.state??Q()}setAuthoritative(t){let r=fr(t.state);return this.baseFrame={...t,state:r},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=fr(this.baseFrame.state);for(let r of this.commands)t=Ps(t,r,this.settings,this.trace);return this.predicted=t,t}};var Os={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function ks(e){return{x:Math.max(-14,Math.min(14,e.x)),y:Math.max(-14,Math.min(14,e.y)),z:Math.max(-22,Math.min(30,e.z))}}function Is(e,t,r){return t?e>210?r/400:e>100?r/800:r/1600:0}function Cs(e,t,r,n,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let s=Is(t,n,i),a=e+s,c=W(r,B.Ducked)&&n?a*4:a;return{bobTime:a,bobCycle:Math.floor(c),bobCycleRun:Math.floor(a),bobFracSin:Math.abs(Math.sin(c*Math.PI))}}var se=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...Os,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,r){let{forward:n,right:i}=de(Te({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??Yt}).viewangles),s=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),a=W(t.pmFlags,B.OnGround),o=Cs(this.bobTime,s,t.pmFlags,a,r);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=$(t.velocity,n)*this.settings.runPitch,u=$(t.velocity,i)*this.settings.runRoll,l=this.bobFracSin*this.settings.bobPitch*s,h=this.bobFracSin*this.settings.bobRoll*s;W(t.pmFlags,B.Ducked)&&a&&(l*=6,h*=6),c+=Math.min(l,this.settings.maxBobAngle),h=Math.min(h,this.settings.maxBobAngle),this.bobCycle&1&&(h=-h),u+=h;let d=Math.min(this.bobFracSin*s*this.settings.bobUp,this.settings.maxBobHeight),m=0,p=0;if(this.kick&&this.kick.remainingMs>0){let A=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));m+=A*this.kick.pitch,p+=A*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-r),this.kick.remainingMs===0&&(this.kick=void 0)}let v={angles:{x:c+m,y:0,z:u+p},offset:ks({x:0,y:0,z:d}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:s};return this.lastSample=v,v}};var be=(e,t,r,n,i,s)=>{let a=Math.abs(n).toString();for(let o=0;o<a.length;o++){let c=parseInt(a[o]),u=i[c];u&&e.drawPic(t+o*s,r,u)}};var F={HEALTH_X:100,HEALTH_Y:450,ARMOR_X:200,ARMOR_Y:450,AMMO_X:540,AMMO_Y:450,CENTER_PRINT_X:320,CENTER_PRINT_Y:100,WEAPON_ICON_X:10,WEAPON_ICON_Y:450,POWERUP_X:610,POWERUP_Y:450};var Re=null;var mr=(e,t,r)=>{if(Re){let n=(t-Re.width)/2,i=(r-Re.height)/2;e.drawPic(n,i,Re)}};var Ds={x:0,y:0,z:0};var Ac=Math.PI/180;var yr=0,xr=1,Bs=2,Fs=Math.PI/180,Us=180/Math.PI;function pr(e,t){switch(t){case yr:return e.x;case xr:return e.y;case Bs:default:return e.z}}function Gs(e){return e*Fs}function Vs(e){return e*Us}function gr(e){let t=e%360;return t<0?360+t:t}function Hs(e){let t=pr(e,yr),r=pr(e,xr);if(t===0)return r===0?0:r>0?90:270;let n=Vs(Math.atan2(r,t));return n<0?n+360:n}var X=624,Ws=397,Ks=2567483615,Xs=2147483648,Ys=2147483647,it=4294967296,$s=class{constructor(e=5489){this.state=new Uint32Array(X),this.index=X,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<X;t++){let r=this.state[t-1]^this.state[t-1]>>>30,n=Math.imul(r>>>0,1812433253)+t;this.state[t]=n>>>0}this.index=X}nextUint32(){this.index>=X&&this.twist();let e=this.state[this.index++];return e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0}twist(){for(let e=0;e<X;e++){let t=this.state[e]&Xs|this.state[(e+1)%X]&Ys,r=this.state[(e+Ws)%X]^t>>>1;(t&1)!==0&&(r^=Ks),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==X)throw new Error(`Expected ${X} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},js=class{constructor(e={}){this.mt=new $s(e.seed)}frandom(){return this.mt.nextUint32()/it}frandomRange(e,t){return e+(t-e)*this.frandom()}frandomMax(e){return this.frandomRange(0,e)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let e=Number.EPSILON;return this.frandomRange(-1+e,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(e,t){if(t-e<=1)return e;let r=t-e,n=it-it%r,i;do i=this.mt.nextUint32();while(i>=n);return e+i%r}irandom(e){return e<=0?0:this.irandomRange(0,e)}randomTimeRange(e,t){return t<=e?e:this.irandomRange(e,t)}randomTime(e){return this.irandom(e)}randomIndex(e){return this.irandom(e.length)}getState(){return{mt:this.mt.getState()}}setState(e){this.mt.setState(e.mt)}};var Y=1,J=2;var ot=8,ct=16,qs=32;var Zs=16384;var Oe=65536,Sr=1<<17,Js=1<<18,Qs=1<<19,ea=1<<20,ta=1<<21,ra=1<<22,na=1<<23,Ec=1<<24,ke=1<<25,ia=1<<26,zc=1<<27,Tc=1<<28,Lc=1<<29,Ie=1<<30,bc=1<<31;var Rc=1<<25,Mc=1<<28,Nc=1<<29,Pc=1<<30,Oc=1<<31,kc=Y|J,Ic=Y|Oe|J|ke|Ie,Cc=Y|Oe|J,Dc=Y|Sr|J|ke|Ie,Bc=qs|ot|ct,Fc=Y|ct|ot,sa=Y|ke|Ie|J|ia,Uc=Js|Qs|ea|ta|ra|na,Gc=Y|ot|ct|ke|Ie,Vc=Y|Oe|J,Hc=Y|J,Wc=Y|Oe|J|Sr,Kc=sa|Zs,Xc=Number.MAX_SAFE_INTEGER-1;var _r=256,aa=256,oa=8192,ca=2048,la=512,ua=256,ha=_r*2,da=256,st=32,wr=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+oa]="Sounds",e[e.Images=e.Sounds+ca]="Images",e[e.Lights=e.Images+la]="Lights",e[e.ShadowLights=e.Lights+aa]="ShadowLights",e[e.Items=e.ShadowLights+da]="Items",e[e.PlayerSkins=e.Items+ua]="PlayerSkins",e[e.General=e.PlayerSkins+_r]="General",e[e.WheelWeapons=e.General+ha]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+st]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+st]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+st]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(wr||{}),Yc=wr.MaxConfigStrings;var fa={...Ds};var $c=Object.freeze({aiflags:0,last_sighting:fa,trail_time:0,pausetime:0});var lt=[{name:"classname",type:"string",save:!0},{name:"spawnflags",type:"int",save:!0},{name:"target",type:"string",save:!0},{name:"targetname",type:"string",save:!0},{name:"killtarget",type:"string",save:!0},{name:"team",type:"string",save:!0},{name:"message",type:"string",save:!0},{name:"pathtarget",type:"string",save:!0},{name:"model",type:"string",save:!0},{name:"item",type:"string",save:!0},{name:"map",type:"string",save:!0},{name:"inventory",type:"inventory",save:!0},{name:"origin",type:"vec3",save:!0},{name:"old_origin",type:"vec3",save:!0},{name:"velocity",type:"vec3",save:!0},{name:"avelocity",type:"vec3",save:!0},{name:"angles",type:"vec3",save:!0},{name:"pos1",type:"vec3",save:!0},{name:"pos2",type:"vec3",save:!0},{name:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",type:"vec3",save:!0},{name:"absmin",type:"vec3",save:!0},{name:"absmax",type:"vec3",save:!0},{name:"size",type:"vec3",save:!0},{name:"mass",type:"int",save:!0},{name:"gravity",type:"float",save:!0},{name:"movetype",type:"int",save:!0},{name:"movedir",type:"vec3",save:!0},{name:"modelindex",type:"int",save:!0},{name:"frame",type:"int",save:!0},{name:"skin",type:"int",save:!0},{name:"effects",type:"int",save:!0},{name:"renderfx",type:"int",save:!0},{name:"health",type:"int",save:!0},{name:"max_health",type:"int",save:!0},{name:"takedamage",type:"boolean",save:!0},{name:"dmg",type:"int",save:!0},{name:"speed",type:"float",save:!0},{name:"accel",type:"float",save:!0},{name:"decel",type:"float",save:!0},{name:"height",type:"float",save:!0},{name:"deadflag",type:"int",save:!0},{name:"count",type:"int",save:!0},{name:"wait",type:"float",save:!0},{name:"delay",type:"float",save:!0},{name:"timestamp",type:"float",save:!0},{name:"lip",type:"int",save:!0},{name:"state",type:"int",save:!0},{name:"sounds",type:"int",save:!0},{name:"noise_index",type:"int",save:!0},{name:"fly_sound_debounce_time",type:"float",save:!0},{name:"enemy",type:"entity",save:!0},{name:"movetarget",type:"entity",save:!0},{name:"target_ent",type:"entity",save:!0},{name:"goalentity",type:"entity",save:!0},{name:"ideal_yaw",type:"float",save:!0},{name:"yaw_speed",type:"float",save:!0},{name:"search_time",type:"float",save:!0},{name:"attack_finished_time",type:"float",save:!0},{name:"pain_finished_time",type:"float",save:!0},{name:"trail_time",type:"float",save:!0},{name:"groundentity",type:"entity",save:!0},{name:"groundentity_linkcount",type:"int",save:!0},{name:"waterlevel",type:"int",save:!0},{name:"watertype",type:"int",save:!0},{name:"nextthink",type:"float",save:!0},{name:"solid",type:"int",save:!0},{name:"flags",type:"int",save:!0},{name:"svflags",type:"int",save:!0},{name:"think",type:"callback",save:!1},{name:"touch",type:"callback",save:!1},{name:"use",type:"callback",save:!1},{name:"blocked",type:"callback",save:!1},{name:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}];var ma=lt.filter(e=>e.save||e.type==="callback"),jc=new Map(ma.map(e=>[e.name,e]));var qc=1/40;var Ar=(e=>(e[e.Bullets=0]="Bullets",e[e.Shells=1]="Shells",e[e.Rockets=2]="Rockets",e[e.Grenades=3]="Grenades",e[e.Cells=4]="Cells",e[e.Slugs=5]="Slugs",e))(Ar||{}),Zc=Object.keys(Ar).length/2;var Er={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:"blaster",ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:"shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:"super_shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:"machinegun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:"chaingun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:"grenade_launcher",ammoType:3,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:"rocket_launcher",ammoType:2,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:"hyperblaster",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:"railgun",ammoType:5,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:"bfg10k",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:1}};var Jc=1<<24;function pa(e,t){if(t===0)return{x:0,y:0,z:0};let r=Gs(e);return{x:Math.cos(r)*t,y:Math.sin(r)*t,z:0}}function ut(e,t,r){let n=pa(t,r),i=e.origin;return i.x+=n.x,i.y+=n.y,i.z+=n.z,!0}function Ce(e,t){let r=gr(e.angles.y),n=e.ideal_yaw;if(r===n){e.angles.y=r;return}let i=e.yaw_speed*t*10,s=n-r;n>r?s>=180&&(s-=360):s<=-180&&(s+=360),s>i?s=i:s<-i&&(s=-i),e.angles.y=gr(r+s)}function ht(e,t){if(!t)return;let r={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=Hs(r)}function ga(e,t){Ce(e,t)}function va(e,t,r){ht(e,e.goalentity),Ce(e,r),t!==0&&ut(e,e.angles.y,t)}function ya(e,t,r){ht(e,e.enemy??e.goalentity),Ce(e,r),t!==0&&ut(e,e.angles.y,t)}function xa(e,t,r){ht(e,e.enemy),Ce(e,r),t!==0&&ut(e,e.angles.y,t)}var De=.1;function Sa(e,t){ga(e,De)}function _a(e,t){va(e,t,De)}function wa(e,t){ya(e,t,De)}function Aa(e,t){xa(e,t,De)}var dt,zr,Tr,Ea;function za(e){e.monsterinfo.current_move=dt}function Ta(e){e.monsterinfo.current_move=zr}function Lr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Tr:e.monsterinfo.current_move=dt}function La(e){}var ba=Array.from({length:30},()=>({ai:Sa,dist:0}));dt={firstframe:0,lastframe:29,frames:ba,endfunc:za};var Ra=Array.from({length:40},()=>({ai:_a,dist:2}));zr={firstframe:30,lastframe:69,frames:Ra,endfunc:Ta};var Ma=Array.from({length:20},()=>({ai:wa,dist:10}));Tr={firstframe:70,lastframe:89,frames:Ma,endfunc:Lr};var Na=Array.from({length:10},(e,t)=>({ai:Aa,dist:0,think:t===5?La:null}));Ea={firstframe:90,lastframe:99,frames:Na,endfunc:Lr};var Qc=new Map(lt.map(e=>[e.name,e]));var at=2,Pa=1;function U(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function C(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Me(e,t,r){return e===void 0?r:C(e,t)}function Pe(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function Ne(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let r of e)C(r,`${t} element`);return e}function Oa(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=U(e,"level");return{frameNumber:Me(t.frameNumber,"level.frameNumber",0),timeSeconds:Me(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Me(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Me(t.deltaSeconds,"level.deltaSeconds",0)}}function ka(e){if(e===void 0)return new js().getState();let t=U(e,"rng"),r=U(t.mt,"rng.mt"),n=Ne(r.state,"rng.mt.state");return{mt:{index:C(r.index,"rng.mt.index"),state:n}}}function Ia(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("thinks must be an array");return e.map((t,r)=>{let n=U(t,`thinks[${r}]`);return{time:C(n.time,`thinks[${r}].time`),entityIndex:C(n.entityIndex,`thinks[${r}].entityIndex`)}})}function Ca(e){if(e===void 0)return{};let t=U(e,"entity.fields"),r={};for(let[n,i]of Object.entries(t)){if(i===null){r[n]=null;continue}switch(typeof i){case"number":case"string":case"boolean":r[n]=i;break;default:{if(!Array.isArray(i)){let s=U(i,n),a={};for(let[o,c]of Object.entries(s))a[o]=C(c,`${n}.${o}`);r[n]=a;break}if(Array.isArray(i)&&i.length===3){let[s,a,o]=i;r[n]=[C(s,`${n}[0]`),C(a,`${n}[1]`),C(o,`${n}[2]`)];break}throw new Error(`Unsupported entity field value for ${n}`)}}}return r}function Da(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=U(t,`entities[${r}]`);return{index:C(n.index,`entities[${r}].index`),fields:Ca(n.fields)}})}function Ba(e){let t=U(e,"pool");return{capacity:C(t.capacity,"pool.capacity"),activeOrder:Ne(t.activeOrder,"pool.activeOrder"),freeList:Ne(t.freeList,"pool.freeList"),pendingFree:Ne(t.pendingFree,"pool.pendingFree")}}function Fa(e){let t=U(e,"entities");return{timeSeconds:C(t.timeSeconds,"entities.timeSeconds"),pool:Ba(t.pool),entities:Da(t.entities),thinks:Ia(t.thinks)}}function Ua(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("cvars must be an array");return e.map((t,r)=>{let n=U(t,`cvars[${r}]`);return{name:Pe(n.name,`cvars[${r}].name`),value:Pe(n.value,`cvars[${r}].value`),flags:C(n.flags,`cvars[${r}].flags`)}})}function Ga(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>Pe(t,`configstrings[${r}]`))}function Va(e){return e===void 0?{}:U(e,"gameState")}function br(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=U(n,"save"),s=i.version??at,a=C(s,"version");if(a<Pa)throw new Error(`Unsupported save version ${a}`);if(a>at&&!r)throw new Error(`Save version ${a} is newer than supported ${at}`);return{version:a,timestamp:C(i.timestamp,"timestamp"),map:Pe(i.map,"map"),difficulty:C(i.difficulty,"difficulty"),playtimeSeconds:C(i.playtimeSeconds,"playtimeSeconds"),gameState:Va(i.gameState),level:Oa(i.level),rng:ka(i.rng),entities:Fa(i.entities),cvars:Ua(i.cvars),configstrings:Ga(i.configstrings),player:i.player?i.player:void 0}}var el=new Set(lt.filter(e=>e.save).map(e=>e.name));var vr=globalThis.TextEncoder;function ae(e){return br({...e},{allowNewerVersion:!0})}function Ha(e){return vr?new vr().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var Wa=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:ae(e.save)};this.records.set(e.id,t)}async get(e){let t=this.records.get(e);return t?{id:t.id,metadata:{...t.metadata},save:ae(t.save)}:null}async delete(e){return this.records.delete(e)}async list(){return Array.from(this.records.values()).map(e=>({id:e.id,metadata:{...e.metadata},save:ae(e.save)}))}},Ka=class{constructor(e,t,r){this.indexedDB=e,this.dbName=t,this.storeName=r,this.db=null}async init(){this.db||(this.db=await new Promise((e,t)=>{let r=this.indexedDB.open(this.dbName,1);r.onupgradeneeded=()=>{r.result.createObjectStore(this.storeName,{keyPath:"id"})},r.onerror=()=>t(r.error??new Error("Failed to open IndexedDB")),r.onsuccess=()=>e(r.result)}))}async runTransaction(e,t){await this.init();let r=this.db;return new Promise((n,i)=>{let a=r.transaction(this.storeName,e).objectStore(this.storeName),o=t(a);o.onsuccess=()=>n(o.result),o.onerror=()=>i(o.error??new Error("IndexedDB request failed"))})}async put(e){await this.runTransaction("readwrite",t=>t.put(e))}async get(e){let t=await this.runTransaction("readonly",r=>r.get(e));return t?{id:t.id,metadata:{...t.metadata},save:ae(t.save)}:null}async delete(e){return await this.get(e)?(await this.runTransaction("readwrite",r=>r.delete(e)),!0):!1}async list(){return(await this.runTransaction("readonly",t=>t.getAll())).map(t=>({id:t.id,metadata:{...t.metadata},save:ae(t.save)}))}},ft=class me{constructor(t={}){let{dbName:r=me.DEFAULT_DB_NAME,storeName:n=me.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new Ka(i,r,n):this.adapter=new Wa}async save(t,r,n={}){let i=ae(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:Ha(i)};return await this.adapter.init(),await this.adapter.put({id:t,metadata:s,save:i}),s}async load(t,r={}){await this.adapter.init();let n=await this.adapter.get(t);if(!n)throw new Error(`Save slot ${t} not found`);return br(n.save,r)}async delete(t){return await this.adapter.init(),this.adapter.delete(t)}async list(){return await this.adapter.init(),(await this.adapter.list()).map(r=>({...r.metadata})).sort((r,n)=>n.timestamp-r.timestamp||r.id.localeCompare(n.id))}async quickSave(t){return this.save(me.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(me.QUICK_SLOT,t)}};ft.DEFAULT_DB_NAME="quake2ts-saves";ft.DEFAULT_STORE="saves";ft.QUICK_SLOT="quicksave";var Rr=new Map;var Mr=(e,t)=>{if(!t)return;let r=t.inventory.currentWeapon;if(r){let i=Object.values(Er).find(s=>s.weaponId===r);if(i){let s=`w_${i.id.substring(7)}`,a=Rr.get(s);a&&e.drawPic(F.WEAPON_ICON_X,F.WEAPON_ICON_Y,a)}}let n=F.POWERUP_X;for(let[i,s]of t.inventory.powerups.entries())if(s&&s>0){let a=`p_${i}`,o=Rr.get(a);o&&(e.drawPic(n,F.POWERUP_Y,o),n-=o.width+4)}};var Be=new Map;var Nr=(e,t)=>{if(!t.damageIndicators)return;let r=e.width,n=e.height,{forward:i,right:s,up:a}=de(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:u}=o,l={...c},h=Math.sqrt(l.x*l.x+l.y*l.y+l.z*l.z);h>0&&(l.x/=h,l.y/=h,l.z/=h);let d=$(l,s),m=$(l,i),p=Math.atan2(m,d)*180/Math.PI,g,f=0,v=0;p>-45&&p<=45?(g=Be.get("d_right"),f=r-(g?.width||0),v=(n-(g?.height||0))/2):p>45&&p<=135?(g=Be.get("d_up"),f=(r-(g?.width||0))/2,v=0):p>135||p<=-135?(g=Be.get("d_left"),f=0,v=(n-(g?.height||0))/2):(g=Be.get("d_down"),f=(r-(g?.width||0))/2,v=n-(g?.height||0)),g&&e.drawPic(f,v,g)}};var Pr=(e,t)=>{let r=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],n=10;for(let i of r)e.drawString(10,n,i),n+=10};var mt=[],pt=0;var Or=(e,t,r,n,i,s,a)=>{e.begin2D(),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]),be(e,F.HEALTH_X,F.HEALTH_Y,n,mt,pt),be(e,F.ARMOR_X,F.ARMOR_Y,i,mt,pt),be(e,F.AMMO_X,F.AMMO_Y,s,mt,pt),Mr(e,r),Nr(e,t),Pr(e,a),mr(e,e.width,e.height),e.end2D()};var Xa=[{code:"KeyW",command:"+forward"},{code:"ArrowUp",command:"+forward"},{code:"KeyS",command:"+back"},{code:"ArrowDown",command:"+back"},{code:"KeyA",command:"+moveleft"},{code:"KeyD",command:"+moveright"},{code:"Space",command:"+jump"},{code:"ControlLeft",command:"+crouch"},{code:"ShiftLeft",command:"+speed"},{code:"Mouse1",command:"+attack"},{code:"Mouse2",command:"+use"},{code:"Mouse3",command:"+zoom"},{code:"ArrowLeft",command:"+left"},{code:"ArrowRight",command:"+right"},{code:"PageUp",command:"+lookup"},{code:"PageDown",command:"+lookdown"},{code:"Gamepad0-Button7",command:"+attack"},{code:"Gamepad0-Button6",command:"+zoom"},{code:"Gamepad0-Button0",command:"+jump"},{code:"Gamepad0-Button1",command:"+crouch"},{code:"Gamepad0-Button2",command:"+use"},{code:"Gamepad0-Button4",command:"prevweapon"},{code:"Gamepad0-Button5",command:"nextweapon"},{code:"Digit1",command:"weapon 1"},{code:"Digit2",command:"weapon 2"},{code:"Digit3",command:"weapon 3"},{code:"Digit4",command:"weapon 4"},{code:"Digit5",command:"weapon 5"},{code:"Digit6",command:"weapon 6"},{code:"Digit7",command:"weapon 7"},{code:"Digit8",command:"weapon 8"},{code:"Digit9",command:"weapon 9"},{code:"Digit0",command:"weapon 10"}],ee=class{constructor(t=Xa){this.bindings=new Map;for(let r of t)this.bind(r.code,r.command)}bind(t,r){this.bindings.set(t,r)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function kr(){return new ee}function gt(e){return e}function pe(e){return e.trim().toLowerCase()}var Ya=250,vt=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,r){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=r,!0):!1)}release(t,r){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=r-this.downTime,this.downTime=0,!0):!1}sample(t,r){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let n=this.msec;this.activeCodes.size>0&&(n+=r-this.downTime,this.downTime=r),this.msec=0;let i=Math.min(n/t,1),s=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:s,fraction:i}}},Fe=(v=>(v.Forward="+forward",v.Back="+back",v.MoveLeft="+moveleft",v.MoveRight="+moveright",v.MoveUp="+moveup",v.MoveDown="+movedown",v.Jump="+jump",v.Crouch="+crouch",v.Attack="+attack",v.Use="+use",v.Holster="+holster",v.TurnLeft="+left",v.TurnRight="+right",v.LookUp="+lookup",v.LookDown="+lookdown",v.SpeedModifier="+speed",v.Zoom="+zoom",v))(Fe||{}),$a={"+attack":K.Attack,"+use":K.Use,"+holster":K.Holster,"+jump":K.Jump,"+crouch":K.Crouch},ja=new Map(Object.values(Fe).map(e=>[pe(e),e]));function qa(e){return ja.get(pe(e))}function ge(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var oe=class{constructor(t={},r=new ee){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=r,this.forwardSpeed=t.forwardSpeed??sr,this.sideSpeed=t.sideSpeed??ar,this.upSpeed=t.upSpeed??or,this.yawSpeed=t.yawSpeed??cr,this.pitchSpeed=t.pitchSpeed??lr,this.sensitivity=t.sensitivity??ur,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,r=ge()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!0,n,r)}handleKeyUp(t,r=ge()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!1,n,r)}handleMouseButtonDown(t,r=ge()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!0,n,r)}handleMouseButtonUp(t,r=ge()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!1,n,r)}handleMouseMove(t,r){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+r})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,r=ge(),n){this.pollGamepads(r),this.applyTouchState(r);let i=this.yawSpeed*t/1e3,s=this.pitchSpeed*t/1e3,a=this.sample("+left",t,r),o=this.sample("+right",t,r),c=this.sample("+lookup",t,r),l={x:(this.sample("+lookdown",t,r).fraction-c.fraction)*s,y:(o.fraction-a.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let R=this.gamepadLook.y*(this.invertGamepadY?-1:1);l={x:l.x+R*s*this.gamepadLookScale,y:l.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let R=this.touchLook.y*(this.invertMouseY?-1:1);l={x:l.x+R*s,y:l.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let R=this.sampleMouseDelta(),N=dr(R,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});l={x:l.x+N.x,y:l.y+N.y,z:0}}let h=hr(this.viewAngles,l);this.viewAngles=h;let d=this.sample("+forward",t,r),m=this.sample("+back",t,r),p=this.sample("+moveleft",t,r),g=this.sample("+moveright",t,r),f=this.sample("+moveup",t,r),v=this.sample("+movedown",t,r),A=this.sample("+speed",t,r),_=this.sample("+jump",t,r),S=this.sample("+crouch",t,r),y=this.runByDefault?A.active?.5:1:A.active?1:.5,x=this.forwardSpeed*(d.fraction-m.fraction)*y,T=this.sideSpeed*(g.fraction-p.fraction)*y,z=this.upSpeed*(f.fraction-v.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(x+=this.forwardSpeed*this.gamepadMove.y*y,T+=this.sideSpeed*this.gamepadMove.x*y),(this.touchMove.x!==0||this.touchMove.y!==0)&&(x+=this.forwardSpeed*this.touchMove.y*y,T+=this.sideSpeed*this.touchMove.x*y),this.jumpAddsUpMove&&_.fraction>0&&(z+=this.upSpeed*_.fraction),this.crouchAddsDownMove&&S.fraction>0&&(z-=this.upSpeed*S.fraction),x=this.clampMove(x,this.forwardSpeed),T=this.clampMove(T,this.sideSpeed),z=this.clampMove(z,this.upSpeed);let L=this.collectButtonBits(t,r),E=Math.min(Math.max(Math.round(t),1),Ya);return(this.anyPressed||L!==K.None)&&(L|=K.Any),this.anyPressed=!1,{msec:E,buttons:L,angles:{...this.viewAngles},forwardmove:x,sidemove:T,upmove:z,serverFrame:n}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let r=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let n=new Set;for(let i of r){if(!i||i.connected===!1)continue;let s=i.index??0,a=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(a[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(a[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(a[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(a[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let u=o[c];if(!u)continue;let l=u.pressed||u.value>this.gamepadDeadZone,h=this.gamepadButtonCode(s,c);l&&n.add(h);let d=this.gamepadButtons.get(h)??!1;l!==d&&(this.applyCommand(this.bindings.getBinding(h),l,h,t),this.gamepadButtons.set(h,l))}}for(let[i,s]of this.gamepadButtons.entries())s&&!n.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let r=this.pendingTouchState;if(r&&(this.pendingTouchState=void 0,r.move&&(this.touchMove={x:this.clampAnalog(r.move.x),y:this.clampAnalog(r.move.y)}),r.look&&(this.touchLook={x:this.clampAnalog(r.look.x),y:this.clampAnalog(r.look.y)}),r.buttons))for(let[n,i]of Object.entries(r.buttons)){if(i===void 0)continue;let s=this.touchButtons.get(n)??!1;i!==s&&(this.applyCommand(n,i,this.touchButtonCode(n),t),this.touchButtons.set(n,i))}}applyCommand(t,r,n,i){if(!t)return;let s=qa(t);if(s){let a=this.lookupButton(s);r?(a.press(n,i)&&this.commandQueue.push(s),this.anyPressed=!0):a.release(n,i)&&this.commandQueue.push(s.replace("+","-"))}else r&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let r={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,r}collectButtonBits(t,r){let n=K.None;for(let[i,s]of Object.entries($a)){let a=this.sample(i,t,r);(a.fraction>0||a.active||a.wasPressed)&&(n|=s)}return n}lookupButton(t){let r=this.buttons.get(t);return r||(r=new vt,this.buttons.set(t,r)),r}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,r,n){return this.lookupButton(t).sample(r,n)}gamepadButtonCode(t,r){return`Gamepad${t}-Button${r}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,r){return Math.abs(r)>Math.abs(t)?r:t}clampMove(t,r){return Math.max(-r,Math.min(r,t))}};var Ue=class{constructor(t,r=new oe(t)){this.queued=[];this.controller=r}captureFrame(t,r,n){let i=this.controller.buildCommand(t,r,n),s=this.controller.consumeConsoleCommands(),a={command:i,console:s};return this.queued.push(a),a}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function Za(e){let t=new ie(e.engine.trace),r=new se,n=new Xt,i,s,a,o;return{init(c){i=c,c?.state&&t.setAuthoritative(c),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(c){return t.enqueueCommand(c)},render(c){c.latest?.state&&(t.setAuthoritative(c.latest),i=c.latest),c.previous?.state&&c.latest?.state?s=Le(c.previous.state,c.latest.state,c.alpha):s=c.latest?.state??c.previous?.state??t.getPredictedState();let u=c.latest&&c.previous?Math.max(0,c.latest.timeMs-c.previous.timeMs):0;if(a=r.sample(s,u),s){let{origin:h,viewangles:d}=s;o=new Kt,o.position=O.fromValues(h.x,h.y,h.z),o.angles=O.fromValues(d.x,d.y,d.z),o.fov=90,o.aspect=4/3}let l={};if(e.engine.renderer&&s&&s.client){let h={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},d={origin:s.origin,velocity:s.velocity,viewAngles:s.viewangles,onGround:W(s.pmFlags,B.OnGround),waterLevel:s.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:0,damageIndicators:[]};Or(e.engine.renderer,d,s.client,s.health,s.armor,s.ammo,h)}return l},shutdown(){i=void 0,s=void 0},get prediction(){return t},get lastRendered(){return s},get view(){return r},get lastView(){return a},get camera(){return o},demoPlayback:n}}return Fr(Ja);})();
2
2
  //# sourceMappingURL=index.global.js.map