quake2ts 0.0.167 → 0.0.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";var Quake2Client=(()=>{var xr=Object.defineProperty;var iu=Object.getOwnPropertyDescriptor;var au=Object.getOwnPropertyNames;var su=Object.prototype.hasOwnProperty;var Sr=(e,t)=>{for(var n in t)xr(e,n,{get:t[n],enumerable:!0})},ou=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of au(t))!su.call(e,i)&&i!==n&&xr(e,i,{get:()=>t[i],enumerable:!(r=iu(t,i))||r.enumerable});return e};var cu=e=>ou(xr({},"__esModule",{value:!0}),e);var Lx={};Sr(Lx,{ClientConfigStrings:()=>At,ClientPrediction:()=>it,InputAction:()=>_r,InputBindings:()=>Qe,InputCommandBuffer:()=>yr,InputController:()=>Et,ViewEffects:()=>st,createClient:()=>Rx,createDefaultBindings:()=>ru,defaultPredictionState:()=>Ie,interpolatePredictionState:()=>at,normalizeCommand:()=>an,normalizeInputCode:()=>ya});var K=1e-6,pe=typeof Float32Array<"u"?Float32Array:Array,Ar=Math.random;function on(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var Ox=Math.PI/180,Tx=180/Math.PI;var X={};Sr(X,{add:()=>$u,adjoint:()=>gu,clone:()=>mu,copy:()=>du,create:()=>uu,decompose:()=>Tu,determinant:()=>vu,equals:()=>Zu,exactEquals:()=>qu,frob:()=>Xu,fromQuat:()=>Cu,fromQuat2:()=>Lu,fromRotation:()=>bu,fromRotationTranslation:()=>Ma,fromRotationTranslationScale:()=>Iu,fromRotationTranslationScaleOrigin:()=>Pu,fromScaling:()=>ku,fromTranslation:()=>Eu,fromValues:()=>lu,fromXRotation:()=>Mu,fromYRotation:()=>zu,fromZRotation:()=>Ru,frustum:()=>Du,getRotation:()=>Ou,getScaling:()=>za,getTranslation:()=>Nu,identity:()=>ka,invert:()=>pu,lookAt:()=>Hu,mul:()=>Ju,multiply:()=>ba,multiplyScalar:()=>Yu,multiplyScalarAndAdd:()=>ju,ortho:()=>Gu,orthoNO:()=>La,orthoZO:()=>Vu,perspective:()=>Fu,perspectiveFromFieldOfView:()=>Bu,perspectiveNO:()=>Ra,perspectiveZO:()=>Uu,rotate:()=>wu,rotateX:()=>xu,rotateY:()=>Su,rotateZ:()=>Au,scale:()=>yu,set:()=>hu,str:()=>Ku,sub:()=>Qu,subtract:()=>Na,targetTo:()=>Wu,translate:()=>_u,transpose:()=>fu});function uu(){var e=new pe(16);return pe!=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 mu(e){var t=new pe(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 du(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 lu(e,t,n,r,i,a,s,o,c,u,m,d,h,f,v,g){var l=new pe(16);return l[0]=e,l[1]=t,l[2]=n,l[3]=r,l[4]=i,l[5]=a,l[6]=s,l[7]=o,l[8]=c,l[9]=u,l[10]=m,l[11]=d,l[12]=h,l[13]=f,l[14]=v,l[15]=g,l}function hu(e,t,n,r,i,a,s,o,c,u,m,d,h,f,v,g,l){return e[0]=t,e[1]=n,e[2]=r,e[3]=i,e[4]=a,e[5]=s,e[6]=o,e[7]=c,e[8]=u,e[9]=m,e[10]=d,e[11]=h,e[12]=f,e[13]=v,e[14]=g,e[15]=l,e}function ka(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 fu(e,t){if(e===t){var n=t[1],r=t[2],i=t[3],a=t[6],s=t[7],o=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=a,e[11]=t[14],e[12]=i,e[13]=s,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 pu(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],s=t[4],o=t[5],c=t[6],u=t[7],m=t[8],d=t[9],h=t[10],f=t[11],v=t[12],g=t[13],l=t[14],_=t[15],w=n*o-r*s,x=n*c-i*s,A=n*u-a*s,E=r*c-i*o,p=r*u-a*o,y=i*u-a*c,S=m*g-d*v,R=m*l-h*v,b=m*_-f*v,P=d*l-h*g,C=d*_-f*g,G=h*_-f*l,D=w*G-x*C+A*P+E*b-p*R+y*S;return D?(D=1/D,e[0]=(o*G-c*C+u*P)*D,e[1]=(i*C-r*G-a*P)*D,e[2]=(g*y-l*p+_*E)*D,e[3]=(h*p-d*y-f*E)*D,e[4]=(c*b-s*G-u*R)*D,e[5]=(n*G-i*b+a*R)*D,e[6]=(l*A-v*y-_*x)*D,e[7]=(m*y-h*A+f*x)*D,e[8]=(s*C-o*b+u*S)*D,e[9]=(r*b-n*C-a*S)*D,e[10]=(v*p-g*A+_*w)*D,e[11]=(d*A-m*p-f*w)*D,e[12]=(o*R-s*P-c*S)*D,e[13]=(n*P-r*R+i*S)*D,e[14]=(g*x-v*E-l*w)*D,e[15]=(m*E-d*x+h*w)*D,e):null}function gu(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],s=t[4],o=t[5],c=t[6],u=t[7],m=t[8],d=t[9],h=t[10],f=t[11],v=t[12],g=t[13],l=t[14],_=t[15],w=n*o-r*s,x=n*c-i*s,A=n*u-a*s,E=r*c-i*o,p=r*u-a*o,y=i*u-a*c,S=m*g-d*v,R=m*l-h*v,b=m*_-f*v,P=d*l-h*g,C=d*_-f*g,G=h*_-f*l;return e[0]=o*G-c*C+u*P,e[1]=i*C-r*G-a*P,e[2]=g*y-l*p+_*E,e[3]=h*p-d*y-f*E,e[4]=c*b-s*G-u*R,e[5]=n*G-i*b+a*R,e[6]=l*A-v*y-_*x,e[7]=m*y-h*A+f*x,e[8]=s*C-o*b+u*S,e[9]=r*b-n*C-a*S,e[10]=v*p-g*A+_*w,e[11]=d*A-m*p-f*w,e[12]=o*R-s*P-c*S,e[13]=n*P-r*R+i*S,e[14]=g*x-v*E-l*w,e[15]=m*E-d*x+h*w,e}function vu(e){var t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],s=e[5],o=e[6],c=e[7],u=e[8],m=e[9],d=e[10],h=e[11],f=e[12],v=e[13],g=e[14],l=e[15],_=t*s-n*a,w=t*o-r*a,x=n*o-r*s,A=u*v-m*f,E=u*g-d*f,p=m*g-d*v,y=t*p-n*E+r*A,S=a*p-s*E+o*A,R=u*x-m*w+d*_,b=f*x-v*w+g*_;return c*y-i*S+l*R-h*b}function ba(e,t,n){var r=t[0],i=t[1],a=t[2],s=t[3],o=t[4],c=t[5],u=t[6],m=t[7],d=t[8],h=t[9],f=t[10],v=t[11],g=t[12],l=t[13],_=t[14],w=t[15],x=n[0],A=n[1],E=n[2],p=n[3];return e[0]=x*r+A*o+E*d+p*g,e[1]=x*i+A*c+E*h+p*l,e[2]=x*a+A*u+E*f+p*_,e[3]=x*s+A*m+E*v+p*w,x=n[4],A=n[5],E=n[6],p=n[7],e[4]=x*r+A*o+E*d+p*g,e[5]=x*i+A*c+E*h+p*l,e[6]=x*a+A*u+E*f+p*_,e[7]=x*s+A*m+E*v+p*w,x=n[8],A=n[9],E=n[10],p=n[11],e[8]=x*r+A*o+E*d+p*g,e[9]=x*i+A*c+E*h+p*l,e[10]=x*a+A*u+E*f+p*_,e[11]=x*s+A*m+E*v+p*w,x=n[12],A=n[13],E=n[14],p=n[15],e[12]=x*r+A*o+E*d+p*g,e[13]=x*i+A*c+E*h+p*l,e[14]=x*a+A*u+E*f+p*_,e[15]=x*s+A*m+E*v+p*w,e}function _u(e,t,n){var r=n[0],i=n[1],a=n[2],s,o,c,u,m,d,h,f,v,g,l,_;return t===e?(e[12]=t[0]*r+t[4]*i+t[8]*a+t[12],e[13]=t[1]*r+t[5]*i+t[9]*a+t[13],e[14]=t[2]*r+t[6]*i+t[10]*a+t[14],e[15]=t[3]*r+t[7]*i+t[11]*a+t[15]):(s=t[0],o=t[1],c=t[2],u=t[3],m=t[4],d=t[5],h=t[6],f=t[7],v=t[8],g=t[9],l=t[10],_=t[11],e[0]=s,e[1]=o,e[2]=c,e[3]=u,e[4]=m,e[5]=d,e[6]=h,e[7]=f,e[8]=v,e[9]=g,e[10]=l,e[11]=_,e[12]=s*r+m*i+v*a+t[12],e[13]=o*r+d*i+g*a+t[13],e[14]=c*r+h*i+l*a+t[14],e[15]=u*r+f*i+_*a+t[15]),e}function yu(e,t,n){var r=n[0],i=n[1],a=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function wu(e,t,n,r){var i=r[0],a=r[1],s=r[2],o=Math.sqrt(i*i+a*a+s*s),c,u,m,d,h,f,v,g,l,_,w,x,A,E,p,y,S,R,b,P,C,G,D,de;return o<K?null:(o=1/o,i*=o,a*=o,s*=o,c=Math.sin(n),u=Math.cos(n),m=1-u,d=t[0],h=t[1],f=t[2],v=t[3],g=t[4],l=t[5],_=t[6],w=t[7],x=t[8],A=t[9],E=t[10],p=t[11],y=i*i*m+u,S=a*i*m+s*c,R=s*i*m-a*c,b=i*a*m-s*c,P=a*a*m+u,C=s*a*m+i*c,G=i*s*m+a*c,D=a*s*m-i*c,de=s*s*m+u,e[0]=d*y+g*S+x*R,e[1]=h*y+l*S+A*R,e[2]=f*y+_*S+E*R,e[3]=v*y+w*S+p*R,e[4]=d*b+g*P+x*C,e[5]=h*b+l*P+A*C,e[6]=f*b+_*P+E*C,e[7]=v*b+w*P+p*C,e[8]=d*G+g*D+x*de,e[9]=h*G+l*D+A*de,e[10]=f*G+_*D+E*de,e[11]=v*G+w*D+p*de,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function xu(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[4],s=t[5],o=t[6],c=t[7],u=t[8],m=t[9],d=t[10],h=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=a*i+u*r,e[5]=s*i+m*r,e[6]=o*i+d*r,e[7]=c*i+h*r,e[8]=u*i-a*r,e[9]=m*i-s*r,e[10]=d*i-o*r,e[11]=h*i-c*r,e}function Su(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],s=t[1],o=t[2],c=t[3],u=t[8],m=t[9],d=t[10],h=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i-u*r,e[1]=s*i-m*r,e[2]=o*i-d*r,e[3]=c*i-h*r,e[8]=a*r+u*i,e[9]=s*r+m*i,e[10]=o*r+d*i,e[11]=c*r+h*i,e}function Au(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],s=t[1],o=t[2],c=t[3],u=t[4],m=t[5],d=t[6],h=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i+u*r,e[1]=s*i+m*r,e[2]=o*i+d*r,e[3]=c*i+h*r,e[4]=u*i-a*r,e[5]=m*i-s*r,e[6]=d*i-o*r,e[7]=h*i-c*r,e}function Eu(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 ku(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 bu(e,t,n){var r=n[0],i=n[1],a=n[2],s=Math.sqrt(r*r+i*i+a*a),o,c,u;return s<K?null:(s=1/s,r*=s,i*=s,a*=s,o=Math.sin(t),c=Math.cos(t),u=1-c,e[0]=r*r*u+c,e[1]=i*r*u+a*o,e[2]=a*r*u-i*o,e[3]=0,e[4]=r*i*u-a*o,e[5]=i*i*u+c,e[6]=a*i*u+r*o,e[7]=0,e[8]=r*a*u+i*o,e[9]=i*a*u-r*o,e[10]=a*a*u+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Mu(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r,e[6]=n,e[7]=0,e[8]=0,e[9]=-n,e[10]=r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function zu(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=0,e[2]=-n,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=n,e[9]=0,e[10]=r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ru(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=n,e[2]=0,e[3]=0,e[4]=-n,e[5]=r,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ma(e,t,n){var r=t[0],i=t[1],a=t[2],s=t[3],o=r+r,c=i+i,u=a+a,m=r*o,d=r*c,h=r*u,f=i*c,v=i*u,g=a*u,l=s*o,_=s*c,w=s*u;return e[0]=1-(f+g),e[1]=d+w,e[2]=h-_,e[3]=0,e[4]=d-w,e[5]=1-(m+g),e[6]=v+l,e[7]=0,e[8]=h+_,e[9]=v-l,e[10]=1-(m+f),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Lu(e,t){var n=new pe(3),r=-t[0],i=-t[1],a=-t[2],s=t[3],o=t[4],c=t[5],u=t[6],m=t[7],d=r*r+i*i+a*a+s*s;return d>0?(n[0]=(o*s+m*r+c*a-u*i)*2/d,n[1]=(c*s+m*i+u*r-o*a)*2/d,n[2]=(u*s+m*a+o*i-c*r)*2/d):(n[0]=(o*s+m*r+c*a-u*i)*2,n[1]=(c*s+m*i+u*r-o*a)*2,n[2]=(u*s+m*a+o*i-c*r)*2),Ma(e,t,n),e}function Nu(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function za(e,t){var n=t[0],r=t[1],i=t[2],a=t[4],s=t[5],o=t[6],c=t[8],u=t[9],m=t[10];return e[0]=Math.sqrt(n*n+r*r+i*i),e[1]=Math.sqrt(a*a+s*s+o*o),e[2]=Math.sqrt(c*c+u*u+m*m),e}function Ou(e,t){var n=new pe(3);za(n,t);var r=1/n[0],i=1/n[1],a=1/n[2],s=t[0]*r,o=t[1]*i,c=t[2]*a,u=t[4]*r,m=t[5]*i,d=t[6]*a,h=t[8]*r,f=t[9]*i,v=t[10]*a,g=s+m+v,l=0;return g>0?(l=Math.sqrt(g+1)*2,e[3]=.25*l,e[0]=(d-f)/l,e[1]=(h-c)/l,e[2]=(o-u)/l):s>m&&s>v?(l=Math.sqrt(1+s-m-v)*2,e[3]=(d-f)/l,e[0]=.25*l,e[1]=(o+u)/l,e[2]=(h+c)/l):m>v?(l=Math.sqrt(1+m-s-v)*2,e[3]=(h-c)/l,e[0]=(o+u)/l,e[1]=.25*l,e[2]=(d+f)/l):(l=Math.sqrt(1+v-s-m)*2,e[3]=(o-u)/l,e[0]=(h+c)/l,e[1]=(d+f)/l,e[2]=.25*l),e}function Tu(e,t,n,r){t[0]=r[12],t[1]=r[13],t[2]=r[14];var i=r[0],a=r[1],s=r[2],o=r[4],c=r[5],u=r[6],m=r[8],d=r[9],h=r[10];n[0]=Math.sqrt(i*i+a*a+s*s),n[1]=Math.sqrt(o*o+c*c+u*u),n[2]=Math.sqrt(m*m+d*d+h*h);var f=1/n[0],v=1/n[1],g=1/n[2],l=i*f,_=a*v,w=s*g,x=o*f,A=c*v,E=u*g,p=m*f,y=d*v,S=h*g,R=l+A+S,b=0;return R>0?(b=Math.sqrt(R+1)*2,e[3]=.25*b,e[0]=(E-y)/b,e[1]=(p-w)/b,e[2]=(_-x)/b):l>A&&l>S?(b=Math.sqrt(1+l-A-S)*2,e[3]=(E-y)/b,e[0]=.25*b,e[1]=(_+x)/b,e[2]=(p+w)/b):A>S?(b=Math.sqrt(1+A-l-S)*2,e[3]=(p-w)/b,e[0]=(_+x)/b,e[1]=.25*b,e[2]=(E+y)/b):(b=Math.sqrt(1+S-l-A)*2,e[3]=(_-x)/b,e[0]=(p+w)/b,e[1]=(E+y)/b,e[2]=.25*b),e}function Iu(e,t,n,r){var i=t[0],a=t[1],s=t[2],o=t[3],c=i+i,u=a+a,m=s+s,d=i*c,h=i*u,f=i*m,v=a*u,g=a*m,l=s*m,_=o*c,w=o*u,x=o*m,A=r[0],E=r[1],p=r[2];return e[0]=(1-(v+l))*A,e[1]=(h+x)*A,e[2]=(f-w)*A,e[3]=0,e[4]=(h-x)*E,e[5]=(1-(d+l))*E,e[6]=(g+_)*E,e[7]=0,e[8]=(f+w)*p,e[9]=(g-_)*p,e[10]=(1-(d+v))*p,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Pu(e,t,n,r,i){var a=t[0],s=t[1],o=t[2],c=t[3],u=a+a,m=s+s,d=o+o,h=a*u,f=a*m,v=a*d,g=s*m,l=s*d,_=o*d,w=c*u,x=c*m,A=c*d,E=r[0],p=r[1],y=r[2],S=i[0],R=i[1],b=i[2],P=(1-(g+_))*E,C=(f+A)*E,G=(v-x)*E,D=(f-A)*p,de=(1-(h+_))*p,Ye=(l+w)*p,fe=(v+x)*y,Sa=(l-w)*y,Aa=(1-(h+g))*y;return e[0]=P,e[1]=C,e[2]=G,e[3]=0,e[4]=D,e[5]=de,e[6]=Ye,e[7]=0,e[8]=fe,e[9]=Sa,e[10]=Aa,e[11]=0,e[12]=n[0]+S-(P*S+D*R+fe*b),e[13]=n[1]+R-(C*S+de*R+Sa*b),e[14]=n[2]+b-(G*S+Ye*R+Aa*b),e[15]=1,e}function Cu(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],s=n+n,o=r+r,c=i+i,u=n*s,m=r*s,d=r*o,h=i*s,f=i*o,v=i*c,g=a*s,l=a*o,_=a*c;return e[0]=1-d-v,e[1]=m+_,e[2]=h-l,e[3]=0,e[4]=m-_,e[5]=1-u-v,e[6]=f+g,e[7]=0,e[8]=h+l,e[9]=f-g,e[10]=1-u-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Du(e,t,n,r,i,a,s){var o=1/(n-t),c=1/(i-r),u=1/(a-s);return e[0]=a*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a*2*c,e[6]=0,e[7]=0,e[8]=(n+t)*o,e[9]=(i+r)*c,e[10]=(s+a)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*a*2*u,e[15]=0,e}function Ra(e,t,n,r,i){var a=1/Math.tan(t/2);if(e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,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 s=1/(r-i);e[10]=(i+r)*s,e[14]=2*i*r*s}else e[10]=-1,e[14]=-2*r;return e}var Fu=Ra;function Uu(e,t,n,r,i){var a=1/Math.tan(t/2);if(e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,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 s=1/(r-i);e[10]=i*s,e[14]=i*r*s}else e[10]=-1,e[14]=-r;return e}function Bu(e,t,n,r){var i=Math.tan(t.upDegrees*Math.PI/180),a=Math.tan(t.downDegrees*Math.PI/180),s=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(s+o),u=2/(i+a);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]=-((s-o)*c*.5),e[9]=(i-a)*u*.5,e[10]=r/(n-r),e[11]=-1,e[12]=0,e[13]=0,e[14]=r*n/(n-r),e[15]=0,e}function La(e,t,n,r,i,a,s){var o=1/(t-n),c=1/(r-i),u=1/(a-s);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+n)*o,e[13]=(i+r)*c,e[14]=(s+a)*u,e[15]=1,e}var Gu=La;function Vu(e,t,n,r,i,a,s){var o=1/(t-n),c=1/(r-i),u=1/(a-s);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+n)*o,e[13]=(i+r)*c,e[14]=a*u,e[15]=1,e}function Hu(e,t,n,r){var i,a,s,o,c,u,m,d,h,f,v=t[0],g=t[1],l=t[2],_=r[0],w=r[1],x=r[2],A=n[0],E=n[1],p=n[2];return Math.abs(v-A)<K&&Math.abs(g-E)<K&&Math.abs(l-p)<K?ka(e):(m=v-A,d=g-E,h=l-p,f=1/Math.sqrt(m*m+d*d+h*h),m*=f,d*=f,h*=f,i=w*h-x*d,a=x*m-_*h,s=_*d-w*m,f=Math.sqrt(i*i+a*a+s*s),f?(f=1/f,i*=f,a*=f,s*=f):(i=0,a=0,s=0),o=d*s-h*a,c=h*i-m*s,u=m*a-d*i,f=Math.sqrt(o*o+c*c+u*u),f?(f=1/f,o*=f,c*=f,u*=f):(o=0,c=0,u=0),e[0]=i,e[1]=o,e[2]=m,e[3]=0,e[4]=a,e[5]=c,e[6]=d,e[7]=0,e[8]=s,e[9]=u,e[10]=h,e[11]=0,e[12]=-(i*v+a*g+s*l),e[13]=-(o*v+c*g+u*l),e[14]=-(m*v+d*g+h*l),e[15]=1,e)}function Wu(e,t,n,r){var i=t[0],a=t[1],s=t[2],o=r[0],c=r[1],u=r[2],m=i-n[0],d=a-n[1],h=s-n[2],f=m*m+d*d+h*h;f>0&&(f=1/Math.sqrt(f),m*=f,d*=f,h*=f);var v=c*h-u*d,g=u*m-o*h,l=o*d-c*m;return f=v*v+g*g+l*l,f>0&&(f=1/Math.sqrt(f),v*=f,g*=f,l*=f),e[0]=v,e[1]=g,e[2]=l,e[3]=0,e[4]=d*l-h*g,e[5]=h*v-m*l,e[6]=m*g-d*v,e[7]=0,e[8]=m,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=a,e[14]=s,e[15]=1,e}function Ku(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 Xu(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 $u(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e[9]=t[9]+n[9],e[10]=t[10]+n[10],e[11]=t[11]+n[11],e[12]=t[12]+n[12],e[13]=t[13]+n[13],e[14]=t[14]+n[14],e[15]=t[15]+n[15],e}function Na(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e[9]=t[9]-n[9],e[10]=t[10]-n[10],e[11]=t[11]-n[11],e[12]=t[12]-n[12],e[13]=t[13]-n[13],e[14]=t[14]-n[14],e[15]=t[15]-n[15],e}function Yu(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e[9]=t[9]*n,e[10]=t[10]*n,e[11]=t[11]*n,e[12]=t[12]*n,e[13]=t[13]*n,e[14]=t[14]*n,e[15]=t[15]*n,e}function ju(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e[4]=t[4]+n[4]*r,e[5]=t[5]+n[5]*r,e[6]=t[6]+n[6]*r,e[7]=t[7]+n[7]*r,e[8]=t[8]+n[8]*r,e[9]=t[9]+n[9]*r,e[10]=t[10]+n[10]*r,e[11]=t[11]+n[11]*r,e[12]=t[12]+n[12]*r,e[13]=t[13]+n[13]*r,e[14]=t[14]+n[14]*r,e[15]=t[15]+n[15]*r,e}function qu(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 Zu(e,t){var n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],o=e[5],c=e[6],u=e[7],m=e[8],d=e[9],h=e[10],f=e[11],v=e[12],g=e[13],l=e[14],_=e[15],w=t[0],x=t[1],A=t[2],E=t[3],p=t[4],y=t[5],S=t[6],R=t[7],b=t[8],P=t[9],C=t[10],G=t[11],D=t[12],de=t[13],Ye=t[14],fe=t[15];return Math.abs(n-w)<=K*Math.max(1,Math.abs(n),Math.abs(w))&&Math.abs(r-x)<=K*Math.max(1,Math.abs(r),Math.abs(x))&&Math.abs(i-A)<=K*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(a-E)<=K*Math.max(1,Math.abs(a),Math.abs(E))&&Math.abs(s-p)<=K*Math.max(1,Math.abs(s),Math.abs(p))&&Math.abs(o-y)<=K*Math.max(1,Math.abs(o),Math.abs(y))&&Math.abs(c-S)<=K*Math.max(1,Math.abs(c),Math.abs(S))&&Math.abs(u-R)<=K*Math.max(1,Math.abs(u),Math.abs(R))&&Math.abs(m-b)<=K*Math.max(1,Math.abs(m),Math.abs(b))&&Math.abs(d-P)<=K*Math.max(1,Math.abs(d),Math.abs(P))&&Math.abs(h-C)<=K*Math.max(1,Math.abs(h),Math.abs(C))&&Math.abs(f-G)<=K*Math.max(1,Math.abs(f),Math.abs(G))&&Math.abs(v-D)<=K*Math.max(1,Math.abs(v),Math.abs(D))&&Math.abs(g-de)<=K*Math.max(1,Math.abs(g),Math.abs(de))&&Math.abs(l-Ye)<=K*Math.max(1,Math.abs(l),Math.abs(Ye))&&Math.abs(_-fe)<=K*Math.max(1,Math.abs(_),Math.abs(fe))}var Ju=ba,Qu=Na;var $={};Sr($,{add:()=>im,angle:()=>Mm,bezier:()=>ym,ceil:()=>am,clone:()=>em,copy:()=>nm,create:()=>Oa,cross:()=>pm,dist:()=>Pm,distance:()=>Da,div:()=>Im,divide:()=>Ca,dot:()=>Er,equals:()=>Nm,exactEquals:()=>Lm,floor:()=>sm,forEach:()=>Um,fromValues:()=>tm,hermite:()=>_m,inverse:()=>hm,len:()=>Dm,length:()=>Ta,lerp:()=>gm,max:()=>cm,min:()=>om,mul:()=>Tm,multiply:()=>Pa,negate:()=>lm,normalize:()=>fm,random:()=>wm,rotateX:()=>Em,rotateY:()=>km,rotateZ:()=>bm,round:()=>um,scale:()=>mm,scaleAndAdd:()=>dm,set:()=>rm,slerp:()=>vm,sqrDist:()=>Cm,sqrLen:()=>Fm,squaredDistance:()=>Fa,squaredLength:()=>Ua,str:()=>Rm,sub:()=>Om,subtract:()=>Ia,transformMat3:()=>Sm,transformMat4:()=>xm,transformQuat:()=>Am,zero:()=>zm});function Oa(){var e=new pe(3);return pe!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function em(e){var t=new pe(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Ta(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function tm(e,t,n){var r=new pe(3);return r[0]=e,r[1]=t,r[2]=n,r}function nm(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function rm(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function im(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function Ia(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function Pa(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function Ca(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function am(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function sm(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function om(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function cm(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function um(e,t){return e[0]=on(t[0]),e[1]=on(t[1]),e[2]=on(t[2]),e}function mm(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function dm(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e}function Da(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+r*r+i*i)}function Fa(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return n*n+r*r+i*i}function Ua(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function lm(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function hm(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function fm(e,t){var n=t[0],r=t[1],i=t[2],a=n*n+r*r+i*i;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function Er(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function pm(e,t,n){var r=t[0],i=t[1],a=t[2],s=n[0],o=n[1],c=n[2];return e[0]=i*c-a*o,e[1]=a*s-r*c,e[2]=r*o-i*s,e}function gm(e,t,n,r){var i=t[0],a=t[1],s=t[2];return e[0]=i+r*(n[0]-i),e[1]=a+r*(n[1]-a),e[2]=s+r*(n[2]-s),e}function vm(e,t,n,r){var i=Math.acos(Math.min(Math.max(Er(t,n),-1),1)),a=Math.sin(i),s=Math.sin((1-r)*i)/a,o=Math.sin(r*i)/a;return e[0]=s*t[0]+o*n[0],e[1]=s*t[1]+o*n[1],e[2]=s*t[2]+o*n[2],e}function _m(e,t,n,r,i,a){var s=a*a,o=s*(2*a-3)+1,c=s*(a-2)+a,u=s*(a-1),m=s*(3-2*a);return e[0]=t[0]*o+n[0]*c+r[0]*u+i[0]*m,e[1]=t[1]*o+n[1]*c+r[1]*u+i[1]*m,e[2]=t[2]*o+n[2]*c+r[2]*u+i[2]*m,e}function ym(e,t,n,r,i,a){var s=1-a,o=s*s,c=a*a,u=o*s,m=3*a*o,d=3*c*s,h=c*a;return e[0]=t[0]*u+n[0]*m+r[0]*d+i[0]*h,e[1]=t[1]*u+n[1]*m+r[1]*d+i[1]*h,e[2]=t[2]*u+n[2]*m+r[2]*d+i[2]*h,e}function wm(e,t){t=t===void 0?1:t;var n=Ar()*2*Math.PI,r=Ar()*2-1,i=Math.sqrt(1-r*r)*t;return e[0]=Math.cos(n)*i,e[1]=Math.sin(n)*i,e[2]=r*t,e}function xm(e,t,n){var r=t[0],i=t[1],a=t[2],s=n[3]*r+n[7]*i+n[11]*a+n[15];return s=s||1,e[0]=(n[0]*r+n[4]*i+n[8]*a+n[12])/s,e[1]=(n[1]*r+n[5]*i+n[9]*a+n[13])/s,e[2]=(n[2]*r+n[6]*i+n[10]*a+n[14])/s,e}function Sm(e,t,n){var r=t[0],i=t[1],a=t[2];return e[0]=r*n[0]+i*n[3]+a*n[6],e[1]=r*n[1]+i*n[4]+a*n[7],e[2]=r*n[2]+i*n[5]+a*n[8],e}function Am(e,t,n){var r=n[0],i=n[1],a=n[2],s=n[3],o=t[0],c=t[1],u=t[2],m=i*u-a*c,d=a*o-r*u,h=r*c-i*o;return m=m+m,d=d+d,h=h+h,e[0]=o+s*m+i*h-a*d,e[1]=c+s*d+a*m-r*h,e[2]=u+s*h+r*d-i*m,e}function Em(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0],a[1]=i[1]*Math.cos(r)-i[2]*Math.sin(r),a[2]=i[1]*Math.sin(r)+i[2]*Math.cos(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function km(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[2]*Math.sin(r)+i[0]*Math.cos(r),a[1]=i[1],a[2]=i[2]*Math.cos(r)-i[0]*Math.sin(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function bm(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0]*Math.cos(r)-i[1]*Math.sin(r),a[1]=i[0]*Math.sin(r)+i[1]*Math.cos(r),a[2]=i[2],e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function Mm(e,t){var n=e[0],r=e[1],i=e[2],a=t[0],s=t[1],o=t[2],c=Math.sqrt((n*n+r*r+i*i)*(a*a+s*s+o*o)),u=c&&Er(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function zm(e){return e[0]=0,e[1]=0,e[2]=0,e}function Rm(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Lm(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Nm(e,t){var n=e[0],r=e[1],i=e[2],a=t[0],s=t[1],o=t[2];return Math.abs(n-a)<=K*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(r-s)<=K*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-o)<=K*Math.max(1,Math.abs(i),Math.abs(o))}var Om=Ia,Tm=Pa,Im=Ca,Pm=Da,Cm=Fa,Dm=Ta,Fm=Ua,Um=(function(){var e=Oa();return function(t,n,r,i,a,s){var o,c;for(n||(n=3),r||(r=0),i?c=Math.min(i*n+r,t.length):c=t.length,o=r;o<c;o+=n)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],a(e,e,s),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var Bm=Object.defineProperty,Ga=(e,t)=>{for(var n in t)Bm(e,n,{get:t[n],enumerable:!0})};var Px=Math.PI/180;var Gm=Math.PI/180,Cx=180/Math.PI,kt=Gm,Vm=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];var ke=1,Ue=2;var zr=8,Rr=16,Hm=32;var Wm=16384;var fn=65536,Va=1<<17,Km=1<<18,Xm=1<<19,$m=1<<20,Ym=1<<21,jm=1<<22,qm=1<<23,Dx=1<<24,pn=1<<25,Zm=1<<26,Fx=1<<27,Ux=1<<28,Bx=1<<29,gn=1<<30,Gx=1<<31;var Vx=1<<25,Hx=1<<28,Wx=1<<29,Kx=1<<30,Xx=1<<31,$x=ke|Ue,Yx=ke|fn|Ue|pn|gn,jx=ke|fn|Ue,qx=ke|Va|Ue|pn|gn,Zx=Hm|zr|Rr,Jx=ke|Rr|zr,Jm=ke|pn|gn|Ue|Zm,Qx=Km|Xm|$m|Ym|jm|qm,eS=ke|zr|Rr|pn|gn,tS=ke|fn|Ue,nS=ke|Ue,rS=ke|fn|Ue|Va,iS=Jm|Wm,aS=Number.MAX_SAFE_INTEGER-1;var Ha=256,Qm=256,ed=8192,td=2048,nd=512,rd=256,id=Ha*2,ad=256,kr=32;var Wa=(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+ed]="Sounds",e[e.Images=e.Sounds+td]="Images",e[e.Lights=e.Images+nd]="Lights",e[e.ShadowLights=e.Lights+Qm]="ShadowLights",e[e.Items=e.ShadowLights+ad]="Items",e[e.PlayerSkins=e.Items+rd]="PlayerSkins",e[e.General=e.PlayerSkins+Ha]="General",e[e.WheelWeapons=e.General+id]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+kr]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+kr]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+kr]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Wa||{}),sS=Wa.MaxConfigStrings;var sd={};Ga(sd,{addReplayFrame:()=>md,createReplaySession:()=>ud,deserializeReplay:()=>cd,serializeReplay:()=>od});function od(e){return JSON.stringify(e,null,2)}function cd(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 ud(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function md(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var V=(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))(V||{}),M=(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[e.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",e[e.BFG_ZAP=57]="BFG_ZAP",e[e.BERSERK_SLAM=58]="BERSERK_SLAM",e[e.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",e[e.POWER_SPLASH=60]="POWER_SPLASH",e[e.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",e[e.EXPLOSION1_NL=62]="EXPLOSION1_NL",e[e.EXPLOSION2_NL=63]="EXPLOSION2_NL",e))(M||{}),dd={};Ga(dd,{U_ANGLE1:()=>_d,U_ANGLE2:()=>yd,U_ANGLE3:()=>wd,U_EFFECTS:()=>Ad,U_EVENT:()=>bd,U_FRAME:()=>xd,U_MODEL:()=>hd,U_MODEL2:()=>zd,U_MODEL3:()=>Rd,U_MODEL4:()=>Ld,U_MOREBITS:()=>Md,U_NUMBER:()=>ld,U_ORIGIN1:()=>pd,U_ORIGIN2:()=>gd,U_ORIGIN3:()=>vd,U_REMOVE:()=>Nd,U_RENDERFX:()=>Ed,U_SKIN:()=>Sd,U_SOLID:()=>kd,U_SOUND:()=>fd});var ld=1,hd=2,fd=4,pd=8,gd=16,vd=32,_d=64,yd=128,wd=256,xd=512,Sd=1024,Ad=2048,Ed=4096,kd=8192,bd=16384,Md=32768,zd=1,Rd=2,Ld=4,Nd=32768,Od=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){let t=this.readByte();if(t>=162){e.x=0,e.y=0,e.z=0;return}let n=Vm[t];e.x=n[0],e.y=n[1],e.z=n[2]}};function Td(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let n=t;for(let r=0;r<8;r+=1)n=(n&1)!==0?3988292384^n>>>1:n>>>1;e[t]=n>>>0}return e}var oS=Td();var cS=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 Id=19,uS=8+Id*8;var Mr=4,br=7*Mr,mS=[{index:0,size:3,type:5126,stride:br,offset:0},{index:1,size:2,type:5126,stride:br,offset:3*Mr},{index:2,size:2,type:5126,stride:br,offset:5*Mr}];var Ka=32;var dS=`#version 300 es
1
+ "use strict";var Quake2Client=(()=>{var wr=Object.defineProperty;var iu=Object.getOwnPropertyDescriptor;var au=Object.getOwnPropertyNames;var su=Object.prototype.hasOwnProperty;var Sr=(e,t)=>{for(var n in t)wr(e,n,{get:t[n],enumerable:!0})},ou=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of au(t))!su.call(e,i)&&i!==n&&wr(e,i,{get:()=>t[i],enumerable:!(r=iu(t,i))||r.enumerable});return e};var cu=e=>ou(wr({},"__esModule",{value:!0}),e);var Iw={};Sr(Iw,{ClientConfigStrings:()=>bt,ClientPrediction:()=>it,InputAction:()=>_r,InputBindings:()=>Qe,InputCommandBuffer:()=>yr,InputController:()=>Mt,ViewEffects:()=>st,createClient:()=>Tw,createDefaultBindings:()=>ru,defaultPredictionState:()=>Ie,interpolatePredictionState:()=>at,normalizeCommand:()=>an,normalizeInputCode:()=>xa});var K=1e-6,ge=typeof Float32Array<"u"?Float32Array:Array,Ar=Math.random;function on(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var Cw=Math.PI/180,Fw=180/Math.PI;var X={};Sr(X,{add:()=>$u,adjoint:()=>gu,clone:()=>mu,copy:()=>du,create:()=>uu,decompose:()=>Tu,determinant:()=>vu,equals:()=>Zu,exactEquals:()=>qu,frob:()=>Xu,fromQuat:()=>Cu,fromQuat2:()=>Lu,fromRotation:()=>bu,fromRotationTranslation:()=>za,fromRotationTranslationScale:()=>Iu,fromRotationTranslationScaleOrigin:()=>Pu,fromScaling:()=>Eu,fromTranslation:()=>ku,fromValues:()=>lu,fromXRotation:()=>Mu,fromYRotation:()=>zu,fromZRotation:()=>Ru,frustum:()=>Fu,getRotation:()=>Ou,getScaling:()=>Ra,getTranslation:()=>Nu,identity:()=>ba,invert:()=>pu,lookAt:()=>Hu,mul:()=>Ju,multiply:()=>Ma,multiplyScalar:()=>Yu,multiplyScalarAndAdd:()=>ju,ortho:()=>Gu,orthoNO:()=>Na,orthoZO:()=>Vu,perspective:()=>Du,perspectiveFromFieldOfView:()=>Bu,perspectiveNO:()=>La,perspectiveZO:()=>Uu,rotate:()=>xu,rotateX:()=>wu,rotateY:()=>Su,rotateZ:()=>Au,scale:()=>yu,set:()=>hu,str:()=>Ku,sub:()=>Qu,subtract:()=>Oa,targetTo:()=>Wu,translate:()=>_u,transpose:()=>fu});function uu(){var e=new ge(16);return ge!=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 mu(e){var t=new ge(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 du(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 lu(e,t,n,r,i,a,s,o,c,u,m,d,h,f,p,v){var l=new ge(16);return l[0]=e,l[1]=t,l[2]=n,l[3]=r,l[4]=i,l[5]=a,l[6]=s,l[7]=o,l[8]=c,l[9]=u,l[10]=m,l[11]=d,l[12]=h,l[13]=f,l[14]=p,l[15]=v,l}function hu(e,t,n,r,i,a,s,o,c,u,m,d,h,f,p,v,l){return e[0]=t,e[1]=n,e[2]=r,e[3]=i,e[4]=a,e[5]=s,e[6]=o,e[7]=c,e[8]=u,e[9]=m,e[10]=d,e[11]=h,e[12]=f,e[13]=p,e[14]=v,e[15]=l,e}function ba(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 fu(e,t){if(e===t){var n=t[1],r=t[2],i=t[3],a=t[6],s=t[7],o=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=a,e[11]=t[14],e[12]=i,e[13]=s,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 pu(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],s=t[4],o=t[5],c=t[6],u=t[7],m=t[8],d=t[9],h=t[10],f=t[11],p=t[12],v=t[13],l=t[14],_=t[15],x=n*o-r*s,w=n*c-i*s,A=n*u-a*s,k=r*c-i*o,g=r*u-a*o,y=i*u-a*c,S=m*v-d*p,R=m*l-h*p,b=m*_-f*p,P=d*l-h*v,C=d*_-f*v,G=h*_-f*l,F=x*G-w*C+A*P+k*b-g*R+y*S;return F?(F=1/F,e[0]=(o*G-c*C+u*P)*F,e[1]=(i*C-r*G-a*P)*F,e[2]=(v*y-l*g+_*k)*F,e[3]=(h*g-d*y-f*k)*F,e[4]=(c*b-s*G-u*R)*F,e[5]=(n*G-i*b+a*R)*F,e[6]=(l*A-p*y-_*w)*F,e[7]=(m*y-h*A+f*w)*F,e[8]=(s*C-o*b+u*S)*F,e[9]=(r*b-n*C-a*S)*F,e[10]=(p*g-v*A+_*x)*F,e[11]=(d*A-m*g-f*x)*F,e[12]=(o*R-s*P-c*S)*F,e[13]=(n*P-r*R+i*S)*F,e[14]=(v*w-p*k-l*x)*F,e[15]=(m*k-d*w+h*x)*F,e):null}function gu(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],s=t[4],o=t[5],c=t[6],u=t[7],m=t[8],d=t[9],h=t[10],f=t[11],p=t[12],v=t[13],l=t[14],_=t[15],x=n*o-r*s,w=n*c-i*s,A=n*u-a*s,k=r*c-i*o,g=r*u-a*o,y=i*u-a*c,S=m*v-d*p,R=m*l-h*p,b=m*_-f*p,P=d*l-h*v,C=d*_-f*v,G=h*_-f*l;return e[0]=o*G-c*C+u*P,e[1]=i*C-r*G-a*P,e[2]=v*y-l*g+_*k,e[3]=h*g-d*y-f*k,e[4]=c*b-s*G-u*R,e[5]=n*G-i*b+a*R,e[6]=l*A-p*y-_*w,e[7]=m*y-h*A+f*w,e[8]=s*C-o*b+u*S,e[9]=r*b-n*C-a*S,e[10]=p*g-v*A+_*x,e[11]=d*A-m*g-f*x,e[12]=o*R-s*P-c*S,e[13]=n*P-r*R+i*S,e[14]=v*w-p*k-l*x,e[15]=m*k-d*w+h*x,e}function vu(e){var t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],s=e[5],o=e[6],c=e[7],u=e[8],m=e[9],d=e[10],h=e[11],f=e[12],p=e[13],v=e[14],l=e[15],_=t*s-n*a,x=t*o-r*a,w=n*o-r*s,A=u*p-m*f,k=u*v-d*f,g=m*v-d*p,y=t*g-n*k+r*A,S=a*g-s*k+o*A,R=u*w-m*x+d*_,b=f*w-p*x+v*_;return c*y-i*S+l*R-h*b}function Ma(e,t,n){var r=t[0],i=t[1],a=t[2],s=t[3],o=t[4],c=t[5],u=t[6],m=t[7],d=t[8],h=t[9],f=t[10],p=t[11],v=t[12],l=t[13],_=t[14],x=t[15],w=n[0],A=n[1],k=n[2],g=n[3];return e[0]=w*r+A*o+k*d+g*v,e[1]=w*i+A*c+k*h+g*l,e[2]=w*a+A*u+k*f+g*_,e[3]=w*s+A*m+k*p+g*x,w=n[4],A=n[5],k=n[6],g=n[7],e[4]=w*r+A*o+k*d+g*v,e[5]=w*i+A*c+k*h+g*l,e[6]=w*a+A*u+k*f+g*_,e[7]=w*s+A*m+k*p+g*x,w=n[8],A=n[9],k=n[10],g=n[11],e[8]=w*r+A*o+k*d+g*v,e[9]=w*i+A*c+k*h+g*l,e[10]=w*a+A*u+k*f+g*_,e[11]=w*s+A*m+k*p+g*x,w=n[12],A=n[13],k=n[14],g=n[15],e[12]=w*r+A*o+k*d+g*v,e[13]=w*i+A*c+k*h+g*l,e[14]=w*a+A*u+k*f+g*_,e[15]=w*s+A*m+k*p+g*x,e}function _u(e,t,n){var r=n[0],i=n[1],a=n[2],s,o,c,u,m,d,h,f,p,v,l,_;return t===e?(e[12]=t[0]*r+t[4]*i+t[8]*a+t[12],e[13]=t[1]*r+t[5]*i+t[9]*a+t[13],e[14]=t[2]*r+t[6]*i+t[10]*a+t[14],e[15]=t[3]*r+t[7]*i+t[11]*a+t[15]):(s=t[0],o=t[1],c=t[2],u=t[3],m=t[4],d=t[5],h=t[6],f=t[7],p=t[8],v=t[9],l=t[10],_=t[11],e[0]=s,e[1]=o,e[2]=c,e[3]=u,e[4]=m,e[5]=d,e[6]=h,e[7]=f,e[8]=p,e[9]=v,e[10]=l,e[11]=_,e[12]=s*r+m*i+p*a+t[12],e[13]=o*r+d*i+v*a+t[13],e[14]=c*r+h*i+l*a+t[14],e[15]=u*r+f*i+_*a+t[15]),e}function yu(e,t,n){var r=n[0],i=n[1],a=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function xu(e,t,n,r){var i=r[0],a=r[1],s=r[2],o=Math.sqrt(i*i+a*a+s*s),c,u,m,d,h,f,p,v,l,_,x,w,A,k,g,y,S,R,b,P,C,G,F,de;return o<K?null:(o=1/o,i*=o,a*=o,s*=o,c=Math.sin(n),u=Math.cos(n),m=1-u,d=t[0],h=t[1],f=t[2],p=t[3],v=t[4],l=t[5],_=t[6],x=t[7],w=t[8],A=t[9],k=t[10],g=t[11],y=i*i*m+u,S=a*i*m+s*c,R=s*i*m-a*c,b=i*a*m-s*c,P=a*a*m+u,C=s*a*m+i*c,G=i*s*m+a*c,F=a*s*m-i*c,de=s*s*m+u,e[0]=d*y+v*S+w*R,e[1]=h*y+l*S+A*R,e[2]=f*y+_*S+k*R,e[3]=p*y+x*S+g*R,e[4]=d*b+v*P+w*C,e[5]=h*b+l*P+A*C,e[6]=f*b+_*P+k*C,e[7]=p*b+x*P+g*C,e[8]=d*G+v*F+w*de,e[9]=h*G+l*F+A*de,e[10]=f*G+_*F+k*de,e[11]=p*G+x*F+g*de,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function wu(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[4],s=t[5],o=t[6],c=t[7],u=t[8],m=t[9],d=t[10],h=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=a*i+u*r,e[5]=s*i+m*r,e[6]=o*i+d*r,e[7]=c*i+h*r,e[8]=u*i-a*r,e[9]=m*i-s*r,e[10]=d*i-o*r,e[11]=h*i-c*r,e}function Su(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],s=t[1],o=t[2],c=t[3],u=t[8],m=t[9],d=t[10],h=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i-u*r,e[1]=s*i-m*r,e[2]=o*i-d*r,e[3]=c*i-h*r,e[8]=a*r+u*i,e[9]=s*r+m*i,e[10]=o*r+d*i,e[11]=c*r+h*i,e}function Au(e,t,n){var r=Math.sin(n),i=Math.cos(n),a=t[0],s=t[1],o=t[2],c=t[3],u=t[4],m=t[5],d=t[6],h=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*i+u*r,e[1]=s*i+m*r,e[2]=o*i+d*r,e[3]=c*i+h*r,e[4]=u*i-a*r,e[5]=m*i-s*r,e[6]=d*i-o*r,e[7]=h*i-c*r,e}function ku(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 Eu(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 bu(e,t,n){var r=n[0],i=n[1],a=n[2],s=Math.sqrt(r*r+i*i+a*a),o,c,u;return s<K?null:(s=1/s,r*=s,i*=s,a*=s,o=Math.sin(t),c=Math.cos(t),u=1-c,e[0]=r*r*u+c,e[1]=i*r*u+a*o,e[2]=a*r*u-i*o,e[3]=0,e[4]=r*i*u-a*o,e[5]=i*i*u+c,e[6]=a*i*u+r*o,e[7]=0,e[8]=r*a*u+i*o,e[9]=i*a*u-r*o,e[10]=a*a*u+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Mu(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r,e[6]=n,e[7]=0,e[8]=0,e[9]=-n,e[10]=r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function zu(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=0,e[2]=-n,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=n,e[9]=0,e[10]=r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ru(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=n,e[2]=0,e[3]=0,e[4]=-n,e[5]=r,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function za(e,t,n){var r=t[0],i=t[1],a=t[2],s=t[3],o=r+r,c=i+i,u=a+a,m=r*o,d=r*c,h=r*u,f=i*c,p=i*u,v=a*u,l=s*o,_=s*c,x=s*u;return e[0]=1-(f+v),e[1]=d+x,e[2]=h-_,e[3]=0,e[4]=d-x,e[5]=1-(m+v),e[6]=p+l,e[7]=0,e[8]=h+_,e[9]=p-l,e[10]=1-(m+f),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Lu(e,t){var n=new ge(3),r=-t[0],i=-t[1],a=-t[2],s=t[3],o=t[4],c=t[5],u=t[6],m=t[7],d=r*r+i*i+a*a+s*s;return d>0?(n[0]=(o*s+m*r+c*a-u*i)*2/d,n[1]=(c*s+m*i+u*r-o*a)*2/d,n[2]=(u*s+m*a+o*i-c*r)*2/d):(n[0]=(o*s+m*r+c*a-u*i)*2,n[1]=(c*s+m*i+u*r-o*a)*2,n[2]=(u*s+m*a+o*i-c*r)*2),za(e,t,n),e}function Nu(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Ra(e,t){var n=t[0],r=t[1],i=t[2],a=t[4],s=t[5],o=t[6],c=t[8],u=t[9],m=t[10];return e[0]=Math.sqrt(n*n+r*r+i*i),e[1]=Math.sqrt(a*a+s*s+o*o),e[2]=Math.sqrt(c*c+u*u+m*m),e}function Ou(e,t){var n=new ge(3);Ra(n,t);var r=1/n[0],i=1/n[1],a=1/n[2],s=t[0]*r,o=t[1]*i,c=t[2]*a,u=t[4]*r,m=t[5]*i,d=t[6]*a,h=t[8]*r,f=t[9]*i,p=t[10]*a,v=s+m+p,l=0;return v>0?(l=Math.sqrt(v+1)*2,e[3]=.25*l,e[0]=(d-f)/l,e[1]=(h-c)/l,e[2]=(o-u)/l):s>m&&s>p?(l=Math.sqrt(1+s-m-p)*2,e[3]=(d-f)/l,e[0]=.25*l,e[1]=(o+u)/l,e[2]=(h+c)/l):m>p?(l=Math.sqrt(1+m-s-p)*2,e[3]=(h-c)/l,e[0]=(o+u)/l,e[1]=.25*l,e[2]=(d+f)/l):(l=Math.sqrt(1+p-s-m)*2,e[3]=(o-u)/l,e[0]=(h+c)/l,e[1]=(d+f)/l,e[2]=.25*l),e}function Tu(e,t,n,r){t[0]=r[12],t[1]=r[13],t[2]=r[14];var i=r[0],a=r[1],s=r[2],o=r[4],c=r[5],u=r[6],m=r[8],d=r[9],h=r[10];n[0]=Math.sqrt(i*i+a*a+s*s),n[1]=Math.sqrt(o*o+c*c+u*u),n[2]=Math.sqrt(m*m+d*d+h*h);var f=1/n[0],p=1/n[1],v=1/n[2],l=i*f,_=a*p,x=s*v,w=o*f,A=c*p,k=u*v,g=m*f,y=d*p,S=h*v,R=l+A+S,b=0;return R>0?(b=Math.sqrt(R+1)*2,e[3]=.25*b,e[0]=(k-y)/b,e[1]=(g-x)/b,e[2]=(_-w)/b):l>A&&l>S?(b=Math.sqrt(1+l-A-S)*2,e[3]=(k-y)/b,e[0]=.25*b,e[1]=(_+w)/b,e[2]=(g+x)/b):A>S?(b=Math.sqrt(1+A-l-S)*2,e[3]=(g-x)/b,e[0]=(_+w)/b,e[1]=.25*b,e[2]=(k+y)/b):(b=Math.sqrt(1+S-l-A)*2,e[3]=(_-w)/b,e[0]=(g+x)/b,e[1]=(k+y)/b,e[2]=.25*b),e}function Iu(e,t,n,r){var i=t[0],a=t[1],s=t[2],o=t[3],c=i+i,u=a+a,m=s+s,d=i*c,h=i*u,f=i*m,p=a*u,v=a*m,l=s*m,_=o*c,x=o*u,w=o*m,A=r[0],k=r[1],g=r[2];return e[0]=(1-(p+l))*A,e[1]=(h+w)*A,e[2]=(f-x)*A,e[3]=0,e[4]=(h-w)*k,e[5]=(1-(d+l))*k,e[6]=(v+_)*k,e[7]=0,e[8]=(f+x)*g,e[9]=(v-_)*g,e[10]=(1-(d+p))*g,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Pu(e,t,n,r,i){var a=t[0],s=t[1],o=t[2],c=t[3],u=a+a,m=s+s,d=o+o,h=a*u,f=a*m,p=a*d,v=s*m,l=s*d,_=o*d,x=c*u,w=c*m,A=c*d,k=r[0],g=r[1],y=r[2],S=i[0],R=i[1],b=i[2],P=(1-(v+_))*k,C=(f+A)*k,G=(p-w)*k,F=(f-A)*g,de=(1-(h+_))*g,Ye=(l+x)*g,pe=(p+w)*y,Aa=(l-x)*y,ka=(1-(h+v))*y;return e[0]=P,e[1]=C,e[2]=G,e[3]=0,e[4]=F,e[5]=de,e[6]=Ye,e[7]=0,e[8]=pe,e[9]=Aa,e[10]=ka,e[11]=0,e[12]=n[0]+S-(P*S+F*R+pe*b),e[13]=n[1]+R-(C*S+de*R+Aa*b),e[14]=n[2]+b-(G*S+Ye*R+ka*b),e[15]=1,e}function Cu(e,t){var n=t[0],r=t[1],i=t[2],a=t[3],s=n+n,o=r+r,c=i+i,u=n*s,m=r*s,d=r*o,h=i*s,f=i*o,p=i*c,v=a*s,l=a*o,_=a*c;return e[0]=1-d-p,e[1]=m+_,e[2]=h-l,e[3]=0,e[4]=m-_,e[5]=1-u-p,e[6]=f+v,e[7]=0,e[8]=h+l,e[9]=f-v,e[10]=1-u-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Fu(e,t,n,r,i,a,s){var o=1/(n-t),c=1/(i-r),u=1/(a-s);return e[0]=a*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a*2*c,e[6]=0,e[7]=0,e[8]=(n+t)*o,e[9]=(i+r)*c,e[10]=(s+a)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*a*2*u,e[15]=0,e}function La(e,t,n,r,i){var a=1/Math.tan(t/2);if(e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,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 s=1/(r-i);e[10]=(i+r)*s,e[14]=2*i*r*s}else e[10]=-1,e[14]=-2*r;return e}var Du=La;function Uu(e,t,n,r,i){var a=1/Math.tan(t/2);if(e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,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 s=1/(r-i);e[10]=i*s,e[14]=i*r*s}else e[10]=-1,e[14]=-r;return e}function Bu(e,t,n,r){var i=Math.tan(t.upDegrees*Math.PI/180),a=Math.tan(t.downDegrees*Math.PI/180),s=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(s+o),u=2/(i+a);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]=-((s-o)*c*.5),e[9]=(i-a)*u*.5,e[10]=r/(n-r),e[11]=-1,e[12]=0,e[13]=0,e[14]=r*n/(n-r),e[15]=0,e}function Na(e,t,n,r,i,a,s){var o=1/(t-n),c=1/(r-i),u=1/(a-s);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+n)*o,e[13]=(i+r)*c,e[14]=(s+a)*u,e[15]=1,e}var Gu=Na;function Vu(e,t,n,r,i,a,s){var o=1/(t-n),c=1/(r-i),u=1/(a-s);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+n)*o,e[13]=(i+r)*c,e[14]=a*u,e[15]=1,e}function Hu(e,t,n,r){var i,a,s,o,c,u,m,d,h,f,p=t[0],v=t[1],l=t[2],_=r[0],x=r[1],w=r[2],A=n[0],k=n[1],g=n[2];return Math.abs(p-A)<K&&Math.abs(v-k)<K&&Math.abs(l-g)<K?ba(e):(m=p-A,d=v-k,h=l-g,f=1/Math.sqrt(m*m+d*d+h*h),m*=f,d*=f,h*=f,i=x*h-w*d,a=w*m-_*h,s=_*d-x*m,f=Math.sqrt(i*i+a*a+s*s),f?(f=1/f,i*=f,a*=f,s*=f):(i=0,a=0,s=0),o=d*s-h*a,c=h*i-m*s,u=m*a-d*i,f=Math.sqrt(o*o+c*c+u*u),f?(f=1/f,o*=f,c*=f,u*=f):(o=0,c=0,u=0),e[0]=i,e[1]=o,e[2]=m,e[3]=0,e[4]=a,e[5]=c,e[6]=d,e[7]=0,e[8]=s,e[9]=u,e[10]=h,e[11]=0,e[12]=-(i*p+a*v+s*l),e[13]=-(o*p+c*v+u*l),e[14]=-(m*p+d*v+h*l),e[15]=1,e)}function Wu(e,t,n,r){var i=t[0],a=t[1],s=t[2],o=r[0],c=r[1],u=r[2],m=i-n[0],d=a-n[1],h=s-n[2],f=m*m+d*d+h*h;f>0&&(f=1/Math.sqrt(f),m*=f,d*=f,h*=f);var p=c*h-u*d,v=u*m-o*h,l=o*d-c*m;return f=p*p+v*v+l*l,f>0&&(f=1/Math.sqrt(f),p*=f,v*=f,l*=f),e[0]=p,e[1]=v,e[2]=l,e[3]=0,e[4]=d*l-h*v,e[5]=h*p-m*l,e[6]=m*v-d*p,e[7]=0,e[8]=m,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=a,e[14]=s,e[15]=1,e}function Ku(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 Xu(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 $u(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e[9]=t[9]+n[9],e[10]=t[10]+n[10],e[11]=t[11]+n[11],e[12]=t[12]+n[12],e[13]=t[13]+n[13],e[14]=t[14]+n[14],e[15]=t[15]+n[15],e}function Oa(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e[9]=t[9]-n[9],e[10]=t[10]-n[10],e[11]=t[11]-n[11],e[12]=t[12]-n[12],e[13]=t[13]-n[13],e[14]=t[14]-n[14],e[15]=t[15]-n[15],e}function Yu(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e[9]=t[9]*n,e[10]=t[10]*n,e[11]=t[11]*n,e[12]=t[12]*n,e[13]=t[13]*n,e[14]=t[14]*n,e[15]=t[15]*n,e}function ju(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e[4]=t[4]+n[4]*r,e[5]=t[5]+n[5]*r,e[6]=t[6]+n[6]*r,e[7]=t[7]+n[7]*r,e[8]=t[8]+n[8]*r,e[9]=t[9]+n[9]*r,e[10]=t[10]+n[10]*r,e[11]=t[11]+n[11]*r,e[12]=t[12]+n[12]*r,e[13]=t[13]+n[13]*r,e[14]=t[14]+n[14]*r,e[15]=t[15]+n[15]*r,e}function qu(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 Zu(e,t){var n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],o=e[5],c=e[6],u=e[7],m=e[8],d=e[9],h=e[10],f=e[11],p=e[12],v=e[13],l=e[14],_=e[15],x=t[0],w=t[1],A=t[2],k=t[3],g=t[4],y=t[5],S=t[6],R=t[7],b=t[8],P=t[9],C=t[10],G=t[11],F=t[12],de=t[13],Ye=t[14],pe=t[15];return Math.abs(n-x)<=K*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(r-w)<=K*Math.max(1,Math.abs(r),Math.abs(w))&&Math.abs(i-A)<=K*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(a-k)<=K*Math.max(1,Math.abs(a),Math.abs(k))&&Math.abs(s-g)<=K*Math.max(1,Math.abs(s),Math.abs(g))&&Math.abs(o-y)<=K*Math.max(1,Math.abs(o),Math.abs(y))&&Math.abs(c-S)<=K*Math.max(1,Math.abs(c),Math.abs(S))&&Math.abs(u-R)<=K*Math.max(1,Math.abs(u),Math.abs(R))&&Math.abs(m-b)<=K*Math.max(1,Math.abs(m),Math.abs(b))&&Math.abs(d-P)<=K*Math.max(1,Math.abs(d),Math.abs(P))&&Math.abs(h-C)<=K*Math.max(1,Math.abs(h),Math.abs(C))&&Math.abs(f-G)<=K*Math.max(1,Math.abs(f),Math.abs(G))&&Math.abs(p-F)<=K*Math.max(1,Math.abs(p),Math.abs(F))&&Math.abs(v-de)<=K*Math.max(1,Math.abs(v),Math.abs(de))&&Math.abs(l-Ye)<=K*Math.max(1,Math.abs(l),Math.abs(Ye))&&Math.abs(_-pe)<=K*Math.max(1,Math.abs(_),Math.abs(pe))}var Ju=Ma,Qu=Oa;var $={};Sr($,{add:()=>im,angle:()=>Mm,bezier:()=>ym,ceil:()=>am,clone:()=>em,copy:()=>nm,create:()=>Ta,cross:()=>pm,dist:()=>Pm,distance:()=>Da,div:()=>Im,divide:()=>Fa,dot:()=>kr,equals:()=>Nm,exactEquals:()=>Lm,floor:()=>sm,forEach:()=>Um,fromValues:()=>tm,hermite:()=>_m,inverse:()=>hm,len:()=>Fm,length:()=>Ia,lerp:()=>gm,max:()=>cm,min:()=>om,mul:()=>Tm,multiply:()=>Ca,negate:()=>lm,normalize:()=>fm,random:()=>xm,rotateX:()=>km,rotateY:()=>Em,rotateZ:()=>bm,round:()=>um,scale:()=>mm,scaleAndAdd:()=>dm,set:()=>rm,slerp:()=>vm,sqrDist:()=>Cm,sqrLen:()=>Dm,squaredDistance:()=>Ua,squaredLength:()=>Ba,str:()=>Rm,sub:()=>Om,subtract:()=>Pa,transformMat3:()=>Sm,transformMat4:()=>wm,transformQuat:()=>Am,zero:()=>zm});function Ta(){var e=new ge(3);return ge!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function em(e){var t=new ge(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Ia(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function tm(e,t,n){var r=new ge(3);return r[0]=e,r[1]=t,r[2]=n,r}function nm(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function rm(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function im(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function Pa(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function Ca(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function Fa(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function am(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function sm(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function om(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function cm(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function um(e,t){return e[0]=on(t[0]),e[1]=on(t[1]),e[2]=on(t[2]),e}function mm(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function dm(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e}function Da(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+r*r+i*i)}function Ua(e,t){var n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2];return n*n+r*r+i*i}function Ba(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function lm(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function hm(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function fm(e,t){var n=t[0],r=t[1],i=t[2],a=n*n+r*r+i*i;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function kr(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function pm(e,t,n){var r=t[0],i=t[1],a=t[2],s=n[0],o=n[1],c=n[2];return e[0]=i*c-a*o,e[1]=a*s-r*c,e[2]=r*o-i*s,e}function gm(e,t,n,r){var i=t[0],a=t[1],s=t[2];return e[0]=i+r*(n[0]-i),e[1]=a+r*(n[1]-a),e[2]=s+r*(n[2]-s),e}function vm(e,t,n,r){var i=Math.acos(Math.min(Math.max(kr(t,n),-1),1)),a=Math.sin(i),s=Math.sin((1-r)*i)/a,o=Math.sin(r*i)/a;return e[0]=s*t[0]+o*n[0],e[1]=s*t[1]+o*n[1],e[2]=s*t[2]+o*n[2],e}function _m(e,t,n,r,i,a){var s=a*a,o=s*(2*a-3)+1,c=s*(a-2)+a,u=s*(a-1),m=s*(3-2*a);return e[0]=t[0]*o+n[0]*c+r[0]*u+i[0]*m,e[1]=t[1]*o+n[1]*c+r[1]*u+i[1]*m,e[2]=t[2]*o+n[2]*c+r[2]*u+i[2]*m,e}function ym(e,t,n,r,i,a){var s=1-a,o=s*s,c=a*a,u=o*s,m=3*a*o,d=3*c*s,h=c*a;return e[0]=t[0]*u+n[0]*m+r[0]*d+i[0]*h,e[1]=t[1]*u+n[1]*m+r[1]*d+i[1]*h,e[2]=t[2]*u+n[2]*m+r[2]*d+i[2]*h,e}function xm(e,t){t=t===void 0?1:t;var n=Ar()*2*Math.PI,r=Ar()*2-1,i=Math.sqrt(1-r*r)*t;return e[0]=Math.cos(n)*i,e[1]=Math.sin(n)*i,e[2]=r*t,e}function wm(e,t,n){var r=t[0],i=t[1],a=t[2],s=n[3]*r+n[7]*i+n[11]*a+n[15];return s=s||1,e[0]=(n[0]*r+n[4]*i+n[8]*a+n[12])/s,e[1]=(n[1]*r+n[5]*i+n[9]*a+n[13])/s,e[2]=(n[2]*r+n[6]*i+n[10]*a+n[14])/s,e}function Sm(e,t,n){var r=t[0],i=t[1],a=t[2];return e[0]=r*n[0]+i*n[3]+a*n[6],e[1]=r*n[1]+i*n[4]+a*n[7],e[2]=r*n[2]+i*n[5]+a*n[8],e}function Am(e,t,n){var r=n[0],i=n[1],a=n[2],s=n[3],o=t[0],c=t[1],u=t[2],m=i*u-a*c,d=a*o-r*u,h=r*c-i*o;return m=m+m,d=d+d,h=h+h,e[0]=o+s*m+i*h-a*d,e[1]=c+s*d+a*m-r*h,e[2]=u+s*h+r*d-i*m,e}function km(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0],a[1]=i[1]*Math.cos(r)-i[2]*Math.sin(r),a[2]=i[1]*Math.sin(r)+i[2]*Math.cos(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function Em(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[2]*Math.sin(r)+i[0]*Math.cos(r),a[1]=i[1],a[2]=i[2]*Math.cos(r)-i[0]*Math.sin(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function bm(e,t,n,r){var i=[],a=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],a[0]=i[0]*Math.cos(r)-i[1]*Math.sin(r),a[1]=i[0]*Math.sin(r)+i[1]*Math.cos(r),a[2]=i[2],e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e}function Mm(e,t){var n=e[0],r=e[1],i=e[2],a=t[0],s=t[1],o=t[2],c=Math.sqrt((n*n+r*r+i*i)*(a*a+s*s+o*o)),u=c&&kr(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function zm(e){return e[0]=0,e[1]=0,e[2]=0,e}function Rm(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Lm(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Nm(e,t){var n=e[0],r=e[1],i=e[2],a=t[0],s=t[1],o=t[2];return Math.abs(n-a)<=K*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(r-s)<=K*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-o)<=K*Math.max(1,Math.abs(i),Math.abs(o))}var Om=Pa,Tm=Ca,Im=Fa,Pm=Da,Cm=Ua,Fm=Ia,Dm=Ba,Um=(function(){var e=Ta();return function(t,n,r,i,a,s){var o,c;for(n||(n=3),r||(r=0),i?c=Math.min(i*n+r,t.length):c=t.length,o=r;o<c;o+=n)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],a(e,e,s),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var Bm=Object.defineProperty,Va=(e,t)=>{for(var n in t)Bm(e,n,{get:t[n],enumerable:!0})};var Uw=Math.PI/180;var Gm=Math.PI/180,Bw=180/Math.PI,zt=Gm,Vm=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];var Ee=1,Ue=2;var zr=8,Rr=16,Hm=32;var Wm=16384;var fn=65536,Ha=1<<17,Km=1<<18,Xm=1<<19,$m=1<<20,Ym=1<<21,jm=1<<22,qm=1<<23,Gw=1<<24,pn=1<<25,Zm=1<<26,Vw=1<<27,Hw=1<<28,Ww=1<<29,gn=1<<30,Kw=1<<31;var Xw=1<<25,$w=1<<28,Yw=1<<29,jw=1<<30,qw=1<<31,Zw=Ee|Ue,Jw=Ee|fn|Ue|pn|gn,Qw=Ee|fn|Ue,eS=Ee|Ha|Ue|pn|gn,tS=Hm|zr|Rr,nS=Ee|Rr|zr,Jm=Ee|pn|gn|Ue|Zm,rS=Km|Xm|$m|Ym|jm|qm,iS=Ee|zr|Rr|pn|gn,aS=Ee|fn|Ue,sS=Ee|Ue,oS=Ee|fn|Ue|Ha,cS=Jm|Wm,uS=Number.MAX_SAFE_INTEGER-1;var Wa=256,Qm=256,ed=8192,td=2048,nd=512,rd=256,id=Wa*2,ad=256,Er=32;var Ka=(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+ed]="Sounds",e[e.Images=e.Sounds+td]="Images",e[e.Lights=e.Images+nd]="Lights",e[e.ShadowLights=e.Lights+Qm]="ShadowLights",e[e.Items=e.ShadowLights+ad]="Items",e[e.PlayerSkins=e.Items+rd]="PlayerSkins",e[e.General=e.PlayerSkins+Wa]="General",e[e.WheelWeapons=e.General+id]="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))(Ka||{}),mS=Ka.MaxConfigStrings;var sd={};Va(sd,{addReplayFrame:()=>md,createReplaySession:()=>ud,deserializeReplay:()=>cd,serializeReplay:()=>od});function od(e){return JSON.stringify(e,null,2)}function cd(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 ud(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function md(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var V=(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))(V||{}),M=(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[e.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",e[e.BFG_ZAP=57]="BFG_ZAP",e[e.BERSERK_SLAM=58]="BERSERK_SLAM",e[e.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",e[e.POWER_SPLASH=60]="POWER_SPLASH",e[e.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",e[e.EXPLOSION1_NL=62]="EXPLOSION1_NL",e[e.EXPLOSION2_NL=63]="EXPLOSION2_NL",e))(M||{}),dd={};Va(dd,{U_ANGLE1:()=>_d,U_ANGLE2:()=>yd,U_ANGLE3:()=>xd,U_EFFECTS:()=>Ad,U_EVENT:()=>bd,U_FRAME:()=>wd,U_MODEL:()=>hd,U_MODEL2:()=>zd,U_MODEL3:()=>Rd,U_MODEL4:()=>Ld,U_MOREBITS:()=>Md,U_NUMBER:()=>ld,U_ORIGIN1:()=>pd,U_ORIGIN2:()=>gd,U_ORIGIN3:()=>vd,U_REMOVE:()=>Nd,U_RENDERFX:()=>kd,U_SKIN:()=>Sd,U_SOLID:()=>Ed,U_SOUND:()=>fd});var ld=1,hd=2,fd=4,pd=8,gd=16,vd=32,_d=64,yd=128,xd=256,wd=512,Sd=1024,Ad=2048,kd=4096,Ed=8192,bd=16384,Md=32768,zd=1,Rd=2,Ld=4,Nd=32768,Od=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){let t=this.readByte();if(t>=162){e.x=0,e.y=0,e.z=0;return}let n=Vm[t];e.x=n[0],e.y=n[1],e.z=n[2]}};function Td(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let n=t;for(let r=0;r<8;r+=1)n=(n&1)!==0?3988292384^n>>>1:n>>>1;e[t]=n>>>0}return e}var dS=Td();var lS=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 Id=19,hS=8+Id*8;var Mr=4,br=7*Mr,fS=[{index:0,size:3,type:5126,stride:br,offset:0},{index:1,size:2,type:5126,stride:br,offset:3*Mr},{index:2,size:2,type:5126,stride:br,offset:5*Mr}];var Xa=32;var pS=`#version 300 es
2
2
  precision highp float;
3
3
 
4
4
  struct DLight {
@@ -7,7 +7,7 @@ struct DLight {
7
7
  float intensity;
8
8
  };
9
9
 
10
- const int MAX_DLIGHTS = ${Ka};
10
+ const int MAX_DLIGHTS = ${Xa};
11
11
 
12
12
  in vec2 v_texCoord;
13
13
  in vec2 v_lightmapCoord;
@@ -86,7 +86,7 @@ void main() {
86
86
  }
87
87
 
88
88
  o_color = finalColor;
89
- }`;var lS=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 hS=`#version 300 es
89
+ }`;var gS=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 vS=`#version 300 es
90
90
  precision highp float;
91
91
 
92
92
  layout(location = 0) in vec3 a_position;
@@ -99,7 +99,7 @@ struct DLight {
99
99
  float intensity;
100
100
  };
101
101
 
102
- const int MAX_DLIGHTS = ${Ka};
102
+ const int MAX_DLIGHTS = ${Xa};
103
103
 
104
104
  uniform mat4 u_modelViewProjection;
105
105
  uniform mat4 u_modelMatrix;
@@ -138,5 +138,5 @@ void main() {
138
138
  v_texCoord = a_texCoord;
139
139
  v_position = worldPos.xyz;
140
140
  gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
141
- }`;var Xa=class{constructor(){this._position=$.create(),this._angles=$.create(),this._bobAngles=$.create(),this._bobOffset=$.create(),this._kickAngles=$.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=X.create(),this._projectionMatrix=X.create(),this._viewProjectionMatrix=X.create(),this._dirty=!0}get position(){return this._position}set position(e){$.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){$.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){$.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){$.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){$.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=X.create();return X.perspective(t,e*kt,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;X.perspective(this._projectionMatrix,this._fov*kt,this._aspect,this._near,this._far);let e=X.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],r=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*kt,a=n*kt,s=r*kt,o=X.create();X.identity(o),X.rotateZ(o,o,-a),X.rotateY(o,o,-i),X.rotateX(o,o,-s);let c=X.create();X.multiply(c,e,o);let u=$.add($.create(),this._position,this._bobOffset),m=$.negate($.create(),u),d=$.create();$.transformMat4(d,m,o);let h=$.fromValues(d[1]||0,d[2]||0,d[0]||0);X.copy(this._viewMatrix,c),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],X.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Pd=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 Od(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Lr=1,Nr=2,Or=4,Tr=8,Ir=16,Pr=32,$a=64,Cd=128,Dd=256,Cr=512,Dr=1024,Fr=2048,cn=4096,un=16384,Fd=32768,mn=65536,Ur=1<<17,dn=1<<18,ln=1<<19,Br=1<<20,Gr=1<<21,Vr=1<<22,Ud=1<<23,Hr=1<<24,hn=1<<25,Wr=1<<26,Kr=1<<27,Bd=1,Gd=2,Vd=128,et=()=>({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}),Ba=()=>({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)}),Hd=class{constructor(e,t){this.protocolVersion=0,this.isDemo=Bd,this.stream=e,this.handler=t}translateCommand(e){if(this.protocolVersion===0&&(e===7||e===12))return V.serverdata;if(this.protocolVersion===25){if(e>=7&&e<=15)return e+5;if(e===1)return V.print;if(e===2)return V.stufftext;if(e===3)return V.sound;if(e===4)return V.nop;if(e===5)return V.disconnect;if(e===6)return V.reconnect;if(e===16)return V.temp_entity}return e}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;let t=e;e=this.translateCommand(e);try{switch(e){case V.nop:break;case V.disconnect:break;case V.reconnect:break;case V.print:this.parsePrint();break;case V.serverdata:this.parseServerData();break;case V.configstring:this.parseConfigString();break;case V.spawnbaseline:this.parseSpawnBaseline();break;case V.centerprint:this.parseCenterPrint();break;case V.download:this.parseDownload();break;case V.frame:this.parseFrame();break;case V.packetentities:this.parsePacketEntities(!1);break;case V.deltapacketentities:this.parsePacketEntities(!0);break;case V.playerinfo:this.parsePlayerState();break;case V.stufftext:this.parseStuffText();break;case V.layout:this.parseLayout();break;case V.inventory:this.parseInventory();break;case V.sound:this.parseSound();break;case V.muzzleflash:this.parseMuzzleFlash();break;case V.muzzleflash2:this.parseMuzzleFlash2();break;case V.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${t} (translated: ${e}) at offset ${this.stream.getPosition()-1}`);return}}catch(n){console.warn(`Error parsing command ${e}: ${n.message}`);return}}}parsePrint(){let e=this.stream.readByte(),t=this.stream.readString()}parseStuffText(){let e=this.stream.readString()}parseLayout(){let e=this.stream.readString()}parseCenterPrint(){let e=this.stream.readString()}parseServerData(){this.protocolVersion=this.stream.readLong();let e=this.stream.readLong();this.isDemo=this.stream.readByte();let t=0,n=this.stream.readString(),r=this.stream.readShort(),i=this.stream.readString();this.handler?this.handler.onServerData(this.protocolVersion,e,t,n,r,i):console.log(`Server Data: Protocol ${this.protocolVersion}, Level ${i}, 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(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,t,n)}parseInventory(){let t=new Array(256);for(let n=0;n<256;n++)t[n]=this.stream.readShort();this.handler&&this.handler.onInventory(t)}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte(),n,r,i,a,s;if(e&1&&(n=this.stream.readByte()),e&2&&(r=this.stream.readByte()),e&16&&(i=this.stream.readByte()),e&8&&(a=this.stream.readShort()),e&4){let o={x:0,y:0,z:0};this.stream.readPos(o),s=o}this.handler&&this.handler.onSound(e,t,n,r,i,a,s)}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},n={x:0,y:0,z:0},r={x:0,y:0,z:0},i,a,s,o,c;switch(e){case M.EXPLOSION1:case M.EXPLOSION2:case M.ROCKET_EXPLOSION:case M.GRENADE_EXPLOSION:case M.ROCKET_EXPLOSION_WATER:case M.GRENADE_EXPLOSION_WATER:case M.BFG_EXPLOSION:case M.BFG_BIGEXPLOSION:case M.BOSSTPORT:case M.PLASMA_EXPLOSION:case M.PLAIN_EXPLOSION:case M.CHAINFIST_SMOKE:case M.TRACKER_EXPLOSION:case M.TELEPORT_EFFECT:case M.DBALL_GOAL:case M.NUKEBLAST:case M.WIDOWSPLASH:case M.EXPLOSION1_BIG:case M.EXPLOSION1_NP:this.stream.readPos(t);break;case M.GUNSHOT:case M.BLOOD:case M.BLASTER:case M.SHOTGUN:case M.SPARKS:case M.BULLET_SPARKS:case M.SCREEN_SPARKS:case M.SHIELD_SPARKS:case M.BLASTER2:case M.FLECHETTE:case M.MOREBLOOD:case M.ELECTRIC_SPARKS:case M.HEATBEAM_SPARKS:case M.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(r);break;case M.SPLASH:case M.LASER_SPARKS:case M.WELDING_SPARKS:case M.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(r),a=this.stream.readByte();break;case M.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.stream.readPos(t),this.stream.readPos(n)):(this.stream.readPos(t),this.stream.readDir(r));break;case M.GREENBLOOD:this.protocolVersion>=32?(this.stream.readPos(t),this.stream.readDir(r)):(this.stream.readPos(t),this.stream.readPos(n));break;case M.RAILTRAIL:case M.BUBBLETRAIL:case M.BFG_LASER:case M.DEBUGTRAIL:case M.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(n);break;case M.PARASITE_ATTACK:case M.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n);break;case M.GRAPPLE_CABLE:s=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n),this.stream.readPos(r);break;case M.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n);break;case M.FLASHLIGHT:this.stream.readPos(t),s=this.stream.readShort();break;case M.FORCEWALL:this.stream.readPos(t),this.stream.readPos(n),a=this.stream.readByte();break;case M.STEAM:let u=this.stream.readShort();i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(r),a=this.stream.readByte(),this.stream.readShort(),u!==-1&&this.stream.readLong();break;case M.WIDOWBEAMOUT:this.stream.readShort();case M.HEATBEAM:case M.MONSTER_HEATBEAM:s=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n),this.stream.readPos(r);break;default:break}this.handler&&this.handler.onTempEntity(e,t,n,r,i,a,s,o,c)}parseSpawnBaseline(){let e=this.parseEntityBits(),t=et();this.parseDelta(et(),t,e.number,e.bits),this.handler&&this.handler.onSpawnBaseline(t)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),n=this.stream.readByte(),r=this.stream.readByte(),i=this.stream.readData(r),a=this.stream.readByte();if(a!==V.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);let s=this.parsePlayerState();if(this.isDemo===Vd){let o=this.stream.readByte();for(let c=0;c<o;c++)this.stream.readByte()}this.isDemo===Gd&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:t,surpressCount:n,areaBytes:r,areaBits:i,playerState:s,packetEntities:{delta:!1,entities:[]}})}parsePlayerState(){let e=Ba(),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 n=this.stream.readLong();for(let r=0;r<32;r++)n&1<<r&&(e.stats[r]=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:Ba(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let n=et();this.parseDelta(et(),n,t.number,t.bits),e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Cd&&(e|=this.stream.readByte()<<8),e&Fd&&(e|=this.stream.readByte()<<16),e&Ud&&(e|=this.stream.readByte()<<24);let t;return e&Dd?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,n,r){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=n,t.bits=r,r&Fr&&(t.modelindex=this.stream.readByte()),r&Br&&(t.modelindex2=this.stream.readByte()),r&Gr&&(t.modelindex3=this.stream.readByte()),r&Vr&&(t.modelindex4=this.stream.readByte()),r&Ir&&(t.frame=this.stream.readByte()),r&Ur&&(t.frame=this.stream.readShort()),r&mn&&r&hn?t.skinnum=this.stream.readLong():r&mn?t.skinnum=this.stream.readByte():r&hn&&(t.skinnum=this.stream.readShort()),r&un&&r&ln?t.effects=this.stream.readLong():r&un?t.effects=this.stream.readByte():r&ln&&(t.effects=this.stream.readShort()),r&cn&&r&dn?t.renderfx=this.stream.readLong():r&cn?t.renderfx=this.stream.readByte():r&dn&&(t.renderfx=this.stream.readShort()),r&Lr&&(t.origin.x=this.stream.readCoord()),r&Nr&&(t.origin.y=this.stream.readCoord()),r&Cr&&(t.origin.z=this.stream.readCoord()),r&Dr&&(t.angles.x=this.stream.readAngle()),r&Or&&(t.angles.y=this.stream.readAngle()),r&Tr&&(t.angles.z=this.stream.readAngle()),r&Hr&&this.stream.readPos(t.old_origin),r&Wr&&(t.sound=this.stream.readByte()),r&Pr?t.event=this.stream.readByte():t.event=0,r&Kr&&(t.solid=this.stream.readShort())}},bt=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(bt||{}),Ya=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 Pd(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 Hd(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Wd=Object.defineProperty,ja=(e,t)=>{for(var n in t)Wd(e,n,{get:t[n],enumerable:!0})},qa={x:0,y:0,z:0};var xS=Math.PI/180;function Mt(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function nt(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Oe(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Kd(e){return Oe(e,e)}function vn(e){return Math.sqrt(Kd(e))}function Za(e){let t=vn(e);return t===0?e:nt(e,1/t)}var Ja=0,Qa=1,es=2,Xd=Math.PI/180,SS=180/Math.PI;function Xr(e,t){switch(t){case Ja:return e.x;case Qa:return e.y;case es:default:return e.z}}function $r(e){return e*Xd}function tt(e){let t=e%360;return t<0?360+t:t}function zt(e){let t=$r(Xr(e,Qa)),n=$r(Xr(e,Ja)),r=$r(Xr(e,es)),i=Math.sin(t),a=Math.cos(t),s=Math.sin(n),o=Math.cos(n),c=Math.sin(r),u=Math.cos(r),m={x:o*a,y:o*i,z:-s},d={x:-c*s*a-u*-i,y:-c*s*i-u*a,z:-c*o},h={x:u*s*a-c*-i,y:u*s*i-c*a,z:u*o};return{forward:m,right:d,up:h}}var be=1,Be=2;var jr=8,qr=16,$d=32;var Yd=16384;var _n=65536,ts=1<<17,jd=1<<18,qd=1<<19,Zd=1<<20,Jd=1<<21,Qd=1<<22,el=1<<23,AS=1<<24,yn=1<<25,tl=1<<26,ES=1<<27,kS=1<<28,bS=1<<29,wn=1<<30,MS=1<<31;var zS=1<<25,RS=1<<28,LS=1<<29,NS=1<<30,OS=1<<31;var TS=be|Be,IS=be|_n|Be|yn|wn,PS=be|_n|Be,CS=be|ts|Be|yn|wn,DS=$d|jr|qr,FS=be|qr|jr,nl=be|yn|wn|Be|tl,US=jd|qd|Zd|Jd|Qd|el,BS=be|jr|qr|yn|wn,GS=be|_n|Be,VS=be|Be,HS=be|_n|Be|ts,WS=nl|Yd;var KS=Number.MAX_SAFE_INTEGER-1;var Rt=(e=>(e[e.None=0]="None",e[e.Archive=1]="Archive",e[e.UserInfo=2]="UserInfo",e[e.ServerInfo=4]="ServerInfo",e[e.Latch=8]="Latch",e[e.Cheat=16]="Cheat",e))(Rt||{});var ns=256;var rl=256,Lt=8192,Nt=2048,Ot=512,il=256,al=ns*2,sl=256,Yr=32;var re=(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+Lt]="Sounds",e[e.Images=e.Sounds+Nt]="Images",e[e.Lights=e.Images+Ot]="Lights",e[e.ShadowLights=e.Lights+rl]="ShadowLights",e[e.Items=e.ShadowLights+sl]="Items",e[e.PlayerSkins=e.Items+il]="PlayerSkins",e[e.General=e.PlayerSkins+ns]="General",e[e.WheelWeapons=e.General+al]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Yr]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Yr]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Yr]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(re||{}),XS=re.MaxConfigStrings;var ol={};ja(ol,{addReplayFrame:()=>dl,createReplaySession:()=>ml,deserializeReplay:()=>ul,serializeReplay:()=>cl});function cl(e){return JSON.stringify(e,null,2)}function ul(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 ml(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function dl(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var je=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(je||{});var ge=(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))(ge||{});function Me(e,t){return(e&t)!==0}var Zr=(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))(Zr||{}),ze=(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))(ze||{});function rs(e){let{velocity:t,frametime:n,onGround:r,groundIsSlick:i,onLadder:a,waterlevel:s,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,m=vn(t);if(m<1)return{x:0,y:0,z:t.z};let d=0;if(r&&!i||a){let v=m<c?c:m;d+=v*o*n}s>0&&!a&&(d+=m*u*s*n);let h=m-d;if(h<0&&(h=0),h===m)return t;let f=h/m;return nt(t,f)}function Jr(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=Oe(t,n),o=r-s;if(o<=0)return t;let c=i*a*r;return c>o&&(c=o),{x:t.x+n.x*c,y:t.y+n.y*c,z:t.z+n.z*c}}function is(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=Math.min(r,30),o=Oe(t,n),c=s-o;if(c<=0)return t;let u=i*r*a;return u>c&&(u=c),{x:t.x+n.x*u,y:t.y+n.y*u,z:t.z+n.z*u}}function as(e){let{forward:t,right:n,cmd:r,maxSpeed:i}=e,a={x:t.x*r.forwardmove+n.x*r.sidemove,y:t.y*r.forwardmove+n.y*r.sidemove,z:0},s=vn(a);if(s>i){let o=i/s;a=nt(a,o),s=i}return{wishdir:s===0?a:Za(a),wishspeed:s}}function ss(e){let{forward:t,right:n,cmd:r,maxSpeed:i}=e,a={x:t.x*r.forwardmove+n.x*r.sidemove,y:t.y*r.forwardmove+n.y*r.sidemove,z:0};r.upmove>10?a=Mt(a,{x:0,y:0,z:r.upmove}):r.upmove<-10?a=Mt(a,{x:0,y:0,z:r.upmove}):a=Mt(a,{x:0,y:0,z:10});let s=vn(a);if(s>i){let o=i/s;a=nt(a,o),s=i}return s*=.5,{wishdir:s===0?a:Za(a),wishspeed:s}}function ll(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function hl(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function xn(e){let{pmFlags:t,cmdAngles:n,deltaAngles:r}=e,i;(t&32)!==0?i={x:0,y:n.y+r.y,z:0}:(i=ll(n,r),i={...i,x:hl(i.x)});let a=zt(i);return{viewangles:i,...a}}var os=200,cs=200,us=200,ms=140,ds=150,ls=3;function fl(e){let t=tt(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function hs(e,t){return{x:fl(e.x+t.x),y:tt(e.y+t.y),z:tt(e.z+t.z)}}function fs(e,t){let n=t.sensitivityX??t.sensitivity,r=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*r,y:e.deltaX*n,z:0}}var pl={};ja(pl,{U_ANGLE1:()=>Sl,U_ANGLE2:()=>Al,U_ANGLE3:()=>El,U_EFFECTS:()=>Ml,U_EVENT:()=>Ll,U_FRAME:()=>kl,U_MODEL:()=>vl,U_MODEL2:()=>Ol,U_MODEL3:()=>Tl,U_MODEL4:()=>Il,U_MOREBITS:()=>Nl,U_NUMBER:()=>gl,U_ORIGIN1:()=>yl,U_ORIGIN2:()=>wl,U_ORIGIN3:()=>xl,U_REMOVE:()=>Pl,U_RENDERFX:()=>zl,U_SKIN:()=>bl,U_SOLID:()=>Rl,U_SOUND:()=>_l});var gl=1,vl=2,_l=4,yl=8,wl=16,xl=32,Sl=64,Al=128,El=256,kl=512,bl=1024,Ml=2048,zl=4096,Rl=8192,Ll=16384,Nl=32768,Ol=1,Tl=2,Il=4,Pl=32768;var Cl={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},Dl=800,rt={x:0,y:0,z:0},Fl=250;function Ie(){return{origin:rt,velocity:rt,viewangles:rt,pmFlags:ge.OnGround,pmType:Zr.Normal,waterlevel:je.None,gravity:Dl,deltaAngles:rt,health:0,armor:0,ammo:0,blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}function ps(e){return e?{...Ie(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:rt,blend:e.blend?[...e.blend]:[0,0,0,0],damageIndicators:e.damageIndicators?[...e.damageIndicators]:[]}:Ie()}function Te(e,t,n){return e+(t-e)*n}function Qr(e,t,n){let r=tt(t-e);return r>180&&(r-=360),tt(e+r*n)}function at(e,t,n){let r=Math.max(0,Math.min(n,1));return{origin:{x:Te(e.origin.x,t.origin.x,r),y:Te(e.origin.y,t.origin.y,r),z:Te(e.origin.z,t.origin.z,r)},velocity:{x:Te(e.velocity.x,t.velocity.x,r),y:Te(e.velocity.y,t.velocity.y,r),z:Te(e.velocity.z,t.velocity.z,r)},viewangles:{x:Qr(e.viewangles.x,t.viewangles.x,r),y:Qr(e.viewangles.y,t.viewangles.y,r),z:Qr(e.viewangles.z,t.viewangles.z,r)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:Te(e.health,t.health,r),armor:Te(e.armor,t.armor,r),ammo:Te(e.ammo,t.ammo,r),centerPrint:t.centerPrint,notify:t.notify,blend:t.blend,pickupIcon:t.pickupIcon,damageAlpha:t.damageAlpha,damageIndicators:t.damageIndicators}}function Ul(e,t,n,r){let i=Math.min(Math.max(t.msec,0),Fl)/1e3,a=Me(e.pmFlags,ge.OnGround),s=Me(e.pmFlags,ge.OnLadder),o=rs({velocity:e.velocity,frametime:i,onGround:a,groundIsSlick:n.groundIsSlick,onLadder:s,waterlevel:e.waterlevel,pmFriction:n.pmFriction,pmStopSpeed:n.pmStopSpeed,pmWaterFriction:n.pmWaterFriction}),{viewangles:c,forward:u,right:m}=xn({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??rt}),d=e.waterlevel>je.None?ss({forward:u,right:m,cmd:t,maxSpeed:n.pmWaterSpeed}):as({forward:u,right:m,cmd:t,maxSpeed:n.pmMaxSpeed});if(e.waterlevel>je.None)o=Jr({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmWaterAccelerate,frametime:i});else if(a||s){let v=Me(e.pmFlags,ge.Ducked)?n.pmDuckSpeed:n.pmMaxSpeed,g=d.wishspeed>v?{wishdir:d.wishdir,wishspeed:v}:d;o=Jr({velocity:o,wishdir:g.wishdir,wishspeed:g.wishspeed,accel:n.pmAccelerate,frametime:i})}else o=is({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let f=r(e.origin,Mt(e.origin,nt(o,i))).endpos;return{...e,origin:f,velocity:o,viewangles:c}}var it=class{constructor(t,n={}){this.baseFrame={frame:0,timeMs:0,state:Ie()};this.commands=[];this.predicted=Ie();this.settings={...Cl,...n},this.trace=t,this.predicted=this.baseFrame.state??Ie()}setAuthoritative(t){let n=ps(t.state);return this.baseFrame={...t,state:n},this.commands=this.commands.filter(r=>(r.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=ps(this.baseFrame.state);for(let n of this.commands)t=Ul(t,n,this.settings,this.trace);return this.predicted=t,t}};var Bl={runPitch:.002,runRoll:.01,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function Gl(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 Vl(e,t,n){return t?e>210?n/400:e>100?n/800:n/1600:0}function Hl(e,t,n,r,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let a=Vl(t,r,i),s=e+a,c=Me(n,ge.Ducked)&&r?s*4:s;return{bobTime:s,bobCycle:Math.floor(c),bobCycleRun:Math.floor(s),bobFracSin:Math.abs(Math.sin(c*Math.PI))}}var st=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...Bl,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,n){let{forward:r,right:i}=zt(xn({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??qa}).viewangles),a=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),s=Me(t.pmFlags,ge.OnGround),o=Hl(this.bobTime,a,t.pmFlags,s,n);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=Oe(t.velocity,r)*this.settings.runPitch,u=Oe(t.velocity,i),m=u<0?-1:1,h=Math.abs(u)*this.settings.runRoll;h>2&&(h=2),h*=m;let f=this.bobFracSin*this.settings.bobPitch*a,v=this.bobFracSin*this.settings.bobRoll*a;Me(t.pmFlags,ge.Ducked)&&s&&(f*=6,v*=6),c+=Math.min(f,this.settings.maxBobAngle),v=Math.min(v,this.settings.maxBobAngle),this.bobCycle&1&&(v=-v),h+=v;let g=Math.min(this.bobFracSin*a*this.settings.bobUp,this.settings.maxBobHeight),l=0,_=0;if(this.kick&&this.kick.remainingMs>0){let E=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));l+=E*this.kick.pitch,_+=E*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-n),this.kick.remainingMs===0&&(this.kick=void 0)}let A={angles:{x:c+l,y:0,z:h+_},offset:Gl({x:0,y:0,z:g}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:a};return this.lastSample=A,A}};var Re=null,Ge=0,Wl=[1,1,1,1],ot=!0,Tt=["ch1","ch2","ch3"],ct=[null,null,null],gs=async(e,t)=>{for(let n=0;n<Tt.length;n++){let r=Tt[n];try{let i=await t.loadTexture(`pics/${r}.pcx`);ct[n]=e.registerTexture(r,i)}catch{if(n===0)try{let a=await t.loadTexture("pics/crosshair.pcx");ct[n]=e.registerTexture("crosshair",a)}catch{console.error("Failed to load crosshair image")}}}Re=ct[0]};var vs=()=>{if(ot?(Ge++,Ge>=Tt.length&&(ot=!1,Ge=0)):(ot=!0,Ge=0),ot){if(Re=ct[Ge],!Re){let e=!1;for(let t=0;t<Tt.length;t++){let n=(Ge+t)%Tt.length;if(ct[n]){Ge=n,Re=ct[n],e=!0;break}}e||(Re=null)}}else Re=null;return ot?Ge:-1},_s=(e,t,n)=>{if(ot&&Re){let r=(t-Re.width)/2,i=(n-Re.height)/2;e.drawPic(r,i,Re,Wl)}};var Kl=Object.defineProperty,Ls=(e,t)=>{for(var n in t)Kl(e,n,{get:t[n],enumerable:!0})},W={x:0,y:0,z:0};var t2=Math.PI/180;function Xl(e){return{x:e.x,y:e.y,z:e.z}}function U(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function T(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function B(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Ns(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function $l(e){return Ns(e,e)}function Ut(e){return Math.sqrt($l(e))}function I(e){let t=Ut(e);return t===0?e:B(e,1/t)}function Yl(e,t,n){return{x:e.x<t.x?t.x:e.x>n.x?n.x:e.x,y:e.y<t.y?t.y:e.y>n.y?n.y:e.y,z:e.z<t.z?t.z:e.z>n.z?n.z:e.z}}function jl(e,t,n,r){let i=0;if(t.x<n.x){let a=t.x-n.x;i+=a*a}else if(e.x>r.x){let a=e.x-r.x;i+=a*a}if(t.y<n.y){let a=t.y-n.y;i+=a*a}else if(e.y>r.y){let a=e.y-r.y;i+=a*a}if(t.z<n.z){let a=t.z-n.z;i+=a*a}else if(e.z>r.z){let a=e.z-r.z;i+=a*a}return i}var pi=0,gi=1,Os=2,ql=Math.PI/180,Zl=180/Math.PI;function Pt(e,t){switch(t){case pi:return e.x;case gi:return e.y;case Os:default:return e.z}}function An(e){return e*ql}function oi(e){return e*Zl}function ci(e){let t=e%360;return t<0?360+t:t}function Z(e){let t=An(Pt(e,gi)),n=An(Pt(e,pi)),r=An(Pt(e,Os)),i=Math.sin(t),a=Math.cos(t),s=Math.sin(n),o=Math.cos(n),c=Math.sin(r),u=Math.cos(r),m={x:o*a,y:o*i,z:-s},d={x:-c*s*a-u*-i,y:-c*s*i-u*a,z:-c*o},h={x:u*s*a-c*-i,y:u*s*i-c*a,z:u*o};return{forward:m,right:d,up:h}}function vi(e){let t=Pt(e,pi),n=Pt(e,gi);if(t===0)return n===0?0:n>0?90:270;let r=oi(Math.atan2(n,t));return r<0?r+360:r}function Bt(e){let t=e.x,n=e.y,r=e.z;if(n===0&&t===0)return{x:r>0?-90:-270,y:0,z:0};let i;t?i=oi(Math.atan2(n,t)):n>0?i=90:i=270,i<0&&(i+=360);let a=Math.sqrt(t*t+n*n),s=oi(Math.atan2(r,a));return s<0&&(s+=360),{x:-s,y:i,z:0}}var Le=624,Jl=397,Ql=2567483615,e0=2147483648,t0=2147483647,ei=4294967296,n0=class{constructor(e=5489){this.state=new Uint32Array(Le),this.index=Le,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<Le;t++){let n=this.state[t-1]^this.state[t-1]>>>30,r=Math.imul(n>>>0,1812433253)+t;this.state[t]=r>>>0}this.index=Le}nextUint32(){this.index>=Le&&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<Le;e++){let t=this.state[e]&e0|this.state[(e+1)%Le]&t0,n=this.state[(e+Jl)%Le]^t>>>1;(t&1)!==0&&(n^=Ql),this.state[e]=n>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==Le)throw new Error(`Expected ${Le} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Ts=class{constructor(e={}){this.mt=new n0(e.seed)}seed(e){this.mt.seed(e)}frandom(){return this.mt.nextUint32()/ei}frandomRange(e,t){return e+(t-e)*this.frandom()}frandomMax(e){return this.frandomRange(0,e)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let e=Number.EPSILON;return this.frandomRange(-1+e,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(e,t){if(t-e<=1)return e;let n=t-e,r=ei-ei%n,i;do i=this.mt.nextUint32();while(i>=r);return e+i%n}irandom(e){return e<=0?0:this.irandomRange(0,e)}randomTimeRange(e,t){return t<=e?e:this.irandomRange(e,t)}randomTime(e){return this.irandom(e)}randomIndex(e){return this.irandom(e.length)}getState(){return{mt:this.mt.getState()}}setState(e){this.mt.setState(e.mt)}};function _i(e){return new Ts(e)}var Ee=1,We=2;var yi=8,wi=16,r0=32;var i0=16384;var Nn=65536,Is=1<<17,a0=1<<18,s0=1<<19,o0=1<<20,c0=1<<21,u0=1<<22,m0=1<<23,n2=1<<24,Gt=1<<25,Ps=1<<26,r2=1<<27,i2=1<<28,a2=1<<29,Vt=1<<30,s2=1<<31;var o2=1<<25,c2=1<<28,u2=1<<29,m2=1<<30,d2=1<<31,l2=Ee|We,h2=Ee|Nn|We|Gt|Vt,f2=Ee|Nn|We,kn=Ee|Is|We|Gt|Vt,d0=r0|yi|wi,p2=Ee|wi|yi,Ht=Ee|Gt|Vt|We|Ps,g2=a0|s0|o0|c0|u0|m0,v2=Ee|yi|wi|Gt|Vt,_2=Ee|Nn|We,y2=Ee|We,w2=Ee|Nn|We|Is,x2=Ht|i0,S2=Number.MAX_SAFE_INTEGER-1;var Cs=256,l0=256,h0=8192,f0=2048,p0=512,g0=256,v0=Cs*2,_0=256,ti=32,Ds=(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+h0]="Sounds",e[e.Images=e.Sounds+f0]="Images",e[e.Lights=e.Images+p0]="Lights",e[e.ShadowLights=e.Lights+l0]="ShadowLights",e[e.Items=e.ShadowLights+_0]="Items",e[e.PlayerSkins=e.Items+g0]="PlayerSkins",e[e.General=e.PlayerSkins+Cs]="General",e[e.WheelWeapons=e.General+v0]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ti]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ti]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ti]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Ds||{}),A2=Ds.MaxConfigStrings,y0={};Ls(y0,{addReplayFrame:()=>A0,createReplaySession:()=>S0,deserializeReplay:()=>x0,serializeReplay:()=>w0});function w0(e){return JSON.stringify(e,null,2)}function x0(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 S0(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function A0(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var ve=(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))(ve||{}),_e=(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[e.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",e[e.BFG_ZAP=57]="BFG_ZAP",e[e.BERSERK_SLAM=58]="BERSERK_SLAM",e[e.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",e[e.POWER_SPLASH=60]="POWER_SPLASH",e[e.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",e[e.EXPLOSION1_NL=62]="EXPLOSION1_NL",e[e.EXPLOSION2_NL=63]="EXPLOSION2_NL",e))(_e||{}),E0={};Ls(E0,{U_ANGLE1:()=>N0,U_ANGLE2:()=>O0,U_ANGLE3:()=>T0,U_EFFECTS:()=>C0,U_EVENT:()=>U0,U_FRAME:()=>I0,U_MODEL:()=>b0,U_MODEL2:()=>G0,U_MODEL3:()=>V0,U_MODEL4:()=>H0,U_MOREBITS:()=>B0,U_NUMBER:()=>k0,U_ORIGIN1:()=>z0,U_ORIGIN2:()=>R0,U_ORIGIN3:()=>L0,U_REMOVE:()=>W0,U_RENDERFX:()=>D0,U_SKIN:()=>P0,U_SOLID:()=>F0,U_SOUND:()=>M0});var k0=1,b0=2,M0=4,z0=8,R0=16,L0=32,N0=64,O0=128,T0=256,I0=512,P0=1024,C0=2048,D0=4096,F0=8192,U0=16384,B0=32768,G0=1,V0=2,H0=4,W0=32768;function He(e,t){return(e&t)!==0}var gt=(e=>(e.BODY="body",e.COMBAT="combat",e.JACKET="jacket",e))(gt||{}),K0={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 X0(e,t,n){if(e<=0||He(t,130)||!n.armorType||n.armorCount<=0)return{saved:0,remainingArmor:n.armorCount};let r=K0[n.armorType],i=He(t,4)?r.energyProtection:r.normalProtection,a=Math.ceil(i*e);return a>=n.armorCount&&(a=n.armorCount),a<=0?{saved:0,remainingArmor:n.armorCount}:{saved:a,remainingArmor:n.armorCount-a}}function $0(e,t,n,r,i,a={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(He(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:s}=Z(i.angles),o={x:n.x-i.origin.x,y:n.y-i.origin.y,z:n.z-i.origin.z},c=Math.hypot(o.x,o.y,o.z);if(i.type==="screen"&&c>0){let l={x:o.x/c,y:o.y/c,z:o.z/c};if(l.x*s.x+l.y*s.y+l.z*s.z<=.3)return{saved:0,remainingCells:i.cellCount}}let u=a.ctfMode??!1,m=i.type==="screen"||u?1:2,d=i.type==="screen"?e/3:2*e/3;d=Math.max(1,d);let h=i.cellCount*m;He(t,4)&&(h=Math.max(1,Math.floor(h/2))),h>d&&(h=Math.floor(d));let f=h/m;He(t,4)&&(f*=2),f=Math.max(1,Math.floor(f));let v=Math.max(m,f),g=Math.max(0,i.cellCount-v);return{saved:h,remainingCells:g}}var ue=(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))(ue||{}),E2=Object.keys(ue).length/2;var te=(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))(te||{}),Y=(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))(Y||{}),ie=(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))(ie||{});var Y0={...W};var k2=Object.freeze({aiflags:0,last_sighting:Y0,trail_time:0,pausetime:0});var xi=[{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:"attenuation",type:"float",save:!0},{name:"volume",type:"float",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:"pain_debounce_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},{name:"postthink",type:"callback",save:!1},{name:"beam",type:"entity",save:!0},{name:"beam2",type:"entity",save:!0}],j0=20,q0=440,Z0=940,ni=32,J0=1<<24,bn=1;function ys(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 vt(e,t){let n=ys(e),r=ys(t),i=jl(n.mins,n.maxs,r.mins,r.maxs);return Math.sqrt(i)}function Q0(e){return e<=j0?"melee":e<=q0?"near":e<=Z0?"mid":"far"}function Dt(e,t){let{forward:n}=Z(e.angles),r=I(T(t.origin,e.origin)),i=Ns(r,n);return(e.spawnflags&bn)!==0&&e.trail_time===0&&e.enemy===null?i>.15:i>-.3}function Wt(e,t,n,r){if((t.flags&J0)!==0)return!1;let i={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},a={x:t.origin.x,y:t.origin.y,z:t.origin.z+t.viewheight},s=r?.throughGlass?1:3,o=n(i,null,null,a,e,s);return o.fraction===1||o.ent===t}function eh(e,t){let n={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=vi(n)}function Fs(e){e.angles.y=ci(e.ideal_yaw)}function th(e,t,n){e.enemy&&(e.goalentity=e.enemy,eh(e,e.enemy),Fs(e),(e.monsterinfo.aiflags&1)!==0?e.monsterinfo.stand?.(e,n):(e.monsterinfo.run?.(e,n),e.attack_finished_time=t.timeSeconds+1))}function nh(e,t,n,r){if(!e.enemy)return;(e.enemy.svflags&8)!==0&&(t.sightEntity=e,t.sightEntityFrame=t.frameNumber,e.light_level=128),e.show_hostile=t.timeSeconds+1;let i=e.monsterinfo.last_sighting;if(i.x=e.enemy.origin.x,i.y=e.enemy.origin.y,i.z=e.enemy.origin.z,e.trail_time=t.timeSeconds,e.monsterinfo.trail_time=t.timeSeconds,!e.combattarget){th(e,t,n);return}let a=r?.pickTarget,s=a?.(e.combattarget)??e.enemy;e.goalentity=s,e.movetarget=s,e.combattarget=void 0,e.monsterinfo.aiflags|=4096,e.movetarget&&(e.movetarget.targetname=void 0),e.monsterinfo.pausetime=0,e.monsterinfo.run?.(e,n)}function rh(e,t,n,r){let i=vt(e,t),a=Q0(i);return a==="far"||t.light_level<=5||!Wt(e,t,r,{throughGlass:!1})?!1:a==="near"?n.timeSeconds<=t.show_hostile||Dt(e,t):a==="mid"?Dt(e,t):!0}function ih(e,t,n,r,i){if((e.spawnflags&bn)!==0){if(!Wt(e,t,i))return!1}else if(r.canHear&&!r.canHear(e,t))return!1;let a=T(t.origin,e.origin);return Ut(a)>1e3||r.areasConnected&&!r.areasConnected(e,t)?!1:(e.ideal_yaw=vi(a),Fs(e),e.monsterinfo.aiflags|=4,e.enemy=t,!0)}function ah(e,t){return t.sightEntity&&t.sightEntityFrame>=t.frameNumber-1&&(e.spawnflags&bn)===0?t.sightEntity.enemy!==e.enemy?{candidate:t.sightEntity,heardit:!1}:{candidate:null,heardit:!1}:t.soundEntity&&t.soundEntityFrame>=t.frameNumber-1?{candidate:t.soundEntity,heardit:!0}:!e.enemy&&t.sound2Entity&&t.sound2EntityFrame>=t.frameNumber-1&&(e.spawnflags&bn)===0?{candidate:t.sound2Entity,heardit:!0}:t.sightClient?{candidate:t.sightClient,heardit:!1}:{candidate:null,heardit:!1}}function sh(e){return(e.flags&ni)!==0?!0:(e.svflags&4)!==0&&e.enemy?(e.enemy.flags&ni)!==0:!!(e.enemy&&(e.enemy.flags&ni)!==0)}function Si(e,t,n,r,i={}){if((e.monsterinfo.aiflags&256)!==0)return e.goalentity?.classname==="target_actor",!1;if((e.monsterinfo.aiflags&4096)!==0)return!1;let{candidate:a,heardit:s}=ah(e,t);if(!a||!a.inUse)return!1;if(a===e.enemy)return!0;if(sh(a))return!1;if(s){if(!ih(e,a,t,i,r))return!1}else{if(!rh(e,a,t,r))return!1;e.monsterinfo.aiflags&=-5,e.enemy=a}return nh(e,t,n),(e.monsterinfo.aiflags&4)===0&&e.monsterinfo.sight?.(e,e.enemy),!0}function Us(e,t){if(t===0)return{x:0,y:0,z:0};let n=An(e);return{x:Math.cos(n)*t,y:Math.sin(n)*t,z:0}}function Ai(e,t,n){let r=Us(t,n),i=e.origin;return i.x+=r.x,i.y+=r.y,i.z+=r.z,!0}function Kt(e,t){let n=ci(e.angles.y),r=e.ideal_yaw;if(n===r){e.angles.y=n;return}let i=e.yaw_speed*t*10,a=r-n;r>n?a>=180&&(a-=360):a<=-180&&(a+=360),a>i?a=i:a<-i&&(a=-i),e.angles.y=ci(n+a)}function ne(e,t){Ai(e,e.angles.y,t)}function On(e,t){if(!t)return;let n={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=vi(n)}function J(e,t,n){Si(e,n.targetAwareness,n,n.trace)||Kt(e,t)}function ae(e,t,n,r){if(!Si(e,r.targetAwareness,r,r.trace)&&(On(e,e.goalentity),Kt(e,n),t!==0&&Ai(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&vt(e,e.goalentity)<64&&e.goalentity.target)){let a=r.pickTarget(e.goalentity.target);a&&(e.goalentity=a,e.ideal_yaw=e.angles.y)}}function ce(e,t,n,r){if((e.monsterinfo.aiflags&1)!==0){e.monsterinfo.stand?.(e,r);return}Si(e,r.targetAwareness,r,r.trace),On(e,e.enemy??e.goalentity),Kt(e,n),t!==0&&Bs(e,e.angles.y,t,r)}function oh(e,t,n,r){t&&On(e,t),Kt(e,r),n!==0&&Ai(e,e.angles.y,n)}function Q(e,t,n,r){On(e,e.enemy),Kt(e,n),t!==0&&Bs(e,e.angles.y,t,r)}function ch(e,t){if(e.movetype===1)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.mins.z-1},r=t.trace(e.origin,e.mins,e.maxs,n,e,kn);if(e.groundentity=r.ent,!e.groundentity&&!r.allsolid&&!r.startsolid&&r.fraction===1){let i=t.pointcontents(n);i&d0?(e.waterlevel=1,e.watertype=i):(e.waterlevel=0,e.watertype=0)}}function uh(e,t){let n={x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},r={x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z},i={x:0,y:0,z:0},a={x:0,y:0,z:0};for(let s=0;s<2;s++)if(s===1?i={x:n.x,y:n.y,z:0}:i={x:r.x,y:n.y,z:0},i.z=n.z-1,t.pointcontents(i)!==0||(a={...i},a.z=i.z-60,t.trace(i,null,null,a,e,kn).fraction<1)||(s===1?i={x:n.x,y:r.y,z:0}:i={x:r.x,y:r.y,z:0},i.z=n.z-1,t.pointcontents(i)!==0)||(a={...i},a.z=i.z-60,t.trace(i,null,null,a,e,kn).fraction<1))return!0;return!1}function Bs(e,t,n,r){if((e.flags&3)===0&&e.movetype!==1&&!e.groundentity&&e.waterlevel===0)return!1;let i=Us(t,n);(e.monsterinfo.aiflags&1024)!==0&&e.monsterinfo.aiflags&1073741824;let a={x:e.origin.x+i.x,y:e.origin.y+i.y,z:e.origin.z+i.z};if(r.trace(e.origin,e.mins,e.maxs,a,e,kn).fraction<1)return!1;let o={...e.origin};return e.origin.x=a.x,e.origin.y=a.y,e.origin.z=a.z,(e.flags&3)===0&&e.movetype!==1&&!uh(e,r)?(e.origin.x=o.x,e.origin.y=o.y,e.origin.z=o.z,!1):((e.flags&3)===0&&ch(e,r),!0)}var mh=xi.filter(e=>e.save||e.type==="callback"),b2=new Map(mh.map(e=>[e.name,e]));var M2=1/40;var Gs={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}};function dh(e,t,n,r,i){if(He(i,8)||((e.flags??0)&4)!==0||r===0)return{x:0,y:0,z:0};let s=Math.max(50,e.mass??200),o=I(n),u=B(o,(t===e?1600:500)*r/s);return e.velocity=U(e.velocity,u),u}function lh(e,t,n,r,i){let a=r,s=0,o=0,c,u;if(e.powerArmor){let m=$0(r,i,t,n,e.powerArmor);s=m.saved,c=m.remainingCells,a-=s}if(e.regularArmor){let m=X0(a,i,e.regularArmor);o=m.saved,u=m.remainingArmor,a-=o}return[Math.max(0,a),s,o,c,u]}function ws(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 me(e,t,n,r,i,a,s,o,c,u,m){if(!e.takedamage||s<=0)return null;if(!He(c,32)&&((e.flags??0)&1)!==0)return{take:0,psave:0,asave:s,knocked:{x:0,y:0,z:0},killed:!1};let h=dh(e,n,r,o,c),[f,v,g,l,_]=lh(e,i,a,s,c);e.powerArmor&&l!==void 0&&(e.powerArmor.cellCount=l),e.regularArmor&&(e.regularArmor.armorCount=_??e.regularArmor.armorCount);let w=f;w>0&&(e.health-=w,m&&!He(c,1024)&&(e.classname==="player"||e.monsterinfo)&&m(i,1,ve.temp_entity,_e.BLOOD,i,a));let x=e.health<=0;return x?e.flags&&e.flags&2?e.health=Math.max(1,e.health):e.die&&e.die(e,t,n,w,i,u):w>0&&e.pain&&e.pain(e,n,o,w,u),{take:w,psave:v,asave:g,knocked:h,killed:x,remainingCells:l,remainingArmor:_}}function Ei(e,t,n,r,i,a,s,o,c={},u){let m=[],d=ws(t),h=c.canDamage??(()=>!0);for(let f of e){if(f===i||!f.takedamage||!h(f,t))continue;let v=f.mins&&f.maxs?Yl(d,U(f.origin,f.mins),U(f.origin,f.maxs)):ws(f),g=T(d,v),l=Ut(g);if(a>0&&l>a)continue;let _=r-.5*l;if(_<=0)continue;let w=f===n?_*.5:_,x=I(T(f.origin,d)),A=me(f,t,n,x,v,x,w,w,s|1,o,u);m.push({target:f,result:A,appliedDamage:w})}return m}var z2=_i();var Tn=.1,Ct=80,Vs=_i();function hh(){return Vs.frandom()}function Hs(e,t){return Math.floor(Vs.frandom()*(t-e+1)+e)}function lt(e,t,n){J(e,Tn,n)}function ye(e,t,n){ae(e,t,Tn,n)}function ut(e,t,n){ce(e,t,Tn,n)}function q(e,t,n){Q(e,t,Tn,n)}function O(e,t,n){ne(e,t)}var Ft={pain:"berserk/berpain2.wav",die:"berserk/berdeth2.wav",idle:"berserk/beridle1.wav",idle2:"berserk/idle.wav",punch:"berserk/attack.wav",search:"berserk/bersrch1.wav",sight:"berserk/sight.wav",thud:"mutant/thud1.wav",explod:"world/explod2.wav",jump:"berserk/jump.wav",footstep:"misc/step1.wav"};function Ae(e,t){t.sound(e,2,Ft.footstep,1,1,0)}function Mn(e,t){e.monsterinfo.current_move=t,e.monsterinfo.nextframe=t.firstframe,e.frame=t.firstframe,e.monsterinfo.aiflags&=-129}function fh(e,t){}var ki,Ws,ph,Ks,gh,vh,_h,yh,wh,Xs,xh;function Sh(e,t){Mn(e,ki)}function Ah(e,t){e.monsterinfo.aiflags&1||e.enemy||hh()>.15||(Mn(e,Ws),t.sound(e,1,Ft.idle,1,2,0))}var Eh=[{ai:lt,dist:0,think:Ah},{ai:lt,dist:0},{ai:lt,dist:0},{ai:lt,dist:0},{ai:lt,dist:0}];ki={firstframe:0,lastframe:4,frames:Eh,endfunc:null};var kh=Array.from({length:20},()=>({ai:lt,dist:0}));Ws={firstframe:5,lastframe:24,frames:kh,endfunc:Sh};var bh=[{ai:ye,dist:9.1},{ai:ye,dist:6.3},{ai:ye,dist:4.9},{ai:ye,dist:6.7,think:Ae},{ai:ye,dist:6},{ai:ye,dist:8.2},{ai:ye,dist:7.2},{ai:ye,dist:6.1},{ai:ye,dist:4.9},{ai:ye,dist:4.7,think:Ae},{ai:ye,dist:4.7}];ph={firstframe:25,lastframe:35,frames:bh,endfunc:null};var Mh=[{ai:ut,dist:21},{ai:ut,dist:11,think:Ae},{ai:ut,dist:21},{ai:ut,dist:25,think:fh},{ai:ut,dist:18,think:Ae},{ai:ut,dist:19}];Ks={firstframe:36,lastframe:41,frames:Mh,endfunc:null};function Xt(e,t){e.monsterinfo.aiflags&1?Mn(e,ki):Mn(e,Ks)}function $s(e,t,n,r,i){let a={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},s=Z(e.angles).forward,o={x:a.x+s.x+t.x,y:a.y+s.y+t.y,z:a.z+s.z+t.z},c={x:a.x+s.x*Ct,y:a.y+s.y*Ct,z:a.z+s.z*Ct},u=i.trace(a,null,null,c,e,536870913);return!u.ent||!u.ent.takedamage?!1:(me(u.ent,e,e,s,u.endpos,u.plane?.normal||W,n,r,0,0,i.multicast.bind(i)),!0)}function zh(e,t){$s(e,{x:Ct,y:0,z:-24},Hs(5,11),80,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+1.2)}function Ys(e,t){t.sound(e,1,Ft.punch,1,1,0)}var Rh=[{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0,think:Ys},{ai:q,dist:0,think:zh},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0}];gh={firstframe:67,lastframe:74,frames:Rh,endfunc:Xt};function Lh(e,t){$s(e,{x:Ct,y:0,z:-4},Hs(15,21),400,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+2.5)}var Nh=[{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0,think:Ae},{ai:q,dist:0},{ai:q,dist:0,think:Ys},{ai:q,dist:0},{ai:q,dist:0,think:Lh},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0}];vh={firstframe:75,lastframe:86,frames:Nh,endfunc:Xt};function js(e,t){t.sound(e,1,Ft.thud,1,1,0),t.sound(e,2,Ft.explod,.75,1,0);let{forward:n,right:r}=Z(e.angles),i={x:20,y:-14.3,z:-21},a={x:e.origin.x+n.x*i.x+r.x*i.y,y:e.origin.y+n.y*i.x+r.y*i.y,z:e.origin.z+n.z*i.x+r.z*i.y+i.z},s=t.trace(e.origin,null,null,a,e,1);t.multicast(s.endpos,2,ve.temp_entity,_e.BERSERK_SLAM,s.endpos),e.gravity=1,e.velocity={x:0,y:0,z:0};let o=8,c=300,u=165,m=t.findByRadius(s.endpos,u*2);for(let d of m){if(d===e||!d.takedamage)continue;let h=Math.sqrt(Math.pow(d.origin.x-s.endpos.x,2)+Math.pow(d.origin.y-s.endpos.y,2)+Math.pow(d.origin.z-s.endpos.z,2)),f=Math.max(0,1-h/u);if(f<=0)continue;let v=Math.max(1,o*f*f),g=c*f*f,l=I(T(d.origin,s.endpos));if(me(d,e,e,l,d.origin,l,v,g,1,0,t.multicast.bind(t)),d.client){let _={...d.velocity};_.z=Math.max(270,_.z),d.velocity=_}}}function Oh(e,t,n,r,i){if(e.health<=0){e.touch=void 0;return}}function bi(e,t){e.velocity.z<0?e.gravity=2.25*(800/800):e.gravity=5.25*(800/800)}function Th(e,t){if(!e.enemy)return;let n=T(e.enemy.origin,e.origin),i=Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)*1.95,a=I({x:n.x,y:n.y,z:0}),s=Bt(a);e.angles={x:e.angles.x,y:s.y,z:e.angles.z};let o={...e.origin};o.z+=1,e.origin=o,e.velocity={x:a.x*i,y:a.y*i,z:450},e.groundentity=null,e.monsterinfo.aiflags|=2048,e.monsterinfo.attack_finished=t.timeSeconds+3,e.touch=(c,u,m,d)=>{Oh(c,u,m,d,t),c.groundentity&&(c.frame=104,js(c,t),c.touch=void 0)},bi(e,t)}function Ih(e,t){if(bi(e,t),e.groundentity){e.monsterinfo.attack_finished=0,e.monsterinfo.aiflags&=-2049,e.frame=104,e.touch&&(js(e,t),e.touch=void 0);return}t.timeSeconds>(e.monsterinfo.attack_finished||0)?e.monsterinfo.nextframe=89:e.monsterinfo.nextframe=91}var Ph=[{ai:q,dist:0},{ai:q,dist:0},{ai:O,dist:0,think:Th},{ai:O,dist:0,think:bi},{ai:O,dist:0,think:Ih},{ai:O,dist:0,think:Ae},{ai:O,dist:0},{ai:O,dist:0,think:Ae},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0,think:Ae}];_h={firstframe:87,lastframe:109,frames:Ph,endfunc:Xt};var Ch=[{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0}];yh={firstframe:149,lastframe:152,frames:Ch,endfunc:Xt};var Dh=Array.from({length:20},(e,t)=>({ai:O,dist:0,think:t%5===4?Ae:void 0}));wh={firstframe:153,lastframe:172,frames:Dh,endfunc:Xt};function qs(e,t){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.monsterinfo.nextframe=Xs.lastframe,e.nextthink=-1,e.deadflag=2}var Fh=[{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0,think:Ae},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0}];Xs={firstframe:173,lastframe:185,frames:Fh,endfunc:qs};var Uh=[{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0,think:Ae},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0}];xh={firstframe:186,lastframe:193,frames:Uh,endfunc:qs};function Bh(e,t,n,r,i,a,s,o=0){let c=e.spawn();c.classname="rocket",c.movetype=8,c.solid=2,c.owner=t,c.origin={...n},c.velocity={x:r.x*s,y:r.y*s,z:r.z*s},c.mins={x:-4,y:-4,z:-4},c.maxs={x:4,y:4,z:4},c.touch=(u,m,d,h)=>{if(m===u.owner)return;m&&m.takedamage&&me(m,u,u.owner,u.velocity,u.origin,d?d.normal:W,i,0,0,8,e.multicast.bind(e));let f=e.findByRadius(u.origin,120);Ei(f,u,u.owner,a,u.owner,120,0,9,{},e.multicast.bind(e)),e.multicast(u.origin,2,ve.temp_entity,_e.ROCKET_EXPLOSION,u.origin),e.free(u)},e.finalizeSpawn(c)}function Zs(e,t,n,r,i,a){let s=e.spawn();s.classname="grenade",s.owner=t,s.origin={...n},s.velocity={x:r.x*a,y:r.y*a,z:r.z*a},s.movetype=9,s.clipmask=268566530,s.solid=2,s.modelindex=e.modelIndex("models/objects/grenade/tris.md2"),s.mins={x:-4,y:-4,z:-4},s.maxs={x:4,y:4,z:4};let o=c=>{let u=e.findByRadius(c.origin,120);Ei(u,c,c.owner,i,c.owner,120,0,6,{},e.multicast.bind(e)),e.multicast(c.origin,2,ve.temp_entity,_e.GRENADE_EXPLOSION,c.origin),e.free(c)};s.touch=(c,u,m,d)=>{if(u!==c.owner&&u&&u.takedamage){o(c);return}},s.think=c=>{o(c)},e.scheduleThink(s,e.timeSeconds+2.5),e.finalizeSpawn(s)}function Gh(e,t,n,r,i,a,s){let o=e.spawn();o.classname=s===10?"hyperblaster_bolt":"blaster_bolt",o.owner=t,o.origin={...n},o.velocity={x:r.x*a,y:r.y*a,z:r.z*a},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,m,d)=>{u!==c.owner&&(u&&u.takedamage?me(u,c,c.owner,c.velocity,c.origin,m?m.normal:W,i,1,0,s,e.multicast.bind(e)):m&&e.multicast(c.origin,1,ve.temp_entity,_e.BLASTER,c.origin,m.normal),e.free(c))},e.finalizeSpawn(o)}function Vh(e,t,n,r,i,a,s){let o=e.spawn();o.classname="bfg_ball",o.owner=t,o.origin={...n},o.velocity={x:r.x*a,y:r.y*a,z:r.z*a},o.movetype=8,o.clipmask=268566530,o.solid=2,o.modelindex=e.modelIndex("models/objects/bfgball/tris.md2"),o.mins={x:-10,y:-10,z:-10},o.maxs={x:10,y:10,z:10},o.touch=(c,u,m,d)=>{if(u===c.owner)return;let h=e.findByRadius(c.origin,s);if(Ei(h,c,c.owner,i,c.owner,s,0,13,{},e.multicast.bind(e)),e.multicast(c.origin,2,ve.temp_entity,_e.BFG_EXPLOSION,c.origin),c.owner){let f=e.findByRadius(c.origin,1e3),v=c.owner.origin;for(let g of f){if(g===c.owner||!g.takedamage)continue;let l=e.trace(v,null,null,g.origin,c.owner,3);if(l.ent!==g&&l.fraction<1)continue;let _=I(T(g.origin,c.origin));me(g,c,c.owner,_,g.origin,W,10,10,4,12,e.multicast.bind(e)),e.multicast(c.origin,2,ve.temp_entity,_e.BFG_LASER,v,g.origin)}}e.free(c)},o.think=c=>{c.nextthink=e.timeSeconds+.1},e.scheduleThink(o,e.timeSeconds+.1),e.finalizeSpawn(o)}function xs(){return 2*Math.random()-1}function zn(e,t,n,r,i,a,s,o,c,u=0){let m=n;if(a>0||s>0){let f=Bt(n),{right:v,up:g}=Z(f),l=xs()*a,_=xs()*s;m={x:n.x+v.x*l+g.x*_,y:n.y+v.y*l+g.y*_,z:n.z+v.z*l+g.z*_},m=I(m)}let d=U(t,B(m,8192)),h=c.trace(t,d,W,W,e,Ht);!h.ent||h.fraction===1||me(h.ent,e,e,m,h.endpos,h.plane?.normal||W,r,i,18,u)}var qe=zn;function Hh(e,t,n,r,i,a,s,o,c,u,m=2){for(let d=0;d<o;d++)qe(e,t,n,r,i,a,s,c,u,m)}function Fe(e,t,n,r,i,a,s,o,c=1){Gh(o,e,t,n,r,i,c)}function Wh(e,t,n,r,i,a,s){Zs(s,e,t,n,r,i)}function $t(e,t,n,r,i,a,s){Bh(s,e,t,n,r,120,i)}function Js(e,t,n,r,i,a,s,o,c){Vh(c,e,t,n,r,i,s)}function Qs(e,t,n,r,i,a,s){let o=U(t,B(n,8192)),c=s.trace(t,o,W,W,e,Ht);s.multicast(t,2,ve.temp_entity,_e.RAILTRAIL,t,c.endpos),c.ent&&c.ent.takedamage&&me(c.ent,e,e,n,c.endpos,W,r,i,6,11)}function Yt(e,t,n,r,i){if(!e.enemy)return!1;let{forward:a}=Z(e.angles),s={...e.origin};s.z+=e.viewheight||0;let o=t.x>0?t.x:80,c=U(s,B(a,o)),u=i.trace(s,c,W,W,e,Ht);if(u.ent===e.enemy||u.ent&&u.ent.takedamage){let m=I(T(u.endpos,s));return me(u.ent,e,e,m,u.endpos,u.plane?.normal||W,n,r,0,0),!0}return!1}function Kh(e,t,n,r,i,a,s,o){$t(e,t,n,r,i,a,o)}function Ss(e,t){let n={...e.origin},r=U(n,B(e.movedir,2048)),i=t.trace(n,r,W,W,e,Ee|Gt|Vt|Ps);e.dmg>0&&i.ent&&i.ent.takedamage&&i.ent!==e.owner&&me(i.ent,e,e.owner,e.movedir,i.endpos,W,e.dmg,0,4,31),i.ent&&i.ent.solid===3&&t.multicast(i.endpos,1,ve.temp_entity,_e.LASER_SPARKS,10,i.endpos,i.plane?.normal||W,e.skin),t.linkentity(e)}function Xh(e,t){e.owner&&(e.owner.beam===e&&(e.owner.beam=null),e.owner.beam2===e&&(e.owner.beam2=null)),t.free(e)}function As(e,t,n,r,i){let a=n?e.beam2:e.beam;(!a||!a.inUse)&&(a=i.spawn(),a.classname="laser_beam",a.movetype=0,a.solid=0,a.renderfx|=8,a.modelindex=1,a.owner=e,a.dmg=t,a.frame=2,e.monsterinfo.aiflags&64?a.skin=4092850673:a.skin=4076007664,a.think=(s,o)=>{s.postthink&&s.postthink(s,o),o.timeSeconds>=s.timestamp?Xh(s,o):s.nextthink=o.timeSeconds+.1},a.postthink=(s,o)=>{r(s,o),Ss(s,o)},n?e.beam2=a:e.beam=a),a.timestamp=i.timeSeconds+.2,a.nextthink=i.timeSeconds+.01,r(a,i),Ss(a,i)}var Mi=.1,$h={x:0,y:30,z:-15},Yh={x:0,y:15,z:0},jh={x:0,y:-15,z:0},qh={x:0,y:-30,z:-15},Zh={x:30,y:20,z:0},Jh={x:30,y:-20,z:0};function Qh(e,t,n){J(e,Mi,n)}function ef(e,t,n){ae(e,t,Mi,n)}function In(e,t,n){Q(e,t,Mi,n)}function zi(e,t,n){ne(e,t)}var Ri,eo,to,tf,no,ro,nf,rf,af,io;function sf(e){e.monsterinfo.current_move=Ri}function of(e){e.monsterinfo.current_move=eo}function jt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=to:e.monsterinfo.current_move=Ri}function ao(e){e.monsterinfo.current_move=no}function cf(e){e.enemy&&Dt(e,e.enemy)&&Math.random()<=.7?ao(e):e.monsterinfo.current_move=ro}function ui(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function uf(e,t){if(!e.enemy)return;t.engine.sound?.(e,1,"boss2/machgun.wav",1,1,0);let n=ui(e,Zh),r=I(T(e.enemy.origin,n));qe(e,n,r,6,4,.1,.05,0,t,4);let i=ui(e,Jh),a=I(T(e.enemy.origin,i));qe(e,i,a,6,4,.1,.05,0,t,4)}function mf(e,t){if(!e.enemy)return;let n=[$h,Yh,jh,qh],r=n[Math.floor(Math.random()*n.length)],i=ui(e,r),a=I(T(e.enemy.origin,i));$t(e,i,a,50,500,0,t)}function df(e){e.monsterinfo.nextframe=io.lastframe,e.nextthink=-1}var so=Array.from({length:20},()=>({ai:ef,dist:10}));eo={firstframe:0,lastframe:19,frames:so,endfunc:of};to={firstframe:0,lastframe:19,frames:so,endfunc:jt};var lf=Array.from({length:21},()=>({ai:Qh,dist:0}));Ri={firstframe:29,lastframe:49,frames:lf,endfunc:sf};var hf=Array.from({length:9},(e,t)=>({ai:In,dist:2,think:t===8?ao:null}));tf={firstframe:50,lastframe:58,frames:hf,endfunc:null};var ff=Array.from({length:6},()=>({ai:In,dist:2,think:uf}));no={firstframe:59,lastframe:64,frames:ff,endfunc:cf};var pf=Array.from({length:4},()=>({ai:In,dist:2}));ro={firstframe:65,lastframe:68,frames:pf,endfunc:jt};var gf=Array.from({length:21},(e,t)=>({ai:In,dist:2,think:t===12?mf:null}));nf={firstframe:69,lastframe:89,frames:gf,endfunc:jt};var vf=Array.from({length:18},()=>({ai:zi,dist:0}));rf={firstframe:90,lastframe:107,frames:vf,endfunc:jt};var _f=Array.from({length:4},()=>({ai:zi,dist:0}));af={firstframe:108,lastframe:111,frames:_f,endfunc:jt};var yf=Array.from({length:49},()=>({ai:zi,dist:0}));io={firstframe:112,lastframe:160,frames:yf,endfunc:df};var Pn=.1,Li=80,Cn=Math.random;function oo(e,t,n){J(e,Pn,n)}function we(e,t,n){ae(e,t,Pn,n)}function xe(e,t,n){ce(e,t,Pn,n)}function k(e,t,n){Q(e,t,Pn,n)}function L(e,t,n){ne(e,t)}var Ni,wf,xf,co,uo,Sf,Af,Ef,kf,bf,Mf,zf,Rf,Lf;function mo(e){e.monsterinfo.current_move=Ni}function Ke(e){e.monsterinfo.power_armor_type=1,e.monsterinfo.aiflags&4?e.monsterinfo.current_move=Ni:e.monsterinfo.current_move=co}function Nf(e,t){t.engine.sound?.(e,0,"brain/melee1.wav",1,1,0)}function Of(e,t){let n={x:Li,y:e.maxs.x,z:8};Yt(e,n,15+Math.floor(Cn()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function Tf(e,t){t.engine.sound?.(e,0,"brain/melee2.wav",1,1,0)}function If(e,t){let n={x:Li,y:e.mins.x,z:8};Yt(e,n,15+Math.floor(Cn()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function lo(e,t){e.count=0,e.monsterinfo.power_armor_type=0,t.engine.sound?.(e,0,"brain/brnatck1.wav",1,1,0)}function ho(e,t){Yt(e,{x:Li,y:0,z:8},10+Math.floor(Cn()*5),-600,t)?e.count=1:e.monsterinfo.melee_debounce_time=t.timeSeconds+3,t.engine.sound?.(e,0,"brain/brnatck3.wav",1,1,0)}function fo(e){e.monsterinfo.power_armor_type=1,e.count&&(e.count=0,e.monsterinfo.current_move=uo)}function Es(e,t){if(!e.enemy)return;let n=Z(e.angles).forward,r={...e.origin};r.z+=24;let i={...e.enemy.origin};if(t.trace(r,i,W,W,e,1610612739).ent!==e.enemy)return;t.engine.sound?.(e,0,"brain/brnatck3.wav",1,1,0),t.multicast(e.origin,1,ve.temp_entity,_e.PARASITE_ATTACK,e,r,i);let s=T(r,i);me(e.enemy,e,e,s,e.enemy.origin,W,5,0,0,37),e.origin={...e.origin,z:e.origin.z+1};let o=Z(e.angles).forward;e.enemy.velocity=B(o,-1200)}var ks=[{x:.7467,y:.23837,z:34.16769},{x:-1.07639,y:.23837,z:33.386372},{x:-1.3355,y:5.3343,z:32.17717},{x:-.17536,y:8.84637,z:30.635479},{x:-2.75759,y:7.80461,z:30.15086},{x:-5.57509,y:5.15284,z:30.05616},{x:-7.01755,y:3.26247,z:30.552521},{x:-7.91574,y:.6388,z:33.176189},{x:-3.91539,y:8.28573,z:33.976349},{x:-.91354,y:10.93303,z:34.141811},{x:-.3699,y:8.9239,z:34.189079}],bs=[{x:-3.36471,y:.32775,z:33.938381},{x:-5.14045,y:.49348,z:32.659851},{x:-5.34198,y:5.64698,z:31.277901},{x:-4.13448,y:9.27744,z:29.925621},{x:-6.59834,y:6.81509,z:29.32262},{x:-8.61084,y:2.52965,z:29.251591},{x:-9.23136,y:.09328,z:29.747959},{x:-11.00411,y:1.93693,z:32.39526},{x:-7.87831,y:7.64819,z:33.148151},{x:-4.94737,y:11.43005,z:33.31361},{x:-4.33282,y:9.44457,z:33.52634}];function Pf(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=Z(n.angles),s=n.frame-0;(s<0||s>=ks.length)&&(s=0);let o=ks[s],c=U(n.origin,B(i,o.x));c=U(c,B(r,o.y)),c=U(c,B(a,o.z));let u=I(T(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function Cf(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=Z(n.angles),s=n.frame-0;(s<0||s>=bs.length)&&(s=0);let o=bs[s],c=U(n.origin,B(i,o.x));c=U(c,B(r,o.y)),c=U(c,B(a,o.z));let u=I(T(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function Ne(e,t){As(e,1,!1,Pf,t),As(e,1,!0,Cf,t)}function Df(e){Cn()<.5&&e.enemy&&e.enemy.health>0&&(e.frame=0)}function Ff(e){return e.monsterinfo.aiflags&16||(e.monsterinfo.aiflags|=16),!0}function Uf(e){}function Bf(e){e.monsterinfo.aiflags&=-17}var Gf=Array.from({length:30},()=>({ai:oo,dist:0}));Ni={firstframe:162,lastframe:191,frames:Gf,endfunc:mo};var Vf=Array.from({length:30},()=>({ai:oo,dist:0}));wf={firstframe:192,lastframe:221,frames:Vf,endfunc:mo};var Hf=[{ai:we,dist:7},{ai:we,dist:2},{ai:we,dist:3},{ai:we,dist:3},{ai:we,dist:1},{ai:we,dist:0},{ai:we,dist:0},{ai:we,dist:9},{ai:we,dist:-4},{ai:we,dist:-1},{ai:we,dist:2}];xf={firstframe:0,lastframe:10,frames:Hf,endfunc:null};var Wf=[{ai:xe,dist:9},{ai:xe,dist:2},{ai:xe,dist:3},{ai:xe,dist:3},{ai:xe,dist:1},{ai:xe,dist:0},{ai:xe,dist:0},{ai:xe,dist:10},{ai:xe,dist:-4},{ai:xe,dist:-1},{ai:xe,dist:2}];co={firstframe:0,lastframe:10,frames:Wf,endfunc:null};var Kf=[{ai:k,dist:8},{ai:k,dist:3},{ai:k,dist:5},{ai:k,dist:0},{ai:k,dist:-3,think:Nf},{ai:k,dist:0},{ai:k,dist:-5},{ai:k,dist:-7,think:Of},{ai:k,dist:0},{ai:k,dist:6,think:Tf},{ai:k,dist:1},{ai:k,dist:2,think:If},{ai:k,dist:-3},{ai:k,dist:6},{ai:k,dist:-1},{ai:k,dist:-3},{ai:k,dist:2},{ai:k,dist:-11}];uo={firstframe:53,lastframe:70,frames:Kf,endfunc:Ke};var Xf=[{ai:k,dist:5},{ai:k,dist:-4},{ai:k,dist:-4},{ai:k,dist:-3},{ai:k,dist:0,think:lo},{ai:k,dist:0},{ai:k,dist:13,think:ho},{ai:k,dist:0},{ai:k,dist:2},{ai:k,dist:0},{ai:k,dist:-9,think:fo},{ai:k,dist:0},{ai:k,dist:4},{ai:k,dist:3},{ai:k,dist:2},{ai:k,dist:-3},{ai:k,dist:-6}];Sf={firstframe:71,lastframe:87,frames:Xf,endfunc:Ke};var $f=[{ai:k,dist:5},{ai:k,dist:-4},{ai:k,dist:-4},{ai:k,dist:-3},{ai:k,dist:0,think:lo},{ai:k,dist:0,think:Es},{ai:k,dist:13},{ai:k,dist:0,think:ho},{ai:k,dist:2},{ai:k,dist:0,think:Es},{ai:k,dist:-9,think:fo},{ai:k,dist:0},{ai:k,dist:4},{ai:k,dist:3},{ai:k,dist:2},{ai:k,dist:-3},{ai:k,dist:-6}];Af={firstframe:71,lastframe:87,frames:$f,endfunc:Ke};var Yf=[{ai:k,dist:9,think:Ne},{ai:k,dist:2,think:Ne},{ai:k,dist:3,think:Ne},{ai:k,dist:3,think:Ne},{ai:k,dist:1,think:Ne},{ai:k,dist:0,think:Ne},{ai:k,dist:0,think:Ne},{ai:k,dist:10,think:Ne},{ai:k,dist:-4,think:Ne},{ai:k,dist:-1,think:Ne},{ai:k,dist:2,think:Df}];Ef={firstframe:0,lastframe:10,frames:Yf,endfunc:Ke};var jf=[{ai:L,dist:-6},{ai:L,dist:-2},{ai:L,dist:-6},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:2},{ai:L,dist:0},{ai:L,dist:2},{ai:L,dist:1},{ai:L,dist:7},{ai:L,dist:0},{ai:L,dist:3},{ai:L,dist:-1}];kf={firstframe:88,lastframe:108,frames:jf,endfunc:Ke};var qf=[{ai:L,dist:-2},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:3},{ai:L,dist:1},{ai:L,dist:-2}];bf={firstframe:109,lastframe:116,frames:qf,endfunc:Ke};var Zf=[{ai:L,dist:-2},{ai:L,dist:2},{ai:L,dist:1},{ai:L,dist:3},{ai:L,dist:0},{ai:L,dist:-4}];Mf={firstframe:117,lastframe:122,frames:Zf,endfunc:Ke};var Jf=Array.from({length:18},()=>({ai:L,dist:0}));zf={firstframe:123,lastframe:140,frames:Jf,endfunc:po};var Qf=[{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:9},{ai:L,dist:0}];Rf={firstframe:141,lastframe:145,frames:Qf,endfunc:po};var e1=[{ai:L,dist:0},{ai:L,dist:-2,think:Ff},{ai:L,dist:17,think:Uf},{ai:L,dist:-3},{ai:L,dist:-1,think:Bf},{ai:L,dist:-5},{ai:L,dist:-6},{ai:L,dist:-6}];Lf={firstframe:146,lastframe:153,frames:e1,endfunc:Ke};function po(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var Dn=.1,t1=80,_t=Math.random;function go(e,t,n){J(e,Dn,n)}function n1(e,t,n){ae(e,t,Dn,n)}function r1(e,t,n){ce(e,t,Dn,n)}function N(e,t,n){Q(e,t,Dn,n)}function yt(e,t,n){ne(e,t)}var Oi,vo,_o,i1,Ti,mi,a1,Ii,yo,s1,o1,c1,u1,m1,d1,wo;function xo(e){e.monsterinfo.current_move=Oi}function l1(e){e.monsterinfo.current_move=vo}function Ze(e){if(e.monsterinfo.aiflags&4){e.monsterinfo.current_move=Oi;return}e.monsterinfo.current_move=_o}function h1(e){e.monsterinfo.aiflags&4||e.enemy||_t()<=.3&&(e.monsterinfo.current_move=wo)}function f1(e,t){_t()<.5?t.engine.sound?.(e,2,"chick/chkidle1.wav",1,0,0):t.engine.sound?.(e,2,"chick/chkidle2.wav",1,0,0)}function p1(e,t){let n={x:t1,y:e.mins.x,z:10};t.engine.sound?.(e,0,"chick/chkatck3.wav",1,1,0),Yt(e,n,10+Math.floor(_t()*6),100,t)}function g1(e,t){let{forward:n,right:r}=Z(e.angles),i={x:0,y:20,z:40},a=U(e.origin,B(n,i.x)),s=B(r,i.y),o=U(a,s),c={...o,z:o.z+i.z},u=e.skin>1?500:650,m=!!e.monsterinfo.blindfire,d=W;if(m&&e.monsterinfo.blind_fire_target)d=e.monsterinfo.blind_fire_target;else if(e.enemy)d=e.enemy.origin;else return;let h=T(d,c);!m&&e.enemy&&(_t()<.33||c.z<e.enemy.absmin.z?h={...h,z:h.z+e.enemy.viewheight}:h={...h,z:e.enemy.absmin.z+1-c.z});let f=I(h);e.skin>1?Kh(e,c,f,50,u,0,.075,t):$t(e,c,f,50,u,0,t)}function v1(e,t){if(t.engine.sound?.(e,0,"chick/chkatck1.wav",1,1,0),e.monsterinfo.blindfire&&e.monsterinfo.blind_fire_target){let n=T(e.monsterinfo.blind_fire_target,e.origin);e.ideal_yaw=Bt(n).y}}function _1(e,t){t.engine.sound?.(e,0,"chick/chkatck5.wav",1,1,0)}function y1(e){e.monsterinfo.current_move=Ti}function w1(e){if(e.monsterinfo.blindfire){e.monsterinfo.blindfire=!1,e.monsterinfo.current_move=mi;return}if(e.enemy&&e.enemy.health>0&&_t()<=.6){e.monsterinfo.current_move=Ti;return}e.monsterinfo.current_move=mi}function x1(e){if(e.enemy&&e.enemy.health>0&&_t()<=.9){e.monsterinfo.current_move=Ii;return}e.monsterinfo.current_move=yo}function S1(e){e.monsterinfo.current_move=Ii}var A1=Array.from({length:30},(e,t)=>({ai:go,dist:0,think:t===8?(n,r)=>f1(n,r):null}));wo={firstframe:201,lastframe:230,frames:A1,endfunc:xo};var E1=Array.from({length:30},(e,t)=>({ai:go,dist:0,think:t===29?h1:null}));Oi={firstframe:101,lastframe:130,frames:E1,endfunc:xo};var k1=Array.from({length:10},()=>({ai:n1,dist:6}));vo={firstframe:171,lastframe:180,frames:k1,endfunc:l1};var b1=Array.from({length:10},()=>({ai:r1,dist:12}));_o={firstframe:171,lastframe:180,frames:b1,endfunc:Ze};var M1=Array.from({length:5},()=>({ai:yt,dist:0}));s1={firstframe:90,lastframe:94,frames:M1,endfunc:Ze};var z1=Array.from({length:5},()=>({ai:yt,dist:0}));o1={firstframe:95,lastframe:99,frames:z1,endfunc:Ze};var R1=Array.from({length:21},()=>({ai:yt,dist:0}));c1={firstframe:100,lastframe:120,frames:R1,endfunc:Ze};var L1=Array.from({length:12},()=>({ai:yt,dist:0}));u1={firstframe:48,lastframe:59,frames:L1,endfunc:So};var N1=Array.from({length:23},()=>({ai:yt,dist:0}));m1={firstframe:60,lastframe:82,frames:N1,endfunc:So};function So(e){e.mins={x:-16,y:-16,z:0},e.maxs={x:16,y:16,z:16},e.movetype=7,e.nextthink=-1}var O1=[{ai:N,dist:0,think:v1},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:4},{ai:N,dist:0},{ai:N,dist:-3},{ai:N,dist:3},{ai:N,dist:5},{ai:N,dist:7},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0,think:y1}];i1={firstframe:0,lastframe:12,frames:O1,endfunc:null};var T1=[{ai:N,dist:19,think:g1},{ai:N,dist:-6},{ai:N,dist:-5},{ai:N,dist:-2},{ai:N,dist:-7},{ai:N,dist:0},{ai:N,dist:1},{ai:N,dist:10,think:_1},{ai:N,dist:4},{ai:N,dist:5},{ai:N,dist:6},{ai:N,dist:6},{ai:N,dist:4},{ai:N,dist:3,think:w1}];Ti={firstframe:13,lastframe:26,frames:T1,endfunc:null};var I1=[{ai:N,dist:-3},{ai:N,dist:0},{ai:N,dist:-6},{ai:N,dist:-4},{ai:N,dist:-2}];mi={firstframe:27,lastframe:31,frames:I1,endfunc:Ze};var P1=[{ai:N,dist:1},{ai:N,dist:8},{ai:N,dist:3}];a1={firstframe:32,lastframe:34,frames:P1,endfunc:S1};var C1=[{ai:N,dist:1},{ai:N,dist:7,think:p1},{ai:N,dist:-7},{ai:N,dist:1},{ai:N,dist:-1},{ai:N,dist:1},{ai:N,dist:0},{ai:N,dist:1},{ai:N,dist:-2,think:x1}];Ii={firstframe:35,lastframe:43,frames:C1,endfunc:null};var D1=[{ai:N,dist:-6},{ai:N,dist:-1},{ai:N,dist:-6},{ai:N,dist:0}];yo={firstframe:44,lastframe:47,frames:D1,endfunc:Ze};var F1=Array.from({length:7},()=>({ai:yt,dist:0}));d1={firstframe:83,lastframe:89,frames:F1,endfunc:Ze};var Fn=.1,U1=80,B1=24;function G1(e,t,n){J(e,Fn,n)}function V1(e,t,n){ae(e,t,Fn,n)}function Ao(e,t,n){ce(e,t,Fn,n)}function ee(e,t,n){Q(e,t,Fn,n)}function Pi(e,t,n){ne(e,t)}var H1,W1,Eo,ko,K1,X1,$1,Y1;function j1(e){e.monsterinfo.current_move=ko}function Ci(e){e.monsterinfo.current_move=Eo}function Ms(e,t){Yt(e,{x:U1,y:0,z:0},5,0,t)}function q1(e,t){t.engine.sound?.(e,0,"flipper/flpatck1.wav",1,1,0)}var Z1=[{ai:G1,dist:0}];H1={firstframe:41,lastframe:41,frames:Z1,endfunc:null};var J1=Array.from({length:24},()=>({ai:Ao,dist:B1}));ko={firstframe:70,lastframe:93,frames:J1,endfunc:null};var Q1=Array.from({length:6},()=>({ai:Ao,dist:8}));Eo={firstframe:65,lastframe:70,frames:Q1,endfunc:j1};var ep=Array.from({length:24},()=>({ai:V1,dist:4}));W1={firstframe:41,lastframe:64,frames:ep,endfunc:null};var tp=Array.from({length:5},()=>({ai:Pi,dist:0}));X1={firstframe:99,lastframe:103,frames:tp,endfunc:Ci};var np=Array.from({length:5},()=>({ai:Pi,dist:0}));$1={firstframe:94,lastframe:98,frames:np,endfunc:Ci};var rp=[{ai:ee,dist:0,think:q1},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0,think:Ms},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0,think:Ms},{ai:ee,dist:0}];K1={firstframe:0,lastframe:19,frames:rp,endfunc:Ci};function ip(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var ap=Array.from({length:56},()=>({ai:Pi,dist:0}));Y1={firstframe:104,lastframe:159,frames:ap,endfunc:ip};var Un=.1;function sp(e,t,n){J(e,Un,n)}function op(e,t,n){ae(e,t,Un,n)}function cp(e,t,n){ce(e,t,Un,n)}function up(e,t,n){Q(e,t,Un,n)}function bo(e,t,n){ne(e,t)}var Di,Mo,zo,mp,dp,Ro;function lp(e){e.monsterinfo.current_move=Di}function hp(e){e.monsterinfo.current_move=Mo}function Fi(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=zo:e.monsterinfo.current_move=Di}function fp(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));Fe(e,n,r,5,1e3,0,0,t,1)}function pp(e){e.monsterinfo.nextframe=Ro.lastframe,e.nextthink=-1}var gp=Array.from({length:46},()=>({ai:sp,dist:0}));Di={firstframe:0,lastframe:45,frames:gp,endfunc:lp};var vp=Array.from({length:46},()=>({ai:op,dist:5}));Mo={firstframe:0,lastframe:45,frames:vp,endfunc:hp};var _p=Array.from({length:46},()=>({ai:cp,dist:10}));zo={firstframe:0,lastframe:45,frames:_p,endfunc:Fi};var yp=Array.from({length:20},(e,t)=>({ai:up,dist:0,think:t===10?fp:null}));mp={firstframe:46,lastframe:65,frames:yp,endfunc:Fi};var wp=Array.from({length:6},()=>({ai:bo,dist:0}));dp={firstframe:66,lastframe:71,frames:wp,endfunc:Fi};var xp=Array.from({length:10},()=>({ai:bo,dist:0}));Ro={firstframe:84,lastframe:93,frames:xp,endfunc:pp};var Bn=.1;function Sp(e,t,n){J(e,Bn,n)}function Ap(e,t,n){ae(e,t,Bn,n)}function Ep(e,t,n){ce(e,t,Bn,n)}function kp(e,t,n){Q(e,t,Bn,n)}function Lo(e,t,n){ne(e,t)}var Ui,No,Oo,bp,Mp,To;function zp(e){e.monsterinfo.current_move=Ui}function Rp(e){e.monsterinfo.current_move=No}function Bi(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Oo:e.monsterinfo.current_move=Ui}function Lp(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));Fe(e,n,r,5,1e3,0,0,t,1)}function Np(e,t){if(!e.enemy)return;let n=5+Math.random()*5;vt(e,e.enemy)<=80&&Dt(e,e.enemy)&&me(e.enemy,e,e,I(T(e.enemy.origin,e.origin)),e.enemy.origin,W,n,5,2,0)}function Op(e){e.monsterinfo.nextframe=To.lastframe,e.nextthink=-1}var Tp=Array.from({length:46},()=>({ai:Sp,dist:0}));Ui={firstframe:0,lastframe:45,frames:Tp,endfunc:zp};var Ip=Array.from({length:46},()=>({ai:Ap,dist:5}));No={firstframe:0,lastframe:45,frames:Ip,endfunc:Rp};var Pp=Array.from({length:46},()=>({ai:Ep,dist:10}));Oo={firstframe:0,lastframe:45,frames:Pp,endfunc:Bi};var Cp=Array.from({length:20},(e,t)=>({ai:kp,dist:0,think:t===10?Lp:t===12?Np:null}));bp={firstframe:46,lastframe:65,frames:Cp,endfunc:Bi};var Dp=Array.from({length:6},()=>({ai:Lo,dist:0}));Mp={firstframe:66,lastframe:71,frames:Dp,endfunc:Bi};var Fp=Array.from({length:10},()=>({ai:Lo,dist:0}));To={firstframe:84,lastframe:93,frames:Fp,endfunc:Op};var Gn=.1;function Up(e,t,n){J(e,Gn,n)}function Bp(e,t,n){ae(e,t,Gn,n)}function Gp(e,t,n){ce(e,t,Gn,n)}function Io(e,t,n){Q(e,t,Gn,n)}function Po(e,t,n){ne(e,t)}var Gi,Co,Do,Vp,Hp,Wp,Fo;function Kp(e){e.monsterinfo.current_move=Gi}function Xp(e){e.monsterinfo.current_move=Co}function Vn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Do:e.monsterinfo.current_move=Gi}function $p(e){return e<=80?"melee":e<=500?"near":e<=1e3?"mid":"far"}function Yp(e,t){if(!e.enemy||!Dt(e,e.enemy))return;let n=vt(e,e.enemy);if($p(n)!=="melee")return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},i=I(T(e.enemy.origin,r));me(e.enemy,e,e,i,e.origin,{x:0,y:0,z:0},20,10,0,0)}function jp(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));Qs(e,n,r,50,100,0,t)}function qp(e){e.monsterinfo.nextframe=Fo.lastframe,e.nextthink=-1}var Zp=Array.from({length:30},()=>({ai:Up,dist:0}));Gi={firstframe:0,lastframe:29,frames:Zp,endfunc:Kp};var Jp=Array.from({length:40},()=>({ai:Bp,dist:3}));Co={firstframe:30,lastframe:69,frames:Jp,endfunc:Xp};var Qp=Array.from({length:20},()=>({ai:Gp,dist:12}));Do={firstframe:70,lastframe:89,frames:Qp,endfunc:Vn};var eg=Array.from({length:10},(e,t)=>({ai:Io,dist:0,think:t===5?Yp:null}));Vp={firstframe:90,lastframe:99,frames:eg,endfunc:Vn};var tg=Array.from({length:12},(e,t)=>({ai:Io,dist:0,think:t===6?jp:null}));Hp={firstframe:100,lastframe:111,frames:tg,endfunc:Vn};var ng=Array.from({length:6},()=>({ai:Po,dist:0}));Wp={firstframe:112,lastframe:117,frames:ng,endfunc:Vn};var rg=Array.from({length:12},()=>({ai:Po,dist:0}));Fo={firstframe:118,lastframe:129,frames:rg,endfunc:qp};var Hn=.1;function ig(e,t,n){J(e,Hn,n)}function ag(e,t,n){ae(e,t,Hn,n)}function sg(e,t,n){ce(e,t,Hn,n)}function Uo(e,t,n){Q(e,t,Hn,n)}function Bo(e,t,n){ne(e,t)}var Vi,Go,Vo,og,cg,ug,Ho;function mg(e){e.monsterinfo.current_move=Vi}function dg(e){e.monsterinfo.current_move=Go}function Wn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Vo:e.monsterinfo.current_move=Vi}function lg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},r=I(T(e.enemy.origin,n)),i=10,a=2;t.engine.sound?.(e,0,"gunner/gunatck2.wav",1,1,0),qe(e,n,r,i,a,0,0,0,t,5)}function hg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n)),i=50,a=600;t.engine.sound?.(e,0,"gunner/gunatck3.wav",1,1,0),Zs(t,e,n,r,i,a)}var fg=Array.from({length:30},()=>({ai:ig,dist:0}));Vi={firstframe:0,lastframe:29,frames:fg,endfunc:mg};var pg=Array.from({length:40},()=>({ai:ag,dist:2}));Go={firstframe:30,lastframe:69,frames:pg,endfunc:dg};var gg=Array.from({length:20},()=>({ai:sg,dist:10}));Vo={firstframe:70,lastframe:89,frames:gg,endfunc:Wn};var vg=Array.from({length:10},(e,t)=>({ai:Uo,dist:0,think:t>=2&&t<=8?lg:null}));og={firstframe:90,lastframe:99,frames:vg,endfunc:Wn};var _g=Array.from({length:10},(e,t)=>({ai:Uo,dist:0,think:t===5?hg:null}));cg={firstframe:100,lastframe:109,frames:_g,endfunc:Wn};var yg=Array.from({length:8},()=>({ai:Bo,dist:0}));ug={firstframe:110,lastframe:117,frames:yg,endfunc:Wn};var wg=Array.from({length:15},()=>({ai:Bo,dist:0}));function xg(e){e.monsterinfo.nextframe=Ho.lastframe,e.nextthink=-1}Ho={firstframe:118,lastframe:132,frames:wg,endfunc:xg};var Kn=.1;function Sg(e,t,n){J(e,Kn,n)}function Ag(e,t,n){ae(e,t,Kn,n)}function Eg(e,t,n){ce(e,t,Kn,n)}function kg(e,t,n){Q(e,t,Kn,n)}function Wo(e,t,n){ne(e,t)}var Hi,Ko,Xo,bg,Mg,$o;function zg(e){e.monsterinfo.current_move=Hi}function Rg(e){e.monsterinfo.current_move=Ko}function Wi(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Xo:e.monsterinfo.current_move=Hi}function Lg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));Fe(e,n,r,5,1e3,0,0,t,1)}function Ng(e){e.monsterinfo.nextframe=$o.lastframe,e.nextthink=-1}var Og=Array.from({length:46},()=>({ai:Sg,dist:0}));Hi={firstframe:0,lastframe:45,frames:Og,endfunc:zg};var Tg=Array.from({length:46},()=>({ai:Ag,dist:5}));Ko={firstframe:0,lastframe:45,frames:Tg,endfunc:Rg};var Ig=Array.from({length:46},()=>({ai:Eg,dist:10}));Xo={firstframe:0,lastframe:45,frames:Ig,endfunc:Wi};var Pg=Array.from({length:20},(e,t)=>({ai:kg,dist:0,think:t===10?Lg:null}));bg={firstframe:46,lastframe:65,frames:Pg,endfunc:Wi};var Cg=Array.from({length:6},()=>({ai:Wo,dist:0}));Mg={firstframe:66,lastframe:71,frames:Cg,endfunc:Wi};var Dg=Array.from({length:10},()=>({ai:Wo,dist:0}));$o={firstframe:84,lastframe:93,frames:Dg,endfunc:Ng};var Xn=.1;function Fg(e,t,n){J(e,Xn,n)}function Ug(e,t,n){ae(e,t,Xn,n)}function Bg(e,t,n){ce(e,t,Xn,n)}function Gg(e,t,n){Q(e,t,Xn,n)}function Yo(e,t,n){ne(e,t)}var Ki,jo,qo,Vg,Hg,Zo;function Wg(e){e.monsterinfo.current_move=Ki}function Kg(e){e.monsterinfo.current_move=jo}function Xi(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=qo:e.monsterinfo.current_move=Ki}function Xg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));Fe(e,n,r,5,1e3,0,0,t,1)}function $g(e){e.monsterinfo.nextframe=Zo.lastframe,e.nextthink=-1}var Yg=Array.from({length:46},()=>({ai:Fg,dist:0}));Ki={firstframe:0,lastframe:45,frames:Yg,endfunc:Wg};var jg=Array.from({length:46},()=>({ai:Ug,dist:5}));jo={firstframe:0,lastframe:45,frames:jg,endfunc:Kg};var qg=Array.from({length:46},()=>({ai:Bg,dist:10}));qo={firstframe:0,lastframe:45,frames:qg,endfunc:Xi};var Zg=Array.from({length:20},(e,t)=>({ai:Gg,dist:0,think:t===10?Xg:null}));Vg={firstframe:46,lastframe:65,frames:Zg,endfunc:Xi};var Jg=Array.from({length:6},()=>({ai:Yo,dist:0}));Hg={firstframe:66,lastframe:71,frames:Jg,endfunc:Xi};var Qg=Array.from({length:10},()=>({ai:Yo,dist:0}));Zo={firstframe:84,lastframe:93,frames:Qg,endfunc:$g};var $n=.1;function ev(e,t,n){J(e,$n,n)}function tv(e,t,n){ae(e,t,$n,n)}function nv(e,t,n){ce(e,t,$n,n)}function rv(e,t,n){Q(e,t,$n,n)}function $i(e,t,n){ne(e,t)}var Yi,Jo,Qo,iv,av,ec,sv;function ov(e){e.monsterinfo.current_move=Yi}function cv(e){e.monsterinfo.current_move=Jo}function Yn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Qo:e.monsterinfo.current_move=Yi}function uv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)},i=I(T(r,n));qe(e,n,i,5,2,.05,.05,0,t,4)}var mv=Array.from({length:22},()=>({ai:ev,dist:0}));Yi={firstframe:0,lastframe:21,frames:mv,endfunc:ov};var dv=Array.from({length:15},()=>({ai:tv,dist:4}));Jo={firstframe:22,lastframe:36,frames:dv,endfunc:cv};var lv=Array.from({length:8},()=>({ai:nv,dist:12}));Qo={firstframe:37,lastframe:44,frames:lv,endfunc:Yn};var hv=Array.from({length:15},(e,t)=>({ai:rv,dist:0,think:t>=5&&t<=7?uv:null}));iv={firstframe:45,lastframe:59,frames:hv,endfunc:Yn};var fv=Array.from({length:10},()=>({ai:$i,dist:0}));av={firstframe:60,lastframe:69,frames:fv,endfunc:Yn};var pv=Array.from({length:20},()=>({ai:$i,dist:0}));function gv(e){e.monsterinfo.nextframe=ec.lastframe,e.nextthink=-1}ec={firstframe:70,lastframe:89,frames:pv,endfunc:gv};var vv=Array.from({length:5},()=>({ai:$i,dist:0}));sv={firstframe:90,lastframe:94,frames:vv,endfunc:Yn};var jn=.1,_v={x:40,y:-20,z:20},yv={x:40,y:20,z:20},wv={x:30,y:0,z:40};function xv(e,t,n){J(e,jn,n)}function Sv(e,t,n){ae(e,t,jn,n)}function Av(e,t,n){ce(e,t,jn,n)}function ji(e,t,n){Q(e,t,jn,n)}function qt(e,t,n){ne(e,t)}var qi,tc,nc,Zi,di,Ev,kv,bv,Mv,rc;function zv(e){e.monsterinfo.current_move=qi}function Rv(e){e.monsterinfo.current_move=tc}function wt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=nc:e.monsterinfo.current_move=qi}function Lv(e,t){let n=(r,i,a,s,o,c)=>{let u=t.trace(r,i,a,s,o,c);return{fraction:u.fraction,ent:u.ent}};e.enemy&&Wt(e,e.enemy,n)&&Math.random()<.9?e.monsterinfo.current_move=Zi:e.monsterinfo.current_move=di}function li(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function Nv(e,t){if(!e.enemy)return;let n=li(e,yv),r=I(T(e.enemy.origin,n));zn(e,n,r,6,4,.05,.05,0,t,4);let i=li(e,_v),a=I(T(e.enemy.origin,i));zn(e,i,a,6,4,.05,.05,0,t,4)}function Ov(e,t){if(!e.enemy)return;let n=li(e,wv),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=I(T(r,n));Js(e,n,i,50,300,100,200,0,t)}function Tv(e){e.monsterinfo.nextframe=rc.lastframe,e.nextthink=-1}function Iv(e,t){let n=t.spawn();n.classname="monster_makron",n.origin={...e.origin},n.angles={...e.angles}}var Pv=Array.from({length:51},()=>({ai:xv,dist:0}));qi={firstframe:0,lastframe:50,frames:Pv,endfunc:zv};var Cv=Array.from({length:14},()=>({ai:Sv,dist:10}));tc={firstframe:51,lastframe:64,frames:Cv,endfunc:Rv};var Dv=Array.from({length:14},()=>({ai:Av,dist:10}));nc={firstframe:51,lastframe:64,frames:Dv,endfunc:wt};var Fv=Array.from({length:8},()=>({ai:ji,dist:0})),Uv={firstframe:65,lastframe:72,frames:Fv,endfunc:null},Bv=Array.from({length:6},()=>({ai:ji,dist:0,think:Nv}));Zi={firstframe:73,lastframe:78,frames:Bv,endfunc:Lv};Uv.endfunc=e=>{e.monsterinfo.current_move=Zi};var Gv=Array.from({length:4},()=>({ai:qt,dist:0}));di={firstframe:79,lastframe:82,frames:Gv,endfunc:wt};var Vv=Array.from({length:13},(e,t)=>({ai:ji,dist:0,think:t===6?Ov:null}));Ev={firstframe:83,lastframe:95,frames:Vv,endfunc:wt};var Hv=Array.from({length:3},()=>({ai:qt,dist:0}));kv={firstframe:96,lastframe:98,frames:Hv,endfunc:wt};var Wv=Array.from({length:3},()=>({ai:qt,dist:0}));bv={firstframe:99,lastframe:101,frames:Wv,endfunc:wt};var Kv=Array.from({length:25},()=>({ai:qt,dist:0}));Mv={firstframe:102,lastframe:126,frames:Kv,endfunc:wt};var Xv=Array.from({length:50},(e,t)=>({ai:qt,dist:0,think:t===49?((n,r)=>{}):t===48?Iv:null}));rc={firstframe:127,lastframe:176,frames:Xv,endfunc:Tv};var qn=.1,$v={x:30,y:28,z:24},Yv={x:26,y:16,z:24},jv={x:26,y:-14,z:24};function qv(e,t,n){J(e,qn,n)}function Zv(e,t,n){ae(e,t,qn,n)}function Jv(e,t,n){ce(e,t,qn,n)}function ic(e,t,n){Q(e,t,qn,n)}function xt(e,t,n){ne(e,t)}var Ji,ac,sc,Qv,oc,e_,t_,n_,r_,cc,i_;function a_(e){e.monsterinfo.current_move=Ji}function s_(e){e.monsterinfo.current_move=ac}function Xe(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=sc:e.monsterinfo.current_move=Ji}function Qi(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function o_(e,t){if(!e.enemy)return;t.engine.sound?.(e,0,"makron/bfg_fire.wav",1,1,0);let n=Qi(e,$v),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=I(T(r,n));Js(e,n,i,50,300,100,300,0,t)}function c_(e,t){if(!e.pos1)return;t.engine.sound?.(e,0,"makron/rail_fire.wav",1,1,0);let n=Qi(e,jv),r=I(T(e.pos1,n));Qs(e,n,r,50,100,0,t)}function u_(e){e.enemy&&(e.pos1={...e.enemy.origin},e.pos1={...e.pos1,z:e.pos1.z+(e.enemy.viewheight||0)})}function m_(e,t){t.engine.sound?.(e,0,"makron/blaster.wav",1,1,0);let n=Qi(e,Yv),r=(e.monsterinfo.nextframe||0)-oc.firstframe,i=0,a;if(e.enemy){let s={...e.enemy.origin};s.z+=e.enemy.viewheight||0;let o=T(s,n),u={...Bt(o)};r<=12?u.y-=5*(r-4):u.y-=40-5*(r-12),a=Z(u).forward}else{let{forward:s}=Z(e.angles);a=s}Fe(e,n,a,15,1e3,0,0,t,1)}function d_(e){e.monsterinfo.nextframe=cc.lastframe,e.nextthink=-1}var l_=Array.from({length:60},()=>({ai:qv,dist:0}));Ji={firstframe:0,lastframe:59,frames:l_,endfunc:a_};var h_=Array.from({length:10},()=>({ai:Zv,dist:8}));ac={firstframe:60,lastframe:69,frames:h_,endfunc:s_};var f_=Array.from({length:10},()=>({ai:Jv,dist:8}));sc={firstframe:60,lastframe:69,frames:f_,endfunc:Xe};var p_=Array.from({length:8},(e,t)=>({ai:ic,dist:0,think:t===3?o_:null}));Qv={firstframe:70,lastframe:77,frames:p_,endfunc:Xe};var g_=Array.from({length:26},(e,t)=>({ai:xt,dist:0,think:t>=4&&t<=20?m_:null}));oc={firstframe:78,lastframe:103,frames:g_,endfunc:Xe};var v_=Array.from({length:16},(e,t)=>({ai:ic,dist:0,think:t===7?u_:t===8?c_:null}));e_={firstframe:104,lastframe:119,frames:v_,endfunc:Xe};var __=Array.from({length:4},()=>({ai:xt,dist:0}));t_={firstframe:120,lastframe:123,frames:__,endfunc:Xe};var y_=Array.from({length:4},()=>({ai:xt,dist:0}));n_={firstframe:124,lastframe:127,frames:y_,endfunc:Xe};var w_=Array.from({length:27},()=>({ai:xt,dist:0}));r_={firstframe:128,lastframe:154,frames:w_,endfunc:Xe};var x_=Array.from({length:95},()=>({ai:xt,dist:0}));cc={firstframe:155,lastframe:249,frames:x_,endfunc:d_};var S_=Array.from({length:13},()=>({ai:xt,dist:0}));i_={firstframe:250,lastframe:262,frames:S_,endfunc:Xe};var Zn=.1;function A_(e,t,n){if(fc(e,n)){e.monsterinfo.current_move=Jn;return}J(e,Zn,n)}function E_(e,t,n){ae(e,t,Zn,n)}function k_(e,t,n){fc(e,n)?e.monsterinfo.current_move=Jn:ce(e,t,Zn,n)}function uc(e,t,n){Q(e,t,Zn,n)}function mc(e,t,n){ne(e,t)}var ea,dc,Jn,b_,lc,M_,hc;function z_(e){e.monsterinfo.current_move=ea}function R_(e){e.monsterinfo.current_move=dc}function Qn(e){if(e.enemy&&e.enemy.deadflag===2&&vt(e,e.enemy)<80){e.monsterinfo.current_move=lc;return}e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Jn:e.monsterinfo.current_move=ea}function L_(e,t){if(!e.enemy||e.enemy.health<=0)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));Fe(e,n,r,2,1e3,0,0,t,10)}function N_(e,t){if(!e.enemy||e.enemy.deadflag!==2)return;let n=e.enemy;n.deadflag=0,n.health=n.max_health,n.takedamage=!0,n.solid=2,n.nextthink=t.timeSeconds+.1,n.monsterinfo&&n.monsterinfo.stand&&n.monsterinfo.stand(n,t),e.enemy=null}function fc(e,t){if(e.enemy&&e.enemy.deadflag===2)return!0;if(Math.random()>.2)return!1;let n=null,r=1024,i=(a,s,o,c,u,m)=>{let d=t.trace(a,s,o,c,u,m);return{fraction:d.fraction,ent:d.ent}};return t.forEachEntity(a=>{if(a===e||a.deadflag!==2||!a.monsterinfo||a.classname==="monster_medic"||!Wt(e,a,i))return;let s=vt(e,a);s<r&&(r=s,n=a)}),n?(e.enemy=n,!0):!1}function O_(e){e.monsterinfo.nextframe=hc.lastframe,e.nextthink=-1}var T_=Array.from({length:30},()=>({ai:A_,dist:0}));ea={firstframe:0,lastframe:29,frames:T_,endfunc:z_};var I_=Array.from({length:40},()=>({ai:E_,dist:3}));dc={firstframe:30,lastframe:69,frames:I_,endfunc:R_};var P_=Array.from({length:20},()=>({ai:k_,dist:12}));Jn={firstframe:70,lastframe:89,frames:P_,endfunc:Qn};var C_=Array.from({length:16},(e,t)=>({ai:uc,dist:0,think:t>=4&&t<=13?L_:null}));b_={firstframe:90,lastframe:105,frames:C_,endfunc:Qn};var D_=Array.from({length:10},(e,t)=>({ai:uc,dist:0,think:t===5?N_:null}));lc={firstframe:106,lastframe:115,frames:D_,endfunc:Qn};var F_=Array.from({length:6},()=>({ai:mc,dist:0}));M_={firstframe:116,lastframe:121,frames:F_,endfunc:Qn};var U_=Array.from({length:10},()=>({ai:mc,dist:0}));hc={firstframe:122,lastframe:131,frames:U_,endfunc:O_};var Zt=.1;function z(e,t,n){J(e,Zt,n)}function le(e,t,n){ae(e,t,Zt,n)}function mt(e,t,n){ce(e,t,Zt,n)}function Ve(e,t,n){Q(e,t,Zt,n)}function H(e,t,n){ne(e,t)}function ri(e,t,n){oh(e,null,t,Zt)}var pc,gc,Rn,B_,G_,V_,H_,vc,_c;function W_(e){e.monsterinfo.current_move=gc}function K_(e){e.monsterinfo.current_move=pc}function St(e){e.monsterinfo.current_move=Rn}function yc(e,t,n){if(n.engine.sound?.(e,0,"mutant/mutatck1.wav",1,1,0),!e.enemy)return;let r=T(e.enemy.origin,e.origin);if(Ut(r)>100)return;let a=I(r);me(e.enemy,e,e,a,e.enemy.origin,W,t,0,0,0)}function X_(e,t){yc(e,30,t)}function zs(e,t){yc(e,30,t)}function ht(e,t){e.flags&1&&e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Rn),e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Rn)}function $_(e,t,n,r){e.health<=0||(t&&t.takedamage&&(e.velocity.z>0&&(e.velocity={...e.velocity,z:0}),me(t,e,e,I(e.velocity),e.origin,W,50,0,0,0)),(!t||!t.takedamage&&t.solid!==0)&&(e.touch=void 0))}function Y_(e,t){let n=Z(e.angles).forward;e.movetype=7,e.touch=$_,e.velocity=U(B(n,300),{x:0,y:0,z:300}),e.velocity=U(B(n,600),{x:0,y:0,z:250}),e.groundentity=null,t.engine.sound?.(e,0,"mutant/mutatck2.wav",1,1,0)}function j_(e){e.monsterinfo.nextframe=vc.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var q_=[{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0}];pc={firstframe:0,lastframe:50,frames:q_,endfunc:K_};var Z_=[{ai:le,dist:3},{ai:le,dist:1},{ai:le,dist:5},{ai:le,dist:10},{ai:le,dist:13},{ai:le,dist:12},{ai:le,dist:0},{ai:le,dist:0},{ai:le,dist:5},{ai:le,dist:6},{ai:le,dist:16},{ai:le,dist:15},{ai:le,dist:6}];gc={firstframe:51,lastframe:63,frames:Z_,endfunc:W_};var J_=[{ai:mt,dist:20},{ai:mt,dist:15},{ai:mt,dist:35},{ai:mt,dist:20},{ai:mt,dist:10},{ai:mt,dist:20}];Rn={firstframe:64,lastframe:69,frames:J_,endfunc:St};var Q_=[{ai:Ve,dist:0},{ai:Ve,dist:0},{ai:Ve,dist:0,think:zs},{ai:Ve,dist:0},{ai:Ve,dist:0,think:X_},{ai:Ve,dist:0},{ai:Ve,dist:0,think:zs},{ai:Ve,dist:0}];B_={firstframe:70,lastframe:77,frames:Q_,endfunc:St};var ey=[{ai:ri,dist:0},{ai:ri,dist:0},{ai:ri,dist:0,think:Y_},{ai:H,dist:0,think:ht},{ai:H,dist:0,think:ht},{ai:H,dist:0,think:ht},{ai:H,dist:0,think:ht},{ai:H,dist:0,think:ht}];_c={firstframe:93,lastframe:100,frames:ey,endfunc:St};_c.frames[3].ai=(e,t,n)=>{ht(e,n),!e.groundentity&&e.frame===99&&(e.groundentity||(e.monsterinfo.nextframe=96))};var ty=[{ai:H,dist:4},{ai:H,dist:-3},{ai:H,dist:-8},{ai:H,dist:2},{ai:H,dist:5}];G_={firstframe:78,lastframe:82,frames:ty,endfunc:St};var ny=[{ai:H,dist:-24},{ai:H,dist:11},{ai:H,dist:5},{ai:H,dist:-2}];V_={firstframe:83,lastframe:86,frames:ny,endfunc:St};var ry=[{ai:H,dist:11},{ai:H,dist:0},{ai:H,dist:-2},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0}];H_={firstframe:87,lastframe:92,frames:ry,endfunc:St};var iy=[{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0}];vc={firstframe:101,lastframe:109,frames:iy,endfunc:j_};var er=.1,ay=()=>Math.random();function F(e,t,n){J(e,er,n)}function Pe(e,t,n){ae(e,t,er,n)}function Ce(e,t,n){ce(e,t,er,n)}function se(e,t,n){Q(e,t,er,n)}function oe(e,t,n){ne(e,t)}var ta,wc,xc,sy,oy,Sc,Ac,cy,uy,na,Ec;function my(e,t){t.engine.sound?.(e,0,"parasite/paratck1.wav",1,1,0)}function dy(e,t){t.engine.sound?.(e,0,"parasite/paratck4.wav",1,1,0)}function dt(e,t){t.engine.sound?.(e,0,"parasite/paridle1.wav",1,2,0)}function hi(e,t){t.engine.sound?.(e,0,"parasite/paridle2.wav",1,2,0)}function ly(e){e.monsterinfo.current_move=na}function hy(e){ay()<=.8?e.monsterinfo.current_move=na:e.monsterinfo.current_move=Ec}function kc(e){e.monsterinfo.current_move=ta}function ra(e){e.monsterinfo.current_move=wc}function bc(e){e.monsterinfo.current_move=Ac}function Mc(e){e.monsterinfo.aiflags&&e.monsterinfo.aiflags&1?e.monsterinfo.current_move=ta:e.monsterinfo.current_move=xc}function ii(e,t){let n=T(t,e);if(Ut(n)>256)return!1;let a=Bt(n).x;return a<-180&&(a+=360),!(Math.abs(a)>30)}function Se(e,t){if(!e.enemy)return;let n=Z(e.angles),r=n.forward,i=n.right,a=n.up,s={x:24,y:0,z:6},o=U(e.origin,U(B(r,s.x),U(B(i,s.y),B(a,s.z)))),c=Xl(e.enemy.origin);if(!ii(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.maxs.z-8},!ii(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.mins.z+8},!ii(o,c)))||t.trace(o,c,W,W,e,Ht).ent!==e.enemy)return;let m=2,d=e.frame;d===41?(m=5,t.engine.sound?.(e.enemy,0,"parasite/paratck2.wav",1,1,0)):(d===42&&t.engine.sound?.(e,0,"parasite/paratck3.wav",1,1,0),m=2),t.multicast(e.origin,0,ve.temp_entity,{te:_e.PARASITE_ATTACK,entId:e.index,start:o,end:c});let h=I(T(o,c));me(e.enemy,e,e,h,e.enemy.origin,W,m,0,8,0),e.health<e.max_health&&(e.health+=m,e.health>e.max_health&&(e.health=e.max_health))}function fy(e){e.monsterinfo.nextframe=Sc.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var py=[{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0,think:dt},{ai:F,dist:0},{ai:F,dist:0,think:dt},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0,think:dt},{ai:F,dist:0},{ai:F,dist:0,think:dt},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0,think:dt},{ai:F,dist:0},{ai:F,dist:0,think:dt}];ta={firstframe:83,lastframe:99,frames:py,endfunc:kc};var gy=[{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0}];uy={firstframe:100,lastframe:103,frames:gy,endfunc:ly};var vy=[{ai:F,dist:0,think:hi},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0,think:hi},{ai:F,dist:0},{ai:F,dist:0}];na={firstframe:104,lastframe:109,frames:vy,endfunc:hy};var _y=[{ai:F,dist:0,think:hi},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0},{ai:F,dist:0}];Ec={firstframe:110,lastframe:117,frames:_y,endfunc:kc};var yy=[{ai:Ce,dist:0},{ai:Ce,dist:30}];Ac={firstframe:68,lastframe:69,frames:yy,endfunc:Mc};var wy=[{ai:Ce,dist:30},{ai:Ce,dist:30},{ai:Ce,dist:22},{ai:Ce,dist:19},{ai:Ce,dist:24},{ai:Ce,dist:28},{ai:Ce,dist:25}];xc={firstframe:70,lastframe:76,frames:wy,endfunc:Mc};var xy=[{ai:Pe,dist:0},{ai:Pe,dist:30,think:ra}];cy={firstframe:68,lastframe:69,frames:xy,endfunc:ra};var Sy=[{ai:Pe,dist:30},{ai:Pe,dist:30},{ai:Pe,dist:22},{ai:Pe,dist:19},{ai:Pe,dist:24},{ai:Pe,dist:28},{ai:Pe,dist:25}];wc={firstframe:70,lastframe:76,frames:Sy,endfunc:ra};var Ay=[{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:6},{ai:oe,dist:16},{ai:oe,dist:-6},{ai:oe,dist:-7},{ai:oe,dist:0}];oy={firstframe:57,lastframe:67,frames:Ay,endfunc:bc};var Ey=[{ai:se,dist:0,think:my},{ai:se,dist:0},{ai:se,dist:15,think:Se},{ai:se,dist:0,think:Se},{ai:se,dist:0,think:Se},{ai:se,dist:0,think:Se},{ai:se,dist:0,think:Se},{ai:se,dist:-2,think:Se},{ai:se,dist:-2,think:Se},{ai:se,dist:-3,think:Se},{ai:se,dist:-2,think:Se},{ai:se,dist:0,think:Se},{ai:se,dist:-1,think:Se},{ai:se,dist:0,think:dy},{ai:se,dist:-2},{ai:se,dist:-2},{ai:se,dist:-3},{ai:se,dist:0}];sy={firstframe:39,lastframe:56,frames:Ey,endfunc:bc};var ky=[{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0}];Sc={firstframe:32,lastframe:38,frames:ky,endfunc:fy};var tr=.1;var by=2;function My(e,t,n){J(e,tr,n)}function zy(e,t,n){ae(e,t,tr,n)}function Ry(e,t,n){ce(e,t,tr,n)}function zc(e,t,n){Q(e,t,tr,n)}function Rc(e,t,n){ne(e,t)}var ia,Lc,Nc,Ly,Ny,Oy,Oc;function Ty(e){e.monsterinfo.current_move=ia}function Iy(e){e.monsterinfo.current_move=Lc}function nr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Nc:e.monsterinfo.current_move=ia}function aa(e){return{x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight}}function sa(e,t){if(!e.enemy){let{forward:r}=Z(e.angles);return r}let n={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)};return I(T(n,t))}function Py(e,t){if(!e.enemy)return;let n=aa(e),r=sa(e,n);Fe(e,n,r,5,600,0,0,t,1)}function Cy(e,t){if(!e.enemy)return;let n=aa(e),r=sa(e,n),i=2,a=4,s=20,o=.15,c=.15;t.engine.sound?.(e,0,"soldier/solatck2.wav",1,1,0),Hh(e,n,r,i,a,o,c,s,0,t,3)}function Dy(e,t){if(!e.enemy)return;let n=aa(e),r=sa(e,n),i=4,a=4,s=.05,o=.05;t.engine.sound?.(e,0,"soldier/solatck3.wav",1,1,0),qe(e,n,r,i,a,s,o,0,t,4)}function Fy(e,t){e.spawnflags&by?Cy(e,t):Py(e,t)}var Uy=Array.from({length:30},()=>({ai:My,dist:0}));ia={firstframe:0,lastframe:29,frames:Uy,endfunc:Ty};var By=Array.from({length:40},()=>({ai:zy,dist:2}));Lc={firstframe:30,lastframe:69,frames:By,endfunc:Iy};var Gy=Array.from({length:20},()=>({ai:Ry,dist:10}));Nc={firstframe:70,lastframe:89,frames:Gy,endfunc:nr};var Vy=Array.from({length:10},(e,t)=>({ai:zc,dist:0,think:t===5?Fy:null}));Ly={firstframe:90,lastframe:99,frames:Vy,endfunc:nr};var Hy=Array.from({length:10},(e,t)=>({ai:zc,dist:0,think:t>=4&&t<=8?Dy:null}));Ny={firstframe:90,lastframe:99,frames:Hy,endfunc:nr};var Wy=Array.from({length:6},()=>({ai:Rc,dist:0}));Oy={firstframe:100,lastframe:105,frames:Wy,endfunc:nr};var Ky=Array.from({length:10},()=>({ai:Rc,dist:0}));function Xy(e){e.monsterinfo.nextframe=Oc.lastframe,e.nextthink=-1}Oc={firstframe:106,lastframe:115,frames:Ky,endfunc:Xy};var Tc=.1,$y={x:30,y:30,z:40},Yy={x:30,y:-30,z:40},jy={x:20,y:0,z:70};function qy(e,t,n){J(e,Tc,n)}function Zy(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ca:e.monsterinfo.current_move=rr}function oa(e,t,n){Q(e,t,Tc,n)}function Jt(e,t,n){ne(e,t)}var rr,ca,Jy,Qy,Ic,Pc,ew,tw,nw,Cc;function rw(e){e.monsterinfo.current_move=rr}function Je(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ca:e.monsterinfo.current_move=rr}function ua(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function iw(e,t){if(!e.enemy)return;let n=ua(e,Yy),r=I(T(e.enemy.origin,n));$t(e,n,r,50,650,0,t)}function aw(e,t){if(!e.enemy)return;let n=ua(e,jy),r=I(T(e.enemy.origin,n));Wh(e,n,r,50,600,0,t)}function sw(e,t){if(!e.enemy)return;let n=ua(e,$y),r=I(T(e.enemy.origin,n));zn(e,n,r,6,4,.05,.05,0,t,4)}function ow(e,t){let n=(r,i,a,s,o,c)=>{let u=t.trace(r,i,a,s,o,c);return{fraction:u.fraction,ent:u.ent}};e.enemy&&Wt(e,e.enemy,n)&&(Math.random()<.3||e.timestamp&&e.timestamp>=Date.now()/1e3)?e.monsterinfo.current_move=Ic:e.monsterinfo.current_move=Pc}function cw(e){e.monsterinfo.nextframe=Cc.lastframe,e.nextthink=-1}var uw=Array.from({length:60},()=>({ai:qy,dist:0}));rr={firstframe:0,lastframe:59,frames:uw,endfunc:rw};var mw=Array.from({length:18},()=>({ai:Zy,dist:12}));ca={firstframe:60,lastframe:77,frames:mw,endfunc:Je};var dw=Array.from({length:4},()=>({ai:Jt,dist:0}));nw={firstframe:78,lastframe:81,frames:dw,endfunc:Je};var lw=Array.from({length:4},()=>({ai:Jt,dist:0}));tw={firstframe:82,lastframe:85,frames:lw,endfunc:Je};var hw=Array.from({length:4},()=>({ai:Jt,dist:0}));ew={firstframe:86,lastframe:89,frames:hw,endfunc:Je};var fw=Array.from({length:24},()=>({ai:Jt,dist:0}));Cc={firstframe:90,lastframe:113,frames:fw,endfunc:cw};var pw=Array.from({length:6},(e,t)=>({ai:oa,dist:0,think:t===0||t===3?aw:null}));Qy={firstframe:114,lastframe:119,frames:pw,endfunc:Je};var gw=Array.from({length:27},(e,t)=>({ai:oa,dist:0,think:t===7||t===10||t===13?iw:null}));Jy={firstframe:120,lastframe:146,frames:gw,endfunc:Je};var vw=Array.from({length:6},()=>({ai:oa,dist:0,think:sw}));Ic={firstframe:147,lastframe:152,frames:vw,endfunc:ow};var _w=Array.from({length:14},()=>({ai:Jt,dist:0}));Pc={firstframe:153,lastframe:166,frames:_w,endfunc:Je};var ma=.1;function yw(e,t,n){J(e,ma,n)}function ww(e,t,n){ae(e,t,ma,n)}function xw(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=la:e.monsterinfo.current_move=ir}function da(e,t,n){Q(e,t,ma,n)}function Dc(e,t,n){ne(e,t)}var ir,Fc,la,Sw,Aw,Ew,kw,Uc;function bw(e){e.monsterinfo.current_move=ir}function Mw(e){e.monsterinfo.current_move=Fc}function Qt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=la:e.monsterinfo.current_move=ir}function zw(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));Fe(e,n,r,30,1e3,0,0,t,1)}function Rw(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));qe(e,n,r,20,2,.05,.05,0,t,4)}function ai(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));$t(e,n,r,50,650,0,t)}function Lw(e){e.monsterinfo.nextframe=Uc.lastframe,e.nextthink=-1}var Nw=Array.from({length:30},()=>({ai:yw,dist:0}));ir={firstframe:0,lastframe:29,frames:Nw,endfunc:bw};var Ow=Array.from({length:16},()=>({ai:ww,dist:5}));Fc={firstframe:30,lastframe:45,frames:Ow,endfunc:Mw};var Tw=Array.from({length:16},()=>({ai:xw,dist:10}));la={firstframe:46,lastframe:61,frames:Tw,endfunc:Qt};var Iw=Array.from({length:16},(e,t)=>({ai:da,dist:0,think:t>5&&t<12?zw:null}));Sw={firstframe:62,lastframe:77,frames:Iw,endfunc:Qt};var Pw=Array.from({length:20},(e,t)=>({ai:da,dist:0,think:t%2===0&&t>5?Rw:null}));Aw={firstframe:78,lastframe:97,frames:Pw,endfunc:Qt};var Cw=Array.from({length:18},(e,t)=>({ai:da,dist:0,think:t===8||t===12||t===16?ai:null}));Ew={firstframe:98,lastframe:115,frames:Cw,endfunc:Qt};var Dw=Array.from({length:6},()=>({ai:Dc,dist:0}));kw={firstframe:116,lastframe:121,frames:Dw,endfunc:Qt};var Fw=Array.from({length:16},()=>({ai:Dc,dist:0}));Uc={firstframe:122,lastframe:137,frames:Fw,endfunc:Lw};var ha=.1;function Uw(e,t,n){J(e,ha,n)}function fa(e,t,n){ce(e,t,ha,n)}function Bw(e,t,n){Q(e,t,ha,n)}var pa,Bc,Gw,Vw,Gc;function Hw(e){e.monsterinfo.current_move=pa}function ga(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Bc:e.monsterinfo.current_move=pa}function Ww(e,t){if(!e.enemy)return;let n=Z(e.angles).forward,r={x:e.origin.x+n.x*8,y:e.origin.y+n.y*8,z:e.origin.z+e.viewheight},i=I(T(e.enemy.origin,r));t.engine.sound?.(e,0,"turret/fire.wav",1,1,0),Fe(e,r,i,2,1e3,1,0,t)}var Kw=Array.from({length:1},()=>({ai:Uw,dist:0}));pa={firstframe:0,lastframe:0,frames:Kw,endfunc:Hw};var Xw=Array.from({length:1},()=>({ai:fa,dist:0}));Bc={firstframe:0,lastframe:0,frames:Xw,endfunc:ga};var $w=Array.from({length:8},(e,t)=>({ai:Bw,dist:0,think:t===4?Ww:void 0}));Gw={firstframe:1,lastframe:8,frames:$w,endfunc:ga};var Yw=Array.from({length:2},()=>({ai:fa,dist:0}));Vw={firstframe:9,lastframe:10,frames:Yw,endfunc:ga};var jw=Array.from({length:4},()=>({ai:fa,dist:0}));function qw(e){e.monsterinfo.nextframe=Gc.lastframe,e.nextthink=-1,e.deadflag=2,e.solid=0}Gc={firstframe:11,lastframe:14,frames:jw,endfunc:qw};var R2=new Map(xi.map(e=>[e.name,e]));var Zw=2166136261,Jw=16777619;function Vc(e,t){let n=e>>>0;for(let r=0;r<t.length;r+=1)n^=t[r]&255,n=Math.imul(n,Jw)>>>0;return n>>>0}function ft(e,t){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,t,!0);let i=new Uint8Array(n);return Vc(e,i)}function fi(e,t){let n=new Uint8Array(t.length);for(let r=0;r<t.length;r+=1)n[r]=t.charCodeAt(r)&255;return Vc(e,n)}var si=2,Qw=1;function he(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function j(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Sn(e,t,n){return e===void 0?n:j(e,t)}function Ln(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function En(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let n of e)j(n,`${t} element`);return e}function ex(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=he(e,"level");return{frameNumber:Sn(t.frameNumber,"level.frameNumber",0),timeSeconds:Sn(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Sn(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Sn(t.deltaSeconds,"level.deltaSeconds",0)}}function tx(e){if(e===void 0)return new Ts().getState();let t=he(e,"rng"),n=he(t.mt,"rng.mt"),r=En(n.state,"rng.mt.state");return{mt:{index:j(n.index,"rng.mt.index"),state:r}}}function nx(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("thinks must be an array");return e.map((t,n)=>{let r=he(t,`thinks[${n}]`);return{time:j(r.time,`thinks[${n}].time`),entityIndex:j(r.entityIndex,`thinks[${n}].entityIndex`)}})}function rx(e){if(e===void 0)return{frameNumber:0,sightEntityIndex:null,sightEntityFrame:0,soundEntityIndex:null,soundEntityFrame:0,sound2EntityIndex:null,sound2EntityFrame:0,sightClientIndex:null};let t=he(e,"awareness"),n=(r,i)=>r===null?null:j(r,i);return{frameNumber:j(t.frameNumber,"awareness.frameNumber"),sightEntityIndex:n(t.sightEntityIndex,"awareness.sightEntityIndex"),sightEntityFrame:j(t.sightEntityFrame,"awareness.sightEntityFrame"),soundEntityIndex:n(t.soundEntityIndex,"awareness.soundEntityIndex"),soundEntityFrame:j(t.soundEntityFrame,"awareness.soundEntityFrame"),sound2EntityIndex:n(t.sound2EntityIndex,"awareness.sound2EntityIndex"),sound2EntityFrame:j(t.sound2EntityFrame,"awareness.sound2EntityFrame"),sightClientIndex:n(t.sightClientIndex,"awareness.sightClientIndex")}}function ix(e){if(e===void 0)return{};let t=he(e,"entity.fields"),n={};for(let[r,i]of Object.entries(t)){if(i===null){n[r]=null;continue}switch(typeof i){case"number":case"string":case"boolean":n[r]=i;break;default:{if(!Array.isArray(i)){let a=he(i,r),s={};for(let[o,c]of Object.entries(a))s[o]=j(c,`${r}.${o}`);n[r]=s;break}if(Array.isArray(i)&&i.length===3){let[a,s,o]=i;n[r]=[j(a,`${r}[0]`),j(s,`${r}[1]`),j(o,`${r}[2]`)];break}throw new Error(`Unsupported entity field value for ${r}`)}}}return n}function ax(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,n)=>{let r=he(t,`entities[${n}]`);return{index:j(r.index,`entities[${n}].index`),fields:ix(r.fields)}})}function sx(e){let t=he(e,"pool");return{capacity:j(t.capacity,"pool.capacity"),activeOrder:En(t.activeOrder,"pool.activeOrder"),freeList:En(t.freeList,"pool.freeList"),pendingFree:En(t.pendingFree,"pool.pendingFree")}}function ox(e){let t=he(e,"entities");return{timeSeconds:j(t.timeSeconds,"entities.timeSeconds"),pool:sx(t.pool),entities:ax(t.entities),thinks:nx(t.thinks),awareness:rx(t.awareness)}}function cx(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("cvars must be an array");return e.map((t,n)=>{let r=he(t,`cvars[${n}]`);return{name:Ln(r.name,`cvars[${n}].name`),value:Ln(r.value,`cvars[${n}].value`),flags:j(r.flags,`cvars[${n}].flags`)}})}function ux(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,n)=>Ln(t,`configstrings[${n}]`))}function mx(e){return e===void 0?{}:he(e,"gameState")}function De(e,t){if(t==null)return e;if(typeof t=="number")return ft(e,t);if(typeof t=="string")return fi(e,t);if(typeof t=="boolean")return ft(e,t?1:0);if(Array.isArray(t)){let n=e;for(let r of t)n=De(n,r);return n}if(typeof t=="object"){let n=e,r=Object.keys(t).sort();for(let i of r)n=fi(n,i),n=De(n,t[i]);return n}return e}function dx(e){let t=Zw;return t=ft(t,e.version),t=ft(t,e.timestamp),t=fi(t,e.map),t=ft(t,e.difficulty),t=ft(t,e.playtimeSeconds),t=De(t,e.gameState),t=De(t,e.level),t=De(t,e.rng),t=De(t,e.entities),t=De(t,e.cvars),t=De(t,e.configstrings),e.player&&(t=De(t,e.player)),t>>>0}function Hc(e,t={}){let{allowNewerVersion:n=!0}=t,r=typeof e=="string"?JSON.parse(e):e,i=he(r,"save"),a=i.version??si,s=j(a,"version");if(s<Qw)throw new Error(`Unsupported save version ${s}`);if(s>si&&!n)throw new Error(`Save version ${s} is newer than supported ${si}`);let o={version:s,timestamp:j(i.timestamp,"timestamp"),map:Ln(i.map,"map"),difficulty:j(i.difficulty,"difficulty"),playtimeSeconds:j(i.playtimeSeconds,"playtimeSeconds"),gameState:mx(i.gameState),level:ex(i.level),rng:tx(i.rng),entities:ox(i.entities),cvars:cx(i.cvars),configstrings:ux(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?j(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=dx(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var L2=new Set(xi.filter(e=>e.save).map(e=>e.name));var Rs=globalThis.TextEncoder;function pt(e){return Hc({...e},{allowNewerVersion:!0})}function lx(e){return Rs?new Rs().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var hx=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:pt(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:pt(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:pt(e.save)}))}},fx=class{constructor(e,t,n){this.indexedDB=e,this.dbName=t,this.storeName=n,this.db=null}async init(){this.db||(this.db=await new Promise((e,t)=>{let n=this.indexedDB.open(this.dbName,1);n.onupgradeneeded=()=>{n.result.createObjectStore(this.storeName,{keyPath:"id"})},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB")),n.onsuccess=()=>e(n.result)}))}async runTransaction(e,t){await this.init();let n=this.db;return new Promise((r,i)=>{let s=n.transaction(this.storeName,e).objectStore(this.storeName),o=t(s);o.onsuccess=()=>r(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",n=>n.get(e));return t?{id:t.id,metadata:{...t.metadata},save:pt(t.save)}:null}async delete(e){return await this.get(e)?(await this.runTransaction("readwrite",n=>n.delete(e)),!0):!1}async list(){return(await this.runTransaction("readonly",t=>t.getAll())).map(t=>({id:t.id,metadata:{...t.metadata},save:pt(t.save)}))}},va=class It{constructor(t={}){let{dbName:n=It.DEFAULT_DB_NAME,storeName:r=It.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new fx(i,n,r):this.adapter=new hx}async save(t,n,r={}){let i=pt(n),a={id:t,name:r.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:lx(i)};return await this.adapter.init(),await this.adapter.put({id:t,metadata:a,save:i}),a}async load(t,n={}){await this.adapter.init();let r=await this.adapter.get(t);if(!r)throw new Error(`Save slot ${t} not found`);return Hc(r.save,n)}async delete(t){return await this.adapter.init(),this.adapter.delete(t)}async list(){return await this.adapter.init(),(await this.adapter.list()).map(n=>({...n.metadata})).sort((n,r)=>r.timestamp-n.timestamp||n.id.localeCompare(r.id))}async quickSave(t){return this.save(It.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(It.QUICK_SLOT,t)}};va.DEFAULT_DB_NAME="quake2ts-saves";va.DEFAULT_STORE="saves";va.QUICK_SLOT="quicksave";var N2=_i();var Wc=(e,t)=>{let n=e/640,r=t/480,i=Math.min(n,r);return{HEALTH_X:100*i,HEALTH_Y:t-30*i,ARMOR_X:200*i,ARMOR_Y:t-30*i,AMMO_X:e-100*i,AMMO_Y:t-30*i,CENTER_PRINT_X:e/2,CENTER_PRINT_Y:100*i,WEAPON_ICON_X:10*i,WEAPON_ICON_Y:t-30*i,POWERUP_X:e-30*i,POWERUP_Y:t-30*i,scale:i}};var en=(e,t,n,r,i,a,s)=>{let o=Math.abs(r).toString();for(let c=0;c<o.length;c++){let u=parseInt(o[c]),m=i[u];m&&e.drawPic(t+c*a,n,m,s)}};var $e=new Map,px=["w_blaster","w_shotgun","w_sshotgun","w_machinegun","w_chaingun","w_glauncher","w_rlauncher","w_hyperblaster","w_railgun","w_bfg","w_grapple","a_grenades","a_bullets","a_cells","a_rockets","a_shells","a_slugs","p_quad","p_invulnerability","p_silencer","p_rebreather","p_envirosuit","p_adrenaline","p_megahealth","i_jacketarmor","i_combatarmor","i_bodyarmor","i_powerscreen","i_powershield","k_datacd","k_powercube","k_pyramid","k_dataspin","k_security","k_bluekey","k_redkey"],Kc=async(e,t)=>{for(let n of px)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);$e.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}};var tn=new Map,gx=["d_left","d_right","d_up","d_down"],Xc=async(e,t)=>{for(let n of gx)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);tn.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}},$c=(e,t)=>{if(!t.damageIndicators)return;let n=e.width,r=e.height,{forward:i,right:a,up:s}=zt(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:u}=o,m={...c},d=Math.sqrt(m.x*m.x+m.y*m.y+m.z*m.z);d>0&&(m.x/=d,m.y/=d,m.z/=d);let h=Oe(m,a),f=Oe(m,i),v=Math.atan2(f,h)*180/Math.PI,g,l=0,_=0;v>-45&&v<=45?(g=tn.get("d_right"),l=n-(g?.width||0),_=(r-(g?.height||0))/2):v>45&&v<=135?(g=tn.get("d_up"),l=(n-(g?.width||0))/2,_=0):v>135||v<=-135?(g=tn.get("d_left"),l=0,_=(r-(g?.height||0))/2):(g=tn.get("d_down"),l=(n-(g?.width||0))/2,_=r-(g?.height||0)),g&&e.drawPic(l,_,g)}};var Yc=(e,t)=>{let n=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],r=10;for(let i of n)e.drawString(10,r,i),r+=10};var jc=(e,t)=>{if(!t.blend)return;let[n,r,i,a]=t.blend;a>0&&e.drawfillRect(0,0,e.width,e.height,[n,r,i,a])};var qc=(e,t)=>{if(!t.pickupIcon)return;let n=$e.get(t.pickupIcon);if(n){let r=e.width-n.width-10,i=e.height-n.height-10;e.drawPic(r,i,n)}};var vx=!1;var Zc=(e,t,n,r,i,a,s,o,c)=>{let u;n<=25&&(vx?u=[.2,.6,1,1]:u=[1,0,0,1]),a.length>0&&(en(e,c.HEALTH_X,c.HEALTH_Y,n,a,s,u),en(e,c.ARMOR_X,c.ARMOR_Y,r,a,s),en(e,c.AMMO_X,c.AMMO_Y,i,a,s));let m=t.inventory.armor;if(m&&m.armorCount>0){let g=`i_${m.armorType}armor`,l=$e.get(g);l&&e.drawPic(c.ARMOR_X-24,c.ARMOR_Y-2,l)}let d=t.inventory.currentWeapon;if(d){let g=Object.values(Gs).find(l=>l.weaponId===d);if(g){let l=`w_${g.id.substring(7)}`,_=$e.get(l);_&&e.drawPic(c.WEAPON_ICON_X,c.WEAPON_ICON_Y,_)}}let h=Array.from(t.inventory.keys).sort(),f=c.WEAPON_ICON_Y-150*c.scale;for(let g of h){let l="";switch(g){case"blue":l="k_bluekey";break;case"red":l="k_redkey";break;case"green":l="k_security";break;case"yellow":l="k_pyramid";break}if(l){let _=$e.get(l);_&&(e.drawPic(c.WEAPON_ICON_X,f,_),f+=_.height+2)}}let v=c.POWERUP_X;for(let[g,l]of t.inventory.powerups.entries())if(l&&l>o){let _=`p_${g}`,w=$e.get(_);if(w){e.drawPic(v,c.POWERUP_Y,w);let x=Math.ceil((l-o)/1e3);en(e,v+w.width+2,c.POWERUP_Y,x,a,s),v-=w.width+s*x.toString().length+8}}};var ar=[],Jc=0,Qc=async(e,t)=>{for(let n=0;n<10;n++)try{let r=await t.loadTexture(`pics/hud/num_${n}.pcx`),i=e.registerTexture(`hud_num_${n}`,r);ar.push(i)}catch(r){console.error(`Failed to load HUD image: pics/hud/num_${n}.pcx`,r)}ar.length>0&&(Jc=ar[0].width),await gs(e,t),await Kc(e,t),await Xc(e,t)},eu=(e,t,n,r,i,a,s,o,c,u)=>{e.begin2D(),jc(e,t),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]);let m=Wc(e.width,e.height);Zc(e,n,r,i,a,ar,Jc,u,m),qc(e,t),$c(e,t),Yc(e,s),o.drawCenterPrint(e,u,m),o.drawNotifications(e,u),c.drawSubtitles(e,u),t.centerPrint&&e.drawCenterString(e.height/2-20,t.centerPrint),t.notify&&e.drawString(8,8,t.notify),_s(e,e.width,e.height),e.end2D()};var _x=3e3,yx=5e3,wx=4,sr=class{constructor(){this.centerPrintMsg=null;this.notifyMessages=[]}addCenterPrint(t,n){this.centerPrintMsg={text:t,startTime:n,duration:_x}}addNotify(t,n){this.notifyMessages.push({text:t,startTime:n,duration:yx}),this.notifyMessages.length>wx&&this.notifyMessages.shift()}drawCenterPrint(t,n,r){if(!this.centerPrintMsg)return;if(n>this.centerPrintMsg.startTime+this.centerPrintMsg.duration){this.centerPrintMsg=null;return}let i=this.centerPrintMsg.text.length*8,a=r.CENTER_PRINT_Y;t.drawCenterString(a,this.centerPrintMsg.text)}drawNotifications(t,n){for(;this.notifyMessages.length>0&&n>this.notifyMessages[0].startTime+this.notifyMessages[0].duration;)this.notifyMessages.shift();let r=10;for(let i of this.notifyMessages)t.drawString(10,r,i.text),r+=10}};var xx=3e3,or=class{constructor(){this.subtitle=null}addSubtitle(t,n){this.subtitle={text:t,startTime:n,duration:xx}}drawSubtitles(t,n){if(!this.subtitle)return;if(n>this.subtitle.startTime+this.subtitle.duration){this.subtitle=null;return}let r=t.height-40;t.drawCenterString(r,this.subtitle.text)}};var _a=[{type:"null"},{type:"armor",id:gt.BODY},{type:"armor",id:gt.COMBAT},{type:"armor",id:gt.JACKET},{type:"armor",id:gt.JACKET},{type:"item",id:"item_power_screen"},{type:"item",id:"item_power_shield"},{type:"weapon",id:te.Grapple},{type:"weapon",id:te.Blaster},{type:"weapon",id:te.ChainFist},{type:"weapon",id:te.Shotgun},{type:"weapon",id:te.SuperShotgun},{type:"weapon",id:te.Machinegun},{type:"weapon",id:te.EtfRifle},{type:"weapon",id:te.Chaingun},{type:"ammo",id:ue.Grenades},{type:"ammo",id:ue.Trap},{type:"ammo",id:ue.Tesla},{type:"weapon",id:te.GrenadeLauncher},{type:"weapon",id:te.ProxLauncher},{type:"weapon",id:te.RocketLauncher},{type:"weapon",id:te.HyperBlaster},{type:"weapon",id:te.IonRipper},{type:"weapon",id:te.PlasmaBeam},{type:"weapon",id:te.Railgun},{type:"weapon",id:te.Phalanx},{type:"weapon",id:te.BFG10K},{type:"weapon",id:te.Disruptor},{type:"ammo",id:ue.Shells},{type:"ammo",id:ue.Bullets},{type:"ammo",id:ue.Cells},{type:"ammo",id:ue.Rockets},{type:"ammo",id:ue.Slugs},{type:"ammo",id:ue.MagSlugs},{type:"ammo",id:ue.Flechettes},{type:"ammo",id:ue.Prox},{type:"ammo",id:ue.Nuke},{type:"ammo",id:ue.Rounds},{type:"powerup",id:Y.QuadDamage},{type:"powerup",id:Y.QuadFire},{type:"powerup",id:Y.Invulnerability},{type:"powerup",id:Y.Invisibility},{type:"powerup",id:Y.Silencer},{type:"powerup",id:Y.Rebreather},{type:"powerup",id:Y.EnviroSuit},{type:"health",id:"ancient_head"},{type:"health",id:"legacy_head"},{type:"health",id:"adrenaline"},{type:"powerup",id:Y.Bandolier},{type:"powerup",id:Y.AmmoPack},{type:"powerup",id:Y.IRGoggles},{type:"powerup",id:Y.DoubleDamage},{type:"powerup",id:Y.SphereVengeance},{type:"powerup",id:Y.SphereHunter},{type:"powerup",id:Y.SphereDefender},{type:"powerup",id:Y.Doppelganger},{type:"powerup",id:Y.TagToken},{type:"key",id:ie.DataCD},{type:"key",id:ie.PowerCube},{type:"key",id:ie.ExplosiveCharges},{type:"key",id:ie.Yellow},{type:"key",id:ie.PowerCore},{type:"key",id:ie.Pyramid},{type:"key",id:ie.DataSpinner},{type:"key",id:ie.Pass},{type:"key",id:ie.Blue},{type:"key",id:ie.Red},{type:"key",id:ie.Green},{type:"key",id:ie.CommanderHead},{type:"key",id:ie.Airstrike},{type:"key",id:ie.NukeContainer},{type:"key",id:ie.Nuke},{type:"health",id:"health_small"},{type:"health",id:"health_medium"},{type:"health",id:"health_large"},{type:"health",id:"health_mega"},{type:"key",id:ie.RedFlag},{type:"key",id:ie.BlueFlag},{type:"powerup",id:Y.TechResistance},{type:"powerup",id:Y.TechStrength},{type:"powerup",id:Y.TechHaste},{type:"powerup",id:Y.TechRegeneration},{type:"powerup",id:Y.Flashlight},{type:"powerup",id:Y.Compass}];var Sx=2048,cr=class{constructor(t,n){this.configstrings=new Array(Sx).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=n}setImports(t){this.imports=t}setCallbacks(t){this.callbacks=t}onServerData(t,n,r,i,a,s){console.log(`Demo: Server Data - Protocol: ${t}, Level: ${s}`),this.configstrings.fill(""),this.entities.clear(),this.baselines.clear(),this.latestFrame=null}onConfigString(t,n){this.configstrings[t]=n}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 n=t.packetEntities,r=new Map;if(n.delta)for(let[i,a]of this.entities)r.set(i,structuredClone(a));for(let i of n.entities){if(i.bits&$a){r.delete(i.number);continue}let a=i.number,s;n.delta&&this.entities.has(a)?s=this.entities.get(a):this.baselines.has(a)?s=this.baselines.get(a):s=et();let o=structuredClone(s);this.applyDelta(o,i),r.set(a,o)}this.entities=r}applyDelta(t,n){let r=n.bits;t.number=n.number,r&Fr&&(t.modelindex=n.modelindex),r&Br&&(t.modelindex2=n.modelindex2),r&Gr&&(t.modelindex3=n.modelindex3),r&Vr&&(t.modelindex4=n.modelindex4),r&Ir&&(t.frame=n.frame),r&Ur&&(t.frame=n.frame),(r&mn||r&hn)&&(t.skinnum=n.skinnum),(r&un||r&ln)&&(t.effects=n.effects),(r&cn||r&dn)&&(t.renderfx=n.renderfx),r&Lr&&(t.origin.x=n.origin.x),r&Nr&&(t.origin.y=n.origin.y),r&Cr&&(t.origin.z=n.origin.z),r&Dr&&(t.angles.x=n.angles.x),r&Or&&(t.angles.y=n.angles.y),r&Tr&&(t.angles.z=n.angles.z),r&Hr&&(t.old_origin.x=n.old_origin.x,t.old_origin.y=n.old_origin.y,t.old_origin.z=n.old_origin.z),r&Wr&&(t.sound=n.sound),r&Pr&&(t.event=n.event),r&Kr&&(t.solid=n.solid)}onCenterPrint(t){this.callbacks?.onCenterPrint?this.callbacks.onCenterPrint(t):console.log(`[Center]: ${t}`)}onStuffText(t){}onPrint(t,n){this.callbacks?.onPrint?this.callbacks.onPrint(t,n):console.log(`[Print ${t}]: ${n}`)}onSound(t,n,r,i,a,s,o){if(!this.imports?.engine.audio)return;let c=r??1,u=i??1,m=a??0;s&&s>0?this.imports.engine.audio.sound(s,0,n,c,u,m):o&&this.imports.engine.audio.positioned_sound(o,n,c,u)}onTempEntity(t,n,r,i,a,s,o,c,u){}onLayout(t){}onInventory(t){this.inventory=[...t]}onMuzzleFlash(t,n){}onMuzzleFlash2(t,n){}onDisconnect(){console.log("Demo disconnected")}onReconnect(){console.log("Demo reconnect")}onDownload(t,n,r){}convertFrameToPredictionState(t){let n=t.playerState,r={ammo:{caps:[],counts:[]},ownedWeapons:new Set,armor:null,powerups:new Map,keys:new Set,items:new Set};for(let c=0;c<this.inventory.length;c++){let u=this.inventory[c];if(u<=0)continue;if(c>=_a.length)break;let m=_a[c];switch(m.type){case"weapon":r.ownedWeapons.add(m.id);break;case"ammo":r.ammo.counts[m.id]||(r.ammo.counts[m.id]=0),r.ammo.counts[m.id]=u;break;case"armor":r.armor={armorType:m.id,armorCount:u};break;case"powerup":r.powerups.set(m.id,u);break;case"key":r.keys.add(m.id);break;case"health":break;case"item":r.items.add(m.id);break}}let i={...n.origin},a={...n.velocity},s={...n.viewangles},o={...n.delta_angles};return{origin:i,velocity:a,viewangles:s,pmFlags:n.pm_flags,pmType:n.pm_type,waterlevel:je.None,gravity:n.gravity,deltaAngles:o,client:{inventory:r,weaponStates:{states:new Map}},health:n.stats[1],armor:n.stats[4],ammo:n.stats[2],blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}getPredictionState(t){if(!this.latestFrame)return Ie();let n=this.convertFrameToPredictionState(this.latestFrame);if(this.previousFrame&&t!==void 0){let r=this.latestFrame.serverFrame*100,i=this.previousFrame.serverFrame*100;if(t>=i&&t<=r){let a=(t-i)/(r-i),s=this.convertFrameToPredictionState(this.previousFrame);return at(s,n,Math.max(0,Math.min(1,a)))}}return n}};var At=class{constructor(){this.strings=new Map;this.models=[];this.sounds=[];this.images=[]}set(t,n){if(this.strings.set(t,n),t>=re.Models&&t<re.Models+Lt){let r=t-re.Models;this.models[r]=n}else if(t>=re.Sounds&&t<re.Sounds+Nt){let r=t-re.Sounds;this.sounds[r]=n}else if(t>=re.Images&&t<re.Images+Ot){let r=t-re.Images;this.images[r]=n}}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 ur=class{constructor(t,n,r){this.menuSystem=t;this.saveLoadFactory=n;this.options=r}createMainMenu(){let t=[{label:"New Game",action:()=>{this.menuSystem.pushMenu(this.createDifficultyMenu())}},{label:"Load Game",action:()=>{this.saveLoadFactory.createLoadMenu().then(n=>{this.menuSystem.pushMenu(n)})}}];return this.options.showSaveOption!==!1&&t.push({label:"Save Game",action:()=>{this.saveLoadFactory.createSaveMenu().then(n=>{this.menuSystem.pushMenu(n)})}}),t.push({label:"Options",action:()=>{this.menuSystem.pushMenu(this.options.optionsFactory.createOptionsMenu())}},{label:"Quit",action:()=>{this.options.onQuit()}}),{title:"Main Menu",items:t}}createDifficultyMenu(){return{title:"Select Difficulty",items:[{label:"Easy",action:()=>this.startNewGame(0)},{label:"Medium",action:()=>this.startNewGame(1)},{label:"Hard",action:()=>this.startNewGame(2)},{label:"Map Select...",action:()=>{this.menuSystem.pushMenu(this.options.mapsFactory.createMapsMenu())}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}startNewGame(t){this.options.onSetDifficulty&&this.options.onSetDifficulty(t),this.options.onNewGame()}};var mr=class{constructor(t,n,r,i,a){this.menuSystem=t;this.storage=n;this.onSave=r;this.onLoad=i;this.onDelete=a}async createSaveMenu(){let t=await this.storage.list(),n=[];return n.push({label:"New Save...",action:()=>{this.menuSystem.pushMenu(this.createNewSaveInputMenu())}}),t.forEach(r=>{n.push({label:`${r.name} - ${r.map} (${tu(r.playtimeSeconds)})`,action:()=>{this.menuSystem.pushMenu(this.createConfirmOverwriteMenu(r))}})}),n.push({label:"Back",action:()=>this.menuSystem.popMenu()}),{title:"Save Game",items:n}}async createLoadMenu(){let t=await this.storage.list(),n=[];return t.forEach(r=>{n.push({label:`${r.name} - ${r.map} (${tu(r.playtimeSeconds)})`,action:()=>{this.menuSystem.pushMenu(this.createLoadActionMenu(r))}})}),t.length===0&&n.push({label:"No saves found",action:()=>{}}),n.push({label:"Back",action:()=>this.menuSystem.popMenu()}),{title:"Load Game",items:n}}createLoadActionMenu(t){return{title:`Slot: ${t.name}`,items:[{label:"Load Game",action:()=>{this.onLoad(t.id).then(()=>{this.menuSystem.closeAll()})}},{label:"Delete Save",action:()=>{this.menuSystem.pushMenu(this.createConfirmDeleteMenu(t))}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createConfirmDeleteMenu(t){return{title:`Delete ${t.name}?`,items:[{label:"Yes, Delete",action:()=>{this.onDelete(t.id).then(()=>{this.menuSystem.popMenu(),this.menuSystem.popMenu(),this.menuSystem.popMenu()})}},{label:"No, Cancel",action:()=>this.menuSystem.popMenu()}]}}createNewSaveInputMenu(){let t={name:`Save ${new Date().toLocaleString()}`};return{title:"Enter Save Name",items:[{label:"Name",type:"input",getValue:()=>t.name,onUpdate:n=>{t.name=n}},{label:"Save",action:()=>{this.onSave(t.name).then(()=>{this.menuSystem.closeAll()})}},{label:"Cancel",action:()=>this.menuSystem.popMenu()}]}}createConfirmOverwriteMenu(t){return{title:`Overwrite ${t.name}?`,items:[{label:"Yes, Overwrite",action:()=>{this.onSave(t.name).then(()=>{this.menuSystem.closeAll()})}},{label:"No, Cancel",action:()=>this.menuSystem.popMenu()}]}}};function tu(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return`${t}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}var dr=class{constructor(){this.activeMenu=null;this.selectedIndex=0;this.menuStack=[]}pushMenu(t){this.activeMenu&&(this.menuStack.push(this.activeMenu),t.parent||(t.parent=this.activeMenu)),this.activeMenu=t,this.selectedIndex=0}popMenu(){this.menuStack.length>0?(this.activeMenu=this.menuStack.pop(),this.selectedIndex=0):this.activeMenu=null}closeAll(){this.activeMenu=null,this.menuStack=[],this.selectedIndex=0}handleInput(t,n){if(!this.activeMenu)return!1;let r=this.activeMenu.items[this.selectedIndex];if(t==="up")return this.selectedIndex=(this.selectedIndex-1+this.activeMenu.items.length)%this.activeMenu.items.length,!0;if(t==="down")return this.selectedIndex=(this.selectedIndex+1)%this.activeMenu.items.length,!0;if(t==="select")return r.action&&r.action(),!0;if(t==="back")return this.popMenu(),!0;if(r.type==="input"&&r.onUpdate&&r.getValue){let i=r.getValue();if(t==="char"&&n){let a=(i||"")+n;r.onUpdate(a)}else if(t==="left"){let a=String(i||"");a.length>0&&r.onUpdate(a.slice(0,-1))}}return!0}isActive(){return this.activeMenu!==null}getState(){return{activeMenu:this.activeMenu,selectedIndex:this.selectedIndex}}};var nn=class{constructor(t,n){this.menuSystem=t;this.host=n}createOptionsMenu(){return{title:"Options",items:[{label:"Video Options",action:()=>{this.menuSystem.pushMenu(this.createVideoMenu())}},{label:"Audio Options",action:()=>{this.menuSystem.pushMenu(this.createAudioMenu())}},{label:"Controls",action:()=>{this.menuSystem.pushMenu(this.createControlsMenu())}},{label:"Gameplay",action:()=>{this.menuSystem.pushMenu(this.createGameplayMenu())}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createVideoMenu(){let t=this.host.cvars;return{title:"Video Options",items:[{label:"Field of View",type:"input",getValue:()=>t?.get("fov")?.string??"90",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("fov",n)}},{label:"Fullscreen",type:"toggle",getValue:()=>document.fullscreenElement?"On":"Off",onUpdate:()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(n=>{console.error(`Error attempting to enable fullscreen: ${n.message}`)})}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createAudioMenu(){let t=this.host.cvars;return{title:"Audio Options",items:[{label:"Master Volume",type:"input",getValue:()=>t?.get("s_volume")?.string??"0.7",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("s_volume",n)}},{label:"Music Volume",type:"input",getValue:()=>t?.get("ogg_volume")?.string??"0.7",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("ogg_volume",n)}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createControlsMenu(){let t=this.host.cvars;return{title:"Controls",items:[{label:"Sensitivity",type:"input",getValue:()=>t?.get("sensitivity")?.string??"3",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("sensitivity",n)}},{label:"Invert Mouse",type:"toggle",getValue:()=>t?.get("m_pitch")?.string.startsWith("-")?"Yes":"No",onUpdate:()=>{let n=parseFloat(t?.get("m_pitch")?.string??"0.022");t?.setValue("m_pitch",(-n).toString())}},{label:"Always Run",type:"toggle",getValue:()=>t?.get("cl_run")?.integer?"Yes":"No",onUpdate:()=>{let n=t?.get("cl_run")?.integer??1;t?.setValue("cl_run",n?"0":"1")}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createGameplayMenu(){let t=this.host.cvars;return{title:"Gameplay Options",items:[{label:"Crosshair",type:"toggle",getValue:()=>t?.get("crosshair")?.integer?"On":"Off",onUpdate:()=>{let n=t?.get("crosshair")?.integer??1;t?.setValue("crosshair",n?"0":"1")}},{label:"Handedness",type:"toggle",getValue:()=>t?.get("hand")?.integer===1?"Left":t?.get("hand")?.integer===2?"Center":"Right",onUpdate:()=>{let r=((t?.get("hand")?.integer??0)+1)%3;t?.setValue("hand",r.toString())}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}};var lr=class{constructor(t,n,r){this.menuSystem=t;this.vfs=n;this.onStartMap=r}createMapsMenu(){let n=this.vfs.findByExtension(".bsp").map(r=>({label:r.path.replace(/^maps\//,"").replace(/\.bsp$/,""),action:()=>{this.onStartMap(r.path.replace(/^maps\//,"").replace(/\.bsp$/,"")),this.menuSystem.closeAll()}}));return n.length===0&&n.push({label:"No maps found",action:()=>{}}),n.push({label:"Back",action:()=>this.menuSystem.popMenu()}),{title:"Select Map",items:n}}};var hr=class{constructor(t,n,r){this.menuSystem=t;this.optionsFactory=n;this.host=r}createPauseMenu(){return{title:"Game Paused",items:[{label:"Resume Game",action:()=>{this.menuSystem.closeAll()}},{label:"Options",action:()=>{this.menuSystem.pushMenu(this.optionsFactory.createOptionsMenu())}},{label:"Restart Level",action:()=>{this.host?.commands.execute("restart"),this.menuSystem.closeAll()}},{label:"Quit to Main Menu",action:()=>{this.host?.commands.execute("disconnect"),this.menuSystem.closeAll()}}]}}};function nu(e,t,n,r){if(!t.activeMenu)return;let i=t.activeMenu,a=n/2,s=r/2,o=20,c=i.items.length*o+40,u=s-c/2;e.drawfillRect(0,0,n,r,[0,0,0,.7]),e.drawCenterString(u,i.title),i.items.forEach((m,d)=>{let h=u+40+d*o,f=m.label;if(m.type==="input"&&m.getValue){if(f+=`: ${m.getValue()}`,d===t.selectedIndex){let v=Date.now();Math.floor(v/500)%2===0&&(f+="_")}}else m.type==="toggle"&&m.getValue&&(f+=`: ${m.getValue()}`);if(d===t.selectedIndex){let _=f.replace(/\^[0-9]/g,"").length*8,w=(n-_)/2;e.drawString(w-16,h,"\r")}e.drawCenterString(h,f)})}var rn=class{constructor(t){this.storage=t}loadCvars(t){try{let n=this.storage.getItem("quake2ts_cvars");if(n){let r=JSON.parse(n);for(let[i,a]of Object.entries(r)){let s=t.get(i);s&&s.setValue(a)}}}catch(n){console.warn("Failed to load settings",n)}}saveCvars(t){let n={};for(let r of t)r.flags&Rt.Archive&&(n[r.name]=r.value);try{this.storage.setItem("quake2ts_cvars",JSON.stringify(n))}catch(r){console.warn("Failed to save settings",r)}}};var fr=class{getItem(t){try{return localStorage.getItem(t)}catch(n){return console.warn("localStorage not available",n),null}}setItem(t,n){try{localStorage.setItem(t,n)}catch(r){console.warn("Failed to write to localStorage",r)}}};var pr=class{constructor(){this.total=0;this.current=0;this.message="";this.active=!1}start(t,n="Loading..."){this.total=t,this.current=0,this.message=n,this.active=!0}update(t,n){this.current=t,n&&(this.message=n)}finish(){this.active=!1,this.current=this.total}render(t){if(!this.active)return;let n=t.width,r=t.height;t.drawfillRect(0,0,n,r,[.1,.1,.1,1]);let i=n*.6,a=20,s=(n-i)/2,o=r*.7;t.drawfillRect(s,o,i,a,[.3,.3,.3,1]);let c=this.total>0?this.current/this.total:0;t.drawfillRect(s,o,i*c,a,[.8,.5,.1,1]),t.drawCenterString(o-30,this.message);let u=Math.floor(c*100);t.drawCenterString(o+a+10,`${u}%`)}};var gr=class{constructor(){this.state={active:!1,title:"",message:""}}show(t,n){this.state={active:!0,title:t,message:n}}hide(){this.state.active=!1}render(t){if(!this.state.active)return;let n=t.width,r=t.height,i=n/2,a=r/2,s=400,o=200;t.drawfillRect(0,0,n,r,[0,0,0,.5]),t.drawfillRect(i-s/2,a-o/2,s,o,[.2,0,0,1]),t.drawCenterString(a-40,`^1${this.state.title}`),t.drawCenterString(a,this.state.message),t.drawCenterString(a+60,"Press ESC to close")}};var vr=class{constructor(){this.state={active:!1,type:"weapon",selectedIndex:-1}}open(t){this.state.active=!0,this.state.type=t}close(){this.state.active=!1}isOpen(){return this.state.active}handleInput(t,n){this.state.active}render(t,n,r,i){if(!this.state.active)return;let a=n/2,s=r/2;t.drawfillRect(a-100,s-100,200,200,[0,0,0,.5]),t.drawCenterString(s,`Select ${this.state.type}`)}};var Ax=[{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"}],Qe=class{constructor(t=Ax){this.bindings=new Map;for(let n of t)this.bind(n.code,n.command)}bind(t,n){this.bindings.set(t,n)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function ru(){return new Qe}function ya(e){return e}function an(e){return e.trim().toLowerCase()}var Ex=250,wa=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,n){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=n,!0):!1)}release(t,n){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=n-this.downTime,this.downTime=0,!0):!1}sample(t,n){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let r=this.msec;this.activeCodes.size>0&&(r+=n-this.downTime,this.downTime=n),this.msec=0;let i=Math.min(r/t,1),a=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:a,fraction:i}}},_r=(_=>(_.Forward="+forward",_.Back="+back",_.MoveLeft="+moveleft",_.MoveRight="+moveright",_.MoveUp="+moveup",_.MoveDown="+movedown",_.Jump="+jump",_.Crouch="+crouch",_.Attack="+attack",_.Use="+use",_.Holster="+holster",_.TurnLeft="+left",_.TurnRight="+right",_.LookUp="+lookup",_.LookDown="+lookdown",_.SpeedModifier="+speed",_.Zoom="+zoom",_))(_r||{}),kx={"+attack":ze.Attack,"+use":ze.Use,"+holster":ze.Holster,"+jump":ze.Jump,"+crouch":ze.Crouch},bx=new Map(Object.values(_r).map(e=>[an(e),e]));function Mx(e){return bx.get(an(e))}function sn(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var Et=class{constructor(t={},n=new Qe){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=n,this.forwardSpeed=t.forwardSpeed??os,this.sideSpeed=t.sideSpeed??cs,this.upSpeed=t.upSpeed??us,this.yawSpeed=t.yawSpeed??ms,this.pitchSpeed=t.pitchSpeed??ds,this.sensitivity=t.sensitivity??ls,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,n=sn()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!0,r,n)}handleKeyUp(t,n=sn()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!1,r,n)}handleMouseButtonDown(t,n=sn()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!0,r,n)}handleMouseButtonUp(t,n=sn()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!1,r,n)}handleMouseMove(t,n){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+n})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,n=sn(),r){this.pollGamepads(n),this.applyTouchState(n);let i=this.yawSpeed*t/1e3,a=this.pitchSpeed*t/1e3,s=this.sample("+left",t,n),o=this.sample("+right",t,n),c=this.sample("+lookup",t,n),m={x:(this.sample("+lookdown",t,n).fraction-c.fraction)*a,y:(o.fraction-s.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let P=this.gamepadLook.y*(this.invertGamepadY?-1:1);m={x:m.x+P*a*this.gamepadLookScale,y:m.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let P=this.touchLook.y*(this.invertMouseY?-1:1);m={x:m.x+P*a,y:m.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let P=this.sampleMouseDelta(),C=fs(P,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});m={x:m.x+C.x,y:m.y+C.y,z:0}}let d=hs(this.viewAngles,m);this.viewAngles=d;let h=this.sample("+forward",t,n),f=this.sample("+back",t,n),v=this.sample("+moveleft",t,n),g=this.sample("+moveright",t,n),l=this.sample("+moveup",t,n),_=this.sample("+movedown",t,n),w=this.sample("+speed",t,n),x=this.sample("+jump",t,n),A=this.sample("+crouch",t,n),E=this.runByDefault?w.active?.5:1:w.active?1:.5,p=this.forwardSpeed*(h.fraction-f.fraction)*E,y=this.sideSpeed*(g.fraction-v.fraction)*E,S=this.upSpeed*(l.fraction-_.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(p+=this.forwardSpeed*this.gamepadMove.y*E,y+=this.sideSpeed*this.gamepadMove.x*E),(this.touchMove.x!==0||this.touchMove.y!==0)&&(p+=this.forwardSpeed*this.touchMove.y*E,y+=this.sideSpeed*this.touchMove.x*E),this.jumpAddsUpMove&&x.fraction>0&&(S+=this.upSpeed*x.fraction),this.crouchAddsDownMove&&A.fraction>0&&(S-=this.upSpeed*A.fraction),p=this.clampMove(p,this.forwardSpeed),y=this.clampMove(y,this.sideSpeed),S=this.clampMove(S,this.upSpeed);let R=this.collectButtonBits(t,n),b=Math.min(Math.max(Math.round(t),1),Ex);return(this.anyPressed||R!==ze.None)&&(R|=ze.Any),this.anyPressed=!1,{msec:b,buttons:R,angles:{...this.viewAngles},forwardmove:p,sidemove:y,upmove:S,serverFrame:r}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let n=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let r=new Set;for(let i of n){if(!i||i.connected===!1)continue;let a=i.index??0,s=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(s[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(s[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(s[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(s[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let u=o[c];if(!u)continue;let m=u.pressed||u.value>this.gamepadDeadZone,d=this.gamepadButtonCode(a,c);m&&r.add(d);let h=this.gamepadButtons.get(d)??!1;m!==h&&(this.applyCommand(this.bindings.getBinding(d),m,d,t),this.gamepadButtons.set(d,m))}}for(let[i,a]of this.gamepadButtons.entries())a&&!r.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let n=this.pendingTouchState;if(n&&(this.pendingTouchState=void 0,n.move&&(this.touchMove={x:this.clampAnalog(n.move.x),y:this.clampAnalog(n.move.y)}),n.look&&(this.touchLook={x:this.clampAnalog(n.look.x),y:this.clampAnalog(n.look.y)}),n.buttons))for(let[r,i]of Object.entries(n.buttons)){if(i===void 0)continue;let a=this.touchButtons.get(r)??!1;i!==a&&(this.applyCommand(r,i,this.touchButtonCode(r),t),this.touchButtons.set(r,i))}}applyCommand(t,n,r,i){if(!t)return;let a=Mx(t);if(a){let s=this.lookupButton(a);n?(s.press(r,i)&&this.commandQueue.push(a),this.anyPressed=!0):s.release(r,i)&&this.commandQueue.push(a.replace("+","-"))}else n&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let n={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,n}collectButtonBits(t,n){let r=ze.None;for(let[i,a]of Object.entries(kx)){let s=this.sample(i,t,n);(s.fraction>0||s.active||s.wasPressed)&&(r|=a)}return r}lookupButton(t){let n=this.buttons.get(t);return n||(n=new wa,this.buttons.set(t,n)),n}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,n,r){return this.lookupButton(t).sample(n,r)}gamepadButtonCode(t,n){return`Gamepad${t}-Button${n}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,n){return Math.abs(n)>Math.abs(t)?n:t}clampMove(t,n){return Math.max(-n,Math.min(n,t))}};var yr=class{constructor(t,n=new Et(t)){this.queued=[];this.controller=n}captureFrame(t,n,r){let i=this.controller.buildCommand(t,n,r),a=this.controller.consumeConsoleCommands(),s={command:i,console:a};return this.queued.push(s),s}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function wr(e,t,n){return e+(t-e)*n}function xa(e,t,n){return wr(e,t,n)}function zx(e,t,n,r,i){let a=[],s=i.engine.assets;if(!s)return a;let o=new Map(t.map(c=>[c.number,c]));for(let c of e){let u=o.get(c.number)??c,m=r.getModelName(c.modelIndex);if(!m)continue;let d=s.getMd2Model(m)||s.getMd3Model(m);if(!d)continue;let h={x:wr(u.origin.x,c.origin.x,n),y:wr(u.origin.y,c.origin.y,n),z:wr(u.origin.z,c.origin.z,n)},f={x:xa(u.angles.x,c.angles.x,n),y:xa(u.angles.y,c.angles.y,n),z:xa(u.angles.z,c.angles.z,n)},v=c.frame,g=u.frame,l=X.create();X.translate(l,l,[h.x,h.y,h.z]),X.rotateZ(l,l,f.z*Math.PI/180),X.rotateY(l,l,f.y*Math.PI/180),X.rotateX(l,l,f.x*Math.PI/180),d.header.magic===844121161?a.push({type:"md2",model:d,blend:{frame0:g,frame1:v,lerp:n},transform:l,skin:c.skinNum>0?r.getImageName(c.skinNum):void 0}):d.header.magic===860898377&&a.push({type:"md3",model:d,blend:{frame0:g,frame1:v,lerp:n},transform:l})}return a}function Rx(e){let t=new it(e.engine.trace),n=new st,r=new sr,i=new or,a=new Ya,s=new cr(e),o=new dr,c=new pr,u=new gr,m=new vr,d=new rn(new fr),h,f;s.onCenterPrint=p=>r.addCenterPrint(p,s.latestFrame?.serverFrame??0),s.onPrint=(p,y)=>r.addNotify(y,s.latestFrame?.serverFrame??0);let v=new At;a.setHandler(s);let g,l,_,w,x=90,A=!1;if(e.host){f=new nn(o,e.host),h=new hr(o,f,e.host);let p=new Map;if(e.host.cvars){for(let y of e.host.cvars.list())p.set(y.name,{value:y.string,setValue:S=>e.host.cvars.setValue(y.name,S)});d.loadCvars(p)}}if(e.host?.commands&&(e.host.commands.register("playdemo",p=>{if(p.length<1){console.log("usage: playdemo <filename>");return}let y=p[0];console.log(`playdemo: ${y}`),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 p=vs();console.log(`Crosshair changed to index ${p}`)},"Cycle through available crosshairs"),e.host.commands.register("+zoom",()=>{A=!0},"Zoom in view"),e.host.commands.register("-zoom",()=>{A=!1},"Reset zoom"),e.host.commands.register("togglemenu",()=>{o.isActive()?o.closeAll():h&&o.pushMenu(h.createPauseMenu())},"Toggle the main/pause menu"),e.host.cvars)){e.host.cvars.register({name:"fov",defaultValue:"90",flags:Rt.Archive,onChange:y=>{let S=y.number;isNaN(S)||(x=Math.max(1,Math.min(179,S)))},description:"Field of view"});let p=e.host.cvars.get("fov");if(p){let y=p.number;isNaN(y)||(x=Math.max(1,Math.min(179,y)))}}return{loadingScreen:c,errorDialog:u,init(p){this.Init(p)},Init(p){g=p,p?.state&&t.setAuthoritative(p),e.engine.assets&&e.engine.renderer&&(c.start(100,"Loading assets..."),Qc(e.engine.renderer,e.engine.assets).then(()=>{c.finish()})),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0}),typeof document<"u"&&document.addEventListener("fullscreenchange",()=>{document.fullscreenElement&&(o.isActive()||document.body.requestPointerLock?.())})},predict(p){return o.isActive(),t.enqueueCommand(p)},handleInput(p,y){if(!o.isActive())return!1;if(!y)return!0;let S=p.toLowerCase();return S==="arrowup"||S==="w"?o.handleInput("up"):S==="arrowdown"||S==="s"?o.handleInput("down"):S==="arrowleft"||S==="a"?o.handleInput("left"):S==="arrowright"||S==="d"?o.handleInput("right"):S==="enter"||S===" "?o.handleInput("select"):S==="escape"?o.getState().activeMenu?.parent?o.handleInput("back"):!1:p.length===1?o.handleInput("char",p):p==="Backspace"?o.handleInput("left"):!0},toggleMenu(){if(o.isActive()){if(o.closeAll(),e.host?.cvars){let p=e.host.cvars.list().map(y=>({name:y.name,value:y.string,flags:y.flags}));d.saveCvars(p)}}else h&&o.pushMenu(h.createPauseMenu())},createMainMenu(p,y,S,R,b){let P=new mr(o,y,S,R,b),C=f;if(!C){if(!e.host)throw new Error("Cannot create Main Menu: EngineHost is missing");C=new nn(o,e.host)}let G=e.engine.assets,D={findByExtension:fe=>G?G.listFiles(fe):[]},de=new lr(o,D,fe=>{console.log(`Starting map: ${fe}`),e.host?.commands.execute(`map ${fe}`)}),Ye=new ur(o,P,{...p,optionsFactory:C,mapsFactory:de,onSetDifficulty:fe=>{e.host?.cvars&&e.host.cvars.setValue("skill",fe.toString())}});return{menuSystem:o,factory:Ye}},render(p){let y=a.getState(),S=[];y===bt.Playing?l=s.getPredictionState():(p.latest?.state&&(t.setAuthoritative(p.latest),g=p.latest),p.previous?.state&&p.latest?.state?(l=at(p.previous.state,p.latest.state,p.alpha),p.latest.state.packetEntities&&p.previous.state.packetEntities&&(S=zx(p.latest.state.packetEntities,p.previous.state.packetEntities,p.alpha,v,e))):l=p.latest?.state??p.previous?.state??t.getPredictedState());let R=p.latest&&p.previous?Math.max(0,p.latest.timeMs-p.previous.timeMs):0;_=n.sample(l,R);let b={};if(l){let{origin:P,viewangles:C}=l;w=new Xa,w.position=$.fromValues(P.x,P.y,P.z);let G=_?.offset??{x:0,y:0,z:0};$.add(w.position,w.position,[G.x,G.y,G.z]);let D=_?.angles??{x:0,y:0,z:0};w.angles=$.fromValues(C.x+D.x,C.y+D.y,C.z+D.z),w.fov=A?40:x,w.aspect=4/3,e.engine.renderer&&(w.aspect=e.engine.renderer.width/e.engine.renderer.height)}if(e.engine.renderer&&w){let P;if(e.engine.assets){let C=v.getModelName(1);if(C){let G=e.engine.assets.getMap(C)}}e.engine.renderer.renderFrame({camera:w,world:P,dlights:[]},S)}if(e.engine.renderer&&l&&l.client){let P=e.engine.renderer.stats?{...e.engine.renderer.stats,batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0}:{batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},C=p.latest?.timeMs??0;this.DrawHUD(P,C)}return b},DrawHUD(p,y){if(e.engine.renderer){if(l&&l.client){let S={origin:l.origin,velocity:l.velocity,viewAngles:l.viewangles,onGround:Me(l.pmFlags,ge.OnGround),waterLevel:l.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:l.damageAlpha??0,damageIndicators:l.damageIndicators??[],blend:l.blend??[0,0,0,0],pickupIcon:l.pickupIcon,centerPrint:r.centerPrintMsg?.text,notify:void 0},R=a.getState(),b=R===bt.Playing||R===bt.Paused?(s.latestFrame?.serverFrame||0)*100:y;eu(e.engine.renderer,S,l.client,l.health,l.armor,l.ammo,p,r,i,b)}o.isActive()&&nu(e.engine.renderer,o.getState(),e.engine.renderer.width,e.engine.renderer.height),l&&l.client&&m.render(e.engine.renderer,e.engine.renderer.width,e.engine.renderer.height,l.client),u.render(e.engine.renderer),c.render(e.engine.renderer)}},shutdown(){this.Shutdown()},Shutdown(){if(g=void 0,l=void 0,e.host?.cvars){let p=e.host.cvars.list().map(y=>({name:y.name,value:y.string,flags:y.flags}));d.saveCvars(p)}},get prediction(){return t},get lastRendered(){return l},get view(){return n},get lastView(){return _},get camera(){return w},demoPlayback:a,ParseCenterPrint(p){let y=g?.timeMs??0;r.addCenterPrint(p,y)},ParseNotify(p){let y=g?.timeMs??0;r.addNotify(p,y)},showSubtitle(p,y){let S=g?.timeMs??0;i.addSubtitle(p,S)},ParseConfigString(p,y){if(v.set(p,y),e.engine.assets){let S=e.engine.assets;if(p>=re.Models&&p<re.Models+Lt){let R=y.split(".").pop()?.toLowerCase();R==="md2"?S.loadMd2Model(y).catch(b=>console.warn(`Failed to precache MD2 ${y}`,b)):R==="sp2"?S.loadSprite(y).catch(b=>console.warn(`Failed to precache Sprite ${y}`,b)):R==="md3"&&S.loadMd3Model(y).catch(b=>console.warn(`Failed to precache MD3 ${y}`,b))}else p>=re.Sounds&&p<re.Sounds+Nt?S.loadSound(y).catch(R=>console.warn(`Failed to precache sound ${y}`,R)):p>=re.Images&&p<re.Images+Ot&&S.loadTexture(y).then(R=>{e.engine.renderer&&e.engine.renderer.registerTexture(y,R)}).catch(R=>console.warn(`Failed to precache image ${y}`,R))}},demoHandler:s,configStrings:v}}return cu(Lx);})();
141
+ }`;var $a=class{constructor(){this._position=$.create(),this._angles=$.create(),this._bobAngles=$.create(),this._bobOffset=$.create(),this._kickAngles=$.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=X.create(),this._projectionMatrix=X.create(),this._viewProjectionMatrix=X.create(),this._dirty=!0}get position(){return this._position}set position(e){$.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){$.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){$.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){$.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){$.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=X.create();return X.perspective(t,e*zt,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;X.perspective(this._projectionMatrix,this._fov*zt,this._aspect,this._near,this._far);let e=X.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],r=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*zt,a=n*zt,s=r*zt,o=X.create();X.identity(o),X.rotateZ(o,o,-a),X.rotateY(o,o,-i),X.rotateX(o,o,-s);let c=X.create();X.multiply(c,e,o);let u=$.add($.create(),this._position,this._bobOffset),m=$.negate($.create(),u),d=$.create();$.transformMat4(d,m,o);let h=$.fromValues(d[1]||0,d[2]||0,d[0]||0);X.copy(this._viewMatrix,c),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],X.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Pd=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 Od(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Lr=1,Nr=2,Or=4,Tr=8,Ir=16,Pr=32,Ya=64,Cd=128,Fd=256,Cr=512,Fr=1024,Dr=2048,cn=4096,un=16384,Dd=32768,mn=65536,Ur=1<<17,dn=1<<18,ln=1<<19,Br=1<<20,Gr=1<<21,Vr=1<<22,Ud=1<<23,Hr=1<<24,hn=1<<25,Wr=1<<26,Kr=1<<27,Bd=1,Gd=2,Vd=128,et=()=>({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}),Ga=()=>({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)}),Hd=class{constructor(e,t){this.protocolVersion=0,this.isDemo=Bd,this.stream=e,this.handler=t}translateCommand(e){if(this.protocolVersion===0&&(e===7||e===12))return V.serverdata;if(this.protocolVersion===25){if(e>=7&&e<=15)return e+5;if(e===1)return V.print;if(e===2)return V.stufftext;if(e===3)return V.sound;if(e===4)return V.nop;if(e===5)return V.disconnect;if(e===6)return V.reconnect;if(e===16)return V.temp_entity}return e}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;let t=e;e=this.translateCommand(e);try{switch(e){case V.nop:break;case V.disconnect:break;case V.reconnect:break;case V.print:this.parsePrint();break;case V.serverdata:this.parseServerData();break;case V.configstring:this.parseConfigString();break;case V.spawnbaseline:this.parseSpawnBaseline();break;case V.centerprint:this.parseCenterPrint();break;case V.download:this.parseDownload();break;case V.frame:this.parseFrame();break;case V.packetentities:this.parsePacketEntities(!1);break;case V.deltapacketentities:this.parsePacketEntities(!0);break;case V.playerinfo:this.parsePlayerState();break;case V.stufftext:this.parseStuffText();break;case V.layout:this.parseLayout();break;case V.inventory:this.parseInventory();break;case V.sound:this.parseSound();break;case V.muzzleflash:this.parseMuzzleFlash();break;case V.muzzleflash2:this.parseMuzzleFlash2();break;case V.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${t} (translated: ${e}) at offset ${this.stream.getPosition()-1}`);return}}catch(n){console.warn(`Error parsing command ${e}: ${n.message}`);return}}}parsePrint(){let e=this.stream.readByte(),t=this.stream.readString()}parseStuffText(){let e=this.stream.readString()}parseLayout(){let e=this.stream.readString()}parseCenterPrint(){let e=this.stream.readString()}parseServerData(){this.protocolVersion=this.stream.readLong();let e=this.stream.readLong();this.isDemo=this.stream.readByte();let t=0,n=this.stream.readString(),r=this.stream.readShort(),i=this.stream.readString();this.handler?this.handler.onServerData(this.protocolVersion,e,t,n,r,i):console.log(`Server Data: Protocol ${this.protocolVersion}, Level ${i}, 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(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,t,n)}parseInventory(){let t=new Array(256);for(let n=0;n<256;n++)t[n]=this.stream.readShort();this.handler&&this.handler.onInventory(t)}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte(),n,r,i,a,s;if(e&1&&(n=this.stream.readByte()),e&2&&(r=this.stream.readByte()),e&16&&(i=this.stream.readByte()),e&8&&(a=this.stream.readShort()),e&4){let o={x:0,y:0,z:0};this.stream.readPos(o),s=o}this.handler&&this.handler.onSound(e,t,n,r,i,a,s)}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},n={x:0,y:0,z:0},r={x:0,y:0,z:0},i,a,s,o,c;switch(e){case M.EXPLOSION1:case M.EXPLOSION2:case M.ROCKET_EXPLOSION:case M.GRENADE_EXPLOSION:case M.ROCKET_EXPLOSION_WATER:case M.GRENADE_EXPLOSION_WATER:case M.BFG_EXPLOSION:case M.BFG_BIGEXPLOSION:case M.BOSSTPORT:case M.PLASMA_EXPLOSION:case M.PLAIN_EXPLOSION:case M.CHAINFIST_SMOKE:case M.TRACKER_EXPLOSION:case M.TELEPORT_EFFECT:case M.DBALL_GOAL:case M.NUKEBLAST:case M.WIDOWSPLASH:case M.EXPLOSION1_BIG:case M.EXPLOSION1_NP:this.stream.readPos(t);break;case M.GUNSHOT:case M.BLOOD:case M.BLASTER:case M.SHOTGUN:case M.SPARKS:case M.BULLET_SPARKS:case M.SCREEN_SPARKS:case M.SHIELD_SPARKS:case M.BLASTER2:case M.FLECHETTE:case M.MOREBLOOD:case M.ELECTRIC_SPARKS:case M.HEATBEAM_SPARKS:case M.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(r);break;case M.SPLASH:case M.LASER_SPARKS:case M.WELDING_SPARKS:case M.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(r),a=this.stream.readByte();break;case M.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.stream.readPos(t),this.stream.readPos(n)):(this.stream.readPos(t),this.stream.readDir(r));break;case M.GREENBLOOD:this.protocolVersion>=32?(this.stream.readPos(t),this.stream.readDir(r)):(this.stream.readPos(t),this.stream.readPos(n));break;case M.RAILTRAIL:case M.BUBBLETRAIL:case M.BFG_LASER:case M.DEBUGTRAIL:case M.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(n);break;case M.PARASITE_ATTACK:case M.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n);break;case M.GRAPPLE_CABLE:s=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n),this.stream.readPos(r);break;case M.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n);break;case M.FLASHLIGHT:this.stream.readPos(t),s=this.stream.readShort();break;case M.FORCEWALL:this.stream.readPos(t),this.stream.readPos(n),a=this.stream.readByte();break;case M.STEAM:let u=this.stream.readShort();i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(r),a=this.stream.readByte(),this.stream.readShort(),u!==-1&&this.stream.readLong();break;case M.WIDOWBEAMOUT:this.stream.readShort();case M.HEATBEAM:case M.MONSTER_HEATBEAM:s=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n),this.stream.readPos(r);break;default:break}this.handler&&this.handler.onTempEntity(e,t,n,r,i,a,s,o,c)}parseSpawnBaseline(){let e=this.parseEntityBits(),t=et();this.parseDelta(et(),t,e.number,e.bits),this.handler&&this.handler.onSpawnBaseline(t)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),n=this.stream.readByte(),r=this.stream.readByte(),i=this.stream.readData(r),a=this.stream.readByte();if(a!==V.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);let s=this.parsePlayerState();if(this.isDemo===Vd){let o=this.stream.readByte();for(let c=0;c<o;c++)this.stream.readByte()}this.isDemo===Gd&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:t,surpressCount:n,areaBytes:r,areaBits:i,playerState:s,packetEntities:{delta:!1,entities:[]}})}parsePlayerState(){let e=Ga(),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 n=this.stream.readLong();for(let r=0;r<32;r++)n&1<<r&&(e.stats[r]=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:Ga(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let n=et();this.parseDelta(et(),n,t.number,t.bits),e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Cd&&(e|=this.stream.readByte()<<8),e&Dd&&(e|=this.stream.readByte()<<16),e&Ud&&(e|=this.stream.readByte()<<24);let t;return e&Fd?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,n,r){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=n,t.bits=r,r&Dr&&(t.modelindex=this.stream.readByte()),r&Br&&(t.modelindex2=this.stream.readByte()),r&Gr&&(t.modelindex3=this.stream.readByte()),r&Vr&&(t.modelindex4=this.stream.readByte()),r&Ir&&(t.frame=this.stream.readByte()),r&Ur&&(t.frame=this.stream.readShort()),r&mn&&r&hn?t.skinnum=this.stream.readLong():r&mn?t.skinnum=this.stream.readByte():r&hn&&(t.skinnum=this.stream.readShort()),r&un&&r&ln?t.effects=this.stream.readLong():r&un?t.effects=this.stream.readByte():r&ln&&(t.effects=this.stream.readShort()),r&cn&&r&dn?t.renderfx=this.stream.readLong():r&cn?t.renderfx=this.stream.readByte():r&dn&&(t.renderfx=this.stream.readShort()),r&Lr&&(t.origin.x=this.stream.readCoord()),r&Nr&&(t.origin.y=this.stream.readCoord()),r&Cr&&(t.origin.z=this.stream.readCoord()),r&Fr&&(t.angles.x=this.stream.readAngle()),r&Or&&(t.angles.y=this.stream.readAngle()),r&Tr&&(t.angles.z=this.stream.readAngle()),r&Hr&&this.stream.readPos(t.old_origin),r&Wr&&(t.sound=this.stream.readByte()),r&Pr?t.event=this.stream.readByte():t.event=0,r&Kr&&(t.solid=this.stream.readShort())}},Rt=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(Rt||{}),ja=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 Pd(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 Hd(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Wd=Object.defineProperty,qa=(e,t)=>{for(var n in t)Wd(e,n,{get:t[n],enumerable:!0})},Za={x:0,y:0,z:0};var ES=Math.PI/180;function Lt(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function nt(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Oe(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Kd(e){return Oe(e,e)}function vn(e){return Math.sqrt(Kd(e))}function Ja(e){let t=vn(e);return t===0?e:nt(e,1/t)}var Qa=0,es=1,ts=2,Xd=Math.PI/180,bS=180/Math.PI;function Xr(e,t){switch(t){case Qa:return e.x;case es:return e.y;case ts:default:return e.z}}function $r(e){return e*Xd}function tt(e){let t=e%360;return t<0?360+t:t}function Nt(e){let t=$r(Xr(e,es)),n=$r(Xr(e,Qa)),r=$r(Xr(e,ts)),i=Math.sin(t),a=Math.cos(t),s=Math.sin(n),o=Math.cos(n),c=Math.sin(r),u=Math.cos(r),m={x:o*a,y:o*i,z:-s},d={x:-c*s*a-u*-i,y:-c*s*i-u*a,z:-c*o},h={x:u*s*a-c*-i,y:u*s*i-c*a,z:u*o};return{forward:m,right:d,up:h}}var be=1,Be=2;var jr=8,qr=16,$d=32;var Yd=16384;var _n=65536,ns=1<<17,jd=1<<18,qd=1<<19,Zd=1<<20,Jd=1<<21,Qd=1<<22,el=1<<23,MS=1<<24,yn=1<<25,tl=1<<26,zS=1<<27,RS=1<<28,LS=1<<29,xn=1<<30,NS=1<<31;var OS=1<<25,TS=1<<28,IS=1<<29,PS=1<<30,CS=1<<31;var FS=be|Be,DS=be|_n|Be|yn|xn,US=be|_n|Be,BS=be|ns|Be|yn|xn,GS=$d|jr|qr,VS=be|qr|jr,nl=be|yn|xn|Be|tl,HS=jd|qd|Zd|Jd|Qd|el,WS=be|jr|qr|yn|xn,KS=be|_n|Be,XS=be|Be,$S=be|_n|Be|ns,YS=nl|Yd;var jS=Number.MAX_SAFE_INTEGER-1;var Ot=(e=>(e[e.None=0]="None",e[e.Archive=1]="Archive",e[e.UserInfo=2]="UserInfo",e[e.ServerInfo=4]="ServerInfo",e[e.Latch=8]="Latch",e[e.Cheat=16]="Cheat",e))(Ot||{});var rs=256;var rl=256,Tt=8192,It=2048,Pt=512,il=256,al=rs*2,sl=256,Yr=32;var re=(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+Tt]="Sounds",e[e.Images=e.Sounds+It]="Images",e[e.Lights=e.Images+Pt]="Lights",e[e.ShadowLights=e.Lights+rl]="ShadowLights",e[e.Items=e.ShadowLights+sl]="Items",e[e.PlayerSkins=e.Items+il]="PlayerSkins",e[e.General=e.PlayerSkins+rs]="General",e[e.WheelWeapons=e.General+al]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Yr]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Yr]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Yr]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(re||{}),qS=re.MaxConfigStrings;var ol={};qa(ol,{addReplayFrame:()=>dl,createReplaySession:()=>ml,deserializeReplay:()=>ul,serializeReplay:()=>cl});function cl(e){return JSON.stringify(e,null,2)}function ul(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 ml(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function dl(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var je=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(je||{});var ve=(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))(ve||{});function Me(e,t){return(e&t)!==0}var Zr=(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))(Zr||{}),ze=(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))(ze||{});function is(e){let{velocity:t,frametime:n,onGround:r,groundIsSlick:i,onLadder:a,waterlevel:s,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,m=vn(t);if(m<1)return{x:0,y:0,z:t.z};let d=0;if(r&&!i||a){let p=m<c?c:m;d+=p*o*n}s>0&&!a&&(d+=m*u*s*n);let h=m-d;if(h<0&&(h=0),h===m)return t;let f=h/m;return nt(t,f)}function Jr(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=Oe(t,n),o=r-s;if(o<=0)return t;let c=i*a*r;return c>o&&(c=o),{x:t.x+n.x*c,y:t.y+n.y*c,z:t.z+n.z*c}}function as(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=Math.min(r,30),o=Oe(t,n),c=s-o;if(c<=0)return t;let u=i*r*a;return u>c&&(u=c),{x:t.x+n.x*u,y:t.y+n.y*u,z:t.z+n.z*u}}function ss(e){let{forward:t,right:n,cmd:r,maxSpeed:i}=e,a={x:t.x*r.forwardmove+n.x*r.sidemove,y:t.y*r.forwardmove+n.y*r.sidemove,z:0},s=vn(a);if(s>i){let o=i/s;a=nt(a,o),s=i}return{wishdir:s===0?a:Ja(a),wishspeed:s}}function os(e){let{forward:t,right:n,cmd:r,maxSpeed:i}=e,a={x:t.x*r.forwardmove+n.x*r.sidemove,y:t.y*r.forwardmove+n.y*r.sidemove,z:0};r.upmove>10?a=Lt(a,{x:0,y:0,z:r.upmove}):r.upmove<-10?a=Lt(a,{x:0,y:0,z:r.upmove}):a=Lt(a,{x:0,y:0,z:10});let s=vn(a);if(s>i){let o=i/s;a=nt(a,o),s=i}return s*=.5,{wishdir:s===0?a:Ja(a),wishspeed:s}}function ll(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function hl(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function wn(e){let{pmFlags:t,cmdAngles:n,deltaAngles:r}=e,i;(t&32)!==0?i={x:0,y:n.y+r.y,z:0}:(i=ll(n,r),i={...i,x:hl(i.x)});let a=Nt(i);return{viewangles:i,...a}}var cs=200,us=200,ms=200,ds=140,ls=150,hs=3;function fl(e){let t=tt(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function fs(e,t){return{x:fl(e.x+t.x),y:tt(e.y+t.y),z:tt(e.z+t.z)}}function ps(e,t){let n=t.sensitivityX??t.sensitivity,r=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*r,y:e.deltaX*n,z:0}}var pl={};qa(pl,{U_ANGLE1:()=>Sl,U_ANGLE2:()=>Al,U_ANGLE3:()=>kl,U_EFFECTS:()=>Ml,U_EVENT:()=>Ll,U_FRAME:()=>El,U_MODEL:()=>vl,U_MODEL2:()=>Ol,U_MODEL3:()=>Tl,U_MODEL4:()=>Il,U_MOREBITS:()=>Nl,U_NUMBER:()=>gl,U_ORIGIN1:()=>yl,U_ORIGIN2:()=>xl,U_ORIGIN3:()=>wl,U_REMOVE:()=>Pl,U_RENDERFX:()=>zl,U_SKIN:()=>bl,U_SOLID:()=>Rl,U_SOUND:()=>_l});var gl=1,vl=2,_l=4,yl=8,xl=16,wl=32,Sl=64,Al=128,kl=256,El=512,bl=1024,Ml=2048,zl=4096,Rl=8192,Ll=16384,Nl=32768,Ol=1,Tl=2,Il=4,Pl=32768;var Cl={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},Fl=800,rt={x:0,y:0,z:0},Dl=250;function Ie(){return{origin:rt,velocity:rt,viewangles:rt,pmFlags:ve.OnGround,pmType:Zr.Normal,waterlevel:je.None,gravity:Fl,deltaAngles:rt,health:0,armor:0,ammo:0,blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}function gs(e){return e?{...Ie(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:rt,blend:e.blend?[...e.blend]:[0,0,0,0],damageIndicators:e.damageIndicators?[...e.damageIndicators]:[]}:Ie()}function Te(e,t,n){return e+(t-e)*n}function Qr(e,t,n){let r=tt(t-e);return r>180&&(r-=360),tt(e+r*n)}function at(e,t,n){let r=Math.max(0,Math.min(n,1));return{origin:{x:Te(e.origin.x,t.origin.x,r),y:Te(e.origin.y,t.origin.y,r),z:Te(e.origin.z,t.origin.z,r)},velocity:{x:Te(e.velocity.x,t.velocity.x,r),y:Te(e.velocity.y,t.velocity.y,r),z:Te(e.velocity.z,t.velocity.z,r)},viewangles:{x:Qr(e.viewangles.x,t.viewangles.x,r),y:Qr(e.viewangles.y,t.viewangles.y,r),z:Qr(e.viewangles.z,t.viewangles.z,r)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:Te(e.health,t.health,r),armor:Te(e.armor,t.armor,r),ammo:Te(e.ammo,t.ammo,r),centerPrint:t.centerPrint,notify:t.notify,blend:t.blend,pickupIcon:t.pickupIcon,damageAlpha:t.damageAlpha,damageIndicators:t.damageIndicators}}function Ul(e,t,n,r){let i=Math.min(Math.max(t.msec,0),Dl)/1e3,a=Me(e.pmFlags,ve.OnGround),s=Me(e.pmFlags,ve.OnLadder),o=is({velocity:e.velocity,frametime:i,onGround:a,groundIsSlick:n.groundIsSlick,onLadder:s,waterlevel:e.waterlevel,pmFriction:n.pmFriction,pmStopSpeed:n.pmStopSpeed,pmWaterFriction:n.pmWaterFriction}),{viewangles:c,forward:u,right:m}=wn({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??rt}),d=e.waterlevel>je.None?os({forward:u,right:m,cmd:t,maxSpeed:n.pmWaterSpeed}):ss({forward:u,right:m,cmd:t,maxSpeed:n.pmMaxSpeed});if(e.waterlevel>je.None)o=Jr({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmWaterAccelerate,frametime:i});else if(a||s){let p=Me(e.pmFlags,ve.Ducked)?n.pmDuckSpeed:n.pmMaxSpeed,v=d.wishspeed>p?{wishdir:d.wishdir,wishspeed:p}:d;o=Jr({velocity:o,wishdir:v.wishdir,wishspeed:v.wishspeed,accel:n.pmAccelerate,frametime:i})}else o=as({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let f=r(e.origin,Lt(e.origin,nt(o,i))).endpos;return{...e,origin:f,velocity:o,viewangles:c}}var it=class{constructor(t,n={}){this.baseFrame={frame:0,timeMs:0,state:Ie()};this.commands=[];this.predicted=Ie();this.settings={...Cl,...n},this.trace=t,this.predicted=this.baseFrame.state??Ie()}setAuthoritative(t){let n=gs(t.state);return this.baseFrame={...t,state:n},this.commands=this.commands.filter(r=>(r.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=gs(this.baseFrame.state);for(let n of this.commands)t=Ul(t,n,this.settings,this.trace);return this.predicted=t,t}};var Bl={runPitch:.002,runRoll:.01,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function Gl(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 Vl(e,t,n){return t?e>210?n/400:e>100?n/800:n/1600:0}function Hl(e,t,n,r,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let a=Vl(t,r,i),s=e+a,c=Me(n,ve.Ducked)&&r?s*4:s;return{bobTime:s,bobCycle:Math.floor(c),bobCycleRun:Math.floor(s),bobFracSin:Math.abs(Math.sin(c*Math.PI))}}var st=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...Bl,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,n){let{forward:r,right:i}=Nt(wn({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??Za}).viewangles),a=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),s=Me(t.pmFlags,ve.OnGround),o=Hl(this.bobTime,a,t.pmFlags,s,n);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=Oe(t.velocity,r)*this.settings.runPitch,u=Oe(t.velocity,i),m=u<0?-1:1,h=Math.abs(u)*this.settings.runRoll;h>2&&(h=2),h*=m;let f=this.bobFracSin*this.settings.bobPitch*a,p=this.bobFracSin*this.settings.bobRoll*a;Me(t.pmFlags,ve.Ducked)&&s&&(f*=6,p*=6),c+=Math.min(f,this.settings.maxBobAngle),p=Math.min(p,this.settings.maxBobAngle),this.bobCycle&1&&(p=-p),h+=p;let v=Math.min(this.bobFracSin*a*this.settings.bobUp,this.settings.maxBobHeight),l=0,_=0;if(this.kick&&this.kick.remainingMs>0){let k=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));l+=k*this.kick.pitch,_+=k*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-n),this.kick.remainingMs===0&&(this.kick=void 0)}let A={angles:{x:c+l,y:0,z:h+_},offset:Gl({x:0,y:0,z:v}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:a};return this.lastSample=A,A}};var Re=null,Ge=0,Wl=[1,1,1,1],ot=!0,Ct=["ch1","ch2","ch3"],ct=[null,null,null],vs=async(e,t)=>{for(let n=0;n<Ct.length;n++){let r=Ct[n];try{let i=await t.loadTexture(`pics/${r}.pcx`);ct[n]=e.registerTexture(r,i)}catch{if(n===0)try{let a=await t.loadTexture("pics/crosshair.pcx");ct[n]=e.registerTexture("crosshair",a)}catch{console.error("Failed to load crosshair image")}}}Re=ct[0]};var _s=()=>{if(ot?(Ge++,Ge>=Ct.length&&(ot=!1,Ge=0)):(ot=!0,Ge=0),ot){if(Re=ct[Ge],!Re){let e=!1;for(let t=0;t<Ct.length;t++){let n=(Ge+t)%Ct.length;if(ct[n]){Ge=n,Re=ct[n],e=!0;break}}e||(Re=null)}}else Re=null;return ot?Ge:-1},ys=(e,t,n)=>{if(ot&&Re){let r=(t-Re.width)/2,i=(n-Re.height)/2;e.drawPic(r,i,Re,Wl)}};var Kl=Object.defineProperty,Ns=(e,t)=>{for(var n in t)Kl(e,n,{get:t[n],enumerable:!0})},H={x:0,y:0,z:0};var a2=Math.PI/180;function Xl(e){return{x:e.x,y:e.y,z:e.z}}function U(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function T(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function B(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Os(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function $l(e){return Os(e,e)}function gt(e){return Math.sqrt($l(e))}function I(e){let t=gt(e);return t===0?e:B(e,1/t)}function Yl(e,t,n){return{x:e.x<t.x?t.x:e.x>n.x?n.x:e.x,y:e.y<t.y?t.y:e.y>n.y?n.y:e.y,z:e.z<t.z?t.z:e.z>n.z?n.z:e.z}}function jl(e,t,n,r){let i=0;if(t.x<n.x){let a=t.x-n.x;i+=a*a}else if(e.x>r.x){let a=e.x-r.x;i+=a*a}if(t.y<n.y){let a=t.y-n.y;i+=a*a}else if(e.y>r.y){let a=e.y-r.y;i+=a*a}if(t.z<n.z){let a=t.z-n.z;i+=a*a}else if(e.z>r.z){let a=e.z-r.z;i+=a*a}return i}var pi=0,gi=1,Ts=2,ql=Math.PI/180,Zl=180/Math.PI;function Dt(e,t){switch(t){case pi:return e.x;case gi:return e.y;case Ts:default:return e.z}}function An(e){return e*ql}function oi(e){return e*Zl}function ci(e){let t=e%360;return t<0?360+t:t}function Z(e){let t=An(Dt(e,gi)),n=An(Dt(e,pi)),r=An(Dt(e,Ts)),i=Math.sin(t),a=Math.cos(t),s=Math.sin(n),o=Math.cos(n),c=Math.sin(r),u=Math.cos(r),m={x:o*a,y:o*i,z:-s},d={x:-c*s*a-u*-i,y:-c*s*i-u*a,z:-c*o},h={x:u*s*a-c*-i,y:u*s*i-c*a,z:u*o};return{forward:m,right:d,up:h}}function vi(e){let t=Dt(e,pi),n=Dt(e,gi);if(t===0)return n===0?0:n>0?90:270;let r=oi(Math.atan2(n,t));return r<0?r+360:r}function Vt(e){let t=e.x,n=e.y,r=e.z;if(n===0&&t===0)return{x:r>0?-90:-270,y:0,z:0};let i;t?i=oi(Math.atan2(n,t)):n>0?i=90:i=270,i<0&&(i+=360);let a=Math.sqrt(t*t+n*n),s=oi(Math.atan2(r,a));return s<0&&(s+=360),{x:-s,y:i,z:0}}var Le=624,Jl=397,Ql=2567483615,e0=2147483648,t0=2147483647,ei=4294967296,n0=class{constructor(e=5489){this.state=new Uint32Array(Le),this.index=Le,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<Le;t++){let n=this.state[t-1]^this.state[t-1]>>>30,r=Math.imul(n>>>0,1812433253)+t;this.state[t]=r>>>0}this.index=Le}nextUint32(){this.index>=Le&&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<Le;e++){let t=this.state[e]&e0|this.state[(e+1)%Le]&t0,n=this.state[(e+Jl)%Le]^t>>>1;(t&1)!==0&&(n^=Ql),this.state[e]=n>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==Le)throw new Error(`Expected ${Le} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Is=class{constructor(e={}){this.mt=new n0(e.seed)}seed(e){this.mt.seed(e)}frandom(){return this.mt.nextUint32()/ei}frandomRange(e,t){return e+(t-e)*this.frandom()}frandomMax(e){return this.frandomRange(0,e)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let e=Number.EPSILON;return this.frandomRange(-1+e,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(e,t){if(t-e<=1)return e;let n=t-e,r=ei-ei%n,i;do i=this.mt.nextUint32();while(i>=r);return e+i%n}irandom(e){return e<=0?0:this.irandomRange(0,e)}randomTimeRange(e,t){return t<=e?e:this.irandomRange(e,t)}randomTime(e){return this.irandom(e)}randomIndex(e){return this.irandom(e.length)}getState(){return{mt:this.mt.getState()}}setState(e){this.mt.setState(e.mt)}};function _i(e){return new Is(e)}var he=1,We=2;var yi=8,xi=16,r0=32;var i0=16384;var Nn=65536,Ps=1<<17,a0=1<<18,s0=1<<19,o0=1<<20,c0=1<<21,u0=1<<22,m0=1<<23,s2=1<<24,vt=1<<25,wi=1<<26,o2=1<<27,c2=1<<28,u2=1<<29,_t=1<<30,m2=1<<31;var d2=1<<25,l2=1<<28,h2=1<<29,f2=1<<30,p2=1<<31,d0=he|We,g2=he|Nn|We|vt|_t,v2=he|Nn|We,En=he|Ps|We|vt|_t,l0=r0|yi|xi,_2=he|xi|yi,Ht=he|vt|_t|We|wi,y2=a0|s0|o0|c0|u0|m0,x2=he|yi|xi|vt|_t,w2=he|Nn|We,S2=he|We,A2=he|Nn|We|Ps,k2=Ht|i0,E2=Number.MAX_SAFE_INTEGER-1;var Cs=256,h0=256,f0=8192,p0=2048,g0=512,v0=256,_0=Cs*2,y0=256,ti=32,Fs=(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+f0]="Sounds",e[e.Images=e.Sounds+p0]="Images",e[e.Lights=e.Images+g0]="Lights",e[e.ShadowLights=e.Lights+h0]="ShadowLights",e[e.Items=e.ShadowLights+y0]="Items",e[e.PlayerSkins=e.Items+v0]="PlayerSkins",e[e.General=e.PlayerSkins+Cs]="General",e[e.WheelWeapons=e.General+_0]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ti]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ti]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ti]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Fs||{}),b2=Fs.MaxConfigStrings,x0={};Ns(x0,{addReplayFrame:()=>k0,createReplaySession:()=>A0,deserializeReplay:()=>S0,serializeReplay:()=>w0});function w0(e){return JSON.stringify(e,null,2)}function S0(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 A0(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function k0(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var _e=(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))(_e||{}),ye=(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[e.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",e[e.BFG_ZAP=57]="BFG_ZAP",e[e.BERSERK_SLAM=58]="BERSERK_SLAM",e[e.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",e[e.POWER_SPLASH=60]="POWER_SPLASH",e[e.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",e[e.EXPLOSION1_NL=62]="EXPLOSION1_NL",e[e.EXPLOSION2_NL=63]="EXPLOSION2_NL",e))(ye||{}),E0={};Ns(E0,{U_ANGLE1:()=>O0,U_ANGLE2:()=>T0,U_ANGLE3:()=>I0,U_EFFECTS:()=>F0,U_EVENT:()=>B0,U_FRAME:()=>P0,U_MODEL:()=>M0,U_MODEL2:()=>V0,U_MODEL3:()=>H0,U_MODEL4:()=>W0,U_MOREBITS:()=>G0,U_NUMBER:()=>b0,U_ORIGIN1:()=>R0,U_ORIGIN2:()=>L0,U_ORIGIN3:()=>N0,U_REMOVE:()=>K0,U_RENDERFX:()=>D0,U_SKIN:()=>C0,U_SOLID:()=>U0,U_SOUND:()=>z0});var b0=1,M0=2,z0=4,R0=8,L0=16,N0=32,O0=64,T0=128,I0=256,P0=512,C0=1024,F0=2048,D0=4096,U0=8192,B0=16384,G0=32768,V0=1,H0=2,W0=4,K0=32768;function He(e,t){return(e&t)!==0}var yt=(e=>(e.BODY="body",e.COMBAT="combat",e.JACKET="jacket",e))(yt||{}),X0={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 $0(e,t,n){if(e<=0||He(t,130)||!n.armorType||n.armorCount<=0)return{saved:0,remainingArmor:n.armorCount};let r=X0[n.armorType],i=He(t,4)?r.energyProtection:r.normalProtection,a=Math.ceil(i*e);return a>=n.armorCount&&(a=n.armorCount),a<=0?{saved:0,remainingArmor:n.armorCount}:{saved:a,remainingArmor:n.armorCount-a}}function Y0(e,t,n,r,i,a={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(He(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:s}=Z(i.angles),o={x:n.x-i.origin.x,y:n.y-i.origin.y,z:n.z-i.origin.z},c=Math.hypot(o.x,o.y,o.z);if(i.type==="screen"&&c>0){let l={x:o.x/c,y:o.y/c,z:o.z/c};if(l.x*s.x+l.y*s.y+l.z*s.z<=.3)return{saved:0,remainingCells:i.cellCount}}let u=a.ctfMode??!1,m=i.type==="screen"||u?1:2,d=i.type==="screen"?e/3:2*e/3;d=Math.max(1,d);let h=i.cellCount*m;He(t,4)&&(h=Math.max(1,Math.floor(h/2))),h>d&&(h=Math.floor(d));let f=h/m;He(t,4)&&(f*=2),f=Math.max(1,Math.floor(f));let p=Math.max(m,f),v=Math.max(0,i.cellCount-p);return{saved:h,remainingCells:v}}var me=(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))(me||{}),M2=Object.keys(me).length/2;var te=(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))(te||{}),Y=(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))(Y||{}),ie=(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))(ie||{});var j0={...H};var z2=Object.freeze({aiflags:0,last_sighting:j0,trail_time:0,pausetime:0});var Si=[{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:"attenuation",type:"float",save:!0},{name:"volume",type:"float",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:"pain_debounce_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},{name:"postthink",type:"callback",save:!1},{name:"beam",type:"entity",save:!0},{name:"beam2",type:"entity",save:!0}],q0=20,Z0=440,J0=940,ni=32,Q0=1<<24,bn=1;function xs(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 xt(e,t){let n=xs(e),r=xs(t),i=jl(n.mins,n.maxs,r.mins,r.maxs);return Math.sqrt(i)}function eh(e){return e<=q0?"melee":e<=Z0?"near":e<=J0?"mid":"far"}function Bt(e,t){let{forward:n}=Z(e.angles),r=I(T(t.origin,e.origin)),i=Os(r,n);return(e.spawnflags&bn)!==0&&e.trail_time===0&&e.enemy===null?i>.15:i>-.3}function Wt(e,t,n,r){if((t.flags&Q0)!==0)return!1;let i={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},a={x:t.origin.x,y:t.origin.y,z:t.origin.z+t.viewheight},s=r?.throughGlass?1:3,o=n(i,null,null,a,e,s);return o.fraction===1||o.ent===t}function th(e,t){let n={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=vi(n)}function Ds(e){e.angles.y=ci(e.ideal_yaw)}function nh(e,t,n){e.enemy&&(e.goalentity=e.enemy,th(e,e.enemy),Ds(e),(e.monsterinfo.aiflags&1)!==0?e.monsterinfo.stand?.(e,n):(e.monsterinfo.run?.(e,n),e.attack_finished_time=t.timeSeconds+1))}function rh(e,t,n,r){if(!e.enemy)return;(e.enemy.svflags&8)!==0&&(t.sightEntity=e,t.sightEntityFrame=t.frameNumber,e.light_level=128),e.show_hostile=t.timeSeconds+1;let i=e.monsterinfo.last_sighting;if(i.x=e.enemy.origin.x,i.y=e.enemy.origin.y,i.z=e.enemy.origin.z,e.trail_time=t.timeSeconds,e.monsterinfo.trail_time=t.timeSeconds,!e.combattarget){nh(e,t,n);return}let a=r?.pickTarget,s=a?.(e.combattarget)??e.enemy;e.goalentity=s,e.movetarget=s,e.combattarget=void 0,e.monsterinfo.aiflags|=4096,e.movetarget&&(e.movetarget.targetname=void 0),e.monsterinfo.pausetime=0,e.monsterinfo.run?.(e,n)}function ih(e,t,n,r){let i=xt(e,t),a=eh(i);return a==="far"||t.light_level<=5||!Wt(e,t,r,{throughGlass:!1})?!1:a==="near"?n.timeSeconds<=t.show_hostile||Bt(e,t):a==="mid"?Bt(e,t):!0}function ah(e,t,n,r,i){if((e.spawnflags&bn)!==0){if(!Wt(e,t,i))return!1}else if(r.canHear&&!r.canHear(e,t))return!1;let a=T(t.origin,e.origin);return gt(a)>1e3||r.areasConnected&&!r.areasConnected(e,t)?!1:(e.ideal_yaw=vi(a),Ds(e),e.monsterinfo.aiflags|=4,e.enemy=t,!0)}function sh(e,t){return t.sightEntity&&t.sightEntityFrame>=t.frameNumber-1&&(e.spawnflags&bn)===0?t.sightEntity.enemy!==e.enemy?{candidate:t.sightEntity,heardit:!1}:{candidate:null,heardit:!1}:t.soundEntity&&t.soundEntityFrame>=t.frameNumber-1?{candidate:t.soundEntity,heardit:!0}:!e.enemy&&t.sound2Entity&&t.sound2EntityFrame>=t.frameNumber-1&&(e.spawnflags&bn)===0?{candidate:t.sound2Entity,heardit:!0}:t.sightClient?{candidate:t.sightClient,heardit:!1}:{candidate:null,heardit:!1}}function oh(e){return(e.flags&ni)!==0?!0:(e.svflags&4)!==0&&e.enemy?(e.enemy.flags&ni)!==0:!!(e.enemy&&(e.enemy.flags&ni)!==0)}function Ai(e,t,n,r,i={}){if((e.monsterinfo.aiflags&256)!==0)return e.goalentity?.classname==="target_actor",!1;if((e.monsterinfo.aiflags&4096)!==0)return!1;let{candidate:a,heardit:s}=sh(e,t);if(!a||!a.inUse)return!1;if(a===e.enemy)return!0;if(oh(a))return!1;if(s){if(!ah(e,a,t,i,r))return!1}else{if(!ih(e,a,t,r))return!1;e.monsterinfo.aiflags&=-5,e.enemy=a}return rh(e,t,n),(e.monsterinfo.aiflags&4)===0&&e.monsterinfo.sight?.(e,e.enemy),!0}function Us(e,t){if(t===0)return{x:0,y:0,z:0};let n=An(e);return{x:Math.cos(n)*t,y:Math.sin(n)*t,z:0}}function ki(e,t,n){let r=Us(t,n),i=e.origin;return i.x+=r.x,i.y+=r.y,i.z+=r.z,!0}function Kt(e,t){let n=ci(e.angles.y),r=e.ideal_yaw;if(n===r){e.angles.y=n;return}let i=e.yaw_speed*t*10,a=r-n;r>n?a>=180&&(a-=360):a<=-180&&(a+=360),a>i?a=i:a<-i&&(a=-i),e.angles.y=ci(n+a)}function ne(e,t){ki(e,e.angles.y,t)}function On(e,t){if(!t)return;let n={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=vi(n)}function J(e,t,n){Ai(e,n.targetAwareness,n,n.trace)||Kt(e,t)}function ae(e,t,n,r){if(!Ai(e,r.targetAwareness,r,r.trace)&&(On(e,e.goalentity),Kt(e,n),t!==0&&ki(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&xt(e,e.goalentity)<64&&e.goalentity.target)){let a=r.pickTarget(e.goalentity.target);a&&(e.goalentity=a,e.ideal_yaw=e.angles.y)}}function ce(e,t,n,r){if((e.monsterinfo.aiflags&1)!==0){e.monsterinfo.stand?.(e,r);return}Ai(e,r.targetAwareness,r,r.trace),On(e,e.enemy??e.goalentity),Kt(e,n),t!==0&&Bs(e,e.angles.y,t,r)}function ch(e,t,n,r){t&&On(e,t),Kt(e,r),n!==0&&ki(e,e.angles.y,n)}function Q(e,t,n,r){On(e,e.enemy),Kt(e,n),t!==0&&Bs(e,e.angles.y,t,r)}function uh(e,t){if(e.movetype===1)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.mins.z-1},r=t.trace(e.origin,e.mins,e.maxs,n,e,En);if(e.groundentity=r.ent,!e.groundentity&&!r.allsolid&&!r.startsolid&&r.fraction===1){let i=t.pointcontents(n);i&l0?(e.waterlevel=1,e.watertype=i):(e.waterlevel=0,e.watertype=0)}}function mh(e,t){let n={x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},r={x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z},i={x:0,y:0,z:0},a={x:0,y:0,z:0};for(let s=0;s<2;s++)if(s===1?i={x:n.x,y:n.y,z:0}:i={x:r.x,y:n.y,z:0},i.z=n.z-1,t.pointcontents(i)!==0||(a={...i},a.z=i.z-60,t.trace(i,null,null,a,e,En).fraction<1)||(s===1?i={x:n.x,y:r.y,z:0}:i={x:r.x,y:r.y,z:0},i.z=n.z-1,t.pointcontents(i)!==0)||(a={...i},a.z=i.z-60,t.trace(i,null,null,a,e,En).fraction<1))return!0;return!1}function Bs(e,t,n,r){if((e.flags&3)===0&&e.movetype!==1&&!e.groundentity&&e.waterlevel===0)return!1;let i=Us(t,n);(e.monsterinfo.aiflags&1024)!==0&&e.monsterinfo.aiflags&1073741824;let a={x:e.origin.x+i.x,y:e.origin.y+i.y,z:e.origin.z+i.z};if(r.trace(e.origin,e.mins,e.maxs,a,e,En).fraction<1)return!1;let o={...e.origin};return e.origin.x=a.x,e.origin.y=a.y,e.origin.z=a.z,(e.flags&3)===0&&e.movetype!==1&&!mh(e,r)?(e.origin.x=o.x,e.origin.y=o.y,e.origin.z=o.z,!1):((e.flags&3)===0&&uh(e,r),!0)}var dh=Si.filter(e=>e.save||e.type==="callback"),R2=new Map(dh.map(e=>[e.name,e]));var L2=1/40;var Gs={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}};function lh(e,t,n,r,i){if(He(i,8)||((e.flags??0)&4)!==0||r===0)return{x:0,y:0,z:0};let s=Math.max(50,e.mass??200),o=I(n),u=B(o,(t===e?1600:500)*r/s);return e.velocity=U(e.velocity,u),u}function hh(e,t,n,r,i){let a=r,s=0,o=0,c,u;if(e.powerArmor){let m=Y0(r,i,t,n,e.powerArmor);s=m.saved,c=m.remainingCells,a-=s}if(e.regularArmor){let m=$0(a,i,e.regularArmor);o=m.saved,u=m.remainingArmor,a-=o}return[Math.max(0,a),s,o,c,u]}function ws(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 ue(e,t,n,r,i,a,s,o,c,u,m){if(!e.takedamage||s<=0)return null;if(!He(c,32)&&((e.flags??0)&1)!==0)return{take:0,psave:0,asave:s,knocked:{x:0,y:0,z:0},killed:!1};let h=lh(e,n,r,o,c),[f,p,v,l,_]=hh(e,i,a,s,c);e.powerArmor&&l!==void 0&&(e.powerArmor.cellCount=l),e.regularArmor&&(e.regularArmor.armorCount=_??e.regularArmor.armorCount);let x=f;x>0&&(e.health-=x,m&&!He(c,1024)&&(e.classname==="player"||e.monsterinfo)&&m(i,1,_e.temp_entity,ye.BLOOD,i,a));let w=e.health<=0;return w?e.flags&&e.flags&2?e.health=Math.max(1,e.health):e.die&&e.die(e,t,n,x,i,u):x>0&&e.pain&&e.pain(e,n,o,x,u),{take:x,psave:p,asave:v,knocked:h,killed:w,remainingCells:l,remainingArmor:_}}function Ei(e,t,n,r,i,a,s,o,c={},u){let m=[],d=ws(t),h=c.canDamage??(()=>!0);for(let f of e){if(f===i||!f.takedamage||!h(f,t))continue;let p=f.mins&&f.maxs?Yl(d,U(f.origin,f.mins),U(f.origin,f.maxs)):ws(f),v=T(d,p),l=gt(v);if(a>0&&l>a)continue;let _=r-.5*l;if(_<=0)continue;let x=f===n?_*.5:_,w=I(T(f.origin,d)),A=ue(f,t,n,w,p,w,x,x,s|1,o,u);m.push({target:f,result:A,appliedDamage:x})}return m}var N2=_i();var Tn=.1,Ut=80,Vs=_i();function fh(){return Vs.frandom()}function Hs(e,t){return Math.floor(Vs.frandom()*(t-e+1)+e)}function lt(e,t,n){J(e,Tn,n)}function xe(e,t,n){ae(e,t,Tn,n)}function ut(e,t,n){ce(e,t,Tn,n)}function q(e,t,n){Q(e,t,Tn,n)}function O(e,t,n){ne(e,t)}var Gt={pain:"berserk/berpain2.wav",die:"berserk/berdeth2.wav",idle:"berserk/beridle1.wav",idle2:"berserk/idle.wav",punch:"berserk/attack.wav",search:"berserk/bersrch1.wav",sight:"berserk/sight.wav",thud:"mutant/thud1.wav",explod:"world/explod2.wav",jump:"berserk/jump.wav",footstep:"misc/step1.wav"};function ke(e,t){t.sound(e,2,Gt.footstep,1,1,0)}function Mn(e,t){e.monsterinfo.current_move=t,e.monsterinfo.nextframe=t.firstframe,e.frame=t.firstframe,e.monsterinfo.aiflags&=-129}function ph(e,t){}var bi,Ws,gh,Ks,vh,_h,yh,xh,wh,Xs,Sh;function Ah(e,t){Mn(e,bi)}function kh(e,t){e.monsterinfo.aiflags&1||e.enemy||fh()>.15||(Mn(e,Ws),t.sound(e,1,Gt.idle,1,2,0))}var Eh=[{ai:lt,dist:0,think:kh},{ai:lt,dist:0},{ai:lt,dist:0},{ai:lt,dist:0},{ai:lt,dist:0}];bi={firstframe:0,lastframe:4,frames:Eh,endfunc:null};var bh=Array.from({length:20},()=>({ai:lt,dist:0}));Ws={firstframe:5,lastframe:24,frames:bh,endfunc:Ah};var Mh=[{ai:xe,dist:9.1},{ai:xe,dist:6.3},{ai:xe,dist:4.9},{ai:xe,dist:6.7,think:ke},{ai:xe,dist:6},{ai:xe,dist:8.2},{ai:xe,dist:7.2},{ai:xe,dist:6.1},{ai:xe,dist:4.9},{ai:xe,dist:4.7,think:ke},{ai:xe,dist:4.7}];gh={firstframe:25,lastframe:35,frames:Mh,endfunc:null};var zh=[{ai:ut,dist:21},{ai:ut,dist:11,think:ke},{ai:ut,dist:21},{ai:ut,dist:25,think:ph},{ai:ut,dist:18,think:ke},{ai:ut,dist:19}];Ks={firstframe:36,lastframe:41,frames:zh,endfunc:null};function Xt(e,t){e.monsterinfo.aiflags&1?Mn(e,bi):Mn(e,Ks)}function $s(e,t,n,r,i){let a={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},s=Z(e.angles).forward,o={x:a.x+s.x+t.x,y:a.y+s.y+t.y,z:a.z+s.z+t.z},c={x:a.x+s.x*Ut,y:a.y+s.y*Ut,z:a.z+s.z*Ut},u=i.trace(a,null,null,c,e,536870913);return!u.ent||!u.ent.takedamage?!1:(ue(u.ent,e,e,s,u.endpos,u.plane?.normal||H,n,r,0,0,i.multicast.bind(i)),!0)}function Rh(e,t){$s(e,{x:Ut,y:0,z:-24},Hs(5,11),80,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+1.2)}function Ys(e,t){t.sound(e,1,Gt.punch,1,1,0)}var Lh=[{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0,think:Ys},{ai:q,dist:0,think:Rh},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0}];vh={firstframe:67,lastframe:74,frames:Lh,endfunc:Xt};function Nh(e,t){$s(e,{x:Ut,y:0,z:-4},Hs(15,21),400,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+2.5)}var Oh=[{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0,think:ke},{ai:q,dist:0},{ai:q,dist:0,think:Ys},{ai:q,dist:0},{ai:q,dist:0,think:Nh},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0},{ai:q,dist:0}];_h={firstframe:75,lastframe:86,frames:Oh,endfunc:Xt};function js(e,t){t.sound(e,1,Gt.thud,1,1,0),t.sound(e,2,Gt.explod,.75,1,0);let{forward:n,right:r}=Z(e.angles),i={x:20,y:-14.3,z:-21},a={x:e.origin.x+n.x*i.x+r.x*i.y,y:e.origin.y+n.y*i.x+r.y*i.y,z:e.origin.z+n.z*i.x+r.z*i.y+i.z},s=t.trace(e.origin,null,null,a,e,1);t.multicast(s.endpos,2,_e.temp_entity,ye.BERSERK_SLAM,s.endpos),e.gravity=1,e.velocity={x:0,y:0,z:0};let o=8,c=300,u=165,m=t.findByRadius(s.endpos,u*2);for(let d of m){if(d===e||!d.takedamage)continue;let h=Math.sqrt(Math.pow(d.origin.x-s.endpos.x,2)+Math.pow(d.origin.y-s.endpos.y,2)+Math.pow(d.origin.z-s.endpos.z,2)),f=Math.max(0,1-h/u);if(f<=0)continue;let p=Math.max(1,o*f*f),v=c*f*f,l=I(T(d.origin,s.endpos));if(ue(d,e,e,l,d.origin,l,p,v,1,0,t.multicast.bind(t)),d.client){let _={...d.velocity};_.z=Math.max(270,_.z),d.velocity=_}}}function Th(e,t,n,r,i){if(e.health<=0){e.touch=void 0;return}}function Mi(e,t){e.velocity.z<0?e.gravity=2.25*(800/800):e.gravity=5.25*(800/800)}function Ih(e,t){if(!e.enemy)return;let n=T(e.enemy.origin,e.origin),i=Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)*1.95,a=I({x:n.x,y:n.y,z:0}),s=Vt(a);e.angles={x:e.angles.x,y:s.y,z:e.angles.z};let o={...e.origin};o.z+=1,e.origin=o,e.velocity={x:a.x*i,y:a.y*i,z:450},e.groundentity=null,e.monsterinfo.aiflags|=2048,e.monsterinfo.attack_finished=t.timeSeconds+3,e.touch=(c,u,m,d)=>{Th(c,u,m,d,t),c.groundentity&&(c.frame=104,js(c,t),c.touch=void 0)},Mi(e,t)}function Ph(e,t){if(Mi(e,t),e.groundentity){e.monsterinfo.attack_finished=0,e.monsterinfo.aiflags&=-2049,e.frame=104,e.touch&&(js(e,t),e.touch=void 0);return}t.timeSeconds>(e.monsterinfo.attack_finished||0)?e.monsterinfo.nextframe=89:e.monsterinfo.nextframe=91}var Ch=[{ai:q,dist:0},{ai:q,dist:0},{ai:O,dist:0,think:Ih},{ai:O,dist:0,think:Mi},{ai:O,dist:0,think:Ph},{ai:O,dist:0,think:ke},{ai:O,dist:0},{ai:O,dist:0,think:ke},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0,think:ke}];yh={firstframe:87,lastframe:109,frames:Ch,endfunc:Xt};var Fh=[{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0}];xh={firstframe:149,lastframe:152,frames:Fh,endfunc:Xt};var Dh=Array.from({length:20},(e,t)=>({ai:O,dist:0,think:t%5===4?ke:void 0}));wh={firstframe:153,lastframe:172,frames:Dh,endfunc:Xt};function qs(e,t){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.monsterinfo.nextframe=Xs.lastframe,e.nextthink=-1,e.deadflag=2}var Uh=[{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0,think:ke},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0}];Xs={firstframe:173,lastframe:185,frames:Uh,endfunc:qs};var Bh=[{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0,think:ke},{ai:O,dist:0},{ai:O,dist:0},{ai:O,dist:0}];Sh={firstframe:186,lastframe:193,frames:Bh,endfunc:qs};function Gh(e,t,n,r,i,a,s,o=0){let c=e.spawn();c.classname="rocket",c.movetype=8,c.solid=2,c.owner=t,c.origin={...n},c.velocity={x:r.x*s,y:r.y*s,z:r.z*s},c.mins={x:-4,y:-4,z:-4},c.maxs={x:4,y:4,z:4},c.touch=(u,m,d,h)=>{if(m===u.owner)return;m&&m.takedamage&&ue(m,u,u.owner,u.velocity,u.origin,d?d.normal:H,i,0,0,8,e.multicast.bind(e));let f=e.findByRadius(u.origin,120);Ei(f,u,u.owner,a,u.owner,120,0,9,{},e.multicast.bind(e)),e.multicast(u.origin,2,_e.temp_entity,ye.ROCKET_EXPLOSION,u.origin),e.free(u)},e.finalizeSpawn(c)}function Zs(e,t,n,r,i,a){let s=e.spawn();s.classname="grenade",s.owner=t,s.origin={...n},s.velocity={x:r.x*a,y:r.y*a,z:r.z*a},s.movetype=9,s.clipmask=268566530,s.solid=2,s.modelindex=e.modelIndex("models/objects/grenade/tris.md2"),s.mins={x:-4,y:-4,z:-4},s.maxs={x:4,y:4,z:4};let o=c=>{let u=e.findByRadius(c.origin,120);Ei(u,c,c.owner,i,c.owner,120,0,6,{},e.multicast.bind(e)),e.multicast(c.origin,2,_e.temp_entity,ye.GRENADE_EXPLOSION,c.origin),e.free(c)};s.touch=(c,u,m,d)=>{if(u!==c.owner&&u&&u.takedamage){o(c);return}},s.think=c=>{o(c)},e.scheduleThink(s,e.timeSeconds+2.5),e.finalizeSpawn(s)}function Vh(e,t,n,r,i,a,s){let o=e.spawn();o.classname=s===10?"hyperblaster_bolt":"blaster_bolt",o.owner=t,o.origin={...n},o.velocity={x:r.x*a,y:r.y*a,z:r.z*a},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,m,d)=>{u!==c.owner&&(u&&u.takedamage?ue(u,c,c.owner,c.velocity,c.origin,m?m.normal:H,i,1,0,s,e.multicast.bind(e)):m&&e.multicast(c.origin,1,_e.temp_entity,ye.BLASTER,c.origin,m.normal),e.free(c))},e.finalizeSpawn(o)}function Hh(e,t,n,r){let i={...t.origin},a={x:(n.absmin.x+n.absmax.x)*.5,y:(n.absmin.y+n.absmax.y)*.5,z:(n.absmin.z+n.absmax.z)*.5},s=I(T(a,i)),o={x:i.x+s.x*2048,y:i.y+s.y*2048,z:i.z+s.z*2048},c=16,u=[],m=[],d={...i};try{for(let f=0;f<c;f++){let p=e.trace(d,null,null,o,t,he|vt|_t|wi);if(!p.ent||p.fraction>=1||(p.ent.takedamage&&p.ent!==t.owner&&ue(p.ent,t,t.owner,s,p.endpos,H,r,1,4,12,e.multicast.bind(e)),!(p.ent.svflags&4)&&!p.ent.client&&p.ent.classname!=="misc_explobox"))break;u.push(p.ent),m.push(p.ent.solid),p.ent.solid=0,d={...p.endpos}}let h=e.trace(i,null,null,o,t,he);e.multicast(t.origin,2,_e.temp_entity,ye.BFG_LASER,i,h.endpos)}finally{for(let h=0;h<u.length;h++)u[h].solid=m[h]}}function Wh(e,t){let n=t.deathmatch?5:10,r=t.findByRadius(e.origin,256);for(let i of r){if(i===e||i===e.owner||!i.takedamage||!(i.svflags&4)&&!i.client&&i.classname!=="misc_explobox")continue;let a={x:(i.absmin.x+i.absmax.x)*.5,y:(i.absmin.y+i.absmax.y)*.5,z:(i.absmin.z+i.absmax.z)*.5};t.trace(e.origin,null,null,a,null,d0).fraction<1||Hh(t,e,i,n)}t.scheduleThink(e,t.timeSeconds+.1)}function Kh(e,t){if((e.frame===void 0||e.frame<0)&&(e.frame=0),e.frame===0){let n=t.findByRadius(e.origin,e.dmg_radius||100);for(let r of n){if(!r.takedamage||r===e.owner||!(r.svflags&4)&&!r.client&&r.classname!=="misc_explobox")continue;let i={x:(r.absmin.x+r.absmax.x)*.5,y:(r.absmin.y+r.absmax.y)*.5,z:(r.absmin.z+r.absmax.z)*.5},a=T(e.origin,i),s=gt(a),o=e.dmg_radius||100,c=(e.radius_dmg||200)*(1-Math.sqrt(s/o));c>0&&ue(r,e,e.owner,e.velocity,i,H,Math.floor(c),0,4,14,t.multicast.bind(t))}}if(e.frame++,e.frame>=5){t.free(e);return}t.scheduleThink(e,t.timeSeconds+.1)}function Xh(e,t,n,r,i,a,s){let o=e.spawn();o.classname="bfg blast",o.owner=t,o.origin={...n},o.velocity={x:r.x*a,y:r.y*a,z:r.z*a},o.movetype=8,o.clipmask=268566530,o.solid=2,o.modelindex=e.modelIndex("sprites/s_bfg1.sp2"),o.svflags=128,o.radius_dmg=i,o.dmg_radius=s,o.mins={x:-10,y:-10,z:-10},o.maxs={x:10,y:10,z:10},o.touch=(c,u,m,d)=>{if(u===c.owner)return;u&&u.takedamage&&ue(u,c,c.owner,c.velocity,c.origin,m?m.normal:H,200,0,4,13,e.multicast.bind(e));let h=e.findByRadius(c.origin,100);Ei(h,c,c.owner,200,u,100,4,13,{},e.multicast.bind(e)),e.multicast(c.origin,2,_e.temp_entity,ye.BFG_BIGEXPLOSION,c.origin),c.solid=0,c.touch=void 0,c.velocity=H,c.modelindex=e.modelIndex("sprites/s_bfg3.sp2"),c.frame=0,c.enemy=u,c.think=(f,p)=>Kh(f,p),e.scheduleThink(c,e.timeSeconds+.1)},o.think=(c,u)=>Wh(c,u),e.scheduleThink(o,e.timeSeconds+.016),e.finalizeSpawn(o)}function Ss(){return 2*Math.random()-1}function zn(e,t,n,r,i,a,s,o,c,u=0){let m=n;if(a>0||s>0){let f=Vt(n),{right:p,up:v}=Z(f),l=Ss()*a,_=Ss()*s;m={x:n.x+p.x*l+v.x*_,y:n.y+p.y*l+v.y*_,z:n.z+p.z*l+v.z*_},m=I(m)}let d=U(t,B(m,8192)),h=c.trace(t,d,H,H,e,Ht);!h.ent||h.fraction===1||ue(h.ent,e,e,m,h.endpos,h.plane?.normal||H,r,i,18,u)}var qe=zn;function $h(e,t,n,r,i,a,s,o,c,u,m=2){for(let d=0;d<o;d++)qe(e,t,n,r,i,a,s,c,u,m)}function De(e,t,n,r,i,a,s,o,c=1){Vh(o,e,t,n,r,i,c)}function Yh(e,t,n,r,i,a,s){Zs(s,e,t,n,r,i)}function $t(e,t,n,r,i,a,s){Gh(s,e,t,n,r,120,i)}function Js(e,t,n,r,i,a,s,o,c){Xh(c,e,t,n,r,i,s)}function Qs(e,t,n,r,i,a,s){let o=U(t,B(n,8192)),c=s.trace(t,o,H,H,e,Ht);s.multicast(t,2,_e.temp_entity,ye.RAILTRAIL,t,c.endpos),c.ent&&c.ent.takedamage&&ue(c.ent,e,e,n,c.endpos,H,r,i,6,11)}function Yt(e,t,n,r,i){if(!e.enemy)return!1;let{forward:a}=Z(e.angles),s={...e.origin};s.z+=e.viewheight||0;let o=t.x>0?t.x:80,c=U(s,B(a,o)),u=i.trace(s,c,H,H,e,Ht);if(u.ent===e.enemy||u.ent&&u.ent.takedamage){let m=I(T(u.endpos,s));return ue(u.ent,e,e,m,u.endpos,u.plane?.normal||H,n,r,0,0),!0}return!1}function jh(e,t,n,r,i,a,s,o){$t(e,t,n,r,i,a,o)}function As(e,t){let n={...e.origin},r=U(n,B(e.movedir,2048)),i=t.trace(n,r,H,H,e,he|vt|_t|wi);e.dmg>0&&i.ent&&i.ent.takedamage&&i.ent!==e.owner&&ue(i.ent,e,e.owner,e.movedir,i.endpos,H,e.dmg,0,4,31),i.ent&&i.ent.solid===3&&t.multicast(i.endpos,1,_e.temp_entity,ye.LASER_SPARKS,10,i.endpos,i.plane?.normal||H,e.skin),t.linkentity(e)}function qh(e,t){e.owner&&(e.owner.beam===e&&(e.owner.beam=null),e.owner.beam2===e&&(e.owner.beam2=null)),t.free(e)}function ks(e,t,n,r,i){let a=n?e.beam2:e.beam;(!a||!a.inUse)&&(a=i.spawn(),a.classname="laser_beam",a.movetype=0,a.solid=0,a.renderfx|=8,a.modelindex=1,a.owner=e,a.dmg=t,a.frame=2,e.monsterinfo.aiflags&64?a.skin=4092850673:a.skin=4076007664,a.think=(s,o)=>{s.postthink&&s.postthink(s,o),o.timeSeconds>=s.timestamp?qh(s,o):s.nextthink=o.timeSeconds+.1},a.postthink=(s,o)=>{r(s,o),As(s,o)},n?e.beam2=a:e.beam=a),a.timestamp=i.timeSeconds+.2,a.nextthink=i.timeSeconds+.01,r(a,i),As(a,i)}var zi=.1,Zh={x:0,y:30,z:-15},Jh={x:0,y:15,z:0},Qh={x:0,y:-15,z:0},ef={x:0,y:-30,z:-15},tf={x:30,y:20,z:0},nf={x:30,y:-20,z:0};function rf(e,t,n){J(e,zi,n)}function af(e,t,n){ae(e,t,zi,n)}function In(e,t,n){Q(e,t,zi,n)}function Ri(e,t,n){ne(e,t)}var Li,eo,to,sf,no,ro,of,cf,uf,io;function mf(e){e.monsterinfo.current_move=Li}function df(e){e.monsterinfo.current_move=eo}function jt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=to:e.monsterinfo.current_move=Li}function ao(e){e.monsterinfo.current_move=no}function lf(e){e.enemy&&Bt(e,e.enemy)&&Math.random()<=.7?ao(e):e.monsterinfo.current_move=ro}function ui(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function hf(e,t){if(!e.enemy)return;t.engine.sound?.(e,1,"boss2/machgun.wav",1,1,0);let n=ui(e,tf),r=I(T(e.enemy.origin,n));qe(e,n,r,6,4,.1,.05,0,t,4);let i=ui(e,nf),a=I(T(e.enemy.origin,i));qe(e,i,a,6,4,.1,.05,0,t,4)}function ff(e,t){if(!e.enemy)return;let n=[Zh,Jh,Qh,ef],r=n[Math.floor(Math.random()*n.length)],i=ui(e,r),a=I(T(e.enemy.origin,i));$t(e,i,a,50,500,0,t)}function pf(e){e.monsterinfo.nextframe=io.lastframe,e.nextthink=-1}var so=Array.from({length:20},()=>({ai:af,dist:10}));eo={firstframe:0,lastframe:19,frames:so,endfunc:df};to={firstframe:0,lastframe:19,frames:so,endfunc:jt};var gf=Array.from({length:21},()=>({ai:rf,dist:0}));Li={firstframe:29,lastframe:49,frames:gf,endfunc:mf};var vf=Array.from({length:9},(e,t)=>({ai:In,dist:2,think:t===8?ao:null}));sf={firstframe:50,lastframe:58,frames:vf,endfunc:null};var _f=Array.from({length:6},()=>({ai:In,dist:2,think:hf}));no={firstframe:59,lastframe:64,frames:_f,endfunc:lf};var yf=Array.from({length:4},()=>({ai:In,dist:2}));ro={firstframe:65,lastframe:68,frames:yf,endfunc:jt};var xf=Array.from({length:21},(e,t)=>({ai:In,dist:2,think:t===12?ff:null}));of={firstframe:69,lastframe:89,frames:xf,endfunc:jt};var wf=Array.from({length:18},()=>({ai:Ri,dist:0}));cf={firstframe:90,lastframe:107,frames:wf,endfunc:jt};var Sf=Array.from({length:4},()=>({ai:Ri,dist:0}));uf={firstframe:108,lastframe:111,frames:Sf,endfunc:jt};var Af=Array.from({length:49},()=>({ai:Ri,dist:0}));io={firstframe:112,lastframe:160,frames:Af,endfunc:pf};var Pn=.1,Ni=80,Cn=Math.random;function oo(e,t,n){J(e,Pn,n)}function we(e,t,n){ae(e,t,Pn,n)}function Se(e,t,n){ce(e,t,Pn,n)}function E(e,t,n){Q(e,t,Pn,n)}function L(e,t,n){ne(e,t)}var Oi,kf,Ef,co,uo,bf,Mf,zf,Rf,Lf,Nf,Of,Tf,If;function mo(e){e.monsterinfo.current_move=Oi}function Ke(e){e.monsterinfo.power_armor_type=1,e.monsterinfo.aiflags&4?e.monsterinfo.current_move=Oi:e.monsterinfo.current_move=co}function Pf(e,t){t.engine.sound?.(e,0,"brain/melee1.wav",1,1,0)}function Cf(e,t){let n={x:Ni,y:e.maxs.x,z:8};Yt(e,n,15+Math.floor(Cn()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function Ff(e,t){t.engine.sound?.(e,0,"brain/melee2.wav",1,1,0)}function Df(e,t){let n={x:Ni,y:e.mins.x,z:8};Yt(e,n,15+Math.floor(Cn()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function lo(e,t){e.count=0,e.monsterinfo.power_armor_type=0,t.engine.sound?.(e,0,"brain/brnatck1.wav",1,1,0)}function ho(e,t){Yt(e,{x:Ni,y:0,z:8},10+Math.floor(Cn()*5),-600,t)?e.count=1:e.monsterinfo.melee_debounce_time=t.timeSeconds+3,t.engine.sound?.(e,0,"brain/brnatck3.wav",1,1,0)}function fo(e){e.monsterinfo.power_armor_type=1,e.count&&(e.count=0,e.monsterinfo.current_move=uo)}function Es(e,t){if(!e.enemy)return;let n=Z(e.angles).forward,r={...e.origin};r.z+=24;let i={...e.enemy.origin};if(t.trace(r,i,H,H,e,1610612739).ent!==e.enemy)return;t.engine.sound?.(e,0,"brain/brnatck3.wav",1,1,0),t.multicast(e.origin,1,_e.temp_entity,ye.PARASITE_ATTACK,e,r,i);let s=T(r,i);ue(e.enemy,e,e,s,e.enemy.origin,H,5,0,0,37),e.origin={...e.origin,z:e.origin.z+1};let o=Z(e.angles).forward;e.enemy.velocity=B(o,-1200)}var bs=[{x:.7467,y:.23837,z:34.16769},{x:-1.07639,y:.23837,z:33.386372},{x:-1.3355,y:5.3343,z:32.17717},{x:-.17536,y:8.84637,z:30.635479},{x:-2.75759,y:7.80461,z:30.15086},{x:-5.57509,y:5.15284,z:30.05616},{x:-7.01755,y:3.26247,z:30.552521},{x:-7.91574,y:.6388,z:33.176189},{x:-3.91539,y:8.28573,z:33.976349},{x:-.91354,y:10.93303,z:34.141811},{x:-.3699,y:8.9239,z:34.189079}],Ms=[{x:-3.36471,y:.32775,z:33.938381},{x:-5.14045,y:.49348,z:32.659851},{x:-5.34198,y:5.64698,z:31.277901},{x:-4.13448,y:9.27744,z:29.925621},{x:-6.59834,y:6.81509,z:29.32262},{x:-8.61084,y:2.52965,z:29.251591},{x:-9.23136,y:.09328,z:29.747959},{x:-11.00411,y:1.93693,z:32.39526},{x:-7.87831,y:7.64819,z:33.148151},{x:-4.94737,y:11.43005,z:33.31361},{x:-4.33282,y:9.44457,z:33.52634}];function Uf(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=Z(n.angles),s=n.frame-0;(s<0||s>=bs.length)&&(s=0);let o=bs[s],c=U(n.origin,B(i,o.x));c=U(c,B(r,o.y)),c=U(c,B(a,o.z));let u=I(T(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function Bf(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=Z(n.angles),s=n.frame-0;(s<0||s>=Ms.length)&&(s=0);let o=Ms[s],c=U(n.origin,B(i,o.x));c=U(c,B(r,o.y)),c=U(c,B(a,o.z));let u=I(T(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function Ne(e,t){ks(e,1,!1,Uf,t),ks(e,1,!0,Bf,t)}function Gf(e){Cn()<.5&&e.enemy&&e.enemy.health>0&&(e.frame=0)}function Vf(e){return e.monsterinfo.aiflags&16||(e.monsterinfo.aiflags|=16),!0}function Hf(e){}function Wf(e){e.monsterinfo.aiflags&=-17}var Kf=Array.from({length:30},()=>({ai:oo,dist:0}));Oi={firstframe:162,lastframe:191,frames:Kf,endfunc:mo};var Xf=Array.from({length:30},()=>({ai:oo,dist:0}));kf={firstframe:192,lastframe:221,frames:Xf,endfunc:mo};var $f=[{ai:we,dist:7},{ai:we,dist:2},{ai:we,dist:3},{ai:we,dist:3},{ai:we,dist:1},{ai:we,dist:0},{ai:we,dist:0},{ai:we,dist:9},{ai:we,dist:-4},{ai:we,dist:-1},{ai:we,dist:2}];Ef={firstframe:0,lastframe:10,frames:$f,endfunc:null};var Yf=[{ai:Se,dist:9},{ai:Se,dist:2},{ai:Se,dist:3},{ai:Se,dist:3},{ai:Se,dist:1},{ai:Se,dist:0},{ai:Se,dist:0},{ai:Se,dist:10},{ai:Se,dist:-4},{ai:Se,dist:-1},{ai:Se,dist:2}];co={firstframe:0,lastframe:10,frames:Yf,endfunc:null};var jf=[{ai:E,dist:8},{ai:E,dist:3},{ai:E,dist:5},{ai:E,dist:0},{ai:E,dist:-3,think:Pf},{ai:E,dist:0},{ai:E,dist:-5},{ai:E,dist:-7,think:Cf},{ai:E,dist:0},{ai:E,dist:6,think:Ff},{ai:E,dist:1},{ai:E,dist:2,think:Df},{ai:E,dist:-3},{ai:E,dist:6},{ai:E,dist:-1},{ai:E,dist:-3},{ai:E,dist:2},{ai:E,dist:-11}];uo={firstframe:53,lastframe:70,frames:jf,endfunc:Ke};var qf=[{ai:E,dist:5},{ai:E,dist:-4},{ai:E,dist:-4},{ai:E,dist:-3},{ai:E,dist:0,think:lo},{ai:E,dist:0},{ai:E,dist:13,think:ho},{ai:E,dist:0},{ai:E,dist:2},{ai:E,dist:0},{ai:E,dist:-9,think:fo},{ai:E,dist:0},{ai:E,dist:4},{ai:E,dist:3},{ai:E,dist:2},{ai:E,dist:-3},{ai:E,dist:-6}];bf={firstframe:71,lastframe:87,frames:qf,endfunc:Ke};var Zf=[{ai:E,dist:5},{ai:E,dist:-4},{ai:E,dist:-4},{ai:E,dist:-3},{ai:E,dist:0,think:lo},{ai:E,dist:0,think:Es},{ai:E,dist:13},{ai:E,dist:0,think:ho},{ai:E,dist:2},{ai:E,dist:0,think:Es},{ai:E,dist:-9,think:fo},{ai:E,dist:0},{ai:E,dist:4},{ai:E,dist:3},{ai:E,dist:2},{ai:E,dist:-3},{ai:E,dist:-6}];Mf={firstframe:71,lastframe:87,frames:Zf,endfunc:Ke};var Jf=[{ai:E,dist:9,think:Ne},{ai:E,dist:2,think:Ne},{ai:E,dist:3,think:Ne},{ai:E,dist:3,think:Ne},{ai:E,dist:1,think:Ne},{ai:E,dist:0,think:Ne},{ai:E,dist:0,think:Ne},{ai:E,dist:10,think:Ne},{ai:E,dist:-4,think:Ne},{ai:E,dist:-1,think:Ne},{ai:E,dist:2,think:Gf}];zf={firstframe:0,lastframe:10,frames:Jf,endfunc:Ke};var Qf=[{ai:L,dist:-6},{ai:L,dist:-2},{ai:L,dist:-6},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:2},{ai:L,dist:0},{ai:L,dist:2},{ai:L,dist:1},{ai:L,dist:7},{ai:L,dist:0},{ai:L,dist:3},{ai:L,dist:-1}];Rf={firstframe:88,lastframe:108,frames:Qf,endfunc:Ke};var e1=[{ai:L,dist:-2},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:3},{ai:L,dist:1},{ai:L,dist:-2}];Lf={firstframe:109,lastframe:116,frames:e1,endfunc:Ke};var t1=[{ai:L,dist:-2},{ai:L,dist:2},{ai:L,dist:1},{ai:L,dist:3},{ai:L,dist:0},{ai:L,dist:-4}];Nf={firstframe:117,lastframe:122,frames:t1,endfunc:Ke};var n1=Array.from({length:18},()=>({ai:L,dist:0}));Of={firstframe:123,lastframe:140,frames:n1,endfunc:po};var r1=[{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:9},{ai:L,dist:0}];Tf={firstframe:141,lastframe:145,frames:r1,endfunc:po};var i1=[{ai:L,dist:0},{ai:L,dist:-2,think:Vf},{ai:L,dist:17,think:Hf},{ai:L,dist:-3},{ai:L,dist:-1,think:Wf},{ai:L,dist:-5},{ai:L,dist:-6},{ai:L,dist:-6}];If={firstframe:146,lastframe:153,frames:i1,endfunc:Ke};function po(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var Fn=.1,a1=80,wt=Math.random;function go(e,t,n){J(e,Fn,n)}function s1(e,t,n){ae(e,t,Fn,n)}function o1(e,t,n){ce(e,t,Fn,n)}function N(e,t,n){Q(e,t,Fn,n)}function St(e,t,n){ne(e,t)}var Ti,vo,_o,c1,Ii,mi,u1,Pi,yo,m1,d1,l1,h1,f1,p1,xo;function wo(e){e.monsterinfo.current_move=Ti}function g1(e){e.monsterinfo.current_move=vo}function Ze(e){if(e.monsterinfo.aiflags&4){e.monsterinfo.current_move=Ti;return}e.monsterinfo.current_move=_o}function v1(e){e.monsterinfo.aiflags&4||e.enemy||wt()<=.3&&(e.monsterinfo.current_move=xo)}function _1(e,t){wt()<.5?t.engine.sound?.(e,2,"chick/chkidle1.wav",1,0,0):t.engine.sound?.(e,2,"chick/chkidle2.wav",1,0,0)}function y1(e,t){let n={x:a1,y:e.mins.x,z:10};t.engine.sound?.(e,0,"chick/chkatck3.wav",1,1,0),Yt(e,n,10+Math.floor(wt()*6),100,t)}function x1(e,t){let{forward:n,right:r}=Z(e.angles),i={x:0,y:20,z:40},a=U(e.origin,B(n,i.x)),s=B(r,i.y),o=U(a,s),c={...o,z:o.z+i.z},u=e.skin>1?500:650,m=!!e.monsterinfo.blindfire,d=H;if(m&&e.monsterinfo.blind_fire_target)d=e.monsterinfo.blind_fire_target;else if(e.enemy)d=e.enemy.origin;else return;let h=T(d,c);!m&&e.enemy&&(wt()<.33||c.z<e.enemy.absmin.z?h={...h,z:h.z+e.enemy.viewheight}:h={...h,z:e.enemy.absmin.z+1-c.z});let f=I(h);e.skin>1?jh(e,c,f,50,u,0,.075,t):$t(e,c,f,50,u,0,t)}function w1(e,t){if(t.engine.sound?.(e,0,"chick/chkatck1.wav",1,1,0),e.monsterinfo.blindfire&&e.monsterinfo.blind_fire_target){let n=T(e.monsterinfo.blind_fire_target,e.origin);e.ideal_yaw=Vt(n).y}}function S1(e,t){t.engine.sound?.(e,0,"chick/chkatck5.wav",1,1,0)}function A1(e){e.monsterinfo.current_move=Ii}function k1(e){if(e.monsterinfo.blindfire){e.monsterinfo.blindfire=!1,e.monsterinfo.current_move=mi;return}if(e.enemy&&e.enemy.health>0&&wt()<=.6){e.monsterinfo.current_move=Ii;return}e.monsterinfo.current_move=mi}function E1(e){if(e.enemy&&e.enemy.health>0&&wt()<=.9){e.monsterinfo.current_move=Pi;return}e.monsterinfo.current_move=yo}function b1(e){e.monsterinfo.current_move=Pi}var M1=Array.from({length:30},(e,t)=>({ai:go,dist:0,think:t===8?(n,r)=>_1(n,r):null}));xo={firstframe:201,lastframe:230,frames:M1,endfunc:wo};var z1=Array.from({length:30},(e,t)=>({ai:go,dist:0,think:t===29?v1:null}));Ti={firstframe:101,lastframe:130,frames:z1,endfunc:wo};var R1=Array.from({length:10},()=>({ai:s1,dist:6}));vo={firstframe:171,lastframe:180,frames:R1,endfunc:g1};var L1=Array.from({length:10},()=>({ai:o1,dist:12}));_o={firstframe:171,lastframe:180,frames:L1,endfunc:Ze};var N1=Array.from({length:5},()=>({ai:St,dist:0}));m1={firstframe:90,lastframe:94,frames:N1,endfunc:Ze};var O1=Array.from({length:5},()=>({ai:St,dist:0}));d1={firstframe:95,lastframe:99,frames:O1,endfunc:Ze};var T1=Array.from({length:21},()=>({ai:St,dist:0}));l1={firstframe:100,lastframe:120,frames:T1,endfunc:Ze};var I1=Array.from({length:12},()=>({ai:St,dist:0}));h1={firstframe:48,lastframe:59,frames:I1,endfunc:So};var P1=Array.from({length:23},()=>({ai:St,dist:0}));f1={firstframe:60,lastframe:82,frames:P1,endfunc:So};function So(e){e.mins={x:-16,y:-16,z:0},e.maxs={x:16,y:16,z:16},e.movetype=7,e.nextthink=-1}var C1=[{ai:N,dist:0,think:w1},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:4},{ai:N,dist:0},{ai:N,dist:-3},{ai:N,dist:3},{ai:N,dist:5},{ai:N,dist:7},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0,think:A1}];c1={firstframe:0,lastframe:12,frames:C1,endfunc:null};var F1=[{ai:N,dist:19,think:x1},{ai:N,dist:-6},{ai:N,dist:-5},{ai:N,dist:-2},{ai:N,dist:-7},{ai:N,dist:0},{ai:N,dist:1},{ai:N,dist:10,think:S1},{ai:N,dist:4},{ai:N,dist:5},{ai:N,dist:6},{ai:N,dist:6},{ai:N,dist:4},{ai:N,dist:3,think:k1}];Ii={firstframe:13,lastframe:26,frames:F1,endfunc:null};var D1=[{ai:N,dist:-3},{ai:N,dist:0},{ai:N,dist:-6},{ai:N,dist:-4},{ai:N,dist:-2}];mi={firstframe:27,lastframe:31,frames:D1,endfunc:Ze};var U1=[{ai:N,dist:1},{ai:N,dist:8},{ai:N,dist:3}];u1={firstframe:32,lastframe:34,frames:U1,endfunc:b1};var B1=[{ai:N,dist:1},{ai:N,dist:7,think:y1},{ai:N,dist:-7},{ai:N,dist:1},{ai:N,dist:-1},{ai:N,dist:1},{ai:N,dist:0},{ai:N,dist:1},{ai:N,dist:-2,think:E1}];Pi={firstframe:35,lastframe:43,frames:B1,endfunc:null};var G1=[{ai:N,dist:-6},{ai:N,dist:-1},{ai:N,dist:-6},{ai:N,dist:0}];yo={firstframe:44,lastframe:47,frames:G1,endfunc:Ze};var V1=Array.from({length:7},()=>({ai:St,dist:0}));p1={firstframe:83,lastframe:89,frames:V1,endfunc:Ze};var Dn=.1,H1=80,W1=24;function K1(e,t,n){J(e,Dn,n)}function X1(e,t,n){ae(e,t,Dn,n)}function Ao(e,t,n){ce(e,t,Dn,n)}function ee(e,t,n){Q(e,t,Dn,n)}function Ci(e,t,n){ne(e,t)}var $1,Y1,ko,Eo,j1,q1,Z1,J1;function Q1(e){e.monsterinfo.current_move=Eo}function Fi(e){e.monsterinfo.current_move=ko}function zs(e,t){Yt(e,{x:H1,y:0,z:0},5,0,t)}function ep(e,t){t.engine.sound?.(e,0,"flipper/flpatck1.wav",1,1,0)}var tp=[{ai:K1,dist:0}];$1={firstframe:41,lastframe:41,frames:tp,endfunc:null};var np=Array.from({length:24},()=>({ai:Ao,dist:W1}));Eo={firstframe:70,lastframe:93,frames:np,endfunc:null};var rp=Array.from({length:6},()=>({ai:Ao,dist:8}));ko={firstframe:65,lastframe:70,frames:rp,endfunc:Q1};var ip=Array.from({length:24},()=>({ai:X1,dist:4}));Y1={firstframe:41,lastframe:64,frames:ip,endfunc:null};var ap=Array.from({length:5},()=>({ai:Ci,dist:0}));q1={firstframe:99,lastframe:103,frames:ap,endfunc:Fi};var sp=Array.from({length:5},()=>({ai:Ci,dist:0}));Z1={firstframe:94,lastframe:98,frames:sp,endfunc:Fi};var op=[{ai:ee,dist:0,think:ep},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0,think:zs},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0},{ai:ee,dist:0,think:zs},{ai:ee,dist:0}];j1={firstframe:0,lastframe:19,frames:op,endfunc:Fi};function cp(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var up=Array.from({length:56},()=>({ai:Ci,dist:0}));J1={firstframe:104,lastframe:159,frames:up,endfunc:cp};var Un=.1;function mp(e,t,n){J(e,Un,n)}function dp(e,t,n){ae(e,t,Un,n)}function lp(e,t,n){ce(e,t,Un,n)}function hp(e,t,n){Q(e,t,Un,n)}function bo(e,t,n){ne(e,t)}var Di,Mo,zo,fp,pp,Ro;function gp(e){e.monsterinfo.current_move=Di}function vp(e){e.monsterinfo.current_move=Mo}function Ui(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=zo:e.monsterinfo.current_move=Di}function _p(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));De(e,n,r,5,1e3,0,0,t,1)}function yp(e){e.monsterinfo.nextframe=Ro.lastframe,e.nextthink=-1}var xp=Array.from({length:46},()=>({ai:mp,dist:0}));Di={firstframe:0,lastframe:45,frames:xp,endfunc:gp};var wp=Array.from({length:46},()=>({ai:dp,dist:5}));Mo={firstframe:0,lastframe:45,frames:wp,endfunc:vp};var Sp=Array.from({length:46},()=>({ai:lp,dist:10}));zo={firstframe:0,lastframe:45,frames:Sp,endfunc:Ui};var Ap=Array.from({length:20},(e,t)=>({ai:hp,dist:0,think:t===10?_p:null}));fp={firstframe:46,lastframe:65,frames:Ap,endfunc:Ui};var kp=Array.from({length:6},()=>({ai:bo,dist:0}));pp={firstframe:66,lastframe:71,frames:kp,endfunc:Ui};var Ep=Array.from({length:10},()=>({ai:bo,dist:0}));Ro={firstframe:84,lastframe:93,frames:Ep,endfunc:yp};var Bn=.1;function bp(e,t,n){J(e,Bn,n)}function Mp(e,t,n){ae(e,t,Bn,n)}function zp(e,t,n){ce(e,t,Bn,n)}function Rp(e,t,n){Q(e,t,Bn,n)}function Lo(e,t,n){ne(e,t)}var Bi,No,Oo,Lp,Np,To;function Op(e){e.monsterinfo.current_move=Bi}function Tp(e){e.monsterinfo.current_move=No}function Gi(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Oo:e.monsterinfo.current_move=Bi}function Ip(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));De(e,n,r,5,1e3,0,0,t,1)}function Pp(e,t){if(!e.enemy)return;let n=5+Math.random()*5;xt(e,e.enemy)<=80&&Bt(e,e.enemy)&&ue(e.enemy,e,e,I(T(e.enemy.origin,e.origin)),e.enemy.origin,H,n,5,2,0)}function Cp(e){e.monsterinfo.nextframe=To.lastframe,e.nextthink=-1}var Fp=Array.from({length:46},()=>({ai:bp,dist:0}));Bi={firstframe:0,lastframe:45,frames:Fp,endfunc:Op};var Dp=Array.from({length:46},()=>({ai:Mp,dist:5}));No={firstframe:0,lastframe:45,frames:Dp,endfunc:Tp};var Up=Array.from({length:46},()=>({ai:zp,dist:10}));Oo={firstframe:0,lastframe:45,frames:Up,endfunc:Gi};var Bp=Array.from({length:20},(e,t)=>({ai:Rp,dist:0,think:t===10?Ip:t===12?Pp:null}));Lp={firstframe:46,lastframe:65,frames:Bp,endfunc:Gi};var Gp=Array.from({length:6},()=>({ai:Lo,dist:0}));Np={firstframe:66,lastframe:71,frames:Gp,endfunc:Gi};var Vp=Array.from({length:10},()=>({ai:Lo,dist:0}));To={firstframe:84,lastframe:93,frames:Vp,endfunc:Cp};var Gn=.1;function Hp(e,t,n){J(e,Gn,n)}function Wp(e,t,n){ae(e,t,Gn,n)}function Kp(e,t,n){ce(e,t,Gn,n)}function Io(e,t,n){Q(e,t,Gn,n)}function Po(e,t,n){ne(e,t)}var Vi,Co,Fo,Xp,$p,Yp,Do;function jp(e){e.monsterinfo.current_move=Vi}function qp(e){e.monsterinfo.current_move=Co}function Vn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Fo:e.monsterinfo.current_move=Vi}function Zp(e){return e<=80?"melee":e<=500?"near":e<=1e3?"mid":"far"}function Jp(e,t){if(!e.enemy||!Bt(e,e.enemy))return;let n=xt(e,e.enemy);if(Zp(n)!=="melee")return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},i=I(T(e.enemy.origin,r));ue(e.enemy,e,e,i,e.origin,{x:0,y:0,z:0},20,10,0,0)}function Qp(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));Qs(e,n,r,50,100,0,t)}function eg(e){e.monsterinfo.nextframe=Do.lastframe,e.nextthink=-1}var tg=Array.from({length:30},()=>({ai:Hp,dist:0}));Vi={firstframe:0,lastframe:29,frames:tg,endfunc:jp};var ng=Array.from({length:40},()=>({ai:Wp,dist:3}));Co={firstframe:30,lastframe:69,frames:ng,endfunc:qp};var rg=Array.from({length:20},()=>({ai:Kp,dist:12}));Fo={firstframe:70,lastframe:89,frames:rg,endfunc:Vn};var ig=Array.from({length:10},(e,t)=>({ai:Io,dist:0,think:t===5?Jp:null}));Xp={firstframe:90,lastframe:99,frames:ig,endfunc:Vn};var ag=Array.from({length:12},(e,t)=>({ai:Io,dist:0,think:t===6?Qp:null}));$p={firstframe:100,lastframe:111,frames:ag,endfunc:Vn};var sg=Array.from({length:6},()=>({ai:Po,dist:0}));Yp={firstframe:112,lastframe:117,frames:sg,endfunc:Vn};var og=Array.from({length:12},()=>({ai:Po,dist:0}));Do={firstframe:118,lastframe:129,frames:og,endfunc:eg};var Hn=.1;function cg(e,t,n){J(e,Hn,n)}function ug(e,t,n){ae(e,t,Hn,n)}function mg(e,t,n){ce(e,t,Hn,n)}function Uo(e,t,n){Q(e,t,Hn,n)}function Bo(e,t,n){ne(e,t)}var Hi,Go,Vo,dg,lg,hg,Ho;function fg(e){e.monsterinfo.current_move=Hi}function pg(e){e.monsterinfo.current_move=Go}function Wn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Vo:e.monsterinfo.current_move=Hi}function gg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},r=I(T(e.enemy.origin,n)),i=10,a=2;t.engine.sound?.(e,0,"gunner/gunatck2.wav",1,1,0),qe(e,n,r,i,a,0,0,0,t,5)}function vg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n)),i=50,a=600;t.engine.sound?.(e,0,"gunner/gunatck3.wav",1,1,0),Zs(t,e,n,r,i,a)}var _g=Array.from({length:30},()=>({ai:cg,dist:0}));Hi={firstframe:0,lastframe:29,frames:_g,endfunc:fg};var yg=Array.from({length:40},()=>({ai:ug,dist:2}));Go={firstframe:30,lastframe:69,frames:yg,endfunc:pg};var xg=Array.from({length:20},()=>({ai:mg,dist:10}));Vo={firstframe:70,lastframe:89,frames:xg,endfunc:Wn};var wg=Array.from({length:10},(e,t)=>({ai:Uo,dist:0,think:t>=2&&t<=8?gg:null}));dg={firstframe:90,lastframe:99,frames:wg,endfunc:Wn};var Sg=Array.from({length:10},(e,t)=>({ai:Uo,dist:0,think:t===5?vg:null}));lg={firstframe:100,lastframe:109,frames:Sg,endfunc:Wn};var Ag=Array.from({length:8},()=>({ai:Bo,dist:0}));hg={firstframe:110,lastframe:117,frames:Ag,endfunc:Wn};var kg=Array.from({length:15},()=>({ai:Bo,dist:0}));function Eg(e){e.monsterinfo.nextframe=Ho.lastframe,e.nextthink=-1}Ho={firstframe:118,lastframe:132,frames:kg,endfunc:Eg};var Kn=.1;function bg(e,t,n){J(e,Kn,n)}function Mg(e,t,n){ae(e,t,Kn,n)}function zg(e,t,n){ce(e,t,Kn,n)}function Rg(e,t,n){Q(e,t,Kn,n)}function Wo(e,t,n){ne(e,t)}var Wi,Ko,Xo,Lg,Ng,$o;function Og(e){e.monsterinfo.current_move=Wi}function Tg(e){e.monsterinfo.current_move=Ko}function Ki(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Xo:e.monsterinfo.current_move=Wi}function Ig(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));De(e,n,r,5,1e3,0,0,t,1)}function Pg(e){e.monsterinfo.nextframe=$o.lastframe,e.nextthink=-1}var Cg=Array.from({length:46},()=>({ai:bg,dist:0}));Wi={firstframe:0,lastframe:45,frames:Cg,endfunc:Og};var Fg=Array.from({length:46},()=>({ai:Mg,dist:5}));Ko={firstframe:0,lastframe:45,frames:Fg,endfunc:Tg};var Dg=Array.from({length:46},()=>({ai:zg,dist:10}));Xo={firstframe:0,lastframe:45,frames:Dg,endfunc:Ki};var Ug=Array.from({length:20},(e,t)=>({ai:Rg,dist:0,think:t===10?Ig:null}));Lg={firstframe:46,lastframe:65,frames:Ug,endfunc:Ki};var Bg=Array.from({length:6},()=>({ai:Wo,dist:0}));Ng={firstframe:66,lastframe:71,frames:Bg,endfunc:Ki};var Gg=Array.from({length:10},()=>({ai:Wo,dist:0}));$o={firstframe:84,lastframe:93,frames:Gg,endfunc:Pg};var Xn=.1;function Vg(e,t,n){J(e,Xn,n)}function Hg(e,t,n){ae(e,t,Xn,n)}function Wg(e,t,n){ce(e,t,Xn,n)}function Kg(e,t,n){Q(e,t,Xn,n)}function Yo(e,t,n){ne(e,t)}var Xi,jo,qo,Xg,$g,Zo;function Yg(e){e.monsterinfo.current_move=Xi}function jg(e){e.monsterinfo.current_move=jo}function $i(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=qo:e.monsterinfo.current_move=Xi}function qg(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));De(e,n,r,5,1e3,0,0,t,1)}function Zg(e){e.monsterinfo.nextframe=Zo.lastframe,e.nextthink=-1}var Jg=Array.from({length:46},()=>({ai:Vg,dist:0}));Xi={firstframe:0,lastframe:45,frames:Jg,endfunc:Yg};var Qg=Array.from({length:46},()=>({ai:Hg,dist:5}));jo={firstframe:0,lastframe:45,frames:Qg,endfunc:jg};var ev=Array.from({length:46},()=>({ai:Wg,dist:10}));qo={firstframe:0,lastframe:45,frames:ev,endfunc:$i};var tv=Array.from({length:20},(e,t)=>({ai:Kg,dist:0,think:t===10?qg:null}));Xg={firstframe:46,lastframe:65,frames:tv,endfunc:$i};var nv=Array.from({length:6},()=>({ai:Yo,dist:0}));$g={firstframe:66,lastframe:71,frames:nv,endfunc:$i};var rv=Array.from({length:10},()=>({ai:Yo,dist:0}));Zo={firstframe:84,lastframe:93,frames:rv,endfunc:Zg};var $n=.1;function iv(e,t,n){J(e,$n,n)}function av(e,t,n){ae(e,t,$n,n)}function sv(e,t,n){ce(e,t,$n,n)}function ov(e,t,n){Q(e,t,$n,n)}function Yi(e,t,n){ne(e,t)}var ji,Jo,Qo,cv,uv,ec,mv;function dv(e){e.monsterinfo.current_move=ji}function lv(e){e.monsterinfo.current_move=Jo}function Yn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Qo:e.monsterinfo.current_move=ji}function hv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)},i=I(T(r,n));qe(e,n,i,5,2,.05,.05,0,t,4)}var fv=Array.from({length:22},()=>({ai:iv,dist:0}));ji={firstframe:0,lastframe:21,frames:fv,endfunc:dv};var pv=Array.from({length:15},()=>({ai:av,dist:4}));Jo={firstframe:22,lastframe:36,frames:pv,endfunc:lv};var gv=Array.from({length:8},()=>({ai:sv,dist:12}));Qo={firstframe:37,lastframe:44,frames:gv,endfunc:Yn};var vv=Array.from({length:15},(e,t)=>({ai:ov,dist:0,think:t>=5&&t<=7?hv:null}));cv={firstframe:45,lastframe:59,frames:vv,endfunc:Yn};var _v=Array.from({length:10},()=>({ai:Yi,dist:0}));uv={firstframe:60,lastframe:69,frames:_v,endfunc:Yn};var yv=Array.from({length:20},()=>({ai:Yi,dist:0}));function xv(e){e.monsterinfo.nextframe=ec.lastframe,e.nextthink=-1}ec={firstframe:70,lastframe:89,frames:yv,endfunc:xv};var wv=Array.from({length:5},()=>({ai:Yi,dist:0}));mv={firstframe:90,lastframe:94,frames:wv,endfunc:Yn};var jn=.1,Sv={x:40,y:-20,z:20},Av={x:40,y:20,z:20},kv={x:30,y:0,z:40};function Ev(e,t,n){J(e,jn,n)}function bv(e,t,n){ae(e,t,jn,n)}function Mv(e,t,n){ce(e,t,jn,n)}function qi(e,t,n){Q(e,t,jn,n)}function qt(e,t,n){ne(e,t)}var Zi,tc,nc,Ji,di,zv,Rv,Lv,Nv,rc;function Ov(e){e.monsterinfo.current_move=Zi}function Tv(e){e.monsterinfo.current_move=tc}function At(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=nc:e.monsterinfo.current_move=Zi}function Iv(e,t){let n=(r,i,a,s,o,c)=>{let u=t.trace(r,i,a,s,o,c);return{fraction:u.fraction,ent:u.ent}};e.enemy&&Wt(e,e.enemy,n)&&Math.random()<.9?e.monsterinfo.current_move=Ji:e.monsterinfo.current_move=di}function li(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function Pv(e,t){if(!e.enemy)return;let n=li(e,Av),r=I(T(e.enemy.origin,n));zn(e,n,r,6,4,.05,.05,0,t,4);let i=li(e,Sv),a=I(T(e.enemy.origin,i));zn(e,i,a,6,4,.05,.05,0,t,4)}function Cv(e,t){if(!e.enemy)return;let n=li(e,kv),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=I(T(r,n));Js(e,n,i,50,300,100,200,0,t)}function Fv(e){e.monsterinfo.nextframe=rc.lastframe,e.nextthink=-1}function Dv(e,t){let n=t.spawn();n.classname="monster_makron",n.origin={...e.origin},n.angles={...e.angles}}var Uv=Array.from({length:51},()=>({ai:Ev,dist:0}));Zi={firstframe:0,lastframe:50,frames:Uv,endfunc:Ov};var Bv=Array.from({length:14},()=>({ai:bv,dist:10}));tc={firstframe:51,lastframe:64,frames:Bv,endfunc:Tv};var Gv=Array.from({length:14},()=>({ai:Mv,dist:10}));nc={firstframe:51,lastframe:64,frames:Gv,endfunc:At};var Vv=Array.from({length:8},()=>({ai:qi,dist:0})),Hv={firstframe:65,lastframe:72,frames:Vv,endfunc:null},Wv=Array.from({length:6},()=>({ai:qi,dist:0,think:Pv}));Ji={firstframe:73,lastframe:78,frames:Wv,endfunc:Iv};Hv.endfunc=e=>{e.monsterinfo.current_move=Ji};var Kv=Array.from({length:4},()=>({ai:qt,dist:0}));di={firstframe:79,lastframe:82,frames:Kv,endfunc:At};var Xv=Array.from({length:13},(e,t)=>({ai:qi,dist:0,think:t===6?Cv:null}));zv={firstframe:83,lastframe:95,frames:Xv,endfunc:At};var $v=Array.from({length:3},()=>({ai:qt,dist:0}));Rv={firstframe:96,lastframe:98,frames:$v,endfunc:At};var Yv=Array.from({length:3},()=>({ai:qt,dist:0}));Lv={firstframe:99,lastframe:101,frames:Yv,endfunc:At};var jv=Array.from({length:25},()=>({ai:qt,dist:0}));Nv={firstframe:102,lastframe:126,frames:jv,endfunc:At};var qv=Array.from({length:50},(e,t)=>({ai:qt,dist:0,think:t===49?((n,r)=>{}):t===48?Dv:null}));rc={firstframe:127,lastframe:176,frames:qv,endfunc:Fv};var qn=.1,Zv={x:30,y:28,z:24},Jv={x:26,y:16,z:24},Qv={x:26,y:-14,z:24};function e_(e,t,n){J(e,qn,n)}function t_(e,t,n){ae(e,t,qn,n)}function n_(e,t,n){ce(e,t,qn,n)}function ic(e,t,n){Q(e,t,qn,n)}function kt(e,t,n){ne(e,t)}var Qi,ac,sc,r_,oc,i_,a_,s_,o_,cc,c_;function u_(e){e.monsterinfo.current_move=Qi}function m_(e){e.monsterinfo.current_move=ac}function Xe(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=sc:e.monsterinfo.current_move=Qi}function ea(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function d_(e,t){if(!e.enemy)return;t.engine.sound?.(e,0,"makron/bfg_fire.wav",1,1,0);let n=ea(e,Zv),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=I(T(r,n));Js(e,n,i,50,300,100,300,0,t)}function l_(e,t){if(!e.pos1)return;t.engine.sound?.(e,0,"makron/rail_fire.wav",1,1,0);let n=ea(e,Qv),r=I(T(e.pos1,n));Qs(e,n,r,50,100,0,t)}function h_(e){e.enemy&&(e.pos1={...e.enemy.origin},e.pos1={...e.pos1,z:e.pos1.z+(e.enemy.viewheight||0)})}function f_(e,t){t.engine.sound?.(e,0,"makron/blaster.wav",1,1,0);let n=ea(e,Jv),r=(e.monsterinfo.nextframe||0)-oc.firstframe,i=0,a;if(e.enemy){let s={...e.enemy.origin};s.z+=e.enemy.viewheight||0;let o=T(s,n),u={...Vt(o)};r<=12?u.y-=5*(r-4):u.y-=40-5*(r-12),a=Z(u).forward}else{let{forward:s}=Z(e.angles);a=s}De(e,n,a,15,1e3,0,0,t,1)}function p_(e){e.monsterinfo.nextframe=cc.lastframe,e.nextthink=-1}var g_=Array.from({length:60},()=>({ai:e_,dist:0}));Qi={firstframe:0,lastframe:59,frames:g_,endfunc:u_};var v_=Array.from({length:10},()=>({ai:t_,dist:8}));ac={firstframe:60,lastframe:69,frames:v_,endfunc:m_};var __=Array.from({length:10},()=>({ai:n_,dist:8}));sc={firstframe:60,lastframe:69,frames:__,endfunc:Xe};var y_=Array.from({length:8},(e,t)=>({ai:ic,dist:0,think:t===3?d_:null}));r_={firstframe:70,lastframe:77,frames:y_,endfunc:Xe};var x_=Array.from({length:26},(e,t)=>({ai:kt,dist:0,think:t>=4&&t<=20?f_:null}));oc={firstframe:78,lastframe:103,frames:x_,endfunc:Xe};var w_=Array.from({length:16},(e,t)=>({ai:ic,dist:0,think:t===7?h_:t===8?l_:null}));i_={firstframe:104,lastframe:119,frames:w_,endfunc:Xe};var S_=Array.from({length:4},()=>({ai:kt,dist:0}));a_={firstframe:120,lastframe:123,frames:S_,endfunc:Xe};var A_=Array.from({length:4},()=>({ai:kt,dist:0}));s_={firstframe:124,lastframe:127,frames:A_,endfunc:Xe};var k_=Array.from({length:27},()=>({ai:kt,dist:0}));o_={firstframe:128,lastframe:154,frames:k_,endfunc:Xe};var E_=Array.from({length:95},()=>({ai:kt,dist:0}));cc={firstframe:155,lastframe:249,frames:E_,endfunc:p_};var b_=Array.from({length:13},()=>({ai:kt,dist:0}));c_={firstframe:250,lastframe:262,frames:b_,endfunc:Xe};var Zn=.1;function M_(e,t,n){if(fc(e,n)){e.monsterinfo.current_move=Jn;return}J(e,Zn,n)}function z_(e,t,n){ae(e,t,Zn,n)}function R_(e,t,n){fc(e,n)?e.monsterinfo.current_move=Jn:ce(e,t,Zn,n)}function uc(e,t,n){Q(e,t,Zn,n)}function mc(e,t,n){ne(e,t)}var ta,dc,Jn,L_,lc,N_,hc;function O_(e){e.monsterinfo.current_move=ta}function T_(e){e.monsterinfo.current_move=dc}function Qn(e){if(e.enemy&&e.enemy.deadflag===2&&xt(e,e.enemy)<80){e.monsterinfo.current_move=lc;return}e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Jn:e.monsterinfo.current_move=ta}function I_(e,t){if(!e.enemy||e.enemy.health<=0)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=I(T(e.enemy.origin,n));De(e,n,r,2,1e3,0,0,t,10)}function P_(e,t){if(!e.enemy||e.enemy.deadflag!==2)return;let n=e.enemy;n.deadflag=0,n.health=n.max_health,n.takedamage=!0,n.solid=2,n.nextthink=t.timeSeconds+.1,n.monsterinfo&&n.monsterinfo.stand&&n.monsterinfo.stand(n,t),e.enemy=null}function fc(e,t){if(e.enemy&&e.enemy.deadflag===2)return!0;if(Math.random()>.2)return!1;let n=null,r=1024,i=(a,s,o,c,u,m)=>{let d=t.trace(a,s,o,c,u,m);return{fraction:d.fraction,ent:d.ent}};return t.forEachEntity(a=>{if(a===e||a.deadflag!==2||!a.monsterinfo||a.classname==="monster_medic"||!Wt(e,a,i))return;let s=xt(e,a);s<r&&(r=s,n=a)}),n?(e.enemy=n,!0):!1}function C_(e){e.monsterinfo.nextframe=hc.lastframe,e.nextthink=-1}var F_=Array.from({length:30},()=>({ai:M_,dist:0}));ta={firstframe:0,lastframe:29,frames:F_,endfunc:O_};var D_=Array.from({length:40},()=>({ai:z_,dist:3}));dc={firstframe:30,lastframe:69,frames:D_,endfunc:T_};var U_=Array.from({length:20},()=>({ai:R_,dist:12}));Jn={firstframe:70,lastframe:89,frames:U_,endfunc:Qn};var B_=Array.from({length:16},(e,t)=>({ai:uc,dist:0,think:t>=4&&t<=13?I_:null}));L_={firstframe:90,lastframe:105,frames:B_,endfunc:Qn};var G_=Array.from({length:10},(e,t)=>({ai:uc,dist:0,think:t===5?P_:null}));lc={firstframe:106,lastframe:115,frames:G_,endfunc:Qn};var V_=Array.from({length:6},()=>({ai:mc,dist:0}));N_={firstframe:116,lastframe:121,frames:V_,endfunc:Qn};var H_=Array.from({length:10},()=>({ai:mc,dist:0}));hc={firstframe:122,lastframe:131,frames:H_,endfunc:C_};var Zt=.1;function z(e,t,n){J(e,Zt,n)}function le(e,t,n){ae(e,t,Zt,n)}function mt(e,t,n){ce(e,t,Zt,n)}function Ve(e,t,n){Q(e,t,Zt,n)}function W(e,t,n){ne(e,t)}function ri(e,t,n){ch(e,null,t,Zt)}var pc,gc,Rn,W_,K_,X_,$_,vc,_c;function Y_(e){e.monsterinfo.current_move=gc}function j_(e){e.monsterinfo.current_move=pc}function Et(e){e.monsterinfo.current_move=Rn}function yc(e,t,n){if(n.engine.sound?.(e,0,"mutant/mutatck1.wav",1,1,0),!e.enemy)return;let r=T(e.enemy.origin,e.origin);if(gt(r)>100)return;let a=I(r);ue(e.enemy,e,e,a,e.enemy.origin,H,t,0,0,0)}function q_(e,t){yc(e,30,t)}function Rs(e,t){yc(e,30,t)}function ht(e,t){e.flags&1&&e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Rn),e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Rn)}function Z_(e,t,n,r){e.health<=0||(t&&t.takedamage&&(e.velocity.z>0&&(e.velocity={...e.velocity,z:0}),ue(t,e,e,I(e.velocity),e.origin,H,50,0,0,0)),(!t||!t.takedamage&&t.solid!==0)&&(e.touch=void 0))}function J_(e,t){let n=Z(e.angles).forward;e.movetype=7,e.touch=Z_,e.velocity=U(B(n,300),{x:0,y:0,z:300}),e.velocity=U(B(n,600),{x:0,y:0,z:250}),e.groundentity=null,t.engine.sound?.(e,0,"mutant/mutatck2.wav",1,1,0)}function Q_(e){e.monsterinfo.nextframe=vc.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var ey=[{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0}];pc={firstframe:0,lastframe:50,frames:ey,endfunc:j_};var ty=[{ai:le,dist:3},{ai:le,dist:1},{ai:le,dist:5},{ai:le,dist:10},{ai:le,dist:13},{ai:le,dist:12},{ai:le,dist:0},{ai:le,dist:0},{ai:le,dist:5},{ai:le,dist:6},{ai:le,dist:16},{ai:le,dist:15},{ai:le,dist:6}];gc={firstframe:51,lastframe:63,frames:ty,endfunc:Y_};var ny=[{ai:mt,dist:20},{ai:mt,dist:15},{ai:mt,dist:35},{ai:mt,dist:20},{ai:mt,dist:10},{ai:mt,dist:20}];Rn={firstframe:64,lastframe:69,frames:ny,endfunc:Et};var ry=[{ai:Ve,dist:0},{ai:Ve,dist:0},{ai:Ve,dist:0,think:Rs},{ai:Ve,dist:0},{ai:Ve,dist:0,think:q_},{ai:Ve,dist:0},{ai:Ve,dist:0,think:Rs},{ai:Ve,dist:0}];W_={firstframe:70,lastframe:77,frames:ry,endfunc:Et};var iy=[{ai:ri,dist:0},{ai:ri,dist:0},{ai:ri,dist:0,think:J_},{ai:W,dist:0,think:ht},{ai:W,dist:0,think:ht},{ai:W,dist:0,think:ht},{ai:W,dist:0,think:ht},{ai:W,dist:0,think:ht}];_c={firstframe:93,lastframe:100,frames:iy,endfunc:Et};_c.frames[3].ai=(e,t,n)=>{ht(e,n),!e.groundentity&&e.frame===99&&(e.groundentity||(e.monsterinfo.nextframe=96))};var ay=[{ai:W,dist:4},{ai:W,dist:-3},{ai:W,dist:-8},{ai:W,dist:2},{ai:W,dist:5}];K_={firstframe:78,lastframe:82,frames:ay,endfunc:Et};var sy=[{ai:W,dist:-24},{ai:W,dist:11},{ai:W,dist:5},{ai:W,dist:-2}];X_={firstframe:83,lastframe:86,frames:sy,endfunc:Et};var oy=[{ai:W,dist:11},{ai:W,dist:0},{ai:W,dist:-2},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0}];$_={firstframe:87,lastframe:92,frames:oy,endfunc:Et};var cy=[{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0},{ai:W,dist:0}];vc={firstframe:101,lastframe:109,frames:cy,endfunc:Q_};var er=.1,uy=()=>Math.random();function D(e,t,n){J(e,er,n)}function Pe(e,t,n){ae(e,t,er,n)}function Ce(e,t,n){ce(e,t,er,n)}function se(e,t,n){Q(e,t,er,n)}function oe(e,t,n){ne(e,t)}var na,xc,wc,my,dy,Sc,Ac,ly,hy,ra,kc;function fy(e,t){t.engine.sound?.(e,0,"parasite/paratck1.wav",1,1,0)}function py(e,t){t.engine.sound?.(e,0,"parasite/paratck4.wav",1,1,0)}function dt(e,t){t.engine.sound?.(e,0,"parasite/paridle1.wav",1,2,0)}function hi(e,t){t.engine.sound?.(e,0,"parasite/paridle2.wav",1,2,0)}function gy(e){e.monsterinfo.current_move=ra}function vy(e){uy()<=.8?e.monsterinfo.current_move=ra:e.monsterinfo.current_move=kc}function Ec(e){e.monsterinfo.current_move=na}function ia(e){e.monsterinfo.current_move=xc}function bc(e){e.monsterinfo.current_move=Ac}function Mc(e){e.monsterinfo.aiflags&&e.monsterinfo.aiflags&1?e.monsterinfo.current_move=na:e.monsterinfo.current_move=wc}function ii(e,t){let n=T(t,e);if(gt(n)>256)return!1;let a=Vt(n).x;return a<-180&&(a+=360),!(Math.abs(a)>30)}function Ae(e,t){if(!e.enemy)return;let n=Z(e.angles),r=n.forward,i=n.right,a=n.up,s={x:24,y:0,z:6},o=U(e.origin,U(B(r,s.x),U(B(i,s.y),B(a,s.z)))),c=Xl(e.enemy.origin);if(!ii(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.maxs.z-8},!ii(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.mins.z+8},!ii(o,c)))||t.trace(o,c,H,H,e,Ht).ent!==e.enemy)return;let m=2,d=e.frame;d===41?(m=5,t.engine.sound?.(e.enemy,0,"parasite/paratck2.wav",1,1,0)):(d===42&&t.engine.sound?.(e,0,"parasite/paratck3.wav",1,1,0),m=2),t.multicast(e.origin,0,_e.temp_entity,{te:ye.PARASITE_ATTACK,entId:e.index,start:o,end:c});let h=I(T(o,c));ue(e.enemy,e,e,h,e.enemy.origin,H,m,0,8,0),e.health<e.max_health&&(e.health+=m,e.health>e.max_health&&(e.health=e.max_health))}function _y(e){e.monsterinfo.nextframe=Sc.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var yy=[{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0,think:dt},{ai:D,dist:0},{ai:D,dist:0,think:dt},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0,think:dt},{ai:D,dist:0},{ai:D,dist:0,think:dt},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0,think:dt},{ai:D,dist:0},{ai:D,dist:0,think:dt}];na={firstframe:83,lastframe:99,frames:yy,endfunc:Ec};var xy=[{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0}];hy={firstframe:100,lastframe:103,frames:xy,endfunc:gy};var wy=[{ai:D,dist:0,think:hi},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0,think:hi},{ai:D,dist:0},{ai:D,dist:0}];ra={firstframe:104,lastframe:109,frames:wy,endfunc:vy};var Sy=[{ai:D,dist:0,think:hi},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0},{ai:D,dist:0}];kc={firstframe:110,lastframe:117,frames:Sy,endfunc:Ec};var Ay=[{ai:Ce,dist:0},{ai:Ce,dist:30}];Ac={firstframe:68,lastframe:69,frames:Ay,endfunc:Mc};var ky=[{ai:Ce,dist:30},{ai:Ce,dist:30},{ai:Ce,dist:22},{ai:Ce,dist:19},{ai:Ce,dist:24},{ai:Ce,dist:28},{ai:Ce,dist:25}];wc={firstframe:70,lastframe:76,frames:ky,endfunc:Mc};var Ey=[{ai:Pe,dist:0},{ai:Pe,dist:30,think:ia}];ly={firstframe:68,lastframe:69,frames:Ey,endfunc:ia};var by=[{ai:Pe,dist:30},{ai:Pe,dist:30},{ai:Pe,dist:22},{ai:Pe,dist:19},{ai:Pe,dist:24},{ai:Pe,dist:28},{ai:Pe,dist:25}];xc={firstframe:70,lastframe:76,frames:by,endfunc:ia};var My=[{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:6},{ai:oe,dist:16},{ai:oe,dist:-6},{ai:oe,dist:-7},{ai:oe,dist:0}];dy={firstframe:57,lastframe:67,frames:My,endfunc:bc};var zy=[{ai:se,dist:0,think:fy},{ai:se,dist:0},{ai:se,dist:15,think:Ae},{ai:se,dist:0,think:Ae},{ai:se,dist:0,think:Ae},{ai:se,dist:0,think:Ae},{ai:se,dist:0,think:Ae},{ai:se,dist:-2,think:Ae},{ai:se,dist:-2,think:Ae},{ai:se,dist:-3,think:Ae},{ai:se,dist:-2,think:Ae},{ai:se,dist:0,think:Ae},{ai:se,dist:-1,think:Ae},{ai:se,dist:0,think:py},{ai:se,dist:-2},{ai:se,dist:-2},{ai:se,dist:-3},{ai:se,dist:0}];my={firstframe:39,lastframe:56,frames:zy,endfunc:bc};var Ry=[{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0},{ai:oe,dist:0}];Sc={firstframe:32,lastframe:38,frames:Ry,endfunc:_y};var tr=.1;var Ly=2;function Ny(e,t,n){J(e,tr,n)}function Oy(e,t,n){ae(e,t,tr,n)}function Ty(e,t,n){ce(e,t,tr,n)}function zc(e,t,n){Q(e,t,tr,n)}function Rc(e,t,n){ne(e,t)}var aa,Lc,Nc,Iy,Py,Cy,Oc;function Fy(e){e.monsterinfo.current_move=aa}function Dy(e){e.monsterinfo.current_move=Lc}function nr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Nc:e.monsterinfo.current_move=aa}function sa(e){return{x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight}}function oa(e,t){if(!e.enemy){let{forward:r}=Z(e.angles);return r}let n={x:e.enemy.origin.x,y:e.enemy.origin.y,z:e.enemy.origin.z+(e.enemy.viewheight||0)};return I(T(n,t))}function Uy(e,t){if(!e.enemy)return;let n=sa(e),r=oa(e,n);De(e,n,r,5,600,0,0,t,1)}function By(e,t){if(!e.enemy)return;let n=sa(e),r=oa(e,n),i=2,a=4,s=20,o=.15,c=.15;t.engine.sound?.(e,0,"soldier/solatck2.wav",1,1,0),$h(e,n,r,i,a,o,c,s,0,t,3)}function Gy(e,t){if(!e.enemy)return;let n=sa(e),r=oa(e,n),i=4,a=4,s=.05,o=.05;t.engine.sound?.(e,0,"soldier/solatck3.wav",1,1,0),qe(e,n,r,i,a,s,o,0,t,4)}function Vy(e,t){e.spawnflags&Ly?By(e,t):Uy(e,t)}var Hy=Array.from({length:30},()=>({ai:Ny,dist:0}));aa={firstframe:0,lastframe:29,frames:Hy,endfunc:Fy};var Wy=Array.from({length:40},()=>({ai:Oy,dist:2}));Lc={firstframe:30,lastframe:69,frames:Wy,endfunc:Dy};var Ky=Array.from({length:20},()=>({ai:Ty,dist:10}));Nc={firstframe:70,lastframe:89,frames:Ky,endfunc:nr};var Xy=Array.from({length:10},(e,t)=>({ai:zc,dist:0,think:t===5?Vy:null}));Iy={firstframe:90,lastframe:99,frames:Xy,endfunc:nr};var $y=Array.from({length:10},(e,t)=>({ai:zc,dist:0,think:t>=4&&t<=8?Gy:null}));Py={firstframe:90,lastframe:99,frames:$y,endfunc:nr};var Yy=Array.from({length:6},()=>({ai:Rc,dist:0}));Cy={firstframe:100,lastframe:105,frames:Yy,endfunc:nr};var jy=Array.from({length:10},()=>({ai:Rc,dist:0}));function qy(e){e.monsterinfo.nextframe=Oc.lastframe,e.nextthink=-1}Oc={firstframe:106,lastframe:115,frames:jy,endfunc:qy};var Tc=.1,Zy={x:30,y:30,z:40},Jy={x:30,y:-30,z:40},Qy={x:20,y:0,z:70};function ex(e,t,n){J(e,Tc,n)}function tx(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ua:e.monsterinfo.current_move=rr}function ca(e,t,n){Q(e,t,Tc,n)}function Jt(e,t,n){ne(e,t)}var rr,ua,nx,rx,Ic,Pc,ix,ax,sx,Cc;function ox(e){e.monsterinfo.current_move=rr}function Je(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ua:e.monsterinfo.current_move=rr}function ma(e,t){let{forward:n,right:r,up:i}=Z(e.angles),a={...e.origin},s=B(n,t.x),o=B(r,t.y),c=B(i,t.z);return U(U(U(a,s),o),c)}function cx(e,t){if(!e.enemy)return;let n=ma(e,Jy),r=I(T(e.enemy.origin,n));$t(e,n,r,50,650,0,t)}function ux(e,t){if(!e.enemy)return;let n=ma(e,Qy),r=I(T(e.enemy.origin,n));Yh(e,n,r,50,600,0,t)}function mx(e,t){if(!e.enemy)return;let n=ma(e,Zy),r=I(T(e.enemy.origin,n));zn(e,n,r,6,4,.05,.05,0,t,4)}function dx(e,t){let n=(r,i,a,s,o,c)=>{let u=t.trace(r,i,a,s,o,c);return{fraction:u.fraction,ent:u.ent}};e.enemy&&Wt(e,e.enemy,n)&&(Math.random()<.3||e.timestamp&&e.timestamp>=Date.now()/1e3)?e.monsterinfo.current_move=Ic:e.monsterinfo.current_move=Pc}function lx(e){e.monsterinfo.nextframe=Cc.lastframe,e.nextthink=-1}var hx=Array.from({length:60},()=>({ai:ex,dist:0}));rr={firstframe:0,lastframe:59,frames:hx,endfunc:ox};var fx=Array.from({length:18},()=>({ai:tx,dist:12}));ua={firstframe:60,lastframe:77,frames:fx,endfunc:Je};var px=Array.from({length:4},()=>({ai:Jt,dist:0}));sx={firstframe:78,lastframe:81,frames:px,endfunc:Je};var gx=Array.from({length:4},()=>({ai:Jt,dist:0}));ax={firstframe:82,lastframe:85,frames:gx,endfunc:Je};var vx=Array.from({length:4},()=>({ai:Jt,dist:0}));ix={firstframe:86,lastframe:89,frames:vx,endfunc:Je};var _x=Array.from({length:24},()=>({ai:Jt,dist:0}));Cc={firstframe:90,lastframe:113,frames:_x,endfunc:lx};var yx=Array.from({length:6},(e,t)=>({ai:ca,dist:0,think:t===0||t===3?ux:null}));rx={firstframe:114,lastframe:119,frames:yx,endfunc:Je};var xx=Array.from({length:27},(e,t)=>({ai:ca,dist:0,think:t===7||t===10||t===13?cx:null}));nx={firstframe:120,lastframe:146,frames:xx,endfunc:Je};var wx=Array.from({length:6},()=>({ai:ca,dist:0,think:mx}));Ic={firstframe:147,lastframe:152,frames:wx,endfunc:dx};var Sx=Array.from({length:14},()=>({ai:Jt,dist:0}));Pc={firstframe:153,lastframe:166,frames:Sx,endfunc:Je};var da=.1;function Ax(e,t,n){J(e,da,n)}function kx(e,t,n){ae(e,t,da,n)}function Ex(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ha:e.monsterinfo.current_move=ir}function la(e,t,n){Q(e,t,da,n)}function Fc(e,t,n){ne(e,t)}var ir,Dc,ha,bx,Mx,zx,Rx,Uc;function Lx(e){e.monsterinfo.current_move=ir}function Nx(e){e.monsterinfo.current_move=Dc}function Qt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ha:e.monsterinfo.current_move=ir}function Ox(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));De(e,n,r,30,1e3,0,0,t,1)}function Tx(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));qe(e,n,r,20,2,.05,.05,0,t,4)}function ai(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=I(T(e.enemy.origin,n));$t(e,n,r,50,650,0,t)}function Ix(e){e.monsterinfo.nextframe=Uc.lastframe,e.nextthink=-1}var Px=Array.from({length:30},()=>({ai:Ax,dist:0}));ir={firstframe:0,lastframe:29,frames:Px,endfunc:Lx};var Cx=Array.from({length:16},()=>({ai:kx,dist:5}));Dc={firstframe:30,lastframe:45,frames:Cx,endfunc:Nx};var Fx=Array.from({length:16},()=>({ai:Ex,dist:10}));ha={firstframe:46,lastframe:61,frames:Fx,endfunc:Qt};var Dx=Array.from({length:16},(e,t)=>({ai:la,dist:0,think:t>5&&t<12?Ox:null}));bx={firstframe:62,lastframe:77,frames:Dx,endfunc:Qt};var Ux=Array.from({length:20},(e,t)=>({ai:la,dist:0,think:t%2===0&&t>5?Tx:null}));Mx={firstframe:78,lastframe:97,frames:Ux,endfunc:Qt};var Bx=Array.from({length:18},(e,t)=>({ai:la,dist:0,think:t===8||t===12||t===16?ai:null}));zx={firstframe:98,lastframe:115,frames:Bx,endfunc:Qt};var Gx=Array.from({length:6},()=>({ai:Fc,dist:0}));Rx={firstframe:116,lastframe:121,frames:Gx,endfunc:Qt};var Vx=Array.from({length:16},()=>({ai:Fc,dist:0}));Uc={firstframe:122,lastframe:137,frames:Vx,endfunc:Ix};var fa=.1;function Hx(e,t,n){J(e,fa,n)}function pa(e,t,n){ce(e,t,fa,n)}function Wx(e,t,n){Q(e,t,fa,n)}var ga,Bc,Kx,Xx,Gc;function $x(e){e.monsterinfo.current_move=ga}function va(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Bc:e.monsterinfo.current_move=ga}function Yx(e,t){if(!e.enemy)return;let n=Z(e.angles).forward,r={x:e.origin.x+n.x*8,y:e.origin.y+n.y*8,z:e.origin.z+e.viewheight},i=I(T(e.enemy.origin,r));t.engine.sound?.(e,0,"turret/fire.wav",1,1,0),De(e,r,i,2,1e3,1,0,t)}var jx=Array.from({length:1},()=>({ai:Hx,dist:0}));ga={firstframe:0,lastframe:0,frames:jx,endfunc:$x};var qx=Array.from({length:1},()=>({ai:pa,dist:0}));Bc={firstframe:0,lastframe:0,frames:qx,endfunc:va};var Zx=Array.from({length:8},(e,t)=>({ai:Wx,dist:0,think:t===4?Yx:void 0}));Kx={firstframe:1,lastframe:8,frames:Zx,endfunc:va};var Jx=Array.from({length:2},()=>({ai:pa,dist:0}));Xx={firstframe:9,lastframe:10,frames:Jx,endfunc:va};var Qx=Array.from({length:4},()=>({ai:pa,dist:0}));function ew(e){e.monsterinfo.nextframe=Gc.lastframe,e.nextthink=-1,e.deadflag=2,e.solid=0}Gc={firstframe:11,lastframe:14,frames:Qx,endfunc:ew};var O2=new Map(Si.map(e=>[e.name,e]));var tw=2166136261,nw=16777619;function Vc(e,t){let n=e>>>0;for(let r=0;r<t.length;r+=1)n^=t[r]&255,n=Math.imul(n,nw)>>>0;return n>>>0}function ft(e,t){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,t,!0);let i=new Uint8Array(n);return Vc(e,i)}function fi(e,t){let n=new Uint8Array(t.length);for(let r=0;r<t.length;r+=1)n[r]=t.charCodeAt(r)&255;return Vc(e,n)}var si=2,rw=1;function fe(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function j(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Sn(e,t,n){return e===void 0?n:j(e,t)}function Ln(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function kn(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let n of e)j(n,`${t} element`);return e}function iw(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=fe(e,"level");return{frameNumber:Sn(t.frameNumber,"level.frameNumber",0),timeSeconds:Sn(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Sn(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Sn(t.deltaSeconds,"level.deltaSeconds",0)}}function aw(e){if(e===void 0)return new Is().getState();let t=fe(e,"rng"),n=fe(t.mt,"rng.mt"),r=kn(n.state,"rng.mt.state");return{mt:{index:j(n.index,"rng.mt.index"),state:r}}}function sw(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("thinks must be an array");return e.map((t,n)=>{let r=fe(t,`thinks[${n}]`);return{time:j(r.time,`thinks[${n}].time`),entityIndex:j(r.entityIndex,`thinks[${n}].entityIndex`)}})}function ow(e){if(e===void 0)return{frameNumber:0,sightEntityIndex:null,sightEntityFrame:0,soundEntityIndex:null,soundEntityFrame:0,sound2EntityIndex:null,sound2EntityFrame:0,sightClientIndex:null};let t=fe(e,"awareness"),n=(r,i)=>r===null?null:j(r,i);return{frameNumber:j(t.frameNumber,"awareness.frameNumber"),sightEntityIndex:n(t.sightEntityIndex,"awareness.sightEntityIndex"),sightEntityFrame:j(t.sightEntityFrame,"awareness.sightEntityFrame"),soundEntityIndex:n(t.soundEntityIndex,"awareness.soundEntityIndex"),soundEntityFrame:j(t.soundEntityFrame,"awareness.soundEntityFrame"),sound2EntityIndex:n(t.sound2EntityIndex,"awareness.sound2EntityIndex"),sound2EntityFrame:j(t.sound2EntityFrame,"awareness.sound2EntityFrame"),sightClientIndex:n(t.sightClientIndex,"awareness.sightClientIndex")}}function cw(e){if(e===void 0)return{};let t=fe(e,"entity.fields"),n={};for(let[r,i]of Object.entries(t)){if(i===null){n[r]=null;continue}switch(typeof i){case"number":case"string":case"boolean":n[r]=i;break;default:{if(!Array.isArray(i)){let a=fe(i,r),s={};for(let[o,c]of Object.entries(a))s[o]=j(c,`${r}.${o}`);n[r]=s;break}if(Array.isArray(i)&&i.length===3){let[a,s,o]=i;n[r]=[j(a,`${r}[0]`),j(s,`${r}[1]`),j(o,`${r}[2]`)];break}throw new Error(`Unsupported entity field value for ${r}`)}}}return n}function uw(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,n)=>{let r=fe(t,`entities[${n}]`);return{index:j(r.index,`entities[${n}].index`),fields:cw(r.fields)}})}function mw(e){let t=fe(e,"pool");return{capacity:j(t.capacity,"pool.capacity"),activeOrder:kn(t.activeOrder,"pool.activeOrder"),freeList:kn(t.freeList,"pool.freeList"),pendingFree:kn(t.pendingFree,"pool.pendingFree")}}function dw(e){let t=fe(e,"entities");return{timeSeconds:j(t.timeSeconds,"entities.timeSeconds"),pool:mw(t.pool),entities:uw(t.entities),thinks:sw(t.thinks),awareness:ow(t.awareness)}}function lw(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("cvars must be an array");return e.map((t,n)=>{let r=fe(t,`cvars[${n}]`);return{name:Ln(r.name,`cvars[${n}].name`),value:Ln(r.value,`cvars[${n}].value`),flags:j(r.flags,`cvars[${n}].flags`)}})}function hw(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,n)=>Ln(t,`configstrings[${n}]`))}function fw(e){return e===void 0?{}:fe(e,"gameState")}function Fe(e,t){if(t==null)return e;if(typeof t=="number")return ft(e,t);if(typeof t=="string")return fi(e,t);if(typeof t=="boolean")return ft(e,t?1:0);if(Array.isArray(t)){let n=e;for(let r of t)n=Fe(n,r);return n}if(typeof t=="object"){let n=e,r=Object.keys(t).sort();for(let i of r)n=fi(n,i),n=Fe(n,t[i]);return n}return e}function pw(e){let t=tw;return t=ft(t,e.version),t=ft(t,e.timestamp),t=fi(t,e.map),t=ft(t,e.difficulty),t=ft(t,e.playtimeSeconds),t=Fe(t,e.gameState),t=Fe(t,e.level),t=Fe(t,e.rng),t=Fe(t,e.entities),t=Fe(t,e.cvars),t=Fe(t,e.configstrings),e.player&&(t=Fe(t,e.player)),t>>>0}function Hc(e,t={}){let{allowNewerVersion:n=!0}=t,r=typeof e=="string"?JSON.parse(e):e,i=fe(r,"save"),a=i.version??si,s=j(a,"version");if(s<rw)throw new Error(`Unsupported save version ${s}`);if(s>si&&!n)throw new Error(`Save version ${s} is newer than supported ${si}`);let o={version:s,timestamp:j(i.timestamp,"timestamp"),map:Ln(i.map,"map"),difficulty:j(i.difficulty,"difficulty"),playtimeSeconds:j(i.playtimeSeconds,"playtimeSeconds"),gameState:fw(i.gameState),level:iw(i.level),rng:aw(i.rng),entities:dw(i.entities),cvars:lw(i.cvars),configstrings:hw(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?j(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=pw(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var T2=new Set(Si.filter(e=>e.save).map(e=>e.name));var Ls=globalThis.TextEncoder;function pt(e){return Hc({...e},{allowNewerVersion:!0})}function gw(e){return Ls?new Ls().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var vw=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:pt(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:pt(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:pt(e.save)}))}},_w=class{constructor(e,t,n){this.indexedDB=e,this.dbName=t,this.storeName=n,this.db=null}async init(){this.db||(this.db=await new Promise((e,t)=>{let n=this.indexedDB.open(this.dbName,1);n.onupgradeneeded=()=>{n.result.createObjectStore(this.storeName,{keyPath:"id"})},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB")),n.onsuccess=()=>e(n.result)}))}async runTransaction(e,t){await this.init();let n=this.db;return new Promise((r,i)=>{let s=n.transaction(this.storeName,e).objectStore(this.storeName),o=t(s);o.onsuccess=()=>r(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",n=>n.get(e));return t?{id:t.id,metadata:{...t.metadata},save:pt(t.save)}:null}async delete(e){return await this.get(e)?(await this.runTransaction("readwrite",n=>n.delete(e)),!0):!1}async list(){return(await this.runTransaction("readonly",t=>t.getAll())).map(t=>({id:t.id,metadata:{...t.metadata},save:pt(t.save)}))}},_a=class Ft{constructor(t={}){let{dbName:n=Ft.DEFAULT_DB_NAME,storeName:r=Ft.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new _w(i,n,r):this.adapter=new vw}async save(t,n,r={}){let i=pt(n),a={id:t,name:r.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:gw(i)};return await this.adapter.init(),await this.adapter.put({id:t,metadata:a,save:i}),a}async load(t,n={}){await this.adapter.init();let r=await this.adapter.get(t);if(!r)throw new Error(`Save slot ${t} not found`);return Hc(r.save,n)}async delete(t){return await this.adapter.init(),this.adapter.delete(t)}async list(){return await this.adapter.init(),(await this.adapter.list()).map(n=>({...n.metadata})).sort((n,r)=>r.timestamp-n.timestamp||n.id.localeCompare(r.id))}async quickSave(t){return this.save(Ft.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(Ft.QUICK_SLOT,t)}};_a.DEFAULT_DB_NAME="quake2ts-saves";_a.DEFAULT_STORE="saves";_a.QUICK_SLOT="quicksave";var I2=_i();var Wc=(e,t)=>{let n=e/640,r=t/480,i=Math.min(n,r);return{HEALTH_X:100*i,HEALTH_Y:t-30*i,ARMOR_X:200*i,ARMOR_Y:t-30*i,AMMO_X:e-100*i,AMMO_Y:t-30*i,CENTER_PRINT_X:e/2,CENTER_PRINT_Y:100*i,WEAPON_ICON_X:10*i,WEAPON_ICON_Y:t-30*i,POWERUP_X:e-30*i,POWERUP_Y:t-30*i,scale:i}};var en=(e,t,n,r,i,a,s)=>{let o=Math.abs(r).toString();for(let c=0;c<o.length;c++){let u=parseInt(o[c]),m=i[u];m&&e.drawPic(t+c*a,n,m,s)}};var $e=new Map,yw=["w_blaster","w_shotgun","w_sshotgun","w_machinegun","w_chaingun","w_glauncher","w_rlauncher","w_hyperblaster","w_railgun","w_bfg","w_grapple","a_grenades","a_bullets","a_cells","a_rockets","a_shells","a_slugs","p_quad","p_invulnerability","p_silencer","p_rebreather","p_envirosuit","p_adrenaline","p_megahealth","i_jacketarmor","i_combatarmor","i_bodyarmor","i_powerscreen","i_powershield","k_datacd","k_powercube","k_pyramid","k_dataspin","k_security","k_bluekey","k_redkey"],Kc=async(e,t)=>{for(let n of yw)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);$e.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}};var tn=new Map,xw=["d_left","d_right","d_up","d_down"],Xc=async(e,t)=>{for(let n of xw)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);tn.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}},$c=(e,t)=>{if(!t.damageIndicators)return;let n=e.width,r=e.height,{forward:i,right:a,up:s}=Nt(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:u}=o,m={...c},d=Math.sqrt(m.x*m.x+m.y*m.y+m.z*m.z);d>0&&(m.x/=d,m.y/=d,m.z/=d);let h=Oe(m,a),f=Oe(m,i),p=Math.atan2(f,h)*180/Math.PI,v,l=0,_=0;p>-45&&p<=45?(v=tn.get("d_right"),l=n-(v?.width||0),_=(r-(v?.height||0))/2):p>45&&p<=135?(v=tn.get("d_up"),l=(n-(v?.width||0))/2,_=0):p>135||p<=-135?(v=tn.get("d_left"),l=0,_=(r-(v?.height||0))/2):(v=tn.get("d_down"),l=(n-(v?.width||0))/2,_=r-(v?.height||0)),v&&e.drawPic(l,_,v)}};var Yc=(e,t)=>{let n=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],r=10;for(let i of n)e.drawString(10,r,i),r+=10};var jc=(e,t)=>{if(!t.blend)return;let[n,r,i,a]=t.blend;a>0&&e.drawfillRect(0,0,e.width,e.height,[n,r,i,a])};var qc=(e,t)=>{if(!t.pickupIcon)return;let n=$e.get(t.pickupIcon);if(n){let r=e.width-n.width-10,i=e.height-n.height-10;e.drawPic(r,i,n)}};var ww=!1;var Zc=(e,t,n,r,i,a,s,o,c)=>{let u;n<=25&&(ww?u=[.2,.6,1,1]:u=[1,0,0,1]),a.length>0&&(en(e,c.HEALTH_X,c.HEALTH_Y,n,a,s,u),en(e,c.ARMOR_X,c.ARMOR_Y,r,a,s),en(e,c.AMMO_X,c.AMMO_Y,i,a,s));let m=t.inventory.armor;if(m&&m.armorCount>0){let v=`i_${m.armorType}armor`,l=$e.get(v);l&&e.drawPic(c.ARMOR_X-24,c.ARMOR_Y-2,l)}let d=t.inventory.currentWeapon;if(d){let v=Object.values(Gs).find(l=>l.weaponId===d);if(v){let l=`w_${v.id.substring(7)}`,_=$e.get(l);_&&e.drawPic(c.WEAPON_ICON_X,c.WEAPON_ICON_Y,_)}}let h=Array.from(t.inventory.keys).sort(),f=c.WEAPON_ICON_Y-150*c.scale;for(let v of h){let l="";switch(v){case"blue":l="k_bluekey";break;case"red":l="k_redkey";break;case"green":l="k_security";break;case"yellow":l="k_pyramid";break}if(l){let _=$e.get(l);_&&(e.drawPic(c.WEAPON_ICON_X,f,_),f+=_.height+2)}}let p=c.POWERUP_X;for(let[v,l]of t.inventory.powerups.entries())if(l&&l>o){let _=`p_${v}`,x=$e.get(_);if(x){e.drawPic(p,c.POWERUP_Y,x);let w=Math.ceil((l-o)/1e3);en(e,p+x.width+2,c.POWERUP_Y,w,a,s),p-=x.width+s*w.toString().length+8}}};var ar=[],Jc=0,Qc=async(e,t)=>{for(let n=0;n<10;n++)try{let r=await t.loadTexture(`pics/hud/num_${n}.pcx`),i=e.registerTexture(`hud_num_${n}`,r);ar.push(i)}catch(r){console.error(`Failed to load HUD image: pics/hud/num_${n}.pcx`,r)}ar.length>0&&(Jc=ar[0].width),await vs(e,t),await Kc(e,t),await Xc(e,t)},eu=(e,t,n,r,i,a,s,o,c,u)=>{e.begin2D(),jc(e,t),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]);let m=Wc(e.width,e.height);Zc(e,n,r,i,a,ar,Jc,u,m),qc(e,t),$c(e,t),Yc(e,s),o.drawCenterPrint(e,u,m),o.drawNotifications(e,u),c.drawSubtitles(e,u),t.centerPrint&&e.drawCenterString(e.height/2-20,t.centerPrint),t.notify&&e.drawString(8,8,t.notify),ys(e,e.width,e.height),e.end2D()};var Sw=3e3,Aw=5e3,kw=4,sr=class{constructor(){this.centerPrintMsg=null;this.notifyMessages=[]}addCenterPrint(t,n){this.centerPrintMsg={text:t,startTime:n,duration:Sw}}addNotify(t,n){this.notifyMessages.push({text:t,startTime:n,duration:Aw}),this.notifyMessages.length>kw&&this.notifyMessages.shift()}drawCenterPrint(t,n,r){if(!this.centerPrintMsg)return;if(n>this.centerPrintMsg.startTime+this.centerPrintMsg.duration){this.centerPrintMsg=null;return}let i=this.centerPrintMsg.text.length*8,a=r.CENTER_PRINT_Y;t.drawCenterString(a,this.centerPrintMsg.text)}drawNotifications(t,n){for(;this.notifyMessages.length>0&&n>this.notifyMessages[0].startTime+this.notifyMessages[0].duration;)this.notifyMessages.shift();let r=10;for(let i of this.notifyMessages)t.drawString(10,r,i.text),r+=10}};var Ew=3e3,or=class{constructor(){this.subtitle=null}addSubtitle(t,n){this.subtitle={text:t,startTime:n,duration:Ew}}drawSubtitles(t,n){if(!this.subtitle)return;if(n>this.subtitle.startTime+this.subtitle.duration){this.subtitle=null;return}let r=t.height-40;t.drawCenterString(r,this.subtitle.text)}};var ya=[{type:"null"},{type:"armor",id:yt.BODY},{type:"armor",id:yt.COMBAT},{type:"armor",id:yt.JACKET},{type:"armor",id:yt.JACKET},{type:"item",id:"item_power_screen"},{type:"item",id:"item_power_shield"},{type:"weapon",id:te.Grapple},{type:"weapon",id:te.Blaster},{type:"weapon",id:te.ChainFist},{type:"weapon",id:te.Shotgun},{type:"weapon",id:te.SuperShotgun},{type:"weapon",id:te.Machinegun},{type:"weapon",id:te.EtfRifle},{type:"weapon",id:te.Chaingun},{type:"ammo",id:me.Grenades},{type:"ammo",id:me.Trap},{type:"ammo",id:me.Tesla},{type:"weapon",id:te.GrenadeLauncher},{type:"weapon",id:te.ProxLauncher},{type:"weapon",id:te.RocketLauncher},{type:"weapon",id:te.HyperBlaster},{type:"weapon",id:te.IonRipper},{type:"weapon",id:te.PlasmaBeam},{type:"weapon",id:te.Railgun},{type:"weapon",id:te.Phalanx},{type:"weapon",id:te.BFG10K},{type:"weapon",id:te.Disruptor},{type:"ammo",id:me.Shells},{type:"ammo",id:me.Bullets},{type:"ammo",id:me.Cells},{type:"ammo",id:me.Rockets},{type:"ammo",id:me.Slugs},{type:"ammo",id:me.MagSlugs},{type:"ammo",id:me.Flechettes},{type:"ammo",id:me.Prox},{type:"ammo",id:me.Nuke},{type:"ammo",id:me.Rounds},{type:"powerup",id:Y.QuadDamage},{type:"powerup",id:Y.QuadFire},{type:"powerup",id:Y.Invulnerability},{type:"powerup",id:Y.Invisibility},{type:"powerup",id:Y.Silencer},{type:"powerup",id:Y.Rebreather},{type:"powerup",id:Y.EnviroSuit},{type:"health",id:"ancient_head"},{type:"health",id:"legacy_head"},{type:"health",id:"adrenaline"},{type:"powerup",id:Y.Bandolier},{type:"powerup",id:Y.AmmoPack},{type:"powerup",id:Y.IRGoggles},{type:"powerup",id:Y.DoubleDamage},{type:"powerup",id:Y.SphereVengeance},{type:"powerup",id:Y.SphereHunter},{type:"powerup",id:Y.SphereDefender},{type:"powerup",id:Y.Doppelganger},{type:"powerup",id:Y.TagToken},{type:"key",id:ie.DataCD},{type:"key",id:ie.PowerCube},{type:"key",id:ie.ExplosiveCharges},{type:"key",id:ie.Yellow},{type:"key",id:ie.PowerCore},{type:"key",id:ie.Pyramid},{type:"key",id:ie.DataSpinner},{type:"key",id:ie.Pass},{type:"key",id:ie.Blue},{type:"key",id:ie.Red},{type:"key",id:ie.Green},{type:"key",id:ie.CommanderHead},{type:"key",id:ie.Airstrike},{type:"key",id:ie.NukeContainer},{type:"key",id:ie.Nuke},{type:"health",id:"health_small"},{type:"health",id:"health_medium"},{type:"health",id:"health_large"},{type:"health",id:"health_mega"},{type:"key",id:ie.RedFlag},{type:"key",id:ie.BlueFlag},{type:"powerup",id:Y.TechResistance},{type:"powerup",id:Y.TechStrength},{type:"powerup",id:Y.TechHaste},{type:"powerup",id:Y.TechRegeneration},{type:"powerup",id:Y.Flashlight},{type:"powerup",id:Y.Compass}];var bw=2048,cr=class{constructor(t,n){this.configstrings=new Array(bw).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=n}setImports(t){this.imports=t}setCallbacks(t){this.callbacks=t}onServerData(t,n,r,i,a,s){console.log(`Demo: Server Data - Protocol: ${t}, Level: ${s}`),this.configstrings.fill(""),this.entities.clear(),this.baselines.clear(),this.latestFrame=null}onConfigString(t,n){this.configstrings[t]=n}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 n=t.packetEntities,r=new Map;if(n.delta)for(let[i,a]of this.entities)r.set(i,structuredClone(a));for(let i of n.entities){if(i.bits&Ya){r.delete(i.number);continue}let a=i.number,s;n.delta&&this.entities.has(a)?s=this.entities.get(a):this.baselines.has(a)?s=this.baselines.get(a):s=et();let o=structuredClone(s);this.applyDelta(o,i),r.set(a,o)}this.entities=r}applyDelta(t,n){let r=n.bits;t.number=n.number,r&Dr&&(t.modelindex=n.modelindex),r&Br&&(t.modelindex2=n.modelindex2),r&Gr&&(t.modelindex3=n.modelindex3),r&Vr&&(t.modelindex4=n.modelindex4),r&Ir&&(t.frame=n.frame),r&Ur&&(t.frame=n.frame),(r&mn||r&hn)&&(t.skinnum=n.skinnum),(r&un||r&ln)&&(t.effects=n.effects),(r&cn||r&dn)&&(t.renderfx=n.renderfx),r&Lr&&(t.origin.x=n.origin.x),r&Nr&&(t.origin.y=n.origin.y),r&Cr&&(t.origin.z=n.origin.z),r&Fr&&(t.angles.x=n.angles.x),r&Or&&(t.angles.y=n.angles.y),r&Tr&&(t.angles.z=n.angles.z),r&Hr&&(t.old_origin.x=n.old_origin.x,t.old_origin.y=n.old_origin.y,t.old_origin.z=n.old_origin.z),r&Wr&&(t.sound=n.sound),r&Pr&&(t.event=n.event),r&Kr&&(t.solid=n.solid)}onCenterPrint(t){this.callbacks?.onCenterPrint?this.callbacks.onCenterPrint(t):console.log(`[Center]: ${t}`)}onStuffText(t){}onPrint(t,n){this.callbacks?.onPrint?this.callbacks.onPrint(t,n):console.log(`[Print ${t}]: ${n}`)}onSound(t,n,r,i,a,s,o){if(!this.imports?.engine.audio)return;let c=r??1,u=i??1,m=a??0;s&&s>0?this.imports.engine.audio.sound(s,0,n,c,u,m):o&&this.imports.engine.audio.positioned_sound(o,n,c,u)}onTempEntity(t,n,r,i,a,s,o,c,u){}onLayout(t){}onInventory(t){this.inventory=[...t]}onMuzzleFlash(t,n){}onMuzzleFlash2(t,n){}onDisconnect(){console.log("Demo disconnected")}onReconnect(){console.log("Demo reconnect")}onDownload(t,n,r){}convertFrameToPredictionState(t){let n=t.playerState,r={ammo:{caps:[],counts:[]},ownedWeapons:new Set,armor:null,powerups:new Map,keys:new Set,items:new Set};for(let c=0;c<this.inventory.length;c++){let u=this.inventory[c];if(u<=0)continue;if(c>=ya.length)break;let m=ya[c];switch(m.type){case"weapon":r.ownedWeapons.add(m.id);break;case"ammo":r.ammo.counts[m.id]||(r.ammo.counts[m.id]=0),r.ammo.counts[m.id]=u;break;case"armor":r.armor={armorType:m.id,armorCount:u};break;case"powerup":r.powerups.set(m.id,u);break;case"key":r.keys.add(m.id);break;case"health":break;case"item":r.items.add(m.id);break}}let i={...n.origin},a={...n.velocity},s={...n.viewangles},o={...n.delta_angles};return{origin:i,velocity:a,viewangles:s,pmFlags:n.pm_flags,pmType:n.pm_type,waterlevel:je.None,gravity:n.gravity,deltaAngles:o,client:{inventory:r,weaponStates:{states:new Map}},health:n.stats[1],armor:n.stats[4],ammo:n.stats[2],blend:[0,0,0,0],damageAlpha:0,damageIndicators:[]}}getPredictionState(t){if(!this.latestFrame)return Ie();let n=this.convertFrameToPredictionState(this.latestFrame);if(this.previousFrame&&t!==void 0){let r=this.latestFrame.serverFrame*100,i=this.previousFrame.serverFrame*100;if(t>=i&&t<=r){let a=(t-i)/(r-i),s=this.convertFrameToPredictionState(this.previousFrame);return at(s,n,Math.max(0,Math.min(1,a)))}}return n}};var bt=class{constructor(){this.strings=new Map;this.models=[];this.sounds=[];this.images=[]}set(t,n){if(this.strings.set(t,n),t>=re.Models&&t<re.Models+Tt){let r=t-re.Models;this.models[r]=n}else if(t>=re.Sounds&&t<re.Sounds+It){let r=t-re.Sounds;this.sounds[r]=n}else if(t>=re.Images&&t<re.Images+Pt){let r=t-re.Images;this.images[r]=n}}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 ur=class{constructor(t,n,r){this.menuSystem=t;this.saveLoadFactory=n;this.options=r}createMainMenu(){let t=[{label:"New Game",action:()=>{this.menuSystem.pushMenu(this.createDifficultyMenu())}},{label:"Load Game",action:()=>{this.saveLoadFactory.createLoadMenu().then(n=>{this.menuSystem.pushMenu(n)})}}];return this.options.showSaveOption!==!1&&t.push({label:"Save Game",action:()=>{this.saveLoadFactory.createSaveMenu().then(n=>{this.menuSystem.pushMenu(n)})}}),t.push({label:"Options",action:()=>{this.menuSystem.pushMenu(this.options.optionsFactory.createOptionsMenu())}},{label:"Quit",action:()=>{this.options.onQuit()}}),{title:"Main Menu",items:t}}createDifficultyMenu(){return{title:"Select Difficulty",items:[{label:"Easy",action:()=>this.startNewGame(0)},{label:"Medium",action:()=>this.startNewGame(1)},{label:"Hard",action:()=>this.startNewGame(2)},{label:"Map Select...",action:()=>{this.menuSystem.pushMenu(this.options.mapsFactory.createMapsMenu())}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}startNewGame(t){this.options.onSetDifficulty&&this.options.onSetDifficulty(t),this.options.onNewGame()}};var mr=class{constructor(t,n,r,i,a){this.menuSystem=t;this.storage=n;this.onSave=r;this.onLoad=i;this.onDelete=a}async createSaveMenu(){let t=await this.storage.list(),n=[];return n.push({label:"New Save...",action:()=>{this.menuSystem.pushMenu(this.createNewSaveInputMenu())}}),t.forEach(r=>{n.push({label:`${r.name} - ${r.map} (${tu(r.playtimeSeconds)})`,action:()=>{this.menuSystem.pushMenu(this.createConfirmOverwriteMenu(r))}})}),n.push({label:"Back",action:()=>this.menuSystem.popMenu()}),{title:"Save Game",items:n}}async createLoadMenu(){let t=await this.storage.list(),n=[];return t.forEach(r=>{n.push({label:`${r.name} - ${r.map} (${tu(r.playtimeSeconds)})`,action:()=>{this.menuSystem.pushMenu(this.createLoadActionMenu(r))}})}),t.length===0&&n.push({label:"No saves found",action:()=>{}}),n.push({label:"Back",action:()=>this.menuSystem.popMenu()}),{title:"Load Game",items:n}}createLoadActionMenu(t){return{title:`Slot: ${t.name}`,items:[{label:"Load Game",action:()=>{this.onLoad(t.id).then(()=>{this.menuSystem.closeAll()})}},{label:"Delete Save",action:()=>{this.menuSystem.pushMenu(this.createConfirmDeleteMenu(t))}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createConfirmDeleteMenu(t){return{title:`Delete ${t.name}?`,items:[{label:"Yes, Delete",action:()=>{this.onDelete(t.id).then(()=>{this.menuSystem.popMenu(),this.menuSystem.popMenu(),this.menuSystem.popMenu()})}},{label:"No, Cancel",action:()=>this.menuSystem.popMenu()}]}}createNewSaveInputMenu(){let t={name:`Save ${new Date().toLocaleString()}`};return{title:"Enter Save Name",items:[{label:"Name",type:"input",getValue:()=>t.name,onUpdate:n=>{t.name=n}},{label:"Save",action:()=>{this.onSave(t.name).then(()=>{this.menuSystem.closeAll()})}},{label:"Cancel",action:()=>this.menuSystem.popMenu()}]}}createConfirmOverwriteMenu(t){return{title:`Overwrite ${t.name}?`,items:[{label:"Yes, Overwrite",action:()=>{this.onSave(t.name).then(()=>{this.menuSystem.closeAll()})}},{label:"No, Cancel",action:()=>this.menuSystem.popMenu()}]}}};function tu(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return`${t}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}var dr=class{constructor(){this.activeMenu=null;this.selectedIndex=0;this.menuStack=[]}pushMenu(t){this.activeMenu&&(this.menuStack.push(this.activeMenu),t.parent||(t.parent=this.activeMenu)),this.activeMenu=t,this.selectedIndex=0}popMenu(){this.menuStack.length>0?(this.activeMenu=this.menuStack.pop(),this.selectedIndex=0):this.activeMenu=null}closeAll(){this.activeMenu=null,this.menuStack=[],this.selectedIndex=0}handleInput(t,n){if(!this.activeMenu)return!1;let r=this.activeMenu.items[this.selectedIndex];if(t==="up")return this.selectedIndex=(this.selectedIndex-1+this.activeMenu.items.length)%this.activeMenu.items.length,!0;if(t==="down")return this.selectedIndex=(this.selectedIndex+1)%this.activeMenu.items.length,!0;if(t==="select")return r.action&&r.action(),!0;if(t==="back")return this.popMenu(),!0;if(r.type==="input"&&r.onUpdate&&r.getValue){let i=r.getValue();if(t==="char"&&n){let a=(i||"")+n;r.onUpdate(a)}else if(t==="left"){let a=String(i||"");a.length>0&&r.onUpdate(a.slice(0,-1))}}return!0}isActive(){return this.activeMenu!==null}getState(){return{activeMenu:this.activeMenu,selectedIndex:this.selectedIndex}}};var nn=class{constructor(t,n){this.menuSystem=t;this.host=n}createOptionsMenu(){return{title:"Options",items:[{label:"Video Options",action:()=>{this.menuSystem.pushMenu(this.createVideoMenu())}},{label:"Audio Options",action:()=>{this.menuSystem.pushMenu(this.createAudioMenu())}},{label:"Controls",action:()=>{this.menuSystem.pushMenu(this.createControlsMenu())}},{label:"Gameplay",action:()=>{this.menuSystem.pushMenu(this.createGameplayMenu())}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createVideoMenu(){let t=this.host.cvars;return{title:"Video Options",items:[{label:"Field of View",type:"input",getValue:()=>t?.get("fov")?.string??"90",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("fov",n)}},{label:"Fullscreen",type:"toggle",getValue:()=>document.fullscreenElement?"On":"Off",onUpdate:()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(n=>{console.error(`Error attempting to enable fullscreen: ${n.message}`)})}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createAudioMenu(){let t=this.host.cvars;return{title:"Audio Options",items:[{label:"Master Volume",type:"input",getValue:()=>t?.get("s_volume")?.string??"0.7",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("s_volume",n)}},{label:"Music Volume",type:"input",getValue:()=>t?.get("ogg_volume")?.string??"0.7",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("ogg_volume",n)}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createControlsMenu(){let t=this.host.cvars;return{title:"Controls",items:[{label:"Sensitivity",type:"input",getValue:()=>t?.get("sensitivity")?.string??"3",onUpdate:n=>{let r=parseFloat(n);isNaN(r)||t?.setValue("sensitivity",n)}},{label:"Invert Mouse",type:"toggle",getValue:()=>t?.get("m_pitch")?.string.startsWith("-")?"Yes":"No",onUpdate:()=>{let n=parseFloat(t?.get("m_pitch")?.string??"0.022");t?.setValue("m_pitch",(-n).toString())}},{label:"Always Run",type:"toggle",getValue:()=>t?.get("cl_run")?.integer?"Yes":"No",onUpdate:()=>{let n=t?.get("cl_run")?.integer??1;t?.setValue("cl_run",n?"0":"1")}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}createGameplayMenu(){let t=this.host.cvars;return{title:"Gameplay Options",items:[{label:"Crosshair",type:"toggle",getValue:()=>t?.get("crosshair")?.integer?"On":"Off",onUpdate:()=>{let n=t?.get("crosshair")?.integer??1;t?.setValue("crosshair",n?"0":"1")}},{label:"Handedness",type:"toggle",getValue:()=>t?.get("hand")?.integer===1?"Left":t?.get("hand")?.integer===2?"Center":"Right",onUpdate:()=>{let r=((t?.get("hand")?.integer??0)+1)%3;t?.setValue("hand",r.toString())}},{label:"Back",action:()=>this.menuSystem.popMenu()}]}}};var lr=class{constructor(t,n,r){this.menuSystem=t;this.vfs=n;this.onStartMap=r}createMapsMenu(){let n=this.vfs.findByExtension(".bsp").map(r=>({label:r.path.replace(/^maps\//,"").replace(/\.bsp$/,""),action:()=>{this.onStartMap(r.path.replace(/^maps\//,"").replace(/\.bsp$/,"")),this.menuSystem.closeAll()}}));return n.length===0&&n.push({label:"No maps found",action:()=>{}}),n.push({label:"Back",action:()=>this.menuSystem.popMenu()}),{title:"Select Map",items:n}}};var hr=class{constructor(t,n,r){this.menuSystem=t;this.optionsFactory=n;this.host=r}createPauseMenu(){return{title:"Game Paused",items:[{label:"Resume Game",action:()=>{this.menuSystem.closeAll()}},{label:"Options",action:()=>{this.menuSystem.pushMenu(this.optionsFactory.createOptionsMenu())}},{label:"Restart Level",action:()=>{this.host?.commands.execute("restart"),this.menuSystem.closeAll()}},{label:"Quit to Main Menu",action:()=>{this.host?.commands.execute("disconnect"),this.menuSystem.closeAll()}}]}}};function nu(e,t,n,r){if(!t.activeMenu)return;let i=t.activeMenu,a=n/2,s=r/2,o=20,c=i.items.length*o+40,u=s-c/2;e.drawfillRect(0,0,n,r,[0,0,0,.7]),e.drawCenterString(u,i.title),i.items.forEach((m,d)=>{let h=u+40+d*o,f=m.label;if(m.type==="input"&&m.getValue){if(f+=`: ${m.getValue()}`,d===t.selectedIndex){let p=Date.now();Math.floor(p/500)%2===0&&(f+="_")}}else m.type==="toggle"&&m.getValue&&(f+=`: ${m.getValue()}`);if(d===t.selectedIndex){let _=f.replace(/\^[0-9]/g,"").length*8,x=(n-_)/2;e.drawString(x-16,h,"\r")}e.drawCenterString(h,f)})}var rn=class{constructor(t){this.storage=t}loadCvars(t){try{let n=this.storage.getItem("quake2ts_cvars");if(n){let r=JSON.parse(n);for(let[i,a]of Object.entries(r)){let s=t.get(i);s&&s.setValue(a)}}}catch(n){console.warn("Failed to load settings",n)}}saveCvars(t){let n={};for(let r of t)r.flags&Ot.Archive&&(n[r.name]=r.value);try{this.storage.setItem("quake2ts_cvars",JSON.stringify(n))}catch(r){console.warn("Failed to save settings",r)}}};var fr=class{getItem(t){try{return localStorage.getItem(t)}catch(n){return console.warn("localStorage not available",n),null}}setItem(t,n){try{localStorage.setItem(t,n)}catch(r){console.warn("Failed to write to localStorage",r)}}};var pr=class{constructor(){this.total=0;this.current=0;this.message="";this.active=!1}start(t,n="Loading..."){this.total=t,this.current=0,this.message=n,this.active=!0}update(t,n){this.current=t,n&&(this.message=n)}finish(){this.active=!1,this.current=this.total}render(t){if(!this.active)return;let n=t.width,r=t.height;t.drawfillRect(0,0,n,r,[.1,.1,.1,1]);let i=n*.6,a=20,s=(n-i)/2,o=r*.7;t.drawfillRect(s,o,i,a,[.3,.3,.3,1]);let c=this.total>0?this.current/this.total:0;t.drawfillRect(s,o,i*c,a,[.8,.5,.1,1]),t.drawCenterString(o-30,this.message);let u=Math.floor(c*100);t.drawCenterString(o+a+10,`${u}%`)}};var gr=class{constructor(){this.state={active:!1,title:"",message:""}}show(t,n){this.state={active:!0,title:t,message:n}}hide(){this.state.active=!1}render(t){if(!this.state.active)return;let n=t.width,r=t.height,i=n/2,a=r/2,s=400,o=200;t.drawfillRect(0,0,n,r,[0,0,0,.5]),t.drawfillRect(i-s/2,a-o/2,s,o,[.2,0,0,1]),t.drawCenterString(a-40,`^1${this.state.title}`),t.drawCenterString(a,this.state.message),t.drawCenterString(a+60,"Press ESC to close")}};var vr=class{constructor(){this.state={active:!1,type:"weapon",selectedIndex:-1}}open(t){this.state.active=!0,this.state.type=t}close(){this.state.active=!1}isOpen(){return this.state.active}handleInput(t,n){this.state.active}render(t,n,r,i){if(!this.state.active)return;let a=n/2,s=r/2;t.drawfillRect(a-100,s-100,200,200,[0,0,0,.5]),t.drawCenterString(s,`Select ${this.state.type}`)}};var Mw=[{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"}],Qe=class{constructor(t=Mw){this.bindings=new Map;for(let n of t)this.bind(n.code,n.command)}bind(t,n){this.bindings.set(t,n)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function ru(){return new Qe}function xa(e){return e}function an(e){return e.trim().toLowerCase()}var zw=250,wa=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,n){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=n,!0):!1)}release(t,n){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=n-this.downTime,this.downTime=0,!0):!1}sample(t,n){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let r=this.msec;this.activeCodes.size>0&&(r+=n-this.downTime,this.downTime=n),this.msec=0;let i=Math.min(r/t,1),a=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:a,fraction:i}}},_r=(_=>(_.Forward="+forward",_.Back="+back",_.MoveLeft="+moveleft",_.MoveRight="+moveright",_.MoveUp="+moveup",_.MoveDown="+movedown",_.Jump="+jump",_.Crouch="+crouch",_.Attack="+attack",_.Use="+use",_.Holster="+holster",_.TurnLeft="+left",_.TurnRight="+right",_.LookUp="+lookup",_.LookDown="+lookdown",_.SpeedModifier="+speed",_.Zoom="+zoom",_))(_r||{}),Rw={"+attack":ze.Attack,"+use":ze.Use,"+holster":ze.Holster,"+jump":ze.Jump,"+crouch":ze.Crouch},Lw=new Map(Object.values(_r).map(e=>[an(e),e]));function Nw(e){return Lw.get(an(e))}function sn(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var Mt=class{constructor(t={},n=new Qe){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=n,this.forwardSpeed=t.forwardSpeed??cs,this.sideSpeed=t.sideSpeed??us,this.upSpeed=t.upSpeed??ms,this.yawSpeed=t.yawSpeed??ds,this.pitchSpeed=t.pitchSpeed??ls,this.sensitivity=t.sensitivity??hs,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,n=sn()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!0,r,n)}handleKeyUp(t,n=sn()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!1,r,n)}handleMouseButtonDown(t,n=sn()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!0,r,n)}handleMouseButtonUp(t,n=sn()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!1,r,n)}handleMouseMove(t,n){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+n})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,n=sn(),r){this.pollGamepads(n),this.applyTouchState(n);let i=this.yawSpeed*t/1e3,a=this.pitchSpeed*t/1e3,s=this.sample("+left",t,n),o=this.sample("+right",t,n),c=this.sample("+lookup",t,n),m={x:(this.sample("+lookdown",t,n).fraction-c.fraction)*a,y:(o.fraction-s.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let P=this.gamepadLook.y*(this.invertGamepadY?-1:1);m={x:m.x+P*a*this.gamepadLookScale,y:m.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let P=this.touchLook.y*(this.invertMouseY?-1:1);m={x:m.x+P*a,y:m.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let P=this.sampleMouseDelta(),C=ps(P,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});m={x:m.x+C.x,y:m.y+C.y,z:0}}let d=fs(this.viewAngles,m);this.viewAngles=d;let h=this.sample("+forward",t,n),f=this.sample("+back",t,n),p=this.sample("+moveleft",t,n),v=this.sample("+moveright",t,n),l=this.sample("+moveup",t,n),_=this.sample("+movedown",t,n),x=this.sample("+speed",t,n),w=this.sample("+jump",t,n),A=this.sample("+crouch",t,n),k=this.runByDefault?x.active?.5:1:x.active?1:.5,g=this.forwardSpeed*(h.fraction-f.fraction)*k,y=this.sideSpeed*(v.fraction-p.fraction)*k,S=this.upSpeed*(l.fraction-_.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(g+=this.forwardSpeed*this.gamepadMove.y*k,y+=this.sideSpeed*this.gamepadMove.x*k),(this.touchMove.x!==0||this.touchMove.y!==0)&&(g+=this.forwardSpeed*this.touchMove.y*k,y+=this.sideSpeed*this.touchMove.x*k),this.jumpAddsUpMove&&w.fraction>0&&(S+=this.upSpeed*w.fraction),this.crouchAddsDownMove&&A.fraction>0&&(S-=this.upSpeed*A.fraction),g=this.clampMove(g,this.forwardSpeed),y=this.clampMove(y,this.sideSpeed),S=this.clampMove(S,this.upSpeed);let R=this.collectButtonBits(t,n),b=Math.min(Math.max(Math.round(t),1),zw);return(this.anyPressed||R!==ze.None)&&(R|=ze.Any),this.anyPressed=!1,{msec:b,buttons:R,angles:{...this.viewAngles},forwardmove:g,sidemove:y,upmove:S,serverFrame:r}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let n=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let r=new Set;for(let i of n){if(!i||i.connected===!1)continue;let a=i.index??0,s=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(s[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(s[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(s[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(s[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let u=o[c];if(!u)continue;let m=u.pressed||u.value>this.gamepadDeadZone,d=this.gamepadButtonCode(a,c);m&&r.add(d);let h=this.gamepadButtons.get(d)??!1;m!==h&&(this.applyCommand(this.bindings.getBinding(d),m,d,t),this.gamepadButtons.set(d,m))}}for(let[i,a]of this.gamepadButtons.entries())a&&!r.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let n=this.pendingTouchState;if(n&&(this.pendingTouchState=void 0,n.move&&(this.touchMove={x:this.clampAnalog(n.move.x),y:this.clampAnalog(n.move.y)}),n.look&&(this.touchLook={x:this.clampAnalog(n.look.x),y:this.clampAnalog(n.look.y)}),n.buttons))for(let[r,i]of Object.entries(n.buttons)){if(i===void 0)continue;let a=this.touchButtons.get(r)??!1;i!==a&&(this.applyCommand(r,i,this.touchButtonCode(r),t),this.touchButtons.set(r,i))}}applyCommand(t,n,r,i){if(!t)return;let a=Nw(t);if(a){let s=this.lookupButton(a);n?(s.press(r,i)&&this.commandQueue.push(a),this.anyPressed=!0):s.release(r,i)&&this.commandQueue.push(a.replace("+","-"))}else n&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let n={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,n}collectButtonBits(t,n){let r=ze.None;for(let[i,a]of Object.entries(Rw)){let s=this.sample(i,t,n);(s.fraction>0||s.active||s.wasPressed)&&(r|=a)}return r}lookupButton(t){let n=this.buttons.get(t);return n||(n=new wa,this.buttons.set(t,n)),n}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,n,r){return this.lookupButton(t).sample(n,r)}gamepadButtonCode(t,n){return`Gamepad${t}-Button${n}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,n){return Math.abs(n)>Math.abs(t)?n:t}clampMove(t,n){return Math.max(-n,Math.min(n,t))}};var yr=class{constructor(t,n=new Mt(t)){this.queued=[];this.controller=n}captureFrame(t,n,r){let i=this.controller.buildCommand(t,n,r),a=this.controller.consumeConsoleCommands(),s={command:i,console:a};return this.queued.push(s),s}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function xr(e,t,n){return e+(t-e)*n}function Sa(e,t,n){return xr(e,t,n)}function Ow(e,t,n,r,i){let a=[],s=i.engine.assets;if(!s)return a;let o=new Map(t.map(c=>[c.number,c]));for(let c of e){let u=o.get(c.number)??c,m=r.getModelName(c.modelIndex);if(!m)continue;let d=s.getMd2Model(m)||s.getMd3Model(m);if(!d)continue;let h={x:xr(u.origin.x,c.origin.x,n),y:xr(u.origin.y,c.origin.y,n),z:xr(u.origin.z,c.origin.z,n)},f={x:Sa(u.angles.x,c.angles.x,n),y:Sa(u.angles.y,c.angles.y,n),z:Sa(u.angles.z,c.angles.z,n)},p=c.frame,v=u.frame,l=X.create();X.translate(l,l,[h.x,h.y,h.z]),X.rotateZ(l,l,f.z*Math.PI/180),X.rotateY(l,l,f.y*Math.PI/180),X.rotateX(l,l,f.x*Math.PI/180),d.header.magic===844121161?a.push({type:"md2",model:d,blend:{frame0:v,frame1:p,lerp:n},transform:l,skin:c.skinNum>0?r.getImageName(c.skinNum):void 0}):d.header.magic===860898377&&a.push({type:"md3",model:d,blend:{frame0:v,frame1:p,lerp:n},transform:l})}return a}function Tw(e){let t=new it(e.engine.trace),n=new st,r=new sr,i=new or,a=new ja,s=new cr(e),o=new dr,c=new pr,u=new gr,m=new vr,d=new rn(new fr),h,f;s.onCenterPrint=g=>r.addCenterPrint(g,s.latestFrame?.serverFrame??0),s.onPrint=(g,y)=>r.addNotify(y,s.latestFrame?.serverFrame??0);let p=new bt;a.setHandler(s);let v,l,_,x,w=90,A=!1;if(e.host){f=new nn(o,e.host),h=new hr(o,f,e.host);let g=new Map;if(e.host.cvars){for(let y of e.host.cvars.list())g.set(y.name,{value:y.string,setValue:S=>e.host.cvars.setValue(y.name,S)});d.loadCvars(g)}}if(e.host?.commands&&(e.host.commands.register("playdemo",g=>{if(g.length<1){console.log("usage: playdemo <filename>");return}let y=g[0];console.log(`playdemo: ${y}`),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 g=_s();console.log(`Crosshair changed to index ${g}`)},"Cycle through available crosshairs"),e.host.commands.register("+zoom",()=>{A=!0},"Zoom in view"),e.host.commands.register("-zoom",()=>{A=!1},"Reset zoom"),e.host.commands.register("togglemenu",()=>{o.isActive()?o.closeAll():h&&o.pushMenu(h.createPauseMenu())},"Toggle the main/pause menu"),e.host.cvars)){e.host.cvars.register({name:"fov",defaultValue:"90",flags:Ot.Archive,onChange:y=>{let S=y.number;isNaN(S)||(w=Math.max(1,Math.min(179,S)))},description:"Field of view"});let g=e.host.cvars.get("fov");if(g){let y=g.number;isNaN(y)||(w=Math.max(1,Math.min(179,y)))}}return{loadingScreen:c,errorDialog:u,init(g){this.Init(g)},Init(g){v=g,g?.state&&t.setAuthoritative(g),e.engine.assets&&e.engine.renderer&&(c.start(100,"Loading assets..."),Qc(e.engine.renderer,e.engine.assets).then(()=>{c.finish()})),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0}),typeof document<"u"&&document.addEventListener("fullscreenchange",()=>{document.fullscreenElement&&(o.isActive()||document.body.requestPointerLock?.())})},predict(g){return o.isActive(),t.enqueueCommand(g)},handleInput(g,y){if(!o.isActive())return!1;if(!y)return!0;let S=g.toLowerCase();return S==="arrowup"||S==="w"?o.handleInput("up"):S==="arrowdown"||S==="s"?o.handleInput("down"):S==="arrowleft"||S==="a"?o.handleInput("left"):S==="arrowright"||S==="d"?o.handleInput("right"):S==="enter"||S===" "?o.handleInput("select"):S==="escape"?o.getState().activeMenu?.parent?o.handleInput("back"):!1:g.length===1?o.handleInput("char",g):g==="Backspace"?o.handleInput("left"):!0},toggleMenu(){if(o.isActive()){if(o.closeAll(),e.host?.cvars){let g=e.host.cvars.list().map(y=>({name:y.name,value:y.string,flags:y.flags}));d.saveCvars(g)}}else h&&o.pushMenu(h.createPauseMenu())},createMainMenu(g,y,S,R,b){let P=new mr(o,y,S,R,b),C=f;if(!C){if(!e.host)throw new Error("Cannot create Main Menu: EngineHost is missing");C=new nn(o,e.host)}let G=e.engine.assets,F={findByExtension:pe=>G?G.listFiles(pe):[]},de=new lr(o,F,pe=>{console.log(`Starting map: ${pe}`),e.host?.commands.execute(`map ${pe}`)}),Ye=new ur(o,P,{...g,optionsFactory:C,mapsFactory:de,onSetDifficulty:pe=>{e.host?.cvars&&e.host.cvars.setValue("skill",pe.toString())}});return{menuSystem:o,factory:Ye}},render(g){let y=a.getState(),S=[];y===Rt.Playing?l=s.getPredictionState():(g.latest?.state&&(t.setAuthoritative(g.latest),v=g.latest),g.previous?.state&&g.latest?.state?(l=at(g.previous.state,g.latest.state,g.alpha),g.latest.state.packetEntities&&g.previous.state.packetEntities&&(S=Ow(g.latest.state.packetEntities,g.previous.state.packetEntities,g.alpha,p,e))):l=g.latest?.state??g.previous?.state??t.getPredictedState());let R=g.latest&&g.previous?Math.max(0,g.latest.timeMs-g.previous.timeMs):0;_=n.sample(l,R);let b={};if(l){let{origin:P,viewangles:C}=l;x=new $a,x.position=$.fromValues(P.x,P.y,P.z);let G=_?.offset??{x:0,y:0,z:0};$.add(x.position,x.position,[G.x,G.y,G.z]);let F=_?.angles??{x:0,y:0,z:0};x.angles=$.fromValues(C.x+F.x,C.y+F.y,C.z+F.z),x.fov=A?40:w,x.aspect=4/3,e.engine.renderer&&(x.aspect=e.engine.renderer.width/e.engine.renderer.height)}if(e.engine.renderer&&x){let P;if(e.engine.assets){let C=p.getModelName(1);if(C){let G=e.engine.assets.getMap(C)}}e.engine.renderer.renderFrame({camera:x,world:P,dlights:[]},S)}if(e.engine.renderer&&l&&l.client){let P=e.engine.renderer.stats?{...e.engine.renderer.stats,batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0}:{batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},C=g.latest?.timeMs??0;this.DrawHUD(P,C)}return b},DrawHUD(g,y){if(e.engine.renderer){if(l&&l.client){let S={origin:l.origin,velocity:l.velocity,viewAngles:l.viewangles,onGround:Me(l.pmFlags,ve.OnGround),waterLevel:l.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:l.damageAlpha??0,damageIndicators:l.damageIndicators??[],blend:l.blend??[0,0,0,0],pickupIcon:l.pickupIcon,centerPrint:r.centerPrintMsg?.text,notify:void 0},R=a.getState(),b=R===Rt.Playing||R===Rt.Paused?(s.latestFrame?.serverFrame||0)*100:y;eu(e.engine.renderer,S,l.client,l.health,l.armor,l.ammo,g,r,i,b)}o.isActive()&&nu(e.engine.renderer,o.getState(),e.engine.renderer.width,e.engine.renderer.height),l&&l.client&&m.render(e.engine.renderer,e.engine.renderer.width,e.engine.renderer.height,l.client),u.render(e.engine.renderer),c.render(e.engine.renderer)}},shutdown(){this.Shutdown()},Shutdown(){if(v=void 0,l=void 0,e.host?.cvars){let g=e.host.cvars.list().map(y=>({name:y.name,value:y.string,flags:y.flags}));d.saveCvars(g)}},get prediction(){return t},get lastRendered(){return l},get view(){return n},get lastView(){return _},get camera(){return x},demoPlayback:a,ParseCenterPrint(g){let y=v?.timeMs??0;r.addCenterPrint(g,y)},ParseNotify(g){let y=v?.timeMs??0;r.addNotify(g,y)},showSubtitle(g,y){let S=v?.timeMs??0;i.addSubtitle(g,S)},ParseConfigString(g,y){if(p.set(g,y),e.engine.assets){let S=e.engine.assets;if(g>=re.Models&&g<re.Models+Tt){let R=y.split(".").pop()?.toLowerCase();R==="md2"?S.loadMd2Model(y).catch(b=>console.warn(`Failed to precache MD2 ${y}`,b)):R==="sp2"?S.loadSprite(y).catch(b=>console.warn(`Failed to precache Sprite ${y}`,b)):R==="md3"&&S.loadMd3Model(y).catch(b=>console.warn(`Failed to precache MD3 ${y}`,b))}else g>=re.Sounds&&g<re.Sounds+It?S.loadSound(y).catch(R=>console.warn(`Failed to precache sound ${y}`,R)):g>=re.Images&&g<re.Images+Pt&&S.loadTexture(y).then(R=>{e.engine.renderer&&e.engine.renderer.registerTexture(y,R)}).catch(R=>console.warn(`Failed to precache image ${y}`,R))}},demoHandler:s,configStrings:p}}return cu(Iw);})();
142
142
  //# sourceMappingURL=index.global.js.map