quake2ts 0.0.63 → 0.0.65

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.
@@ -1,2 +1,2 @@
1
- "use strict";var Quake2=(()=>{var Ue=Object.defineProperty;var Sr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Tr=Object.prototype.hasOwnProperty;var Ar=(e,t)=>{for(var r in t)Ue(e,r,{get:t[r],enumerable:!0})},zr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Er(t))!Tr.call(e,i)&&i!==r&&Ue(e,i,{get:()=>t[i],enumerable:!(n=Sr(t,i))||n.enumerable});return e};var Nr=e=>zr(Ue({},"__esModule",{value:!0}),e);var lo={};Ar(lo,{bootstrapViewer:()=>co});var Mr=Object.defineProperty,_t=(e,t)=>{for(var r in t)Mr(e,r,{get:t[r],enumerable:!0})},M=1e-6,F=typeof Float32Array<"u"?Float32Array:Array,pt=Math.random;function Fe(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var ho=Math.PI/180,mo=180/Math.PI,b={};_t(b,{add:()=>fn,adjoint:()=>Dr,clone:()=>Lr,copy:()=>Or,create:()=>Rr,decompose:()=>Qr,determinant:()=>Ur,equals:()=>gn,exactEquals:()=>yn,frob:()=>mn,fromQuat:()=>rn,fromQuat2:()=>qr,fromRotation:()=>Xr,fromRotationTranslation:()=>St,fromRotationTranslationScale:()=>en,fromRotationTranslationScaleOrigin:()=>tn,fromScaling:()=>Kr,fromTranslation:()=>Hr,fromValues:()=>kr,fromXRotation:()=>Yr,fromYRotation:()=>jr,fromZRotation:()=>$r,frustum:()=>nn,getRotation:()=>Zr,getScaling:()=>Et,getTranslation:()=>Jr,identity:()=>xt,invert:()=>Pr,lookAt:()=>un,mul:()=>_n,multiply:()=>wt,multiplyScalar:()=>pn,multiplyScalarAndAdd:()=>vn,ortho:()=>cn,orthoNO:()=>At,orthoZO:()=>ln,perspective:()=>sn,perspectiveFromFieldOfView:()=>on,perspectiveNO:()=>Tt,perspectiveZO:()=>an,rotate:()=>Gr,rotateX:()=>Br,rotateY:()=>Wr,rotateZ:()=>Vr,scale:()=>Ir,set:()=>br,str:()=>dn,sub:()=>xn,subtract:()=>zt,targetTo:()=>hn,translate:()=>Fr,transpose:()=>Cr});function Rr(){var e=new F(16);return F!=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 Lr(e){var t=new F(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 Or(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 kr(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,v){var f=new F(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]=l,f[10]=u,f[11]=d,f[12]=h,f[13]=m,f[14]=p,f[15]=v,f}function br(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,v,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]=l,e[9]=u,e[10]=d,e[11]=h,e[12]=m,e[13]=p,e[14]=v,e[15]=f,e}function xt(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 Cr(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 Pr(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],v=t[13],f=t[14],y=t[15],E=r*o-n*a,w=r*c-i*a,g=r*l-s*a,_=n*c-i*o,x=n*l-s*o,z=i*l-s*c,T=u*v-d*p,N=u*f-h*p,S=u*y-m*p,R=d*f-h*v,L=d*y-m*v,O=h*y-m*f,A=E*O-w*L+g*R+_*S-x*N+z*T;return A?(A=1/A,e[0]=(o*O-c*L+l*R)*A,e[1]=(i*L-n*O-s*R)*A,e[2]=(v*z-f*x+y*_)*A,e[3]=(h*x-d*z-m*_)*A,e[4]=(c*S-a*O-l*N)*A,e[5]=(r*O-i*S+s*N)*A,e[6]=(f*g-p*z-y*w)*A,e[7]=(u*z-h*g+m*w)*A,e[8]=(a*L-o*S+l*T)*A,e[9]=(n*S-r*L-s*T)*A,e[10]=(p*x-v*g+y*E)*A,e[11]=(d*g-u*x-m*E)*A,e[12]=(o*N-a*R-c*T)*A,e[13]=(r*R-n*N+i*T)*A,e[14]=(v*w-p*_-f*E)*A,e[15]=(u*_-d*w+h*E)*A,e):null}function Dr(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],v=t[13],f=t[14],y=t[15],E=r*o-n*a,w=r*c-i*a,g=r*l-s*a,_=n*c-i*o,x=n*l-s*o,z=i*l-s*c,T=u*v-d*p,N=u*f-h*p,S=u*y-m*p,R=d*f-h*v,L=d*y-m*v,O=h*y-m*f;return e[0]=o*O-c*L+l*R,e[1]=i*L-n*O-s*R,e[2]=v*z-f*x+y*_,e[3]=h*x-d*z-m*_,e[4]=c*S-a*O-l*N,e[5]=r*O-i*S+s*N,e[6]=f*g-p*z-y*w,e[7]=u*z-h*g+m*w,e[8]=a*L-o*S+l*T,e[9]=n*S-r*L-s*T,e[10]=p*x-v*g+y*E,e[11]=d*g-u*x-m*E,e[12]=o*N-a*R-c*T,e[13]=r*R-n*N+i*T,e[14]=v*w-p*_-f*E,e[15]=u*_-d*w+h*E,e}function Ur(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],l=e[8],u=e[9],d=e[10],h=e[11],m=e[12],p=e[13],v=e[14],f=e[15],y=t*a-r*s,E=t*o-n*s,w=r*o-n*a,g=l*p-u*m,_=l*v-d*m,x=u*v-d*p,z=t*x-r*_+n*g,T=s*x-a*_+o*g,N=l*w-u*E+d*y,S=m*w-p*E+v*y;return c*z-i*T+f*N-h*S}function wt(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=t[8],h=t[9],m=t[10],p=t[11],v=t[12],f=t[13],y=t[14],E=t[15],w=r[0],g=r[1],_=r[2],x=r[3];return e[0]=w*n+g*o+_*d+x*v,e[1]=w*i+g*c+_*h+x*f,e[2]=w*s+g*l+_*m+x*y,e[3]=w*a+g*u+_*p+x*E,w=r[4],g=r[5],_=r[6],x=r[7],e[4]=w*n+g*o+_*d+x*v,e[5]=w*i+g*c+_*h+x*f,e[6]=w*s+g*l+_*m+x*y,e[7]=w*a+g*u+_*p+x*E,w=r[8],g=r[9],_=r[10],x=r[11],e[8]=w*n+g*o+_*d+x*v,e[9]=w*i+g*c+_*h+x*f,e[10]=w*s+g*l+_*m+x*y,e[11]=w*a+g*u+_*p+x*E,w=r[12],g=r[13],_=r[14],x=r[15],e[12]=w*n+g*o+_*d+x*v,e[13]=w*i+g*c+_*h+x*f,e[14]=w*s+g*l+_*m+x*y,e[15]=w*a+g*u+_*p+x*E,e}function Fr(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,l,u,d,h,m,p,v,f,y;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],l=t[3],u=t[4],d=t[5],h=t[6],m=t[7],p=t[8],v=t[9],f=t[10],y=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=h,e[7]=m,e[8]=p,e[9]=v,e[10]=f,e[11]=y,e[12]=a*n+u*i+p*s+t[12],e[13]=o*n+d*i+v*s+t[13],e[14]=c*n+h*i+f*s+t[14],e[15]=l*n+m*i+y*s+t[15]),e}function Ir(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 Gr(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,l,u,d,h,m,p,v,f,y,E,w,g,_,x,z,T,N,S,R,L,O,A,U;return o<M?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),l=Math.cos(r),u=1-l,d=t[0],h=t[1],m=t[2],p=t[3],v=t[4],f=t[5],y=t[6],E=t[7],w=t[8],g=t[9],_=t[10],x=t[11],z=i*i*u+l,T=s*i*u+a*c,N=a*i*u-s*c,S=i*s*u-a*c,R=s*s*u+l,L=a*s*u+i*c,O=i*a*u+s*c,A=s*a*u-i*c,U=a*a*u+l,e[0]=d*z+v*T+w*N,e[1]=h*z+f*T+g*N,e[2]=m*z+y*T+_*N,e[3]=p*z+E*T+x*N,e[4]=d*S+v*R+w*L,e[5]=h*S+f*R+g*L,e[6]=m*S+y*R+_*L,e[7]=p*S+E*R+x*L,e[8]=d*O+v*A+w*U,e[9]=h*O+f*A+g*U,e[10]=m*O+y*A+_*U,e[11]=p*O+E*A+x*U,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Br(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],l=t[8],u=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+l*n,e[5]=a*i+u*n,e[6]=o*i+d*n,e[7]=c*i+h*n,e[8]=l*i-s*n,e[9]=u*i-a*n,e[10]=d*i-o*n,e[11]=h*i-c*n,e}function Wr(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[8],u=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-l*n,e[1]=a*i-u*n,e[2]=o*i-d*n,e[3]=c*i-h*n,e[8]=s*n+l*i,e[9]=a*n+u*i,e[10]=o*n+d*i,e[11]=c*n+h*i,e}function Vr(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[4],u=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+l*n,e[1]=a*i+u*n,e[2]=o*i+d*n,e[3]=c*i+h*n,e[4]=l*i-s*n,e[5]=u*i-a*n,e[6]=d*i-o*n,e[7]=h*i-c*n,e}function Hr(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 Kr(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 Xr(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,l;return a<M?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),l=1-c,e[0]=n*n*l+c,e[1]=i*n*l+s*o,e[2]=s*n*l-i*o,e[3]=0,e[4]=n*i*l-s*o,e[5]=i*i*l+c,e[6]=s*i*l+n*o,e[7]=0,e[8]=n*s*l+i*o,e[9]=i*s*l-n*o,e[10]=s*s*l+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Yr(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 jr(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 $r(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 St(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,l=s+s,u=n*o,d=n*c,h=n*l,m=i*c,p=i*l,v=s*l,f=a*o,y=a*c,E=a*l;return e[0]=1-(m+v),e[1]=d+E,e[2]=h-y,e[3]=0,e[4]=d-E,e[5]=1-(u+v),e[6]=p+f,e[7]=0,e[8]=h+y,e[9]=p-f,e[10]=1-(u+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function qr(e,t){var r=new F(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=n*n+i*i+s*s+a*a;return d>0?(r[0]=(o*a+u*n+c*s-l*i)*2/d,r[1]=(c*a+u*i+l*n-o*s)*2/d,r[2]=(l*a+u*s+o*i-c*n)*2/d):(r[0]=(o*a+u*n+c*s-l*i)*2,r[1]=(c*a+u*i+l*n-o*s)*2,r[2]=(l*a+u*s+o*i-c*n)*2),St(e,t,r),e}function Jr(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],l=t[9],u=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+l*l+u*u),e}function Zr(e,t){var r=new F(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,l=t[4]*n,u=t[5]*i,d=t[6]*s,h=t[8]*n,m=t[9]*i,p=t[10]*s,v=a+u+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]=(o-l)/f):a>u&&a>p?(f=Math.sqrt(1+a-u-p)*2,e[3]=(d-m)/f,e[0]=.25*f,e[1]=(o+l)/f,e[2]=(h+c)/f):u>p?(f=Math.sqrt(1+u-a-p)*2,e[3]=(h-c)/f,e[0]=(o+l)/f,e[1]=.25*f,e[2]=(d+m)/f):(f=Math.sqrt(1+p-a-u)*2,e[3]=(o-l)/f,e[0]=(h+c)/f,e[1]=(d+m)/f,e[2]=.25*f),e}function Qr(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],l=n[6],u=n[8],d=n[9],h=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+l*l),r[2]=Math.sqrt(u*u+d*d+h*h);var m=1/r[0],p=1/r[1],v=1/r[2],f=i*m,y=s*p,E=a*v,w=o*m,g=c*p,_=l*v,x=u*m,z=d*p,T=h*v,N=f+g+T,S=0;return N>0?(S=Math.sqrt(N+1)*2,e[3]=.25*S,e[0]=(_-z)/S,e[1]=(x-E)/S,e[2]=(y-w)/S):f>g&&f>T?(S=Math.sqrt(1+f-g-T)*2,e[3]=(_-z)/S,e[0]=.25*S,e[1]=(y+w)/S,e[2]=(x+E)/S):g>T?(S=Math.sqrt(1+g-f-T)*2,e[3]=(x-E)/S,e[0]=(y+w)/S,e[1]=.25*S,e[2]=(_+z)/S):(S=Math.sqrt(1+T-f-g)*2,e[3]=(y-w)/S,e[0]=(x+E)/S,e[1]=(_+z)/S,e[2]=.25*S),e}function en(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,l=s+s,u=a+a,d=i*c,h=i*l,m=i*u,p=s*l,v=s*u,f=a*u,y=o*c,E=o*l,w=o*u,g=n[0],_=n[1],x=n[2];return e[0]=(1-(p+f))*g,e[1]=(h+w)*g,e[2]=(m-E)*g,e[3]=0,e[4]=(h-w)*_,e[5]=(1-(d+f))*_,e[6]=(v+y)*_,e[7]=0,e[8]=(m+E)*x,e[9]=(v-y)*x,e[10]=(1-(d+p))*x,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function tn(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],l=s+s,u=a+a,d=o+o,h=s*l,m=s*u,p=s*d,v=a*u,f=a*d,y=o*d,E=c*l,w=c*u,g=c*d,_=n[0],x=n[1],z=n[2],T=i[0],N=i[1],S=i[2],R=(1-(v+y))*_,L=(m+g)*_,O=(p-w)*_,A=(m-g)*x,U=(1-(h+y))*x,ie=(f+E)*x,se=(p+w)*z,mt=(f-E)*z,ft=(1-(h+v))*z;return e[0]=R,e[1]=L,e[2]=O,e[3]=0,e[4]=A,e[5]=U,e[6]=ie,e[7]=0,e[8]=se,e[9]=mt,e[10]=ft,e[11]=0,e[12]=r[0]+T-(R*T+A*N+se*S),e[13]=r[1]+N-(L*T+U*N+mt*S),e[14]=r[2]+S-(O*T+ie*N+ft*S),e[15]=1,e}function rn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,l=r*a,u=n*a,d=n*o,h=i*a,m=i*o,p=i*c,v=s*a,f=s*o,y=s*c;return e[0]=1-d-p,e[1]=u+y,e[2]=h-f,e[3]=0,e[4]=u-y,e[5]=1-l-p,e[6]=m+v,e[7]=0,e[8]=h+f,e[9]=m-v,e[10]=1-l-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function nn(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),l=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)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*l,e[15]=0,e}function Tt(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 sn=Tt;function an(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 on(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),l=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*l*.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 At(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=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*l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*l,e[15]=1,e}var cn=At;function ln(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=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]=l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*l,e[15]=1,e}function un(e,t,r,n){var i,s,a,o,c,l,u,d,h,m,p=t[0],v=t[1],f=t[2],y=n[0],E=n[1],w=n[2],g=r[0],_=r[1],x=r[2];return Math.abs(p-g)<M&&Math.abs(v-_)<M&&Math.abs(f-x)<M?xt(e):(u=p-g,d=v-_,h=f-x,m=1/Math.sqrt(u*u+d*d+h*h),u*=m,d*=m,h*=m,i=E*h-w*d,s=w*u-y*h,a=y*d-E*u,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=d*a-h*s,c=h*i-u*a,l=u*s-d*i,m=Math.sqrt(o*o+c*c+l*l),m?(m=1/m,o*=m,c*=m,l*=m):(o=0,c=0,l=0),e[0]=i,e[1]=o,e[2]=u,e[3]=0,e[4]=s,e[5]=c,e[6]=d,e[7]=0,e[8]=a,e[9]=l,e[10]=h,e[11]=0,e[12]=-(i*p+s*v+a*f),e[13]=-(o*p+c*v+l*f),e[14]=-(u*p+d*v+h*f),e[15]=1,e)}function hn(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],l=n[2],u=i-r[0],d=s-r[1],h=a-r[2],m=u*u+d*d+h*h;m>0&&(m=1/Math.sqrt(m),u*=m,d*=m,h*=m);var p=c*h-l*d,v=l*u-o*h,f=o*d-c*u;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-u*f,e[6]=u*v-d*p,e[7]=0,e[8]=u,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function dn(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 mn(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 fn(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 zt(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 pn(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 vn(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 yn(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 gn(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],l=e[7],u=e[8],d=e[9],h=e[10],m=e[11],p=e[12],v=e[13],f=e[14],y=e[15],E=t[0],w=t[1],g=t[2],_=t[3],x=t[4],z=t[5],T=t[6],N=t[7],S=t[8],R=t[9],L=t[10],O=t[11],A=t[12],U=t[13],ie=t[14],se=t[15];return Math.abs(r-E)<=M*Math.max(1,Math.abs(r),Math.abs(E))&&Math.abs(n-w)<=M*Math.max(1,Math.abs(n),Math.abs(w))&&Math.abs(i-g)<=M*Math.max(1,Math.abs(i),Math.abs(g))&&Math.abs(s-_)<=M*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-x)<=M*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-z)<=M*Math.max(1,Math.abs(o),Math.abs(z))&&Math.abs(c-T)<=M*Math.max(1,Math.abs(c),Math.abs(T))&&Math.abs(l-N)<=M*Math.max(1,Math.abs(l),Math.abs(N))&&Math.abs(u-S)<=M*Math.max(1,Math.abs(u),Math.abs(S))&&Math.abs(d-R)<=M*Math.max(1,Math.abs(d),Math.abs(R))&&Math.abs(h-L)<=M*Math.max(1,Math.abs(h),Math.abs(L))&&Math.abs(m-O)<=M*Math.max(1,Math.abs(m),Math.abs(O))&&Math.abs(p-A)<=M*Math.max(1,Math.abs(p),Math.abs(A))&&Math.abs(v-U)<=M*Math.max(1,Math.abs(v),Math.abs(U))&&Math.abs(f-ie)<=M*Math.max(1,Math.abs(f),Math.abs(ie))&&Math.abs(y-se)<=M*Math.max(1,Math.abs(y),Math.abs(se))}var _n=wt,xn=zt,P={};_t(P,{add:()=>An,angle:()=>jn,bezier:()=>Gn,ceil:()=>zn,clone:()=>wn,copy:()=>En,create:()=>Nt,cross:()=>Dn,dist:()=>ri,distance:()=>kt,div:()=>ti,divide:()=>Ot,dot:()=>Xe,equals:()=>Zn,exactEquals:()=>Jn,floor:()=>Nn,forEach:()=>ai,fromValues:()=>Sn,hermite:()=>In,inverse:()=>Cn,len:()=>ii,length:()=>Mt,lerp:()=>Un,max:()=>Rn,min:()=>Mn,mul:()=>ei,multiply:()=>Lt,negate:()=>bn,normalize:()=>Pn,random:()=>Bn,rotateX:()=>Kn,rotateY:()=>Xn,rotateZ:()=>Yn,round:()=>Ln,scale:()=>On,scaleAndAdd:()=>kn,set:()=>Tn,slerp:()=>Fn,sqrDist:()=>ni,sqrLen:()=>si,squaredDistance:()=>bt,squaredLength:()=>Ct,str:()=>qn,sub:()=>Qn,subtract:()=>Rt,transformMat3:()=>Vn,transformMat4:()=>Wn,transformQuat:()=>Hn,zero:()=>$n});function Nt(){var e=new F(3);return F!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function wn(e){var t=new F(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Mt(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function Sn(e,t,r){var n=new F(3);return n[0]=e,n[1]=t,n[2]=r,n}function En(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Tn(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function An(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function Rt(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],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}function Ot(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function zn(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Nn(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Mn(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 Rn(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 Ln(e,t){return e[0]=Fe(t[0]),e[1]=Fe(t[1]),e[2]=Fe(t[2]),e}function On(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function kn(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 kt(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 bt(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 Ct(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function bn(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Cn(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Pn(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 Xe(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Dn(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 Un(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 Fn(e,t,r,n){var i=Math.acos(Math.min(Math.max(Xe(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 In(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,l=a*(s-1),u=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*l+i[0]*u,e[1]=t[1]*o+r[1]*c+n[1]*l+i[1]*u,e[2]=t[2]*o+r[2]*c+n[2]*l+i[2]*u,e}function Gn(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,l=o*a,u=3*s*o,d=3*c*a,h=c*s;return e[0]=t[0]*l+r[0]*u+n[0]*d+i[0]*h,e[1]=t[1]*l+r[1]*u+n[1]*d+i[1]*h,e[2]=t[2]*l+r[2]*u+n[2]*d+i[2]*h,e}function Bn(e,t){t=t===void 0?1:t;var r=pt()*2*Math.PI,n=pt()*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 Wn(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 Vn(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 Hn(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],l=t[2],u=i*l-s*c,d=s*o-n*l,h=n*c-i*o;return u=u+u,d=d+d,h=h+h,e[0]=o+a*u+i*h-s*d,e[1]=c+a*d+s*u-n*h,e[2]=l+a*h+n*d-i*u,e}function Kn(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 Xn(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 Yn(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 jn(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)),l=c&&Xe(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function $n(e){return e[0]=0,e[1]=0,e[2]=0,e}function qn(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Jn(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Zn(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 Qn=Rt,ei=Lt,ti=Ot,ri=kt,ni=bt,ii=Mt,si=Ct,ai=(function(){var e=Nt();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}})(),fo=Math.PI/180,oi=Math.PI/180,po=180/Math.PI,ae=oi,I=1,X=2;var Ye=8,je=16,ci=32;var li=16384;var fe=65536,Pt=1<<17,ui=1<<18,hi=1<<19,di=1<<20,mi=1<<21,fi=1<<22,pi=1<<23,vo=1<<24,pe=1<<25,vi=1<<26,yo=1<<27,go=1<<28,_o=1<<29,ve=1<<30,xo=1<<31;var wo=1<<25,So=1<<28,Eo=1<<29,To=1<<30,Ao=1<<31,zo=I|X,No=I|fe|X|pe|ve,Mo=I|fe|X,Ro=I|Pt|X|pe|ve,Lo=ci|Ye|je,Oo=I|je|Ye,yi=I|pe|ve|X|vi,ko=ui|hi|di|mi|fi|pi,bo=I|Ye|je|pe|ve,Co=I|fe|X,Po=I|X,Do=I|fe|X|Pt,Uo=yi|li,Fo=Number.MAX_SAFE_INTEGER-1,Dt=256,gi=256,_i=8192,xi=2048,wi=512,Si=256,Ei=Dt*2,Ti=256,Ie=32,Ut=(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+_i]="Sounds",e[e.Images=e.Sounds+xi]="Images",e[e.Lights=e.Images+wi]="Lights",e[e.ShadowLights=e.Lights+gi]="ShadowLights",e[e.Items=e.ShadowLights+Ti]="Items",e[e.PlayerSkins=e.Items+Si]="PlayerSkins",e[e.General=e.PlayerSkins+Dt]="General",e[e.WheelWeapons=e.General+Ei]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ie]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ie]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ie]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Ut||{}),Io=Ut.MaxConfigStrings;function Ai(){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 Go=Ai(),Bo=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 Ke=4,Ge=7*Ke,Wo=[{index:0,size:3,type:5126,stride:Ge,offset:0},{index:1,size:2,type:5126,stride:Ge,offset:3*Ke},{index:2,size:2,type:5126,stride:Ge,offset:5*Ke}],Vo=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]),zi=class{constructor(){this._position=P.create(),this._angles=P.create(),this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=b.create(),this._projectionMatrix=b.create(),this._viewProjectionMatrix=b.create(),this._dirty=!0}get position(){return this._position}set position(e){P.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){P.copy(this._angles,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=b.create();return b.perspective(t,e*ae,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;b.perspective(this._projectionMatrix,this._fov*ae,this._aspect,this._near,this._far);let e=b.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]*ae,r=this._angles[1]*ae,n=this._angles[2]*ae,i=b.create();b.identity(i),b.rotateZ(i,i,-r),b.rotateY(i,i,-t),b.rotateX(i,i,-n);let s=b.create();b.multiply(s,e,i);let a=P.negate(P.create(),this._position),o=P.create();P.transformMat4(o,a,i);let c=P.fromValues(o[1]||0,o[2]||0,o[0]||0);b.copy(this._viewMatrix,s),this._viewMatrix[12]=c[0],this._viewMatrix[13]=c[1],this._viewMatrix[14]=c[2],b.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}},Ni={x:0,y:0,z:0},Ho=Math.PI/180;function de(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function le(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function ce(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Mi(e){return ce(e,e)}function ye(e){return Math.sqrt(Mi(e))}function Ft(e){let t=ye(e);return t===0?e:le(e,1/t)}var It=0,Gt=1,Bt=2,Ri=Math.PI/180,Ko=180/Math.PI;function Be(e,t){switch(t){case It:return e.x;case Gt:return e.y;case Bt:default:return e.z}}function We(e){return e*Ri}function vt(e){let t=e%360;return t<0?360+t:t}function Wt(e){let t=We(Be(e,Gt)),r=We(Be(e,It)),n=We(Be(e,Bt)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),l=Math.cos(n),u={x:o*s,y:o*i,z:-a},d={x:-c*a*s-l*-i,y:-c*a*i-l*s,z:-c*o},h={x:l*a*s-c*-i,y:l*a*i-c*s,z:l*o};return{forward:u,right:d,up:h}}var G=1,Y=2;var $e=8,qe=16,Li=32;var Oi=16384;var ge=65536,Vt=1<<17,ki=1<<18,bi=1<<19,Ci=1<<20,Pi=1<<21,Di=1<<22,Ui=1<<23,Xo=1<<24,_e=1<<25,Fi=1<<26,Yo=1<<27,jo=1<<28,$o=1<<29,xe=1<<30,qo=1<<31;var Jo=1<<25,Zo=1<<28,Qo=1<<29,ec=1<<30,tc=1<<31,rc=G|Y,nc=G|ge|Y|_e|xe,ic=G|ge|Y,sc=G|Vt|Y|_e|xe,ac=Li|$e|qe,oc=G|qe|$e,Ii=G|_e|xe|Y|Fi,cc=ki|bi|Ci|Pi|Di|Ui,lc=G|$e|qe|_e|xe,uc=G|ge|Y,hc=G|Y,dc=G|ge|Y|Vt,mc=Ii|Oi,fc=Number.MAX_SAFE_INTEGER-1,Ht=256,Gi=256,Bi=8192,Wi=2048,Vi=512,Hi=256,Ki=Ht*2,Xi=256,Ve=32,Kt=(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+Bi]="Sounds",e[e.Images=e.Sounds+Wi]="Images",e[e.Lights=e.Images+Vi]="Lights",e[e.ShadowLights=e.Lights+Gi]="ShadowLights",e[e.Items=e.ShadowLights+Xi]="Items",e[e.PlayerSkins=e.Items+Hi]="PlayerSkins",e[e.General=e.PlayerSkins+Ht]="General",e[e.WheelWeapons=e.General+Ki]="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))(Kt||{}),pc=Kt.MaxConfigStrings,me=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(me||{}),K=(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))(K||{});function ee(e,t){return(e&t)!==0}var Xt=(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))(Xt||{}),Z=(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))(Z||{});function Yi(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:l}=e,u=ye(t);if(u<1)return{x:0,y:0,z:t.z};let d=0;if(n&&!i||s){let p=u<c?c:u;d+=p*o*r}a>0&&!s&&(d+=u*l*a*r);let h=u-d;if(h<0&&(h=0),h===u)return t;let m=h/u;return le(t,m)}function yt(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=ce(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 ji(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=ce(t,r),c=a-o;if(c<=0)return t;let l=i*n*s;return l>c&&(l=c),{x:t.x+r.x*l,y:t.y+r.y*l,z:t.z+r.z*l}}function $i(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=ye(s);if(a>i){let o=i/a;s=le(s,o),a=i}return{wishdir:a===0?s:Ft(s),wishspeed:a}}function qi(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=de(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=de(s,{x:0,y:0,z:n.upmove}):s=de(s,{x:0,y:0,z:10});let a=ye(s);if(a>i){let o=i/a;s=le(s,o),a=i}return a*=.5,{wishdir:a===0?s:Ft(s),wishspeed:a}}function Ji(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function Zi(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Yt(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=Ji(r,n),i={...i,x:Zi(i.x)});let s=Wt(i);return{viewangles:i,...s}}var Qi={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},es=800,Q={x:0,y:0,z:0},ts=250;function oe(){return{origin:Q,velocity:Q,viewangles:Q,pmFlags:K.OnGround,pmType:Xt.Normal,waterlevel:me.None,gravity:es,deltaAngles:Q}}function gt(e){return e?{...oe(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:Q}:oe()}function J(e,t,r){return e+(t-e)*r}function He(e,t,r){let n=vt(t-e);return n>180&&(n-=360),vt(e+n*r)}function rs(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:He(e.viewangles.x,t.viewangles.x,n),y:He(e.viewangles.y,t.viewangles.y,n),z:He(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles}}function ns(e,t,r,n){let i=Math.min(Math.max(t.msec,0),ts)/1e3,s=ee(e.pmFlags,K.OnGround),a=ee(e.pmFlags,K.OnLadder),o=Yi({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:l,right:u}=Yt({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??Q}),d=e.waterlevel>me.None?qi({forward:l,right:u,cmd:t,maxSpeed:r.pmWaterSpeed}):$i({forward:l,right:u,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>me.None)o=yt({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=ee(e.pmFlags,K.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,v=d.wishspeed>p?{wishdir:d.wishdir,wishspeed:p}:d;o=yt({velocity:o,wishdir:v.wishdir,wishspeed:v.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=ji({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,de(e.origin,le(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var is=class{constructor(e,t={}){this.baseFrame={frame:0,timeMs:0,state:oe()},this.commands=[],this.predicted=oe(),this.settings={...Qi,...t},this.trace=e,this.predicted=this.baseFrame.state??oe()}setAuthoritative(e){let t=gt(e.state);return this.baseFrame={...e,state:t},this.commands=this.commands.filter(r=>(r.serverFrame??Number.MAX_SAFE_INTEGER)>e.frame),this.recompute()}enqueueCommand(e){return this.commands.push(e),this.recompute()}getPredictedState(){return this.predicted}recompute(){let e=gt(this.baseFrame.state);for(let t of this.commands)e=ns(e,t,this.settings,this.trace);return this.predicted=e,e}},ss={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function as(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 os(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=os(t,n,i),a=e+s,c=ee(r,K.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 ls=class{constructor(e={}){this.bobTime=0,this.bobCycle=0,this.bobCycleRun=0,this.bobFracSin=0,this.settings={...ss,...e}}addKick(e){e.durationMs<=0||(this.kick={...e,remainingMs:e.durationMs})}get last(){return this.lastSample}sample(e,t){let{forward:r,right:n}=Wt(Yt({pmFlags:e.pmFlags,cmdAngles:e.viewangles,deltaAngles:e.deltaAngles??Ni}).viewangles),i=Math.sqrt(e.velocity.x*e.velocity.x+e.velocity.y*e.velocity.y),s=ee(e.pmFlags,K.OnGround),a=cs(this.bobTime,i,e.pmFlags,s,t);this.bobTime=a.bobTime,this.bobCycle=a.bobCycle,this.bobCycleRun=a.bobCycleRun,this.bobFracSin=a.bobFracSin;let o=ce(e.velocity,r)*this.settings.runPitch,c=ce(e.velocity,n)*this.settings.runRoll,l=this.bobFracSin*this.settings.bobPitch*i,u=this.bobFracSin*this.settings.bobRoll*i;ee(e.pmFlags,K.Ducked)&&s&&(l*=6,u*=6),o+=Math.min(l,this.settings.maxBobAngle),u=Math.min(u,this.settings.maxBobAngle),this.bobCycle&1&&(u=-u),c+=u;let d=Math.min(this.bobFracSin*i*this.settings.bobUp,this.settings.maxBobHeight),h=0,m=0;if(this.kick&&this.kick.remainingMs>0){let y=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));h+=y*this.kick.pitch,m+=y*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-t),this.kick.remainingMs===0&&(this.kick=void 0)}let f={angles:{x:o+h,y:0,z:c+m},offset:as({x:0,y:0,z:d}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:i};return this.lastSample=f,f}};function us(e){return e.trim().toLowerCase()}var jt=(e=>(e.Forward="+forward",e.Back="+back",e.MoveLeft="+moveleft",e.MoveRight="+moveright",e.MoveUp="+moveup",e.MoveDown="+movedown",e.Jump="+jump",e.Crouch="+crouch",e.Attack="+attack",e.Use="+use",e.Holster="+holster",e.TurnLeft="+left",e.TurnRight="+right",e.LookUp="+lookup",e.LookDown="+lookdown",e.SpeedModifier="+speed",e.Zoom="+zoom",e))(jt||{}),vc={"+attack":Z.Attack,"+use":Z.Use,"+holster":Z.Holster,"+jump":Z.Jump,"+crouch":Z.Crouch},yc=new Map(Object.values(jt).map(e=>[us(e),e]));function $t(e){let t=new is(e.engine.trace),r=new ls,n,i,s,a;return{init(o){n=o,o?.state&&t.setAuthoritative(o),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(o){return t.enqueueCommand(o)},render(o){o.latest?.state&&(t.setAuthoritative(o.latest),n=o.latest),o.previous?.state&&o.latest?.state?i=rs(o.previous.state,o.latest.state,o.alpha):i=o.latest?.state??o.previous?.state??t.getPredictedState();let c=o.latest&&o.previous?Math.max(0,o.latest.timeMs-o.previous.timeMs):0;if(s=r.sample(i,c),i){let{origin:u,viewangles:d}=i;a=new zi,a.position=P.fromValues(u.x,u.y,u.z),a.angles=P.fromValues(d.x,d.y,d.z),a.fov=90,a.aspect=4/3}return{}},shutdown(){n=void 0,i=void 0},get prediction(){return t},get lastRendered(){return i},get view(){return r},get lastView(){return s},get camera(){return a}}}var qt=25,hs=5,ds=()=>typeof performance<"u"?performance.now():Date.now(),ms=e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>e()):setTimeout(e,qt)},Jt=class{constructor(e,t={}){this.callbacks=e,this.accumulatorMs=0,this.frame=0,this.running=!1,this.tick=()=>{if(!this.running)return;let i=this.options.now(),s=this.lastTimeMs===void 0?0:i-this.lastTimeMs;this.lastTimeMs=i,this.advance(s,i),this.running&&this.options.schedule(this.tick)};let r=t.fixedDeltaMs??qt,n=t.maxSubSteps??hs;this.options={fixedDeltaMs:r,maxSubSteps:n,maxDeltaMs:t.maxDeltaMs??r*n,startTimeMs:t.startTimeMs,now:t.now??ds,schedule:t.schedule??ms}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let t=(this.lastTimeMs??0)+e;this.lastTimeMs=t,this.advance(e,t)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,t){let r=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+r,this.options.fixedDeltaMs*this.options.maxSubSteps);let n=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&n<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:t}),this.accumulatorMs-=this.options.fixedDeltaMs,n+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:t,accumulatorMs:this.accumulatorMs,frame:this.frame})}},fs=class{constructor(e,t,r={}){this.game=e,this.client=t,this.started=!1,this.stepSimulation=i=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(i,this.latestCommand)},this.renderClient=i=>{this.client&&(this.latestCommand=this.client.render({...i,previous:this.previousFrame,latest:this.latestFrame}))};let n=r.loop?.now?.()??Date.now();this.startTimeMs=r.startTimeMs??r.loop?.startTimeMs??n,this.loop=new Jt({simulate:this.stepSimulation,render:this.renderClient},{...r.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var Sc=Math.PI/180;var Ec=Math.PI/180,Tc=180/Math.PI;var B=1,j=2;var et=8,tt=16,ps=32;var vs=16384;var we=65536,Zt=1<<17,ys=1<<18,gs=1<<19,_s=1<<20,xs=1<<21,ws=1<<22,Ss=1<<23,Ac=1<<24,Se=1<<25,Es=1<<26,zc=1<<27,Nc=1<<28,Mc=1<<29,Ee=1<<30,Rc=1<<31;var Lc=1<<25,Oc=1<<28,kc=1<<29,bc=1<<30,Cc=1<<31,Pc=B|j,Dc=B|we|j|Se|Ee,Uc=B|we|j,Fc=B|Zt|j|Se|Ee,Ic=ps|et|tt,Gc=B|tt|et,Ts=B|Se|Ee|j|Es,Bc=ys|gs|_s|xs|ws|Ss,Wc=B|et|tt|Se|Ee,Vc=B|we|j,Hc=B|j,Kc=B|we|j|Zt,Xc=Ts|vs,Yc=Number.MAX_SAFE_INTEGER-1;var Qt=256,As=256,zs=8192,Ns=2048,Ms=512,Rs=256,Ls=Qt*2,Os=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+zs]="Sounds",e[e.Images=e.Sounds+Ns]="Images",e[e.Lights=e.Images+Ms]="Lights",e[e.ShadowLights=e.Lights+As]="ShadowLights",e[e.Items=e.ShadowLights+Os]="Items",e[e.PlayerSkins=e.Items+Rs]="PlayerSkins",e[e.General=e.PlayerSkins+Qt]="General",e[e.WheelWeapons=e.General+Ls]="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||{}),jc=er.MaxConfigStrings;var ks=class{constructor(e,t){this.engine=e,this.host=t,this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function tr(e,t,r,n){return new ks(e,new fs(t,r,n))}function bs(){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 $c=bs();var qc=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 Qe=4,Ze=7*Qe,Jc=[{index:0,size:3,type:5126,stride:Ze,offset:0},{index:1,size:2,type:5126,stride:Ze,offset:3*Qe},{index:2,size:2,type:5126,stride:Ze,offset:5*Qe}];var Zc=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]);function rr(e){return{init(){e.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(t,r){return new Jt(t,r)}}}var Cs={x:0,y:0,z:0},nl=Math.PI/180;function rt(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 ar(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Ps(e){return ar(e,e)}function Le(e){return Math.sqrt(Ps(e))}function or(e){let t=Le(e);return t===0?e:Re(e,1/t)}var il=Math.PI/180,sl=180/Math.PI;var W=624,Ds=397,Us=2567483615,Fs=2147483648,Is=2147483647,nt=4294967296,Gs=class{constructor(e=5489){this.state=new Uint32Array(W),this.index=W,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<W;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=W}nextUint32(){this.index>=W&&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<W;e++){let t=this.state[e]&Fs|this.state[(e+1)%W]&Is,r=this.state[(e+Ds)%W]^t>>>1;(t&1)!==0&&(r^=Us),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==W)throw new Error(`Expected ${W} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},cr=class{constructor(e={}){this.mt=new Gs(e.seed)}frandom(){return this.mt.nextUint32()/nt}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=nt-nt%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)}};function Bs(e){return new cr(e)}var V=1,$=2;var at=8,ot=16,Ws=32;var Vs=16384;var Oe=65536,lr=1<<17,Hs=1<<18,Ks=1<<19,Xs=1<<20,Ys=1<<21,js=1<<22,$s=1<<23,al=1<<24,ke=1<<25,qs=1<<26,ol=1<<27,cl=1<<28,ll=1<<29,be=1<<30,ul=1<<31;var hl=1<<25,dl=1<<28,ml=1<<29,fl=1<<30,pl=1<<31,vl=V|$,yl=V|Oe|$|ke|be,gl=V|Oe|$,_l=V|lr|$|ke|be,xl=Ws|at|ot,wl=V|ot|at,Js=V|ke|be|$|qs,Sl=Hs|Ks|Xs|Ys|js|$s,El=V|at|ot|ke|be,Tl=V|Oe|$,Al=V|$,zl=V|Oe|$|lr,Nl=Js|Vs,Ml=Number.MAX_SAFE_INTEGER-1;var ur=256,Zs=256,Qs=8192,ea=2048,ta=512,ra=256,na=ur*2,ia=256,it=32,hr=(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+Qs]="Sounds",e[e.Images=e.Sounds+ea]="Images",e[e.Lights=e.Images+ta]="Lights",e[e.ShadowLights=e.Lights+Zs]="ShadowLights",e[e.Items=e.ShadowLights+ia]="Items",e[e.PlayerSkins=e.Items+ra]="PlayerSkins",e[e.General=e.PlayerSkins+ur]="General",e[e.WheelWeapons=e.General+na]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+it]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+it]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+it]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(hr||{}),Rl=hr.MaxConfigStrings;function sa(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:l}=e,u=Le(t);if(u<1)return{x:0,y:0,z:t.z};let d=0;if(n&&!i||s){let p=u<c?c:u;d+=p*o*r}a>0&&!s&&(d+=u*l*a*r);let h=u-d;if(h<0&&(h=0),h===u)return t;let m=h/u;return Re(t,m)}function aa(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=ar(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 oa(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=Le(s);if(a>i){let o=i/a;s=Re(s,o),a=i}return{wishdir:a===0?s:or(s),wishspeed:a}}function ca(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=rt(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=rt(s,{x:0,y:0,z:n.upmove}):s=rt(s,{x:0,y:0,z:10});let a=Le(s);if(a>i){let o=i/a;s=Re(s,o),a=i}return a*=.5,{wishdir:a===0?s:or(s),wishspeed:a}}var ue=.025,la=(e,t)=>{let r={...e.origin};r.z-=.25;let n=t(e.origin,r);return{...e,onGround:n.fraction<1}},ua=(e,t)=>{let r={...e.origin};return r.z+=e.mins.z+1,t(r)&33554432?{...e,waterLevel:1}:{...e,waterLevel:0}},ha=(e,t,r,n)=>{let i={...e};i=la(i,r),i=ua(i,n);let{origin:s,velocity:a,onGround:o,waterLevel:c}=i,l=sa({velocity:a,frametime:ue,onGround:o,groundIsSlick:!1,onLadder:!1,waterlevel:c,pmFriction:6,pmStopSpeed:100,pmWaterFriction:1}),u=c>=2?ca({forward:{x:1,y:0,z:0},right:{x:0,y:1,z:0},cmd:t,maxSpeed:320}):oa({forward:{x:1,y:0,z:0},right:{x:0,y:1,z:0},cmd:t,maxSpeed:320}),d=aa({velocity:l,wishdir:u.wishdir,wishspeed:u.wishspeed,accel:o?10:1,frametime:ue}),h=r(s,{x:s.x+d.x*ue,y:s.y+d.y*ue,z:s.z+d.z*ue});return{...i,origin:h.endpos,velocity:d}};var dr={...Cs};function k(){return{...dr}}var nr=Object.freeze({aiflags:0,last_sighting:dr,trail_time:0,pausetime:0}),da=class{constructor(e){this.inUse=!1,this.freePending=!1,this.linkPrevious=null,this.linkNext=null,this.classname="",this.spawnflags=0,this.inventory={},this.origin=k(),this.old_origin=k(),this.velocity=k(),this.avelocity=k(),this.angles=k(),this.viewheight=0,this.mins=k(),this.maxs=k(),this.size=k(),this.mass=0,this.gravity=1,this.movetype=0,this.movedir=k(),this.modelindex=0,this.frame=0,this.skin=0,this.effects=0,this.renderfx=0,this.health=0,this.max_health=0,this.takedamage=!1,this.dmg=0,this.speed=0,this.deadflag=0,this.count=0,this.wait=0,this.delay=0,this.timestamp=0,this.sounds=0,this.noise_index=0,this.fly_sound_debounce_time=0,this.enemy=null,this.movetarget=null,this.target_ent=null,this.goalentity=null,this.ideal_yaw=0,this.yaw_speed=0,this.search_time=0,this.attack_finished_time=0,this.pain_finished_time=0,this.trail_time=0,this.groundentity=null,this.groundentity_linkcount=0,this.waterlevel=0,this.watertype=0,this.nextthink=0,this.activator=null,this.solid=0,this.flags=0,this.svflags=0,this.monsterinfo={...nr,last_sighting:k()},this.show_hostile=0,this.light_level=0,this.owner=null,this.index=e}reset(){this.inUse=!1,this.freePending=!1,this.linkPrevious=null,this.linkNext=null,this.classname="",this.spawnflags=0,this.target=void 0,this.targetname=void 0,this.killtarget=void 0,this.team=void 0,this.message=void 0,this.pathtarget=void 0,this.model=void 0,this.item=void 0,this.inventory={},this.origin=k(),this.old_origin=k(),this.velocity=k(),this.avelocity=k(),this.angles=k(),this.viewheight=0,this.mins=k(),this.maxs=k(),this.size=k(),this.mass=0,this.gravity=1,this.movetype=0,this.movedir=k(),this.modelindex=0,this.frame=0,this.skin=0,this.effects=0,this.renderfx=0,this.health=0,this.max_health=0,this.takedamage=!1,this.dmg=0,this.speed=0,this.deadflag=0,this.count=0,this.wait=0,this.delay=0,this.timestamp=0,this.sounds=0,this.noise_index=0,this.fly_sound_debounce_time=0,this.enemy=null,this.movetarget=null,this.target_ent=null,this.goalentity=null,this.ideal_yaw=0,this.yaw_speed=0,this.search_time=0,this.attack_finished_time=0,this.pain_finished_time=0,this.trail_time=0,this.groundentity=null,this.groundentity_linkcount=0,this.waterlevel=0,this.watertype=0,this.nextthink=0,this.think=void 0,this.touch=void 0,this.use=void 0,this.pain=void 0,this.die=void 0,this.activator=null,this.solid=0,this.flags=0,this.svflags=0,this.monsterinfo={...nr,last_sighting:k()},this.combattarget=void 0,this.show_hostile=0,this.light_level=0}},ct=[{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:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",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:"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:"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:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}],ma=2048,te=0,fa=class{constructor(e=ma){if(this.freeList=[],this.pendingFree=[],this.activeHead=null,e<1||!Number.isInteger(e))throw new Error("EntityPool requires a positive integer size");this.entities=new Array(e);for(let r=0;r<e;r+=1)this.entities[r]=new da(r),r!==te&&this.freeList.push(r);let t=this.entities[te];t.inUse=!0,t.classname="worldspawn",this.activeHead=t}get world(){return this.entities[te]}get capacity(){return this.entities.length}get activeCount(){let e=0;for(let t of this)e+=1;return e}[Symbol.iterator](){let e=this.activeHead;return{next:()=>{if(!e)return{done:!0,value:void 0};let t=e;return e=e.linkNext,{done:!1,value:t}}}}spawn(){let e=this.freeList.pop();if(e===void 0)throw new Error("No free entities available");let t=this.entities[e];return t.reset(),t.inUse=!0,this.link(t),t}deferFree(e){if(e.index===te)throw new Error("Cannot free world entity");!e.inUse||e.freePending||(this.unlink(e),e.inUse=!1,e.freePending=!0,this.pendingFree.push(e.index))}freeImmediate(e){if(e.index===te)throw new Error("Cannot free world entity");e.inUse&&(this.unlink(e),e.reset(),this.freeList.push(e.index))}flushFreeList(){if(this.pendingFree.length!==0){for(let e of this.pendingFree)this.entities[e].reset(),this.freeList.push(e);this.pendingFree.length=0}}createSnapshot(){let e=Array.from(this,t=>t.index);return{capacity:this.entities.length,activeOrder:e,freeList:[...this.freeList],pendingFree:[...this.pendingFree]}}restore(e){if(e.capacity!==this.entities.length)throw new Error(`Snapshot capacity ${e.capacity} does not match pool capacity ${this.entities.length}`);let t=new Set,r=(n,i)=>{if(n<0||n>=this.entities.length)throw new Error(`Invalid entity index ${n} in ${i}`);if(t.has(n))throw new Error(`Duplicate entity index ${n} in snapshot`);t.add(n)};for(let n of e.activeOrder)r(n,"activeOrder");for(let n of e.freeList)r(n,"freeList");for(let n of e.pendingFree)r(n,"pendingFree");this.activeHead=null,this.freeList.length=0,this.pendingFree.length=0;for(let n of this.entities)n.reset();for(let n=e.activeOrder.length-1;n>=0;n-=1){let i=this.entities[e.activeOrder[n]];i.inUse=!0,this.link(i)}for(let n of e.pendingFree){let i=this.entities[n];i.inUse=!1,i.freePending=!0,i.linkNext=null,i.linkPrevious=null,this.pendingFree.push(n)}for(let n of e.freeList){let i=this.entities[n];i.inUse=!1,i.freePending=!1,i.linkNext=null,i.linkPrevious=null,this.freeList.push(n)}if(!e.activeOrder.includes(te))throw new Error("Snapshot must include the world entity as active")}link(e){e.linkNext=this.activeHead,this.activeHead&&(this.activeHead.linkPrevious=e),this.activeHead=e,e.linkPrevious=null}unlink(e){e.linkPrevious&&(e.linkPrevious.linkNext=e.linkNext),e.linkNext&&(e.linkNext.linkPrevious=e.linkPrevious),this.activeHead===e&&(this.activeHead=e.linkNext),e.linkPrevious=null,e.linkNext=null}},pa=class{constructor(){this.queue=[]}schedule(e,t){e.nextthink=t,this.queue.push({entity:e,time:t}),this.queue.sort((r,n)=>r.time===n.time?r.entity.index-n.entity.index:r.time-n.time)}cancel(e){if(this.queue.length!==0)for(let t=this.queue.length-1;t>=0;t-=1)this.queue[t].entity===e&&this.queue.splice(t,1)}snapshot(){return this.queue.map(({time:e,entity:t})=>({time:e,entityIndex:t.index}))}restore(e,t){this.queue.length=0;for(let r of e){let n=t(r.entityIndex);n&&this.schedule(n,r.time)}}runDueThinks(e){for(;this.queue.length>0;){let t=this.queue[0];if(t.time>e)break;this.queue.shift();let{entity:r,time:n}=t;!r.inUse||r.freePending||r.think&&r.nextthink===n&&r.think(r)}}};function Te(e){return{min:{x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},max:{x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z}}}function ir(e,t){return!(e.min.x>t.max.x||e.max.x<t.min.x||e.min.y>t.max.y||e.max.y<t.min.y||e.min.z>t.max.z||e.max.z<t.min.z)}var mr=ct.filter(e=>e.save||e.type==="callback"),va=new Map(mr.map(e=>[e.name,e]));function ya(e){return[e.x,e.y,e.z]}function ga(e){let t=e;if(!Array.isArray(t)||t.length!==3)throw new Error("Invalid vec3 serialization");let[r,n,i]=t;return{x:r,y:n,z:i}}function re(e,t,r){e[t]=r}function _a(e){return{...e}}function xa(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("Invalid inventory serialization");let t={};for(let[r,n]of Object.entries(e))t[r]=Number(n);return t}var wa=class{constructor(e,t,r){if(this.targetNameIndex=new Map,this.random=Bs(),this.currentTimeSeconds=0,this.pool=new fa(t),this.thinkScheduler=new pa,this.engine=e,this.callbackToName=new Map,r)for(let[n,i]of r.entries())this.callbackToName.set(i,n)}get world(){return this.pool.world}get activeCount(){return this.pool.activeCount}get timeSeconds(){return this.currentTimeSeconds}forEachEntity(e){for(let t of this.pool)e(t)}find(e){for(let t of this.pool)if(e(t))return t}spawn(){return this.pool.spawn()}free(e){this.unregisterTarget(e),this.thinkScheduler.cancel(e),this.pool.deferFree(e)}freeImmediate(e){this.unregisterTarget(e),this.thinkScheduler.cancel(e),this.pool.freeImmediate(e)}sound(e,t,r,n,i,s){this.engine.sound?.(e,t,r,n,i,s)}scheduleThink(e,t){this.thinkScheduler.schedule(e,t)}beginFrame(e){this.currentTimeSeconds=e}finalizeSpawn(e){!e.inUse||e.freePending||this.registerTarget(e)}findByClassname(e){let t=[];for(let r of this.pool)r.classname===e&&r.inUse&&!r.freePending&&t.push(r);return t}findByTargetName(e){let t=this.targetNameIndex.get(e);return t?Array.from(t).filter(r=>r.inUse&&!r.freePending):[]}pickTarget(e){if(!e)return null;let t=this.findByTargetName(e);if(t.length===0)return null;let r=this.random.randomIndex(t);return t[r]??null}killBox(e){let t=Te(e);for(let r of this.pool)r===e||r===this.pool.world||!r.inUse||r.freePending||r.solid===0||r.svflags&2||ir(t,Te(r))&&(r.health=0,r.deadflag=2,this.free(r))}useTargets(e,t=null){if(e.delay>0){let r=this.spawn();r.classname="DelayedUse",r.target=e.target,r.killtarget=e.killtarget,r.message=e.message,r.think=n=>{this.useTargetsImmediate(n,t??e),this.free(n)},this.scheduleThink(r,this.currentTimeSeconds+e.delay);return}this.useTargetsImmediate(e,t??e)}runFrame(){this.thinkScheduler.runDueThinks(this.currentTimeSeconds),this.runTouches(),this.pool.flushFreeList()}createSnapshot(){let e=[];for(let t of this.pool){let r={};for(let n of mr){let i=t[n.name];switch(n.type){case"vec3":r[n.name]=ya(i);break;case"entity":r[n.name]=i?.index??null;break;case"inventory":r[n.name]=_a(i);break;case"callback":r[n.name]=i?this.callbackToName.get(i)??null:null;break;default:r[n.name]=i??null;break}}e.push({index:t.index,fields:r})}return{timeSeconds:this.currentTimeSeconds,pool:this.pool.createSnapshot(),entities:e,thinks:this.thinkScheduler.snapshot()}}restore(e,t){this.currentTimeSeconds=e.timeSeconds,this.pool.restore(e.pool);let r=new Map;for(let i of this.pool)r.set(i.index,i);let n=[];for(let i of e.entities){let s=r.get(i.index);if(s)for(let[a,o]of Object.entries(i.fields)){let c=va.get(a);if(!(!c||o===void 0))switch(c.type){case"vec3":re(s,a,ga(o));break;case"entity":n.push({entity:s,name:c.name,targetIndex:o});break;case"inventory":re(s,a,xa(o));break;case"boolean":re(s,a,!!o);break;case"callback":if(o){let l=t?.get(o);l&&re(s,a,l)}break;default:re(s,a,o);break}}}for(let i of n){let s=i.targetIndex===null?null:r.get(i.targetIndex)??null;re(i.entity,i.name,s)}this.thinkScheduler.restore(e.thinks,i=>r.get(i))}runTouches(){let e=this.pool.world,t=[];for(let r of this.pool)r!==e&&(!r.inUse||r.freePending||r.solid===0||t.push(r));for(let r=0;r<t.length;r+=1){let n=t[r],i=null;for(let s=r+1;s<t.length;s+=1){let a=t[s];if(!n.touch&&!a.touch)continue;i||(i=Te(n));let o=Te(a);ir(i,o)&&(n.touch&&n.touch(n,a),a.touch&&a.touch(a,n))}}}registerTarget(e){if(!e.targetname)return;let t=this.targetNameIndex.get(e.targetname);t||(t=new Set,this.targetNameIndex.set(e.targetname,t)),t.add(e)}unregisterTarget(e){if(!e.targetname)return;let t=this.targetNameIndex.get(e.targetname);t&&(t.delete(e),t.size===0&&this.targetNameIndex.delete(e.targetname))}useTargetsImmediate(e,t){if(e.target)for(let r of this.findByTargetName(e.target))r!==e&&r.use?.(r,e,t);if(e.killtarget)for(let r of this.findByTargetName(e.killtarget))r!==e&&this.free(r)}};var Ll=1/40;var fr=(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))(fr||{}),pr=Object.keys(fr).length/2;function Sa(e=Ea(),t){let r=Array(pr).fill(0);if(t)for(let[n,i]of Object.entries(t))r[Number(n)]=i;return{caps:e.slice(),counts:r}}function Ea(){let e=Array(pr).fill(50);return e[0]=200,e[1]=100,e[4]=200,e}function Ta(e={}){let t=Sa(e.ammoCaps,e.ammo),r=new Set(e.weapons??[]),n=new Map(e.powerups??[]),i=new Set(e.keys??[]);return{ammo:t,ownedWeapons:r,currentWeapon:e.currentWeapon,armor:e.armor??null,powerups:n,keys:i}}var Ol=new Map(ct.map(e=>[e.name,e]));function Aa(e){return e.find(t=>t.classname==="info_player_start")}var za=["prep","simulate","finish"],Na=class{constructor(e){if(this.timeMs=0,this.frame=0,this.stageHandlers={prep:[],simulate:[],finish:[]},this.stageCounts={prep:0,simulate:0,finish:0},this.stageCompactionNeeded={prep:!1,simulate:!1,finish:!1},e)for(let t of za){let r=e[t];r&&this.addStage(t,r)}}addStage(e,t){let r=this.stageHandlers[e];return r.push(t),this.stageCounts[e]+=1,()=>{let n=r.indexOf(t);n>=0&&r[n]&&(r[n]=void 0,this.stageCounts[e]-=1,this.stageCompactionNeeded[e]=!0)}}reset(e){this.timeMs=e,this.frame=0}advance(e){let t=this.timeMs;this.timeMs=t+e.deltaMs,this.frame=e.frame;let r={...e,timeMs:this.timeMs,previousTimeMs:t,deltaSeconds:e.deltaMs/1e3};if(this.runStage("prep",r),this.stageCounts.simulate===0)throw new Error("GameFrameLoop requires at least one simulate stage");return this.runStage("simulate",r),this.runStage("finish",r),r}runStage(e,t){let r=this.stageHandlers[e];for(let n=0;n<r.length;n+=1){let i=r[n];i&&i(t)}this.stageCompactionNeeded[e]&&this.compactStageHandlers(e)}compactStageHandlers(e){let t=this.stageHandlers[e],r=0;for(let n=0;n<t.length;n+=1){let i=t[n];i&&(t[r]=i,r+=1)}t.length=r,this.stageCompactionNeeded[e]=!1}get time(){return this.timeMs}get frameNumber(){return this.frame}},Ma={frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0},Ra=class{constructor(){this.state=Ma}start(e){let t=e/1e3;this.state={frameNumber:0,timeSeconds:t,previousTimeSeconds:t,deltaSeconds:0}}tick(e){return this.state={frameNumber:e.frame,timeSeconds:e.timeMs/1e3,previousTimeSeconds:e.previousTimeMs/1e3,deltaSeconds:e.deltaSeconds},this.state}get current(){return this.state}restore(e){this.state={...e}}};var kl=1<<24;var st=2,La=1;function D(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 Ae(e,t,r){return e===void 0?r:C(e,t)}function Me(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=D(e,"level");return{frameNumber:Ae(t.frameNumber,"level.frameNumber",0),timeSeconds:Ae(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Ae(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Ae(t.deltaSeconds,"level.deltaSeconds",0)}}function ka(e){if(e===void 0)return new cr().getState();let t=D(e,"rng"),r=D(t.mt,"rng.mt"),n=Ne(r.state,"rng.mt.state");return{mt:{index:C(r.index,"rng.mt.index"),state:n}}}function ba(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=D(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=D(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=D(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 Pa(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=D(t,`entities[${r}]`);return{index:C(n.index,`entities[${r}].index`),fields:Ca(n.fields)}})}function Da(e){let t=D(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 Ua(e){let t=D(e,"entities");return{timeSeconds:C(t.timeSeconds,"entities.timeSeconds"),pool:Da(t.pool),entities:Pa(t.entities),thinks:ba(t.thinks)}}function Fa(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=D(t,`cvars[${r}]`);return{name:Me(n.name,`cvars[${r}].name`),value:Me(n.value,`cvars[${r}].value`),flags:C(n.flags,`cvars[${r}].flags`)}})}function Ia(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>Me(t,`configstrings[${r}]`))}function Ga(e){return e===void 0?{}:D(e,"gameState")}function vr(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=D(n,"save"),s=i.version??st,a=C(s,"version");if(a<La)throw new Error(`Unsupported save version ${a}`);if(a>st&&!r)throw new Error(`Save version ${a} is newer than supported ${st}`);return{version:a,timestamp:C(i.timestamp,"timestamp"),map:Me(i.map,"map"),difficulty:C(i.difficulty,"difficulty"),playtimeSeconds:C(i.playtimeSeconds,"playtimeSeconds"),gameState:Ga(i.gameState),level:Oa(i.level),rng:ka(i.rng),entities:Ua(i.entities),cvars:Fa(i.cvars),configstrings:Ia(i.configstrings),player:i.player?i.player:void 0}}var bl=new Set(ct.filter(e=>e.save).map(e=>e.name));var sr=globalThis.TextEncoder;function ne(e){return vr({...e},{allowNewerVersion:!0})}function Ba(e){return sr?new sr().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:ne(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:ne(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:ne(e.save)}))}},Va=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:ne(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:ne(t.save)}))}},lt=class he{constructor(t={}){let{dbName:r=he.DEFAULT_DB_NAME,storeName:n=he.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new Va(i,r,n):this.adapter=new Wa}async save(t,r,n={}){let i=ne(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:Ba(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 vr(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(he.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(he.QUICK_SLOT,t)}};lt.DEFAULT_DB_NAME="quake2ts-saves";lt.DEFAULT_STORE="saves";lt.QUICK_SLOT="quicksave";function Ha(){return{states:new Map}}var ze={x:0,y:0,z:0};function yr(e,t,r,n){let i=n.gravity,s=new Ra,a=new Na,o=new wa(r);a.addStage("prep",h=>{s.tick(h),o.beginFrame(s.current.timeSeconds)}),a.addStage("simulate",({deltaSeconds:h})=>{l={x:l.x+i.x*h,y:l.y+i.y*h,z:l.z+i.z*h},c={x:c.x+l.x*h,y:c.y+l.y*h,z:c.z+l.z*h},o.runFrame()});let c={...ze},l={...ze},u=h=>({frame:h,timeMs:a.time,state:{gravity:{...i},origin:{...c},velocity:{...l},level:{...s.current},entities:{activeCount:o.activeCount,worldClassname:o.world.classname}}}),d=h=>{a.reset(h),s.start(h),c={...ze},l={...ze},o.beginFrame(h/1e3),o.runFrame()};return{init(h){return d(h),u(0)},shutdown(){},spawnWorld(){let h=Aa(o);if(h){let m=o.spawn();m.classname="player",m.origin={...h.origin},m.angles={...h.angles},m.health=100,m.mins={x:-16,y:-16,z:-24},m.maxs={x:16,y:16,z:32},m.client={inventory:Ta(),weaponStates:Ha()},o.finalizeSpawn(m),c={...m.origin}}},frame(h,m){let p=a.advance(h),v=o.find(f=>f.classname==="player");if(m&&v){let f={forwardmove:m.forwardmove,sidemove:m.sidemove,upmove:m.upmove,buttons:m.buttons},y={origin:v.origin,velocity:v.velocity,onGround:!1,waterLevel:0,mins:v.mins,maxs:v.maxs},E=ha(y,f,e,t);v.origin=E.origin,v.velocity=E.velocity}return u(p.frame)},entities:o,sound(h,m,p,v,f,y){o.sound(h,m,p,v,f,y)},centerprintf(h,m){r.centerprintf?.(h,m)},get time(){return s.current.timeSeconds}}}var gr={x:0,y:0,z:0};var Kl=Math.PI/180;var Xl=Math.PI/180,Yl=180/Math.PI;var H=1,q=2;var ht=8,dt=16,Ka=32;var Xa=16384;var Ce=65536,_r=1<<17,Ya=1<<18,ja=1<<19,$a=1<<20,qa=1<<21,Ja=1<<22,Za=1<<23,jl=1<<24,Pe=1<<25,Qa=1<<26,$l=1<<27,ql=1<<28,Jl=1<<29,De=1<<30,Zl=1<<31;var Ql=1<<25,eu=1<<28,tu=1<<29,ru=1<<30,nu=1<<31;var iu=H|q,su=H|Ce|q|Pe|De,au=H|Ce|q,ou=H|_r|q|Pe|De,cu=Ka|ht|dt,lu=H|dt|ht,eo=H|Pe|De|q|Qa,uu=Ya|ja|$a|qa|Ja|Za,hu=H|ht|dt|Pe|De,du=H|Ce|q,mu=H|q,fu=H|Ce|q|_r,pu=eo|Xa;var vu=Number.MAX_SAFE_INTEGER-1;var xr=256;var to=256,ro=8192,no=2048,io=512,so=256,ao=xr*2,oo=256,ut=32;var 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+ro]="Sounds",e[e.Images=e.Sounds+no]="Images",e[e.Lights=e.Images+io]="Lights",e[e.ShadowLights=e.Lights+to]="ShadowLights",e[e.Items=e.ShadowLights+oo]="Items",e[e.PlayerSkins=e.Items+so]="PlayerSkins",e[e.General=e.PlayerSkins+xr]="General",e[e.WheelWeapons=e.General+ao]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ut]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ut]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ut]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(wr||{}),yu=wr.MaxConfigStrings;function co(){let e=(o,c)=>({start:o,end:c,fraction:1,endpos:c,allsolid:!1,startsolid:!1}),t=o=>0,r=rr({trace:e}),i=yr(e,t,{sound:(o,c,l)=>console.log(`Sound played: ${l}`),centerprintf(o,c){let l=document.createElement("div");l.style.position="absolute",l.style.top="50%",l.style.left="50%",l.style.transform="translate(-50%, -50%)",l.style.color="white",l.style.fontSize="2em",l.style.fontFamily="sans-serif",l.innerText=c,document.body.appendChild(l),setTimeout(()=>document.body.removeChild(l),3e3)}},{gravity:gr}),s=$t({engine:{trace:e}}),a=tr(r,i,s);return a.start(),{engine:r,game:i,client:s,runtime:a}}return Nr(lo);})();
1
+ "use strict";var Quake2=(()=>{var Fe=Object.defineProperty;var Sr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Tr=Object.prototype.hasOwnProperty;var Ar=(e,t)=>{for(var r in t)Fe(e,r,{get:t[r],enumerable:!0})},zr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Er(t))!Tr.call(e,i)&&i!==r&&Fe(e,i,{get:()=>t[i],enumerable:!(n=Sr(t,i))||n.enumerable});return e};var Nr=e=>zr(Fe({},"__esModule",{value:!0}),e);var lo={};Ar(lo,{bootstrapViewer:()=>co});var Mr=Object.defineProperty,_t=(e,t)=>{for(var r in t)Mr(e,r,{get:t[r],enumerable:!0})},M=1e-6,U=typeof Float32Array<"u"?Float32Array:Array,pt=Math.random;function Ue(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var ho=Math.PI/180,mo=180/Math.PI,b={};_t(b,{add:()=>fn,adjoint:()=>Dr,clone:()=>Lr,copy:()=>Or,create:()=>Rr,decompose:()=>Qr,determinant:()=>Fr,equals:()=>gn,exactEquals:()=>yn,frob:()=>mn,fromQuat:()=>rn,fromQuat2:()=>qr,fromRotation:()=>Xr,fromRotationTranslation:()=>St,fromRotationTranslationScale:()=>en,fromRotationTranslationScaleOrigin:()=>tn,fromScaling:()=>Kr,fromTranslation:()=>Hr,fromValues:()=>kr,fromXRotation:()=>Yr,fromYRotation:()=>jr,fromZRotation:()=>$r,frustum:()=>nn,getRotation:()=>Zr,getScaling:()=>Et,getTranslation:()=>Jr,identity:()=>xt,invert:()=>Pr,lookAt:()=>un,mul:()=>_n,multiply:()=>wt,multiplyScalar:()=>pn,multiplyScalarAndAdd:()=>vn,ortho:()=>cn,orthoNO:()=>At,orthoZO:()=>ln,perspective:()=>sn,perspectiveFromFieldOfView:()=>on,perspectiveNO:()=>Tt,perspectiveZO:()=>an,rotate:()=>Gr,rotateX:()=>Br,rotateY:()=>Wr,rotateZ:()=>Vr,scale:()=>Ir,set:()=>br,str:()=>dn,sub:()=>xn,subtract:()=>zt,targetTo:()=>hn,translate:()=>Ur,transpose:()=>Cr});function Rr(){var e=new U(16);return U!=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 Lr(e){var t=new U(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 Or(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 kr(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,v){var f=new U(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]=l,f[10]=u,f[11]=d,f[12]=h,f[13]=m,f[14]=p,f[15]=v,f}function br(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,v,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]=l,e[9]=u,e[10]=d,e[11]=h,e[12]=m,e[13]=p,e[14]=v,e[15]=f,e}function xt(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 Cr(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 Pr(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],v=t[13],f=t[14],y=t[15],E=r*o-n*a,w=r*c-i*a,g=r*l-s*a,_=n*c-i*o,x=n*l-s*o,z=i*l-s*c,T=u*v-d*p,N=u*f-h*p,S=u*y-m*p,R=d*f-h*v,L=d*y-m*v,O=h*y-m*f,A=E*O-w*L+g*R+_*S-x*N+z*T;return A?(A=1/A,e[0]=(o*O-c*L+l*R)*A,e[1]=(i*L-n*O-s*R)*A,e[2]=(v*z-f*x+y*_)*A,e[3]=(h*x-d*z-m*_)*A,e[4]=(c*S-a*O-l*N)*A,e[5]=(r*O-i*S+s*N)*A,e[6]=(f*g-p*z-y*w)*A,e[7]=(u*z-h*g+m*w)*A,e[8]=(a*L-o*S+l*T)*A,e[9]=(n*S-r*L-s*T)*A,e[10]=(p*x-v*g+y*E)*A,e[11]=(d*g-u*x-m*E)*A,e[12]=(o*N-a*R-c*T)*A,e[13]=(r*R-n*N+i*T)*A,e[14]=(v*w-p*_-f*E)*A,e[15]=(u*_-d*w+h*E)*A,e):null}function Dr(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],v=t[13],f=t[14],y=t[15],E=r*o-n*a,w=r*c-i*a,g=r*l-s*a,_=n*c-i*o,x=n*l-s*o,z=i*l-s*c,T=u*v-d*p,N=u*f-h*p,S=u*y-m*p,R=d*f-h*v,L=d*y-m*v,O=h*y-m*f;return e[0]=o*O-c*L+l*R,e[1]=i*L-n*O-s*R,e[2]=v*z-f*x+y*_,e[3]=h*x-d*z-m*_,e[4]=c*S-a*O-l*N,e[5]=r*O-i*S+s*N,e[6]=f*g-p*z-y*w,e[7]=u*z-h*g+m*w,e[8]=a*L-o*S+l*T,e[9]=n*S-r*L-s*T,e[10]=p*x-v*g+y*E,e[11]=d*g-u*x-m*E,e[12]=o*N-a*R-c*T,e[13]=r*R-n*N+i*T,e[14]=v*w-p*_-f*E,e[15]=u*_-d*w+h*E,e}function Fr(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],l=e[8],u=e[9],d=e[10],h=e[11],m=e[12],p=e[13],v=e[14],f=e[15],y=t*a-r*s,E=t*o-n*s,w=r*o-n*a,g=l*p-u*m,_=l*v-d*m,x=u*v-d*p,z=t*x-r*_+n*g,T=s*x-a*_+o*g,N=l*w-u*E+d*y,S=m*w-p*E+v*y;return c*z-i*T+f*N-h*S}function wt(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=t[8],h=t[9],m=t[10],p=t[11],v=t[12],f=t[13],y=t[14],E=t[15],w=r[0],g=r[1],_=r[2],x=r[3];return e[0]=w*n+g*o+_*d+x*v,e[1]=w*i+g*c+_*h+x*f,e[2]=w*s+g*l+_*m+x*y,e[3]=w*a+g*u+_*p+x*E,w=r[4],g=r[5],_=r[6],x=r[7],e[4]=w*n+g*o+_*d+x*v,e[5]=w*i+g*c+_*h+x*f,e[6]=w*s+g*l+_*m+x*y,e[7]=w*a+g*u+_*p+x*E,w=r[8],g=r[9],_=r[10],x=r[11],e[8]=w*n+g*o+_*d+x*v,e[9]=w*i+g*c+_*h+x*f,e[10]=w*s+g*l+_*m+x*y,e[11]=w*a+g*u+_*p+x*E,w=r[12],g=r[13],_=r[14],x=r[15],e[12]=w*n+g*o+_*d+x*v,e[13]=w*i+g*c+_*h+x*f,e[14]=w*s+g*l+_*m+x*y,e[15]=w*a+g*u+_*p+x*E,e}function Ur(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,l,u,d,h,m,p,v,f,y;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],l=t[3],u=t[4],d=t[5],h=t[6],m=t[7],p=t[8],v=t[9],f=t[10],y=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=h,e[7]=m,e[8]=p,e[9]=v,e[10]=f,e[11]=y,e[12]=a*n+u*i+p*s+t[12],e[13]=o*n+d*i+v*s+t[13],e[14]=c*n+h*i+f*s+t[14],e[15]=l*n+m*i+y*s+t[15]),e}function Ir(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 Gr(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,l,u,d,h,m,p,v,f,y,E,w,g,_,x,z,T,N,S,R,L,O,A,F;return o<M?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),l=Math.cos(r),u=1-l,d=t[0],h=t[1],m=t[2],p=t[3],v=t[4],f=t[5],y=t[6],E=t[7],w=t[8],g=t[9],_=t[10],x=t[11],z=i*i*u+l,T=s*i*u+a*c,N=a*i*u-s*c,S=i*s*u-a*c,R=s*s*u+l,L=a*s*u+i*c,O=i*a*u+s*c,A=s*a*u-i*c,F=a*a*u+l,e[0]=d*z+v*T+w*N,e[1]=h*z+f*T+g*N,e[2]=m*z+y*T+_*N,e[3]=p*z+E*T+x*N,e[4]=d*S+v*R+w*L,e[5]=h*S+f*R+g*L,e[6]=m*S+y*R+_*L,e[7]=p*S+E*R+x*L,e[8]=d*O+v*A+w*F,e[9]=h*O+f*A+g*F,e[10]=m*O+y*A+_*F,e[11]=p*O+E*A+x*F,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Br(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],l=t[8],u=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+l*n,e[5]=a*i+u*n,e[6]=o*i+d*n,e[7]=c*i+h*n,e[8]=l*i-s*n,e[9]=u*i-a*n,e[10]=d*i-o*n,e[11]=h*i-c*n,e}function Wr(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[8],u=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-l*n,e[1]=a*i-u*n,e[2]=o*i-d*n,e[3]=c*i-h*n,e[8]=s*n+l*i,e[9]=a*n+u*i,e[10]=o*n+d*i,e[11]=c*n+h*i,e}function Vr(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[4],u=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+l*n,e[1]=a*i+u*n,e[2]=o*i+d*n,e[3]=c*i+h*n,e[4]=l*i-s*n,e[5]=u*i-a*n,e[6]=d*i-o*n,e[7]=h*i-c*n,e}function Hr(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 Kr(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 Xr(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,l;return a<M?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),l=1-c,e[0]=n*n*l+c,e[1]=i*n*l+s*o,e[2]=s*n*l-i*o,e[3]=0,e[4]=n*i*l-s*o,e[5]=i*i*l+c,e[6]=s*i*l+n*o,e[7]=0,e[8]=n*s*l+i*o,e[9]=i*s*l-n*o,e[10]=s*s*l+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Yr(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 jr(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 $r(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 St(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,l=s+s,u=n*o,d=n*c,h=n*l,m=i*c,p=i*l,v=s*l,f=a*o,y=a*c,E=a*l;return e[0]=1-(m+v),e[1]=d+E,e[2]=h-y,e[3]=0,e[4]=d-E,e[5]=1-(u+v),e[6]=p+f,e[7]=0,e[8]=h+y,e[9]=p-f,e[10]=1-(u+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function qr(e,t){var r=new U(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=n*n+i*i+s*s+a*a;return d>0?(r[0]=(o*a+u*n+c*s-l*i)*2/d,r[1]=(c*a+u*i+l*n-o*s)*2/d,r[2]=(l*a+u*s+o*i-c*n)*2/d):(r[0]=(o*a+u*n+c*s-l*i)*2,r[1]=(c*a+u*i+l*n-o*s)*2,r[2]=(l*a+u*s+o*i-c*n)*2),St(e,t,r),e}function Jr(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],l=t[9],u=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+l*l+u*u),e}function Zr(e,t){var r=new U(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,l=t[4]*n,u=t[5]*i,d=t[6]*s,h=t[8]*n,m=t[9]*i,p=t[10]*s,v=a+u+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]=(o-l)/f):a>u&&a>p?(f=Math.sqrt(1+a-u-p)*2,e[3]=(d-m)/f,e[0]=.25*f,e[1]=(o+l)/f,e[2]=(h+c)/f):u>p?(f=Math.sqrt(1+u-a-p)*2,e[3]=(h-c)/f,e[0]=(o+l)/f,e[1]=.25*f,e[2]=(d+m)/f):(f=Math.sqrt(1+p-a-u)*2,e[3]=(o-l)/f,e[0]=(h+c)/f,e[1]=(d+m)/f,e[2]=.25*f),e}function Qr(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],l=n[6],u=n[8],d=n[9],h=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+l*l),r[2]=Math.sqrt(u*u+d*d+h*h);var m=1/r[0],p=1/r[1],v=1/r[2],f=i*m,y=s*p,E=a*v,w=o*m,g=c*p,_=l*v,x=u*m,z=d*p,T=h*v,N=f+g+T,S=0;return N>0?(S=Math.sqrt(N+1)*2,e[3]=.25*S,e[0]=(_-z)/S,e[1]=(x-E)/S,e[2]=(y-w)/S):f>g&&f>T?(S=Math.sqrt(1+f-g-T)*2,e[3]=(_-z)/S,e[0]=.25*S,e[1]=(y+w)/S,e[2]=(x+E)/S):g>T?(S=Math.sqrt(1+g-f-T)*2,e[3]=(x-E)/S,e[0]=(y+w)/S,e[1]=.25*S,e[2]=(_+z)/S):(S=Math.sqrt(1+T-f-g)*2,e[3]=(y-w)/S,e[0]=(x+E)/S,e[1]=(_+z)/S,e[2]=.25*S),e}function en(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,l=s+s,u=a+a,d=i*c,h=i*l,m=i*u,p=s*l,v=s*u,f=a*u,y=o*c,E=o*l,w=o*u,g=n[0],_=n[1],x=n[2];return e[0]=(1-(p+f))*g,e[1]=(h+w)*g,e[2]=(m-E)*g,e[3]=0,e[4]=(h-w)*_,e[5]=(1-(d+f))*_,e[6]=(v+y)*_,e[7]=0,e[8]=(m+E)*x,e[9]=(v-y)*x,e[10]=(1-(d+p))*x,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function tn(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],l=s+s,u=a+a,d=o+o,h=s*l,m=s*u,p=s*d,v=a*u,f=a*d,y=o*d,E=c*l,w=c*u,g=c*d,_=n[0],x=n[1],z=n[2],T=i[0],N=i[1],S=i[2],R=(1-(v+y))*_,L=(m+g)*_,O=(p-w)*_,A=(m-g)*x,F=(1-(h+y))*x,ie=(f+E)*x,se=(p+w)*z,mt=(f-E)*z,ft=(1-(h+v))*z;return e[0]=R,e[1]=L,e[2]=O,e[3]=0,e[4]=A,e[5]=F,e[6]=ie,e[7]=0,e[8]=se,e[9]=mt,e[10]=ft,e[11]=0,e[12]=r[0]+T-(R*T+A*N+se*S),e[13]=r[1]+N-(L*T+F*N+mt*S),e[14]=r[2]+S-(O*T+ie*N+ft*S),e[15]=1,e}function rn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,l=r*a,u=n*a,d=n*o,h=i*a,m=i*o,p=i*c,v=s*a,f=s*o,y=s*c;return e[0]=1-d-p,e[1]=u+y,e[2]=h-f,e[3]=0,e[4]=u-y,e[5]=1-l-p,e[6]=m+v,e[7]=0,e[8]=h+f,e[9]=m-v,e[10]=1-l-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function nn(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),l=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)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*l,e[15]=0,e}function Tt(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 sn=Tt;function an(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 on(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),l=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*l*.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 At(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=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*l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*l,e[15]=1,e}var cn=At;function ln(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=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]=l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*l,e[15]=1,e}function un(e,t,r,n){var i,s,a,o,c,l,u,d,h,m,p=t[0],v=t[1],f=t[2],y=n[0],E=n[1],w=n[2],g=r[0],_=r[1],x=r[2];return Math.abs(p-g)<M&&Math.abs(v-_)<M&&Math.abs(f-x)<M?xt(e):(u=p-g,d=v-_,h=f-x,m=1/Math.sqrt(u*u+d*d+h*h),u*=m,d*=m,h*=m,i=E*h-w*d,s=w*u-y*h,a=y*d-E*u,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=d*a-h*s,c=h*i-u*a,l=u*s-d*i,m=Math.sqrt(o*o+c*c+l*l),m?(m=1/m,o*=m,c*=m,l*=m):(o=0,c=0,l=0),e[0]=i,e[1]=o,e[2]=u,e[3]=0,e[4]=s,e[5]=c,e[6]=d,e[7]=0,e[8]=a,e[9]=l,e[10]=h,e[11]=0,e[12]=-(i*p+s*v+a*f),e[13]=-(o*p+c*v+l*f),e[14]=-(u*p+d*v+h*f),e[15]=1,e)}function hn(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],l=n[2],u=i-r[0],d=s-r[1],h=a-r[2],m=u*u+d*d+h*h;m>0&&(m=1/Math.sqrt(m),u*=m,d*=m,h*=m);var p=c*h-l*d,v=l*u-o*h,f=o*d-c*u;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-u*f,e[6]=u*v-d*p,e[7]=0,e[8]=u,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function dn(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 mn(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 fn(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 zt(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 pn(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 vn(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 yn(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 gn(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],l=e[7],u=e[8],d=e[9],h=e[10],m=e[11],p=e[12],v=e[13],f=e[14],y=e[15],E=t[0],w=t[1],g=t[2],_=t[3],x=t[4],z=t[5],T=t[6],N=t[7],S=t[8],R=t[9],L=t[10],O=t[11],A=t[12],F=t[13],ie=t[14],se=t[15];return Math.abs(r-E)<=M*Math.max(1,Math.abs(r),Math.abs(E))&&Math.abs(n-w)<=M*Math.max(1,Math.abs(n),Math.abs(w))&&Math.abs(i-g)<=M*Math.max(1,Math.abs(i),Math.abs(g))&&Math.abs(s-_)<=M*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-x)<=M*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-z)<=M*Math.max(1,Math.abs(o),Math.abs(z))&&Math.abs(c-T)<=M*Math.max(1,Math.abs(c),Math.abs(T))&&Math.abs(l-N)<=M*Math.max(1,Math.abs(l),Math.abs(N))&&Math.abs(u-S)<=M*Math.max(1,Math.abs(u),Math.abs(S))&&Math.abs(d-R)<=M*Math.max(1,Math.abs(d),Math.abs(R))&&Math.abs(h-L)<=M*Math.max(1,Math.abs(h),Math.abs(L))&&Math.abs(m-O)<=M*Math.max(1,Math.abs(m),Math.abs(O))&&Math.abs(p-A)<=M*Math.max(1,Math.abs(p),Math.abs(A))&&Math.abs(v-F)<=M*Math.max(1,Math.abs(v),Math.abs(F))&&Math.abs(f-ie)<=M*Math.max(1,Math.abs(f),Math.abs(ie))&&Math.abs(y-se)<=M*Math.max(1,Math.abs(y),Math.abs(se))}var _n=wt,xn=zt,P={};_t(P,{add:()=>An,angle:()=>jn,bezier:()=>Gn,ceil:()=>zn,clone:()=>wn,copy:()=>En,create:()=>Nt,cross:()=>Dn,dist:()=>ri,distance:()=>kt,div:()=>ti,divide:()=>Ot,dot:()=>Xe,equals:()=>Zn,exactEquals:()=>Jn,floor:()=>Nn,forEach:()=>ai,fromValues:()=>Sn,hermite:()=>In,inverse:()=>Cn,len:()=>ii,length:()=>Mt,lerp:()=>Fn,max:()=>Rn,min:()=>Mn,mul:()=>ei,multiply:()=>Lt,negate:()=>bn,normalize:()=>Pn,random:()=>Bn,rotateX:()=>Kn,rotateY:()=>Xn,rotateZ:()=>Yn,round:()=>Ln,scale:()=>On,scaleAndAdd:()=>kn,set:()=>Tn,slerp:()=>Un,sqrDist:()=>ni,sqrLen:()=>si,squaredDistance:()=>bt,squaredLength:()=>Ct,str:()=>qn,sub:()=>Qn,subtract:()=>Rt,transformMat3:()=>Vn,transformMat4:()=>Wn,transformQuat:()=>Hn,zero:()=>$n});function Nt(){var e=new U(3);return U!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function wn(e){var t=new U(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Mt(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function Sn(e,t,r){var n=new U(3);return n[0]=e,n[1]=t,n[2]=r,n}function En(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Tn(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function An(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function Rt(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],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}function Ot(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function zn(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Nn(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Mn(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 Rn(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 Ln(e,t){return e[0]=Ue(t[0]),e[1]=Ue(t[1]),e[2]=Ue(t[2]),e}function On(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function kn(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 kt(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 bt(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 Ct(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function bn(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Cn(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Pn(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 Xe(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Dn(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 Fn(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 Un(e,t,r,n){var i=Math.acos(Math.min(Math.max(Xe(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 In(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,l=a*(s-1),u=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*l+i[0]*u,e[1]=t[1]*o+r[1]*c+n[1]*l+i[1]*u,e[2]=t[2]*o+r[2]*c+n[2]*l+i[2]*u,e}function Gn(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,l=o*a,u=3*s*o,d=3*c*a,h=c*s;return e[0]=t[0]*l+r[0]*u+n[0]*d+i[0]*h,e[1]=t[1]*l+r[1]*u+n[1]*d+i[1]*h,e[2]=t[2]*l+r[2]*u+n[2]*d+i[2]*h,e}function Bn(e,t){t=t===void 0?1:t;var r=pt()*2*Math.PI,n=pt()*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 Wn(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 Vn(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 Hn(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],l=t[2],u=i*l-s*c,d=s*o-n*l,h=n*c-i*o;return u=u+u,d=d+d,h=h+h,e[0]=o+a*u+i*h-s*d,e[1]=c+a*d+s*u-n*h,e[2]=l+a*h+n*d-i*u,e}function Kn(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 Xn(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 Yn(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 jn(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)),l=c&&Xe(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function $n(e){return e[0]=0,e[1]=0,e[2]=0,e}function qn(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Jn(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Zn(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 Qn=Rt,ei=Lt,ti=Ot,ri=kt,ni=bt,ii=Mt,si=Ct,ai=(function(){var e=Nt();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}})(),fo=Math.PI/180,oi=Math.PI/180,po=180/Math.PI,ae=oi,I=1,X=2;var Ye=8,je=16,ci=32;var li=16384;var fe=65536,Pt=1<<17,ui=1<<18,hi=1<<19,di=1<<20,mi=1<<21,fi=1<<22,pi=1<<23,vo=1<<24,pe=1<<25,vi=1<<26,yo=1<<27,go=1<<28,_o=1<<29,ve=1<<30,xo=1<<31;var wo=1<<25,So=1<<28,Eo=1<<29,To=1<<30,Ao=1<<31,zo=I|X,No=I|fe|X|pe|ve,Mo=I|fe|X,Ro=I|Pt|X|pe|ve,Lo=ci|Ye|je,Oo=I|je|Ye,yi=I|pe|ve|X|vi,ko=ui|hi|di|mi|fi|pi,bo=I|Ye|je|pe|ve,Co=I|fe|X,Po=I|X,Do=I|fe|X|Pt,Fo=yi|li,Uo=Number.MAX_SAFE_INTEGER-1,Dt=256,gi=256,_i=8192,xi=2048,wi=512,Si=256,Ei=Dt*2,Ti=256,Ie=32,Ft=(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+_i]="Sounds",e[e.Images=e.Sounds+xi]="Images",e[e.Lights=e.Images+wi]="Lights",e[e.ShadowLights=e.Lights+gi]="ShadowLights",e[e.Items=e.ShadowLights+Ti]="Items",e[e.PlayerSkins=e.Items+Si]="PlayerSkins",e[e.General=e.PlayerSkins+Dt]="General",e[e.WheelWeapons=e.General+Ei]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ie]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ie]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ie]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Ft||{}),Io=Ft.MaxConfigStrings;function Ai(){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 Go=Ai(),Bo=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 Ke=4,Ge=7*Ke,Wo=[{index:0,size:3,type:5126,stride:Ge,offset:0},{index:1,size:2,type:5126,stride:Ge,offset:3*Ke},{index:2,size:2,type:5126,stride:Ge,offset:5*Ke}],Vo=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]),zi=class{constructor(){this._position=P.create(),this._angles=P.create(),this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=b.create(),this._projectionMatrix=b.create(),this._viewProjectionMatrix=b.create(),this._dirty=!0}get position(){return this._position}set position(e){P.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){P.copy(this._angles,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=b.create();return b.perspective(t,e*ae,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;b.perspective(this._projectionMatrix,this._fov*ae,this._aspect,this._near,this._far);let e=b.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]*ae,r=this._angles[1]*ae,n=this._angles[2]*ae,i=b.create();b.identity(i),b.rotateZ(i,i,-r),b.rotateY(i,i,-t),b.rotateX(i,i,-n);let s=b.create();b.multiply(s,e,i);let a=P.negate(P.create(),this._position),o=P.create();P.transformMat4(o,a,i);let c=P.fromValues(o[1]||0,o[2]||0,o[0]||0);b.copy(this._viewMatrix,s),this._viewMatrix[12]=c[0],this._viewMatrix[13]=c[1],this._viewMatrix[14]=c[2],b.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}},Ni={x:0,y:0,z:0},Ho=Math.PI/180;function de(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function le(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function ce(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Mi(e){return ce(e,e)}function ye(e){return Math.sqrt(Mi(e))}function Ut(e){let t=ye(e);return t===0?e:le(e,1/t)}var It=0,Gt=1,Bt=2,Ri=Math.PI/180,Ko=180/Math.PI;function Be(e,t){switch(t){case It:return e.x;case Gt:return e.y;case Bt:default:return e.z}}function We(e){return e*Ri}function vt(e){let t=e%360;return t<0?360+t:t}function Wt(e){let t=We(Be(e,Gt)),r=We(Be(e,It)),n=We(Be(e,Bt)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),l=Math.cos(n),u={x:o*s,y:o*i,z:-a},d={x:-c*a*s-l*-i,y:-c*a*i-l*s,z:-c*o},h={x:l*a*s-c*-i,y:l*a*i-c*s,z:l*o};return{forward:u,right:d,up:h}}var G=1,Y=2;var $e=8,qe=16,Li=32;var Oi=16384;var ge=65536,Vt=1<<17,ki=1<<18,bi=1<<19,Ci=1<<20,Pi=1<<21,Di=1<<22,Fi=1<<23,Xo=1<<24,_e=1<<25,Ui=1<<26,Yo=1<<27,jo=1<<28,$o=1<<29,xe=1<<30,qo=1<<31;var Jo=1<<25,Zo=1<<28,Qo=1<<29,ec=1<<30,tc=1<<31,rc=G|Y,nc=G|ge|Y|_e|xe,ic=G|ge|Y,sc=G|Vt|Y|_e|xe,ac=Li|$e|qe,oc=G|qe|$e,Ii=G|_e|xe|Y|Ui,cc=ki|bi|Ci|Pi|Di|Fi,lc=G|$e|qe|_e|xe,uc=G|ge|Y,hc=G|Y,dc=G|ge|Y|Vt,mc=Ii|Oi,fc=Number.MAX_SAFE_INTEGER-1,Ht=256,Gi=256,Bi=8192,Wi=2048,Vi=512,Hi=256,Ki=Ht*2,Xi=256,Ve=32,Kt=(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+Bi]="Sounds",e[e.Images=e.Sounds+Wi]="Images",e[e.Lights=e.Images+Vi]="Lights",e[e.ShadowLights=e.Lights+Gi]="ShadowLights",e[e.Items=e.ShadowLights+Xi]="Items",e[e.PlayerSkins=e.Items+Hi]="PlayerSkins",e[e.General=e.PlayerSkins+Ht]="General",e[e.WheelWeapons=e.General+Ki]="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))(Kt||{}),pc=Kt.MaxConfigStrings,me=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(me||{}),K=(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))(K||{});function ee(e,t){return(e&t)!==0}var Xt=(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))(Xt||{}),Z=(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))(Z||{});function Yi(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:l}=e,u=ye(t);if(u<1)return{x:0,y:0,z:t.z};let d=0;if(n&&!i||s){let p=u<c?c:u;d+=p*o*r}a>0&&!s&&(d+=u*l*a*r);let h=u-d;if(h<0&&(h=0),h===u)return t;let m=h/u;return le(t,m)}function yt(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=ce(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 ji(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=ce(t,r),c=a-o;if(c<=0)return t;let l=i*n*s;return l>c&&(l=c),{x:t.x+r.x*l,y:t.y+r.y*l,z:t.z+r.z*l}}function $i(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=ye(s);if(a>i){let o=i/a;s=le(s,o),a=i}return{wishdir:a===0?s:Ut(s),wishspeed:a}}function qi(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=de(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=de(s,{x:0,y:0,z:n.upmove}):s=de(s,{x:0,y:0,z:10});let a=ye(s);if(a>i){let o=i/a;s=le(s,o),a=i}return a*=.5,{wishdir:a===0?s:Ut(s),wishspeed:a}}function Ji(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function Zi(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Yt(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=Ji(r,n),i={...i,x:Zi(i.x)});let s=Wt(i);return{viewangles:i,...s}}var Qi={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},es=800,Q={x:0,y:0,z:0},ts=250;function oe(){return{origin:Q,velocity:Q,viewangles:Q,pmFlags:K.OnGround,pmType:Xt.Normal,waterlevel:me.None,gravity:es,deltaAngles:Q}}function gt(e){return e?{...oe(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:Q}:oe()}function J(e,t,r){return e+(t-e)*r}function He(e,t,r){let n=vt(t-e);return n>180&&(n-=360),vt(e+n*r)}function rs(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:He(e.viewangles.x,t.viewangles.x,n),y:He(e.viewangles.y,t.viewangles.y,n),z:He(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles}}function ns(e,t,r,n){let i=Math.min(Math.max(t.msec,0),ts)/1e3,s=ee(e.pmFlags,K.OnGround),a=ee(e.pmFlags,K.OnLadder),o=Yi({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:l,right:u}=Yt({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??Q}),d=e.waterlevel>me.None?qi({forward:l,right:u,cmd:t,maxSpeed:r.pmWaterSpeed}):$i({forward:l,right:u,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>me.None)o=yt({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=ee(e.pmFlags,K.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,v=d.wishspeed>p?{wishdir:d.wishdir,wishspeed:p}:d;o=yt({velocity:o,wishdir:v.wishdir,wishspeed:v.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=ji({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,de(e.origin,le(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var is=class{constructor(e,t={}){this.baseFrame={frame:0,timeMs:0,state:oe()},this.commands=[],this.predicted=oe(),this.settings={...Qi,...t},this.trace=e,this.predicted=this.baseFrame.state??oe()}setAuthoritative(e){let t=gt(e.state);return this.baseFrame={...e,state:t},this.commands=this.commands.filter(r=>(r.serverFrame??Number.MAX_SAFE_INTEGER)>e.frame),this.recompute()}enqueueCommand(e){return this.commands.push(e),this.recompute()}getPredictedState(){return this.predicted}recompute(){let e=gt(this.baseFrame.state);for(let t of this.commands)e=ns(e,t,this.settings,this.trace);return this.predicted=e,e}},ss={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function as(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 os(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=os(t,n,i),a=e+s,c=ee(r,K.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 ls=class{constructor(e={}){this.bobTime=0,this.bobCycle=0,this.bobCycleRun=0,this.bobFracSin=0,this.settings={...ss,...e}}addKick(e){e.durationMs<=0||(this.kick={...e,remainingMs:e.durationMs})}get last(){return this.lastSample}sample(e,t){let{forward:r,right:n}=Wt(Yt({pmFlags:e.pmFlags,cmdAngles:e.viewangles,deltaAngles:e.deltaAngles??Ni}).viewangles),i=Math.sqrt(e.velocity.x*e.velocity.x+e.velocity.y*e.velocity.y),s=ee(e.pmFlags,K.OnGround),a=cs(this.bobTime,i,e.pmFlags,s,t);this.bobTime=a.bobTime,this.bobCycle=a.bobCycle,this.bobCycleRun=a.bobCycleRun,this.bobFracSin=a.bobFracSin;let o=ce(e.velocity,r)*this.settings.runPitch,c=ce(e.velocity,n)*this.settings.runRoll,l=this.bobFracSin*this.settings.bobPitch*i,u=this.bobFracSin*this.settings.bobRoll*i;ee(e.pmFlags,K.Ducked)&&s&&(l*=6,u*=6),o+=Math.min(l,this.settings.maxBobAngle),u=Math.min(u,this.settings.maxBobAngle),this.bobCycle&1&&(u=-u),c+=u;let d=Math.min(this.bobFracSin*i*this.settings.bobUp,this.settings.maxBobHeight),h=0,m=0;if(this.kick&&this.kick.remainingMs>0){let y=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));h+=y*this.kick.pitch,m+=y*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-t),this.kick.remainingMs===0&&(this.kick=void 0)}let f={angles:{x:o+h,y:0,z:c+m},offset:as({x:0,y:0,z:d}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:i};return this.lastSample=f,f}};function us(e){return e.trim().toLowerCase()}var jt=(e=>(e.Forward="+forward",e.Back="+back",e.MoveLeft="+moveleft",e.MoveRight="+moveright",e.MoveUp="+moveup",e.MoveDown="+movedown",e.Jump="+jump",e.Crouch="+crouch",e.Attack="+attack",e.Use="+use",e.Holster="+holster",e.TurnLeft="+left",e.TurnRight="+right",e.LookUp="+lookup",e.LookDown="+lookdown",e.SpeedModifier="+speed",e.Zoom="+zoom",e))(jt||{}),vc={"+attack":Z.Attack,"+use":Z.Use,"+holster":Z.Holster,"+jump":Z.Jump,"+crouch":Z.Crouch},yc=new Map(Object.values(jt).map(e=>[us(e),e]));function $t(e){let t=new is(e.engine.trace),r=new ls,n,i,s,a;return{init(o){n=o,o?.state&&t.setAuthoritative(o),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(o){return t.enqueueCommand(o)},render(o){o.latest?.state&&(t.setAuthoritative(o.latest),n=o.latest),o.previous?.state&&o.latest?.state?i=rs(o.previous.state,o.latest.state,o.alpha):i=o.latest?.state??o.previous?.state??t.getPredictedState();let c=o.latest&&o.previous?Math.max(0,o.latest.timeMs-o.previous.timeMs):0;if(s=r.sample(i,c),i){let{origin:u,viewangles:d}=i;a=new zi,a.position=P.fromValues(u.x,u.y,u.z),a.angles=P.fromValues(d.x,d.y,d.z),a.fov=90,a.aspect=4/3}return{}},shutdown(){n=void 0,i=void 0},get prediction(){return t},get lastRendered(){return i},get view(){return r},get lastView(){return s},get camera(){return a}}}var qt=25,hs=5,ds=()=>typeof performance<"u"?performance.now():Date.now(),ms=e=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>e()):setTimeout(e,qt)},Jt=class{constructor(e,t={}){this.callbacks=e,this.accumulatorMs=0,this.frame=0,this.running=!1,this.tick=()=>{if(!this.running)return;let i=this.options.now(),s=this.lastTimeMs===void 0?0:i-this.lastTimeMs;this.lastTimeMs=i,this.advance(s,i),this.running&&this.options.schedule(this.tick)};let r=t.fixedDeltaMs??qt,n=t.maxSubSteps??hs;this.options={fixedDeltaMs:r,maxSubSteps:n,maxDeltaMs:t.maxDeltaMs??r*n,startTimeMs:t.startTimeMs,now:t.now??ds,schedule:t.schedule??ms}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let t=(this.lastTimeMs??0)+e;this.lastTimeMs=t,this.advance(e,t)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,t){let r=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+r,this.options.fixedDeltaMs*this.options.maxSubSteps);let n=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&n<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:t}),this.accumulatorMs-=this.options.fixedDeltaMs,n+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:t,accumulatorMs:this.accumulatorMs,frame:this.frame})}},fs=class{constructor(e,t,r={}){this.game=e,this.client=t,this.started=!1,this.stepSimulation=i=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(i,this.latestCommand)},this.renderClient=i=>{this.client&&(this.latestCommand=this.client.render({...i,previous:this.previousFrame,latest:this.latestFrame}))};let n=r.loop?.now?.()??Date.now();this.startTimeMs=r.startTimeMs??r.loop?.startTimeMs??n,this.loop=new Jt({simulate:this.stepSimulation,render:this.renderClient},{...r.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var Sc=Math.PI/180;var Ec=Math.PI/180,Tc=180/Math.PI;var B=1,j=2;var et=8,tt=16,ps=32;var vs=16384;var we=65536,Zt=1<<17,ys=1<<18,gs=1<<19,_s=1<<20,xs=1<<21,ws=1<<22,Ss=1<<23,Ac=1<<24,Se=1<<25,Es=1<<26,zc=1<<27,Nc=1<<28,Mc=1<<29,Ee=1<<30,Rc=1<<31;var Lc=1<<25,Oc=1<<28,kc=1<<29,bc=1<<30,Cc=1<<31,Pc=B|j,Dc=B|we|j|Se|Ee,Fc=B|we|j,Uc=B|Zt|j|Se|Ee,Ic=ps|et|tt,Gc=B|tt|et,Ts=B|Se|Ee|j|Es,Bc=ys|gs|_s|xs|ws|Ss,Wc=B|et|tt|Se|Ee,Vc=B|we|j,Hc=B|j,Kc=B|we|j|Zt,Xc=Ts|vs,Yc=Number.MAX_SAFE_INTEGER-1;var Qt=256,As=256,zs=8192,Ns=2048,Ms=512,Rs=256,Ls=Qt*2,Os=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+zs]="Sounds",e[e.Images=e.Sounds+Ns]="Images",e[e.Lights=e.Images+Ms]="Lights",e[e.ShadowLights=e.Lights+As]="ShadowLights",e[e.Items=e.ShadowLights+Os]="Items",e[e.PlayerSkins=e.Items+Rs]="PlayerSkins",e[e.General=e.PlayerSkins+Qt]="General",e[e.WheelWeapons=e.General+Ls]="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||{}),jc=er.MaxConfigStrings;var ks=class{constructor(e,t){this.engine=e,this.host=t,this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function tr(e,t,r,n){return new ks(e,new fs(t,r,n))}function bs(){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 $c=bs();var qc=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 Qe=4,Ze=7*Qe,Jc=[{index:0,size:3,type:5126,stride:Ze,offset:0},{index:1,size:2,type:5126,stride:Ze,offset:3*Qe},{index:2,size:2,type:5126,stride:Ze,offset:5*Qe}];var Zc=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]);function rr(e){return{init(){e.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(t,r){return new Jt(t,r)}}}var Cs={x:0,y:0,z:0},nl=Math.PI/180;function rt(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 ar(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Ps(e){return ar(e,e)}function Le(e){return Math.sqrt(Ps(e))}function or(e){let t=Le(e);return t===0?e:Re(e,1/t)}var il=Math.PI/180,sl=180/Math.PI;var W=624,Ds=397,Fs=2567483615,Us=2147483648,Is=2147483647,nt=4294967296,Gs=class{constructor(e=5489){this.state=new Uint32Array(W),this.index=W,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<W;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=W}nextUint32(){this.index>=W&&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<W;e++){let t=this.state[e]&Us|this.state[(e+1)%W]&Is,r=this.state[(e+Ds)%W]^t>>>1;(t&1)!==0&&(r^=Fs),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==W)throw new Error(`Expected ${W} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},cr=class{constructor(e={}){this.mt=new Gs(e.seed)}frandom(){return this.mt.nextUint32()/nt}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=nt-nt%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)}};function Bs(e){return new cr(e)}var V=1,$=2;var at=8,ot=16,Ws=32;var Vs=16384;var Oe=65536,lr=1<<17,Hs=1<<18,Ks=1<<19,Xs=1<<20,Ys=1<<21,js=1<<22,$s=1<<23,al=1<<24,ke=1<<25,qs=1<<26,ol=1<<27,cl=1<<28,ll=1<<29,be=1<<30,ul=1<<31;var hl=1<<25,dl=1<<28,ml=1<<29,fl=1<<30,pl=1<<31,vl=V|$,yl=V|Oe|$|ke|be,gl=V|Oe|$,_l=V|lr|$|ke|be,xl=Ws|at|ot,wl=V|ot|at,Js=V|ke|be|$|qs,Sl=Hs|Ks|Xs|Ys|js|$s,El=V|at|ot|ke|be,Tl=V|Oe|$,Al=V|$,zl=V|Oe|$|lr,Nl=Js|Vs,Ml=Number.MAX_SAFE_INTEGER-1;var ur=256,Zs=256,Qs=8192,ea=2048,ta=512,ra=256,na=ur*2,ia=256,it=32,hr=(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+Qs]="Sounds",e[e.Images=e.Sounds+ea]="Images",e[e.Lights=e.Images+ta]="Lights",e[e.ShadowLights=e.Lights+Zs]="ShadowLights",e[e.Items=e.ShadowLights+ia]="Items",e[e.PlayerSkins=e.Items+ra]="PlayerSkins",e[e.General=e.PlayerSkins+ur]="General",e[e.WheelWeapons=e.General+na]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+it]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+it]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+it]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(hr||{}),Rl=hr.MaxConfigStrings;function sa(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:l}=e,u=Le(t);if(u<1)return{x:0,y:0,z:t.z};let d=0;if(n&&!i||s){let p=u<c?c:u;d+=p*o*r}a>0&&!s&&(d+=u*l*a*r);let h=u-d;if(h<0&&(h=0),h===u)return t;let m=h/u;return Re(t,m)}function aa(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=ar(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 oa(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=Le(s);if(a>i){let o=i/a;s=Re(s,o),a=i}return{wishdir:a===0?s:or(s),wishspeed:a}}function ca(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=rt(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=rt(s,{x:0,y:0,z:n.upmove}):s=rt(s,{x:0,y:0,z:10});let a=Le(s);if(a>i){let o=i/a;s=Re(s,o),a=i}return a*=.5,{wishdir:a===0?s:or(s),wishspeed:a}}var ue=.025,la=(e,t)=>{let r={...e.origin};r.z-=.25;let n=t(e.origin,r);return{...e,onGround:n.fraction<1}},ua=(e,t)=>{let r={...e.origin};return r.z+=e.mins.z+1,t(r)&33554432?{...e,waterLevel:1}:{...e,waterLevel:0}},ha=(e,t,r,n)=>{let i={...e};i=la(i,r),i=ua(i,n);let{origin:s,velocity:a,onGround:o,waterLevel:c}=i,l=sa({velocity:a,frametime:ue,onGround:o,groundIsSlick:!1,onLadder:!1,waterlevel:c,pmFriction:6,pmStopSpeed:100,pmWaterFriction:1}),u=c>=2?ca({forward:{x:1,y:0,z:0},right:{x:0,y:1,z:0},cmd:t,maxSpeed:320}):oa({forward:{x:1,y:0,z:0},right:{x:0,y:1,z:0},cmd:t,maxSpeed:320}),d=aa({velocity:l,wishdir:u.wishdir,wishspeed:u.wishspeed,accel:o?10:1,frametime:ue}),h=r(s,{x:s.x+d.x*ue,y:s.y+d.y*ue,z:s.z+d.z*ue});return{...i,origin:h.endpos,velocity:d}};var dr={...Cs};function k(){return{...dr}}var nr=Object.freeze({aiflags:0,last_sighting:dr,trail_time:0,pausetime:0}),da=class{constructor(e){this.inUse=!1,this.freePending=!1,this.linkPrevious=null,this.linkNext=null,this.classname="",this.spawnflags=0,this.inventory={},this.origin=k(),this.old_origin=k(),this.velocity=k(),this.avelocity=k(),this.angles=k(),this.viewheight=0,this.mins=k(),this.maxs=k(),this.size=k(),this.mass=0,this.gravity=1,this.movetype=0,this.movedir=k(),this.modelindex=0,this.frame=0,this.skin=0,this.effects=0,this.renderfx=0,this.health=0,this.max_health=0,this.takedamage=!1,this.dmg=0,this.speed=0,this.deadflag=0,this.count=0,this.wait=0,this.delay=0,this.timestamp=0,this.sounds=0,this.noise_index=0,this.fly_sound_debounce_time=0,this.enemy=null,this.movetarget=null,this.target_ent=null,this.goalentity=null,this.ideal_yaw=0,this.yaw_speed=0,this.search_time=0,this.attack_finished_time=0,this.pain_finished_time=0,this.trail_time=0,this.groundentity=null,this.groundentity_linkcount=0,this.waterlevel=0,this.watertype=0,this.nextthink=0,this.activator=null,this.solid=0,this.flags=0,this.svflags=0,this.monsterinfo={...nr,last_sighting:k()},this.show_hostile=0,this.light_level=0,this.owner=null,this.index=e}reset(){this.inUse=!1,this.freePending=!1,this.linkPrevious=null,this.linkNext=null,this.classname="",this.spawnflags=0,this.target=void 0,this.targetname=void 0,this.killtarget=void 0,this.team=void 0,this.message=void 0,this.pathtarget=void 0,this.model=void 0,this.item=void 0,this.inventory={},this.origin=k(),this.old_origin=k(),this.velocity=k(),this.avelocity=k(),this.angles=k(),this.viewheight=0,this.mins=k(),this.maxs=k(),this.size=k(),this.mass=0,this.gravity=1,this.movetype=0,this.movedir=k(),this.modelindex=0,this.frame=0,this.skin=0,this.effects=0,this.renderfx=0,this.health=0,this.max_health=0,this.takedamage=!1,this.dmg=0,this.speed=0,this.deadflag=0,this.count=0,this.wait=0,this.delay=0,this.timestamp=0,this.sounds=0,this.noise_index=0,this.fly_sound_debounce_time=0,this.enemy=null,this.movetarget=null,this.target_ent=null,this.goalentity=null,this.ideal_yaw=0,this.yaw_speed=0,this.search_time=0,this.attack_finished_time=0,this.pain_finished_time=0,this.trail_time=0,this.groundentity=null,this.groundentity_linkcount=0,this.waterlevel=0,this.watertype=0,this.nextthink=0,this.think=void 0,this.touch=void 0,this.use=void 0,this.pain=void 0,this.die=void 0,this.activator=null,this.solid=0,this.flags=0,this.svflags=0,this.monsterinfo={...nr,last_sighting:k()},this.combattarget=void 0,this.show_hostile=0,this.light_level=0}},ct=[{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:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",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:"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:"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:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}],ma=2048,te=0,fa=class{constructor(e=ma){if(this.freeList=[],this.pendingFree=[],this.activeHead=null,e<1||!Number.isInteger(e))throw new Error("EntityPool requires a positive integer size");this.entities=new Array(e);for(let r=0;r<e;r+=1)this.entities[r]=new da(r),r!==te&&this.freeList.push(r);let t=this.entities[te];t.inUse=!0,t.classname="worldspawn",this.activeHead=t}get world(){return this.entities[te]}get capacity(){return this.entities.length}get activeCount(){let e=0;for(let t of this)e+=1;return e}[Symbol.iterator](){let e=this.activeHead;return{next:()=>{if(!e)return{done:!0,value:void 0};let t=e;return e=e.linkNext,{done:!1,value:t}}}}spawn(){let e=this.freeList.pop();if(e===void 0)throw new Error("No free entities available");let t=this.entities[e];return t.reset(),t.inUse=!0,this.link(t),t}deferFree(e){if(e.index===te)throw new Error("Cannot free world entity");!e.inUse||e.freePending||(this.unlink(e),e.inUse=!1,e.freePending=!0,this.pendingFree.push(e.index))}freeImmediate(e){if(e.index===te)throw new Error("Cannot free world entity");e.inUse&&(this.unlink(e),e.reset(),this.freeList.push(e.index))}flushFreeList(){if(this.pendingFree.length!==0){for(let e of this.pendingFree)this.entities[e].reset(),this.freeList.push(e);this.pendingFree.length=0}}createSnapshot(){let e=Array.from(this,t=>t.index);return{capacity:this.entities.length,activeOrder:e,freeList:[...this.freeList],pendingFree:[...this.pendingFree]}}restore(e){if(e.capacity!==this.entities.length)throw new Error(`Snapshot capacity ${e.capacity} does not match pool capacity ${this.entities.length}`);let t=new Set,r=(n,i)=>{if(n<0||n>=this.entities.length)throw new Error(`Invalid entity index ${n} in ${i}`);if(t.has(n))throw new Error(`Duplicate entity index ${n} in snapshot`);t.add(n)};for(let n of e.activeOrder)r(n,"activeOrder");for(let n of e.freeList)r(n,"freeList");for(let n of e.pendingFree)r(n,"pendingFree");this.activeHead=null,this.freeList.length=0,this.pendingFree.length=0;for(let n of this.entities)n.reset();for(let n=e.activeOrder.length-1;n>=0;n-=1){let i=this.entities[e.activeOrder[n]];i.inUse=!0,this.link(i)}for(let n of e.pendingFree){let i=this.entities[n];i.inUse=!1,i.freePending=!0,i.linkNext=null,i.linkPrevious=null,this.pendingFree.push(n)}for(let n of e.freeList){let i=this.entities[n];i.inUse=!1,i.freePending=!1,i.linkNext=null,i.linkPrevious=null,this.freeList.push(n)}if(!e.activeOrder.includes(te))throw new Error("Snapshot must include the world entity as active")}link(e){e.linkNext=this.activeHead,this.activeHead&&(this.activeHead.linkPrevious=e),this.activeHead=e,e.linkPrevious=null}unlink(e){e.linkPrevious&&(e.linkPrevious.linkNext=e.linkNext),e.linkNext&&(e.linkNext.linkPrevious=e.linkPrevious),this.activeHead===e&&(this.activeHead=e.linkNext),e.linkPrevious=null,e.linkNext=null}},pa=class{constructor(){this.queue=[]}schedule(e,t){e.nextthink=t,this.queue.push({entity:e,time:t}),this.queue.sort((r,n)=>r.time===n.time?r.entity.index-n.entity.index:r.time-n.time)}cancel(e){if(this.queue.length!==0)for(let t=this.queue.length-1;t>=0;t-=1)this.queue[t].entity===e&&this.queue.splice(t,1)}snapshot(){return this.queue.map(({time:e,entity:t})=>({time:e,entityIndex:t.index}))}restore(e,t){this.queue.length=0;for(let r of e){let n=t(r.entityIndex);n&&this.schedule(n,r.time)}}runDueThinks(e){for(;this.queue.length>0;){let t=this.queue[0];if(t.time>e)break;this.queue.shift();let{entity:r,time:n}=t;!r.inUse||r.freePending||r.think&&r.nextthink===n&&r.think(r)}}};function Te(e){return{min:{x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},max:{x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z}}}function ir(e,t){return!(e.min.x>t.max.x||e.max.x<t.min.x||e.min.y>t.max.y||e.max.y<t.min.y||e.min.z>t.max.z||e.max.z<t.min.z)}var mr=ct.filter(e=>e.save||e.type==="callback"),va=new Map(mr.map(e=>[e.name,e]));function ya(e){return[e.x,e.y,e.z]}function ga(e){let t=e;if(!Array.isArray(t)||t.length!==3)throw new Error("Invalid vec3 serialization");let[r,n,i]=t;return{x:r,y:n,z:i}}function re(e,t,r){e[t]=r}function _a(e){return{...e}}function xa(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("Invalid inventory serialization");let t={};for(let[r,n]of Object.entries(e))t[r]=Number(n);return t}var wa=class{constructor(e,t,r){if(this.targetNameIndex=new Map,this.random=Bs(),this.currentTimeSeconds=0,this.pool=new fa(t),this.thinkScheduler=new pa,this.engine=e,this.callbackToName=new Map,r)for(let[n,i]of r.entries())this.callbackToName.set(i,n)}get world(){return this.pool.world}get activeCount(){return this.pool.activeCount}get timeSeconds(){return this.currentTimeSeconds}forEachEntity(e){for(let t of this.pool)e(t)}find(e){for(let t of this.pool)if(e(t))return t}spawn(){return this.pool.spawn()}free(e){this.unregisterTarget(e),this.thinkScheduler.cancel(e),this.pool.deferFree(e)}freeImmediate(e){this.unregisterTarget(e),this.thinkScheduler.cancel(e),this.pool.freeImmediate(e)}sound(e,t,r,n,i,s){this.engine.sound?.(e,t,r,n,i,s)}scheduleThink(e,t){this.thinkScheduler.schedule(e,t)}beginFrame(e){this.currentTimeSeconds=e}finalizeSpawn(e){!e.inUse||e.freePending||this.registerTarget(e)}findByClassname(e){let t=[];for(let r of this.pool)r.classname===e&&r.inUse&&!r.freePending&&t.push(r);return t}findByTargetName(e){let t=this.targetNameIndex.get(e);return t?Array.from(t).filter(r=>r.inUse&&!r.freePending):[]}pickTarget(e){if(!e)return null;let t=this.findByTargetName(e);if(t.length===0)return null;let r=this.random.randomIndex(t);return t[r]??null}killBox(e){let t=Te(e);for(let r of this.pool)r===e||r===this.pool.world||!r.inUse||r.freePending||r.solid===0||r.svflags&2||ir(t,Te(r))&&(r.health=0,r.deadflag=2,this.free(r))}useTargets(e,t=null){if(e.delay>0){let r=this.spawn();r.classname="DelayedUse",r.target=e.target,r.killtarget=e.killtarget,r.message=e.message,r.think=n=>{this.useTargetsImmediate(n,t??e),this.free(n)},this.scheduleThink(r,this.currentTimeSeconds+e.delay);return}this.useTargetsImmediate(e,t??e)}runFrame(){this.thinkScheduler.runDueThinks(this.currentTimeSeconds),this.runTouches(),this.pool.flushFreeList()}createSnapshot(){let e=[];for(let t of this.pool){let r={};for(let n of mr){let i=t[n.name];switch(n.type){case"vec3":r[n.name]=ya(i);break;case"entity":r[n.name]=i?.index??null;break;case"inventory":r[n.name]=_a(i);break;case"callback":r[n.name]=i?this.callbackToName.get(i)??null:null;break;default:r[n.name]=i??null;break}}e.push({index:t.index,fields:r})}return{timeSeconds:this.currentTimeSeconds,pool:this.pool.createSnapshot(),entities:e,thinks:this.thinkScheduler.snapshot()}}restore(e,t){this.currentTimeSeconds=e.timeSeconds,this.pool.restore(e.pool);let r=new Map;for(let i of this.pool)r.set(i.index,i);let n=[];for(let i of e.entities){let s=r.get(i.index);if(s)for(let[a,o]of Object.entries(i.fields)){let c=va.get(a);if(!(!c||o===void 0))switch(c.type){case"vec3":re(s,a,ga(o));break;case"entity":n.push({entity:s,name:c.name,targetIndex:o});break;case"inventory":re(s,a,xa(o));break;case"boolean":re(s,a,!!o);break;case"callback":if(o){let l=t?.get(o);l&&re(s,a,l)}break;default:re(s,a,o);break}}}for(let i of n){let s=i.targetIndex===null?null:r.get(i.targetIndex)??null;re(i.entity,i.name,s)}this.thinkScheduler.restore(e.thinks,i=>r.get(i))}runTouches(){let e=this.pool.world,t=[];for(let r of this.pool)r!==e&&(!r.inUse||r.freePending||r.solid===0||t.push(r));for(let r=0;r<t.length;r+=1){let n=t[r],i=null;for(let s=r+1;s<t.length;s+=1){let a=t[s];if(!n.touch&&!a.touch)continue;i||(i=Te(n));let o=Te(a);ir(i,o)&&(n.touch&&n.touch(n,a),a.touch&&a.touch(a,n))}}}registerTarget(e){if(!e.targetname)return;let t=this.targetNameIndex.get(e.targetname);t||(t=new Set,this.targetNameIndex.set(e.targetname,t)),t.add(e)}unregisterTarget(e){if(!e.targetname)return;let t=this.targetNameIndex.get(e.targetname);t&&(t.delete(e),t.size===0&&this.targetNameIndex.delete(e.targetname))}useTargetsImmediate(e,t){if(e.target)for(let r of this.findByTargetName(e.target))r!==e&&r.use?.(r,e,t);if(e.killtarget)for(let r of this.findByTargetName(e.killtarget))r!==e&&this.free(r)}};var Ll=1/40;var fr=(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))(fr||{}),pr=Object.keys(fr).length/2;function Sa(e=Ea(),t){let r=Array(pr).fill(0);if(t)for(let[n,i]of Object.entries(t))r[Number(n)]=i;return{caps:e.slice(),counts:r}}function Ea(){let e=Array(pr).fill(50);return e[0]=200,e[1]=100,e[4]=200,e}function Ta(e={}){let t=Sa(e.ammoCaps,e.ammo),r=new Set(e.weapons??[]),n=new Map(e.powerups??[]),i=new Set(e.keys??[]);return{ammo:t,ownedWeapons:r,currentWeapon:e.currentWeapon,armor:e.armor??null,powerups:n,keys:i}}var Ol=new Map(ct.map(e=>[e.name,e]));function Aa(e){return e.find(t=>t.classname==="info_player_start")}var za=["prep","simulate","finish"],Na=class{constructor(e){if(this.timeMs=0,this.frame=0,this.stageHandlers={prep:[],simulate:[],finish:[]},this.stageCounts={prep:0,simulate:0,finish:0},this.stageCompactionNeeded={prep:!1,simulate:!1,finish:!1},e)for(let t of za){let r=e[t];r&&this.addStage(t,r)}}addStage(e,t){let r=this.stageHandlers[e];return r.push(t),this.stageCounts[e]+=1,()=>{let n=r.indexOf(t);n>=0&&r[n]&&(r[n]=void 0,this.stageCounts[e]-=1,this.stageCompactionNeeded[e]=!0)}}reset(e){this.timeMs=e,this.frame=0}advance(e){let t=this.timeMs;this.timeMs=t+e.deltaMs,this.frame=e.frame;let r={...e,timeMs:this.timeMs,previousTimeMs:t,deltaSeconds:e.deltaMs/1e3};if(this.runStage("prep",r),this.stageCounts.simulate===0)throw new Error("GameFrameLoop requires at least one simulate stage");return this.runStage("simulate",r),this.runStage("finish",r),r}runStage(e,t){let r=this.stageHandlers[e];for(let n=0;n<r.length;n+=1){let i=r[n];i&&i(t)}this.stageCompactionNeeded[e]&&this.compactStageHandlers(e)}compactStageHandlers(e){let t=this.stageHandlers[e],r=0;for(let n=0;n<t.length;n+=1){let i=t[n];i&&(t[r]=i,r+=1)}t.length=r,this.stageCompactionNeeded[e]=!1}get time(){return this.timeMs}get frameNumber(){return this.frame}},Ma={frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0},Ra=class{constructor(){this.state=Ma}start(e){let t=e/1e3;this.state={frameNumber:0,timeSeconds:t,previousTimeSeconds:t,deltaSeconds:0}}tick(e){return this.state={frameNumber:e.frame,timeSeconds:e.timeMs/1e3,previousTimeSeconds:e.previousTimeMs/1e3,deltaSeconds:e.deltaSeconds},this.state}get current(){return this.state}restore(e){this.state={...e}}};var kl=1<<24;var st=2,La=1;function D(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 Ae(e,t,r){return e===void 0?r:C(e,t)}function Me(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=D(e,"level");return{frameNumber:Ae(t.frameNumber,"level.frameNumber",0),timeSeconds:Ae(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Ae(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Ae(t.deltaSeconds,"level.deltaSeconds",0)}}function ka(e){if(e===void 0)return new cr().getState();let t=D(e,"rng"),r=D(t.mt,"rng.mt"),n=Ne(r.state,"rng.mt.state");return{mt:{index:C(r.index,"rng.mt.index"),state:n}}}function ba(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=D(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=D(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=D(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 Pa(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=D(t,`entities[${r}]`);return{index:C(n.index,`entities[${r}].index`),fields:Ca(n.fields)}})}function Da(e){let t=D(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=D(e,"entities");return{timeSeconds:C(t.timeSeconds,"entities.timeSeconds"),pool:Da(t.pool),entities:Pa(t.entities),thinks:ba(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=D(t,`cvars[${r}]`);return{name:Me(n.name,`cvars[${r}].name`),value:Me(n.value,`cvars[${r}].value`),flags:C(n.flags,`cvars[${r}].flags`)}})}function Ia(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>Me(t,`configstrings[${r}]`))}function Ga(e){return e===void 0?{}:D(e,"gameState")}function vr(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=D(n,"save"),s=i.version??st,a=C(s,"version");if(a<La)throw new Error(`Unsupported save version ${a}`);if(a>st&&!r)throw new Error(`Save version ${a} is newer than supported ${st}`);return{version:a,timestamp:C(i.timestamp,"timestamp"),map:Me(i.map,"map"),difficulty:C(i.difficulty,"difficulty"),playtimeSeconds:C(i.playtimeSeconds,"playtimeSeconds"),gameState:Ga(i.gameState),level:Oa(i.level),rng:ka(i.rng),entities:Fa(i.entities),cvars:Ua(i.cvars),configstrings:Ia(i.configstrings),player:i.player?i.player:void 0}}var bl=new Set(ct.filter(e=>e.save).map(e=>e.name));var sr=globalThis.TextEncoder;function ne(e){return vr({...e},{allowNewerVersion:!0})}function Ba(e){return sr?new sr().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:ne(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:ne(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:ne(e.save)}))}},Va=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:ne(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:ne(t.save)}))}},lt=class he{constructor(t={}){let{dbName:r=he.DEFAULT_DB_NAME,storeName:n=he.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new Va(i,r,n):this.adapter=new Wa}async save(t,r,n={}){let i=ne(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:Ba(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 vr(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(he.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(he.QUICK_SLOT,t)}};lt.DEFAULT_DB_NAME="quake2ts-saves";lt.DEFAULT_STORE="saves";lt.QUICK_SLOT="quicksave";function Ha(){return{states:new Map}}var ze={x:0,y:0,z:0};function yr(e,t,r,n){let i=n.gravity,s=new Ra,a=new Na,o=new wa(r);a.addStage("prep",h=>{s.tick(h),o.beginFrame(s.current.timeSeconds)}),a.addStage("simulate",({deltaSeconds:h})=>{l={x:l.x+i.x*h,y:l.y+i.y*h,z:l.z+i.z*h},c={x:c.x+l.x*h,y:c.y+l.y*h,z:c.z+l.z*h},o.runFrame()});let c={...ze},l={...ze},u=h=>({frame:h,timeMs:a.time,state:{gravity:{...i},origin:{...c},velocity:{...l},level:{...s.current},entities:{activeCount:o.activeCount,worldClassname:o.world.classname}}}),d=h=>{a.reset(h),s.start(h),c={...ze},l={...ze},o.beginFrame(h/1e3),o.runFrame()};return{init(h){return d(h),u(0)},shutdown(){},spawnWorld(){let h=Aa(o);if(h){let m=o.spawn();m.classname="player",m.origin={...h.origin},m.angles={...h.angles},m.health=100,m.mins={x:-16,y:-16,z:-24},m.maxs={x:16,y:16,z:32},m.client={inventory:Ta(),weaponStates:Ha()},o.finalizeSpawn(m),c={...m.origin}}},frame(h,m){let p=a.advance(h),v=o.find(f=>f.classname==="player");if(m&&v){let f={forwardmove:m.forwardmove,sidemove:m.sidemove,upmove:m.upmove,buttons:m.buttons},y={origin:v.origin,velocity:v.velocity,onGround:!1,waterLevel:0,mins:v.mins,maxs:v.maxs},E=ha(y,f,e,t);v.origin=E.origin,v.velocity=E.velocity}return u(p.frame)},entities:o,sound(h,m,p,v,f,y){o.sound(h,m,p,v,f,y)},centerprintf(h,m){r.centerprintf?.(h,m)},get time(){return s.current.timeSeconds}}}var gr={x:0,y:0,z:0};var Kl=Math.PI/180;var Xl=Math.PI/180,Yl=180/Math.PI;var H=1,q=2;var ht=8,dt=16,Ka=32;var Xa=16384;var Ce=65536,_r=1<<17,Ya=1<<18,ja=1<<19,$a=1<<20,qa=1<<21,Ja=1<<22,Za=1<<23,jl=1<<24,Pe=1<<25,Qa=1<<26,$l=1<<27,ql=1<<28,Jl=1<<29,De=1<<30,Zl=1<<31;var Ql=1<<25,eu=1<<28,tu=1<<29,ru=1<<30,nu=1<<31;var iu=H|q,su=H|Ce|q|Pe|De,au=H|Ce|q,ou=H|_r|q|Pe|De,cu=Ka|ht|dt,lu=H|dt|ht,eo=H|Pe|De|q|Qa,uu=Ya|ja|$a|qa|Ja|Za,hu=H|ht|dt|Pe|De,du=H|Ce|q,mu=H|q,fu=H|Ce|q|_r,pu=eo|Xa;var vu=Number.MAX_SAFE_INTEGER-1;var xr=256;var to=256,ro=8192,no=2048,io=512,so=256,ao=xr*2,oo=256,ut=32;var 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+ro]="Sounds",e[e.Images=e.Sounds+no]="Images",e[e.Lights=e.Images+io]="Lights",e[e.ShadowLights=e.Lights+to]="ShadowLights",e[e.Items=e.ShadowLights+oo]="Items",e[e.PlayerSkins=e.Items+so]="PlayerSkins",e[e.General=e.PlayerSkins+xr]="General",e[e.WheelWeapons=e.General+ao]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ut]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ut]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ut]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(wr||{}),yu=wr.MaxConfigStrings;function co(){let e=(o,c)=>({start:o,end:c,fraction:1,endpos:c,allsolid:!1,startsolid:!1}),t=o=>0,r=rr({trace:e}),i=yr(e,t,{sound:(o,c,l)=>console.log(`Sound played: ${l}`),centerprintf(o,c){let l=document.createElement("div");l.style.position="absolute",l.style.top="50%",l.style.left="50%",l.style.transform="translate(-50%, -50%)",l.style.color="white",l.style.fontSize="2em",l.style.fontFamily="sans-serif",l.innerText=c,document.body.appendChild(l),setTimeout(()=>document.body.removeChild(l),3e3)}},{gravity:gr}),s=$t({engine:{trace:e}}),a=tr(r,i,s);return a.start(),{engine:r,game:i,client:s,runtime:a}}return Nr(lo);})();
2
2
  //# sourceMappingURL=index.global.js.map