quake2ts 0.0.111 → 0.0.112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/browser/index.global.js +2 -2
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +620 -425
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +620 -425
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/monsters/berserk.d.ts +3 -1
- package/packages/game/dist/types/entities/monsters/berserk.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "quake2ts",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.112",
|
|
4
4
|
"description": "Quake II re-release port to TypeScript with WebGL renderer - A complete game engine with physics, networking, and BSP rendering",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@8.15.7",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var Quake2Client=(()=>{var Lt=Object.defineProperty;var fi=Object.getOwnPropertyDescriptor;var pi=Object.getOwnPropertyNames;var gi=Object.prototype.hasOwnProperty;var Rt=(e,t)=>{for(var r in t)Lt(e,r,{get:t[r],enumerable:!0})},yi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of pi(t))!gi.call(e,i)&&i!==r&&Lt(e,i,{get:()=>t[i],enumerable:!(n=fi(t,i))||n.enumerable});return e};var vi=e=>yi(Lt({},"__esModule",{value:!0}),e);var Gl={};Rt(Gl,{ClientConfigStrings:()=>be,ClientPrediction:()=>pe,InputAction:()=>bt,InputBindings:()=>ue,InputCommandBuffer:()=>zt,InputController:()=>ze,ViewEffects:()=>ye,createClient:()=>Ul,createDefaultBindings:()=>mi,defaultPredictionState:()=>te,interpolatePredictionState:()=>ge,normalizeCommand:()=>Ie,normalizeInputCode:()=>Dr});var k=1e-6,H=typeof Float32Array<"u"?Float32Array:Array,Tt=Math.random;function De(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var Vl=Math.PI/180,Wl=180/Math.PI;var D={};Rt(D,{add:()=>ns,adjoint:()=>zi,clone:()=>_i,copy:()=>wi,create:()=>xi,decompose:()=>Vi,determinant:()=>Li,equals:()=>os,exactEquals:()=>as,frob:()=>rs,fromQuat:()=>Xi,fromQuat2:()=>Ui,fromRotation:()=>Ci,fromRotationTranslation:()=>Wr,fromRotationTranslationScale:()=>Wi,fromRotationTranslationScaleOrigin:()=>Ki,fromScaling:()=>Ii,fromTranslation:()=>Oi,fromValues:()=>Si,fromXRotation:()=>Di,fromYRotation:()=>Fi,fromZRotation:()=>Bi,frustum:()=>$i,getRotation:()=>Hi,getScaling:()=>Kr,getTranslation:()=>Gi,identity:()=>Hr,invert:()=>bi,lookAt:()=>Qi,mul:()=>cs,multiply:()=>Vr,multiplyScalar:()=>is,multiplyScalarAndAdd:()=>ss,ortho:()=>Zi,orthoNO:()=>$r,orthoZO:()=>Ji,perspective:()=>Yi,perspectiveFromFieldOfView:()=>qi,perspectiveNO:()=>Xr,perspectiveZO:()=>ji,rotate:()=>ki,rotateX:()=>Mi,rotateY:()=>Pi,rotateZ:()=>Ni,scale:()=>Ti,set:()=>Ai,str:()=>ts,sub:()=>ls,subtract:()=>Yr,targetTo:()=>es,translate:()=>Ri,transpose:()=>Ei});function xi(){var e=new H(16);return H!=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 _i(e){var t=new H(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 wi(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 Si(e,t,r,n,i,s,a,o,c,u,l,h,d,m,p,g){var f=new H(16);return f[0]=e,f[1]=t,f[2]=r,f[3]=n,f[4]=i,f[5]=s,f[6]=a,f[7]=o,f[8]=c,f[9]=u,f[10]=l,f[11]=h,f[12]=d,f[13]=m,f[14]=p,f[15]=g,f}function Ai(e,t,r,n,i,s,a,o,c,u,l,h,d,m,p,g,f){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=a,e[6]=o,e[7]=c,e[8]=u,e[9]=l,e[10]=h,e[11]=d,e[12]=m,e[13]=p,e[14]=g,e[15]=f,e}function Hr(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 Ei(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 bi(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],u=t[7],l=t[8],h=t[9],d=t[10],m=t[11],p=t[12],g=t[13],f=t[14],y=t[15],S=r*o-n*a,v=r*c-i*a,_=r*u-s*a,x=n*c-i*o,w=n*u-s*o,z=i*u-s*c,b=l*g-h*p,L=l*f-d*p,E=l*y-m*p,T=h*f-d*g,P=h*y-m*g,I=d*y-m*f,R=S*I-v*P+_*T+x*E-w*L+z*b;return R?(R=1/R,e[0]=(o*I-c*P+u*T)*R,e[1]=(i*P-n*I-s*T)*R,e[2]=(g*z-f*w+y*x)*R,e[3]=(d*w-h*z-m*x)*R,e[4]=(c*E-a*I-u*L)*R,e[5]=(r*I-i*E+s*L)*R,e[6]=(f*_-p*z-y*v)*R,e[7]=(l*z-d*_+m*v)*R,e[8]=(a*P-o*E+u*b)*R,e[9]=(n*E-r*P-s*b)*R,e[10]=(p*w-g*_+y*S)*R,e[11]=(h*_-l*w-m*S)*R,e[12]=(o*L-a*T-c*b)*R,e[13]=(r*T-n*L+i*b)*R,e[14]=(g*v-p*x-f*S)*R,e[15]=(l*x-h*v+d*S)*R,e):null}function zi(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],u=t[7],l=t[8],h=t[9],d=t[10],m=t[11],p=t[12],g=t[13],f=t[14],y=t[15],S=r*o-n*a,v=r*c-i*a,_=r*u-s*a,x=n*c-i*o,w=n*u-s*o,z=i*u-s*c,b=l*g-h*p,L=l*f-d*p,E=l*y-m*p,T=h*f-d*g,P=h*y-m*g,I=d*y-m*f;return e[0]=o*I-c*P+u*T,e[1]=i*P-n*I-s*T,e[2]=g*z-f*w+y*x,e[3]=d*w-h*z-m*x,e[4]=c*E-a*I-u*L,e[5]=r*I-i*E+s*L,e[6]=f*_-p*z-y*v,e[7]=l*z-d*_+m*v,e[8]=a*P-o*E+u*b,e[9]=n*E-r*P-s*b,e[10]=p*w-g*_+y*S,e[11]=h*_-l*w-m*S,e[12]=o*L-a*T-c*b,e[13]=r*T-n*L+i*b,e[14]=g*v-p*x-f*S,e[15]=l*x-h*v+d*S,e}function Li(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],a=e[5],o=e[6],c=e[7],u=e[8],l=e[9],h=e[10],d=e[11],m=e[12],p=e[13],g=e[14],f=e[15],y=t*a-r*s,S=t*o-n*s,v=r*o-n*a,_=u*p-l*m,x=u*g-h*m,w=l*g-h*p,z=t*w-r*x+n*_,b=s*w-a*x+o*_,L=u*v-l*S+h*y,E=m*v-p*S+g*y;return c*z-i*b+f*L-d*E}function Vr(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],u=t[6],l=t[7],h=t[8],d=t[9],m=t[10],p=t[11],g=t[12],f=t[13],y=t[14],S=t[15],v=r[0],_=r[1],x=r[2],w=r[3];return e[0]=v*n+_*o+x*h+w*g,e[1]=v*i+_*c+x*d+w*f,e[2]=v*s+_*u+x*m+w*y,e[3]=v*a+_*l+x*p+w*S,v=r[4],_=r[5],x=r[6],w=r[7],e[4]=v*n+_*o+x*h+w*g,e[5]=v*i+_*c+x*d+w*f,e[6]=v*s+_*u+x*m+w*y,e[7]=v*a+_*l+x*p+w*S,v=r[8],_=r[9],x=r[10],w=r[11],e[8]=v*n+_*o+x*h+w*g,e[9]=v*i+_*c+x*d+w*f,e[10]=v*s+_*u+x*m+w*y,e[11]=v*a+_*l+x*p+w*S,v=r[12],_=r[13],x=r[14],w=r[15],e[12]=v*n+_*o+x*h+w*g,e[13]=v*i+_*c+x*d+w*f,e[14]=v*s+_*u+x*m+w*y,e[15]=v*a+_*l+x*p+w*S,e}function Ri(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,u,l,h,d,m,p,g,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],u=t[3],l=t[4],h=t[5],d=t[6],m=t[7],p=t[8],g=t[9],f=t[10],y=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=u,e[4]=l,e[5]=h,e[6]=d,e[7]=m,e[8]=p,e[9]=g,e[10]=f,e[11]=y,e[12]=a*n+l*i+p*s+t[12],e[13]=o*n+h*i+g*s+t[13],e[14]=c*n+d*i+f*s+t[14],e[15]=u*n+m*i+y*s+t[15]),e}function Ti(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 ki(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,u,l,h,d,m,p,g,f,y,S,v,_,x,w,z,b,L,E,T,P,I,R,X;return o<k?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),u=Math.cos(r),l=1-u,h=t[0],d=t[1],m=t[2],p=t[3],g=t[4],f=t[5],y=t[6],S=t[7],v=t[8],_=t[9],x=t[10],w=t[11],z=i*i*l+u,b=s*i*l+a*c,L=a*i*l-s*c,E=i*s*l-a*c,T=s*s*l+u,P=a*s*l+i*c,I=i*a*l+s*c,R=s*a*l-i*c,X=a*a*l+u,e[0]=h*z+g*b+v*L,e[1]=d*z+f*b+_*L,e[2]=m*z+y*b+x*L,e[3]=p*z+S*b+w*L,e[4]=h*E+g*T+v*P,e[5]=d*E+f*T+_*P,e[6]=m*E+y*T+x*P,e[7]=p*E+S*T+w*P,e[8]=h*I+g*R+v*X,e[9]=d*I+f*R+_*X,e[10]=m*I+y*R+x*X,e[11]=p*I+S*R+w*X,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Mi(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],u=t[8],l=t[9],h=t[10],d=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+u*n,e[5]=a*i+l*n,e[6]=o*i+h*n,e[7]=c*i+d*n,e[8]=u*i-s*n,e[9]=l*i-a*n,e[10]=h*i-o*n,e[11]=d*i-c*n,e}function Pi(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],u=t[8],l=t[9],h=t[10],d=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-u*n,e[1]=a*i-l*n,e[2]=o*i-h*n,e[3]=c*i-d*n,e[8]=s*n+u*i,e[9]=a*n+l*i,e[10]=o*n+h*i,e[11]=c*n+d*i,e}function Ni(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],u=t[4],l=t[5],h=t[6],d=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i+u*n,e[1]=a*i+l*n,e[2]=o*i+h*n,e[3]=c*i+d*n,e[4]=u*i-s*n,e[5]=l*i-a*n,e[6]=h*i-o*n,e[7]=d*i-c*n,e}function Oi(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 Ii(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 Ci(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,u;return a<k?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),u=1-c,e[0]=n*n*u+c,e[1]=i*n*u+s*o,e[2]=s*n*u-i*o,e[3]=0,e[4]=n*i*u-s*o,e[5]=i*i*u+c,e[6]=s*i*u+n*o,e[7]=0,e[8]=n*s*u+i*o,e[9]=i*s*u-n*o,e[10]=s*s*u+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Di(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 Fi(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 Bi(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 Wr(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,u=s+s,l=n*o,h=n*c,d=n*u,m=i*c,p=i*u,g=s*u,f=a*o,y=a*c,S=a*u;return e[0]=1-(m+g),e[1]=h+S,e[2]=d-y,e[3]=0,e[4]=h-S,e[5]=1-(l+g),e[6]=p+f,e[7]=0,e[8]=d+y,e[9]=p-f,e[10]=1-(l+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function Ui(e,t){var r=new H(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],u=t[6],l=t[7],h=n*n+i*i+s*s+a*a;return h>0?(r[0]=(o*a+l*n+c*s-u*i)*2/h,r[1]=(c*a+l*i+u*n-o*s)*2/h,r[2]=(u*a+l*s+o*i-c*n)*2/h):(r[0]=(o*a+l*n+c*s-u*i)*2,r[1]=(c*a+l*i+u*n-o*s)*2,r[2]=(u*a+l*s+o*i-c*n)*2),Wr(e,t,r),e}function Gi(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Kr(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],a=t[5],o=t[6],c=t[8],u=t[9],l=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+a*a+o*o),e[2]=Math.sqrt(c*c+u*u+l*l),e}function Hi(e,t){var r=new H(3);Kr(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],a=t[0]*n,o=t[1]*i,c=t[2]*s,u=t[4]*n,l=t[5]*i,h=t[6]*s,d=t[8]*n,m=t[9]*i,p=t[10]*s,g=a+l+p,f=0;return g>0?(f=Math.sqrt(g+1)*2,e[3]=.25*f,e[0]=(h-m)/f,e[1]=(d-c)/f,e[2]=(o-u)/f):a>l&&a>p?(f=Math.sqrt(1+a-l-p)*2,e[3]=(h-m)/f,e[0]=.25*f,e[1]=(o+u)/f,e[2]=(d+c)/f):l>p?(f=Math.sqrt(1+l-a-p)*2,e[3]=(d-c)/f,e[0]=(o+u)/f,e[1]=.25*f,e[2]=(h+m)/f):(f=Math.sqrt(1+p-a-l)*2,e[3]=(o-u)/f,e[0]=(d+c)/f,e[1]=(h+m)/f,e[2]=.25*f),e}function Vi(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],c=n[5],u=n[6],l=n[8],h=n[9],d=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+u*u),r[2]=Math.sqrt(l*l+h*h+d*d);var m=1/r[0],p=1/r[1],g=1/r[2],f=i*m,y=s*p,S=a*g,v=o*m,_=c*p,x=u*g,w=l*m,z=h*p,b=d*g,L=f+_+b,E=0;return L>0?(E=Math.sqrt(L+1)*2,e[3]=.25*E,e[0]=(x-z)/E,e[1]=(w-S)/E,e[2]=(y-v)/E):f>_&&f>b?(E=Math.sqrt(1+f-_-b)*2,e[3]=(x-z)/E,e[0]=.25*E,e[1]=(y+v)/E,e[2]=(w+S)/E):_>b?(E=Math.sqrt(1+_-f-b)*2,e[3]=(w-S)/E,e[0]=(y+v)/E,e[1]=.25*E,e[2]=(x+z)/E):(E=Math.sqrt(1+b-f-_)*2,e[3]=(y-v)/E,e[0]=(w+S)/E,e[1]=(x+z)/E,e[2]=.25*E),e}function Wi(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,u=s+s,l=a+a,h=i*c,d=i*u,m=i*l,p=s*u,g=s*l,f=a*l,y=o*c,S=o*u,v=o*l,_=n[0],x=n[1],w=n[2];return e[0]=(1-(p+f))*_,e[1]=(d+v)*_,e[2]=(m-S)*_,e[3]=0,e[4]=(d-v)*x,e[5]=(1-(h+f))*x,e[6]=(g+y)*x,e[7]=0,e[8]=(m+S)*w,e[9]=(g-y)*w,e[10]=(1-(h+p))*w,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function Ki(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],u=s+s,l=a+a,h=o+o,d=s*u,m=s*l,p=s*h,g=a*l,f=a*h,y=o*h,S=c*u,v=c*l,_=c*h,x=n[0],w=n[1],z=n[2],b=i[0],L=i[1],E=i[2],T=(1-(g+y))*x,P=(m+_)*x,I=(p-v)*x,R=(m-_)*w,X=(1-(d+y))*w,Le=(f+S)*w,Re=(p+v)*z,Br=(f-S)*z,Ur=(1-(d+g))*z;return e[0]=T,e[1]=P,e[2]=I,e[3]=0,e[4]=R,e[5]=X,e[6]=Le,e[7]=0,e[8]=Re,e[9]=Br,e[10]=Ur,e[11]=0,e[12]=r[0]+b-(T*b+R*L+Re*E),e[13]=r[1]+L-(P*b+X*L+Br*E),e[14]=r[2]+E-(I*b+Le*L+Ur*E),e[15]=1,e}function Xi(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,u=r*a,l=n*a,h=n*o,d=i*a,m=i*o,p=i*c,g=s*a,f=s*o,y=s*c;return e[0]=1-h-p,e[1]=l+y,e[2]=d-f,e[3]=0,e[4]=l-y,e[5]=1-u-p,e[6]=m+g,e[7]=0,e[8]=d+f,e[9]=m-g,e[10]=1-u-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function $i(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),u=1/(s-a);return e[0]=s*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(r+t)*o,e[9]=(i+n)*c,e[10]=(a+s)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*u,e[15]=0,e}function Xr(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 Yi=Xr;function ji(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 qi(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),a=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(a+o),u=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=u,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*u*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function $r(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),u=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*u,e[15]=1,e}var Zi=$r;function Ji(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),u=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=u,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*u,e[15]=1,e}function Qi(e,t,r,n){var i,s,a,o,c,u,l,h,d,m,p=t[0],g=t[1],f=t[2],y=n[0],S=n[1],v=n[2],_=r[0],x=r[1],w=r[2];return Math.abs(p-_)<k&&Math.abs(g-x)<k&&Math.abs(f-w)<k?Hr(e):(l=p-_,h=g-x,d=f-w,m=1/Math.sqrt(l*l+h*h+d*d),l*=m,h*=m,d*=m,i=S*d-v*h,s=v*l-y*d,a=y*h-S*l,m=Math.sqrt(i*i+s*s+a*a),m?(m=1/m,i*=m,s*=m,a*=m):(i=0,s=0,a=0),o=h*a-d*s,c=d*i-l*a,u=l*s-h*i,m=Math.sqrt(o*o+c*c+u*u),m?(m=1/m,o*=m,c*=m,u*=m):(o=0,c=0,u=0),e[0]=i,e[1]=o,e[2]=l,e[3]=0,e[4]=s,e[5]=c,e[6]=h,e[7]=0,e[8]=a,e[9]=u,e[10]=d,e[11]=0,e[12]=-(i*p+s*g+a*f),e[13]=-(o*p+c*g+u*f),e[14]=-(l*p+h*g+d*f),e[15]=1,e)}function es(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],u=n[2],l=i-r[0],h=s-r[1],d=a-r[2],m=l*l+h*h+d*d;m>0&&(m=1/Math.sqrt(m),l*=m,h*=m,d*=m);var p=c*d-u*h,g=u*l-o*d,f=o*h-c*l;return m=p*p+g*g+f*f,m>0&&(m=1/Math.sqrt(m),p*=m,g*=m,f*=m),e[0]=p,e[1]=g,e[2]=f,e[3]=0,e[4]=h*f-d*g,e[5]=d*p-l*f,e[6]=l*g-h*p,e[7]=0,e[8]=l,e[9]=h,e[10]=d,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function ts(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 rs(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 ns(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 Yr(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 is(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 ss(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 as(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 os(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],u=e[7],l=e[8],h=e[9],d=e[10],m=e[11],p=e[12],g=e[13],f=e[14],y=e[15],S=t[0],v=t[1],_=t[2],x=t[3],w=t[4],z=t[5],b=t[6],L=t[7],E=t[8],T=t[9],P=t[10],I=t[11],R=t[12],X=t[13],Le=t[14],Re=t[15];return Math.abs(r-S)<=k*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(n-v)<=k*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(i-_)<=k*Math.max(1,Math.abs(i),Math.abs(_))&&Math.abs(s-x)<=k*Math.max(1,Math.abs(s),Math.abs(x))&&Math.abs(a-w)<=k*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(o-z)<=k*Math.max(1,Math.abs(o),Math.abs(z))&&Math.abs(c-b)<=k*Math.max(1,Math.abs(c),Math.abs(b))&&Math.abs(u-L)<=k*Math.max(1,Math.abs(u),Math.abs(L))&&Math.abs(l-E)<=k*Math.max(1,Math.abs(l),Math.abs(E))&&Math.abs(h-T)<=k*Math.max(1,Math.abs(h),Math.abs(T))&&Math.abs(d-P)<=k*Math.max(1,Math.abs(d),Math.abs(P))&&Math.abs(m-I)<=k*Math.max(1,Math.abs(m),Math.abs(I))&&Math.abs(p-R)<=k*Math.max(1,Math.abs(p),Math.abs(R))&&Math.abs(g-X)<=k*Math.max(1,Math.abs(g),Math.abs(X))&&Math.abs(f-Le)<=k*Math.max(1,Math.abs(f),Math.abs(Le))&&Math.abs(y-Re)<=k*Math.max(1,Math.abs(y),Math.abs(Re))}var cs=Vr,ls=Yr;var O={};Rt(O,{add:()=>fs,angle:()=>Ds,bezier:()=>Ts,ceil:()=>ps,clone:()=>us,copy:()=>hs,create:()=>jr,cross:()=>bs,dist:()=>Ks,distance:()=>en,div:()=>Ws,divide:()=>Qr,dot:()=>kt,equals:()=>Gs,exactEquals:()=>Us,floor:()=>gs,forEach:()=>js,fromValues:()=>ds,hermite:()=>Rs,inverse:()=>As,len:()=>$s,length:()=>qr,lerp:()=>zs,max:()=>vs,min:()=>ys,mul:()=>Vs,multiply:()=>Jr,negate:()=>Ss,normalize:()=>Es,random:()=>ks,rotateX:()=>Os,rotateY:()=>Is,rotateZ:()=>Cs,round:()=>xs,scale:()=>_s,scaleAndAdd:()=>ws,set:()=>ms,slerp:()=>Ls,sqrDist:()=>Xs,sqrLen:()=>Ys,squaredDistance:()=>tn,squaredLength:()=>rn,str:()=>Bs,sub:()=>Hs,subtract:()=>Zr,transformMat3:()=>Ps,transformMat4:()=>Ms,transformQuat:()=>Ns,zero:()=>Fs});function jr(){var e=new H(3);return H!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function us(e){var t=new H(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function qr(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function ds(e,t,r){var n=new H(3);return n[0]=e,n[1]=t,n[2]=r,n}function hs(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function ms(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function fs(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function Zr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function Jr(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e}function Qr(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function ps(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function gs(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function ys(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 vs(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 xs(e,t){return e[0]=De(t[0]),e[1]=De(t[1]),e[2]=De(t[2]),e}function _s(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function ws(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 en(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 tn(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 rn(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function Ss(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function As(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Es(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 kt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function bs(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 zs(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 Ls(e,t,r,n){var i=Math.acos(Math.min(Math.max(kt(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 Rs(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,u=a*(s-1),l=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*u+i[0]*l,e[1]=t[1]*o+r[1]*c+n[1]*u+i[1]*l,e[2]=t[2]*o+r[2]*c+n[2]*u+i[2]*l,e}function Ts(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,u=o*a,l=3*s*o,h=3*c*a,d=c*s;return e[0]=t[0]*u+r[0]*l+n[0]*h+i[0]*d,e[1]=t[1]*u+r[1]*l+n[1]*h+i[1]*d,e[2]=t[2]*u+r[2]*l+n[2]*h+i[2]*d,e}function ks(e,t){t=t===void 0?1:t;var r=Tt()*2*Math.PI,n=Tt()*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 Ms(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 Ps(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 Ns(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],u=t[2],l=i*u-s*c,h=s*o-n*u,d=n*c-i*o;return l=l+l,h=h+h,d=d+d,e[0]=o+a*l+i*d-s*h,e[1]=c+a*h+s*l-n*d,e[2]=u+a*d+n*h-i*l,e}function Os(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 Is(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 Cs(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 Ds(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2],c=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),u=c&&kt(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function Fs(e){return e[0]=0,e[1]=0,e[2]=0,e}function Bs(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Us(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Gs(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)<=k*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=k*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=k*Math.max(1,Math.abs(i),Math.abs(o))}var Hs=Zr,Vs=Jr,Ws=Qr,Ks=en,Xs=tn,$s=qr,Ys=rn,js=(function(){var e=jr();return function(t,r,n,i,s,a){var o,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,t.length):c=t.length,o=n;o<c;o+=r)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],s(e,e,a),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var qs=Object.defineProperty,Zs=(e,t)=>{for(var r in t)qs(e,r,{get:t[r],enumerable:!0})};var Xl=Math.PI/180;var Js=Math.PI/180,$l=180/Math.PI,Te=Js;var $=1,ne=2;var Ot=8,It=16,Qs=32;var ea=16384;var We=65536,sn=1<<17,ta=1<<18,ra=1<<19,na=1<<20,ia=1<<21,sa=1<<22,aa=1<<23,Yl=1<<24,Ke=1<<25,oa=1<<26,jl=1<<27,ql=1<<28,Zl=1<<29,Xe=1<<30,Jl=1<<31;var Ql=1<<25,eu=1<<28,tu=1<<29,ru=1<<30,nu=1<<31,iu=$|ne,su=$|We|ne|Ke|Xe,au=$|We|ne,ou=$|sn|ne|Ke|Xe,cu=Qs|Ot|It,lu=$|It|Ot,ca=$|Ke|Xe|ne|oa,uu=ta|ra|na|ia|sa|aa,du=$|Ot|It|Ke|Xe,hu=$|We|ne,mu=$|ne,fu=$|We|ne|sn,pu=ca|ea,gu=Number.MAX_SAFE_INTEGER-1;var an=256,la=256,ua=8192,da=2048,ha=512,ma=256,fa=an*2,pa=256,Mt=32;var on=(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+ua]="Sounds",e[e.Images=e.Sounds+da]="Images",e[e.Lights=e.Images+ha]="Lights",e[e.ShadowLights=e.Lights+la]="ShadowLights",e[e.Items=e.ShadowLights+pa]="Items",e[e.PlayerSkins=e.Items+ma]="PlayerSkins",e[e.General=e.PlayerSkins+an]="General",e[e.WheelWeapons=e.General+fa]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Mt]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Mt]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Mt]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(on||{}),yu=on.MaxConfigStrings;var ga={};Zs(ga,{addReplayFrame:()=>_a,createReplaySession:()=>xa,deserializeReplay:()=>va,serializeReplay:()=>ya});function ya(e){return JSON.stringify(e,null,2)}function va(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function xa(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function _a(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var N=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(N||{}),A=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(A||{}),wa=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}hasMore(){return this.offset<this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){if(this.readByte()>=162){e.x=0,e.y=0,e.z=0;return}e.x=0,e.y=0,e.z=0}};function Sa(){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 vu=Sa();var xu=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 Aa=19,_u=8+Aa*8;var Nt=4,Pt=7*Nt,wu=[{index:0,size:3,type:5126,stride:Pt,offset:0},{index:1,size:2,type:5126,stride:Pt,offset:3*Nt},{index:2,size:2,type:5126,stride:Pt,offset:5*Nt}];var Su=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]);var cn=class{constructor(){this._position=O.create(),this._angles=O.create(),this._bobAngles=O.create(),this._bobOffset=O.create(),this._kickAngles=O.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=D.create(),this._projectionMatrix=D.create(),this._viewProjectionMatrix=D.create(),this._dirty=!0}get position(){return this._position}set position(e){O.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){O.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){O.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){O.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){O.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let t=D.create();return D.perspective(t,e*Te,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;D.perspective(this._projectionMatrix,this._fov*Te,this._aspect,this._near,this._far);let e=D.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],r=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],n=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*Te,s=r*Te,a=n*Te,o=D.create();D.identity(o),D.rotateZ(o,o,-s),D.rotateY(o,o,-i),D.rotateX(o,o,-a);let c=D.create();D.multiply(c,e,o);let u=O.add(O.create(),this._position,this._bobOffset),l=O.negate(O.create(),u),h=O.create();O.transformMat4(h,l,o);let d=O.fromValues(h[1]||0,h[2]||0,h[0]||0);D.copy(this._viewMatrix,c),this._viewMatrix[12]=d[0],this._viewMatrix[13]=d[1],this._viewMatrix[14]=d[2],D.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Ea=class{constructor(e){this.buffer=e,this.view=new DataView(e),this.offset=0}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(this.offset+=4,e<0||e>262144)return console.warn(`DemoReader: Invalid block length ${e} at offset ${this.offset-4}`),null;if(this.offset+e>this.buffer.byteLength)return console.warn(`DemoReader: Incomplete block. Expected ${e} bytes, but only ${this.buffer.byteLength-this.offset} remain.`),null;let t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new wa(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Ct=1,Dt=2,Ft=4,Bt=8,Ut=16,Gt=32,ln=64,ba=128,za=256,Ht=512,Vt=1024,Wt=2048,Fe=4096,Be=16384,La=32768,Ue=65536,Kt=1<<17,Ge=1<<18,He=1<<19,Xt=1<<20,$t=1<<21,Yt=1<<22,Ra=1<<23,jt=1<<24,Ve=1<<25,qt=1<<26,Zt=1<<27,de=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0,bits:0}),nn=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0)}),Ta=class{constructor(e,t){this.stream=e,this.handler=t}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;switch(e){case N.nop:break;case N.disconnect:this.handler?this.handler.onDisconnect():console.log("Server disconnected");break;case N.reconnect:this.handler?this.handler.onReconnect():console.log("Server reconnect");break;case N.print:let t=this.stream.readByte(),r=this.stream.readString();this.handler?this.handler.onPrint(t,r):console.log(`[Server Print ${t}]: ${r}`);break;case N.serverdata:this.parseServerData();break;case N.configstring:this.parseConfigString();break;case N.spawnbaseline:this.parseSpawnBaseline();break;case N.centerprint:let n=this.stream.readString();this.handler?this.handler.onCenterPrint(n):console.log(`[Center Print]: ${n}`);break;case N.download:this.parseDownload();break;case N.frame:this.parseFrame();break;case N.packetentities:this.parsePacketEntities(!1);break;case N.deltapacketentities:this.parsePacketEntities(!0);break;case N.stufftext:let i=this.stream.readString();this.handler?this.handler.onStuffText(i):console.log(`[StuffText]: ${i}`);break;case N.layout:let s=this.stream.readString();this.handler&&this.handler.onLayout(s);break;case N.inventory:this.parseInventory();break;case N.sound:this.parseSound();break;case N.muzzleflash:this.parseMuzzleFlash();break;case N.muzzleflash2:this.parseMuzzleFlash2();break;case N.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${e}`);return}}}parseServerData(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler?this.handler.onServerData(e,t,r,n,i,s):console.log(`Server Data: Protocol ${e}, Level ${s}, GameDir ${n}`)}parseConfigString(){let e=this.stream.readShort(),t=this.stream.readString();this.handler&&this.handler.onConfigString(e,t)}parseDownload(){let e=this.stream.readShort(),t=this.stream.readByte(),r;e>0&&(r=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,t,r)}parseInventory(){let t=new Array(256);for(let r=0;r<256;r++)t[r]=this.stream.readShort();this.handler&&this.handler.onInventory(t)}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte(),r,n,i,s,a;if(e&1&&(r=this.stream.readByte()),e&2&&(n=this.stream.readByte()),e&16&&(i=this.stream.readByte()),e&8&&(s=this.stream.readShort()),e&4){let o={x:0,y:0,z:0};this.stream.readPos(o),a=o}this.handler&&this.handler.onSound(e,t,r,n,i,s,a)}parseMuzzleFlash(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,t)}parseMuzzleFlash2(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,t)}parseTempEntity(){let e=this.stream.readByte(),t={x:0,y:0,z:0},r={x:0,y:0,z:0},n={x:0,y:0,z:0},i,s,a,o,c;switch(e){case A.BLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.GUNSHOT:case A.SPARKS:case A.BULLET_SPARKS:case A.SCREEN_SPARKS:case A.SHIELD_SPARKS:case A.SHOTGUN:this.stream.readPos(t),this.stream.readDir(n);break;case A.SPLASH:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.LASER_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLUEHYPERBLASTER:this.stream.readPos(t),this.stream.readPos(n);break;case A.BLASTER:this.stream.readPos(t),this.stream.readDir(n);break;case A.RAILTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.EXPLOSION2:case A.GRENADE_EXPLOSION:case A.GRENADE_EXPLOSION_WATER:case A.PLASMA_EXPLOSION:case A.EXPLOSION1:case A.EXPLOSION1_BIG:case A.ROCKET_EXPLOSION:case A.ROCKET_EXPLOSION_WATER:case A.EXPLOSION1_NP:case A.BFG_EXPLOSION:case A.BFG_BIGEXPLOSION:this.stream.readPos(t);break;case A.BFG_LASER:this.stream.readPos(t),this.stream.readPos(r);break;case A.BUBBLETRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PARASITE_ATTACK:case A.MEDIC_CABLE_ATTACK:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.BOSSTPORT:this.stream.readPos(t);break;case A.GRAPPLE_CABLE:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.WELDING_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.GREENBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLASTER2:case A.FLECHETTE:this.stream.readPos(t),this.stream.readDir(n);break;case A.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.DEBUGTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PLAIN_EXPLOSION:this.stream.readPos(t);break;case A.FLASHLIGHT:this.stream.readPos(t),a=this.stream.readShort();break;case A.FORCEWALL:this.stream.readPos(t),this.stream.readPos(r),s=this.stream.readByte();break;case A.HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.MONSTER_HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.HEATBEAM_SPARKS:case A.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(n);break;case A.STEAM:this.stream.readShort()!==-1?(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort(),this.stream.readLong()):(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort());break;case A.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(r);break;case A.MOREBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.CHAINFIST_SMOKE:this.stream.readPos(t);break;case A.ELECTRIC_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case A.TRACKER_EXPLOSION:this.stream.readPos(t);break;case A.TELEPORT_EFFECT:case A.DBALL_GOAL:this.stream.readPos(t);break;case A.WIDOWBEAMOUT:this.stream.readShort(),this.stream.readPos(t);break;case A.NUKEBLAST:this.stream.readPos(t);break;case A.WIDOWSPLASH:this.stream.readPos(t);break;default:console.warn(`CL_ParseTEnt: bad type ${e}`);break}this.handler&&this.handler.onTempEntity(e,t,r,n,i,s,a,o,c)}parseSpawnBaseline(){let e=this.parseEntityBits(),t=de();this.parseDelta(de(),t,e.number,e.bits),this.handler&&this.handler.onSpawnBaseline(t)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readByte(),i=this.stream.readData(n),s=this.stream.readByte();if(s!==N.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${s}`);let a=this.parsePlayerState(),o=this.stream.readByte();if(o!==N.packetentities&&o!==N.deltapacketentities)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${o}`);let c=o===N.deltapacketentities,u=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:t,surpressCount:r,areaBytes:n,areaBits:i,playerState:a,packetEntities:{delta:c,entities:u}})}parsePlayerState(){let e=nn(),t=this.stream.readShort();t&1&&(e.pm_type=this.stream.readByte()),t&2&&(e.origin.x=this.stream.readShort()*.125,e.origin.y=this.stream.readShort()*.125,e.origin.z=this.stream.readShort()*.125),t&4&&(e.velocity.x=this.stream.readShort()*.125,e.velocity.y=this.stream.readShort()*.125,e.velocity.z=this.stream.readShort()*.125),t&8&&(e.pm_time=this.stream.readByte()),t&16&&(e.pm_flags=this.stream.readByte()),t&32&&(e.gravity=this.stream.readShort()),t&64&&(e.delta_angles.x=this.stream.readShort()*(180/32768),e.delta_angles.y=this.stream.readShort()*(180/32768),e.delta_angles.z=this.stream.readShort()*(180/32768)),t&128&&(e.viewoffset.x=this.stream.readChar()*.25,e.viewoffset.y=this.stream.readChar()*.25,e.viewoffset.z=this.stream.readChar()*.25),t&256&&(e.viewangles.x=this.stream.readAngle16(),e.viewangles.y=this.stream.readAngle16(),e.viewangles.z=this.stream.readAngle16()),t&512&&(e.kick_angles.x=this.stream.readChar()*.25,e.kick_angles.y=this.stream.readChar()*.25,e.kick_angles.z=this.stream.readChar()*.25),t&4096&&(e.gun_index=this.stream.readByte()),t&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=this.stream.readChar()*.25,e.gun_offset.y=this.stream.readChar()*.25,e.gun_offset.z=this.stream.readChar()*.25,e.gun_angles.x=this.stream.readChar()*.25,e.gun_angles.y=this.stream.readChar()*.25,e.gun_angles.z=this.stream.readChar()*.25),t&1024&&(e.blend[0]=this.stream.readByte(),e.blend[1]=this.stream.readByte(),e.blend[2]=this.stream.readByte(),e.blend[3]=this.stream.readByte()),t&2048&&(e.fov=this.stream.readByte()),t&16384&&(e.rdflags=this.stream.readByte());let r=this.stream.readLong();for(let n=0;n<32;n++)r&1<<n&&(e.stats[n]=this.stream.readShort());return e}parsePacketEntities(e){let t=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:nn(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let r=de();this.parseDelta(de(),r,t.number,t.bits),e.push(r)}return e}parseEntityBits(){let e=this.stream.readByte();e&ba&&(e|=this.stream.readByte()<<8),e&La&&(e|=this.stream.readByte()<<16),e&Ra&&(e|=this.stream.readByte()<<24);let t;return e&za?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,r,n){t.number=e.number,t.modelindex=e.modelindex,t.modelindex2=e.modelindex2,t.modelindex3=e.modelindex3,t.modelindex4=e.modelindex4,t.frame=e.frame,t.skinnum=e.skinnum,t.effects=e.effects,t.renderfx=e.renderfx,t.origin.x=e.origin.x,t.origin.y=e.origin.y,t.origin.z=e.origin.z,t.old_origin.x=e.origin.x,t.old_origin.y=e.origin.y,t.old_origin.z=e.origin.z,t.angles.x=e.angles.x,t.angles.y=e.angles.y,t.angles.z=e.angles.z,t.sound=e.sound,t.event=e.event,t.solid=e.solid,t.number=r,t.bits=n,n&Wt&&(t.modelindex=this.stream.readByte()),n&Xt&&(t.modelindex2=this.stream.readByte()),n&$t&&(t.modelindex3=this.stream.readByte()),n&Yt&&(t.modelindex4=this.stream.readByte()),n&Ut&&(t.frame=this.stream.readByte()),n&Kt&&(t.frame=this.stream.readShort()),n&Ue&&n&Ve?t.skinnum=this.stream.readLong():n&Ue?t.skinnum=this.stream.readByte():n&Ve&&(t.skinnum=this.stream.readShort()),n&Be&&n&He?t.effects=this.stream.readLong():n&Be?t.effects=this.stream.readByte():n&He&&(t.effects=this.stream.readShort()),n&Fe&&n&Ge?t.renderfx=this.stream.readLong():n&Fe?t.renderfx=this.stream.readByte():n&Ge&&(t.renderfx=this.stream.readShort()),n&Ct&&(t.origin.x=this.stream.readCoord()),n&Dt&&(t.origin.y=this.stream.readCoord()),n&Ht&&(t.origin.z=this.stream.readCoord()),n&Vt&&(t.angles.x=this.stream.readAngle()),n&Ft&&(t.angles.y=this.stream.readAngle()),n&Bt&&(t.angles.z=this.stream.readAngle()),n&jt&&this.stream.readPos(t.old_origin),n&qt&&(t.sound=this.stream.readByte()),n&Gt?t.event=this.stream.readByte():t.event=0,n&Zt&&(t.solid=this.stream.readShort())}},ke=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(ke||{}),un=class{constructor(){this.reader=null,this.state=0,this.playbackSpeed=1,this.accumulatedTime=0,this.frameDuration=100}setHandler(e){this.handler=e}loadDemo(e){this.reader=new Ea(e),this.state=0,this.accumulatedTime=0}play(){this.reader&&(this.state=1)}pause(){this.state===1&&(this.state=2)}stop(){this.state=0,this.reader&&this.reader.reset(),this.accumulatedTime=0}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.reader.hasMore()){this.state=3;return}let t=this.reader.readNextBlock();if(!t){this.state=3;return}new Ta(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var ka=Object.defineProperty,Ma=(e,t)=>{for(var r in t)ka(e,r,{get:t[r],enumerable:!0})},dn={x:0,y:0,z:0};var ku=Math.PI/180;function Me(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function me(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Q(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Pa(e){return Q(e,e)}function $e(e){return Math.sqrt(Pa(e))}function hn(e){let t=$e(e);return t===0?e:me(e,1/t)}var mn=0,fn=1,pn=2,Na=Math.PI/180,Mu=180/Math.PI;function Jt(e,t){switch(t){case mn:return e.x;case fn:return e.y;case pn:default:return e.z}}function Qt(e){return e*Na}function he(e){let t=e%360;return t<0?360+t:t}function Pe(e){let t=Qt(Jt(e,fn)),r=Qt(Jt(e,mn)),n=Qt(Jt(e,pn)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),u=Math.cos(n),l={x:o*s,y:o*i,z:-a},h={x:-c*a*s-u*-i,y:-c*a*i-u*s,z:-c*o},d={x:u*a*s-c*-i,y:u*a*i-c*s,z:u*o};return{forward:l,right:h,up:d}}var Y=1,ie=2;var tr=8,rr=16,Oa=32;var Ia=16384;var Ye=65536,gn=1<<17,Ca=1<<18,Da=1<<19,Fa=1<<20,Ba=1<<21,Ua=1<<22,Ga=1<<23,Pu=1<<24,je=1<<25,Ha=1<<26,Nu=1<<27,Ou=1<<28,Iu=1<<29,qe=1<<30,Cu=1<<31;var Du=1<<25,Fu=1<<28,Bu=1<<29,Uu=1<<30,Gu=1<<31;var Hu=Y|ie,Vu=Y|Ye|ie|je|qe,Wu=Y|Ye|ie,Ku=Y|gn|ie|je|qe,Xu=Oa|tr|rr,$u=Y|rr|tr,Va=Y|je|qe|ie|Ha,Yu=Ca|Da|Fa|Ba|Ua|Ga,ju=Y|tr|rr|je|qe,qu=Y|Ye|ie,Zu=Y|ie,Ju=Y|Ye|ie|gn,Qu=Va|Ia;var ed=Number.MAX_SAFE_INTEGER-1;var yn=256;var Wa=256,nr=8192,ir=2048,sr=512,Ka=256,Xa=yn*2,$a=256,er=32;var V=(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+nr]="Sounds",e[e.Images=e.Sounds+ir]="Images",e[e.Lights=e.Images+sr]="Lights",e[e.ShadowLights=e.Lights+Wa]="ShadowLights",e[e.Items=e.ShadowLights+$a]="Items",e[e.PlayerSkins=e.Items+Ka]="PlayerSkins",e[e.General=e.PlayerSkins+yn]="General",e[e.WheelWeapons=e.General+Xa]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+er]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+er]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+er]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(V||{}),td=V.MaxConfigStrings;var Ya={};Ma(Ya,{addReplayFrame:()=>Ja,createReplaySession:()=>Za,deserializeReplay:()=>qa,serializeReplay:()=>ja});function ja(e){return JSON.stringify(e,null,2)}function qa(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function Za(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Ja(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var ce=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(ce||{});var W=(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))(W||{});function j(e,t){return(e&t)!==0}var ar=(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))(ar||{}),q=(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))(q||{});function vn(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,l=$e(t);if(l<1)return{x:0,y:0,z:t.z};let h=0;if(n&&!i||s){let p=l<c?c:l;h+=p*o*r}a>0&&!s&&(h+=l*u*a*r);let d=l-h;if(d<0&&(d=0),d===l)return t;let m=d/l;return me(t,m)}function or(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Q(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 xn(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=Q(t,r),c=a-o;if(c<=0)return t;let u=i*n*s;return u>c&&(u=c),{x:t.x+r.x*u,y:t.y+r.y*u,z:t.z+r.z*u}}function _n(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=$e(s);if(a>i){let o=i/a;s=me(s,o),a=i}return{wishdir:a===0?s:hn(s),wishspeed:a}}function wn(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=Me(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=Me(s,{x:0,y:0,z:n.upmove}):s=Me(s,{x:0,y:0,z:10});let a=$e(s);if(a>i){let o=i/a;s=me(s,o),a=i}return a*=.5,{wishdir:a===0?s:hn(s),wishspeed:a}}function Qa(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function eo(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Ze(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=Qa(r,n),i={...i,x:eo(i.x)});let s=Pe(i);return{viewangles:i,...s}}var Sn=200,An=200,En=200,bn=140,zn=150,Ln=3;function to(e){let t=he(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function Rn(e,t){return{x:to(e.x+t.x),y:he(e.y+t.y),z:he(e.z+t.z)}}function Tn(e,t){let r=t.sensitivityX??t.sensitivity,n=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*n,y:e.deltaX*r,z:0}}var ro={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},no=800,fe={x:0,y:0,z:0},io=250;function te(){return{origin:fe,velocity:fe,viewangles:fe,pmFlags:W.OnGround,pmType:ar.Normal,waterlevel:ce.None,gravity:no,deltaAngles:fe,health:0,armor:0,ammo:0,blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}function kn(e){return e?{...te(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:fe,blend:e.blend?[...e.blend]:[0,0,0,0],damageIndicators:e.damageIndicators?[...e.damageIndicators]:[]}:te()}function ee(e,t,r){return e+(t-e)*r}function cr(e,t,r){let n=he(t-e);return n>180&&(n-=360),he(e+n*r)}function ge(e,t,r){let n=Math.max(0,Math.min(r,1));return{origin:{x:ee(e.origin.x,t.origin.x,n),y:ee(e.origin.y,t.origin.y,n),z:ee(e.origin.z,t.origin.z,n)},velocity:{x:ee(e.velocity.x,t.velocity.x,n),y:ee(e.velocity.y,t.velocity.y,n),z:ee(e.velocity.z,t.velocity.z,n)},viewangles:{x:cr(e.viewangles.x,t.viewangles.x,n),y:cr(e.viewangles.y,t.viewangles.y,n),z:cr(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:ee(e.health,t.health,n),armor:ee(e.armor,t.armor,n),ammo:ee(e.ammo,t.ammo,n),centerPrint:t.centerPrint,notify:t.notify,blend:t.blend,pickupIcon:t.pickupIcon,damageAlpha:t.damageAlpha,damageIndicators:t.damageIndicators}}function so(e,t,r,n){let i=Math.min(Math.max(t.msec,0),io)/1e3,s=j(e.pmFlags,W.OnGround),a=j(e.pmFlags,W.OnLadder),o=vn({velocity:e.velocity,frametime:i,onGround:s,groundIsSlick:r.groundIsSlick,onLadder:a,waterlevel:e.waterlevel,pmFriction:r.pmFriction,pmStopSpeed:r.pmStopSpeed,pmWaterFriction:r.pmWaterFriction}),{viewangles:c,forward:u,right:l}=Ze({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??fe}),h=e.waterlevel>ce.None?wn({forward:u,right:l,cmd:t,maxSpeed:r.pmWaterSpeed}):_n({forward:u,right:l,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>ce.None)o=or({velocity:o,wishdir:h.wishdir,wishspeed:h.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=j(e.pmFlags,W.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,g=h.wishspeed>p?{wishdir:h.wishdir,wishspeed:p}:h;o=or({velocity:o,wishdir:g.wishdir,wishspeed:g.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=xn({velocity:o,wishdir:h.wishdir,wishspeed:h.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,Me(e.origin,me(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var pe=class{constructor(t,r={}){this.baseFrame={frame:0,timeMs:0,state:te()};this.commands=[];this.predicted=te();this.settings={...ro,...r},this.trace=t,this.predicted=this.baseFrame.state??te()}setAuthoritative(t){let r=kn(t.state);return this.baseFrame={...t,state:r},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=kn(this.baseFrame.state);for(let r of this.commands)t=so(t,r,this.settings,this.trace);return this.predicted=t,t}};var ao={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function oo(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 co(e,t,r){return t?e>210?r/400:e>100?r/800:r/1600:0}function lo(e,t,r,n,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let s=co(t,n,i),a=e+s,c=j(r,W.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 ye=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...ao,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,r){let{forward:n,right:i}=Pe(Ze({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??dn}).viewangles),s=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),a=j(t.pmFlags,W.OnGround),o=lo(this.bobTime,s,t.pmFlags,a,r);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=Q(t.velocity,n)*this.settings.runPitch,u=Q(t.velocity,i)*this.settings.runRoll,l=this.bobFracSin*this.settings.bobPitch*s,h=this.bobFracSin*this.settings.bobRoll*s;j(t.pmFlags,W.Ducked)&&a&&(l*=6,h*=6),c+=Math.min(l,this.settings.maxBobAngle),h=Math.min(h,this.settings.maxBobAngle),this.bobCycle&1&&(h=-h),u+=h;let d=Math.min(this.bobFracSin*s*this.settings.bobUp,this.settings.maxBobHeight),m=0,p=0;if(this.kick&&this.kick.remainingMs>0){let S=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));m+=S*this.kick.pitch,p+=S*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-r),this.kick.remainingMs===0&&(this.kick=void 0)}let y={angles:{x:c+m,y:0,z:u+p},offset:oo({x:0,y:0,z:d}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:s};return this.lastSample=y,y}};var ve=(e,t,r,n,i,s,a)=>{let o=Math.abs(n).toString();for(let c=0;c<o.length;c++){let u=parseInt(o[c]),l=i[u];l&&e.drawPic(t+c*s,r,l,a)}};var B={HEALTH_X:100,HEALTH_Y:450,ARMOR_X:200,ARMOR_Y:450,AMMO_X:540,AMMO_Y:450,CENTER_PRINT_X:320,CENTER_PRINT_Y:100,WEAPON_ICON_X:10,WEAPON_ICON_Y:450,POWERUP_X:610,POWERUP_Y:450};var se=null,xe=0,lr=["ch1","ch2","ch3"],ur=[null,null,null];var Mn=()=>{if(xe=(xe+1)%lr.length,se=ur[xe],!se){let e=!1;for(let t=0;t<lr.length;t++){let r=(xe+t)%lr.length;if(ur[r]){xe=r,se=ur[r],e=!0;break}}e||(se=null)}return xe},Pn=(e,t,r)=>{if(se){let n=(t-se.width)/2,i=(r-se.height)/2;e.drawPic(n,i,se)}};var uo=Object.defineProperty,ho=(e,t)=>{for(var r in t)uo(e,r,{get:t[r],enumerable:!0})},gr={x:0,y:0,z:0};var hd=Math.PI/180;function tt(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function Se(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function yr(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function mo(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function fo(e){return mo(e,e)}function Fn(e){return Math.sqrt(fo(e))}function le(e){let t=Fn(e);return t===0?e:yr(e,1/t)}function po(e,t,r){return{x:e.x<t.x?t.x:e.x>r.x?r.x:e.x,y:e.y<t.y?t.y:e.y>r.y?r.y:e.y,z:e.z<t.z?t.z:e.z>r.z?r.z:e.z}}function go(e,t,r,n){let i=0;if(t.x<r.x){let s=t.x-r.x;i+=s*s}else if(e.x>n.x){let s=e.x-n.x;i+=s*s}if(t.y<r.y){let s=t.y-r.y;i+=s*s}else if(e.y>n.y){let s=e.y-n.y;i+=s*s}if(t.z<r.z){let s=t.z-r.z;i+=s*s}else if(e.z>n.z){let s=e.z-n.z;i+=s*s}return i}var vr=0,xr=1,Bn=2,yo=Math.PI/180,vo=180/Math.PI;function Oe(e,t){switch(t){case vr:return e.x;case xr:return e.y;case Bn:default:return e.z}}function Qe(e){return e*yo}function fr(e){return e*vo}function Nn(e){let t=e%360;return t<0?360+t:t}function _r(e){let t=Qe(Oe(e,xr)),r=Qe(Oe(e,vr)),n=Qe(Oe(e,Bn)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),u=Math.cos(n),l={x:o*s,y:o*i,z:-a},h={x:-c*a*s-u*-i,y:-c*a*i-u*s,z:-c*o},d={x:u*a*s-c*-i,y:u*a*i-c*s,z:u*o};return{forward:l,right:h,up:d}}function xo(e){let t=Oe(e,vr),r=Oe(e,xr);if(t===0)return r===0?0:r>0?90:270;let n=fr(Math.atan2(r,t));return n<0?n+360:n}function _o(e){let t=e.x,r=e.y,n=e.z;if(r===0&&t===0)return{x:n>0?-90:-270,y:0,z:0};let i;t?i=fr(Math.atan2(r,t)):r>0?i=90:i=270,i<0&&(i+=360);let s=Math.sqrt(t*t+r*r),a=fr(Math.atan2(n,s));return a<0&&(a+=360),{x:-a,y:i,z:0}}var Z=624,wo=397,So=2567483615,Ao=2147483648,Eo=2147483647,dr=4294967296,bo=class{constructor(e=5489){this.state=new Uint32Array(Z),this.index=Z,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<Z;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=Z}nextUint32(){this.index>=Z&&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<Z;e++){let t=this.state[e]&Ao|this.state[(e+1)%Z]&Eo,r=this.state[(e+wo)%Z]^t>>>1;(t&1)!==0&&(r^=So),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==Z)throw new Error(`Expected ${Z} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Un=class{constructor(e={}){this.mt=new bo(e.seed)}frandom(){return this.mt.nextUint32()/dr}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=dr-dr%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 Gn(e){return new Un(e)}var J=1,oe=2;var wr=8,Sr=16,zo=32;var Lo=16384;var nt=65536,Hn=1<<17,Ro=1<<18,To=1<<19,ko=1<<20,Mo=1<<21,Po=1<<22,No=1<<23,md=1<<24,it=1<<25,Oo=1<<26,fd=1<<27,pd=1<<28,gd=1<<29,st=1<<30,yd=1<<31;var vd=1<<25,xd=1<<28,_d=1<<29,wd=1<<30,Sd=1<<31,Ad=J|oe,Ed=J|nt|oe|it|st,bd=J|nt|oe,zd=J|Hn|oe|it|st,Ld=zo|wr|Sr,Rd=J|Sr|wr,Io=J|it|st|oe|Oo,Td=Ro|To|ko|Mo|Po|No,kd=J|wr|Sr|it|st,Md=J|nt|oe,Pd=J|oe,Nd=J|nt|oe|Hn,Od=Io|Lo,Id=Number.MAX_SAFE_INTEGER-1;var Vn=256,Co=256,Do=8192,Fo=2048,Bo=512,Uo=256,Go=Vn*2,Ho=256,hr=32,Wn=(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+Do]="Sounds",e[e.Images=e.Sounds+Fo]="Images",e[e.Lights=e.Images+Bo]="Lights",e[e.ShadowLights=e.Lights+Co]="ShadowLights",e[e.Items=e.ShadowLights+Ho]="Items",e[e.PlayerSkins=e.Items+Uo]="PlayerSkins",e[e.General=e.PlayerSkins+Vn]="General",e[e.WheelWeapons=e.General+Go]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+hr]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+hr]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+hr]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Wn||{}),Cd=Wn.MaxConfigStrings,Vo={};ho(Vo,{addReplayFrame:()=>$o,createReplaySession:()=>Xo,deserializeReplay:()=>Ko,serializeReplay:()=>Wo});function Wo(e){return JSON.stringify(e,null,2)}function Ko(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function Xo(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function $o(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var at=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(at||{}),ot=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(ot||{});var Yo={...gr};var Dd=Object.freeze({aiflags:0,last_sighting:Yo,trail_time:0,pausetime:0});var Ar=[{name:"classname",type:"string",save:!0},{name:"spawnflags",type:"int",save:!0},{name:"target",type:"string",save:!0},{name:"targetname",type:"string",save:!0},{name:"killtarget",type:"string",save:!0},{name:"team",type:"string",save:!0},{name:"message",type:"string",save:!0},{name:"pathtarget",type:"string",save:!0},{name:"model",type:"string",save:!0},{name:"item",type:"string",save:!0},{name:"map",type:"string",save:!0},{name:"inventory",type:"inventory",save:!0},{name:"origin",type:"vec3",save:!0},{name:"old_origin",type:"vec3",save:!0},{name:"velocity",type:"vec3",save:!0},{name:"avelocity",type:"vec3",save:!0},{name:"angles",type:"vec3",save:!0},{name:"pos1",type:"vec3",save:!0},{name:"pos2",type:"vec3",save:!0},{name:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",type:"vec3",save:!0},{name:"absmin",type:"vec3",save:!0},{name:"absmax",type:"vec3",save:!0},{name:"size",type:"vec3",save:!0},{name:"mass",type:"int",save:!0},{name:"gravity",type:"float",save:!0},{name:"movetype",type:"int",save:!0},{name:"movedir",type:"vec3",save:!0},{name:"modelindex",type:"int",save:!0},{name:"frame",type:"int",save:!0},{name:"skin",type:"int",save:!0},{name:"effects",type:"int",save:!0},{name:"renderfx",type:"int",save:!0},{name:"health",type:"int",save:!0},{name:"max_health",type:"int",save:!0},{name:"takedamage",type:"boolean",save:!0},{name:"dmg",type:"int",save:!0},{name:"speed",type:"float",save:!0},{name:"accel",type:"float",save:!0},{name:"decel",type:"float",save:!0},{name:"height",type:"float",save:!0},{name:"deadflag",type:"int",save:!0},{name:"count",type:"int",save:!0},{name:"wait",type:"float",save:!0},{name:"delay",type:"float",save:!0},{name:"timestamp",type:"float",save:!0},{name:"lip",type:"int",save:!0},{name:"state",type:"int",save:!0},{name:"sounds",type:"int",save:!0},{name:"noise_index",type:"int",save:!0},{name:"fly_sound_debounce_time",type:"float",save:!0},{name:"enemy",type:"entity",save:!0},{name:"movetarget",type:"entity",save:!0},{name:"target_ent",type:"entity",save:!0},{name:"goalentity",type:"entity",save:!0},{name:"ideal_yaw",type:"float",save:!0},{name:"yaw_speed",type:"float",save:!0},{name:"search_time",type:"float",save:!0},{name:"attack_finished_time",type:"float",save:!0},{name:"pain_finished_time",type:"float",save:!0},{name:"trail_time",type:"float",save:!0},{name:"groundentity",type:"entity",save:!0},{name:"groundentity_linkcount",type:"int",save:!0},{name:"waterlevel",type:"int",save:!0},{name:"watertype",type:"int",save:!0},{name:"nextthink",type:"float",save:!0},{name:"solid",type:"int",save:!0},{name:"flags",type:"int",save:!0},{name:"svflags",type:"int",save:!0},{name:"think",type:"callback",save:!1},{name:"touch",type:"callback",save:!1},{name:"use",type:"callback",save:!1},{name:"blocked",type:"callback",save:!1},{name:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}];var Fd=1<<24;function On(e){return{mins:{x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},maxs:{x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z}}}function jo(e,t){let r=On(e),n=On(t),i=go(r.mins,r.maxs,n.mins,n.maxs);return Math.sqrt(i)}function qo(e,t){if(t===0)return{x:0,y:0,z:0};let r=Qe(e);return{x:Math.cos(r)*t,y:Math.sin(r)*t,z:0}}function ct(e,t,r){let n=qo(t,r),i=e.origin;return i.x+=n.x,i.y+=n.y,i.z+=n.z,!0}function lt(e,t){let r=Nn(e.angles.y),n=e.ideal_yaw;if(r===n){e.angles.y=r;return}let i=e.yaw_speed*t*10,s=n-r;n>r?s>=180&&(s-=360):s<=-180&&(s+=360),s>i?s=i:s<-i&&(s=-i),e.angles.y=Nn(r+s)}function Er(e,t){ct(e,e.angles.y,t)}function br(e,t){if(!t)return;let r={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=xo(r)}function ut(e,t){lt(e,t)}function dt(e,t,r,n){if(br(e,e.goalentity),lt(e,r),t!==0&&ct(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&jo(e,e.goalentity)<64&&e.goalentity.target){let s=n.pickTarget(e.goalentity.target);s&&(e.goalentity=s,e.ideal_yaw=e.angles.y)}}function ht(e,t,r){br(e,e.enemy??e.goalentity),lt(e,r),t!==0&&ct(e,e.angles.y,t)}function zr(e,t,r){br(e,e.enemy),lt(e,r),t!==0&&ct(e,e.angles.y,t)}var Zo=Ar.filter(e=>e.save||e.type==="callback"),Bd=new Map(Zo.map(e=>[e.name,e]));var Ud=1/40;var G=(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[e.Trap=6]="Trap",e[e.Tesla=7]="Tesla",e[e.MagSlugs=8]="MagSlugs",e[e.Flechettes=9]="Flechettes",e[e.Prox=10]="Prox",e[e.Nuke=11]="Nuke",e[e.Rounds=12]="Rounds",e))(G||{}),Gd=Object.keys(G).length/2;function ae(e,t){return(e&t)!==0}var Ae=(e=>(e.BODY="body",e.COMBAT="combat",e.JACKET="jacket",e))(Ae||{}),Jo={jacket:{baseCount:25,maxCount:50,normalProtection:.3,energyProtection:0},combat:{baseCount:50,maxCount:100,normalProtection:.6,energyProtection:.3},body:{baseCount:100,maxCount:200,normalProtection:.8,energyProtection:.6}};function Qo(e,t,r){if(e<=0||ae(t,130)||!r.armorType||r.armorCount<=0)return{saved:0,remainingArmor:r.armorCount};let n=Jo[r.armorType],i=ae(t,4)?n.energyProtection:n.normalProtection,s=Math.ceil(i*e);return s>=r.armorCount&&(s=r.armorCount),s<=0?{saved:0,remainingArmor:r.armorCount}:{saved:s,remainingArmor:r.armorCount-s}}function ec(e,t,r,n,i,s={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(ae(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:a}=_r(i.angles),o={x:r.x-i.origin.x,y:r.y-i.origin.y,z:r.z-i.origin.z},c=Math.hypot(o.x,o.y,o.z);if(i.type==="screen"&&c>0){let f={x:o.x/c,y:o.y/c,z:o.z/c};if(f.x*a.x+f.y*a.y+f.z*a.z<=.3)return{saved:0,remainingCells:i.cellCount}}let u=s.ctfMode??!1,l=i.type==="screen"||u?1:2,h=i.type==="screen"?e/3:2*e/3;h=Math.max(1,h);let d=i.cellCount*l;ae(t,4)&&(d=Math.max(1,Math.floor(d/2))),d>h&&(d=Math.floor(h));let m=d/l;ae(t,4)&&(m*=2),m=Math.max(1,Math.floor(m));let p=Math.max(l,m),g=Math.max(0,i.cellCount-p);return{saved:d,remainingCells:g}}var C=(e=>(e.Blaster="blaster",e.Shotgun="shotgun",e.SuperShotgun="super_shotgun",e.Machinegun="machinegun",e.Chaingun="chaingun",e.GrenadeLauncher="grenade_launcher",e.RocketLauncher="rocket_launcher",e.HyperBlaster="hyperblaster",e.Railgun="railgun",e.BFG10K="bfg10k",e.Grapple="grapple",e.ChainFist="chainfist",e.EtfRifle="etf_rifle",e.ProxLauncher="prox_launcher",e.IonRipper="ionripper",e.PlasmaBeam="plasmabeam",e.Phalanx="phalanx",e.Disruptor="disruptor",e))(C||{}),M=(e=>(e.QuadDamage="quad",e.Invulnerability="invulnerability",e.EnviroSuit="enviro_suit",e.Rebreather="rebreather",e.Silencer="silencer",e.PowerScreen="power_screen",e.PowerShield="power_shield",e.QuadFire="quad_fire",e.Invisibility="invisibility",e.Bandolier="bandolier",e.AmmoPack="ammo_pack",e.IRGoggles="ir_goggles",e.DoubleDamage="double_damage",e.SphereVengeance="sphere_vengeance",e.SphereHunter="sphere_hunter",e.SphereDefender="sphere_defender",e.Doppelganger="doppelganger",e.TagToken="tag_token",e.TechResistance="tech_resistance",e.TechStrength="tech_strength",e.TechHaste="tech_haste",e.TechRegeneration="tech_regeneration",e.Flashlight="flashlight",e.Compass="compass",e))(M||{}),F=(e=>(e.Blue="blue",e.Red="red",e.Green="green",e.Yellow="yellow",e.DataCD="data_cd",e.PowerCube="power_cube",e.ExplosiveCharges="explosive_charges",e.PowerCore="power_core",e.Pyramid="pyramid",e.DataSpinner="data_spinner",e.Pass="pass",e.CommanderHead="commander_head",e.Airstrike="airstrike",e.NukeContainer="nuke_container",e.Nuke="nuke",e.RedFlag="red_flag",e.BlueFlag="blue_flag",e))(F||{});var Kn={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:"blaster",ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:"shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:"super_shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:"machinegun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:"chaingun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:"grenade_launcher",ammoType:3,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:"rocket_launcher",ammoType:2,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:"hyperblaster",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:"railgun",ammoType:5,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:"bfg10k",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:1}};var Hd=Gn();var Lr=.1;function tc(e,t,r){ut(e,Lr)}function rc(e,t,r){dt(e,t,Lr,r)}function nc(e,t,r){ht(e,t,Lr)}var Vd=Array.from({length:1},()=>({ai:tc,dist:0}));var Wd=Array.from({length:1},()=>({ai:rc,dist:5}));var Kd=Array.from({length:1},()=>({ai:nc,dist:10}));function ic(e,t,r,n,i){if(ae(i,8)||((e.flags??0)&4)!==0||n===0)return{x:0,y:0,z:0};let a=Math.max(50,e.mass??200),o=le(r),u=yr(o,(t===e?1600:500)*n/a);return e.velocity=tt(e.velocity,u),u}function sc(e,t,r,n,i){let s=n,a=0,o=0,c,u;if(e.powerArmor){let l=ec(n,i,t,r,e.powerArmor);a=l.saved,c=l.remainingCells,s-=a}if(e.regularArmor){let l=Qo(s,i,e.regularArmor);o=l.saved,u=l.remainingArmor,s-=o}return[Math.max(0,s),a,o,c,u]}function In(e){return e.mins&&e.maxs?{x:e.origin.x+(e.mins.x+e.maxs.x)*.5,y:e.origin.y+(e.mins.y+e.maxs.y)*.5,z:e.origin.z+(e.mins.z+e.maxs.z)*.5}:e.origin}function Rr(e,t,r,n,i,s,a,o,c,u,l){if(!e.takedamage||a<=0)return null;if(!ae(c,32)&&((e.flags??0)&1)!==0)return{take:0,psave:0,asave:a,knocked:{x:0,y:0,z:0},killed:!1};let d=ic(e,r,n,o,c),[m,p,g,f,y]=sc(e,i,s,a,c);e.powerArmor&&f!==void 0&&(e.powerArmor.cellCount=f),e.regularArmor&&(e.regularArmor.armorCount=y??e.regularArmor.armorCount);let S=m;S>0&&(e.health-=S,l&&!ae(c,1024)&&(e.classname==="player"||e.monsterinfo)&&l(i,1,at.temp_entity,ot.BLOOD,i,s));let v=e.health<=0;return v?e.flags&&e.flags&2?e.health=Math.max(1,e.health):e.die&&e.die(e,t,r,S,i,u):S>0&&e.pain&&e.pain(e,r,o,S,u),{take:S,psave:p,asave:g,knocked:d,killed:v,remainingCells:f,remainingArmor:y}}function ac(e,t,r,n,i,s,a,o,c={},u){let l=[],h=In(t),d=c.canDamage??(()=>!0);for(let m of e){if(m===i||!m.takedamage||!d(m,t))continue;let p=m.mins&&m.maxs?po(h,tt(m.origin,m.mins),tt(m.origin,m.maxs)):In(m),g=Se(h,p),f=Fn(g);if(s>0&&f>s)continue;let y=n-.5*f;if(y<=0)continue;let S=m===r?y*.5:y,v=le(Se(m.origin,h)),_=Rr(m,t,r,v,p,v,S,S,a|1,o,u);l.push({target:m,result:_,appliedDamage:S})}return l}function oc(e,t,r,n,i,s){let a=e.spawn();a.classname="grenade",a.owner=t,a.origin={...r},a.velocity={x:n.x*s,y:n.y*s,z:n.z*s},a.movetype=9,a.clipmask=268566530,a.solid=2,a.modelindex=e.modelIndex("models/objects/grenade/tris.md2"),a.mins={x:-4,y:-4,z:-4},a.maxs={x:4,y:4,z:4};let o=c=>{let u=e.findByRadius(c.origin,120);ac(u,c,c.owner,i,c.owner,120,0,6,{},e.multicast.bind(e)),e.multicast(c.origin,2,at.temp_entity,ot.GRENADE_EXPLOSION,c.origin),e.free(c)};a.touch=(c,u,l,h)=>{if(u!==c.owner&&u&&u.takedamage){o(c);return}},a.think=c=>{o(c)},e.scheduleThink(a,e.timeSeconds+2.5),e.finalizeSpawn(a)}function cc(e,t,r,n,i,s,a){let o=e.spawn();o.classname=a===10?"hyperblaster_bolt":"blaster_bolt",o.owner=t,o.origin={...r},o.velocity={x:n.x*s,y:n.y*s,z:n.z*s},o.movetype=8,o.solid=2,o.mins={x:-2,y:-2,z:-2},o.maxs={x:2,y:2,z:2},o.touch=(c,u,l,h)=>{u!==c.owner&&(u&&u.takedamage?Rr(u,c,c.owner,c.velocity,c.origin,l?l.normal:gr,i,1,0,a,e.multicast.bind(e)):l&&e.multicast(c.origin,1,at.temp_entity,ot.BLASTER,c.origin,l.normal),e.free(c))},e.finalizeSpawn(o)}function Cn(){return 2*Math.random()-1}function mt(e,t,r,n,i,s,a,o,c,u=0){let l=r;if(s>0||a>0){let m=_o(r),{right:p,up:g}=_r(m),f=Cn()*s,y=Cn()*a;l={x:r.x+p.x*f+g.x*y,y:r.y+p.y*f+g.y*y,z:r.z+p.z*f+g.z*y},l=le(l)}let h=tt(t,yr(l,8192)),d=c.trace(t,null,null,h,e,536870913);!d.ent||d.fraction===1||Rr(d.ent,e,e,l,d.endpos,d.plane?.normal||gr,n,i,18,u)}function lc(e,t,r,n,i,s,a,o,c,u,l=2){for(let h=0;h<o;h++)mt(e,t,r,n,i,s,a,c,u,l)}function uc(e,t,r,n,i,s,a,o,c=1){cc(o,e,t,r,n,i,c)}var ft=.1;function dc(e,t,r){ut(e,ft)}function hc(e,t,r){dt(e,t,ft,r)}function mc(e,t,r){ht(e,t,ft)}function Xn(e,t,r){zr(e,t,ft)}function $n(e,t,r){Er(e,t)}var Tr,Yn,jn,fc,pc,gc,qn;function yc(e){e.monsterinfo.current_move=Tr}function vc(e){e.monsterinfo.current_move=Yn}function pt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=jn:e.monsterinfo.current_move=Tr}function xc(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},n=le(Se(e.enemy.origin,r));mt(e,r,n,10,2,0,0,0,t,5)}function _c(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n=le(Se(e.enemy.origin,r));oc(t,e,r,n,50,600)}var wc=Array.from({length:30},()=>({ai:dc,dist:0}));Tr={firstframe:0,lastframe:29,frames:wc,endfunc:yc};var Sc=Array.from({length:40},()=>({ai:hc,dist:2}));Yn={firstframe:30,lastframe:69,frames:Sc,endfunc:vc};var Ac=Array.from({length:20},()=>({ai:mc,dist:10}));jn={firstframe:70,lastframe:89,frames:Ac,endfunc:pt};var Ec=Array.from({length:10},(e,t)=>({ai:Xn,dist:0,think:t>=2&&t<=8?xc:null}));fc={firstframe:90,lastframe:99,frames:Ec,endfunc:pt};var bc=Array.from({length:10},(e,t)=>({ai:Xn,dist:0,think:t===5?_c:null}));pc={firstframe:100,lastframe:109,frames:bc,endfunc:pt};var zc=Array.from({length:8},()=>({ai:$n,dist:0}));gc={firstframe:110,lastframe:117,frames:zc,endfunc:pt};var Lc=Array.from({length:15},()=>({ai:$n,dist:0}));function Rc(e){e.monsterinfo.nextframe=qn.lastframe,e.nextthink=-1}qn={firstframe:118,lastframe:132,frames:Lc,endfunc:Rc};var gt=.1;function Tc(e,t,r){ut(e,gt)}function kc(e,t,r){dt(e,t,gt,r)}function Mc(e,t,r){ht(e,t,gt)}function Pc(e,t,r){zr(e,t,gt)}function kr(e,t,r){Er(e,t)}var Mr,Zn,Jn,Nc,Oc,Qn,Ic;function Cc(e){e.monsterinfo.current_move=Mr}function Dc(e){e.monsterinfo.current_move=Zn}function yt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Jn:e.monsterinfo.current_move=Mr}function Fc(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)},i=le(Se(n,r));mt(e,r,i,5,2,.05,.05,0,t,4)}var Bc=Array.from({length:22},()=>({ai:Tc,dist:0}));Mr={firstframe:0,lastframe:21,frames:Bc,endfunc:Cc};var Uc=Array.from({length:15},()=>({ai:kc,dist:4}));Zn={firstframe:22,lastframe:36,frames:Uc,endfunc:Dc};var Gc=Array.from({length:8},()=>({ai:Mc,dist:12}));Jn={firstframe:37,lastframe:44,frames:Gc,endfunc:yt};var Hc=Array.from({length:15},(e,t)=>({ai:Pc,dist:0,think:t>=5&&t<=7?Fc:null}));Nc={firstframe:45,lastframe:59,frames:Hc,endfunc:yt};var Vc=Array.from({length:10},()=>({ai:kr,dist:0}));Oc={firstframe:60,lastframe:69,frames:Vc,endfunc:yt};var Wc=Array.from({length:20},()=>({ai:kr,dist:0}));function Kc(e){e.monsterinfo.nextframe=Qn.lastframe,e.nextthink=-1}Qn={firstframe:70,lastframe:89,frames:Wc,endfunc:Kc};var Xc=Array.from({length:5},()=>({ai:kr,dist:0}));Ic={firstframe:90,lastframe:94,frames:Xc,endfunc:yt};var vt=.1;var $c=2;function Yc(e,t,r){ut(e,vt)}function jc(e,t,r){dt(e,t,vt,r)}function qc(e,t,r){ht(e,t,vt)}function ei(e,t,r){zr(e,t,vt)}function ti(e,t,r){Er(e,t)}var Pr,ri,ni,Zc,Jc,Qc,ii;function el(e){e.monsterinfo.current_move=Pr}function tl(e){e.monsterinfo.current_move=ri}function xt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ni:e.monsterinfo.current_move=Pr}function Nr(e){return{x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight}}function Or(e,t){if(!e.enemy){let{forward:n}=_r(e.angles);return n}let r={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)};return le(Se(r,t))}function rl(e,t){if(!e.enemy)return;let r=Nr(e),n=Or(e,r);uc(e,r,n,5,600,0,0,t,1)}function nl(e,t){if(!e.enemy)return;let r=Nr(e),n=Or(e,r);lc(e,r,n,2,4,.15,.15,20,0,t,3)}function il(e,t){if(!e.enemy)return;let r=Nr(e),n=Or(e,r);mt(e,r,n,4,4,.05,.05,0,t,4)}function sl(e,t){e.spawnflags&$c?nl(e,t):rl(e,t)}var al=Array.from({length:30},()=>({ai:Yc,dist:0}));Pr={firstframe:0,lastframe:29,frames:al,endfunc:el};var ol=Array.from({length:40},()=>({ai:jc,dist:2}));ri={firstframe:30,lastframe:69,frames:ol,endfunc:tl};var cl=Array.from({length:20},()=>({ai:qc,dist:10}));ni={firstframe:70,lastframe:89,frames:cl,endfunc:xt};var ll=Array.from({length:10},(e,t)=>({ai:ei,dist:0,think:t===5?sl:null}));Zc={firstframe:90,lastframe:99,frames:ll,endfunc:xt};var ul=Array.from({length:10},(e,t)=>({ai:ei,dist:0,think:t>=4&&t<=8?il:null}));Jc={firstframe:90,lastframe:99,frames:ul,endfunc:xt};var dl=Array.from({length:6},()=>({ai:ti,dist:0}));Qc={firstframe:100,lastframe:105,frames:dl,endfunc:xt};var hl=Array.from({length:10},()=>({ai:ti,dist:0}));function ml(e){e.monsterinfo.nextframe=ii.lastframe,e.nextthink=-1}ii={firstframe:106,lastframe:115,frames:hl,endfunc:ml};var Xd=new Map(Ar.map(e=>[e.name,e]));var $d=Gn();var fl=2166136261,pl=16777619;function si(e,t){let r=e>>>0;for(let n=0;n<t.length;n+=1)r^=t[n]&255,r=Math.imul(r,pl)>>>0;return r>>>0}function _e(e,t){let r=new ArrayBuffer(8);new DataView(r).setFloat64(0,t,!0);let i=new Uint8Array(r);return si(e,i)}function pr(e,t){let r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n)&255;return si(e,r)}var mr=2,gl=1;function K(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function U(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Je(e,t,r){return e===void 0?r:U(e,t)}function rt(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function et(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let r of e)U(r,`${t} element`);return e}function yl(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=K(e,"level");return{frameNumber:Je(t.frameNumber,"level.frameNumber",0),timeSeconds:Je(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Je(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Je(t.deltaSeconds,"level.deltaSeconds",0)}}function vl(e){if(e===void 0)return new Un().getState();let t=K(e,"rng"),r=K(t.mt,"rng.mt"),n=et(r.state,"rng.mt.state");return{mt:{index:U(r.index,"rng.mt.index"),state:n}}}function xl(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=K(t,`thinks[${r}]`);return{time:U(n.time,`thinks[${r}].time`),entityIndex:U(n.entityIndex,`thinks[${r}].entityIndex`)}})}function _l(e){if(e===void 0)return{};let t=K(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=K(i,n),a={};for(let[o,c]of Object.entries(s))a[o]=U(c,`${n}.${o}`);r[n]=a;break}if(Array.isArray(i)&&i.length===3){let[s,a,o]=i;r[n]=[U(s,`${n}[0]`),U(a,`${n}[1]`),U(o,`${n}[2]`)];break}throw new Error(`Unsupported entity field value for ${n}`)}}}return r}function wl(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=K(t,`entities[${r}]`);return{index:U(n.index,`entities[${r}].index`),fields:_l(n.fields)}})}function Sl(e){let t=K(e,"pool");return{capacity:U(t.capacity,"pool.capacity"),activeOrder:et(t.activeOrder,"pool.activeOrder"),freeList:et(t.freeList,"pool.freeList"),pendingFree:et(t.pendingFree,"pool.pendingFree")}}function Al(e){let t=K(e,"entities");return{timeSeconds:U(t.timeSeconds,"entities.timeSeconds"),pool:Sl(t.pool),entities:wl(t.entities),thinks:xl(t.thinks)}}function El(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=K(t,`cvars[${r}]`);return{name:rt(n.name,`cvars[${r}].name`),value:rt(n.value,`cvars[${r}].value`),flags:U(n.flags,`cvars[${r}].flags`)}})}function bl(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>rt(t,`configstrings[${r}]`))}function zl(e){return e===void 0?{}:K(e,"gameState")}function re(e,t){if(t==null)return e;if(typeof t=="number")return _e(e,t);if(typeof t=="string")return pr(e,t);if(typeof t=="boolean")return _e(e,t?1:0);if(Array.isArray(t)){let r=e;for(let n of t)r=re(r,n);return r}if(typeof t=="object"){let r=e,n=Object.keys(t).sort();for(let i of n)r=pr(r,i),r=re(r,t[i]);return r}return e}function Ll(e){let t=fl;return t=_e(t,e.version),t=_e(t,e.timestamp),t=pr(t,e.map),t=_e(t,e.difficulty),t=_e(t,e.playtimeSeconds),t=re(t,e.gameState),t=re(t,e.level),t=re(t,e.rng),t=re(t,e.entities),t=re(t,e.cvars),t=re(t,e.configstrings),e.player&&(t=re(t,e.player)),t>>>0}function ai(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=K(n,"save"),s=i.version??mr,a=U(s,"version");if(a<gl)throw new Error(`Unsupported save version ${a}`);if(a>mr&&!r)throw new Error(`Save version ${a} is newer than supported ${mr}`);let o={version:a,timestamp:U(i.timestamp,"timestamp"),map:rt(i.map,"map"),difficulty:U(i.difficulty,"difficulty"),playtimeSeconds:U(i.playtimeSeconds,"playtimeSeconds"),gameState:zl(i.gameState),level:yl(i.level),rng:vl(i.rng),entities:Al(i.entities),cvars:El(i.cvars),configstrings:bl(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?U(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=Ll(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var Yd=new Set(Ar.filter(e=>e.save).map(e=>e.name));var Dn=globalThis.TextEncoder;function we(e){return ai({...e},{allowNewerVersion:!0})}function Rl(e){return Dn?new Dn().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var Tl=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:we(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:we(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:we(e.save)}))}},kl=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:we(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:we(t.save)}))}},Ir=class Ne{constructor(t={}){let{dbName:r=Ne.DEFAULT_DB_NAME,storeName:n=Ne.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new kl(i,r,n):this.adapter=new Tl}async save(t,r,n={}){let i=we(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:Rl(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 ai(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(Ne.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(Ne.QUICK_SLOT,t)}};Ir.DEFAULT_DB_NAME="quake2ts-saves";Ir.DEFAULT_STORE="saves";Ir.QUICK_SLOT="quicksave";var Ee=new Map;var oi=(e,t,r,n,i)=>{if(!t)return;let s=t.inventory.armor;if(s&&s.armorCount>0){let l=`i_${s.armorType}armor`,h=Ee.get(l);h&&e.drawPic(B.ARMOR_X-24,B.ARMOR_Y-2,h)}let a=t.inventory.currentWeapon;if(a){let l=Object.values(Kn).find(h=>h.weaponId===a);if(l){let h=`w_${l.id.substring(7)}`,d=Ee.get(h);d&&e.drawPic(B.WEAPON_ICON_X,B.WEAPON_ICON_Y,d)}}let o=B.POWERUP_X;for(let[l,h]of t.inventory.powerups.entries())if(h&&h>i){let d=`p_${l}`,m=Ee.get(d);if(m){e.drawPic(o,B.POWERUP_Y,m);let p=Math.ceil((h-i)/1e3);ve(e,o+m.width+2,B.POWERUP_Y,p,r,n),o-=m.width+n*p.toString().length+8}}let c=Array.from(t.inventory.keys).sort(),u=300;for(let l of c){let h="";switch(l){case"blue":h="k_bluekey";break;case"red":h="k_redkey";break;case"green":h="k_security";break;case"yellow":h="k_pyramid";break}if(h){let d=Ee.get(h);d&&(e.drawPic(B.WEAPON_ICON_X,u,d),u+=d.height+2)}}};var _t=new Map;var ci=(e,t)=>{if(!t.damageIndicators)return;let r=e.width,n=e.height,{forward:i,right:s,up:a}=Pe(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:u}=o,l={...c},h=Math.sqrt(l.x*l.x+l.y*l.y+l.z*l.z);h>0&&(l.x/=h,l.y/=h,l.z/=h);let d=Q(l,s),m=Q(l,i),p=Math.atan2(m,d)*180/Math.PI,g,f=0,y=0;p>-45&&p<=45?(g=_t.get("d_right"),f=r-(g?.width||0),y=(n-(g?.height||0))/2):p>45&&p<=135?(g=_t.get("d_up"),f=(r-(g?.width||0))/2,y=0):p>135||p<=-135?(g=_t.get("d_left"),f=0,y=(n-(g?.height||0))/2):(g=_t.get("d_down"),f=(r-(g?.width||0))/2,y=n-(g?.height||0)),g&&e.drawPic(f,y,g)}};var li=(e,t)=>{let r=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],n=10;for(let i of r)e.drawString(10,n,i),n+=10};var ui=(e,t)=>{if(!t.blend)return;let[r,n,i,s]=t.blend;s>0&&e.drawfillRect(0,0,e.width,e.height,[r,n,i,s])};var di=(e,t)=>{if(!t.pickupIcon)return;let r=Ee.get(t.pickupIcon);if(r){let n=e.width-r.width-10,i=e.height-r.height-10;e.drawPic(n,i,r)}};var wt=[],St=0;var hi=(e,t,r,n,i,s,a,o,c)=>{e.begin2D(),ui(e,t),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]);let u=n<=25?[1,0,0,1]:void 0;ve(e,B.HEALTH_X,B.HEALTH_Y,n,wt,St,u),ve(e,B.ARMOR_X,B.ARMOR_Y,i,wt,St),ve(e,B.AMMO_X,B.AMMO_Y,s,wt,St),oi(e,r,wt,St,c),di(e,t),ci(e,t),li(e,a),o.drawCenterPrint(e,c),o.drawNotifications(e,c),t.centerPrint&&e.drawCenterString(e.height/2-20,t.centerPrint),t.notify&&e.drawString(8,8,t.notify),Pn(e,e.width,e.height),e.end2D()};var Ml=3e3,Pl=5e3,Nl=4,At=class{constructor(){this.centerPrintMsg=null;this.notifyMessages=[]}addCenterPrint(t,r){this.centerPrintMsg={text:t,startTime:r,duration:Ml}}addNotify(t,r){this.notifyMessages.push({text:t,startTime:r,duration:Pl}),this.notifyMessages.length>Nl&&this.notifyMessages.shift()}drawCenterPrint(t,r){if(!this.centerPrintMsg)return;if(r>this.centerPrintMsg.startTime+this.centerPrintMsg.duration){this.centerPrintMsg=null;return}let n=this.centerPrintMsg.text.length*8,i=(t.width-n)/2,s=B.CENTER_PRINT_Y;t.drawString(i,s,this.centerPrintMsg.text)}drawNotifications(t,r){for(;this.notifyMessages.length>0&&r>this.notifyMessages[0].startTime+this.notifyMessages[0].duration;)this.notifyMessages.shift();let n=10;for(let i of this.notifyMessages)t.drawString(10,n,i.text),n+=10}};var Cr=[{type:"null"},{type:"armor",id:Ae.BODY},{type:"armor",id:Ae.COMBAT},{type:"armor",id:Ae.JACKET},{type:"armor",id:Ae.JACKET},{type:"powerup",id:M.PowerScreen},{type:"powerup",id:M.PowerShield},{type:"weapon",id:C.Grapple},{type:"weapon",id:C.Blaster},{type:"weapon",id:C.ChainFist},{type:"weapon",id:C.Shotgun},{type:"weapon",id:C.SuperShotgun},{type:"weapon",id:C.Machinegun},{type:"weapon",id:C.EtfRifle},{type:"weapon",id:C.Chaingun},{type:"ammo",id:G.Grenades},{type:"ammo",id:G.Trap},{type:"ammo",id:G.Tesla},{type:"weapon",id:C.GrenadeLauncher},{type:"weapon",id:C.ProxLauncher},{type:"weapon",id:C.RocketLauncher},{type:"weapon",id:C.HyperBlaster},{type:"weapon",id:C.IonRipper},{type:"weapon",id:C.PlasmaBeam},{type:"weapon",id:C.Railgun},{type:"weapon",id:C.Phalanx},{type:"weapon",id:C.BFG10K},{type:"weapon",id:C.Disruptor},{type:"ammo",id:G.Shells},{type:"ammo",id:G.Bullets},{type:"ammo",id:G.Cells},{type:"ammo",id:G.Rockets},{type:"ammo",id:G.Slugs},{type:"ammo",id:G.MagSlugs},{type:"ammo",id:G.Flechettes},{type:"ammo",id:G.Prox},{type:"ammo",id:G.Nuke},{type:"ammo",id:G.Rounds},{type:"powerup",id:M.QuadDamage},{type:"powerup",id:M.QuadFire},{type:"powerup",id:M.Invulnerability},{type:"powerup",id:M.Invisibility},{type:"powerup",id:M.Silencer},{type:"powerup",id:M.Rebreather},{type:"powerup",id:M.EnviroSuit},{type:"health",id:"ancient_head"},{type:"health",id:"legacy_head"},{type:"health",id:"adrenaline"},{type:"powerup",id:M.Bandolier},{type:"powerup",id:M.AmmoPack},{type:"powerup",id:M.IRGoggles},{type:"powerup",id:M.DoubleDamage},{type:"powerup",id:M.SphereVengeance},{type:"powerup",id:M.SphereHunter},{type:"powerup",id:M.SphereDefender},{type:"powerup",id:M.Doppelganger},{type:"powerup",id:M.TagToken},{type:"key",id:F.DataCD},{type:"key",id:F.PowerCube},{type:"key",id:F.ExplosiveCharges},{type:"key",id:F.Yellow},{type:"key",id:F.PowerCore},{type:"key",id:F.Pyramid},{type:"key",id:F.DataSpinner},{type:"key",id:F.Pass},{type:"key",id:F.Blue},{type:"key",id:F.Red},{type:"key",id:F.Green},{type:"key",id:F.CommanderHead},{type:"key",id:F.Airstrike},{type:"key",id:F.NukeContainer},{type:"key",id:F.Nuke},{type:"health",id:"health_small"},{type:"health",id:"health_medium"},{type:"health",id:"health_large"},{type:"health",id:"health_mega"},{type:"key",id:F.RedFlag},{type:"key",id:F.BlueFlag},{type:"powerup",id:M.TechResistance},{type:"powerup",id:M.TechStrength},{type:"powerup",id:M.TechHaste},{type:"powerup",id:M.TechRegeneration},{type:"powerup",id:M.Flashlight},{type:"powerup",id:M.Compass}];var Ol=2048,Et=class{constructor(t,r){this.configstrings=new Array(Ol).fill("");this.entities=new Map;this.baselines=new Map;this.previousFrame=null;this.latestFrame=null;this.stats=new Array(32).fill(0);this.inventory=new Array(256).fill(0);this.imports=t,this.callbacks=r}setImports(t){this.imports=t}setCallbacks(t){this.callbacks=t}onServerData(t,r,n,i,s,a){console.log(`Demo: Server Data - Protocol: ${t}, Level: ${a}`),this.configstrings.fill(""),this.entities.clear(),this.baselines.clear(),this.latestFrame=null}onConfigString(t,r){this.configstrings[t]=r}onSpawnBaseline(t){this.baselines.set(t.number,structuredClone(t))}onFrame(t){this.latestFrame&&(this.previousFrame=this.latestFrame),this.latestFrame=t,this.stats=[...t.playerState.stats];let r=t.packetEntities,n=new Map;if(r.delta)for(let[i,s]of this.entities)n.set(i,structuredClone(s));for(let i of r.entities){if(i.bits&ln){n.delete(i.number);continue}let s=i.number,a;r.delta&&this.entities.has(s)?a=this.entities.get(s):this.baselines.has(s)?a=this.baselines.get(s):a=de();let o=structuredClone(a);this.applyDelta(o,i),n.set(s,o)}this.entities=n}applyDelta(t,r){let n=r.bits;t.number=r.number,n&Wt&&(t.modelindex=r.modelindex),n&Xt&&(t.modelindex2=r.modelindex2),n&$t&&(t.modelindex3=r.modelindex3),n&Yt&&(t.modelindex4=r.modelindex4),n&Ut&&(t.frame=r.frame),n&Kt&&(t.frame=r.frame),(n&Ue||n&Ve)&&(t.skinnum=r.skinnum),(n&Be||n&He)&&(t.effects=r.effects),(n&Fe||n&Ge)&&(t.renderfx=r.renderfx),n&Ct&&(t.origin.x=r.origin.x),n&Dt&&(t.origin.y=r.origin.y),n&Ht&&(t.origin.z=r.origin.z),n&Vt&&(t.angles.x=r.angles.x),n&Ft&&(t.angles.y=r.angles.y),n&Bt&&(t.angles.z=r.angles.z),n&jt&&(t.old_origin.x=r.old_origin.x,t.old_origin.y=r.old_origin.y,t.old_origin.z=r.old_origin.z),n&qt&&(t.sound=r.sound),n&Gt&&(t.event=r.event),n&Zt&&(t.solid=r.solid)}onCenterPrint(t){this.callbacks?.onCenterPrint?this.callbacks.onCenterPrint(t):console.log(`[Center]: ${t}`)}onStuffText(t){}onPrint(t,r){this.callbacks?.onPrint?this.callbacks.onPrint(t,r):console.log(`[Print ${t}]: ${r}`)}onSound(t,r,n,i,s,a,o){if(!this.imports?.engine.audio)return;let c=n??1,u=i??1,l=s??0;a&&a>0?this.imports.engine.audio.sound(a,0,r,c,u,l):o&&this.imports.engine.audio.positioned_sound(o,r,c,u)}onTempEntity(t,r,n,i,s,a,o,c,u){}onLayout(t){}onInventory(t){this.inventory=[...t]}onMuzzleFlash(t,r){}onMuzzleFlash2(t,r){}onDisconnect(){console.log("Demo disconnected")}onReconnect(){console.log("Demo reconnect")}onDownload(t,r,n){}convertFrameToPredictionState(t){let r=t.playerState,n={ammo:{caps:[],counts:[]},ownedWeapons:new Set,armor:null,powerups:new Map,keys:new Set};for(let c=0;c<this.inventory.length;c++){let u=this.inventory[c];if(u<=0)continue;if(c>=Cr.length)break;let l=Cr[c];switch(l.type){case"weapon":n.ownedWeapons.add(l.id);break;case"ammo":n.ammo.counts[l.id]||(n.ammo.counts[l.id]=0),n.ammo.counts[l.id]=u;break;case"armor":n.armor={armorType:l.id,armorCount:u};break;case"powerup":n.powerups.set(l.id,u);break;case"key":n.keys.add(l.id);break;case"health":break}}let i={...r.origin},s={...r.velocity},a={...r.viewangles},o={...r.delta_angles};return{origin:i,velocity:s,viewangles:a,pmFlags:r.pm_flags,pmType:r.pm_type,waterlevel:ce.None,gravity:r.gravity,deltaAngles:o,client:{inventory:n,weaponStates:{states:new Map}},health:r.stats[1],armor:r.stats[4],ammo:r.stats[2],blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}getPredictionState(t){if(!this.latestFrame)return te();let r=this.convertFrameToPredictionState(this.latestFrame);if(this.previousFrame&&t!==void 0){let n=this.latestFrame.serverFrame*100,i=this.previousFrame.serverFrame*100;if(t>=i&&t<=n){let s=(t-i)/(n-i),a=this.convertFrameToPredictionState(this.previousFrame);return ge(a,r,Math.max(0,Math.min(1,s)))}}return r}};var be=class{constructor(){this.strings=new Map;this.models=[];this.sounds=[];this.images=[]}set(t,r){if(this.strings.set(t,r),t>=V.Models&&t<V.Models+nr){let n=t-V.Models;this.models[n]=r}else if(t>=V.Sounds&&t<V.Sounds+ir){let n=t-V.Sounds;this.sounds[n]=r}else if(t>=V.Images&&t<V.Images+sr){let n=t-V.Images;this.images[n]=r}}get(t){return this.strings.get(t)}getModelName(t){return this.models[t]}getSoundName(t){return this.sounds[t]}getImageName(t){return this.images[t]}clear(){this.strings.clear(),this.models.length=0,this.sounds.length=0,this.images.length=0}};var Il=[{code:"KeyW",command:"+forward"},{code:"ArrowUp",command:"+forward"},{code:"KeyS",command:"+back"},{code:"ArrowDown",command:"+back"},{code:"KeyA",command:"+moveleft"},{code:"KeyD",command:"+moveright"},{code:"Space",command:"+jump"},{code:"ControlLeft",command:"+crouch"},{code:"ShiftLeft",command:"+speed"},{code:"Mouse1",command:"+attack"},{code:"Mouse2",command:"+use"},{code:"Mouse3",command:"+zoom"},{code:"ArrowLeft",command:"+left"},{code:"ArrowRight",command:"+right"},{code:"PageUp",command:"+lookup"},{code:"PageDown",command:"+lookdown"},{code:"Gamepad0-Button7",command:"+attack"},{code:"Gamepad0-Button6",command:"+zoom"},{code:"Gamepad0-Button0",command:"+jump"},{code:"Gamepad0-Button1",command:"+crouch"},{code:"Gamepad0-Button2",command:"+use"},{code:"Gamepad0-Button4",command:"prevweapon"},{code:"Gamepad0-Button5",command:"nextweapon"},{code:"Digit1",command:"weapon 1"},{code:"Digit2",command:"weapon 2"},{code:"Digit3",command:"weapon 3"},{code:"Digit4",command:"weapon 4"},{code:"Digit5",command:"weapon 5"},{code:"Digit6",command:"weapon 6"},{code:"Digit7",command:"weapon 7"},{code:"Digit8",command:"weapon 8"},{code:"Digit9",command:"weapon 9"},{code:"Digit0",command:"weapon 10"}],ue=class{constructor(t=Il){this.bindings=new Map;for(let r of t)this.bind(r.code,r.command)}bind(t,r){this.bindings.set(t,r)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function mi(){return new ue}function Dr(e){return e}function Ie(e){return e.trim().toLowerCase()}var Cl=250,Fr=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,r){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=r,!0):!1)}release(t,r){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=r-this.downTime,this.downTime=0,!0):!1}sample(t,r){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let n=this.msec;this.activeCodes.size>0&&(n+=r-this.downTime,this.downTime=r),this.msec=0;let i=Math.min(n/t,1),s=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:s,fraction:i}}},bt=(y=>(y.Forward="+forward",y.Back="+back",y.MoveLeft="+moveleft",y.MoveRight="+moveright",y.MoveUp="+moveup",y.MoveDown="+movedown",y.Jump="+jump",y.Crouch="+crouch",y.Attack="+attack",y.Use="+use",y.Holster="+holster",y.TurnLeft="+left",y.TurnRight="+right",y.LookUp="+lookup",y.LookDown="+lookdown",y.SpeedModifier="+speed",y.Zoom="+zoom",y))(bt||{}),Dl={"+attack":q.Attack,"+use":q.Use,"+holster":q.Holster,"+jump":q.Jump,"+crouch":q.Crouch},Fl=new Map(Object.values(bt).map(e=>[Ie(e),e]));function Bl(e){return Fl.get(Ie(e))}function Ce(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var ze=class{constructor(t={},r=new ue){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=r,this.forwardSpeed=t.forwardSpeed??Sn,this.sideSpeed=t.sideSpeed??An,this.upSpeed=t.upSpeed??En,this.yawSpeed=t.yawSpeed??bn,this.pitchSpeed=t.pitchSpeed??zn,this.sensitivity=t.sensitivity??Ln,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,r=Ce()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!0,n,r)}handleKeyUp(t,r=Ce()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!1,n,r)}handleMouseButtonDown(t,r=Ce()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!0,n,r)}handleMouseButtonUp(t,r=Ce()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!1,n,r)}handleMouseMove(t,r){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+r})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,r=Ce(),n){this.pollGamepads(r),this.applyTouchState(r);let i=this.yawSpeed*t/1e3,s=this.pitchSpeed*t/1e3,a=this.sample("+left",t,r),o=this.sample("+right",t,r),c=this.sample("+lookup",t,r),l={x:(this.sample("+lookdown",t,r).fraction-c.fraction)*s,y:(o.fraction-a.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let T=this.gamepadLook.y*(this.invertGamepadY?-1:1);l={x:l.x+T*s*this.gamepadLookScale,y:l.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let T=this.touchLook.y*(this.invertMouseY?-1:1);l={x:l.x+T*s,y:l.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let T=this.sampleMouseDelta(),P=Tn(T,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});l={x:l.x+P.x,y:l.y+P.y,z:0}}let h=Rn(this.viewAngles,l);this.viewAngles=h;let d=this.sample("+forward",t,r),m=this.sample("+back",t,r),p=this.sample("+moveleft",t,r),g=this.sample("+moveright",t,r),f=this.sample("+moveup",t,r),y=this.sample("+movedown",t,r),S=this.sample("+speed",t,r),v=this.sample("+jump",t,r),_=this.sample("+crouch",t,r),x=this.runByDefault?S.active?.5:1:S.active?1:.5,w=this.forwardSpeed*(d.fraction-m.fraction)*x,z=this.sideSpeed*(g.fraction-p.fraction)*x,b=this.upSpeed*(f.fraction-y.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(w+=this.forwardSpeed*this.gamepadMove.y*x,z+=this.sideSpeed*this.gamepadMove.x*x),(this.touchMove.x!==0||this.touchMove.y!==0)&&(w+=this.forwardSpeed*this.touchMove.y*x,z+=this.sideSpeed*this.touchMove.x*x),this.jumpAddsUpMove&&v.fraction>0&&(b+=this.upSpeed*v.fraction),this.crouchAddsDownMove&&_.fraction>0&&(b-=this.upSpeed*_.fraction),w=this.clampMove(w,this.forwardSpeed),z=this.clampMove(z,this.sideSpeed),b=this.clampMove(b,this.upSpeed);let L=this.collectButtonBits(t,r),E=Math.min(Math.max(Math.round(t),1),Cl);return(this.anyPressed||L!==q.None)&&(L|=q.Any),this.anyPressed=!1,{msec:E,buttons:L,angles:{...this.viewAngles},forwardmove:w,sidemove:z,upmove:b,serverFrame:n}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let r=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let n=new Set;for(let i of r){if(!i||i.connected===!1)continue;let s=i.index??0,a=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(a[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(a[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(a[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(a[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let u=o[c];if(!u)continue;let l=u.pressed||u.value>this.gamepadDeadZone,h=this.gamepadButtonCode(s,c);l&&n.add(h);let d=this.gamepadButtons.get(h)??!1;l!==d&&(this.applyCommand(this.bindings.getBinding(h),l,h,t),this.gamepadButtons.set(h,l))}}for(let[i,s]of this.gamepadButtons.entries())s&&!n.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let r=this.pendingTouchState;if(r&&(this.pendingTouchState=void 0,r.move&&(this.touchMove={x:this.clampAnalog(r.move.x),y:this.clampAnalog(r.move.y)}),r.look&&(this.touchLook={x:this.clampAnalog(r.look.x),y:this.clampAnalog(r.look.y)}),r.buttons))for(let[n,i]of Object.entries(r.buttons)){if(i===void 0)continue;let s=this.touchButtons.get(n)??!1;i!==s&&(this.applyCommand(n,i,this.touchButtonCode(n),t),this.touchButtons.set(n,i))}}applyCommand(t,r,n,i){if(!t)return;let s=Bl(t);if(s){let a=this.lookupButton(s);r?(a.press(n,i)&&this.commandQueue.push(s),this.anyPressed=!0):a.release(n,i)&&this.commandQueue.push(s.replace("+","-"))}else r&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let r={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,r}collectButtonBits(t,r){let n=q.None;for(let[i,s]of Object.entries(Dl)){let a=this.sample(i,t,r);(a.fraction>0||a.active||a.wasPressed)&&(n|=s)}return n}lookupButton(t){let r=this.buttons.get(t);return r||(r=new Fr,this.buttons.set(t,r)),r}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,r,n){return this.lookupButton(t).sample(r,n)}gamepadButtonCode(t,r){return`Gamepad${t}-Button${r}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,r){return Math.abs(r)>Math.abs(t)?r:t}clampMove(t,r){return Math.max(-r,Math.min(r,t))}};var zt=class{constructor(t,r=new ze(t)){this.queued=[];this.controller=r}captureFrame(t,r,n){let i=this.controller.buildCommand(t,r,n),s=this.controller.consumeConsoleCommands(),a={command:i,console:s};return this.queued.push(a),a}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function Ul(e){let t=new pe(e.engine.trace),r=new ye,n=new At,i=new un,s=new Et(e);s.onCenterPrint=d=>n.addCenterPrint(d,s.latestFrame?.serverFrame??0),s.onPrint=(d,m)=>n.addNotify(m,s.latestFrame?.serverFrame??0);let a=new be;i.setHandler(s);let o,c,u,l;return e.host?.commands&&(e.host.commands.register("playdemo",d=>{if(d.length<1){console.log("usage: playdemo <filename>");return}let m=d[0];console.log(`playdemo: ${m}`),console.log("Note: Demo loading requires VFS access which is not yet fully integrated into this console command.")},"Play a recorded demo"),e.host.commands.register("crosshair",()=>{let d=Mn();console.log(`Crosshair changed to index ${d}`)},"Cycle through available crosshairs")),{init(d){this.Init(d)},Init(d){o=d,d?.state&&t.setAuthoritative(d),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(d){return t.enqueueCommand(d)},render(d){i.getState()===ke.Playing?c=s.getPredictionState():(d.latest?.state&&(t.setAuthoritative(d.latest),o=d.latest),d.previous?.state&&d.latest?.state?c=ge(d.previous.state,d.latest.state,d.alpha):c=d.latest?.state??d.previous?.state??t.getPredictedState());let p=d.latest&&d.previous?Math.max(0,d.latest.timeMs-d.previous.timeMs):0;if(u=r.sample(c,p),c){let{origin:f,viewangles:y}=c;l=new cn,l.position=O.fromValues(f.x,f.y,f.z),l.angles=O.fromValues(y.x,y.y,y.z),l.fov=90,l.aspect=4/3}let g={};if(e.engine.renderer&&c&&c.client){let f={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},y=d.latest?.timeMs??0;this.DrawHUD(f,y)}return g},DrawHUD(d,m){if(!e.engine.renderer||!c||!c.client)return;let p={origin:c.origin,velocity:c.velocity,viewAngles:c.viewangles,onGround:j(c.pmFlags,W.OnGround),waterLevel:c.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:c.damageAlpha??0,damageIndicators:c.damageIndicators??[],blend:c.blend??[0,0,0,0],pickupIcon:c.pickupIcon},g=i.getState(),f=g===ke.Playing||g===ke.Paused?(s.latestFrame?.serverFrame||0)*100:m;hi(e.engine.renderer,p,c.client,c.health,c.armor,c.ammo,d,n,f)},shutdown(){this.Shutdown()},Shutdown(){o=void 0,c=void 0},get prediction(){return t},get lastRendered(){return c},get view(){return r},get lastView(){return u},get camera(){return l},demoPlayback:i,ParseCenterPrint(d){let m=o?.timeMs??0;n.addCenterPrint(d,m)},ParseNotify(d){let m=o?.timeMs??0;n.addNotify(d,m)},ParseConfigString(d,m){a.set(d,m)},demoHandler:s,configStrings:a}}return vi(Gl);})();
|
|
1
|
+
"use strict";var Quake2Client=(()=>{var Ot=Object.defineProperty;var Ei=Object.getOwnPropertyDescriptor;var bi=Object.getOwnPropertyNames;var zi=Object.prototype.hasOwnProperty;var It=(e,t)=>{for(var r in t)Ot(e,r,{get:t[r],enumerable:!0})},Li=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of bi(t))!zi.call(e,i)&&i!==r&&Ot(e,i,{get:()=>t[i],enumerable:!(n=Ei(t,i))||n.enumerable});return e};var Ri=e=>Li(Ot({},"__esModule",{value:!0}),e);var gu={};It(gu,{ClientConfigStrings:()=>be,ClientPrediction:()=>ge,InputAction:()=>Pt,InputBindings:()=>de,InputCommandBuffer:()=>Nt,InputController:()=>ze,ViewEffects:()=>ve,createClient:()=>pu,createDefaultBindings:()=>Ai,defaultPredictionState:()=>te,interpolatePredictionState:()=>ye,normalizeCommand:()=>Be,normalizeInputCode:()=>Vr});var T=1e-6,H=typeof Float32Array<"u"?Float32Array:Array,Ct=Math.random;function Ge(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var vu=Math.PI/180,xu=180/Math.PI;var D={};It(D,{add:()=>ms,adjoint:()=>Ci,clone:()=>Ti,copy:()=>Mi,create:()=>ki,decompose:()=>Qi,determinant:()=>Di,equals:()=>ys,exactEquals:()=>gs,frob:()=>hs,fromQuat:()=>rs,fromQuat2:()=>qi,fromRotation:()=>Xi,fromRotationTranslation:()=>qr,fromRotationTranslationScale:()=>es,fromRotationTranslationScaleOrigin:()=>ts,fromScaling:()=>Ki,fromTranslation:()=>Wi,fromValues:()=>Pi,fromXRotation:()=>$i,fromYRotation:()=>Yi,fromZRotation:()=>ji,frustum:()=>ns,getRotation:()=>Ji,getScaling:()=>Zr,getTranslation:()=>Zi,identity:()=>Yr,invert:()=>Ii,lookAt:()=>ls,mul:()=>vs,multiply:()=>jr,multiplyScalar:()=>fs,multiplyScalarAndAdd:()=>ps,ortho:()=>os,orthoNO:()=>Qr,orthoZO:()=>cs,perspective:()=>is,perspectiveFromFieldOfView:()=>as,perspectiveNO:()=>Jr,perspectiveZO:()=>ss,rotate:()=>Ui,rotateX:()=>Gi,rotateY:()=>Hi,rotateZ:()=>Vi,scale:()=>Bi,set:()=>Ni,str:()=>ds,sub:()=>xs,subtract:()=>en,targetTo:()=>us,translate:()=>Fi,transpose:()=>Oi});function ki(){var e=new H(16);return H!=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 Ti(e){var t=new H(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 Mi(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 Pi(e,t,r,n,i,s,a,o,c,u,l,h,d,m,p,g){var f=new H(16);return f[0]=e,f[1]=t,f[2]=r,f[3]=n,f[4]=i,f[5]=s,f[6]=a,f[7]=o,f[8]=c,f[9]=u,f[10]=l,f[11]=h,f[12]=d,f[13]=m,f[14]=p,f[15]=g,f}function Ni(e,t,r,n,i,s,a,o,c,u,l,h,d,m,p,g,f){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=a,e[6]=o,e[7]=c,e[8]=u,e[9]=l,e[10]=h,e[11]=d,e[12]=m,e[13]=p,e[14]=g,e[15]=f,e}function Yr(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 Oi(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 Ii(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],u=t[7],l=t[8],h=t[9],d=t[10],m=t[11],p=t[12],g=t[13],f=t[14],y=t[15],S=r*o-n*a,v=r*c-i*a,_=r*u-s*a,x=n*c-i*o,w=n*u-s*o,z=i*u-s*c,b=l*g-h*p,L=l*f-d*p,E=l*y-m*p,k=h*f-d*g,P=h*y-m*g,I=d*y-m*f,R=S*I-v*P+_*k+x*E-w*L+z*b;return R?(R=1/R,e[0]=(o*I-c*P+u*k)*R,e[1]=(i*P-n*I-s*k)*R,e[2]=(g*z-f*w+y*x)*R,e[3]=(d*w-h*z-m*x)*R,e[4]=(c*E-a*I-u*L)*R,e[5]=(r*I-i*E+s*L)*R,e[6]=(f*_-p*z-y*v)*R,e[7]=(l*z-d*_+m*v)*R,e[8]=(a*P-o*E+u*b)*R,e[9]=(n*E-r*P-s*b)*R,e[10]=(p*w-g*_+y*S)*R,e[11]=(h*_-l*w-m*S)*R,e[12]=(o*L-a*k-c*b)*R,e[13]=(r*k-n*L+i*b)*R,e[14]=(g*v-p*x-f*S)*R,e[15]=(l*x-h*v+d*S)*R,e):null}function Ci(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],u=t[7],l=t[8],h=t[9],d=t[10],m=t[11],p=t[12],g=t[13],f=t[14],y=t[15],S=r*o-n*a,v=r*c-i*a,_=r*u-s*a,x=n*c-i*o,w=n*u-s*o,z=i*u-s*c,b=l*g-h*p,L=l*f-d*p,E=l*y-m*p,k=h*f-d*g,P=h*y-m*g,I=d*y-m*f;return e[0]=o*I-c*P+u*k,e[1]=i*P-n*I-s*k,e[2]=g*z-f*w+y*x,e[3]=d*w-h*z-m*x,e[4]=c*E-a*I-u*L,e[5]=r*I-i*E+s*L,e[6]=f*_-p*z-y*v,e[7]=l*z-d*_+m*v,e[8]=a*P-o*E+u*b,e[9]=n*E-r*P-s*b,e[10]=p*w-g*_+y*S,e[11]=h*_-l*w-m*S,e[12]=o*L-a*k-c*b,e[13]=r*k-n*L+i*b,e[14]=g*v-p*x-f*S,e[15]=l*x-h*v+d*S,e}function Di(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],a=e[5],o=e[6],c=e[7],u=e[8],l=e[9],h=e[10],d=e[11],m=e[12],p=e[13],g=e[14],f=e[15],y=t*a-r*s,S=t*o-n*s,v=r*o-n*a,_=u*p-l*m,x=u*g-h*m,w=l*g-h*p,z=t*w-r*x+n*_,b=s*w-a*x+o*_,L=u*v-l*S+h*y,E=m*v-p*S+g*y;return c*z-i*b+f*L-d*E}function jr(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],u=t[6],l=t[7],h=t[8],d=t[9],m=t[10],p=t[11],g=t[12],f=t[13],y=t[14],S=t[15],v=r[0],_=r[1],x=r[2],w=r[3];return e[0]=v*n+_*o+x*h+w*g,e[1]=v*i+_*c+x*d+w*f,e[2]=v*s+_*u+x*m+w*y,e[3]=v*a+_*l+x*p+w*S,v=r[4],_=r[5],x=r[6],w=r[7],e[4]=v*n+_*o+x*h+w*g,e[5]=v*i+_*c+x*d+w*f,e[6]=v*s+_*u+x*m+w*y,e[7]=v*a+_*l+x*p+w*S,v=r[8],_=r[9],x=r[10],w=r[11],e[8]=v*n+_*o+x*h+w*g,e[9]=v*i+_*c+x*d+w*f,e[10]=v*s+_*u+x*m+w*y,e[11]=v*a+_*l+x*p+w*S,v=r[12],_=r[13],x=r[14],w=r[15],e[12]=v*n+_*o+x*h+w*g,e[13]=v*i+_*c+x*d+w*f,e[14]=v*s+_*u+x*m+w*y,e[15]=v*a+_*l+x*p+w*S,e}function Fi(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,u,l,h,d,m,p,g,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],u=t[3],l=t[4],h=t[5],d=t[6],m=t[7],p=t[8],g=t[9],f=t[10],y=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=u,e[4]=l,e[5]=h,e[6]=d,e[7]=m,e[8]=p,e[9]=g,e[10]=f,e[11]=y,e[12]=a*n+l*i+p*s+t[12],e[13]=o*n+h*i+g*s+t[13],e[14]=c*n+d*i+f*s+t[14],e[15]=u*n+m*i+y*s+t[15]),e}function Bi(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 Ui(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,u,l,h,d,m,p,g,f,y,S,v,_,x,w,z,b,L,E,k,P,I,R,X;return o<T?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),u=Math.cos(r),l=1-u,h=t[0],d=t[1],m=t[2],p=t[3],g=t[4],f=t[5],y=t[6],S=t[7],v=t[8],_=t[9],x=t[10],w=t[11],z=i*i*l+u,b=s*i*l+a*c,L=a*i*l-s*c,E=i*s*l-a*c,k=s*s*l+u,P=a*s*l+i*c,I=i*a*l+s*c,R=s*a*l-i*c,X=a*a*l+u,e[0]=h*z+g*b+v*L,e[1]=d*z+f*b+_*L,e[2]=m*z+y*b+x*L,e[3]=p*z+S*b+w*L,e[4]=h*E+g*k+v*P,e[5]=d*E+f*k+_*P,e[6]=m*E+y*k+x*P,e[7]=p*E+S*k+w*P,e[8]=h*I+g*R+v*X,e[9]=d*I+f*R+_*X,e[10]=m*I+y*R+x*X,e[11]=p*I+S*R+w*X,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Gi(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],u=t[8],l=t[9],h=t[10],d=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+u*n,e[5]=a*i+l*n,e[6]=o*i+h*n,e[7]=c*i+d*n,e[8]=u*i-s*n,e[9]=l*i-a*n,e[10]=h*i-o*n,e[11]=d*i-c*n,e}function Hi(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],u=t[8],l=t[9],h=t[10],d=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-u*n,e[1]=a*i-l*n,e[2]=o*i-h*n,e[3]=c*i-d*n,e[8]=s*n+u*i,e[9]=a*n+l*i,e[10]=o*n+h*i,e[11]=c*n+d*i,e}function Vi(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],u=t[4],l=t[5],h=t[6],d=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i+u*n,e[1]=a*i+l*n,e[2]=o*i+h*n,e[3]=c*i+d*n,e[4]=u*i-s*n,e[5]=l*i-a*n,e[6]=h*i-o*n,e[7]=d*i-c*n,e}function Wi(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 Ki(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 Xi(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,u;return a<T?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),u=1-c,e[0]=n*n*u+c,e[1]=i*n*u+s*o,e[2]=s*n*u-i*o,e[3]=0,e[4]=n*i*u-s*o,e[5]=i*i*u+c,e[6]=s*i*u+n*o,e[7]=0,e[8]=n*s*u+i*o,e[9]=i*s*u-n*o,e[10]=s*s*u+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function $i(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 Yi(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 ji(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 qr(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,u=s+s,l=n*o,h=n*c,d=n*u,m=i*c,p=i*u,g=s*u,f=a*o,y=a*c,S=a*u;return e[0]=1-(m+g),e[1]=h+S,e[2]=d-y,e[3]=0,e[4]=h-S,e[5]=1-(l+g),e[6]=p+f,e[7]=0,e[8]=d+y,e[9]=p-f,e[10]=1-(l+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function qi(e,t){var r=new H(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],u=t[6],l=t[7],h=n*n+i*i+s*s+a*a;return h>0?(r[0]=(o*a+l*n+c*s-u*i)*2/h,r[1]=(c*a+l*i+u*n-o*s)*2/h,r[2]=(u*a+l*s+o*i-c*n)*2/h):(r[0]=(o*a+l*n+c*s-u*i)*2,r[1]=(c*a+l*i+u*n-o*s)*2,r[2]=(u*a+l*s+o*i-c*n)*2),qr(e,t,r),e}function Zi(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Zr(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],a=t[5],o=t[6],c=t[8],u=t[9],l=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+a*a+o*o),e[2]=Math.sqrt(c*c+u*u+l*l),e}function Ji(e,t){var r=new H(3);Zr(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],a=t[0]*n,o=t[1]*i,c=t[2]*s,u=t[4]*n,l=t[5]*i,h=t[6]*s,d=t[8]*n,m=t[9]*i,p=t[10]*s,g=a+l+p,f=0;return g>0?(f=Math.sqrt(g+1)*2,e[3]=.25*f,e[0]=(h-m)/f,e[1]=(d-c)/f,e[2]=(o-u)/f):a>l&&a>p?(f=Math.sqrt(1+a-l-p)*2,e[3]=(h-m)/f,e[0]=.25*f,e[1]=(o+u)/f,e[2]=(d+c)/f):l>p?(f=Math.sqrt(1+l-a-p)*2,e[3]=(d-c)/f,e[0]=(o+u)/f,e[1]=.25*f,e[2]=(h+m)/f):(f=Math.sqrt(1+p-a-l)*2,e[3]=(o-u)/f,e[0]=(d+c)/f,e[1]=(h+m)/f,e[2]=.25*f),e}function Qi(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],c=n[5],u=n[6],l=n[8],h=n[9],d=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+u*u),r[2]=Math.sqrt(l*l+h*h+d*d);var m=1/r[0],p=1/r[1],g=1/r[2],f=i*m,y=s*p,S=a*g,v=o*m,_=c*p,x=u*g,w=l*m,z=h*p,b=d*g,L=f+_+b,E=0;return L>0?(E=Math.sqrt(L+1)*2,e[3]=.25*E,e[0]=(x-z)/E,e[1]=(w-S)/E,e[2]=(y-v)/E):f>_&&f>b?(E=Math.sqrt(1+f-_-b)*2,e[3]=(x-z)/E,e[0]=.25*E,e[1]=(y+v)/E,e[2]=(w+S)/E):_>b?(E=Math.sqrt(1+_-f-b)*2,e[3]=(w-S)/E,e[0]=(y+v)/E,e[1]=.25*E,e[2]=(x+z)/E):(E=Math.sqrt(1+b-f-_)*2,e[3]=(y-v)/E,e[0]=(w+S)/E,e[1]=(x+z)/E,e[2]=.25*E),e}function es(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,u=s+s,l=a+a,h=i*c,d=i*u,m=i*l,p=s*u,g=s*l,f=a*l,y=o*c,S=o*u,v=o*l,_=n[0],x=n[1],w=n[2];return e[0]=(1-(p+f))*_,e[1]=(d+v)*_,e[2]=(m-S)*_,e[3]=0,e[4]=(d-v)*x,e[5]=(1-(h+f))*x,e[6]=(g+y)*x,e[7]=0,e[8]=(m+S)*w,e[9]=(g-y)*w,e[10]=(1-(h+p))*w,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function ts(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],u=s+s,l=a+a,h=o+o,d=s*u,m=s*l,p=s*h,g=a*l,f=a*h,y=o*h,S=c*u,v=c*l,_=c*h,x=n[0],w=n[1],z=n[2],b=i[0],L=i[1],E=i[2],k=(1-(g+y))*x,P=(m+_)*x,I=(p-v)*x,R=(m-_)*w,X=(1-(d+y))*w,Le=(f+S)*w,Re=(p+v)*z,Kr=(f-S)*z,Xr=(1-(d+g))*z;return e[0]=k,e[1]=P,e[2]=I,e[3]=0,e[4]=R,e[5]=X,e[6]=Le,e[7]=0,e[8]=Re,e[9]=Kr,e[10]=Xr,e[11]=0,e[12]=r[0]+b-(k*b+R*L+Re*E),e[13]=r[1]+L-(P*b+X*L+Kr*E),e[14]=r[2]+E-(I*b+Le*L+Xr*E),e[15]=1,e}function rs(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,u=r*a,l=n*a,h=n*o,d=i*a,m=i*o,p=i*c,g=s*a,f=s*o,y=s*c;return e[0]=1-h-p,e[1]=l+y,e[2]=d-f,e[3]=0,e[4]=l-y,e[5]=1-u-p,e[6]=m+g,e[7]=0,e[8]=d+f,e[9]=m-g,e[10]=1-u-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ns(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),u=1/(s-a);return e[0]=s*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(r+t)*o,e[9]=(i+n)*c,e[10]=(a+s)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*u,e[15]=0,e}function Jr(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 is=Jr;function ss(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 as(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),a=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(a+o),u=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=u,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*u*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function Qr(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),u=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*u,e[15]=1,e}var os=Qr;function cs(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),u=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=u,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*u,e[15]=1,e}function ls(e,t,r,n){var i,s,a,o,c,u,l,h,d,m,p=t[0],g=t[1],f=t[2],y=n[0],S=n[1],v=n[2],_=r[0],x=r[1],w=r[2];return Math.abs(p-_)<T&&Math.abs(g-x)<T&&Math.abs(f-w)<T?Yr(e):(l=p-_,h=g-x,d=f-w,m=1/Math.sqrt(l*l+h*h+d*d),l*=m,h*=m,d*=m,i=S*d-v*h,s=v*l-y*d,a=y*h-S*l,m=Math.sqrt(i*i+s*s+a*a),m?(m=1/m,i*=m,s*=m,a*=m):(i=0,s=0,a=0),o=h*a-d*s,c=d*i-l*a,u=l*s-h*i,m=Math.sqrt(o*o+c*c+u*u),m?(m=1/m,o*=m,c*=m,u*=m):(o=0,c=0,u=0),e[0]=i,e[1]=o,e[2]=l,e[3]=0,e[4]=s,e[5]=c,e[6]=h,e[7]=0,e[8]=a,e[9]=u,e[10]=d,e[11]=0,e[12]=-(i*p+s*g+a*f),e[13]=-(o*p+c*g+u*f),e[14]=-(l*p+h*g+d*f),e[15]=1,e)}function us(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],u=n[2],l=i-r[0],h=s-r[1],d=a-r[2],m=l*l+h*h+d*d;m>0&&(m=1/Math.sqrt(m),l*=m,h*=m,d*=m);var p=c*d-u*h,g=u*l-o*d,f=o*h-c*l;return m=p*p+g*g+f*f,m>0&&(m=1/Math.sqrt(m),p*=m,g*=m,f*=m),e[0]=p,e[1]=g,e[2]=f,e[3]=0,e[4]=h*f-d*g,e[5]=d*p-l*f,e[6]=l*g-h*p,e[7]=0,e[8]=l,e[9]=h,e[10]=d,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function ds(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 hs(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 ms(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 en(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 fs(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 ps(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 gs(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 ys(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],u=e[7],l=e[8],h=e[9],d=e[10],m=e[11],p=e[12],g=e[13],f=e[14],y=e[15],S=t[0],v=t[1],_=t[2],x=t[3],w=t[4],z=t[5],b=t[6],L=t[7],E=t[8],k=t[9],P=t[10],I=t[11],R=t[12],X=t[13],Le=t[14],Re=t[15];return Math.abs(r-S)<=T*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(n-v)<=T*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(i-_)<=T*Math.max(1,Math.abs(i),Math.abs(_))&&Math.abs(s-x)<=T*Math.max(1,Math.abs(s),Math.abs(x))&&Math.abs(a-w)<=T*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(o-z)<=T*Math.max(1,Math.abs(o),Math.abs(z))&&Math.abs(c-b)<=T*Math.max(1,Math.abs(c),Math.abs(b))&&Math.abs(u-L)<=T*Math.max(1,Math.abs(u),Math.abs(L))&&Math.abs(l-E)<=T*Math.max(1,Math.abs(l),Math.abs(E))&&Math.abs(h-k)<=T*Math.max(1,Math.abs(h),Math.abs(k))&&Math.abs(d-P)<=T*Math.max(1,Math.abs(d),Math.abs(P))&&Math.abs(m-I)<=T*Math.max(1,Math.abs(m),Math.abs(I))&&Math.abs(p-R)<=T*Math.max(1,Math.abs(p),Math.abs(R))&&Math.abs(g-X)<=T*Math.max(1,Math.abs(g),Math.abs(X))&&Math.abs(f-Le)<=T*Math.max(1,Math.abs(f),Math.abs(Le))&&Math.abs(y-Re)<=T*Math.max(1,Math.abs(y),Math.abs(Re))}var vs=jr,xs=en;var O={};It(O,{add:()=>Es,angle:()=>$s,bezier:()=>Bs,ceil:()=>bs,clone:()=>_s,copy:()=>Ss,create:()=>tn,cross:()=>Is,dist:()=>ta,distance:()=>on,div:()=>ea,divide:()=>an,dot:()=>Dt,equals:()=>Zs,exactEquals:()=>qs,floor:()=>zs,forEach:()=>sa,fromValues:()=>ws,hermite:()=>Fs,inverse:()=>Ns,len:()=>na,length:()=>rn,lerp:()=>Cs,max:()=>Rs,min:()=>Ls,mul:()=>Qs,multiply:()=>sn,negate:()=>Ps,normalize:()=>Os,random:()=>Us,rotateX:()=>Ws,rotateY:()=>Ks,rotateZ:()=>Xs,round:()=>ks,scale:()=>Ts,scaleAndAdd:()=>Ms,set:()=>As,slerp:()=>Ds,sqrDist:()=>ra,sqrLen:()=>ia,squaredDistance:()=>cn,squaredLength:()=>ln,str:()=>js,sub:()=>Js,subtract:()=>nn,transformMat3:()=>Hs,transformMat4:()=>Gs,transformQuat:()=>Vs,zero:()=>Ys});function tn(){var e=new H(3);return H!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function _s(e){var t=new H(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function rn(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function ws(e,t,r){var n=new H(3);return n[0]=e,n[1]=t,n[2]=r,n}function Ss(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function As(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function Es(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function nn(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function sn(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],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 bs(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function zs(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Ls(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 Rs(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 ks(e,t){return e[0]=Ge(t[0]),e[1]=Ge(t[1]),e[2]=Ge(t[2]),e}function Ts(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function Ms(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 on(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 cn(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 ln(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function Ps(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Ns(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Os(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 Dt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Is(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 Cs(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 Ds(e,t,r,n){var i=Math.acos(Math.min(Math.max(Dt(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 Fs(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,u=a*(s-1),l=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*u+i[0]*l,e[1]=t[1]*o+r[1]*c+n[1]*u+i[1]*l,e[2]=t[2]*o+r[2]*c+n[2]*u+i[2]*l,e}function Bs(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,u=o*a,l=3*s*o,h=3*c*a,d=c*s;return e[0]=t[0]*u+r[0]*l+n[0]*h+i[0]*d,e[1]=t[1]*u+r[1]*l+n[1]*h+i[1]*d,e[2]=t[2]*u+r[2]*l+n[2]*h+i[2]*d,e}function Us(e,t){t=t===void 0?1:t;var r=Ct()*2*Math.PI,n=Ct()*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 Gs(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 Hs(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 Vs(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],u=t[2],l=i*u-s*c,h=s*o-n*u,d=n*c-i*o;return l=l+l,h=h+h,d=d+d,e[0]=o+a*l+i*d-s*h,e[1]=c+a*h+s*l-n*d,e[2]=u+a*d+n*h-i*l,e}function Ws(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 Ks(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 Xs(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 $s(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2],c=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),u=c&&Dt(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function Ys(e){return e[0]=0,e[1]=0,e[2]=0,e}function js(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function qs(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Zs(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)<=T*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=T*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=T*Math.max(1,Math.abs(i),Math.abs(o))}var Js=nn,Qs=sn,ea=an,ta=on,ra=cn,na=rn,ia=ln,sa=(function(){var e=tn();return function(t,r,n,i,s,a){var o,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,t.length):c=t.length,o=n;o<c;o+=r)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],s(e,e,a),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var aa=Object.defineProperty,oa=(e,t)=>{for(var r in t)aa(e,r,{get:t[r],enumerable:!0})};var wu=Math.PI/180;var ca=Math.PI/180,Su=180/Math.PI,ke=ca;var $=1,se=2;var Gt=8,Ht=16,la=32;var ua=16384;var Ye=65536,dn=1<<17,da=1<<18,ha=1<<19,ma=1<<20,fa=1<<21,pa=1<<22,ga=1<<23,Au=1<<24,je=1<<25,ya=1<<26,Eu=1<<27,bu=1<<28,zu=1<<29,qe=1<<30,Lu=1<<31;var Ru=1<<25,ku=1<<28,Tu=1<<29,Mu=1<<30,Pu=1<<31,Nu=$|se,Ou=$|Ye|se|je|qe,Iu=$|Ye|se,Cu=$|dn|se|je|qe,Du=la|Gt|Ht,Fu=$|Ht|Gt,va=$|je|qe|se|ya,Bu=da|ha|ma|fa|pa|ga,Uu=$|Gt|Ht|je|qe,Gu=$|Ye|se,Hu=$|se,Vu=$|Ye|se|dn,Wu=va|ua,Ku=Number.MAX_SAFE_INTEGER-1;var hn=256,xa=256,_a=8192,wa=2048,Sa=512,Aa=256,Ea=hn*2,ba=256,Ft=32;var mn=(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+_a]="Sounds",e[e.Images=e.Sounds+wa]="Images",e[e.Lights=e.Images+Sa]="Lights",e[e.ShadowLights=e.Lights+xa]="ShadowLights",e[e.Items=e.ShadowLights+ba]="Items",e[e.PlayerSkins=e.Items+Aa]="PlayerSkins",e[e.General=e.PlayerSkins+hn]="General",e[e.WheelWeapons=e.General+Ea]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ft]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ft]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ft]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(mn||{}),Xu=mn.MaxConfigStrings;var za={};oa(za,{addReplayFrame:()=>Ta,createReplaySession:()=>ka,deserializeReplay:()=>Ra,serializeReplay:()=>La});function La(e){return JSON.stringify(e,null,2)}function Ra(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function ka(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Ta(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var N=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(N||{}),A=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(A||{}),Ma=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}hasMore(){return this.offset<this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){if(this.readByte()>=162){e.x=0,e.y=0,e.z=0;return}e.x=0,e.y=0,e.z=0}};function Pa(){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 $u=Pa();var Yu=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 Na=19,ju=8+Na*8;var Ut=4,Bt=7*Ut,qu=[{index:0,size:3,type:5126,stride:Bt,offset:0},{index:1,size:2,type:5126,stride:Bt,offset:3*Ut},{index:2,size:2,type:5126,stride:Bt,offset:5*Ut}];var Zu=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]);var fn=class{constructor(){this._position=O.create(),this._angles=O.create(),this._bobAngles=O.create(),this._bobOffset=O.create(),this._kickAngles=O.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=D.create(),this._projectionMatrix=D.create(),this._viewProjectionMatrix=D.create(),this._dirty=!0}get position(){return this._position}set position(e){O.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){O.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){O.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){O.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){O.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let t=D.create();return D.perspective(t,e*ke,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;D.perspective(this._projectionMatrix,this._fov*ke,this._aspect,this._near,this._far);let e=D.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],r=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],n=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*ke,s=r*ke,a=n*ke,o=D.create();D.identity(o),D.rotateZ(o,o,-s),D.rotateY(o,o,-i),D.rotateX(o,o,-a);let c=D.create();D.multiply(c,e,o);let u=O.add(O.create(),this._position,this._bobOffset),l=O.negate(O.create(),u),h=O.create();O.transformMat4(h,l,o);let d=O.fromValues(h[1]||0,h[2]||0,h[0]||0);D.copy(this._viewMatrix,c),this._viewMatrix[12]=d[0],this._viewMatrix[13]=d[1],this._viewMatrix[14]=d[2],D.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Oa=class{constructor(e){this.buffer=e,this.view=new DataView(e),this.offset=0}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(this.offset+=4,e<0||e>262144)return console.warn(`DemoReader: Invalid block length ${e} at offset ${this.offset-4}`),null;if(this.offset+e>this.buffer.byteLength)return console.warn(`DemoReader: Incomplete block. Expected ${e} bytes, but only ${this.buffer.byteLength-this.offset} remain.`),null;let t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new Ma(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Vt=1,Wt=2,Kt=4,Xt=8,$t=16,Yt=32,pn=64,Ia=128,Ca=256,jt=512,qt=1024,Zt=2048,He=4096,Ve=16384,Da=32768,We=65536,Jt=1<<17,Ke=1<<18,Xe=1<<19,Qt=1<<20,er=1<<21,tr=1<<22,Fa=1<<23,rr=1<<24,$e=1<<25,nr=1<<26,ir=1<<27,he=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0,bits:0}),un=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0)}),Ba=class{constructor(e,t){this.stream=e,this.handler=t}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;switch(e){case N.nop:break;case N.disconnect:this.handler?this.handler.onDisconnect():console.log("Server disconnected");break;case N.reconnect:this.handler?this.handler.onReconnect():console.log("Server reconnect");break;case N.print:let t=this.stream.readByte(),r=this.stream.readString();this.handler?this.handler.onPrint(t,r):console.log(`[Server Print ${t}]: ${r}`);break;case N.serverdata:this.parseServerData();break;case N.configstring:this.parseConfigString();break;case N.spawnbaseline:this.parseSpawnBaseline();break;case N.centerprint:let n=this.stream.readString();this.handler?this.handler.onCenterPrint(n):console.log(`[Center Print]: ${n}`);break;case N.download:this.parseDownload();break;case N.frame:this.parseFrame();break;case N.packetentities:this.parsePacketEntities(!1);break;case N.deltapacketentities:this.parsePacketEntities(!0);break;case N.stufftext:let i=this.stream.readString();this.handler?this.handler.onStuffText(i):console.log(`[StuffText]: ${i}`);break;case N.layout:let s=this.stream.readString();this.handler&&this.handler.onLayout(s);break;case N.inventory:this.parseInventory();break;case N.sound:this.parseSound();break;case N.muzzleflash:this.parseMuzzleFlash();break;case N.muzzleflash2:this.parseMuzzleFlash2();break;case N.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${e}`);return}}}parseServerData(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler?this.handler.onServerData(e,t,r,n,i,s):console.log(`Server Data: Protocol ${e}, Level ${s}, GameDir ${n}`)}parseConfigString(){let e=this.stream.readShort(),t=this.stream.readString();this.handler&&this.handler.onConfigString(e,t)}parseDownload(){let e=this.stream.readShort(),t=this.stream.readByte(),r;e>0&&(r=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,t,r)}parseInventory(){let t=new Array(256);for(let r=0;r<256;r++)t[r]=this.stream.readShort();this.handler&&this.handler.onInventory(t)}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte(),r,n,i,s,a;if(e&1&&(r=this.stream.readByte()),e&2&&(n=this.stream.readByte()),e&16&&(i=this.stream.readByte()),e&8&&(s=this.stream.readShort()),e&4){let o={x:0,y:0,z:0};this.stream.readPos(o),a=o}this.handler&&this.handler.onSound(e,t,r,n,i,s,a)}parseMuzzleFlash(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,t)}parseMuzzleFlash2(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,t)}parseTempEntity(){let e=this.stream.readByte(),t={x:0,y:0,z:0},r={x:0,y:0,z:0},n={x:0,y:0,z:0},i,s,a,o,c;switch(e){case A.BLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.GUNSHOT:case A.SPARKS:case A.BULLET_SPARKS:case A.SCREEN_SPARKS:case A.SHIELD_SPARKS:case A.SHOTGUN:this.stream.readPos(t),this.stream.readDir(n);break;case A.SPLASH:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.LASER_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLUEHYPERBLASTER:this.stream.readPos(t),this.stream.readPos(n);break;case A.BLASTER:this.stream.readPos(t),this.stream.readDir(n);break;case A.RAILTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.EXPLOSION2:case A.GRENADE_EXPLOSION:case A.GRENADE_EXPLOSION_WATER:case A.PLASMA_EXPLOSION:case A.EXPLOSION1:case A.EXPLOSION1_BIG:case A.ROCKET_EXPLOSION:case A.ROCKET_EXPLOSION_WATER:case A.EXPLOSION1_NP:case A.BFG_EXPLOSION:case A.BFG_BIGEXPLOSION:this.stream.readPos(t);break;case A.BFG_LASER:this.stream.readPos(t),this.stream.readPos(r);break;case A.BUBBLETRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PARASITE_ATTACK:case A.MEDIC_CABLE_ATTACK:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.BOSSTPORT:this.stream.readPos(t);break;case A.GRAPPLE_CABLE:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.WELDING_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.GREENBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLASTER2:case A.FLECHETTE:this.stream.readPos(t),this.stream.readDir(n);break;case A.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.DEBUGTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PLAIN_EXPLOSION:this.stream.readPos(t);break;case A.FLASHLIGHT:this.stream.readPos(t),a=this.stream.readShort();break;case A.FORCEWALL:this.stream.readPos(t),this.stream.readPos(r),s=this.stream.readByte();break;case A.HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.MONSTER_HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.HEATBEAM_SPARKS:case A.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(n);break;case A.STEAM:this.stream.readShort()!==-1?(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort(),this.stream.readLong()):(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort());break;case A.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(r);break;case A.MOREBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.CHAINFIST_SMOKE:this.stream.readPos(t);break;case A.ELECTRIC_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case A.TRACKER_EXPLOSION:this.stream.readPos(t);break;case A.TELEPORT_EFFECT:case A.DBALL_GOAL:this.stream.readPos(t);break;case A.WIDOWBEAMOUT:this.stream.readShort(),this.stream.readPos(t);break;case A.NUKEBLAST:this.stream.readPos(t);break;case A.WIDOWSPLASH:this.stream.readPos(t);break;default:console.warn(`CL_ParseTEnt: bad type ${e}`);break}this.handler&&this.handler.onTempEntity(e,t,r,n,i,s,a,o,c)}parseSpawnBaseline(){let e=this.parseEntityBits(),t=he();this.parseDelta(he(),t,e.number,e.bits),this.handler&&this.handler.onSpawnBaseline(t)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readByte(),i=this.stream.readData(n),s=this.stream.readByte();if(s!==N.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${s}`);let a=this.parsePlayerState(),o=this.stream.readByte();if(o!==N.packetentities&&o!==N.deltapacketentities)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${o}`);let c=o===N.deltapacketentities,u=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:t,surpressCount:r,areaBytes:n,areaBits:i,playerState:a,packetEntities:{delta:c,entities:u}})}parsePlayerState(){let e=un(),t=this.stream.readShort();t&1&&(e.pm_type=this.stream.readByte()),t&2&&(e.origin.x=this.stream.readShort()*.125,e.origin.y=this.stream.readShort()*.125,e.origin.z=this.stream.readShort()*.125),t&4&&(e.velocity.x=this.stream.readShort()*.125,e.velocity.y=this.stream.readShort()*.125,e.velocity.z=this.stream.readShort()*.125),t&8&&(e.pm_time=this.stream.readByte()),t&16&&(e.pm_flags=this.stream.readByte()),t&32&&(e.gravity=this.stream.readShort()),t&64&&(e.delta_angles.x=this.stream.readShort()*(180/32768),e.delta_angles.y=this.stream.readShort()*(180/32768),e.delta_angles.z=this.stream.readShort()*(180/32768)),t&128&&(e.viewoffset.x=this.stream.readChar()*.25,e.viewoffset.y=this.stream.readChar()*.25,e.viewoffset.z=this.stream.readChar()*.25),t&256&&(e.viewangles.x=this.stream.readAngle16(),e.viewangles.y=this.stream.readAngle16(),e.viewangles.z=this.stream.readAngle16()),t&512&&(e.kick_angles.x=this.stream.readChar()*.25,e.kick_angles.y=this.stream.readChar()*.25,e.kick_angles.z=this.stream.readChar()*.25),t&4096&&(e.gun_index=this.stream.readByte()),t&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=this.stream.readChar()*.25,e.gun_offset.y=this.stream.readChar()*.25,e.gun_offset.z=this.stream.readChar()*.25,e.gun_angles.x=this.stream.readChar()*.25,e.gun_angles.y=this.stream.readChar()*.25,e.gun_angles.z=this.stream.readChar()*.25),t&1024&&(e.blend[0]=this.stream.readByte(),e.blend[1]=this.stream.readByte(),e.blend[2]=this.stream.readByte(),e.blend[3]=this.stream.readByte()),t&2048&&(e.fov=this.stream.readByte()),t&16384&&(e.rdflags=this.stream.readByte());let r=this.stream.readLong();for(let n=0;n<32;n++)r&1<<n&&(e.stats[n]=this.stream.readShort());return e}parsePacketEntities(e){let t=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:un(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let r=he();this.parseDelta(he(),r,t.number,t.bits),e.push(r)}return e}parseEntityBits(){let e=this.stream.readByte();e&Ia&&(e|=this.stream.readByte()<<8),e&Da&&(e|=this.stream.readByte()<<16),e&Fa&&(e|=this.stream.readByte()<<24);let t;return e&Ca?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,r,n){t.number=e.number,t.modelindex=e.modelindex,t.modelindex2=e.modelindex2,t.modelindex3=e.modelindex3,t.modelindex4=e.modelindex4,t.frame=e.frame,t.skinnum=e.skinnum,t.effects=e.effects,t.renderfx=e.renderfx,t.origin.x=e.origin.x,t.origin.y=e.origin.y,t.origin.z=e.origin.z,t.old_origin.x=e.origin.x,t.old_origin.y=e.origin.y,t.old_origin.z=e.origin.z,t.angles.x=e.angles.x,t.angles.y=e.angles.y,t.angles.z=e.angles.z,t.sound=e.sound,t.event=e.event,t.solid=e.solid,t.number=r,t.bits=n,n&Zt&&(t.modelindex=this.stream.readByte()),n&Qt&&(t.modelindex2=this.stream.readByte()),n&er&&(t.modelindex3=this.stream.readByte()),n&tr&&(t.modelindex4=this.stream.readByte()),n&$t&&(t.frame=this.stream.readByte()),n&Jt&&(t.frame=this.stream.readShort()),n&We&&n&$e?t.skinnum=this.stream.readLong():n&We?t.skinnum=this.stream.readByte():n&$e&&(t.skinnum=this.stream.readShort()),n&Ve&&n&Xe?t.effects=this.stream.readLong():n&Ve?t.effects=this.stream.readByte():n&Xe&&(t.effects=this.stream.readShort()),n&He&&n&Ke?t.renderfx=this.stream.readLong():n&He?t.renderfx=this.stream.readByte():n&Ke&&(t.renderfx=this.stream.readShort()),n&Vt&&(t.origin.x=this.stream.readCoord()),n&Wt&&(t.origin.y=this.stream.readCoord()),n&jt&&(t.origin.z=this.stream.readCoord()),n&qt&&(t.angles.x=this.stream.readAngle()),n&Kt&&(t.angles.y=this.stream.readAngle()),n&Xt&&(t.angles.z=this.stream.readAngle()),n&rr&&this.stream.readPos(t.old_origin),n&nr&&(t.sound=this.stream.readByte()),n&Yt?t.event=this.stream.readByte():t.event=0,n&ir&&(t.solid=this.stream.readShort())}},Te=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(Te||{}),gn=class{constructor(){this.reader=null,this.state=0,this.playbackSpeed=1,this.accumulatedTime=0,this.frameDuration=100}setHandler(e){this.handler=e}loadDemo(e){this.reader=new Oa(e),this.state=0,this.accumulatedTime=0}play(){this.reader&&(this.state=1)}pause(){this.state===1&&(this.state=2)}stop(){this.state=0,this.reader&&this.reader.reset(),this.accumulatedTime=0}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.reader.hasMore()){this.state=3;return}let t=this.reader.readNextBlock();if(!t){this.state=3;return}new Ba(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Ua=Object.defineProperty,Ga=(e,t)=>{for(var r in t)Ua(e,r,{get:t[r],enumerable:!0})},yn={x:0,y:0,z:0};var sd=Math.PI/180;function Me(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function fe(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Q(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Ha(e){return Q(e,e)}function Ze(e){return Math.sqrt(Ha(e))}function vn(e){let t=Ze(e);return t===0?e:fe(e,1/t)}var xn=0,_n=1,wn=2,Va=Math.PI/180,ad=180/Math.PI;function sr(e,t){switch(t){case xn:return e.x;case _n:return e.y;case wn:default:return e.z}}function ar(e){return e*Va}function me(e){let t=e%360;return t<0?360+t:t}function Pe(e){let t=ar(sr(e,_n)),r=ar(sr(e,xn)),n=ar(sr(e,wn)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),u=Math.cos(n),l={x:o*s,y:o*i,z:-a},h={x:-c*a*s-u*-i,y:-c*a*i-u*s,z:-c*o},d={x:u*a*s-c*-i,y:u*a*i-c*s,z:u*o};return{forward:l,right:h,up:d}}var Y=1,ae=2;var cr=8,lr=16,Wa=32;var Ka=16384;var Je=65536,Sn=1<<17,Xa=1<<18,$a=1<<19,Ya=1<<20,ja=1<<21,qa=1<<22,Za=1<<23,od=1<<24,Qe=1<<25,Ja=1<<26,cd=1<<27,ld=1<<28,ud=1<<29,et=1<<30,dd=1<<31;var hd=1<<25,md=1<<28,fd=1<<29,pd=1<<30,gd=1<<31;var yd=Y|ae,vd=Y|Je|ae|Qe|et,xd=Y|Je|ae,_d=Y|Sn|ae|Qe|et,wd=Wa|cr|lr,Sd=Y|lr|cr,Qa=Y|Qe|et|ae|Ja,Ad=Xa|$a|Ya|ja|qa|Za,Ed=Y|cr|lr|Qe|et,bd=Y|Je|ae,zd=Y|ae,Ld=Y|Je|ae|Sn,Rd=Qa|Ka;var kd=Number.MAX_SAFE_INTEGER-1;var An=256;var eo=256,ur=8192,dr=2048,hr=512,to=256,ro=An*2,no=256,or=32;var V=(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+ur]="Sounds",e[e.Images=e.Sounds+dr]="Images",e[e.Lights=e.Images+hr]="Lights",e[e.ShadowLights=e.Lights+eo]="ShadowLights",e[e.Items=e.ShadowLights+no]="Items",e[e.PlayerSkins=e.Items+to]="PlayerSkins",e[e.General=e.PlayerSkins+An]="General",e[e.WheelWeapons=e.General+ro]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+or]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+or]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+or]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(V||{}),Td=V.MaxConfigStrings;var io={};Ga(io,{addReplayFrame:()=>co,createReplaySession:()=>oo,deserializeReplay:()=>ao,serializeReplay:()=>so});function so(e){return JSON.stringify(e,null,2)}function ao(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function oo(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function co(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var ue=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(ue||{});var W=(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))(W||{});function j(e,t){return(e&t)!==0}var mr=(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))(mr||{}),q=(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))(q||{});function En(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,l=Ze(t);if(l<1)return{x:0,y:0,z:t.z};let h=0;if(n&&!i||s){let p=l<c?c:l;h+=p*o*r}a>0&&!s&&(h+=l*u*a*r);let d=l-h;if(d<0&&(d=0),d===l)return t;let m=d/l;return fe(t,m)}function fr(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Q(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 bn(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=Q(t,r),c=a-o;if(c<=0)return t;let u=i*n*s;return u>c&&(u=c),{x:t.x+r.x*u,y:t.y+r.y*u,z:t.z+r.z*u}}function zn(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=Ze(s);if(a>i){let o=i/a;s=fe(s,o),a=i}return{wishdir:a===0?s:vn(s),wishspeed:a}}function Ln(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=Me(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=Me(s,{x:0,y:0,z:n.upmove}):s=Me(s,{x:0,y:0,z:10});let a=Ze(s);if(a>i){let o=i/a;s=fe(s,o),a=i}return a*=.5,{wishdir:a===0?s:vn(s),wishspeed:a}}function lo(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function uo(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function tt(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=lo(r,n),i={...i,x:uo(i.x)});let s=Pe(i);return{viewangles:i,...s}}var Rn=200,kn=200,Tn=200,Mn=140,Pn=150,Nn=3;function ho(e){let t=me(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function On(e,t){return{x:ho(e.x+t.x),y:me(e.y+t.y),z:me(e.z+t.z)}}function In(e,t){let r=t.sensitivityX??t.sensitivity,n=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*n,y:e.deltaX*r,z:0}}var mo={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},fo=800,pe={x:0,y:0,z:0},po=250;function te(){return{origin:pe,velocity:pe,viewangles:pe,pmFlags:W.OnGround,pmType:mr.Normal,waterlevel:ue.None,gravity:fo,deltaAngles:pe,health:0,armor:0,ammo:0,blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}function Cn(e){return e?{...te(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:pe,blend:e.blend?[...e.blend]:[0,0,0,0],damageIndicators:e.damageIndicators?[...e.damageIndicators]:[]}:te()}function ee(e,t,r){return e+(t-e)*r}function pr(e,t,r){let n=me(t-e);return n>180&&(n-=360),me(e+n*r)}function ye(e,t,r){let n=Math.max(0,Math.min(r,1));return{origin:{x:ee(e.origin.x,t.origin.x,n),y:ee(e.origin.y,t.origin.y,n),z:ee(e.origin.z,t.origin.z,n)},velocity:{x:ee(e.velocity.x,t.velocity.x,n),y:ee(e.velocity.y,t.velocity.y,n),z:ee(e.velocity.z,t.velocity.z,n)},viewangles:{x:pr(e.viewangles.x,t.viewangles.x,n),y:pr(e.viewangles.y,t.viewangles.y,n),z:pr(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:ee(e.health,t.health,n),armor:ee(e.armor,t.armor,n),ammo:ee(e.ammo,t.ammo,n),centerPrint:t.centerPrint,notify:t.notify,blend:t.blend,pickupIcon:t.pickupIcon,damageAlpha:t.damageAlpha,damageIndicators:t.damageIndicators}}function go(e,t,r,n){let i=Math.min(Math.max(t.msec,0),po)/1e3,s=j(e.pmFlags,W.OnGround),a=j(e.pmFlags,W.OnLadder),o=En({velocity:e.velocity,frametime:i,onGround:s,groundIsSlick:r.groundIsSlick,onLadder:a,waterlevel:e.waterlevel,pmFriction:r.pmFriction,pmStopSpeed:r.pmStopSpeed,pmWaterFriction:r.pmWaterFriction}),{viewangles:c,forward:u,right:l}=tt({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??pe}),h=e.waterlevel>ue.None?Ln({forward:u,right:l,cmd:t,maxSpeed:r.pmWaterSpeed}):zn({forward:u,right:l,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>ue.None)o=fr({velocity:o,wishdir:h.wishdir,wishspeed:h.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=j(e.pmFlags,W.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,g=h.wishspeed>p?{wishdir:h.wishdir,wishspeed:p}:h;o=fr({velocity:o,wishdir:g.wishdir,wishspeed:g.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=bn({velocity:o,wishdir:h.wishdir,wishspeed:h.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,Me(e.origin,fe(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var ge=class{constructor(t,r={}){this.baseFrame={frame:0,timeMs:0,state:te()};this.commands=[];this.predicted=te();this.settings={...mo,...r},this.trace=t,this.predicted=this.baseFrame.state??te()}setAuthoritative(t){let r=Cn(t.state);return this.baseFrame={...t,state:r},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=Cn(this.baseFrame.state);for(let r of this.commands)t=go(t,r,this.settings,this.trace);return this.predicted=t,t}};var yo={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function vo(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 xo(e,t,r){return t?e>210?r/400:e>100?r/800:r/1600:0}function _o(e,t,r,n,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let s=xo(t,n,i),a=e+s,c=j(r,W.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 ve=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...yo,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,r){let{forward:n,right:i}=Pe(tt({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??yn}).viewangles),s=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),a=j(t.pmFlags,W.OnGround),o=_o(this.bobTime,s,t.pmFlags,a,r);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=Q(t.velocity,n)*this.settings.runPitch,u=Q(t.velocity,i)*this.settings.runRoll,l=this.bobFracSin*this.settings.bobPitch*s,h=this.bobFracSin*this.settings.bobRoll*s;j(t.pmFlags,W.Ducked)&&a&&(l*=6,h*=6),c+=Math.min(l,this.settings.maxBobAngle),h=Math.min(h,this.settings.maxBobAngle),this.bobCycle&1&&(h=-h),u+=h;let d=Math.min(this.bobFracSin*s*this.settings.bobUp,this.settings.maxBobHeight),m=0,p=0;if(this.kick&&this.kick.remainingMs>0){let S=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));m+=S*this.kick.pitch,p+=S*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-r),this.kick.remainingMs===0&&(this.kick=void 0)}let y={angles:{x:c+m,y:0,z:u+p},offset:vo({x:0,y:0,z:d}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:s};return this.lastSample=y,y}};var xe=(e,t,r,n,i,s,a)=>{let o=Math.abs(n).toString();for(let c=0;c<o.length;c++){let u=parseInt(o[c]),l=i[u];l&&e.drawPic(t+c*s,r,l,a)}};var B={HEALTH_X:100,HEALTH_Y:450,ARMOR_X:200,ARMOR_Y:450,AMMO_X:540,AMMO_Y:450,CENTER_PRINT_X:320,CENTER_PRINT_Y:100,WEAPON_ICON_X:10,WEAPON_ICON_Y:450,POWERUP_X:610,POWERUP_Y:450};var oe=null,_e=0,gr=["ch1","ch2","ch3"],yr=[null,null,null];var Dn=()=>{if(_e=(_e+1)%gr.length,oe=yr[_e],!oe){let e=!1;for(let t=0;t<gr.length;t++){let r=(_e+t)%gr.length;if(yr[r]){_e=r,oe=yr[r],e=!0;break}}e||(oe=null)}return _e},Fn=(e,t,r)=>{if(oe){let n=(t-oe.width)/2,i=(r-oe.height)/2;e.drawPic(n,i,oe)}};var wo=Object.defineProperty,So=(e,t)=>{for(var r in t)wo(e,r,{get:t[r],enumerable:!0})},ot={x:0,y:0,z:0};var Gd=Math.PI/180;function st(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function ne(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function Ar(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Wn(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Ao(e){return Wn(e,e)}function Er(e){return Math.sqrt(Ao(e))}function ie(e){let t=Er(e);return t===0?e:Ar(e,1/t)}function Eo(e,t,r){return{x:e.x<t.x?t.x:e.x>r.x?r.x:e.x,y:e.y<t.y?t.y:e.y>r.y?r.y:e.y,z:e.z<t.z?t.z:e.z>r.z?r.z:e.z}}function bo(e,t,r,n){let i=0;if(t.x<r.x){let s=t.x-r.x;i+=s*s}else if(e.x>n.x){let s=e.x-n.x;i+=s*s}if(t.y<r.y){let s=t.y-r.y;i+=s*s}else if(e.y>n.y){let s=e.y-n.y;i+=s*s}if(t.z<r.z){let s=t.z-r.z;i+=s*s}else if(e.z>n.z){let s=e.z-n.z;i+=s*s}return i}var br=0,zr=1,Kn=2,zo=Math.PI/180,Lo=180/Math.PI;function Oe(e,t){switch(t){case br:return e.x;case zr:return e.y;case Kn:default:return e.z}}function nt(e){return e*zo}function wr(e){return e*Lo}function Bn(e){let t=e%360;return t<0?360+t:t}function ct(e){let t=nt(Oe(e,zr)),r=nt(Oe(e,br)),n=nt(Oe(e,Kn)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),u=Math.cos(n),l={x:o*s,y:o*i,z:-a},h={x:-c*a*s-u*-i,y:-c*a*i-u*s,z:-c*o},d={x:u*a*s-c*-i,y:u*a*i-c*s,z:u*o};return{forward:l,right:h,up:d}}function Ro(e){let t=Oe(e,br),r=Oe(e,zr);if(t===0)return r===0?0:r>0?90:270;let n=wr(Math.atan2(r,t));return n<0?n+360:n}function ko(e){let t=e.x,r=e.y,n=e.z;if(r===0&&t===0)return{x:n>0?-90:-270,y:0,z:0};let i;t?i=wr(Math.atan2(r,t)):r>0?i=90:i=270,i<0&&(i+=360);let s=Math.sqrt(t*t+r*r),a=wr(Math.atan2(n,s));return a<0&&(a+=360),{x:-a,y:i,z:0}}var Z=624,To=397,Mo=2567483615,Po=2147483648,No=2147483647,vr=4294967296,Oo=class{constructor(e=5489){this.state=new Uint32Array(Z),this.index=Z,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<Z;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=Z}nextUint32(){this.index>=Z&&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<Z;e++){let t=this.state[e]&Po|this.state[(e+1)%Z]&No,r=this.state[(e+To)%Z]^t>>>1;(t&1)!==0&&(r^=Mo),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==Z)throw new Error(`Expected ${Z} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Xn=class{constructor(e={}){this.mt=new Oo(e.seed)}frandom(){return this.mt.nextUint32()/vr}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=vr-vr%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 $n(e){return new Xn(e)}var J=1,le=2;var Lr=8,Rr=16,Io=32;var Co=16384;var lt=65536,Yn=1<<17,Do=1<<18,Fo=1<<19,Bo=1<<20,Uo=1<<21,Go=1<<22,Ho=1<<23,Hd=1<<24,ut=1<<25,Vo=1<<26,Vd=1<<27,Wd=1<<28,Kd=1<<29,dt=1<<30,Xd=1<<31;var $d=1<<25,Yd=1<<28,jd=1<<29,qd=1<<30,Zd=1<<31,Jd=J|le,Qd=J|lt|le|ut|dt,eh=J|lt|le,th=J|Yn|le|ut|dt,rh=Io|Lr|Rr,nh=J|Rr|Lr,Wo=J|ut|dt|le|Vo,ih=Do|Fo|Bo|Uo|Go|Ho,sh=J|Lr|Rr|ut|dt,ah=J|lt|le,oh=J|le,ch=J|lt|le|Yn,lh=Wo|Co,uh=Number.MAX_SAFE_INTEGER-1;var jn=256,Ko=256,Xo=8192,$o=2048,Yo=512,jo=256,qo=jn*2,Zo=256,xr=32,qn=(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+Xo]="Sounds",e[e.Images=e.Sounds+$o]="Images",e[e.Lights=e.Images+Yo]="Lights",e[e.ShadowLights=e.Lights+Ko]="ShadowLights",e[e.Items=e.ShadowLights+Zo]="Items",e[e.PlayerSkins=e.Items+jo]="PlayerSkins",e[e.General=e.PlayerSkins+jn]="General",e[e.WheelWeapons=e.General+qo]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+xr]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+xr]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+xr]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(qn||{}),dh=qn.MaxConfigStrings,Jo={};So(Jo,{addReplayFrame:()=>rc,createReplaySession:()=>tc,deserializeReplay:()=>ec,serializeReplay:()=>Qo});function Qo(e){return JSON.stringify(e,null,2)}function ec(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function tc(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function rc(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var ht=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(ht||{}),mt=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(mt||{});var nc={...ot};var hh=Object.freeze({aiflags:0,last_sighting:nc,trail_time:0,pausetime:0});var kr=[{name:"classname",type:"string",save:!0},{name:"spawnflags",type:"int",save:!0},{name:"target",type:"string",save:!0},{name:"targetname",type:"string",save:!0},{name:"killtarget",type:"string",save:!0},{name:"team",type:"string",save:!0},{name:"message",type:"string",save:!0},{name:"pathtarget",type:"string",save:!0},{name:"model",type:"string",save:!0},{name:"item",type:"string",save:!0},{name:"map",type:"string",save:!0},{name:"inventory",type:"inventory",save:!0},{name:"origin",type:"vec3",save:!0},{name:"old_origin",type:"vec3",save:!0},{name:"velocity",type:"vec3",save:!0},{name:"avelocity",type:"vec3",save:!0},{name:"angles",type:"vec3",save:!0},{name:"pos1",type:"vec3",save:!0},{name:"pos2",type:"vec3",save:!0},{name:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",type:"vec3",save:!0},{name:"absmin",type:"vec3",save:!0},{name:"absmax",type:"vec3",save:!0},{name:"size",type:"vec3",save:!0},{name:"mass",type:"int",save:!0},{name:"gravity",type:"float",save:!0},{name:"movetype",type:"int",save:!0},{name:"movedir",type:"vec3",save:!0},{name:"modelindex",type:"int",save:!0},{name:"frame",type:"int",save:!0},{name:"skin",type:"int",save:!0},{name:"effects",type:"int",save:!0},{name:"renderfx",type:"int",save:!0},{name:"health",type:"int",save:!0},{name:"max_health",type:"int",save:!0},{name:"takedamage",type:"boolean",save:!0},{name:"dmg",type:"int",save:!0},{name:"speed",type:"float",save:!0},{name:"accel",type:"float",save:!0},{name:"decel",type:"float",save:!0},{name:"height",type:"float",save:!0},{name:"deadflag",type:"int",save:!0},{name:"count",type:"int",save:!0},{name:"wait",type:"float",save:!0},{name:"delay",type:"float",save:!0},{name:"timestamp",type:"float",save:!0},{name:"lip",type:"int",save:!0},{name:"state",type:"int",save:!0},{name:"sounds",type:"int",save:!0},{name:"noise_index",type:"int",save:!0},{name:"fly_sound_debounce_time",type:"float",save:!0},{name:"enemy",type:"entity",save:!0},{name:"movetarget",type:"entity",save:!0},{name:"target_ent",type:"entity",save:!0},{name:"goalentity",type:"entity",save:!0},{name:"ideal_yaw",type:"float",save:!0},{name:"yaw_speed",type:"float",save:!0},{name:"search_time",type:"float",save:!0},{name:"attack_finished_time",type:"float",save:!0},{name:"pain_finished_time",type:"float",save:!0},{name:"trail_time",type:"float",save:!0},{name:"groundentity",type:"entity",save:!0},{name:"groundentity_linkcount",type:"int",save:!0},{name:"waterlevel",type:"int",save:!0},{name:"watertype",type:"int",save:!0},{name:"nextthink",type:"float",save:!0},{name:"solid",type:"int",save:!0},{name:"flags",type:"int",save:!0},{name:"svflags",type:"int",save:!0},{name:"think",type:"callback",save:!1},{name:"touch",type:"callback",save:!1},{name:"use",type:"callback",save:!1},{name:"blocked",type:"callback",save:!1},{name:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}];var mh=1<<24,ic=1;function Un(e){return{mins:{x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},maxs:{x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z}}}function sc(e,t){let r=Un(e),n=Un(t),i=bo(r.mins,r.maxs,n.mins,n.maxs);return Math.sqrt(i)}function ac(e,t){let{forward:r}=ct(e.angles),n=ie(ne(t.origin,e.origin)),i=Wn(n,r);return(e.spawnflags&ic)!==0&&e.trail_time===0&&e.enemy===null?i>.15:i>-.3}function oc(e,t){if(t===0)return{x:0,y:0,z:0};let r=nt(e);return{x:Math.cos(r)*t,y:Math.sin(r)*t,z:0}}function ft(e,t,r){let n=oc(t,r),i=e.origin;return i.x+=n.x,i.y+=n.y,i.z+=n.z,!0}function pt(e,t){let r=Bn(e.angles.y),n=e.ideal_yaw;if(r===n){e.angles.y=r;return}let i=e.yaw_speed*t*10,s=n-r;n>r?s>=180&&(s-=360):s<=-180&&(s+=360),s>i?s=i:s<-i&&(s=-i),e.angles.y=Bn(r+s)}function gt(e,t){ft(e,e.angles.y,t)}function Tr(e,t){if(!t)return;let r={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=Ro(r)}function Ie(e,t){pt(e,t)}function Ce(e,t,r,n){if(Tr(e,e.goalentity),pt(e,r),t!==0&&ft(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&sc(e,e.goalentity)<64&&e.goalentity.target){let s=n.pickTarget(e.goalentity.target);s&&(e.goalentity=s,e.ideal_yaw=e.angles.y)}}function De(e,t,r){Tr(e,e.enemy??e.goalentity),pt(e,r),t!==0&&ft(e,e.angles.y,t)}function yt(e,t,r){Tr(e,e.enemy),pt(e,r),t!==0&&ft(e,e.angles.y,t)}var cc=kr.filter(e=>e.save||e.type==="callback"),fh=new Map(cc.map(e=>[e.name,e]));var ph=1/40;var G=(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[e.Trap=6]="Trap",e[e.Tesla=7]="Tesla",e[e.MagSlugs=8]="MagSlugs",e[e.Flechettes=9]="Flechettes",e[e.Prox=10]="Prox",e[e.Nuke=11]="Nuke",e[e.Rounds=12]="Rounds",e))(G||{}),gh=Object.keys(G).length/2;function ce(e,t){return(e&t)!==0}var Ae=(e=>(e.BODY="body",e.COMBAT="combat",e.JACKET="jacket",e))(Ae||{}),lc={jacket:{baseCount:25,maxCount:50,normalProtection:.3,energyProtection:0},combat:{baseCount:50,maxCount:100,normalProtection:.6,energyProtection:.3},body:{baseCount:100,maxCount:200,normalProtection:.8,energyProtection:.6}};function uc(e,t,r){if(e<=0||ce(t,130)||!r.armorType||r.armorCount<=0)return{saved:0,remainingArmor:r.armorCount};let n=lc[r.armorType],i=ce(t,4)?n.energyProtection:n.normalProtection,s=Math.ceil(i*e);return s>=r.armorCount&&(s=r.armorCount),s<=0?{saved:0,remainingArmor:r.armorCount}:{saved:s,remainingArmor:r.armorCount-s}}function dc(e,t,r,n,i,s={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(ce(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:a}=ct(i.angles),o={x:r.x-i.origin.x,y:r.y-i.origin.y,z:r.z-i.origin.z},c=Math.hypot(o.x,o.y,o.z);if(i.type==="screen"&&c>0){let f={x:o.x/c,y:o.y/c,z:o.z/c};if(f.x*a.x+f.y*a.y+f.z*a.z<=.3)return{saved:0,remainingCells:i.cellCount}}let u=s.ctfMode??!1,l=i.type==="screen"||u?1:2,h=i.type==="screen"?e/3:2*e/3;h=Math.max(1,h);let d=i.cellCount*l;ce(t,4)&&(d=Math.max(1,Math.floor(d/2))),d>h&&(d=Math.floor(h));let m=d/l;ce(t,4)&&(m*=2),m=Math.max(1,Math.floor(m));let p=Math.max(l,m),g=Math.max(0,i.cellCount-p);return{saved:d,remainingCells:g}}var C=(e=>(e.Blaster="blaster",e.Shotgun="shotgun",e.SuperShotgun="super_shotgun",e.Machinegun="machinegun",e.Chaingun="chaingun",e.GrenadeLauncher="grenade_launcher",e.RocketLauncher="rocket_launcher",e.HyperBlaster="hyperblaster",e.Railgun="railgun",e.BFG10K="bfg10k",e.Grapple="grapple",e.ChainFist="chainfist",e.EtfRifle="etf_rifle",e.ProxLauncher="prox_launcher",e.IonRipper="ionripper",e.PlasmaBeam="plasmabeam",e.Phalanx="phalanx",e.Disruptor="disruptor",e))(C||{}),M=(e=>(e.QuadDamage="quad",e.Invulnerability="invulnerability",e.EnviroSuit="enviro_suit",e.Rebreather="rebreather",e.Silencer="silencer",e.PowerScreen="power_screen",e.PowerShield="power_shield",e.QuadFire="quad_fire",e.Invisibility="invisibility",e.Bandolier="bandolier",e.AmmoPack="ammo_pack",e.IRGoggles="ir_goggles",e.DoubleDamage="double_damage",e.SphereVengeance="sphere_vengeance",e.SphereHunter="sphere_hunter",e.SphereDefender="sphere_defender",e.Doppelganger="doppelganger",e.TagToken="tag_token",e.TechResistance="tech_resistance",e.TechStrength="tech_strength",e.TechHaste="tech_haste",e.TechRegeneration="tech_regeneration",e.Flashlight="flashlight",e.Compass="compass",e))(M||{}),F=(e=>(e.Blue="blue",e.Red="red",e.Green="green",e.Yellow="yellow",e.DataCD="data_cd",e.PowerCube="power_cube",e.ExplosiveCharges="explosive_charges",e.PowerCore="power_core",e.Pyramid="pyramid",e.DataSpinner="data_spinner",e.Pass="pass",e.CommanderHead="commander_head",e.Airstrike="airstrike",e.NukeContainer="nuke_container",e.Nuke="nuke",e.RedFlag="red_flag",e.BlueFlag="blue_flag",e))(F||{});var Zn={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:"blaster",ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:"shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:"super_shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:"machinegun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:"chaingun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:"grenade_launcher",ammoType:3,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:"rocket_launcher",ammoType:2,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:"hyperblaster",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:"railgun",ammoType:5,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:"bfg10k",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:1}};var yh=$n();function hc(e,t,r,n,i){if(ce(i,8)||((e.flags??0)&4)!==0||n===0)return{x:0,y:0,z:0};let a=Math.max(50,e.mass??200),o=ie(r),u=Ar(o,(t===e?1600:500)*n/a);return e.velocity=st(e.velocity,u),u}function mc(e,t,r,n,i){let s=n,a=0,o=0,c,u;if(e.powerArmor){let l=dc(n,i,t,r,e.powerArmor);a=l.saved,c=l.remainingCells,s-=a}if(e.regularArmor){let l=uc(s,i,e.regularArmor);o=l.saved,u=l.remainingArmor,s-=o}return[Math.max(0,s),a,o,c,u]}function Gn(e){return e.mins&&e.maxs?{x:e.origin.x+(e.mins.x+e.maxs.x)*.5,y:e.origin.y+(e.mins.y+e.maxs.y)*.5,z:e.origin.z+(e.mins.z+e.maxs.z)*.5}:e.origin}function vt(e,t,r,n,i,s,a,o,c,u,l){if(!e.takedamage||a<=0)return null;if(!ce(c,32)&&((e.flags??0)&1)!==0)return{take:0,psave:0,asave:a,knocked:{x:0,y:0,z:0},killed:!1};let d=hc(e,r,n,o,c),[m,p,g,f,y]=mc(e,i,s,a,c);e.powerArmor&&f!==void 0&&(e.powerArmor.cellCount=f),e.regularArmor&&(e.regularArmor.armorCount=y??e.regularArmor.armorCount);let S=m;S>0&&(e.health-=S,l&&!ce(c,1024)&&(e.classname==="player"||e.monsterinfo)&&l(i,1,ht.temp_entity,mt.BLOOD,i,s));let v=e.health<=0;return v?e.flags&&e.flags&2?e.health=Math.max(1,e.health):e.die&&e.die(e,t,r,S,i,u):S>0&&e.pain&&e.pain(e,r,o,S,u),{take:S,psave:p,asave:g,knocked:d,killed:v,remainingCells:f,remainingArmor:y}}function fc(e,t,r,n,i,s,a,o,c={},u){let l=[],h=Gn(t),d=c.canDamage??(()=>!0);for(let m of e){if(m===i||!m.takedamage||!d(m,t))continue;let p=m.mins&&m.maxs?Eo(h,st(m.origin,m.mins),st(m.origin,m.maxs)):Gn(m),g=ne(h,p),f=Er(g);if(s>0&&f>s)continue;let y=n-.5*f;if(y<=0)continue;let S=m===r?y*.5:y,v=ie(ne(m.origin,h)),_=vt(m,t,r,v,p,v,S,S,a|1,o,u);l.push({target:m,result:_,appliedDamage:S})}return l}var xt=.1;function pc(e,t,r){Ie(e,xt)}function gc(e,t,r){Ce(e,t,xt,r)}function yc(e,t,r){De(e,t,xt)}function Mr(e,t,r){yt(e,t,xt)}function Jn(e,t,r){gt(e,t)}var Pr,Qn,ei,vc,xc,_c,wc,ti;function Sc(e){e.monsterinfo.current_move=Pr}function Ac(e){e.monsterinfo.current_move=Qn}function Fe(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ei:e.monsterinfo.current_move=Pr}function Nr(e,t,r,n){if(!e.enemy||!e.enemy.inUse||e.enemy.health<=0||Er(ne(e.enemy.origin,e.origin))>100||!ac(e,e.enemy))return;let s=ie(ne(e.enemy.origin,e.origin));vt(e.enemy,e,e,s,e.enemy.origin,ot,r,n,0,0)}var Ec=Array.from({length:5},()=>({ai:pc,dist:0}));Pr={firstframe:0,lastframe:4,frames:Ec,endfunc:Sc};var bc=Array.from({length:13},()=>({ai:gc,dist:9}));Qn={firstframe:5,lastframe:17,frames:bc,endfunc:Ac};var zc=Array.from({length:6},()=>({ai:yc,dist:18}));ei={firstframe:18,lastframe:23,frames:zc,endfunc:Fe};var Lc=Array.from({length:7},(e,t)=>({ai:Mr,dist:0,think:t===3?(r,n)=>{Nr(r,n,10+Math.random()*10,5)}:null}));vc={firstframe:24,lastframe:30,frames:Lc,endfunc:Fe};var Rc=Array.from({length:11},(e,t)=>({ai:Mr,dist:0,think:t===2?(r,n)=>{Nr(r,n,15+Math.random()*10,5)}:null}));xc={firstframe:31,lastframe:41,frames:Rc,endfunc:Fe};var kc=Array.from({length:9},(e,t)=>({ai:Mr,dist:0,think:t===4?(r,n)=>{Nr(r,n,20+Math.random()*10,10)}:null}));_c={firstframe:42,lastframe:50,frames:kc,endfunc:Fe};var Tc=Array.from({length:4},()=>({ai:Jn,dist:0}));wc={firstframe:51,lastframe:54,frames:Tc,endfunc:Fe};var Mc=Array.from({length:13},()=>({ai:Jn,dist:0}));function Pc(e){e.monsterinfo.nextframe=ti.lastframe,e.nextthink=-1}ti={firstframe:55,lastframe:67,frames:Mc,endfunc:Pc};var Or=.1;function Nc(e,t,r){Ie(e,Or)}function Oc(e,t,r){Ce(e,t,Or,r)}function Ic(e,t,r){De(e,t,Or)}var vh=Array.from({length:1},()=>({ai:Nc,dist:0}));var xh=Array.from({length:1},()=>({ai:Oc,dist:5}));var _h=Array.from({length:1},()=>({ai:Ic,dist:10}));function Cc(e,t,r,n,i,s){let a=e.spawn();a.classname="grenade",a.owner=t,a.origin={...r},a.velocity={x:n.x*s,y:n.y*s,z:n.z*s},a.movetype=9,a.clipmask=268566530,a.solid=2,a.modelindex=e.modelIndex("models/objects/grenade/tris.md2"),a.mins={x:-4,y:-4,z:-4},a.maxs={x:4,y:4,z:4};let o=c=>{let u=e.findByRadius(c.origin,120);fc(u,c,c.owner,i,c.owner,120,0,6,{},e.multicast.bind(e)),e.multicast(c.origin,2,ht.temp_entity,mt.GRENADE_EXPLOSION,c.origin),e.free(c)};a.touch=(c,u,l,h)=>{if(u!==c.owner&&u&&u.takedamage){o(c);return}},a.think=c=>{o(c)},e.scheduleThink(a,e.timeSeconds+2.5),e.finalizeSpawn(a)}function Dc(e,t,r,n,i,s,a){let o=e.spawn();o.classname=a===10?"hyperblaster_bolt":"blaster_bolt",o.owner=t,o.origin={...r},o.velocity={x:n.x*s,y:n.y*s,z:n.z*s},o.movetype=8,o.solid=2,o.mins={x:-2,y:-2,z:-2},o.maxs={x:2,y:2,z:2},o.touch=(c,u,l,h)=>{u!==c.owner&&(u&&u.takedamage?vt(u,c,c.owner,c.velocity,c.origin,l?l.normal:ot,i,1,0,a,e.multicast.bind(e)):l&&e.multicast(c.origin,1,ht.temp_entity,mt.BLASTER,c.origin,l.normal),e.free(c))},e.finalizeSpawn(o)}function Hn(){return 2*Math.random()-1}function _t(e,t,r,n,i,s,a,o,c,u=0){let l=r;if(s>0||a>0){let m=ko(r),{right:p,up:g}=ct(m),f=Hn()*s,y=Hn()*a;l={x:r.x+p.x*f+g.x*y,y:r.y+p.y*f+g.y*y,z:r.z+p.z*f+g.z*y},l=ie(l)}let h=st(t,Ar(l,8192)),d=c.trace(t,null,null,h,e,536870913);!d.ent||d.fraction===1||vt(d.ent,e,e,l,d.endpos,d.plane?.normal||ot,n,i,18,u)}function Fc(e,t,r,n,i,s,a,o,c,u,l=2){for(let h=0;h<o;h++)_t(e,t,r,n,i,s,a,c,u,l)}function Bc(e,t,r,n,i,s,a,o,c=1){Dc(o,e,t,r,n,i,c)}var wt=.1;function Uc(e,t,r){Ie(e,wt)}function Gc(e,t,r){Ce(e,t,wt,r)}function Hc(e,t,r){De(e,t,wt)}function ri(e,t,r){yt(e,t,wt)}function ni(e,t,r){gt(e,t)}var Ir,ii,si,Vc,Wc,Kc,ai;function Xc(e){e.monsterinfo.current_move=Ir}function $c(e){e.monsterinfo.current_move=ii}function St(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=si:e.monsterinfo.current_move=Ir}function Yc(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},n=ie(ne(e.enemy.origin,r));_t(e,r,n,10,2,0,0,0,t,5)}function jc(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n=ie(ne(e.enemy.origin,r));Cc(t,e,r,n,50,600)}var qc=Array.from({length:30},()=>({ai:Uc,dist:0}));Ir={firstframe:0,lastframe:29,frames:qc,endfunc:Xc};var Zc=Array.from({length:40},()=>({ai:Gc,dist:2}));ii={firstframe:30,lastframe:69,frames:Zc,endfunc:$c};var Jc=Array.from({length:20},()=>({ai:Hc,dist:10}));si={firstframe:70,lastframe:89,frames:Jc,endfunc:St};var Qc=Array.from({length:10},(e,t)=>({ai:ri,dist:0,think:t>=2&&t<=8?Yc:null}));Vc={firstframe:90,lastframe:99,frames:Qc,endfunc:St};var el=Array.from({length:10},(e,t)=>({ai:ri,dist:0,think:t===5?jc:null}));Wc={firstframe:100,lastframe:109,frames:el,endfunc:St};var tl=Array.from({length:8},()=>({ai:ni,dist:0}));Kc={firstframe:110,lastframe:117,frames:tl,endfunc:St};var rl=Array.from({length:15},()=>({ai:ni,dist:0}));function nl(e){e.monsterinfo.nextframe=ai.lastframe,e.nextthink=-1}ai={firstframe:118,lastframe:132,frames:rl,endfunc:nl};var At=.1;function il(e,t,r){Ie(e,At)}function sl(e,t,r){Ce(e,t,At,r)}function al(e,t,r){De(e,t,At)}function ol(e,t,r){yt(e,t,At)}function Cr(e,t,r){gt(e,t)}var Dr,oi,ci,cl,ll,li,ul;function dl(e){e.monsterinfo.current_move=Dr}function hl(e){e.monsterinfo.current_move=oi}function Et(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ci:e.monsterinfo.current_move=Dr}function ml(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)},i=ie(ne(n,r));_t(e,r,i,5,2,.05,.05,0,t,4)}var fl=Array.from({length:22},()=>({ai:il,dist:0}));Dr={firstframe:0,lastframe:21,frames:fl,endfunc:dl};var pl=Array.from({length:15},()=>({ai:sl,dist:4}));oi={firstframe:22,lastframe:36,frames:pl,endfunc:hl};var gl=Array.from({length:8},()=>({ai:al,dist:12}));ci={firstframe:37,lastframe:44,frames:gl,endfunc:Et};var yl=Array.from({length:15},(e,t)=>({ai:ol,dist:0,think:t>=5&&t<=7?ml:null}));cl={firstframe:45,lastframe:59,frames:yl,endfunc:Et};var vl=Array.from({length:10},()=>({ai:Cr,dist:0}));ll={firstframe:60,lastframe:69,frames:vl,endfunc:Et};var xl=Array.from({length:20},()=>({ai:Cr,dist:0}));function _l(e){e.monsterinfo.nextframe=li.lastframe,e.nextthink=-1}li={firstframe:70,lastframe:89,frames:xl,endfunc:_l};var wl=Array.from({length:5},()=>({ai:Cr,dist:0}));ul={firstframe:90,lastframe:94,frames:wl,endfunc:Et};var bt=.1;var Sl=2;function Al(e,t,r){Ie(e,bt)}function El(e,t,r){Ce(e,t,bt,r)}function bl(e,t,r){De(e,t,bt)}function ui(e,t,r){yt(e,t,bt)}function di(e,t,r){gt(e,t)}var Fr,hi,mi,zl,Ll,Rl,fi;function kl(e){e.monsterinfo.current_move=Fr}function Tl(e){e.monsterinfo.current_move=hi}function zt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=mi:e.monsterinfo.current_move=Fr}function Br(e){return{x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight}}function Ur(e,t){if(!e.enemy){let{forward:n}=ct(e.angles);return n}let r={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)};return ie(ne(r,t))}function Ml(e,t){if(!e.enemy)return;let r=Br(e),n=Ur(e,r);Bc(e,r,n,5,600,0,0,t,1)}function Pl(e,t){if(!e.enemy)return;let r=Br(e),n=Ur(e,r);Fc(e,r,n,2,4,.15,.15,20,0,t,3)}function Nl(e,t){if(!e.enemy)return;let r=Br(e),n=Ur(e,r);_t(e,r,n,4,4,.05,.05,0,t,4)}function Ol(e,t){e.spawnflags&Sl?Pl(e,t):Ml(e,t)}var Il=Array.from({length:30},()=>({ai:Al,dist:0}));Fr={firstframe:0,lastframe:29,frames:Il,endfunc:kl};var Cl=Array.from({length:40},()=>({ai:El,dist:2}));hi={firstframe:30,lastframe:69,frames:Cl,endfunc:Tl};var Dl=Array.from({length:20},()=>({ai:bl,dist:10}));mi={firstframe:70,lastframe:89,frames:Dl,endfunc:zt};var Fl=Array.from({length:10},(e,t)=>({ai:ui,dist:0,think:t===5?Ol:null}));zl={firstframe:90,lastframe:99,frames:Fl,endfunc:zt};var Bl=Array.from({length:10},(e,t)=>({ai:ui,dist:0,think:t>=4&&t<=8?Nl:null}));Ll={firstframe:90,lastframe:99,frames:Bl,endfunc:zt};var Ul=Array.from({length:6},()=>({ai:di,dist:0}));Rl={firstframe:100,lastframe:105,frames:Ul,endfunc:zt};var Gl=Array.from({length:10},()=>({ai:di,dist:0}));function Hl(e){e.monsterinfo.nextframe=fi.lastframe,e.nextthink=-1}fi={firstframe:106,lastframe:115,frames:Gl,endfunc:Hl};var wh=new Map(kr.map(e=>[e.name,e]));var Sh=$n();var Vl=2166136261,Wl=16777619;function pi(e,t){let r=e>>>0;for(let n=0;n<t.length;n+=1)r^=t[n]&255,r=Math.imul(r,Wl)>>>0;return r>>>0}function we(e,t){let r=new ArrayBuffer(8);new DataView(r).setFloat64(0,t,!0);let i=new Uint8Array(r);return pi(e,i)}function Sr(e,t){let r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n)&255;return pi(e,r)}var _r=2,Kl=1;function K(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function U(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function rt(e,t,r){return e===void 0?r:U(e,t)}function at(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function it(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let r of e)U(r,`${t} element`);return e}function Xl(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=K(e,"level");return{frameNumber:rt(t.frameNumber,"level.frameNumber",0),timeSeconds:rt(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:rt(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:rt(t.deltaSeconds,"level.deltaSeconds",0)}}function $l(e){if(e===void 0)return new Xn().getState();let t=K(e,"rng"),r=K(t.mt,"rng.mt"),n=it(r.state,"rng.mt.state");return{mt:{index:U(r.index,"rng.mt.index"),state:n}}}function Yl(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=K(t,`thinks[${r}]`);return{time:U(n.time,`thinks[${r}].time`),entityIndex:U(n.entityIndex,`thinks[${r}].entityIndex`)}})}function jl(e){if(e===void 0)return{};let t=K(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=K(i,n),a={};for(let[o,c]of Object.entries(s))a[o]=U(c,`${n}.${o}`);r[n]=a;break}if(Array.isArray(i)&&i.length===3){let[s,a,o]=i;r[n]=[U(s,`${n}[0]`),U(a,`${n}[1]`),U(o,`${n}[2]`)];break}throw new Error(`Unsupported entity field value for ${n}`)}}}return r}function ql(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=K(t,`entities[${r}]`);return{index:U(n.index,`entities[${r}].index`),fields:jl(n.fields)}})}function Zl(e){let t=K(e,"pool");return{capacity:U(t.capacity,"pool.capacity"),activeOrder:it(t.activeOrder,"pool.activeOrder"),freeList:it(t.freeList,"pool.freeList"),pendingFree:it(t.pendingFree,"pool.pendingFree")}}function Jl(e){let t=K(e,"entities");return{timeSeconds:U(t.timeSeconds,"entities.timeSeconds"),pool:Zl(t.pool),entities:ql(t.entities),thinks:Yl(t.thinks)}}function Ql(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=K(t,`cvars[${r}]`);return{name:at(n.name,`cvars[${r}].name`),value:at(n.value,`cvars[${r}].value`),flags:U(n.flags,`cvars[${r}].flags`)}})}function eu(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>at(t,`configstrings[${r}]`))}function tu(e){return e===void 0?{}:K(e,"gameState")}function re(e,t){if(t==null)return e;if(typeof t=="number")return we(e,t);if(typeof t=="string")return Sr(e,t);if(typeof t=="boolean")return we(e,t?1:0);if(Array.isArray(t)){let r=e;for(let n of t)r=re(r,n);return r}if(typeof t=="object"){let r=e,n=Object.keys(t).sort();for(let i of n)r=Sr(r,i),r=re(r,t[i]);return r}return e}function ru(e){let t=Vl;return t=we(t,e.version),t=we(t,e.timestamp),t=Sr(t,e.map),t=we(t,e.difficulty),t=we(t,e.playtimeSeconds),t=re(t,e.gameState),t=re(t,e.level),t=re(t,e.rng),t=re(t,e.entities),t=re(t,e.cvars),t=re(t,e.configstrings),e.player&&(t=re(t,e.player)),t>>>0}function gi(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=K(n,"save"),s=i.version??_r,a=U(s,"version");if(a<Kl)throw new Error(`Unsupported save version ${a}`);if(a>_r&&!r)throw new Error(`Save version ${a} is newer than supported ${_r}`);let o={version:a,timestamp:U(i.timestamp,"timestamp"),map:at(i.map,"map"),difficulty:U(i.difficulty,"difficulty"),playtimeSeconds:U(i.playtimeSeconds,"playtimeSeconds"),gameState:tu(i.gameState),level:Xl(i.level),rng:$l(i.rng),entities:Jl(i.entities),cvars:Ql(i.cvars),configstrings:eu(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?U(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=ru(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var Ah=new Set(kr.filter(e=>e.save).map(e=>e.name));var Vn=globalThis.TextEncoder;function Se(e){return gi({...e},{allowNewerVersion:!0})}function nu(e){return Vn?new Vn().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var iu=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:Se(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:Se(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:Se(e.save)}))}},su=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:Se(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:Se(t.save)}))}},Gr=class Ne{constructor(t={}){let{dbName:r=Ne.DEFAULT_DB_NAME,storeName:n=Ne.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new su(i,r,n):this.adapter=new iu}async save(t,r,n={}){let i=Se(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:nu(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 gi(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(Ne.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(Ne.QUICK_SLOT,t)}};Gr.DEFAULT_DB_NAME="quake2ts-saves";Gr.DEFAULT_STORE="saves";Gr.QUICK_SLOT="quicksave";var Ee=new Map;var yi=(e,t,r,n,i)=>{if(!t)return;let s=t.inventory.armor;if(s&&s.armorCount>0){let l=`i_${s.armorType}armor`,h=Ee.get(l);h&&e.drawPic(B.ARMOR_X-24,B.ARMOR_Y-2,h)}let a=t.inventory.currentWeapon;if(a){let l=Object.values(Zn).find(h=>h.weaponId===a);if(l){let h=`w_${l.id.substring(7)}`,d=Ee.get(h);d&&e.drawPic(B.WEAPON_ICON_X,B.WEAPON_ICON_Y,d)}}let o=B.POWERUP_X;for(let[l,h]of t.inventory.powerups.entries())if(h&&h>i){let d=`p_${l}`,m=Ee.get(d);if(m){e.drawPic(o,B.POWERUP_Y,m);let p=Math.ceil((h-i)/1e3);xe(e,o+m.width+2,B.POWERUP_Y,p,r,n),o-=m.width+n*p.toString().length+8}}let c=Array.from(t.inventory.keys).sort(),u=300;for(let l of c){let h="";switch(l){case"blue":h="k_bluekey";break;case"red":h="k_redkey";break;case"green":h="k_security";break;case"yellow":h="k_pyramid";break}if(h){let d=Ee.get(h);d&&(e.drawPic(B.WEAPON_ICON_X,u,d),u+=d.height+2)}}};var Lt=new Map;var vi=(e,t)=>{if(!t.damageIndicators)return;let r=e.width,n=e.height,{forward:i,right:s,up:a}=Pe(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:u}=o,l={...c},h=Math.sqrt(l.x*l.x+l.y*l.y+l.z*l.z);h>0&&(l.x/=h,l.y/=h,l.z/=h);let d=Q(l,s),m=Q(l,i),p=Math.atan2(m,d)*180/Math.PI,g,f=0,y=0;p>-45&&p<=45?(g=Lt.get("d_right"),f=r-(g?.width||0),y=(n-(g?.height||0))/2):p>45&&p<=135?(g=Lt.get("d_up"),f=(r-(g?.width||0))/2,y=0):p>135||p<=-135?(g=Lt.get("d_left"),f=0,y=(n-(g?.height||0))/2):(g=Lt.get("d_down"),f=(r-(g?.width||0))/2,y=n-(g?.height||0)),g&&e.drawPic(f,y,g)}};var xi=(e,t)=>{let r=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],n=10;for(let i of r)e.drawString(10,n,i),n+=10};var _i=(e,t)=>{if(!t.blend)return;let[r,n,i,s]=t.blend;s>0&&e.drawfillRect(0,0,e.width,e.height,[r,n,i,s])};var wi=(e,t)=>{if(!t.pickupIcon)return;let r=Ee.get(t.pickupIcon);if(r){let n=e.width-r.width-10,i=e.height-r.height-10;e.drawPic(n,i,r)}};var Rt=[],kt=0;var Si=(e,t,r,n,i,s,a,o,c)=>{e.begin2D(),_i(e,t),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]);let u=n<=25?[1,0,0,1]:void 0;xe(e,B.HEALTH_X,B.HEALTH_Y,n,Rt,kt,u),xe(e,B.ARMOR_X,B.ARMOR_Y,i,Rt,kt),xe(e,B.AMMO_X,B.AMMO_Y,s,Rt,kt),yi(e,r,Rt,kt,c),wi(e,t),vi(e,t),xi(e,a),o.drawCenterPrint(e,c),o.drawNotifications(e,c),t.centerPrint&&e.drawCenterString(e.height/2-20,t.centerPrint),t.notify&&e.drawString(8,8,t.notify),Fn(e,e.width,e.height),e.end2D()};var au=3e3,ou=5e3,cu=4,Tt=class{constructor(){this.centerPrintMsg=null;this.notifyMessages=[]}addCenterPrint(t,r){this.centerPrintMsg={text:t,startTime:r,duration:au}}addNotify(t,r){this.notifyMessages.push({text:t,startTime:r,duration:ou}),this.notifyMessages.length>cu&&this.notifyMessages.shift()}drawCenterPrint(t,r){if(!this.centerPrintMsg)return;if(r>this.centerPrintMsg.startTime+this.centerPrintMsg.duration){this.centerPrintMsg=null;return}let n=this.centerPrintMsg.text.length*8,i=(t.width-n)/2,s=B.CENTER_PRINT_Y;t.drawString(i,s,this.centerPrintMsg.text)}drawNotifications(t,r){for(;this.notifyMessages.length>0&&r>this.notifyMessages[0].startTime+this.notifyMessages[0].duration;)this.notifyMessages.shift();let n=10;for(let i of this.notifyMessages)t.drawString(10,n,i.text),n+=10}};var Hr=[{type:"null"},{type:"armor",id:Ae.BODY},{type:"armor",id:Ae.COMBAT},{type:"armor",id:Ae.JACKET},{type:"armor",id:Ae.JACKET},{type:"powerup",id:M.PowerScreen},{type:"powerup",id:M.PowerShield},{type:"weapon",id:C.Grapple},{type:"weapon",id:C.Blaster},{type:"weapon",id:C.ChainFist},{type:"weapon",id:C.Shotgun},{type:"weapon",id:C.SuperShotgun},{type:"weapon",id:C.Machinegun},{type:"weapon",id:C.EtfRifle},{type:"weapon",id:C.Chaingun},{type:"ammo",id:G.Grenades},{type:"ammo",id:G.Trap},{type:"ammo",id:G.Tesla},{type:"weapon",id:C.GrenadeLauncher},{type:"weapon",id:C.ProxLauncher},{type:"weapon",id:C.RocketLauncher},{type:"weapon",id:C.HyperBlaster},{type:"weapon",id:C.IonRipper},{type:"weapon",id:C.PlasmaBeam},{type:"weapon",id:C.Railgun},{type:"weapon",id:C.Phalanx},{type:"weapon",id:C.BFG10K},{type:"weapon",id:C.Disruptor},{type:"ammo",id:G.Shells},{type:"ammo",id:G.Bullets},{type:"ammo",id:G.Cells},{type:"ammo",id:G.Rockets},{type:"ammo",id:G.Slugs},{type:"ammo",id:G.MagSlugs},{type:"ammo",id:G.Flechettes},{type:"ammo",id:G.Prox},{type:"ammo",id:G.Nuke},{type:"ammo",id:G.Rounds},{type:"powerup",id:M.QuadDamage},{type:"powerup",id:M.QuadFire},{type:"powerup",id:M.Invulnerability},{type:"powerup",id:M.Invisibility},{type:"powerup",id:M.Silencer},{type:"powerup",id:M.Rebreather},{type:"powerup",id:M.EnviroSuit},{type:"health",id:"ancient_head"},{type:"health",id:"legacy_head"},{type:"health",id:"adrenaline"},{type:"powerup",id:M.Bandolier},{type:"powerup",id:M.AmmoPack},{type:"powerup",id:M.IRGoggles},{type:"powerup",id:M.DoubleDamage},{type:"powerup",id:M.SphereVengeance},{type:"powerup",id:M.SphereHunter},{type:"powerup",id:M.SphereDefender},{type:"powerup",id:M.Doppelganger},{type:"powerup",id:M.TagToken},{type:"key",id:F.DataCD},{type:"key",id:F.PowerCube},{type:"key",id:F.ExplosiveCharges},{type:"key",id:F.Yellow},{type:"key",id:F.PowerCore},{type:"key",id:F.Pyramid},{type:"key",id:F.DataSpinner},{type:"key",id:F.Pass},{type:"key",id:F.Blue},{type:"key",id:F.Red},{type:"key",id:F.Green},{type:"key",id:F.CommanderHead},{type:"key",id:F.Airstrike},{type:"key",id:F.NukeContainer},{type:"key",id:F.Nuke},{type:"health",id:"health_small"},{type:"health",id:"health_medium"},{type:"health",id:"health_large"},{type:"health",id:"health_mega"},{type:"key",id:F.RedFlag},{type:"key",id:F.BlueFlag},{type:"powerup",id:M.TechResistance},{type:"powerup",id:M.TechStrength},{type:"powerup",id:M.TechHaste},{type:"powerup",id:M.TechRegeneration},{type:"powerup",id:M.Flashlight},{type:"powerup",id:M.Compass}];var lu=2048,Mt=class{constructor(t,r){this.configstrings=new Array(lu).fill("");this.entities=new Map;this.baselines=new Map;this.previousFrame=null;this.latestFrame=null;this.stats=new Array(32).fill(0);this.inventory=new Array(256).fill(0);this.imports=t,this.callbacks=r}setImports(t){this.imports=t}setCallbacks(t){this.callbacks=t}onServerData(t,r,n,i,s,a){console.log(`Demo: Server Data - Protocol: ${t}, Level: ${a}`),this.configstrings.fill(""),this.entities.clear(),this.baselines.clear(),this.latestFrame=null}onConfigString(t,r){this.configstrings[t]=r}onSpawnBaseline(t){this.baselines.set(t.number,structuredClone(t))}onFrame(t){this.latestFrame&&(this.previousFrame=this.latestFrame),this.latestFrame=t,this.stats=[...t.playerState.stats];let r=t.packetEntities,n=new Map;if(r.delta)for(let[i,s]of this.entities)n.set(i,structuredClone(s));for(let i of r.entities){if(i.bits&pn){n.delete(i.number);continue}let s=i.number,a;r.delta&&this.entities.has(s)?a=this.entities.get(s):this.baselines.has(s)?a=this.baselines.get(s):a=he();let o=structuredClone(a);this.applyDelta(o,i),n.set(s,o)}this.entities=n}applyDelta(t,r){let n=r.bits;t.number=r.number,n&Zt&&(t.modelindex=r.modelindex),n&Qt&&(t.modelindex2=r.modelindex2),n&er&&(t.modelindex3=r.modelindex3),n&tr&&(t.modelindex4=r.modelindex4),n&$t&&(t.frame=r.frame),n&Jt&&(t.frame=r.frame),(n&We||n&$e)&&(t.skinnum=r.skinnum),(n&Ve||n&Xe)&&(t.effects=r.effects),(n&He||n&Ke)&&(t.renderfx=r.renderfx),n&Vt&&(t.origin.x=r.origin.x),n&Wt&&(t.origin.y=r.origin.y),n&jt&&(t.origin.z=r.origin.z),n&qt&&(t.angles.x=r.angles.x),n&Kt&&(t.angles.y=r.angles.y),n&Xt&&(t.angles.z=r.angles.z),n&rr&&(t.old_origin.x=r.old_origin.x,t.old_origin.y=r.old_origin.y,t.old_origin.z=r.old_origin.z),n&nr&&(t.sound=r.sound),n&Yt&&(t.event=r.event),n&ir&&(t.solid=r.solid)}onCenterPrint(t){this.callbacks?.onCenterPrint?this.callbacks.onCenterPrint(t):console.log(`[Center]: ${t}`)}onStuffText(t){}onPrint(t,r){this.callbacks?.onPrint?this.callbacks.onPrint(t,r):console.log(`[Print ${t}]: ${r}`)}onSound(t,r,n,i,s,a,o){if(!this.imports?.engine.audio)return;let c=n??1,u=i??1,l=s??0;a&&a>0?this.imports.engine.audio.sound(a,0,r,c,u,l):o&&this.imports.engine.audio.positioned_sound(o,r,c,u)}onTempEntity(t,r,n,i,s,a,o,c,u){}onLayout(t){}onInventory(t){this.inventory=[...t]}onMuzzleFlash(t,r){}onMuzzleFlash2(t,r){}onDisconnect(){console.log("Demo disconnected")}onReconnect(){console.log("Demo reconnect")}onDownload(t,r,n){}convertFrameToPredictionState(t){let r=t.playerState,n={ammo:{caps:[],counts:[]},ownedWeapons:new Set,armor:null,powerups:new Map,keys:new Set};for(let c=0;c<this.inventory.length;c++){let u=this.inventory[c];if(u<=0)continue;if(c>=Hr.length)break;let l=Hr[c];switch(l.type){case"weapon":n.ownedWeapons.add(l.id);break;case"ammo":n.ammo.counts[l.id]||(n.ammo.counts[l.id]=0),n.ammo.counts[l.id]=u;break;case"armor":n.armor={armorType:l.id,armorCount:u};break;case"powerup":n.powerups.set(l.id,u);break;case"key":n.keys.add(l.id);break;case"health":break}}let i={...r.origin},s={...r.velocity},a={...r.viewangles},o={...r.delta_angles};return{origin:i,velocity:s,viewangles:a,pmFlags:r.pm_flags,pmType:r.pm_type,waterlevel:ue.None,gravity:r.gravity,deltaAngles:o,client:{inventory:n,weaponStates:{states:new Map}},health:r.stats[1],armor:r.stats[4],ammo:r.stats[2],blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}getPredictionState(t){if(!this.latestFrame)return te();let r=this.convertFrameToPredictionState(this.latestFrame);if(this.previousFrame&&t!==void 0){let n=this.latestFrame.serverFrame*100,i=this.previousFrame.serverFrame*100;if(t>=i&&t<=n){let s=(t-i)/(n-i),a=this.convertFrameToPredictionState(this.previousFrame);return ye(a,r,Math.max(0,Math.min(1,s)))}}return r}};var be=class{constructor(){this.strings=new Map;this.models=[];this.sounds=[];this.images=[]}set(t,r){if(this.strings.set(t,r),t>=V.Models&&t<V.Models+ur){let n=t-V.Models;this.models[n]=r}else if(t>=V.Sounds&&t<V.Sounds+dr){let n=t-V.Sounds;this.sounds[n]=r}else if(t>=V.Images&&t<V.Images+hr){let n=t-V.Images;this.images[n]=r}}get(t){return this.strings.get(t)}getModelName(t){return this.models[t]}getSoundName(t){return this.sounds[t]}getImageName(t){return this.images[t]}clear(){this.strings.clear(),this.models.length=0,this.sounds.length=0,this.images.length=0}};var uu=[{code:"KeyW",command:"+forward"},{code:"ArrowUp",command:"+forward"},{code:"KeyS",command:"+back"},{code:"ArrowDown",command:"+back"},{code:"KeyA",command:"+moveleft"},{code:"KeyD",command:"+moveright"},{code:"Space",command:"+jump"},{code:"ControlLeft",command:"+crouch"},{code:"ShiftLeft",command:"+speed"},{code:"Mouse1",command:"+attack"},{code:"Mouse2",command:"+use"},{code:"Mouse3",command:"+zoom"},{code:"ArrowLeft",command:"+left"},{code:"ArrowRight",command:"+right"},{code:"PageUp",command:"+lookup"},{code:"PageDown",command:"+lookdown"},{code:"Gamepad0-Button7",command:"+attack"},{code:"Gamepad0-Button6",command:"+zoom"},{code:"Gamepad0-Button0",command:"+jump"},{code:"Gamepad0-Button1",command:"+crouch"},{code:"Gamepad0-Button2",command:"+use"},{code:"Gamepad0-Button4",command:"prevweapon"},{code:"Gamepad0-Button5",command:"nextweapon"},{code:"Digit1",command:"weapon 1"},{code:"Digit2",command:"weapon 2"},{code:"Digit3",command:"weapon 3"},{code:"Digit4",command:"weapon 4"},{code:"Digit5",command:"weapon 5"},{code:"Digit6",command:"weapon 6"},{code:"Digit7",command:"weapon 7"},{code:"Digit8",command:"weapon 8"},{code:"Digit9",command:"weapon 9"},{code:"Digit0",command:"weapon 10"}],de=class{constructor(t=uu){this.bindings=new Map;for(let r of t)this.bind(r.code,r.command)}bind(t,r){this.bindings.set(t,r)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function Ai(){return new de}function Vr(e){return e}function Be(e){return e.trim().toLowerCase()}var du=250,Wr=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,r){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=r,!0):!1)}release(t,r){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=r-this.downTime,this.downTime=0,!0):!1}sample(t,r){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let n=this.msec;this.activeCodes.size>0&&(n+=r-this.downTime,this.downTime=r),this.msec=0;let i=Math.min(n/t,1),s=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:s,fraction:i}}},Pt=(y=>(y.Forward="+forward",y.Back="+back",y.MoveLeft="+moveleft",y.MoveRight="+moveright",y.MoveUp="+moveup",y.MoveDown="+movedown",y.Jump="+jump",y.Crouch="+crouch",y.Attack="+attack",y.Use="+use",y.Holster="+holster",y.TurnLeft="+left",y.TurnRight="+right",y.LookUp="+lookup",y.LookDown="+lookdown",y.SpeedModifier="+speed",y.Zoom="+zoom",y))(Pt||{}),hu={"+attack":q.Attack,"+use":q.Use,"+holster":q.Holster,"+jump":q.Jump,"+crouch":q.Crouch},mu=new Map(Object.values(Pt).map(e=>[Be(e),e]));function fu(e){return mu.get(Be(e))}function Ue(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var ze=class{constructor(t={},r=new de){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=r,this.forwardSpeed=t.forwardSpeed??Rn,this.sideSpeed=t.sideSpeed??kn,this.upSpeed=t.upSpeed??Tn,this.yawSpeed=t.yawSpeed??Mn,this.pitchSpeed=t.pitchSpeed??Pn,this.sensitivity=t.sensitivity??Nn,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,r=Ue()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!0,n,r)}handleKeyUp(t,r=Ue()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!1,n,r)}handleMouseButtonDown(t,r=Ue()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!0,n,r)}handleMouseButtonUp(t,r=Ue()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!1,n,r)}handleMouseMove(t,r){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+r})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,r=Ue(),n){this.pollGamepads(r),this.applyTouchState(r);let i=this.yawSpeed*t/1e3,s=this.pitchSpeed*t/1e3,a=this.sample("+left",t,r),o=this.sample("+right",t,r),c=this.sample("+lookup",t,r),l={x:(this.sample("+lookdown",t,r).fraction-c.fraction)*s,y:(o.fraction-a.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let k=this.gamepadLook.y*(this.invertGamepadY?-1:1);l={x:l.x+k*s*this.gamepadLookScale,y:l.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let k=this.touchLook.y*(this.invertMouseY?-1:1);l={x:l.x+k*s,y:l.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let k=this.sampleMouseDelta(),P=In(k,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});l={x:l.x+P.x,y:l.y+P.y,z:0}}let h=On(this.viewAngles,l);this.viewAngles=h;let d=this.sample("+forward",t,r),m=this.sample("+back",t,r),p=this.sample("+moveleft",t,r),g=this.sample("+moveright",t,r),f=this.sample("+moveup",t,r),y=this.sample("+movedown",t,r),S=this.sample("+speed",t,r),v=this.sample("+jump",t,r),_=this.sample("+crouch",t,r),x=this.runByDefault?S.active?.5:1:S.active?1:.5,w=this.forwardSpeed*(d.fraction-m.fraction)*x,z=this.sideSpeed*(g.fraction-p.fraction)*x,b=this.upSpeed*(f.fraction-y.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(w+=this.forwardSpeed*this.gamepadMove.y*x,z+=this.sideSpeed*this.gamepadMove.x*x),(this.touchMove.x!==0||this.touchMove.y!==0)&&(w+=this.forwardSpeed*this.touchMove.y*x,z+=this.sideSpeed*this.touchMove.x*x),this.jumpAddsUpMove&&v.fraction>0&&(b+=this.upSpeed*v.fraction),this.crouchAddsDownMove&&_.fraction>0&&(b-=this.upSpeed*_.fraction),w=this.clampMove(w,this.forwardSpeed),z=this.clampMove(z,this.sideSpeed),b=this.clampMove(b,this.upSpeed);let L=this.collectButtonBits(t,r),E=Math.min(Math.max(Math.round(t),1),du);return(this.anyPressed||L!==q.None)&&(L|=q.Any),this.anyPressed=!1,{msec:E,buttons:L,angles:{...this.viewAngles},forwardmove:w,sidemove:z,upmove:b,serverFrame:n}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let r=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let n=new Set;for(let i of r){if(!i||i.connected===!1)continue;let s=i.index??0,a=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(a[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(a[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(a[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(a[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let u=o[c];if(!u)continue;let l=u.pressed||u.value>this.gamepadDeadZone,h=this.gamepadButtonCode(s,c);l&&n.add(h);let d=this.gamepadButtons.get(h)??!1;l!==d&&(this.applyCommand(this.bindings.getBinding(h),l,h,t),this.gamepadButtons.set(h,l))}}for(let[i,s]of this.gamepadButtons.entries())s&&!n.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let r=this.pendingTouchState;if(r&&(this.pendingTouchState=void 0,r.move&&(this.touchMove={x:this.clampAnalog(r.move.x),y:this.clampAnalog(r.move.y)}),r.look&&(this.touchLook={x:this.clampAnalog(r.look.x),y:this.clampAnalog(r.look.y)}),r.buttons))for(let[n,i]of Object.entries(r.buttons)){if(i===void 0)continue;let s=this.touchButtons.get(n)??!1;i!==s&&(this.applyCommand(n,i,this.touchButtonCode(n),t),this.touchButtons.set(n,i))}}applyCommand(t,r,n,i){if(!t)return;let s=fu(t);if(s){let a=this.lookupButton(s);r?(a.press(n,i)&&this.commandQueue.push(s),this.anyPressed=!0):a.release(n,i)&&this.commandQueue.push(s.replace("+","-"))}else r&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let r={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,r}collectButtonBits(t,r){let n=q.None;for(let[i,s]of Object.entries(hu)){let a=this.sample(i,t,r);(a.fraction>0||a.active||a.wasPressed)&&(n|=s)}return n}lookupButton(t){let r=this.buttons.get(t);return r||(r=new Wr,this.buttons.set(t,r)),r}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,r,n){return this.lookupButton(t).sample(r,n)}gamepadButtonCode(t,r){return`Gamepad${t}-Button${r}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,r){return Math.abs(r)>Math.abs(t)?r:t}clampMove(t,r){return Math.max(-r,Math.min(r,t))}};var Nt=class{constructor(t,r=new ze(t)){this.queued=[];this.controller=r}captureFrame(t,r,n){let i=this.controller.buildCommand(t,r,n),s=this.controller.consumeConsoleCommands(),a={command:i,console:s};return this.queued.push(a),a}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function pu(e){let t=new ge(e.engine.trace),r=new ve,n=new Tt,i=new gn,s=new Mt(e);s.onCenterPrint=d=>n.addCenterPrint(d,s.latestFrame?.serverFrame??0),s.onPrint=(d,m)=>n.addNotify(m,s.latestFrame?.serverFrame??0);let a=new be;i.setHandler(s);let o,c,u,l;return e.host?.commands&&(e.host.commands.register("playdemo",d=>{if(d.length<1){console.log("usage: playdemo <filename>");return}let m=d[0];console.log(`playdemo: ${m}`),console.log("Note: Demo loading requires VFS access which is not yet fully integrated into this console command.")},"Play a recorded demo"),e.host.commands.register("crosshair",()=>{let d=Dn();console.log(`Crosshair changed to index ${d}`)},"Cycle through available crosshairs")),{init(d){this.Init(d)},Init(d){o=d,d?.state&&t.setAuthoritative(d),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(d){return t.enqueueCommand(d)},render(d){i.getState()===Te.Playing?c=s.getPredictionState():(d.latest?.state&&(t.setAuthoritative(d.latest),o=d.latest),d.previous?.state&&d.latest?.state?c=ye(d.previous.state,d.latest.state,d.alpha):c=d.latest?.state??d.previous?.state??t.getPredictedState());let p=d.latest&&d.previous?Math.max(0,d.latest.timeMs-d.previous.timeMs):0;if(u=r.sample(c,p),c){let{origin:f,viewangles:y}=c;l=new fn,l.position=O.fromValues(f.x,f.y,f.z),l.angles=O.fromValues(y.x,y.y,y.z),l.fov=90,l.aspect=4/3}let g={};if(e.engine.renderer&&c&&c.client){let f={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},y=d.latest?.timeMs??0;this.DrawHUD(f,y)}return g},DrawHUD(d,m){if(!e.engine.renderer||!c||!c.client)return;let p={origin:c.origin,velocity:c.velocity,viewAngles:c.viewangles,onGround:j(c.pmFlags,W.OnGround),waterLevel:c.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:c.damageAlpha??0,damageIndicators:c.damageIndicators??[],blend:c.blend??[0,0,0,0],pickupIcon:c.pickupIcon},g=i.getState(),f=g===Te.Playing||g===Te.Paused?(s.latestFrame?.serverFrame||0)*100:m;Si(e.engine.renderer,p,c.client,c.health,c.armor,c.ammo,d,n,f)},shutdown(){this.Shutdown()},Shutdown(){o=void 0,c=void 0},get prediction(){return t},get lastRendered(){return c},get view(){return r},get lastView(){return u},get camera(){return l},demoPlayback:i,ParseCenterPrint(d){let m=o?.timeMs??0;n.addCenterPrint(d,m)},ParseNotify(d){let m=o?.timeMs??0;n.addNotify(d,m)},ParseConfigString(d,m){a.set(d,m)},demoHandler:s,configStrings:a}}return Ri(gu);})();
|
|
2
2
|
//# sourceMappingURL=index.global.js.map
|