quake2ts 0.0.201 → 0.0.203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/cgame/dist/index.cjs +1 -1
- package/packages/cgame/dist/index.cjs.map +1 -1
- package/packages/cgame/dist/index.js +2 -2
- package/packages/cgame/dist/index.js.map +1 -1
- package/packages/client/dist/browser/index.global.js +11 -11
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +28 -14
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +28 -14
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +10 -10
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +14 -7
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +14 -7
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/browser/index.global.js +2 -2
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +233 -55
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +233 -55
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/playerStats.d.ts.map +1 -1
- package/packages/server/dist/index.cjs +131 -2
- package/packages/server/dist/index.js +131 -2
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +197 -52
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +191 -52
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/items/ammo.d.ts +8 -7
- package/packages/shared/dist/types/items/ammo.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/stats.d.ts +41 -8
- package/packages/shared/dist/types/protocol/stats.d.ts.map +1 -1
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var Quake2Client=(()=>{var Cr=Object.defineProperty;var Ku=Object.getOwnPropertyDescriptor;var Xu=Object.getOwnPropertyNames;var $u=Object.prototype.hasOwnProperty;var Dr=(e,t)=>{for(var n in t)Cr(e,n,{get:t[n],enumerable:!0})},Yu=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Xu(t))!$u.call(e,i)&&i!==n&&Cr(e,i,{get:()=>t[i],enumerable:!(r=Ku(t,i))||r.enumerable});return e};var ju=e=>Yu(Cr({},"__esModule",{value:!0}),e);var JA={};Dr(JA,{ClientConfigStrings:()=>It,ClientPrediction:()=>Fn,InputAction:()=>Or,InputBindings:()=>ut,InputCommandBuffer:()=>Ir,InputController:()=>Pt,ViewEffects:()=>Dn,createClient:()=>ZA,createDefaultBindings:()=>Vu,interpolatePredictionState:()=>pt,normalizeCommand:()=>pn,normalizeInputCode:()=>Va});var Y=1e-6,Se=typeof Float32Array<"u"?Float32Array:Array,Fr=Math.random;function yn(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var eE=Math.PI/180,tE=180/Math.PI;var j={};Dr(j,{add:()=>Im,adjoint:()=>rm,clone:()=>Zu,copy:()=>Ju,create:()=>qu,decompose:()=>wm,determinant:()=>im,equals:()=>Fm,exactEquals:()=>Dm,frob:()=>Om,fromQuat:()=>Am,fromQuat2:()=>_m,fromRotation:()=>hm,fromRotationTranslation:()=>qa,fromRotationTranslationScale:()=>xm,fromRotationTranslationScaleOrigin:()=>Sm,fromScaling:()=>lm,fromTranslation:()=>dm,fromValues:()=>Qu,fromXRotation:()=>fm,fromYRotation:()=>gm,fromZRotation:()=>pm,frustum:()=>Em,getRotation:()=>ym,getScaling:()=>Za,getTranslation:()=>vm,identity:()=>Ya,invert:()=>nm,lookAt:()=>zm,mul:()=>Um,multiply:()=>ja,multiplyScalar:()=>Pm,multiplyScalarAndAdd:()=>Cm,ortho:()=>Rm,orthoNO:()=>Qa,orthoZO:()=>Tm,perspective:()=>km,perspectiveFromFieldOfView:()=>bm,perspectiveNO:()=>Ja,perspectiveZO:()=>Mm,rotate:()=>om,rotateX:()=>cm,rotateY:()=>um,rotateZ:()=>mm,scale:()=>sm,set:()=>em,str:()=>Nm,sub:()=>Bm,subtract:()=>es,targetTo:()=>Lm,translate:()=>am,transpose:()=>tm});function qu(){var e=new Se(16);return Se!=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 Zu(e){var t=new Se(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 Ju(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 Qu(e,t,n,r,i,a,s,o,c,u,m,d,h,f,g,p){var l=new Se(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]=g,l[15]=p,l}function em(e,t,n,r,i,a,s,o,c,u,m,d,h,f,g,p,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]=g,e[14]=p,e[15]=l,e}function Ya(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 tm(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 nm(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],g=t[12],p=t[13],l=t[14],v=t[15],x=n*o-r*s,S=n*c-i*s,A=n*u-a*s,E=r*c-i*o,w=r*u-a*o,O=i*u-a*c,I=m*p-d*g,V=m*l-h*g,_=m*v-f*g,y=d*l-h*p,M=d*v-f*p,F=h*v-f*l,P=x*F-S*M+A*y+E*_-w*V+O*I;return P?(P=1/P,e[0]=(o*F-c*M+u*y)*P,e[1]=(i*M-r*F-a*y)*P,e[2]=(p*O-l*w+v*E)*P,e[3]=(h*w-d*O-f*E)*P,e[4]=(c*_-s*F-u*V)*P,e[5]=(n*F-i*_+a*V)*P,e[6]=(l*A-g*O-v*S)*P,e[7]=(m*O-h*A+f*S)*P,e[8]=(s*M-o*_+u*I)*P,e[9]=(r*_-n*M-a*I)*P,e[10]=(g*w-p*A+v*x)*P,e[11]=(d*A-m*w-f*x)*P,e[12]=(o*V-s*y-c*I)*P,e[13]=(n*y-r*V+i*I)*P,e[14]=(p*S-g*E-l*x)*P,e[15]=(m*E-d*S+h*x)*P,e):null}function rm(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],g=t[12],p=t[13],l=t[14],v=t[15],x=n*o-r*s,S=n*c-i*s,A=n*u-a*s,E=r*c-i*o,w=r*u-a*o,O=i*u-a*c,I=m*p-d*g,V=m*l-h*g,_=m*v-f*g,y=d*l-h*p,M=d*v-f*p,F=h*v-f*l;return e[0]=o*F-c*M+u*y,e[1]=i*M-r*F-a*y,e[2]=p*O-l*w+v*E,e[3]=h*w-d*O-f*E,e[4]=c*_-s*F-u*V,e[5]=n*F-i*_+a*V,e[6]=l*A-g*O-v*S,e[7]=m*O-h*A+f*S,e[8]=s*M-o*_+u*I,e[9]=r*_-n*M-a*I,e[10]=g*w-p*A+v*x,e[11]=d*A-m*w-f*x,e[12]=o*V-s*y-c*I,e[13]=n*y-r*V+i*I,e[14]=p*S-g*E-l*x,e[15]=m*E-d*S+h*x,e}function im(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],g=e[13],p=e[14],l=e[15],v=t*s-n*a,x=t*o-r*a,S=n*o-r*s,A=u*g-m*f,E=u*p-d*f,w=m*p-d*g,O=t*w-n*E+r*A,I=a*w-s*E+o*A,V=u*S-m*x+d*v,_=f*S-g*x+p*v;return c*O-i*I+l*V-h*_}function ja(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],g=t[11],p=t[12],l=t[13],v=t[14],x=t[15],S=n[0],A=n[1],E=n[2],w=n[3];return e[0]=S*r+A*o+E*d+w*p,e[1]=S*i+A*c+E*h+w*l,e[2]=S*a+A*u+E*f+w*v,e[3]=S*s+A*m+E*g+w*x,S=n[4],A=n[5],E=n[6],w=n[7],e[4]=S*r+A*o+E*d+w*p,e[5]=S*i+A*c+E*h+w*l,e[6]=S*a+A*u+E*f+w*v,e[7]=S*s+A*m+E*g+w*x,S=n[8],A=n[9],E=n[10],w=n[11],e[8]=S*r+A*o+E*d+w*p,e[9]=S*i+A*c+E*h+w*l,e[10]=S*a+A*u+E*f+w*v,e[11]=S*s+A*m+E*g+w*x,S=n[12],A=n[13],E=n[14],w=n[15],e[12]=S*r+A*o+E*d+w*p,e[13]=S*i+A*c+E*h+w*l,e[14]=S*a+A*u+E*f+w*v,e[15]=S*s+A*m+E*g+w*x,e}function am(e,t,n){var r=n[0],i=n[1],a=n[2],s,o,c,u,m,d,h,f,g,p,l,v;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],g=t[8],p=t[9],l=t[10],v=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]=g,e[9]=p,e[10]=l,e[11]=v,e[12]=s*r+m*i+g*a+t[12],e[13]=o*r+d*i+p*a+t[13],e[14]=c*r+h*i+l*a+t[14],e[15]=u*r+f*i+v*a+t[15]),e}function sm(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 om(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,g,p,l,v,x,S,A,E,w,O,I,V,_,y,M,F,P,ee;return o<Y?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],g=t[3],p=t[4],l=t[5],v=t[6],x=t[7],S=t[8],A=t[9],E=t[10],w=t[11],O=i*i*m+u,I=a*i*m+s*c,V=s*i*m-a*c,_=i*a*m-s*c,y=a*a*m+u,M=s*a*m+i*c,F=i*s*m+a*c,P=a*s*m-i*c,ee=s*s*m+u,e[0]=d*O+p*I+S*V,e[1]=h*O+l*I+A*V,e[2]=f*O+v*I+E*V,e[3]=g*O+x*I+w*V,e[4]=d*_+p*y+S*M,e[5]=h*_+l*y+A*M,e[6]=f*_+v*y+E*M,e[7]=g*_+x*y+w*M,e[8]=d*F+p*P+S*ee,e[9]=h*F+l*P+A*ee,e[10]=f*F+v*P+E*ee,e[11]=g*F+x*P+w*ee,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function cm(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 um(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 mm(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 dm(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 lm(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 hm(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<Y?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 fm(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 gm(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 pm(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 qa(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,g=i*u,p=a*u,l=s*o,v=s*c,x=s*u;return e[0]=1-(f+p),e[1]=d+x,e[2]=h-v,e[3]=0,e[4]=d-x,e[5]=1-(m+p),e[6]=g+l,e[7]=0,e[8]=h+v,e[9]=g-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 _m(e,t){var n=new Se(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),qa(e,t,n),e}function vm(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 ym(e,t){var n=new Se(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,g=t[10]*a,p=s+m+g,l=0;return p>0?(l=Math.sqrt(p+1)*2,e[3]=.25*l,e[0]=(d-f)/l,e[1]=(h-c)/l,e[2]=(o-u)/l):s>m&&s>g?(l=Math.sqrt(1+s-m-g)*2,e[3]=(d-f)/l,e[0]=.25*l,e[1]=(o+u)/l,e[2]=(h+c)/l):m>g?(l=Math.sqrt(1+m-s-g)*2,e[3]=(h-c)/l,e[0]=(o+u)/l,e[1]=.25*l,e[2]=(d+f)/l):(l=Math.sqrt(1+g-s-m)*2,e[3]=(o-u)/l,e[0]=(h+c)/l,e[1]=(d+f)/l,e[2]=.25*l),e}function wm(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],g=1/n[1],p=1/n[2],l=i*f,v=a*g,x=s*p,S=o*f,A=c*g,E=u*p,w=m*f,O=d*g,I=h*p,V=l+A+I,_=0;return V>0?(_=Math.sqrt(V+1)*2,e[3]=.25*_,e[0]=(E-O)/_,e[1]=(w-x)/_,e[2]=(v-S)/_):l>A&&l>I?(_=Math.sqrt(1+l-A-I)*2,e[3]=(E-O)/_,e[0]=.25*_,e[1]=(v+S)/_,e[2]=(w+x)/_):A>I?(_=Math.sqrt(1+A-l-I)*2,e[3]=(w-x)/_,e[0]=(v+S)/_,e[1]=.25*_,e[2]=(E+O)/_):(_=Math.sqrt(1+I-l-A)*2,e[3]=(v-S)/_,e[0]=(w+x)/_,e[1]=(E+O)/_,e[2]=.25*_),e}function xm(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,g=a*u,p=a*m,l=s*m,v=o*c,x=o*u,S=o*m,A=r[0],E=r[1],w=r[2];return e[0]=(1-(g+l))*A,e[1]=(h+S)*A,e[2]=(f-x)*A,e[3]=0,e[4]=(h-S)*E,e[5]=(1-(d+l))*E,e[6]=(p+v)*E,e[7]=0,e[8]=(f+x)*w,e[9]=(p-v)*w,e[10]=(1-(d+g))*w,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Sm(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,g=a*d,p=s*m,l=s*d,v=o*d,x=c*u,S=c*m,A=c*d,E=r[0],w=r[1],O=r[2],I=i[0],V=i[1],_=i[2],y=(1-(p+v))*E,M=(f+A)*E,F=(g-S)*E,P=(f-A)*w,ee=(1-(h+v))*w,ue=(l+x)*w,fe=(g+S)*O,We=(l-x)*O,vn=(1-(h+p))*O;return e[0]=y,e[1]=M,e[2]=F,e[3]=0,e[4]=P,e[5]=ee,e[6]=ue,e[7]=0,e[8]=fe,e[9]=We,e[10]=vn,e[11]=0,e[12]=n[0]+I-(y*I+P*V+fe*_),e[13]=n[1]+V-(M*I+ee*V+We*_),e[14]=n[2]+_-(F*I+ue*V+vn*_),e[15]=1,e}function Am(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,g=i*c,p=a*s,l=a*o,v=a*c;return e[0]=1-d-g,e[1]=m+v,e[2]=h-l,e[3]=0,e[4]=m-v,e[5]=1-u-g,e[6]=f+p,e[7]=0,e[8]=h+l,e[9]=f-p,e[10]=1-u-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Em(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 Ja(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 km=Ja;function Mm(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 bm(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 Qa(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 Rm=Qa;function Tm(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 zm(e,t,n,r){var i,a,s,o,c,u,m,d,h,f,g=t[0],p=t[1],l=t[2],v=r[0],x=r[1],S=r[2],A=n[0],E=n[1],w=n[2];return Math.abs(g-A)<Y&&Math.abs(p-E)<Y&&Math.abs(l-w)<Y?Ya(e):(m=g-A,d=p-E,h=l-w,f=1/Math.sqrt(m*m+d*d+h*h),m*=f,d*=f,h*=f,i=x*h-S*d,a=S*m-v*h,s=v*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*g+a*p+s*l),e[13]=-(o*g+c*p+u*l),e[14]=-(m*g+d*p+h*l),e[15]=1,e)}function Lm(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 g=c*h-u*d,p=u*m-o*h,l=o*d-c*m;return f=g*g+p*p+l*l,f>0&&(f=1/Math.sqrt(f),g*=f,p*=f,l*=f),e[0]=g,e[1]=p,e[2]=l,e[3]=0,e[4]=d*l-h*p,e[5]=h*g-m*l,e[6]=m*p-d*g,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 Nm(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 Om(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 Im(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 es(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 Pm(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 Cm(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 Dm(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 Fm(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],g=e[12],p=e[13],l=e[14],v=e[15],x=t[0],S=t[1],A=t[2],E=t[3],w=t[4],O=t[5],I=t[6],V=t[7],_=t[8],y=t[9],M=t[10],F=t[11],P=t[12],ee=t[13],ue=t[14],fe=t[15];return Math.abs(n-x)<=Y*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(r-S)<=Y*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(i-A)<=Y*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(a-E)<=Y*Math.max(1,Math.abs(a),Math.abs(E))&&Math.abs(s-w)<=Y*Math.max(1,Math.abs(s),Math.abs(w))&&Math.abs(o-O)<=Y*Math.max(1,Math.abs(o),Math.abs(O))&&Math.abs(c-I)<=Y*Math.max(1,Math.abs(c),Math.abs(I))&&Math.abs(u-V)<=Y*Math.max(1,Math.abs(u),Math.abs(V))&&Math.abs(m-_)<=Y*Math.max(1,Math.abs(m),Math.abs(_))&&Math.abs(d-y)<=Y*Math.max(1,Math.abs(d),Math.abs(y))&&Math.abs(h-M)<=Y*Math.max(1,Math.abs(h),Math.abs(M))&&Math.abs(f-F)<=Y*Math.max(1,Math.abs(f),Math.abs(F))&&Math.abs(g-P)<=Y*Math.max(1,Math.abs(g),Math.abs(P))&&Math.abs(p-ee)<=Y*Math.max(1,Math.abs(p),Math.abs(ee))&&Math.abs(l-ue)<=Y*Math.max(1,Math.abs(l),Math.abs(ue))&&Math.abs(v-fe)<=Y*Math.max(1,Math.abs(v),Math.abs(fe))}var Um=ja,Bm=es;var q={};Dr(q,{add:()=>Km,angle:()=>fd,bezier:()=>sd,ceil:()=>Xm,clone:()=>Gm,copy:()=>Vm,create:()=>ts,cross:()=>nd,dist:()=>Sd,distance:()=>ss,div:()=>xd,divide:()=>as,dot:()=>Ur,equals:()=>vd,exactEquals:()=>_d,floor:()=>$m,forEach:()=>Md,fromValues:()=>Hm,hermite:()=>ad,inverse:()=>ed,len:()=>Ed,length:()=>ns,lerp:()=>rd,max:()=>jm,min:()=>Ym,mul:()=>wd,multiply:()=>is,negate:()=>Qm,normalize:()=>td,random:()=>od,rotateX:()=>dd,rotateY:()=>ld,rotateZ:()=>hd,round:()=>qm,scale:()=>Zm,scaleAndAdd:()=>Jm,set:()=>Wm,slerp:()=>id,sqrDist:()=>Ad,sqrLen:()=>kd,squaredDistance:()=>os,squaredLength:()=>cs,str:()=>pd,sub:()=>yd,subtract:()=>rs,transformMat3:()=>ud,transformMat4:()=>cd,transformQuat:()=>md,zero:()=>gd});function ts(){var e=new Se(3);return Se!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Gm(e){var t=new Se(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ns(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Hm(e,t,n){var r=new Se(3);return r[0]=e,r[1]=t,r[2]=n,r}function Vm(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Wm(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function Km(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function rs(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function is(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function as(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function Xm(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function $m(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Ym(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 jm(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 qm(e,t){return e[0]=yn(t[0]),e[1]=yn(t[1]),e[2]=yn(t[2]),e}function Zm(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function Jm(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 ss(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 os(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 cs(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function Qm(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function ed(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function td(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 Ur(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function nd(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 rd(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 id(e,t,n,r){var i=Math.acos(Math.min(Math.max(Ur(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 ad(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 sd(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 od(e,t){t=t===void 0?1:t;var n=Fr()*2*Math.PI,r=Fr()*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 cd(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 ud(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 md(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 dd(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 ld(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 hd(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 fd(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&&Ur(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function gd(e){return e[0]=0,e[1]=0,e[2]=0,e}function pd(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function _d(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function vd(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)<=Y*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(r-s)<=Y*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-o)<=Y*Math.max(1,Math.abs(i),Math.abs(o))}var yd=rs,wd=is,xd=as,Sd=ss,Ad=os,Ed=ns,kd=cs,Md=(function(){var e=ts();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 bd=Object.defineProperty,ms=(e,t)=>{for(var n in t)bd(e,n,{get:t[n],enumerable:!0})};var rE=Math.PI/180;var Rd=Math.PI/180,iE=180/Math.PI,Ct=Rd,Td=[[-.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 ze=1,Ke=2;var Vr=8,Wr=16,zd=32;var Ld=16384;var Mn=65536,ds=1<<17,Nd=1<<18,Od=1<<19,Id=1<<20,Pd=1<<21,Cd=1<<22,Dd=1<<23,aE=1<<24,bn=1<<25,Fd=1<<26,sE=1<<27,oE=1<<28,cE=1<<29,Rn=1<<30,uE=1<<31;var mE=1<<25,dE=1<<28,lE=1<<29,hE=1<<30,fE=1<<31,gE=ze|Ke,pE=ze|Mn|Ke|bn|Rn,_E=ze|Mn|Ke,vE=ze|ds|Ke|bn|Rn,yE=zd|Vr|Wr,wE=ze|Wr|Vr,Ud=ze|bn|Rn|Ke|Fd,xE=Nd|Od|Id|Pd|Cd|Dd,SE=ze|Vr|Wr|bn|Rn,AE=ze|Mn|Ke,EE=ze|Ke,kE=ze|Mn|Ke|ds,ME=Ud|Ld,bE=Number.MAX_SAFE_INTEGER-1;var ls=256,Bd=256,Gd=8192,Hd=2048,Vd=512,Wd=256,Kd=ls*2,Xd=256,Br=32;var hs=(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.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Gd]="Sounds",e[e.Images=e.Sounds+Hd]="Images",e[e.Lights=e.Images+Vd]="Lights",e[e.ShadowLights=e.Lights+Bd]="ShadowLights",e[e.Items=e.ShadowLights+Xd]="Items",e[e.PlayerSkins=e.Items+Wd]="PlayerSkins",e[e.General=e.PlayerSkins+ls]="General",e[e.WheelWeapons=e.General+Kd]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Br]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Br]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Br]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(hs||{}),RE=hs.MaxConfigStrings;var $d={};ms($d,{addReplayFrame:()=>Zd,createReplaySession:()=>qd,deserializeReplay:()=>jd,serializeReplay:()=>Yd});function Yd(e){return JSON.stringify(e,null,2)}function jd(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 qd(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Zd(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var W=(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))(W||{}),b=(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))(b||{}),Jd={};ms(Jd,{U_ANGLE1:()=>al,U_ANGLE2:()=>sl,U_ANGLE3:()=>ol,U_EFFECTS:()=>ml,U_EVENT:()=>hl,U_FRAME:()=>cl,U_MODEL:()=>el,U_MODEL2:()=>gl,U_MODEL3:()=>pl,U_MODEL4:()=>_l,U_MOREBITS:()=>fl,U_NUMBER:()=>Qd,U_ORIGIN1:()=>nl,U_ORIGIN2:()=>rl,U_ORIGIN3:()=>il,U_REMOVE:()=>vl,U_RENDERFX:()=>dl,U_SKIN:()=>ul,U_SOLID:()=>ll,U_SOUND:()=>tl});var Qd=1,el=2,tl=4,nl=8,rl=16,il=32,al=64,sl=128,ol=256,cl=512,ul=1024,ml=2048,dl=4096,ll=8192,hl=16384,fl=32768,gl=1,pl=2,_l=4,vl=32768,yl=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=Td[t];e.x=n[0],e.y=n[1],e.z=n[2]}},fs=(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))(fs||{}),TE=Object.keys(fs).length/2;function wl(){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 zE=wl();var LE=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 xl=19,NE=8+xl*8;var Hr=4,Gr=7*Hr,OE=[{index:0,size:3,type:5126,stride:Gr,offset:0},{index:1,size:2,type:5126,stride:Gr,offset:3*Hr},{index:2,size:2,type:5126,stride:Gr,offset:5*Hr}];var gs=32;var IE=`#version 300 es
|
|
1
|
+
"use strict";var Quake2Client=(()=>{var Pr=Object.defineProperty;var Wu=Object.getOwnPropertyDescriptor;var Ku=Object.getOwnPropertyNames;var Xu=Object.prototype.hasOwnProperty;var Dr=(e,t)=>{for(var n in t)Pr(e,n,{get:t[n],enumerable:!0})},$u=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ku(t))!Xu.call(e,i)&&i!==n&&Pr(e,i,{get:()=>t[i],enumerable:!(r=Wu(t,i))||r.enumerable});return e};var Yu=e=>$u(Pr({},"__esModule",{value:!0}),e);var uE={};Dr(uE,{ClientConfigStrings:()=>It,ClientPrediction:()=>Fn,InputAction:()=>Or,InputBindings:()=>ut,InputCommandBuffer:()=>Ir,InputController:()=>Ct,ViewEffects:()=>Dn,createClient:()=>cE,createDefaultBindings:()=>Hu,interpolatePredictionState:()=>_t,normalizeCommand:()=>_n,normalizeInputCode:()=>Va});var Y=1e-6,xe=typeof Float32Array<"u"?Float32Array:Array,Fr=Math.random;function yn(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var mE=Math.PI/180,lE=180/Math.PI;var j={};Dr(j,{add:()=>Od,adjoint:()=>nd,clone:()=>qu,copy:()=>Zu,create:()=>ju,decompose:()=>yd,determinant:()=>rd,equals:()=>Dd,exactEquals:()=>Pd,frob:()=>zd,fromQuat:()=>xd,fromQuat2:()=>_d,fromRotation:()=>ld,fromRotationTranslation:()=>qa,fromRotationTranslationScale:()=>wd,fromRotationTranslationScaleOrigin:()=>Sd,fromScaling:()=>md,fromTranslation:()=>dd,fromValues:()=>Ju,fromXRotation:()=>hd,fromYRotation:()=>fd,fromZRotation:()=>gd,frustum:()=>Ad,getRotation:()=>vd,getScaling:()=>Za,getTranslation:()=>pd,identity:()=>Ya,invert:()=>td,lookAt:()=>Rd,mul:()=>Fd,multiply:()=>ja,multiplyScalar:()=>Id,multiplyScalarAndAdd:()=>Cd,ortho:()=>Md,orthoNO:()=>Qa,orthoZO:()=>bd,perspective:()=>Ed,perspectiveFromFieldOfView:()=>Td,perspectiveNO:()=>Ja,perspectiveZO:()=>kd,rotate:()=>sd,rotateX:()=>od,rotateY:()=>cd,rotateZ:()=>ud,scale:()=>ad,set:()=>Qu,str:()=>Nd,sub:()=>Ud,subtract:()=>es,targetTo:()=>Ld,translate:()=>id,transpose:()=>ed});function ju(){var e=new xe(16);return xe!=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 qu(e){var t=new xe(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 Zu(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 Ju(e,t,n,r,i,a,s,o,c,u,d,m,h,f,g,_){var l=new xe(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]=d,l[11]=m,l[12]=h,l[13]=f,l[14]=g,l[15]=_,l}function Qu(e,t,n,r,i,a,s,o,c,u,d,m,h,f,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]=d,e[10]=m,e[11]=h,e[12]=f,e[13]=g,e[14]=_,e[15]=l,e}function Ya(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 ed(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 td(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],d=t[8],m=t[9],h=t[10],f=t[11],g=t[12],_=t[13],l=t[14],v=t[15],S=n*o-r*s,x=n*c-i*s,A=n*u-a*s,E=r*c-i*o,w=r*u-a*o,O=i*u-a*c,I=d*_-m*g,H=d*l-h*g,p=d*v-f*g,y=m*l-h*_,T=m*v-f*_,F=h*v-f*l,C=S*F-x*T+A*y+E*p-w*H+O*I;return C?(C=1/C,e[0]=(o*F-c*T+u*y)*C,e[1]=(i*T-r*F-a*y)*C,e[2]=(_*O-l*w+v*E)*C,e[3]=(h*w-m*O-f*E)*C,e[4]=(c*p-s*F-u*H)*C,e[5]=(n*F-i*p+a*H)*C,e[6]=(l*A-g*O-v*x)*C,e[7]=(d*O-h*A+f*x)*C,e[8]=(s*T-o*p+u*I)*C,e[9]=(r*p-n*T-a*I)*C,e[10]=(g*w-_*A+v*S)*C,e[11]=(m*A-d*w-f*S)*C,e[12]=(o*H-s*y-c*I)*C,e[13]=(n*y-r*H+i*I)*C,e[14]=(_*x-g*E-l*S)*C,e[15]=(d*E-m*x+h*S)*C,e):null}function nd(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],d=t[8],m=t[9],h=t[10],f=t[11],g=t[12],_=t[13],l=t[14],v=t[15],S=n*o-r*s,x=n*c-i*s,A=n*u-a*s,E=r*c-i*o,w=r*u-a*o,O=i*u-a*c,I=d*_-m*g,H=d*l-h*g,p=d*v-f*g,y=m*l-h*_,T=m*v-f*_,F=h*v-f*l;return e[0]=o*F-c*T+u*y,e[1]=i*T-r*F-a*y,e[2]=_*O-l*w+v*E,e[3]=h*w-m*O-f*E,e[4]=c*p-s*F-u*H,e[5]=n*F-i*p+a*H,e[6]=l*A-g*O-v*x,e[7]=d*O-h*A+f*x,e[8]=s*T-o*p+u*I,e[9]=r*p-n*T-a*I,e[10]=g*w-_*A+v*S,e[11]=m*A-d*w-f*S,e[12]=o*H-s*y-c*I,e[13]=n*y-r*H+i*I,e[14]=_*x-g*E-l*S,e[15]=d*E-m*x+h*S,e}function rd(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],d=e[9],m=e[10],h=e[11],f=e[12],g=e[13],_=e[14],l=e[15],v=t*s-n*a,S=t*o-r*a,x=n*o-r*s,A=u*g-d*f,E=u*_-m*f,w=d*_-m*g,O=t*w-n*E+r*A,I=a*w-s*E+o*A,H=u*x-d*S+m*v,p=f*x-g*S+_*v;return c*O-i*I+l*H-h*p}function ja(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],d=t[7],m=t[8],h=t[9],f=t[10],g=t[11],_=t[12],l=t[13],v=t[14],S=t[15],x=n[0],A=n[1],E=n[2],w=n[3];return e[0]=x*r+A*o+E*m+w*_,e[1]=x*i+A*c+E*h+w*l,e[2]=x*a+A*u+E*f+w*v,e[3]=x*s+A*d+E*g+w*S,x=n[4],A=n[5],E=n[6],w=n[7],e[4]=x*r+A*o+E*m+w*_,e[5]=x*i+A*c+E*h+w*l,e[6]=x*a+A*u+E*f+w*v,e[7]=x*s+A*d+E*g+w*S,x=n[8],A=n[9],E=n[10],w=n[11],e[8]=x*r+A*o+E*m+w*_,e[9]=x*i+A*c+E*h+w*l,e[10]=x*a+A*u+E*f+w*v,e[11]=x*s+A*d+E*g+w*S,x=n[12],A=n[13],E=n[14],w=n[15],e[12]=x*r+A*o+E*m+w*_,e[13]=x*i+A*c+E*h+w*l,e[14]=x*a+A*u+E*f+w*v,e[15]=x*s+A*d+E*g+w*S,e}function id(e,t,n){var r=n[0],i=n[1],a=n[2],s,o,c,u,d,m,h,f,g,_,l,v;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],d=t[4],m=t[5],h=t[6],f=t[7],g=t[8],_=t[9],l=t[10],v=t[11],e[0]=s,e[1]=o,e[2]=c,e[3]=u,e[4]=d,e[5]=m,e[6]=h,e[7]=f,e[8]=g,e[9]=_,e[10]=l,e[11]=v,e[12]=s*r+d*i+g*a+t[12],e[13]=o*r+m*i+_*a+t[13],e[14]=c*r+h*i+l*a+t[14],e[15]=u*r+f*i+v*a+t[15]),e}function ad(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 sd(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,d,m,h,f,g,_,l,v,S,x,A,E,w,O,I,H,p,y,T,F,C,ee;return o<Y?null:(o=1/o,i*=o,a*=o,s*=o,c=Math.sin(n),u=Math.cos(n),d=1-u,m=t[0],h=t[1],f=t[2],g=t[3],_=t[4],l=t[5],v=t[6],S=t[7],x=t[8],A=t[9],E=t[10],w=t[11],O=i*i*d+u,I=a*i*d+s*c,H=s*i*d-a*c,p=i*a*d-s*c,y=a*a*d+u,T=s*a*d+i*c,F=i*s*d+a*c,C=a*s*d-i*c,ee=s*s*d+u,e[0]=m*O+_*I+x*H,e[1]=h*O+l*I+A*H,e[2]=f*O+v*I+E*H,e[3]=g*O+S*I+w*H,e[4]=m*p+_*y+x*T,e[5]=h*p+l*y+A*T,e[6]=f*p+v*y+E*T,e[7]=g*p+S*y+w*T,e[8]=m*F+_*C+x*ee,e[9]=h*F+l*C+A*ee,e[10]=f*F+v*C+E*ee,e[11]=g*F+S*C+w*ee,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function od(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],d=t[9],m=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+d*r,e[6]=o*i+m*r,e[7]=c*i+h*r,e[8]=u*i-a*r,e[9]=d*i-s*r,e[10]=m*i-o*r,e[11]=h*i-c*r,e}function cd(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],d=t[9],m=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-d*r,e[2]=o*i-m*r,e[3]=c*i-h*r,e[8]=a*r+u*i,e[9]=s*r+d*i,e[10]=o*r+m*i,e[11]=c*r+h*i,e}function ud(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],d=t[5],m=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+d*r,e[2]=o*i+m*r,e[3]=c*i+h*r,e[4]=u*i-a*r,e[5]=d*i-s*r,e[6]=m*i-o*r,e[7]=h*i-c*r,e}function dd(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 md(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 ld(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<Y?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 hd(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 fd(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 gd(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 qa(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,d=r*o,m=r*c,h=r*u,f=i*c,g=i*u,_=a*u,l=s*o,v=s*c,S=s*u;return e[0]=1-(f+_),e[1]=m+S,e[2]=h-v,e[3]=0,e[4]=m-S,e[5]=1-(d+_),e[6]=g+l,e[7]=0,e[8]=h+v,e[9]=g-l,e[10]=1-(d+f),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function _d(e,t){var n=new xe(3),r=-t[0],i=-t[1],a=-t[2],s=t[3],o=t[4],c=t[5],u=t[6],d=t[7],m=r*r+i*i+a*a+s*s;return m>0?(n[0]=(o*s+d*r+c*a-u*i)*2/m,n[1]=(c*s+d*i+u*r-o*a)*2/m,n[2]=(u*s+d*a+o*i-c*r)*2/m):(n[0]=(o*s+d*r+c*a-u*i)*2,n[1]=(c*s+d*i+u*r-o*a)*2,n[2]=(u*s+d*a+o*i-c*r)*2),qa(e,t,n),e}function pd(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],d=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+d*d),e}function vd(e,t){var n=new xe(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,d=t[5]*i,m=t[6]*a,h=t[8]*r,f=t[9]*i,g=t[10]*a,_=s+d+g,l=0;return _>0?(l=Math.sqrt(_+1)*2,e[3]=.25*l,e[0]=(m-f)/l,e[1]=(h-c)/l,e[2]=(o-u)/l):s>d&&s>g?(l=Math.sqrt(1+s-d-g)*2,e[3]=(m-f)/l,e[0]=.25*l,e[1]=(o+u)/l,e[2]=(h+c)/l):d>g?(l=Math.sqrt(1+d-s-g)*2,e[3]=(h-c)/l,e[0]=(o+u)/l,e[1]=.25*l,e[2]=(m+f)/l):(l=Math.sqrt(1+g-s-d)*2,e[3]=(o-u)/l,e[0]=(h+c)/l,e[1]=(m+f)/l,e[2]=.25*l),e}function yd(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],d=r[8],m=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(d*d+m*m+h*h);var f=1/n[0],g=1/n[1],_=1/n[2],l=i*f,v=a*g,S=s*_,x=o*f,A=c*g,E=u*_,w=d*f,O=m*g,I=h*_,H=l+A+I,p=0;return H>0?(p=Math.sqrt(H+1)*2,e[3]=.25*p,e[0]=(E-O)/p,e[1]=(w-S)/p,e[2]=(v-x)/p):l>A&&l>I?(p=Math.sqrt(1+l-A-I)*2,e[3]=(E-O)/p,e[0]=.25*p,e[1]=(v+x)/p,e[2]=(w+S)/p):A>I?(p=Math.sqrt(1+A-l-I)*2,e[3]=(w-S)/p,e[0]=(v+x)/p,e[1]=.25*p,e[2]=(E+O)/p):(p=Math.sqrt(1+I-l-A)*2,e[3]=(v-x)/p,e[0]=(w+S)/p,e[1]=(E+O)/p,e[2]=.25*p),e}function wd(e,t,n,r){var i=t[0],a=t[1],s=t[2],o=t[3],c=i+i,u=a+a,d=s+s,m=i*c,h=i*u,f=i*d,g=a*u,_=a*d,l=s*d,v=o*c,S=o*u,x=o*d,A=r[0],E=r[1],w=r[2];return e[0]=(1-(g+l))*A,e[1]=(h+x)*A,e[2]=(f-S)*A,e[3]=0,e[4]=(h-x)*E,e[5]=(1-(m+l))*E,e[6]=(_+v)*E,e[7]=0,e[8]=(f+S)*w,e[9]=(_-v)*w,e[10]=(1-(m+g))*w,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function Sd(e,t,n,r,i){var a=t[0],s=t[1],o=t[2],c=t[3],u=a+a,d=s+s,m=o+o,h=a*u,f=a*d,g=a*m,_=s*d,l=s*m,v=o*m,S=c*u,x=c*d,A=c*m,E=r[0],w=r[1],O=r[2],I=i[0],H=i[1],p=i[2],y=(1-(_+v))*E,T=(f+A)*E,F=(g-x)*E,C=(f-A)*w,ee=(1-(h+v))*w,ue=(l+S)*w,fe=(g+x)*O,We=(l-S)*O,vn=(1-(h+_))*O;return e[0]=y,e[1]=T,e[2]=F,e[3]=0,e[4]=C,e[5]=ee,e[6]=ue,e[7]=0,e[8]=fe,e[9]=We,e[10]=vn,e[11]=0,e[12]=n[0]+I-(y*I+C*H+fe*p),e[13]=n[1]+H-(T*I+ee*H+We*p),e[14]=n[2]+p-(F*I+ue*H+vn*p),e[15]=1,e}function xd(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,d=r*s,m=r*o,h=i*s,f=i*o,g=i*c,_=a*s,l=a*o,v=a*c;return e[0]=1-m-g,e[1]=d+v,e[2]=h-l,e[3]=0,e[4]=d-v,e[5]=1-u-g,e[6]=f+_,e[7]=0,e[8]=h+l,e[9]=f-_,e[10]=1-u-m,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ad(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 Ja(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 Ed=Ja;function kd(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 Td(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 Qa(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 Md=Qa;function bd(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 Rd(e,t,n,r){var i,a,s,o,c,u,d,m,h,f,g=t[0],_=t[1],l=t[2],v=r[0],S=r[1],x=r[2],A=n[0],E=n[1],w=n[2];return Math.abs(g-A)<Y&&Math.abs(_-E)<Y&&Math.abs(l-w)<Y?Ya(e):(d=g-A,m=_-E,h=l-w,f=1/Math.sqrt(d*d+m*m+h*h),d*=f,m*=f,h*=f,i=S*h-x*m,a=x*d-v*h,s=v*m-S*d,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=m*s-h*a,c=h*i-d*s,u=d*a-m*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]=d,e[3]=0,e[4]=a,e[5]=c,e[6]=m,e[7]=0,e[8]=s,e[9]=u,e[10]=h,e[11]=0,e[12]=-(i*g+a*_+s*l),e[13]=-(o*g+c*_+u*l),e[14]=-(d*g+m*_+h*l),e[15]=1,e)}function Ld(e,t,n,r){var i=t[0],a=t[1],s=t[2],o=r[0],c=r[1],u=r[2],d=i-n[0],m=a-n[1],h=s-n[2],f=d*d+m*m+h*h;f>0&&(f=1/Math.sqrt(f),d*=f,m*=f,h*=f);var g=c*h-u*m,_=u*d-o*h,l=o*m-c*d;return f=g*g+_*_+l*l,f>0&&(f=1/Math.sqrt(f),g*=f,_*=f,l*=f),e[0]=g,e[1]=_,e[2]=l,e[3]=0,e[4]=m*l-h*_,e[5]=h*g-d*l,e[6]=d*_-m*g,e[7]=0,e[8]=d,e[9]=m,e[10]=h,e[11]=0,e[12]=i,e[13]=a,e[14]=s,e[15]=1,e}function Nd(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 zd(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 Od(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 es(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 Id(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 Cd(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 Pd(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 Dd(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],d=e[8],m=e[9],h=e[10],f=e[11],g=e[12],_=e[13],l=e[14],v=e[15],S=t[0],x=t[1],A=t[2],E=t[3],w=t[4],O=t[5],I=t[6],H=t[7],p=t[8],y=t[9],T=t[10],F=t[11],C=t[12],ee=t[13],ue=t[14],fe=t[15];return Math.abs(n-S)<=Y*Math.max(1,Math.abs(n),Math.abs(S))&&Math.abs(r-x)<=Y*Math.max(1,Math.abs(r),Math.abs(x))&&Math.abs(i-A)<=Y*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(a-E)<=Y*Math.max(1,Math.abs(a),Math.abs(E))&&Math.abs(s-w)<=Y*Math.max(1,Math.abs(s),Math.abs(w))&&Math.abs(o-O)<=Y*Math.max(1,Math.abs(o),Math.abs(O))&&Math.abs(c-I)<=Y*Math.max(1,Math.abs(c),Math.abs(I))&&Math.abs(u-H)<=Y*Math.max(1,Math.abs(u),Math.abs(H))&&Math.abs(d-p)<=Y*Math.max(1,Math.abs(d),Math.abs(p))&&Math.abs(m-y)<=Y*Math.max(1,Math.abs(m),Math.abs(y))&&Math.abs(h-T)<=Y*Math.max(1,Math.abs(h),Math.abs(T))&&Math.abs(f-F)<=Y*Math.max(1,Math.abs(f),Math.abs(F))&&Math.abs(g-C)<=Y*Math.max(1,Math.abs(g),Math.abs(C))&&Math.abs(_-ee)<=Y*Math.max(1,Math.abs(_),Math.abs(ee))&&Math.abs(l-ue)<=Y*Math.max(1,Math.abs(l),Math.abs(ue))&&Math.abs(v-fe)<=Y*Math.max(1,Math.abs(v),Math.abs(fe))}var Fd=ja,Ud=es;var q={};Dr(q,{add:()=>Wd,angle:()=>hm,bezier:()=>am,ceil:()=>Kd,clone:()=>Bd,copy:()=>Hd,create:()=>ts,cross:()=>tm,dist:()=>Sm,distance:()=>ss,div:()=>wm,divide:()=>as,dot:()=>Ur,equals:()=>pm,exactEquals:()=>_m,floor:()=>Xd,forEach:()=>km,fromValues:()=>Gd,hermite:()=>im,inverse:()=>Qd,len:()=>Am,length:()=>ns,lerp:()=>nm,max:()=>Yd,min:()=>$d,mul:()=>ym,multiply:()=>is,negate:()=>Jd,normalize:()=>em,random:()=>sm,rotateX:()=>dm,rotateY:()=>mm,rotateZ:()=>lm,round:()=>jd,scale:()=>qd,scaleAndAdd:()=>Zd,set:()=>Vd,slerp:()=>rm,sqrDist:()=>xm,sqrLen:()=>Em,squaredDistance:()=>os,squaredLength:()=>cs,str:()=>gm,sub:()=>vm,subtract:()=>rs,transformMat3:()=>cm,transformMat4:()=>om,transformQuat:()=>um,zero:()=>fm});function ts(){var e=new xe(3);return xe!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Bd(e){var t=new xe(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ns(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Gd(e,t,n){var r=new xe(3);return r[0]=e,r[1]=t,r[2]=n,r}function Hd(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Vd(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function Wd(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function rs(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function is(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function as(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function Kd(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Xd(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function $d(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 Yd(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 jd(e,t){return e[0]=yn(t[0]),e[1]=yn(t[1]),e[2]=yn(t[2]),e}function qd(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function Zd(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 ss(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 os(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 cs(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function Jd(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Qd(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function em(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 Ur(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function tm(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 nm(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 rm(e,t,n,r){var i=Math.acos(Math.min(Math.max(Ur(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 im(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),d=s*(3-2*a);return e[0]=t[0]*o+n[0]*c+r[0]*u+i[0]*d,e[1]=t[1]*o+n[1]*c+r[1]*u+i[1]*d,e[2]=t[2]*o+n[2]*c+r[2]*u+i[2]*d,e}function am(e,t,n,r,i,a){var s=1-a,o=s*s,c=a*a,u=o*s,d=3*a*o,m=3*c*s,h=c*a;return e[0]=t[0]*u+n[0]*d+r[0]*m+i[0]*h,e[1]=t[1]*u+n[1]*d+r[1]*m+i[1]*h,e[2]=t[2]*u+n[2]*d+r[2]*m+i[2]*h,e}function sm(e,t){t=t===void 0?1:t;var n=Fr()*2*Math.PI,r=Fr()*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 om(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 cm(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 um(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],d=i*u-a*c,m=a*o-r*u,h=r*c-i*o;return d=d+d,m=m+m,h=h+h,e[0]=o+s*d+i*h-a*m,e[1]=c+s*m+a*d-r*h,e[2]=u+s*h+r*m-i*d,e}function dm(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 mm(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 lm(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 hm(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&&Ur(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function fm(e){return e[0]=0,e[1]=0,e[2]=0,e}function gm(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function _m(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function pm(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)<=Y*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(r-s)<=Y*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-o)<=Y*Math.max(1,Math.abs(i),Math.abs(o))}var vm=rs,ym=is,wm=as,Sm=ss,xm=os,Am=ns,Em=cs,km=(function(){var e=ts();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 Tm=Object.defineProperty,ds=(e,t)=>{for(var n in t)Tm(e,n,{get:t[n],enumerable:!0})};var fE=Math.PI/180;var Mm=Math.PI/180,gE=180/Math.PI,Pt=Mm,bm=[[-.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 Le=1,Ke=2;var Vr=8,Wr=16,Rm=32;var Lm=16384;var Tn=65536,ms=1<<17,Nm=1<<18,zm=1<<19,Om=1<<20,Im=1<<21,Cm=1<<22,Pm=1<<23,_E=1<<24,Mn=1<<25,Dm=1<<26,pE=1<<27,vE=1<<28,yE=1<<29,bn=1<<30,wE=1<<31;var SE=1<<25,xE=1<<28,AE=1<<29,EE=1<<30,kE=1<<31,TE=Le|Ke,ME=Le|Tn|Ke|Mn|bn,bE=Le|Tn|Ke,RE=Le|ms|Ke|Mn|bn,LE=Rm|Vr|Wr,NE=Le|Wr|Vr,Fm=Le|Mn|bn|Ke|Dm,zE=Nm|zm|Om|Im|Cm|Pm,OE=Le|Vr|Wr|Mn|bn,IE=Le|Tn|Ke,CE=Le|Ke,PE=Le|Tn|Ke|ms,DE=Fm|Lm,FE=Number.MAX_SAFE_INTEGER-1;var ls=256,Um=256,Bm=8192,Gm=2048,Hm=512,Vm=256,Wm=ls*2,Km=256,Br=32;var hs=(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.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Bm]="Sounds",e[e.Images=e.Sounds+Gm]="Images",e[e.Lights=e.Images+Hm]="Lights",e[e.ShadowLights=e.Lights+Um]="ShadowLights",e[e.Items=e.ShadowLights+Km]="Items",e[e.PlayerSkins=e.Items+Vm]="PlayerSkins",e[e.General=e.PlayerSkins+ls]="General",e[e.WheelWeapons=e.General+Wm]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Br]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Br]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Br]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(hs||{}),UE=hs.MaxConfigStrings;var Xm={};ds(Xm,{addReplayFrame:()=>qm,createReplaySession:()=>jm,deserializeReplay:()=>Ym,serializeReplay:()=>$m});function $m(e){return JSON.stringify(e,null,2)}function Ym(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 jm(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function qm(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||{}),Zm=12,Jm=9,BE=Math.ceil(Zm*Jm/16),Qm=23,el=2,GE=Math.ceil(Qm*el/16),tl={};ds(tl,{U_ANGLE1:()=>cl,U_ANGLE2:()=>ul,U_ANGLE3:()=>dl,U_EFFECTS:()=>hl,U_EVENT:()=>_l,U_FRAME:()=>ml,U_MODEL:()=>rl,U_MODEL2:()=>vl,U_MODEL3:()=>yl,U_MODEL4:()=>wl,U_MOREBITS:()=>pl,U_NUMBER:()=>nl,U_ORIGIN1:()=>al,U_ORIGIN2:()=>sl,U_ORIGIN3:()=>ol,U_REMOVE:()=>Sl,U_RENDERFX:()=>fl,U_SKIN:()=>ll,U_SOLID:()=>gl,U_SOUND:()=>il});var nl=1,rl=2,il=4,al=8,sl=16,ol=32,cl=64,ul=128,dl=256,ml=512,ll=1024,hl=2048,fl=4096,gl=8192,_l=16384,pl=32768,vl=1,yl=2,wl=4,Sl=32768,xl=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=bm[t];e.x=n[0],e.y=n[1],e.z=n[2]}},fs=(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.MagSlugs=6]="MagSlugs",e[e.Trap=7]="Trap",e[e.Flechettes=8]="Flechettes",e[e.Tesla=9]="Tesla",e[e.Disruptor=10]="Disruptor",e[e.Prox=11]="Prox",e[e.Nuke=12]="Nuke",e[e.Rounds=13]="Rounds",e))(fs||{}),HE=Object.keys(fs).length/2;function Al(){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 VE=Al();var WE=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 El=19,KE=8+El*8;var Hr=4,Gr=7*Hr,XE=[{index:0,size:3,type:5126,stride:Gr,offset:0},{index:1,size:2,type:5126,stride:Gr,offset:3*Hr},{index:2,size:2,type:5126,stride:Gr,offset:5*Hr}];var gs=32;var $E=`#version 300 es
|
|
2
2
|
precision highp float;
|
|
3
3
|
|
|
4
4
|
struct DLight {
|
|
@@ -86,7 +86,7 @@ void main() {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
o_color = finalColor;
|
|
89
|
-
}`;var
|
|
89
|
+
}`;var YE=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 jE=`#version 300 es
|
|
90
90
|
precision highp float;
|
|
91
91
|
|
|
92
92
|
layout(location = 0) in vec3 a_position;
|
|
@@ -138,13 +138,13 @@ 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 ps=class{constructor(){this._position=q.create(),this._angles=q.create(),this._bobAngles=q.create(),this._bobOffset=q.create(),this._kickAngles=q.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=j.create(),this._projectionMatrix=j.create(),this._viewProjectionMatrix=j.create(),this._dirty=!0}get position(){return this._position}set position(e){q.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){q.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){q.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){q.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){q.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=j.create();return j.perspective(t,e*Ct,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;j.perspective(this._projectionMatrix,this._fov*Ct,this._aspect,this._near,this._far);let e=j.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*Ct,a=n*Ct,s=r*Ct,o=j.create();j.identity(o),j.rotateZ(o,o,-a),j.rotateY(o,o,-i),j.rotateX(o,o,-s);let c=j.create();j.multiply(c,e,o);let u=q.add(q.create(),this._position,this._bobOffset),m=q.negate(q.create(),u),d=q.create();q.transformMat4(d,m,o);let h=q.fromValues(d[1]||0,d[2]||0,d[0]||0);j.copy(this._viewMatrix,c),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],j.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Sl=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 yl(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Kr=1,Xr=2,$r=4,Yr=8,jr=16,qr=32,_s=64,Al=128,El=256,Zr=512,Jr=1024,Qr=2048,wn=4096,xn=16384,kl=32768,Sn=65536,ei=1<<17,An=1<<18,En=1<<19,ti=1<<20,ni=1<<21,ri=1<<22,Ml=1<<23,ii=1<<24,kn=1<<25,ai=1<<26,si=1<<27,bl=1,Rl=2,Tl=128,dt=()=>({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}),us=()=>({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)}),zl=class{constructor(e,t){this.protocolVersion=0,this.isDemo=bl,this.stream=e,this.handler=t}translateCommand(e){if(this.protocolVersion===0&&(e===7||e===12))return W.serverdata;if(this.protocolVersion===25){if(e>=7&&e<=15)return e+5;if(e===1)return W.print;if(e===2)return W.stufftext;if(e===3)return W.sound;if(e===4)return W.nop;if(e===5)return W.disconnect;if(e===6)return W.reconnect;if(e===16)return W.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 W.nop:break;case W.disconnect:break;case W.reconnect:break;case W.print:this.parsePrint();break;case W.serverdata:this.parseServerData();break;case W.configstring:this.parseConfigString();break;case W.spawnbaseline:this.parseSpawnBaseline();break;case W.centerprint:this.parseCenterPrint();break;case W.download:this.parseDownload();break;case W.frame:this.parseFrame();break;case W.packetentities:this.parsePacketEntities(!1);break;case W.deltapacketentities:this.parsePacketEntities(!0);break;case W.playerinfo:this.parsePlayerState();break;case W.stufftext:this.parseStuffText();break;case W.layout:this.parseLayout();break;case W.inventory:this.parseInventory();break;case W.sound:this.parseSound();break;case W.muzzleflash:this.parseMuzzleFlash();break;case W.muzzleflash2:this.parseMuzzleFlash2();break;case W.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 b.EXPLOSION1:case b.EXPLOSION2:case b.ROCKET_EXPLOSION:case b.GRENADE_EXPLOSION:case b.ROCKET_EXPLOSION_WATER:case b.GRENADE_EXPLOSION_WATER:case b.BFG_EXPLOSION:case b.BFG_BIGEXPLOSION:case b.BOSSTPORT:case b.PLASMA_EXPLOSION:case b.PLAIN_EXPLOSION:case b.CHAINFIST_SMOKE:case b.TRACKER_EXPLOSION:case b.TELEPORT_EFFECT:case b.DBALL_GOAL:case b.NUKEBLAST:case b.WIDOWSPLASH:case b.EXPLOSION1_BIG:case b.EXPLOSION1_NP:this.stream.readPos(t);break;case b.GUNSHOT:case b.BLOOD:case b.BLASTER:case b.SHOTGUN:case b.SPARKS:case b.BULLET_SPARKS:case b.SCREEN_SPARKS:case b.SHIELD_SPARKS:case b.BLASTER2:case b.FLECHETTE:case b.MOREBLOOD:case b.ELECTRIC_SPARKS:case b.HEATBEAM_SPARKS:case b.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(r);break;case b.SPLASH:case b.LASER_SPARKS:case b.WELDING_SPARKS:case b.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(r),a=this.stream.readByte();break;case b.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.stream.readPos(t),this.stream.readPos(n)):(this.stream.readPos(t),this.stream.readDir(r));break;case b.GREENBLOOD:this.protocolVersion>=32?(this.stream.readPos(t),this.stream.readDir(r)):(this.stream.readPos(t),this.stream.readPos(n));break;case b.RAILTRAIL:case b.BUBBLETRAIL:case b.BFG_LASER:case b.DEBUGTRAIL:case b.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(n);break;case b.PARASITE_ATTACK:case b.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n);break;case b.GRAPPLE_CABLE:s=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n),this.stream.readPos(r);break;case b.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(n);break;case b.FLASHLIGHT:this.stream.readPos(t),s=this.stream.readShort();break;case b.FORCEWALL:this.stream.readPos(t),this.stream.readPos(n),a=this.stream.readByte();break;case b.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 b.WIDOWBEAMOUT:this.stream.readShort();case b.HEATBEAM:case b.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=dt();this.parseDelta(dt(),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!==W.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);let s=this.parsePlayerState();if(this.isDemo===Tl){let o=this.stream.readByte();for(let c=0;c<o;c++)this.stream.readByte()}this.isDemo===Rl&&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=us(),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:us(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let n=dt();this.parseDelta(dt(),n,t.number,t.bits),e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Al&&(e|=this.stream.readByte()<<8),e&kl&&(e|=this.stream.readByte()<<16),e&Ml&&(e|=this.stream.readByte()<<24);let t;return e&El?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&Qr&&(t.modelindex=this.stream.readByte()),r&ti&&(t.modelindex2=this.stream.readByte()),r&ni&&(t.modelindex3=this.stream.readByte()),r&ri&&(t.modelindex4=this.stream.readByte()),r&jr&&(t.frame=this.stream.readByte()),r&ei&&(t.frame=this.stream.readShort()),r&Sn&&r&kn?t.skinnum=this.stream.readLong():r&Sn?t.skinnum=this.stream.readByte():r&kn&&(t.skinnum=this.stream.readShort()),r&xn&&r&En?t.effects=this.stream.readLong():r&xn?t.effects=this.stream.readByte():r&En&&(t.effects=this.stream.readShort()),r&wn&&r&An?t.renderfx=this.stream.readLong():r&wn?t.renderfx=this.stream.readByte():r&An&&(t.renderfx=this.stream.readShort()),r&Kr&&(t.origin.x=this.stream.readCoord()),r&Xr&&(t.origin.y=this.stream.readCoord()),r&Zr&&(t.origin.z=this.stream.readCoord()),r&Jr&&(t.angles.x=this.stream.readAngle()),r&$r&&(t.angles.y=this.stream.readAngle()),r&Yr&&(t.angles.z=this.stream.readAngle()),r&ii&&this.stream.readPos(t.old_origin),r&ai&&(t.sound=this.stream.readByte()),r&qr?t.event=this.stream.readByte():t.event=0,r&si&&(t.solid=this.stream.readShort())}},Dt=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(Dt||{}),vs=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 Sl(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 zl(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Ll=Object.defineProperty,ys=(e,t)=>{for(var n in t)Ll(e,n,{get:t[n],enumerable:!0})},ht={x:0,y:0,z:0};var WE=Math.PI/180;function Ft(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function ft(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function De(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Nl(e){return De(e,e)}function Tn(e){return Math.sqrt(Nl(e))}function ws(e){let t=Tn(e);return t===0?e:ft(e,1/t)}var xs=0,Ss=1,As=2,Ol=Math.PI/180,KE=180/Math.PI;function oi(e,t){switch(t){case xs:return e.x;case Ss:return e.y;case As:default:return e.z}}function ci(e){return e*Ol}function lt(e){let t=e%360;return t<0?360+t:t}function Ut(e){let t=ci(oi(e,Ss)),n=ci(oi(e,xs)),r=ci(oi(e,As)),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 Le=1,Xe=2;var mi=8,di=16,Il=32;var Pl=16384;var zn=65536,Es=1<<17,Cl=1<<18,Dl=1<<19,Fl=1<<20,Ul=1<<21,Bl=1<<22,Gl=1<<23,XE=1<<24,Ln=1<<25,Hl=1<<26,$E=1<<27,YE=1<<28,jE=1<<29,Nn=1<<30,qE=1<<31;var ZE=1<<25,JE=1<<28,QE=1<<29,ek=1<<30,tk=1<<31;var nk=Le|Xe,rk=Le|zn|Xe|Ln|Nn,ik=Le|zn|Xe,ak=Le|Es|Xe|Ln|Nn,sk=Il|mi|di,ok=Le|di|mi,Vl=Le|Ln|Nn|Xe|Hl,ck=Cl|Dl|Fl|Ul|Bl|Gl,uk=Le|mi|di|Ln|Nn,mk=Le|zn|Xe,dk=Le|Xe,lk=Le|zn|Xe|Es,hk=Vl|Pl;var fk=Number.MAX_SAFE_INTEGER-1;var Bt=(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))(Bt||{});var ks=256;var Wl=256,Gt=8192,Ht=2048,Vt=512,Kl=256,Xl=ks*2,$l=256,ui=32;var ae=(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.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Gt]="Sounds",e[e.Images=e.Sounds+Ht]="Images",e[e.Lights=e.Images+Vt]="Lights",e[e.ShadowLights=e.Lights+Wl]="ShadowLights",e[e.Items=e.ShadowLights+$l]="Items",e[e.PlayerSkins=e.Items+Kl]="PlayerSkins",e[e.General=e.PlayerSkins+ks]="General",e[e.WheelWeapons=e.General+Xl]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ui]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ui]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ui]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(ae||{}),gk=ae.MaxConfigStrings;var Yl={};ys(Yl,{addReplayFrame:()=>Jl,createReplaySession:()=>Zl,deserializeReplay:()=>ql,serializeReplay:()=>jl});function jl(e){return JSON.stringify(e,null,2)}function ql(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 Zl(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Jl(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var rt=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(rt||{});var Ee=(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))(Ee||{});function Fe(e,t){return(e&t)!==0}var li=(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))(li||{}),Ne=(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))(Ne||{});function Ms(e){let{velocity:t,frametime:n,onGround:r,groundIsSlick:i,onLadder:a,waterlevel:s,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,m=Tn(t);if(m<1)return{x:0,y:0,z:t.z};let d=0;if(r&&!i||a){let g=m<c?c:m;d+=g*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 ft(t,f)}function hi(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=De(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 bs(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=Math.min(r,30),o=De(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 Rs(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=Tn(a);if(s>i){let o=i/s;a=ft(a,o),s=i}return{wishdir:s===0?a:ws(a),wishspeed:s}}function Ts(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=Ft(a,{x:0,y:0,z:r.upmove}):r.upmove<-10?a=Ft(a,{x:0,y:0,z:r.upmove}):a=Ft(a,{x:0,y:0,z:10});let s=Tn(a);if(s>i){let o=i/s;a=ft(a,o),s=i}return s*=.5,{wishdir:s===0?a:ws(a),wishspeed:s}}function Ql(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function e0(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function fi(e){let{pmFlags:t,cmdAngles:n,deltaAngles:r}=e,i;(t&32)!==0?i={x:0,y:n.y+r.y,z:0}:(i=Ql(n,r),i={...i,x:e0(i.x)});let a=Ut(i);return{viewangles:i,...a}}var zs=200,Ls=200,Ns=200,Os=140,Is=150,Ps=3;function t0(e){let t=lt(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function Cs(e,t){return{x:t0(e.x+t.x),y:lt(e.y+t.y),z:lt(e.z+t.z)}}function Ds(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 $e=(e=>(e[e.STAT_HEALTH_ICON=0]="STAT_HEALTH_ICON",e[e.STAT_HEALTH=1]="STAT_HEALTH",e[e.STAT_AMMO_ICON=2]="STAT_AMMO_ICON",e[e.STAT_AMMO=3]="STAT_AMMO",e[e.STAT_ARMOR_ICON=4]="STAT_ARMOR_ICON",e[e.STAT_ARMOR=5]="STAT_ARMOR",e[e.STAT_SELECTED_ICON=6]="STAT_SELECTED_ICON",e[e.STAT_PICKUP_ICON=7]="STAT_PICKUP_ICON",e[e.STAT_PICKUP_STRING=8]="STAT_PICKUP_STRING",e[e.STAT_TIMER_ICON=9]="STAT_TIMER_ICON",e[e.STAT_TIMER=10]="STAT_TIMER",e[e.STAT_HELPICON=11]="STAT_HELPICON",e[e.STAT_SELECTED_ITEM=12]="STAT_SELECTED_ITEM",e[e.STAT_LAYOUTS=13]="STAT_LAYOUTS",e[e.STAT_FRAGS=14]="STAT_FRAGS",e[e.STAT_FLASHES=15]="STAT_FLASHES",e[e.STAT_CHASE=16]="STAT_CHASE",e[e.STAT_SPECTATOR=17]="STAT_SPECTATOR",e[e.STAT_WEAPONS_OWNED_1=18]="STAT_WEAPONS_OWNED_1",e[e.STAT_WEAPONS_OWNED_2=19]="STAT_WEAPONS_OWNED_2",e[e.STAT_AMMO_INFO_START=20]="STAT_AMMO_INFO_START",e))($e||{});function Fs(e){return e&511}var n0={};ys(n0,{U_ANGLE1:()=>u0,U_ANGLE2:()=>m0,U_ANGLE3:()=>d0,U_EFFECTS:()=>f0,U_EVENT:()=>_0,U_FRAME:()=>l0,U_MODEL:()=>i0,U_MODEL2:()=>y0,U_MODEL3:()=>w0,U_MODEL4:()=>x0,U_MOREBITS:()=>v0,U_NUMBER:()=>r0,U_ORIGIN1:()=>s0,U_ORIGIN2:()=>o0,U_ORIGIN3:()=>c0,U_REMOVE:()=>S0,U_RENDERFX:()=>g0,U_SKIN:()=>h0,U_SOLID:()=>p0,U_SOUND:()=>a0});var r0=1,i0=2,a0=4,s0=8,o0=16,c0=32,u0=64,m0=128,d0=256,l0=512,h0=1024,f0=2048,g0=4096,p0=8192,_0=16384,v0=32768,y0=1,w0=2,x0=4,S0=32768;var Us=(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))(Us||{}),pk=Object.keys(Us).length/2;var A0=Object.defineProperty,E0=(e,t)=>{for(var n in t)A0(e,n,{get:t[n],enumerable:!0})},In=null,On=[1,1,1,1],Bs=["ch1","ch2","ch3"],gi=[null,null,null],k0=e=>{for(let t=0;t<Bs.length;t++){let n=Bs[t];try{gi[t]=e.Draw_RegisterPic(`pics/${n}.pcx`)}catch{if(t===0)try{gi[t]=e.Draw_RegisterPic("pics/crosshair.pcx")}catch{e.Com_Print(`Failed to load crosshair image
|
|
142
|
-
`)}}}In=gi[0]},
|
|
143
|
-
`)}},
|
|
144
|
-
`)}},
|
|
145
|
-
`)}
|
|
146
|
-
`),m=n.height/2-u.length*10;for(let d of u)he.SCR_DrawCenterString(m,d),m+=16}M0(he,n.width,n.height)}function Cn(){return F0}var vi=1e-6,Pn=typeof Float32Array<"u"?Float32Array:Array,Ws=Math.random;function yi(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var H0={};E0(H0,{add:()=>$0,angle:()=>ph,bezier:()=>ch,ceil:()=>Y0,clone:()=>V0,copy:()=>K0,create:()=>Ys,cross:()=>ih,dist:()=>Eh,distance:()=>Qs,div:()=>Ah,divide:()=>Js,dot:()=>Si,equals:()=>wh,exactEquals:()=>yh,floor:()=>j0,forEach:()=>Rh,fromValues:()=>W0,hermite:()=>oh,inverse:()=>nh,len:()=>Mh,length:()=>js,lerp:()=>ah,max:()=>Z0,min:()=>q0,mul:()=>Sh,multiply:()=>Zs,negate:()=>th,normalize:()=>rh,random:()=>uh,rotateX:()=>hh,rotateY:()=>fh,rotateZ:()=>gh,round:()=>J0,scale:()=>Q0,scaleAndAdd:()=>eh,set:()=>X0,slerp:()=>sh,sqrDist:()=>kh,sqrLen:()=>bh,squaredDistance:()=>eo,squaredLength:()=>to,str:()=>vh,sub:()=>xh,subtract:()=>qs,transformMat3:()=>dh,transformMat4:()=>mh,transformQuat:()=>lh,zero:()=>_h});function Ys(){var e=new Pn(3);return Pn!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function V0(e){var t=new Pn(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function js(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function W0(e,t,n){var r=new Pn(3);return r[0]=e,r[1]=t,r[2]=n,r}function K0(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function X0(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function $0(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function qs(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function Zs(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function Js(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function Y0(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function j0(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function q0(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 Z0(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 J0(e,t){return e[0]=yi(t[0]),e[1]=yi(t[1]),e[2]=yi(t[2]),e}function Q0(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function eh(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 Qs(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 eo(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 to(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function th(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function nh(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function rh(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 Si(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function ih(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 ah(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 sh(e,t,n,r){var i=Math.acos(Math.min(Math.max(Si(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 oh(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 ch(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 uh(e,t){t=t===void 0?1:t;var n=Ws()*2*Math.PI,r=Ws()*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 mh(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 dh(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 lh(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 hh(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 fh(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 gh(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 ph(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&&Si(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function _h(e){return e[0]=0,e[1]=0,e[2]=0,e}function vh(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function yh(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function wh(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)<=vi*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(r-s)<=vi*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-o)<=vi*Math.max(1,Math.abs(i),Math.abs(o))}var xh=qs,Sh=Zs,Ah=Js,Eh=Qs,kh=eo,Mh=js,bh=to,Rh=(function(){var e=Ys();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 Th={runPitch:.002,runRoll:.01,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function zh(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 Lh(e,t,n){return t?e>210?n/400:e>100?n/800:n/1600:0}function Nh(e,t,n,r,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let a=Lh(t,r,i),s=e+a,c=Fe(n,Ee.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 Dn=class{constructor(e={}){this.bobTime=0,this.bobCycle=0,this.bobCycleRun=0,this.bobFracSin=0,this.settings={...Th,...e}}addKick(e){e.durationMs<=0||(this.kick={...e,remainingMs:e.durationMs})}get last(){return this.lastSample}sample(e,t){let{forward:n,right:r}=Ut(fi({pmFlags:e.pmFlags,cmdAngles:e.viewAngles,deltaAngles:e.deltaAngles??ht}).viewangles),i=Math.sqrt(e.velocity.x*e.velocity.x+e.velocity.y*e.velocity.y),a=Fe(e.pmFlags,Ee.OnGround),s=Nh(this.bobTime,i,e.pmFlags,a,t);this.bobTime=s.bobTime,this.bobCycle=s.bobCycle,this.bobCycleRun=s.bobCycleRun,this.bobFracSin=s.bobFracSin;let o=De(e.velocity,n)*this.settings.runPitch,c=De(e.velocity,r),u=c<0?-1:1,d=Math.abs(c)*this.settings.runRoll;d>2&&(d=2),d*=u;let h=this.bobFracSin*this.settings.bobPitch*i,f=this.bobFracSin*this.settings.bobRoll*i;Fe(e.pmFlags,Ee.Ducked)&&a&&(h*=6,f*=6),o+=Math.min(h,this.settings.maxBobAngle),f=Math.min(f,this.settings.maxBobAngle),this.bobCycle&1&&(f=-f),d+=f;let g=Math.min(this.bobFracSin*i*this.settings.bobUp,this.settings.maxBobHeight),p=0,l=0;if(this.kick&&this.kick.remainingMs>0){let A=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));p+=A*this.kick.pitch,l+=A*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-t),this.kick.remainingMs===0&&(this.kick=void 0)}let S={angles:{x:o+p,y:0,z:d+l},offset:zh({x:0,y:0,z:g}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:i};return this.lastSample=S,S}},Oh={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},no=800,Ue={x:0,y:0,z:0},Ih=250;function it(){return{origin:Ue,velocity:Ue,viewAngles:Ue,onGround:!1,pmFlags:Ee.OnGround,pmType:li.Normal,waterLevel:rt.None,gravity:no,deltaAngles:Ue,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:0,damageIndicators:[],blend:[0,0,0,0],stats:[],kick_angles:Ue,gunoffset:Ue,gunangles:Ue,gunindex:0,pickupIcon:void 0,centerPrint:void 0,notify:void 0,client:void 0,health:0,armor:0,ammo:0}}function Ks(e){return e?{...it(),...e,origin:{...e.origin},velocity:{...e.velocity},viewAngles:{...e.viewAngles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:Ue,blend:e.blend?[...e.blend]:[0,0,0,0],damageIndicators:e.damageIndicators?[...e.damageIndicators]:[],stats:e.stats?[...e.stats]:[]}:it()}function ge(e,t,n){return e+(t-e)*n}function wi(e,t,n){let r=lt(t-e);return r>180&&(r-=360),lt(e+r*n)}function pt(e,t,n){let r=Math.max(0,Math.min(n,1));return{...t,origin:{x:ge(e.origin.x,t.origin.x,r),y:ge(e.origin.y,t.origin.y,r),z:ge(e.origin.z,t.origin.z,r)},velocity:{x:ge(e.velocity.x,t.velocity.x,r),y:ge(e.velocity.y,t.velocity.y,r),z:ge(e.velocity.z,t.velocity.z,r)},viewAngles:{x:wi(e.viewAngles.x,t.viewAngles.x,r),y:wi(e.viewAngles.y,t.viewAngles.y,r),z:wi(e.viewAngles.z,t.viewAngles.z,r)},damageAlpha:ge(e.damageAlpha,t.damageAlpha,r),blend:[ge(e.blend[0],t.blend[0],r),ge(e.blend[1],t.blend[1],r),ge(e.blend[2],t.blend[2],r),ge(e.blend[3],t.blend[3],r)],health:ge(e.health||0,t.health||0,r),armor:ge(e.armor||0,t.armor||0,r),ammo:ge(e.ammo||0,t.ammo||0,r)}}function Ph(e,t,n,r){let i=Math.min(Math.max(t.msec,0),Ih)/1e3,a=Fe(e.pmFlags,Ee.OnGround),s=Fe(e.pmFlags,Ee.OnLadder),o=Ms({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}=fi({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??Ue}),d=e.waterLevel>rt.None?Ts({forward:u,right:m,cmd:t,maxSpeed:n.pmWaterSpeed}):Rs({forward:u,right:m,cmd:t,maxSpeed:n.pmMaxSpeed});if(e.waterLevel>rt.None)o=hi({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmWaterAccelerate,frametime:i});else if(a||s){let g=Fe(e.pmFlags,Ee.Ducked)?n.pmDuckSpeed:n.pmMaxSpeed,p=d.wishspeed>g?{wishdir:d.wishdir,wishspeed:g}:d;o=hi({velocity:o,wishdir:p.wishdir,wishspeed:p.wishspeed,accel:n.pmAccelerate,frametime:i})}else o=bs({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:n.pmAirAccelerate,frametime:i}),o={...o,z:o.z-(e.gravity??no)*i};let f=r(e.origin,Ft(e.origin,ft(o,i))).endpos;return{...e,origin:f,velocity:o,viewAngles:c}}var Fn=class{constructor(e,t={}){this.baseFrame={frame:0,timeMs:0,state:it()},this.commands=[],this.predicted=it(),this.settings={...Oh,...t},this.trace=e,this.predicted=this.baseFrame.state??it()}setAuthoritative(e){let t=Ks(e.state);return this.baseFrame={...e,state:t},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>e.frame),this.recompute()}enqueueCommand(e){return this.commands.push(e),this.recompute()}getPredictedState(){return this.predicted}recompute(){let e=Ks(this.baseFrame.state);for(let t of this.commands)e=Ph(e,t,this.settings,this.trace);return this.predicted=e,e}},Ae=null;function Ch(){if(!Ae){console.error("CGame Init: cgame imports not set");return}Ae.Com_Print(`===== CGame Initialization =====
|
|
147
|
-
`),
|
|
148
|
-
`)}function
|
|
149
|
-
`),Ae=null}function Fh(e,t,n,r,i,a,s){G0(e,t,n,r,i,a,s)}function Uh(){B0()}function Bh(e){return 0}function Gh(e){return 0}function Hh(e){return[]}function Vh(e,t){return 0}function Wh(e){return 0}function Kh(e){return 0}function Xh(e){}function $h(e,t){}function Yh(e,t,n){if(!Ae)return;Cn().setCenterPrint(e,Ae.CL_ClientTime())}function jh(e,t,n){if(!Ae)return;Cn().addNotification(t,n,Ae.CL_ClientTime())}function qh(e){Cn().clearNotifications()}function Zh(e){Cn().clearCenterPrint()}function Jh(e){return{x:0,y:0,z:0}}function Qh(e){return null}function ro(e){return Ae=e,{Init:Ch,Shutdown:Dh,DrawHUD:Fh,TouchPics:Uh,LayoutFlags:Bh,GetActiveWeaponWheelWeapon:Gh,GetOwnedWeaponWheelWeapons:Hh,GetWeaponWheelAmmoCount:Vh,GetPowerupWheelCount:Wh,GetHitMarkerDamage:Kh,Pmove:Xh,ParseConfigString:$h,ParseCenterPrint:Yh,NotifyMessage:jh,ClearNotify:qh,ClearCenterprint:Zh,GetMonsterFlashOffset:Jh,GetExtension:Qh}}function io(e,t){let n=new Map,r=new Set,i=()=>e.engine.renderer;return{get tick_rate(){return t.tickRate},get frame_time_s(){return t.frameTimeMs/1e3},get frame_time_ms(){return t.frameTimeMs},Com_Print:a=>{console.log(`[CGAME] ${a}`)},Com_Error:a=>{console.error(`[CGAME ERROR] ${a}`)},get_configstring:a=>t.configStrings.get(a)||"",TagMalloc:(a,s)=>({}),TagFree:a=>{},FreeTags:a=>{},cvar:(a,s,o)=>{let c=e.host?.cvars?.get(a);return c||null},cvar_set:(a,s)=>{e.host?.cvars?.setValue(a,s)},cvar_forceset:(a,s)=>{e.host?.cvars?.setValue(a,s)},CL_FrameValid:()=>!0,CL_FrameTime:()=>t.frameTimeMs,CL_ClientTime:()=>t.frameTimeMs,CL_ServerFrame:()=>t.serverFrame,CL_ServerProtocol:()=>t.serverProtocol,CL_GetClientName:a=>t.getClientName(a),CL_GetClientPic:a=>"",CL_GetClientDogtag:a=>"",CL_GetKeyBinding:a=>t.getKeyBinding(a),Draw_RegisterPic:a=>(n.has(a)||r.has(a)||(r.add(a),e.engine.assets&&e.engine.assets.loadTexture(a).then(s=>{if(e.engine.renderer){let o=e.engine.renderer.registerTexture(a,s);n.set(a,o)}r.delete(a)}).catch(s=>{console.warn(`[CGameImport] Failed to load pic: ${a}`,s),r.delete(a)})),a),Draw_GetPicSize:a=>{let s=a,o=n.get(s);return o?{width:o.width,height:o.height}:{width:0,height:0}},SCR_DrawChar:(a,s,o)=>{i()?.drawString(a,s,String.fromCharCode(o))},SCR_DrawPic:(a,s,o)=>{let c=o,u=n.get(c);u&&i()?.drawPic(a,s,u)},SCR_DrawColorPic:(a,s,o,c,u)=>{let m=o,d=n.get(m);d&&i()?.drawPic(a,s,d,[c.x,c.y,c.z,u])},SCR_DrawFontString:(a,s,o)=>{i()?.drawString(a,s,o)},SCR_DrawCenterString:(a,s)=>{i()?.drawCenterString(a,s)},SCR_MeasureFontString:a=>a.replace(/\^[0-9]/g,"").length*8,SCR_FontLineHeight:()=>8,SCR_SetAltTypeface:a=>{},SCR_DrawBind:(a,s,o)=>{let c=t.getKeyBinding(o);i()?.drawString(a,s,`[${o}]`)},Localize:a=>a,CL_GetTextInput:()=>"",CL_GetWarnAmmoCount:()=>5,CL_InAutoDemoLoop:()=>t.inAutoDemo,PM_Trace:(a,s,o,c)=>e.engine.trace(a,s,o,c)}}var Oe=null,Ye=0,ef=[1,1,1,1],_t=!0,Wt=["ch1","ch2","ch3"],vt=[null,null,null],ao=async(e,t)=>{for(let n=0;n<Wt.length;n++){let r=Wt[n];try{let i=await t.loadTexture(`pics/${r}.pcx`);vt[n]=e.registerTexture(r,i)}catch{if(n===0)try{let a=await t.loadTexture("pics/crosshair.pcx");vt[n]=e.registerTexture("crosshair",a)}catch{console.error("Failed to load crosshair image")}}}Oe=vt[0]};var so=()=>{if(_t?(Ye++,Ye>=Wt.length&&(_t=!1,Ye=0)):(_t=!0,Ye=0),_t){if(Oe=vt[Ye],!Oe){let e=!1;for(let t=0;t<Wt.length;t++){let n=(Ye+t)%Wt.length;if(vt[n]){Ye=n,Oe=vt[n],e=!0;break}}e||(Oe=null)}}else Oe=null;return _t?Ye:-1},oo=(e,t,n)=>{if(_t&&Oe){let r=(t-Oe.width)/2,i=(n-Oe.height)/2;e.drawPic(r,i,Oe,ef)}};var tf=Object.defineProperty,wo=(e,t)=>{for(var n in t)tf(e,n,{get:t[n],enumerable:!0})},K={x:0,y:0,z:0};var kk=Math.PI/180;function nf(e){return{x:e.x,y:e.y,z:e.z}}function B(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function N(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function G(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function xo(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function rf(e){return xo(e,e)}function Mt(e){return Math.sqrt(rf(e))}function D(e){let t=Mt(e);return t===0?e:G(e,1/t)}function af(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 sf(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 Fi=0,Ui=1,So=2,of=Math.PI/180,cf=180/Math.PI;function Xt(e,t){switch(t){case Fi:return e.x;case Ui:return e.y;case So:default:return e.z}}function Bn(e){return e*of}function zi(e){return e*cf}function Li(e){let t=e%360;return t<0?360+t:t}function J(e){let t=Bn(Xt(e,Ui)),n=Bn(Xt(e,Fi)),r=Bn(Xt(e,So)),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 Bi(e){let t=Xt(e,Fi),n=Xt(e,Ui);if(t===0)return n===0?0:n>0?90:270;let r=zi(Math.atan2(n,t));return r<0?r+360:r}function Zt(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=zi(Math.atan2(n,t)):n>0?i=90:i=270,i<0&&(i+=360);let a=Math.sqrt(t*t+n*n),s=zi(Math.atan2(r,a));return s<0&&(s+=360),{x:-s,y:i,z:0}}var Ie=624,uf=397,mf=2567483615,df=2147483648,lf=2147483647,Ai=4294967296,hf=class{constructor(e=5489){this.state=new Uint32Array(Ie),this.index=Ie,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<Ie;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=Ie}nextUint32(){this.index>=Ie&&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<Ie;e++){let t=this.state[e]&df|this.state[(e+1)%Ie]&lf,n=this.state[(e+uf)%Ie]^t>>>1;(t&1)!==0&&(n^=mf),this.state[e]=n>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==Ie)throw new Error(`Expected ${Ie} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Ao=class{constructor(e={}){this.mt=new hf(e.seed)}seed(e){this.mt.seed(e)}frandom(){return this.mt.nextUint32()/Ai}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=Ai-Ai%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 Gi(e){return new Ao(e)}var pe=1,Je=2;var Hi=8,Vi=16,ff=32;var gf=16384;var Yn=65536,Eo=1<<17,pf=1<<18,_f=1<<19,vf=1<<20,yf=1<<21,wf=1<<22,xf=1<<23,Mk=1<<24,st=1<<25,jn=1<<26,bk=1<<27,Rk=1<<28,Tk=1<<29,bt=1<<30,zk=1<<31;var Lk=1<<25,Nk=1<<28,Ok=1<<29,Ik=1<<30,Pk=1<<31,Sf=pe|Je,Ck=pe|Yn|Je|st|bt,Dk=pe|Yn|Je,Hn=pe|Eo|Je|st|bt,Af=ff|Hi|Vi,Fk=pe|Vi|Hi,Jt=pe|st|bt|Je|jn,Uk=pf|_f|vf|yf|wf|xf,Bk=pe|Hi|Vi|st|bt,Gk=pe|Yn|Je,Hk=pe|Je,Vk=pe|Yn|Je|Eo,Wk=Jt|gf,Kk=Number.MAX_SAFE_INTEGER-1;var ko=256,Ef=256,kf=8192,Mf=2048,bf=512,Rf=256,Tf=ko*2,zf=256,Ei=32,Mo=(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.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+kf]="Sounds",e[e.Images=e.Sounds+Mf]="Images",e[e.Lights=e.Images+bf]="Lights",e[e.ShadowLights=e.Lights+Ef]="ShadowLights",e[e.Items=e.ShadowLights+zf]="Items",e[e.PlayerSkins=e.Items+Rf]="PlayerSkins",e[e.General=e.PlayerSkins+ko]="General",e[e.WheelWeapons=e.General+Tf]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ei]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ei]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ei]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Mo||{}),Xk=Mo.MaxConfigStrings,Lf={};wo(Lf,{addReplayFrame:()=>Pf,createReplaySession:()=>If,deserializeReplay:()=>Of,serializeReplay:()=>Nf});function Nf(e){return JSON.stringify(e,null,2)}function Of(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 If(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Pf(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||{}),xe=(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))(xe||{});var Cf={};wo(Cf,{U_ANGLE1:()=>Vf,U_ANGLE2:()=>Wf,U_ANGLE3:()=>Kf,U_EFFECTS:()=>Yf,U_EVENT:()=>Zf,U_FRAME:()=>Xf,U_MODEL:()=>Ff,U_MODEL2:()=>Qf,U_MODEL3:()=>e1,U_MODEL4:()=>t1,U_MOREBITS:()=>Jf,U_NUMBER:()=>Df,U_ORIGIN1:()=>Bf,U_ORIGIN2:()=>Gf,U_ORIGIN3:()=>Hf,U_REMOVE:()=>n1,U_RENDERFX:()=>jf,U_SKIN:()=>$f,U_SOLID:()=>qf,U_SOUND:()=>Uf});var Df=1,Ff=2,Uf=4,Bf=8,Gf=16,Hf=32,Vf=64,Wf=128,Kf=256,Xf=512,$f=1024,Yf=2048,jf=4096,qf=8192,Zf=16384,Jf=32768,Qf=1,e1=2,t1=4,n1=32768;var C=(e=>(e.Blaster="blaster",e.Shotgun="shotgun",e.SuperShotgun="super_shotgun",e.Machinegun="machinegun",e.Chaingun="chaingun",e.GrenadeLauncher="grenade_launcher",e.RocketLauncher="rocket_launcher",e.HyperBlaster="hyperblaster",e.Railgun="railgun",e.BFG10K="bfg10k",e.Grapple="grapple",e.ChainFist="chainfist",e.EtfRifle="etf_rifle",e.ProxLauncher="prox_launcher",e.IonRipper="ionripper",e.PlasmaBeam="plasmabeam",e.Phalanx="phalanx",e.Disruptor="disruptor",e))(C||{}),U=(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))(U||{}),$k=Object.keys(U).length/2,ye=(e=>(e.Shells="ammo_shells",e.Bullets="ammo_bullets",e.Rockets="ammo_rockets",e.Grenades="ammo_grenades",e.Cells="ammo_cells",e.Slugs="ammo_slugs",e))(ye||{}),$=(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))($||{});function Ze(e,t){return(e&t)!==0}var Rt=(e=>(e.BODY="body",e.COMBAT="combat",e.JACKET="jacket",e))(Rt||{}),r1={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 i1(e,t,n){if(e<=0||Ze(t,130)||!n.armorType||n.armorCount<=0)return{saved:0,remainingArmor:n.armorCount};let r=r1[n.armorType],i=Ze(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 a1(e,t,n,r,i,a={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(Ze(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:s}=J(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;Ze(t,4)&&(h=Math.max(1,Math.floor(h/2))),h>d&&(h=Math.floor(d));let f=h/m;Ze(t,4)&&(f*=2),f=Math.max(1,Math.floor(f));let g=Math.max(m,f),p=Math.max(0,i.cellCount-g);return{saved:h,remainingCells:p}}var Yk={[ye.Shells]:{id:ye.Shells,ammoType:U.Shells,quantity:10,weaponAmmo:!1},[ye.Bullets]:{id:ye.Bullets,ammoType:U.Bullets,quantity:50,weaponAmmo:!1},[ye.Rockets]:{id:ye.Rockets,ammoType:U.Rockets,quantity:5,weaponAmmo:!1},[ye.Grenades]:{id:ye.Grenades,ammoType:U.Grenades,quantity:5,weaponAmmo:!0},[ye.Cells]:{id:ye.Cells,ammoType:U.Cells,quantity:50,weaponAmmo:!1},[ye.Slugs]:{id:ye.Slugs,ammoType:U.Slugs,quantity:10,weaponAmmo:!1}};var oe=(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))(oe||{});var s1={...K};var jk=Object.freeze({aiflags:0,last_sighting:s1,trail_time:0,pausetime:0});var Wi=[{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:"style",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}],o1=20,c1=440,u1=940,ki=32,m1=1<<24,Vn=1;function co(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 Qe(e,t){let n=co(e),r=co(t),i=sf(n.mins,n.maxs,r.mins,r.maxs);return Math.sqrt(i)}function d1(e){return e<=o1?"melee":e<=c1?"near":e<=u1?"mid":"far"}function Yt(e,t){let{forward:n}=J(e.angles),r=D(N(t.origin,e.origin)),i=xo(r,n);return(e.spawnflags&Vn)!==0&&e.trail_time===0&&e.enemy===null?i>.15:i>-.3}function Qt(e,t,n,r){if((t.flags&m1)!==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 l1(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=Bi(n)}function bo(e){e.angles.y=Li(e.ideal_yaw)}function h1(e,t,n){e.enemy&&(e.goalentity=e.enemy,l1(e,e.enemy),bo(e),(e.monsterinfo.aiflags&1)!==0?e.monsterinfo.stand?.(e,n):(e.monsterinfo.run?.(e,n),e.attack_finished_time=t.timeSeconds+1))}function f1(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){h1(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 g1(e,t,n,r){let i=Qe(e,t),a=d1(i);return a==="far"||t.light_level<=5||!Qt(e,t,r,{throughGlass:!1})?!1:a==="near"?n.timeSeconds<=t.show_hostile||Yt(e,t):a==="mid"?Yt(e,t):!0}function p1(e,t,n,r,i){if((e.spawnflags&Vn)!==0){if(!Qt(e,t,i))return!1}else if(r.canHear&&!r.canHear(e,t))return!1;let a=N(t.origin,e.origin);return Mt(a)>1e3||r.areasConnected&&!r.areasConnected(e,t)?!1:(e.ideal_yaw=Bi(a),bo(e),e.monsterinfo.aiflags|=4,e.enemy=t,!0)}function _1(e,t){return t.sightEntity&&t.sightEntityFrame>=t.frameNumber-1&&(e.spawnflags&Vn)===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&Vn)===0?{candidate:t.sound2Entity,heardit:!0}:t.sightClient?{candidate:t.sightClient,heardit:!1}:{candidate:null,heardit:!1}}function v1(e){return(e.flags&ki)!==0?!0:(e.svflags&4)!==0&&e.enemy?(e.enemy.flags&ki)!==0:!!(e.enemy&&(e.enemy.flags&ki)!==0)}function Ki(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}=_1(e,t);if(!a||!a.inUse)return!1;if(a===e.enemy)return!0;if(v1(a))return!1;if(s){if(!p1(e,a,t,i,r))return!1}else{if(!g1(e,a,t,r))return!1;e.monsterinfo.aiflags&=-5,e.enemy=a}return f1(e,t,n),(e.monsterinfo.aiflags&4)===0&&e.monsterinfo.sight?.(e,e.enemy),!0}function Ro(e,t){if(t===0)return{x:0,y:0,z:0};let n=Bn(e);return{x:Math.cos(n)*t,y:Math.sin(n)*t,z:0}}function Xi(e,t,n){let r=Ro(t,n),i=e.origin;return i.x+=r.x,i.y+=r.y,i.z+=r.z,!0}function en(e,t){let n=Li(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=Li(n+a)}function ie(e,t){Xi(e,e.angles.y,t)}function qn(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=Bi(n)}function te(e,t,n){Ki(e,n.targetAwareness,n,n.trace)||en(e,t)}function ce(e,t,n,r){if(!Ki(e,r.targetAwareness,r,r.trace)&&(qn(e,e.goalentity),en(e,n),t!==0&&Xi(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&Qe(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 se(e,t,n,r){if((e.monsterinfo.aiflags&1)!==0){e.monsterinfo.stand?.(e,r);return}Ki(e,r.targetAwareness,r,r.trace),qn(e,e.enemy??e.goalentity),en(e,n),!(e.monsterinfo.checkattack&&e.monsterinfo.checkattack(e,r))&&t!==0&&To(e,e.angles.y,t,r)}function y1(e,t,n,r){t&&qn(e,t),en(e,r),n!==0&&Xi(e,e.angles.y,n)}function ne(e,t,n,r){qn(e,e.enemy),en(e,n),!(e.monsterinfo.checkattack&&e.monsterinfo.checkattack(e,r))&&t!==0&&To(e,e.angles.y,t,r)}function w1(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,Hn);if(e.groundentity=r.ent,!e.groundentity&&!r.allsolid&&!r.startsolid&&r.fraction===1){let i=t.pointcontents(n);i&Af?(e.waterlevel=1,e.watertype=i):(e.waterlevel=0,e.watertype=0)}}function x1(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,Hn).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,Hn).fraction<1))return!0;return!1}function To(e,t,n,r){if((e.flags&3)===0&&e.movetype!==1&&!e.groundentity&&e.waterlevel===0)return!1;let i=Ro(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,Hn).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&&!x1(e,r)?(e.origin.x=o.x,e.origin.y=o.y,e.origin.z=o.z,!1):((e.flags&3)===0&&w1(e,r),!0)}var S1=Wi.filter(e=>e.save||e.type==="callback"),qk=new Map(S1.map(e=>[e.name,e]));var Zk=1/40;function A1(e,t){let n=e.states.get(t);return n||(n={lastFireTime:0},e.states.set(t,n)),n}var E1=1;function k1(e,t){if(!e.client)return;let n=A1(e.client.weaponStates,C.Chaingun);!(e.client.buttons&E1)&&n.spinupCount&&n.spinupCount>0&&(t.sound(e,0,"weapons/chngnd1a.wav",1,0,0),n.spinupCount=0)}var zo={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:C.Blaster,ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:C.Shotgun,ammoType:U.Shells,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:C.SuperShotgun,ammoType:U.Shells,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:C.Machinegun,ammoType:U.Bullets,initialAmmo:50,pickupAmmo:50,fireRate:.1,think:k1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:C.Chaingun,ammoType:U.Bullets,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:C.GrenadeLauncher,ammoType:U.Grenades,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:C.RocketLauncher,ammoType:U.Rockets,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:C.HyperBlaster,ammoType:U.Cells,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:C.Railgun,ammoType:U.Slugs,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:C.BFG10K,ammoType:U.Cells,initialAmmo:50,pickupAmmo:50,fireRate:1}};function M1(e,t){if(!e)return 1;let n=e.client;if(!n)return 1;let r=1;return n.quad_time&&n.quad_time>t&&(r*=4),n.double_time&&n.double_time>t&&(r*=2),r}function b1(e,t,n,r,i){if(Ze(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=D(n),u=G(o,(t===e?1600:500)*r/s);return e.velocity=B(e.velocity,u),u}function R1(e,t,n,r,i){let a=r,s=0,o=0,c,u;if(e.powerArmor){let m=a1(r,i,t,n,e.powerArmor);s=m.saved,c=m.remainingCells,a-=s}if(e.regularArmor){let m=i1(a,i,e.regularArmor);o=m.saved,u=m.remainingArmor,a-=o}return[Math.max(0,a),s,o,c,u]}function uo(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 le(e,t,n,r,i,a,s,o,c,u,m,d){if(!e.takedamage)return null;let h=M1(n,m),f=s*h,g=o*h;if(!Ze(c,32)&&((e.flags??0)&1)!==0&&f>0)return{take:0,psave:0,asave:f,knocked:{x:0,y:0,z:0},killed:!1};let l=b1(e,n,r,g,c),[v,x,S,A,E]=R1(e,i,a,f,c);e.powerArmor&&A!==void 0&&(e.powerArmor.cellCount=A),e.regularArmor&&(e.regularArmor.armorCount=E??e.regularArmor.armorCount);let w=v;w>0&&(e.health-=w,d&&!Ze(c,1024)&&(e.classname==="player"||e.monsterinfo)&&d(i,1,_e.temp_entity,xe.BLOOD,i,a));let O=e.health<=0;return O?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:x,asave:S,knocked:l,killed:O,remainingCells:A,remainingArmor:E}}function $i(e,t,n,r,i,a,s,o,c,u={},m){let d=[],h=uo(t),f=u.canDamage??(()=>!0);for(let g of e){if(g===i||!g.takedamage||!f(g,t))continue;let p=g.mins&&g.maxs?af(h,B(g.origin,g.mins),B(g.origin,g.maxs)):uo(g),l=N(h,p),v=Mt(l);if(a>0&&v>a)continue;let x=r-.5*v;if(x<=0)continue;let S=g===n?x*.5:x,A=D(N(g.origin,h)),E=le(g,t,n,A,p,A,S,S,s|1,o,c,m);d.push({target:g,result:E,appliedDamage:S})}return d}var Jk=Gi();var Zn=.1,$t=80,Lo=Gi();function T1(){return Lo.frandom()}function No(e,t){return Math.floor(Lo.frandom()*(t-e+1)+e)}function St(e,t,n){te(e,Zn,n)}function ke(e,t,n){ce(e,t,Zn,n)}function yt(e,t,n){se(e,t,Zn,n)}function Q(e,t,n){ne(e,t,Zn,n)}function L(e,t,n){ie(e,t)}var jt={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 Te(e,t){t.sound(e,2,jt.footstep,1,1,0)}function Wn(e,t){e.monsterinfo.current_move=t,e.monsterinfo.nextframe=t.firstframe,e.frame=t.firstframe,e.monsterinfo.aiflags&=-129}function z1(e,t){}var Yi,Oo,L1,Io,N1,O1,I1,P1,C1,Po,D1;function F1(e,t){Wn(e,Yi)}function U1(e,t){e.monsterinfo.aiflags&1||e.enemy||T1()>.15||(Wn(e,Oo),t.sound(e,1,jt.idle,1,2,0))}var B1=[{ai:St,dist:0,think:U1},{ai:St,dist:0},{ai:St,dist:0},{ai:St,dist:0},{ai:St,dist:0}];Yi={firstframe:0,lastframe:4,frames:B1,endfunc:null};var G1=Array.from({length:20},()=>({ai:St,dist:0}));Oo={firstframe:5,lastframe:24,frames:G1,endfunc:F1};var H1=[{ai:ke,dist:9.1},{ai:ke,dist:6.3},{ai:ke,dist:4.9},{ai:ke,dist:6.7,think:Te},{ai:ke,dist:6},{ai:ke,dist:8.2},{ai:ke,dist:7.2},{ai:ke,dist:6.1},{ai:ke,dist:4.9},{ai:ke,dist:4.7,think:Te},{ai:ke,dist:4.7}];L1={firstframe:25,lastframe:35,frames:H1,endfunc:null};var V1=[{ai:yt,dist:21},{ai:yt,dist:11,think:Te},{ai:yt,dist:21},{ai:yt,dist:25,think:z1},{ai:yt,dist:18,think:Te},{ai:yt,dist:19}];Io={firstframe:36,lastframe:41,frames:V1,endfunc:null};function tn(e,t){e.monsterinfo.aiflags&1?Wn(e,Yi):Wn(e,Io)}function Co(e,t,n,r,i){let a={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},s=J(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*$t,y:a.y+s.y*$t,z:a.z+s.z*$t},u=i.trace(a,null,null,c,e,536870913);return!u.ent||!u.ent.takedamage?!1:(le(u.ent,e,e,s,u.endpos,u.plane?.normal||K,n,r,0,0,i.timeSeconds,i.multicast.bind(i)),!0)}function W1(e,t){Co(e,{x:$t,y:0,z:-24},No(5,11),80,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+1.2)}function Do(e,t){t.sound(e,1,jt.punch,1,1,0)}var K1=[{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0,think:Do},{ai:Q,dist:0,think:W1},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0}];N1={firstframe:67,lastframe:74,frames:K1,endfunc:tn};function X1(e,t){Co(e,{x:$t,y:0,z:-4},No(15,21),400,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+2.5)}var $1=[{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0,think:Te},{ai:Q,dist:0},{ai:Q,dist:0,think:Do},{ai:Q,dist:0},{ai:Q,dist:0,think:X1},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0}];O1={firstframe:75,lastframe:86,frames:$1,endfunc:tn};function Fo(e,t){t.sound(e,1,jt.thud,1,1,0),t.sound(e,2,jt.explod,.75,1,0);let{forward:n,right:r}=J(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,xe.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 g=Math.max(1,o*f*f),p=c*f*f,l=D(N(d.origin,s.endpos));if(le(d,e,e,l,d.origin,l,g,p,1,0,t.timeSeconds,t.multicast.bind(t)),d.client){let v={...d.velocity};v.z=Math.max(270,v.z),d.velocity=v}}}function Y1(e,t,n,r,i){if(e.health<=0){e.touch=void 0;return}}function ji(e,t){e.velocity.z<0?e.gravity=2.25*(800/800):e.gravity=5.25*(800/800)}function j1(e,t){if(!e.enemy)return;let n=N(e.enemy.origin,e.origin),i=Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)*1.95,a=D({x:n.x,y:n.y,z:0}),s=Zt(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)=>{Y1(c,u,m,d,t),c.groundentity&&(c.frame=104,Fo(c,t),c.touch=void 0)},ji(e,t)}function q1(e,t){if(ji(e,t),e.groundentity){e.monsterinfo.attack_finished=0,e.monsterinfo.aiflags&=-2049,e.frame=104,e.touch&&(Fo(e,t),e.touch=void 0);return}t.timeSeconds>(e.monsterinfo.attack_finished||0)?e.monsterinfo.nextframe=89:e.monsterinfo.nextframe=91}var Z1=[{ai:Q,dist:0},{ai:Q,dist:0},{ai:L,dist:0,think:j1},{ai:L,dist:0,think:ji},{ai:L,dist:0,think:q1},{ai:L,dist:0,think:Te},{ai:L,dist:0},{ai:L,dist:0,think:Te},{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:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0,think:Te}];I1={firstframe:87,lastframe:109,frames:Z1,endfunc:tn};var J1=[{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0}];P1={firstframe:149,lastframe:152,frames:J1,endfunc:tn};var Q1=Array.from({length:20},(e,t)=>({ai:L,dist:0,think:t%5===4?Te:void 0}));C1={firstframe:153,lastframe:172,frames:Q1,endfunc:tn};function Uo(e,t){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.monsterinfo.nextframe=Po.lastframe,e.nextthink=-1,e.deadflag=2}var eg=[{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0,think:Te},{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}];Po={firstframe:173,lastframe:185,frames:eg,endfunc:Uo};var tg=[{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0,think:Te},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0}];D1={firstframe:186,lastframe:193,frames:tg,endfunc:Uo};function ng(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&&le(m,u,u.owner,u.velocity,u.origin,d?d.normal:K,i,0,0,8,e.timeSeconds,e.multicast.bind(e));let f=e.findByRadius(u.origin,120);$i(f,u,u.owner,a,u.owner,120,0,9,e.timeSeconds,{},e.multicast.bind(e)),e.multicast(u.origin,2,_e.temp_entity,xe.ROCKET_EXPLOSION,u.origin),e.free(u)},e.finalizeSpawn(c)}function Bo(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);$i(u,c,c.owner,i,c.owner,120,0,6,e.timeSeconds,{},e.multicast.bind(e)),e.multicast(c.origin,2,_e.temp_entity,xe.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 rg(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?le(u,c,c.owner,c.velocity,c.origin,m?m.normal:K,i,1,0,s,e.timeSeconds,e.multicast.bind(e)):m&&e.multicast(c.origin,1,_e.temp_entity,xe.BLASTER,c.origin,m.normal),e.free(c))},e.finalizeSpawn(o)}function ig(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=D(N(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 g=e.trace(d,null,null,o,t,pe|st|bt|jn);if(!g.ent||g.fraction>=1||(g.ent.takedamage&&g.ent!==t.owner&&le(g.ent,t,t.owner,s,g.endpos,K,r,1,4,12,e.timeSeconds,e.multicast.bind(e)),!(g.ent.svflags&4)&&!g.ent.client&&g.ent.classname!=="misc_explobox"))break;u.push(g.ent),m.push(g.ent.solid),g.ent.solid=0,d={...g.endpos}}let h=e.trace(i,null,null,o,t,pe);e.multicast(t.origin,2,_e.temp_entity,xe.BFG_LASER,i,h.endpos)}finally{for(let h=0;h<u.length;h++)u[h].solid=m[h]}}function ag(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,Sf).fraction<1||ig(t,e,i,n)}t.scheduleThink(e,t.timeSeconds+.1)}function sg(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=N(e.origin,i),s=Mt(a),o=e.dmg_radius||100,c=(e.radius_dmg||200)*(1-Math.sqrt(s/o));c>0&&le(r,e,e.owner,e.velocity,i,K,Math.floor(c),0,4,14,t.timeSeconds,t.multicast.bind(t))}}if(e.frame++,e.frame>=5){t.free(e);return}t.scheduleThink(e,t.timeSeconds+.1)}function og(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&&le(u,c,c.owner,c.velocity,c.origin,m?m.normal:K,200,0,4,13,e.timeSeconds,e.multicast.bind(e));let h=e.findByRadius(c.origin,100);$i(h,c,c.owner,200,u,100,4,13,e.timeSeconds,{},e.multicast.bind(e)),e.multicast(c.origin,2,_e.temp_entity,xe.BFG_BIGEXPLOSION,c.origin),c.solid=0,c.touch=void 0,c.velocity=K,c.modelindex=e.modelIndex("sprites/s_bfg3.sp2"),c.frame=0,c.enemy=u,c.think=(f,g)=>sg(f,g),e.scheduleThink(c,e.timeSeconds+.1)},o.think=(c,u)=>ag(c,u),e.scheduleThink(o,e.timeSeconds+.016),e.finalizeSpawn(o)}function mo(){return 2*Math.random()-1}function Kn(e,t,n,r,i,a,s,o,c,u=0){let m=n;if(a>0||s>0){let f=Zt(n),{right:g,up:p}=J(f),l=mo()*a,v=mo()*s;m={x:n.x+g.x*l+p.x*v,y:n.y+g.y*l+p.y*v,z:n.z+g.z*l+p.z*v},m=D(m)}let d=B(t,G(m,8192)),h=c.trace(t,d,K,K,e,Jt);!h.ent||h.fraction===1||le(h.ent,e,e,m,h.endpos,h.plane?.normal||K,r,i,18,u,c.timeSeconds)}var at=Kn;function cg(e,t,n,r,i,a,s,o,c,u,m=2){for(let d=0;d<o;d++)at(e,t,n,r,i,a,s,c,u,m)}function Ve(e,t,n,r,i,a,s,o,c=1){rg(o,e,t,n,r,i,c)}function ug(e,t,n,r,i,a,s){Bo(s,e,t,n,r,i)}function nn(e,t,n,r,i,a,s){ng(s,e,t,n,r,120,i)}function Go(e,t,n,r,i,a,s,o,c){og(c,e,t,n,r,i,s)}function Ho(e,t,n,r,i,a,s){let o=B(t,G(n,8192)),c=s.trace(t,o,K,K,e,Jt);s.multicast(t,2,_e.temp_entity,xe.RAILTRAIL,t,c.endpos),c.ent&&c.ent.takedamage&&le(c.ent,e,e,n,c.endpos,K,r,i,6,11,s.timeSeconds)}function rn(e,t,n,r,i){if(!e.enemy)return!1;let{forward:a}=J(e.angles),s={...e.origin};s.z+=e.viewheight||0;let o=t.x>0?t.x:80,c=B(s,G(a,o)),u=i.trace(s,c,K,K,e,Jt);if(u.ent===e.enemy||u.ent&&u.ent.takedamage){let m=D(N(u.endpos,s));return le(u.ent,e,e,m,u.endpos,u.plane?.normal||K,n,r,0,0,i.timeSeconds),!0}return!1}function mg(e,t,n,r,i,a,s,o){nn(e,t,n,r,i,a,o)}function lo(e,t){let n={...e.origin},r=B(n,G(e.movedir,2048)),i=t.trace(n,r,K,K,e,pe|st|bt|jn);e.dmg>0&&i.ent&&i.ent.takedamage&&i.ent!==e.owner&&le(i.ent,e,e.owner,e.movedir,i.endpos,K,e.dmg,0,4,31,t.timeSeconds),i.ent&&i.ent.solid===3&&t.multicast(i.endpos,1,_e.temp_entity,xe.LASER_SPARKS,10,i.endpos,i.plane?.normal||K,e.skin),t.linkentity(e)}function dg(e,t){e.owner&&(e.owner.beam===e&&(e.owner.beam=null),e.owner.beam2===e&&(e.owner.beam2=null)),t.free(e)}function ho(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?dg(s,o):s.nextthink=o.timeSeconds+.1},a.postthink=(s,o)=>{r(s,o),lo(s,o)},n?e.beam2=a:e.beam=a),a.timestamp=i.timeSeconds+.2,a.nextthink=i.timeSeconds+.01,r(a,i),lo(a,i)}var qi=.1,lg={x:0,y:30,z:-15},hg={x:0,y:15,z:0},fg={x:0,y:-15,z:0},gg={x:0,y:-30,z:-15},pg={x:30,y:20,z:0},_g={x:30,y:-20,z:0};function vg(e,t,n){te(e,qi,n)}function yg(e,t,n){ce(e,t,qi,n)}function Jn(e,t,n){ne(e,t,qi,n)}function Zi(e,t,n){ie(e,t)}var Ji,Vo,Wo,wg,Ko,Xo,xg,Sg,Ag,$o;function Eg(e){e.monsterinfo.current_move=Ji}function kg(e){e.monsterinfo.current_move=Vo}function an(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Wo:e.monsterinfo.current_move=Ji}function Yo(e){e.monsterinfo.current_move=Ko}function Mg(e){e.enemy&&Yt(e,e.enemy)&&Math.random()<=.7?Yo(e):e.monsterinfo.current_move=Xo}function Ni(e,t){let{forward:n,right:r,up:i}=J(e.angles),a={...e.origin},s=G(n,t.x),o=G(r,t.y),c=G(i,t.z);return B(B(B(a,s),o),c)}function bg(e,t){if(!e.enemy)return;t.engine.sound?.(e,1,"boss2/machgun.wav",1,1,0);let n=Ni(e,pg),r=D(N(e.enemy.origin,n));at(e,n,r,6,4,.1,.05,0,t,4);let i=Ni(e,_g),a=D(N(e.enemy.origin,i));at(e,i,a,6,4,.1,.05,0,t,4)}function Rg(e,t){if(!e.enemy)return;let n=[lg,hg,fg,gg],r=n[Math.floor(Math.random()*n.length)],i=Ni(e,r),a=D(N(e.enemy.origin,i));nn(e,i,a,50,500,0,t)}function Tg(e){e.monsterinfo.nextframe=$o.lastframe,e.nextthink=-1}var jo=Array.from({length:20},()=>({ai:yg,dist:10}));Vo={firstframe:0,lastframe:19,frames:jo,endfunc:kg};Wo={firstframe:0,lastframe:19,frames:jo,endfunc:an};var zg=Array.from({length:21},()=>({ai:vg,dist:0}));Ji={firstframe:29,lastframe:49,frames:zg,endfunc:Eg};var Lg=Array.from({length:9},(e,t)=>({ai:Jn,dist:2,think:t===8?Yo:null}));wg={firstframe:50,lastframe:58,frames:Lg,endfunc:null};var Ng=Array.from({length:6},()=>({ai:Jn,dist:2,think:bg}));Ko={firstframe:59,lastframe:64,frames:Ng,endfunc:Mg};var Og=Array.from({length:4},()=>({ai:Jn,dist:2}));Xo={firstframe:65,lastframe:68,frames:Og,endfunc:an};var Ig=Array.from({length:21},(e,t)=>({ai:Jn,dist:2,think:t===12?Rg:null}));xg={firstframe:69,lastframe:89,frames:Ig,endfunc:an};var Pg=Array.from({length:18},()=>({ai:Zi,dist:0}));Sg={firstframe:90,lastframe:107,frames:Pg,endfunc:an};var Cg=Array.from({length:4},()=>({ai:Zi,dist:0}));Ag={firstframe:108,lastframe:111,frames:Cg,endfunc:an};var Dg=Array.from({length:49},()=>({ai:Zi,dist:0}));$o={firstframe:112,lastframe:160,frames:Dg,endfunc:Tg};var Qn=.1,Qi=80,er=Math.random;function qo(e,t,n){te(e,Qn,n)}function Me(e,t,n){ce(e,t,Qn,n)}function be(e,t,n){se(e,t,Qn,n)}function k(e,t,n){ne(e,t,Qn,n)}function T(e,t,n){ie(e,t)}var ea,Fg,Ug,Zo,Jo,Bg,Gg,Hg,Vg,Wg,Kg,Xg,$g,Yg;function Qo(e){e.monsterinfo.current_move=ea}function et(e){e.monsterinfo.power_armor_type=1,e.monsterinfo.aiflags&4?e.monsterinfo.current_move=ea:e.monsterinfo.current_move=Zo}function jg(e,t){t.engine.sound?.(e,0,"brain/melee1.wav",1,1,0)}function qg(e,t){let n={x:Qi,y:e.maxs.x,z:8};rn(e,n,15+Math.floor(er()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function Zg(e,t){t.engine.sound?.(e,0,"brain/melee2.wav",1,1,0)}function Jg(e,t){let n={x:Qi,y:e.mins.x,z:8};rn(e,n,15+Math.floor(er()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function ec(e,t){e.count=0,e.monsterinfo.power_armor_type=0,t.engine.sound?.(e,0,"brain/brnatck1.wav",1,1,0)}function tc(e,t){rn(e,{x:Qi,y:0,z:8},10+Math.floor(er()*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 nc(e){e.monsterinfo.power_armor_type=1,e.count&&(e.count=0,e.monsterinfo.current_move=Jo)}function fo(e,t){if(!e.enemy)return;let n=J(e.angles).forward,r={...e.origin};r.z+=24;let i={...e.enemy.origin};if(t.trace(r,i,K,K,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,xe.PARASITE_ATTACK,e,r,i);let s=N(r,i);le(e.enemy,e,e,s,e.enemy.origin,K,5,0,0,37,t.timeSeconds),e.origin={...e.origin,z:e.origin.z+1};let o=J(e.angles).forward;e.enemy.velocity=G(o,-1200)}var go=[{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}],po=[{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 Qg(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=J(n.angles),s=n.frame-0;(s<0||s>=go.length)&&(s=0);let o=go[s],c=B(n.origin,G(i,o.x));c=B(c,G(r,o.y)),c=B(c,G(a,o.z));let u=D(N(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function ep(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=J(n.angles),s=n.frame-0;(s<0||s>=po.length)&&(s=0);let o=po[s],c=B(n.origin,G(i,o.x));c=B(c,G(r,o.y)),c=B(c,G(a,o.z));let u=D(N(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function Pe(e,t){ho(e,1,!1,Qg,t),ho(e,1,!0,ep,t)}function tp(e){er()<.5&&e.enemy&&e.enemy.health>0&&(e.frame=0)}function np(e){return e.monsterinfo.aiflags&16||(e.monsterinfo.aiflags|=16),!0}function rp(e){}function ip(e){e.monsterinfo.aiflags&=-17}var ap=Array.from({length:30},()=>({ai:qo,dist:0}));ea={firstframe:162,lastframe:191,frames:ap,endfunc:Qo};var sp=Array.from({length:30},()=>({ai:qo,dist:0}));Fg={firstframe:192,lastframe:221,frames:sp,endfunc:Qo};var op=[{ai:Me,dist:7},{ai:Me,dist:2},{ai:Me,dist:3},{ai:Me,dist:3},{ai:Me,dist:1},{ai:Me,dist:0},{ai:Me,dist:0},{ai:Me,dist:9},{ai:Me,dist:-4},{ai:Me,dist:-1},{ai:Me,dist:2}];Ug={firstframe:0,lastframe:10,frames:op,endfunc:null};var cp=[{ai:be,dist:9},{ai:be,dist:2},{ai:be,dist:3},{ai:be,dist:3},{ai:be,dist:1},{ai:be,dist:0},{ai:be,dist:0},{ai:be,dist:10},{ai:be,dist:-4},{ai:be,dist:-1},{ai:be,dist:2}];Zo={firstframe:0,lastframe:10,frames:cp,endfunc:null};var up=[{ai:k,dist:8},{ai:k,dist:3},{ai:k,dist:5},{ai:k,dist:0},{ai:k,dist:-3,think:jg},{ai:k,dist:0},{ai:k,dist:-5},{ai:k,dist:-7,think:qg},{ai:k,dist:0},{ai:k,dist:6,think:Zg},{ai:k,dist:1},{ai:k,dist:2,think:Jg},{ai:k,dist:-3},{ai:k,dist:6},{ai:k,dist:-1},{ai:k,dist:-3},{ai:k,dist:2},{ai:k,dist:-11}];Jo={firstframe:53,lastframe:70,frames:up,endfunc:et};var mp=[{ai:k,dist:5},{ai:k,dist:-4},{ai:k,dist:-4},{ai:k,dist:-3},{ai:k,dist:0,think:ec},{ai:k,dist:0},{ai:k,dist:13,think:tc},{ai:k,dist:0},{ai:k,dist:2},{ai:k,dist:0},{ai:k,dist:-9,think:nc},{ai:k,dist:0},{ai:k,dist:4},{ai:k,dist:3},{ai:k,dist:2},{ai:k,dist:-3},{ai:k,dist:-6}];Bg={firstframe:71,lastframe:87,frames:mp,endfunc:et};var dp=[{ai:k,dist:5},{ai:k,dist:-4},{ai:k,dist:-4},{ai:k,dist:-3},{ai:k,dist:0,think:ec},{ai:k,dist:0,think:fo},{ai:k,dist:13},{ai:k,dist:0,think:tc},{ai:k,dist:2},{ai:k,dist:0,think:fo},{ai:k,dist:-9,think:nc},{ai:k,dist:0},{ai:k,dist:4},{ai:k,dist:3},{ai:k,dist:2},{ai:k,dist:-3},{ai:k,dist:-6}];Gg={firstframe:71,lastframe:87,frames:dp,endfunc:et};var lp=[{ai:k,dist:9,think:Pe},{ai:k,dist:2,think:Pe},{ai:k,dist:3,think:Pe},{ai:k,dist:3,think:Pe},{ai:k,dist:1,think:Pe},{ai:k,dist:0,think:Pe},{ai:k,dist:0,think:Pe},{ai:k,dist:10,think:Pe},{ai:k,dist:-4,think:Pe},{ai:k,dist:-1,think:Pe},{ai:k,dist:2,think:tp}];Hg={firstframe:0,lastframe:10,frames:lp,endfunc:et};var hp=[{ai:T,dist:-6},{ai:T,dist:-2},{ai:T,dist:-6},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:2},{ai:T,dist:0},{ai:T,dist:2},{ai:T,dist:1},{ai:T,dist:7},{ai:T,dist:0},{ai:T,dist:3},{ai:T,dist:-1}];Vg={firstframe:88,lastframe:108,frames:hp,endfunc:et};var fp=[{ai:T,dist:-2},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:3},{ai:T,dist:1},{ai:T,dist:-2}];Wg={firstframe:109,lastframe:116,frames:fp,endfunc:et};var gp=[{ai:T,dist:-2},{ai:T,dist:2},{ai:T,dist:1},{ai:T,dist:3},{ai:T,dist:0},{ai:T,dist:-4}];Kg={firstframe:117,lastframe:122,frames:gp,endfunc:et};var pp=Array.from({length:18},()=>({ai:T,dist:0}));Xg={firstframe:123,lastframe:140,frames:pp,endfunc:rc};var _p=[{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:0},{ai:T,dist:9},{ai:T,dist:0}];$g={firstframe:141,lastframe:145,frames:_p,endfunc:rc};var vp=[{ai:T,dist:0},{ai:T,dist:-2,think:np},{ai:T,dist:17,think:rp},{ai:T,dist:-3},{ai:T,dist:-1,think:ip},{ai:T,dist:-5},{ai:T,dist:-6},{ai:T,dist:-6}];Yg={firstframe:146,lastframe:153,frames:vp,endfunc:et};function rc(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var tr=.1,yp=80,Tt=Math.random;function ic(e,t,n){te(e,tr,n)}function wp(e,t,n){ce(e,t,tr,n)}function xp(e,t,n){se(e,t,tr,n)}function z(e,t,n){ne(e,t,tr,n)}function zt(e,t,n){ie(e,t)}var ta,ac,sc,Sp,na,Oi,Ap,ra,oc,Ep,kp,Mp,bp,Rp,Tp,cc;function uc(e){e.monsterinfo.current_move=ta}function zp(e){e.monsterinfo.current_move=ac}function ot(e){if(e.monsterinfo.aiflags&4){e.monsterinfo.current_move=ta;return}e.monsterinfo.current_move=sc}function Lp(e){e.monsterinfo.aiflags&4||e.enemy||Tt()<=.3&&(e.monsterinfo.current_move=cc)}function Np(e,t){Tt()<.5?t.engine.sound?.(e,2,"chick/chkidle1.wav",1,0,0):t.engine.sound?.(e,2,"chick/chkidle2.wav",1,0,0)}function Op(e,t){let n={x:yp,y:e.mins.x,z:10};t.engine.sound?.(e,0,"chick/chkatck3.wav",1,1,0),rn(e,n,10+Math.floor(Tt()*6),100,t)}function Ip(e,t){let{forward:n,right:r}=J(e.angles),i={x:0,y:20,z:40},a=B(e.origin,G(n,i.x)),s=G(r,i.y),o=B(a,s),c={...o,z:o.z+i.z},u=e.skin>1?500:650,m=!!e.monsterinfo.blindfire,d=K;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=N(d,c);!m&&e.enemy&&(Tt()<.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=D(h);e.skin>1?mg(e,c,f,50,u,0,.075,t):nn(e,c,f,50,u,0,t)}function Pp(e,t){if(t.engine.sound?.(e,0,"chick/chkatck1.wav",1,1,0),e.monsterinfo.blindfire&&e.monsterinfo.blind_fire_target){let n=N(e.monsterinfo.blind_fire_target,e.origin);e.ideal_yaw=Zt(n).y}}function Cp(e,t){t.engine.sound?.(e,0,"chick/chkatck5.wav",1,1,0)}function Dp(e){e.monsterinfo.current_move=na}function Fp(e){if(e.monsterinfo.blindfire){e.monsterinfo.blindfire=!1,e.monsterinfo.current_move=Oi;return}if(e.enemy&&e.enemy.health>0&&Tt()<=.6){e.monsterinfo.current_move=na;return}e.monsterinfo.current_move=Oi}function Up(e){if(e.enemy&&e.enemy.health>0&&Tt()<=.9){e.monsterinfo.current_move=ra;return}e.monsterinfo.current_move=oc}function Bp(e){e.monsterinfo.current_move=ra}var Gp=Array.from({length:30},(e,t)=>({ai:ic,dist:0,think:t===8?(n,r)=>Np(n,r):null}));cc={firstframe:201,lastframe:230,frames:Gp,endfunc:uc};var Hp=Array.from({length:30},(e,t)=>({ai:ic,dist:0,think:t===29?Lp:null}));ta={firstframe:101,lastframe:130,frames:Hp,endfunc:uc};var Vp=Array.from({length:10},()=>({ai:wp,dist:6}));ac={firstframe:171,lastframe:180,frames:Vp,endfunc:zp};var Wp=Array.from({length:10},()=>({ai:xp,dist:12}));sc={firstframe:171,lastframe:180,frames:Wp,endfunc:ot};var Kp=Array.from({length:5},()=>({ai:zt,dist:0}));Ep={firstframe:90,lastframe:94,frames:Kp,endfunc:ot};var Xp=Array.from({length:5},()=>({ai:zt,dist:0}));kp={firstframe:95,lastframe:99,frames:Xp,endfunc:ot};var $p=Array.from({length:21},()=>({ai:zt,dist:0}));Mp={firstframe:100,lastframe:120,frames:$p,endfunc:ot};var Yp=Array.from({length:12},()=>({ai:zt,dist:0}));bp={firstframe:48,lastframe:59,frames:Yp,endfunc:mc};var jp=Array.from({length:23},()=>({ai:zt,dist:0}));Rp={firstframe:60,lastframe:82,frames:jp,endfunc:mc};function mc(e){e.mins={x:-16,y:-16,z:0},e.maxs={x:16,y:16,z:16},e.movetype=7,e.nextthink=-1}var qp=[{ai:z,dist:0,think:Pp},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:4},{ai:z,dist:0},{ai:z,dist:-3},{ai:z,dist:3},{ai:z,dist:5},{ai:z,dist:7},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0},{ai:z,dist:0,think:Dp}];Sp={firstframe:0,lastframe:12,frames:qp,endfunc:null};var Zp=[{ai:z,dist:19,think:Ip},{ai:z,dist:-6},{ai:z,dist:-5},{ai:z,dist:-2},{ai:z,dist:-7},{ai:z,dist:0},{ai:z,dist:1},{ai:z,dist:10,think:Cp},{ai:z,dist:4},{ai:z,dist:5},{ai:z,dist:6},{ai:z,dist:6},{ai:z,dist:4},{ai:z,dist:3,think:Fp}];na={firstframe:13,lastframe:26,frames:Zp,endfunc:null};var Jp=[{ai:z,dist:-3},{ai:z,dist:0},{ai:z,dist:-6},{ai:z,dist:-4},{ai:z,dist:-2}];Oi={firstframe:27,lastframe:31,frames:Jp,endfunc:ot};var Qp=[{ai:z,dist:1},{ai:z,dist:8},{ai:z,dist:3}];Ap={firstframe:32,lastframe:34,frames:Qp,endfunc:Bp};var e_=[{ai:z,dist:1},{ai:z,dist:7,think:Op},{ai:z,dist:-7},{ai:z,dist:1},{ai:z,dist:-1},{ai:z,dist:1},{ai:z,dist:0},{ai:z,dist:1},{ai:z,dist:-2,think:Up}];ra={firstframe:35,lastframe:43,frames:e_,endfunc:null};var t_=[{ai:z,dist:-6},{ai:z,dist:-1},{ai:z,dist:-6},{ai:z,dist:0}];oc={firstframe:44,lastframe:47,frames:t_,endfunc:ot};var n_=Array.from({length:7},()=>({ai:zt,dist:0}));Tp={firstframe:83,lastframe:89,frames:n_,endfunc:ot};var nr=.1,r_=80,i_=24;function a_(e,t,n){te(e,nr,n)}function s_(e,t,n){ce(e,t,nr,n)}function dc(e,t,n){se(e,t,nr,n)}function re(e,t,n){ne(e,t,nr,n)}function ia(e,t,n){ie(e,t)}var o_,c_,lc,hc,u_,m_,d_,l_;function h_(e){e.monsterinfo.current_move=hc}function aa(e){e.monsterinfo.current_move=lc}function _o(e,t){rn(e,{x:r_,y:0,z:0},5,0,t)}function f_(e,t){t.engine.sound?.(e,0,"flipper/flpatck1.wav",1,1,0)}var g_=[{ai:a_,dist:0}];o_={firstframe:41,lastframe:41,frames:g_,endfunc:null};var p_=Array.from({length:24},()=>({ai:dc,dist:i_}));hc={firstframe:70,lastframe:93,frames:p_,endfunc:null};var __=Array.from({length:6},()=>({ai:dc,dist:8}));lc={firstframe:65,lastframe:70,frames:__,endfunc:h_};var v_=Array.from({length:24},()=>({ai:s_,dist:4}));c_={firstframe:41,lastframe:64,frames:v_,endfunc:null};var y_=Array.from({length:5},()=>({ai:ia,dist:0}));m_={firstframe:99,lastframe:103,frames:y_,endfunc:aa};var w_=Array.from({length:5},()=>({ai:ia,dist:0}));d_={firstframe:94,lastframe:98,frames:w_,endfunc:aa};var x_=[{ai:re,dist:0,think:f_},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0,think:_o},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0,think:_o},{ai:re,dist:0}];u_={firstframe:0,lastframe:19,frames:x_,endfunc:aa};function S_(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var A_=Array.from({length:56},()=>({ai:ia,dist:0}));l_={firstframe:104,lastframe:159,frames:A_,endfunc:S_};var rr=.1;function E_(e,t,n){te(e,rr,n)}function k_(e,t,n){ce(e,t,rr,n)}function M_(e,t,n){se(e,t,rr,n)}function b_(e,t,n){ne(e,t,rr,n)}function fc(e,t,n){ie(e,t)}var sa,gc,pc,R_,T_,_c;function z_(e){e.monsterinfo.current_move=sa}function L_(e){e.monsterinfo.current_move=gc}function oa(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=pc:e.monsterinfo.current_move=sa}function N_(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(N(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function O_(e){e.monsterinfo.nextframe=_c.lastframe,e.nextthink=-1}var I_=Array.from({length:46},()=>({ai:E_,dist:0}));sa={firstframe:0,lastframe:45,frames:I_,endfunc:z_};var P_=Array.from({length:46},()=>({ai:k_,dist:5}));gc={firstframe:0,lastframe:45,frames:P_,endfunc:L_};var C_=Array.from({length:46},()=>({ai:M_,dist:10}));pc={firstframe:0,lastframe:45,frames:C_,endfunc:oa};var D_=Array.from({length:20},(e,t)=>({ai:b_,dist:0,think:t===10?N_:null}));R_={firstframe:46,lastframe:65,frames:D_,endfunc:oa};var F_=Array.from({length:6},()=>({ai:fc,dist:0}));T_={firstframe:66,lastframe:71,frames:F_,endfunc:oa};var U_=Array.from({length:10},()=>({ai:fc,dist:0}));_c={firstframe:84,lastframe:93,frames:U_,endfunc:O_};var ir=.1;function B_(e,t,n){te(e,ir,n)}function G_(e,t,n){ce(e,t,ir,n)}function H_(e,t,n){se(e,t,ir,n)}function V_(e,t,n){ne(e,t,ir,n)}function vc(e,t,n){ie(e,t)}var ca,yc,wc,W_,K_,xc;function X_(e){e.monsterinfo.current_move=ca}function $_(e){e.monsterinfo.current_move=yc}function ua(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=wc:e.monsterinfo.current_move=ca}function Y_(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(N(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function j_(e,t){if(!e.enemy)return;let n=5+Math.random()*5;Qe(e,e.enemy)<=80&&Yt(e,e.enemy)&&le(e.enemy,e,e,D(N(e.enemy.origin,e.origin)),e.enemy.origin,K,n,5,2,0,t.timeSeconds)}function q_(e){e.monsterinfo.nextframe=xc.lastframe,e.nextthink=-1}var Z_=Array.from({length:46},()=>({ai:B_,dist:0}));ca={firstframe:0,lastframe:45,frames:Z_,endfunc:X_};var J_=Array.from({length:46},()=>({ai:G_,dist:5}));yc={firstframe:0,lastframe:45,frames:J_,endfunc:$_};var Q_=Array.from({length:46},()=>({ai:H_,dist:10}));wc={firstframe:0,lastframe:45,frames:Q_,endfunc:ua};var ev=Array.from({length:20},(e,t)=>({ai:V_,dist:0,think:t===10?Y_:t===12?j_:null}));W_={firstframe:46,lastframe:65,frames:ev,endfunc:ua};var tv=Array.from({length:6},()=>({ai:vc,dist:0}));K_={firstframe:66,lastframe:71,frames:tv,endfunc:ua};var nv=Array.from({length:10},()=>({ai:vc,dist:0}));xc={firstframe:84,lastframe:93,frames:nv,endfunc:q_};var ar=.1;function rv(e,t,n){te(e,ar,n)}function iv(e,t,n){ce(e,t,ar,n)}function av(e,t,n){se(e,t,ar,n)}function Sc(e,t,n){ne(e,t,ar,n)}function Ac(e,t,n){ie(e,t)}var ma,Ec,kc,sv,ov,cv,Mc;function uv(e){e.monsterinfo.current_move=ma}function mv(e){e.monsterinfo.current_move=Ec}function sr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=kc:e.monsterinfo.current_move=ma}function dv(e){return e<=80?"melee":e<=500?"near":e<=1e3?"mid":"far"}function lv(e,t){if(!e.enemy||!Yt(e,e.enemy))return;let n=Qe(e,e.enemy);if(dv(n)!=="melee")return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},i=D(N(e.enemy.origin,r));le(e.enemy,e,e,i,e.origin,{x:0,y:0,z:0},20,10,0,0,t.timeSeconds)}function hv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(N(e.enemy.origin,n));Ho(e,n,r,50,100,0,t)}function fv(e){e.monsterinfo.nextframe=Mc.lastframe,e.nextthink=-1}var gv=Array.from({length:30},()=>({ai:rv,dist:0}));ma={firstframe:0,lastframe:29,frames:gv,endfunc:uv};var pv=Array.from({length:40},()=>({ai:iv,dist:3}));Ec={firstframe:30,lastframe:69,frames:pv,endfunc:mv};var _v=Array.from({length:20},()=>({ai:av,dist:12}));kc={firstframe:70,lastframe:89,frames:_v,endfunc:sr};var vv=Array.from({length:10},(e,t)=>({ai:Sc,dist:0,think:t===5?lv:null}));sv={firstframe:90,lastframe:99,frames:vv,endfunc:sr};var yv=Array.from({length:12},(e,t)=>({ai:Sc,dist:0,think:t===6?hv:null}));ov={firstframe:100,lastframe:111,frames:yv,endfunc:sr};var wv=Array.from({length:6},()=>({ai:Ac,dist:0}));cv={firstframe:112,lastframe:117,frames:wv,endfunc:sr};var xv=Array.from({length:12},()=>({ai:Ac,dist:0}));Mc={firstframe:118,lastframe:129,frames:xv,endfunc:fv};var or=.1;function Sv(e,t,n){te(e,or,n)}function Av(e,t,n){ce(e,t,or,n)}function Ev(e,t,n){se(e,t,or,n)}function bc(e,t,n){ne(e,t,or,n)}function Rc(e,t,n){ie(e,t)}var da,Tc,zc,kv,Mv,bv,Lc;function Rv(e){e.monsterinfo.current_move=da}function Tv(e){e.monsterinfo.current_move=Tc}function cr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=zc:e.monsterinfo.current_move=da}function zv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},r=D(N(e.enemy.origin,n)),i=10,a=2;t.engine.sound?.(e,0,"gunner/gunatck2.wav",1,1,0),at(e,n,r,i,a,0,0,0,t,5)}function Lv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(N(e.enemy.origin,n)),i=50,a=600;t.engine.sound?.(e,0,"gunner/gunatck3.wav",1,1,0),Bo(t,e,n,r,i,a)}var Nv=Array.from({length:30},()=>({ai:Sv,dist:0}));da={firstframe:0,lastframe:29,frames:Nv,endfunc:Rv};var Ov=Array.from({length:40},()=>({ai:Av,dist:2}));Tc={firstframe:30,lastframe:69,frames:Ov,endfunc:Tv};var Iv=Array.from({length:20},()=>({ai:Ev,dist:10}));zc={firstframe:70,lastframe:89,frames:Iv,endfunc:cr};var Pv=Array.from({length:10},(e,t)=>({ai:bc,dist:0,think:t>=2&&t<=8?zv:null}));kv={firstframe:90,lastframe:99,frames:Pv,endfunc:cr};var Cv=Array.from({length:10},(e,t)=>({ai:bc,dist:0,think:t===5?Lv:null}));Mv={firstframe:100,lastframe:109,frames:Cv,endfunc:cr};var Dv=Array.from({length:8},()=>({ai:Rc,dist:0}));bv={firstframe:110,lastframe:117,frames:Dv,endfunc:cr};var Fv=Array.from({length:15},()=>({ai:Rc,dist:0}));function Uv(e){e.monsterinfo.nextframe=Lc.lastframe,e.nextthink=-1}Lc={firstframe:118,lastframe:132,frames:Fv,endfunc:Uv};var ur=.1;function Bv(e,t,n){te(e,ur,n)}function Gv(e,t,n){ce(e,t,ur,n)}function Hv(e,t,n){se(e,t,ur,n)}function Vv(e,t,n){ne(e,t,ur,n)}function Nc(e,t,n){ie(e,t)}var la,Oc,Ic,Wv,Kv,Pc;function Xv(e){e.monsterinfo.current_move=la}function $v(e){e.monsterinfo.current_move=Oc}function ha(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Ic:e.monsterinfo.current_move=la}function Yv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(N(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function jv(e){e.monsterinfo.nextframe=Pc.lastframe,e.nextthink=-1}var qv=Array.from({length:46},()=>({ai:Bv,dist:0}));la={firstframe:0,lastframe:45,frames:qv,endfunc:Xv};var Zv=Array.from({length:46},()=>({ai:Gv,dist:5}));Oc={firstframe:0,lastframe:45,frames:Zv,endfunc:$v};var Jv=Array.from({length:46},()=>({ai:Hv,dist:10}));Ic={firstframe:0,lastframe:45,frames:Jv,endfunc:ha};var Qv=Array.from({length:20},(e,t)=>({ai:Vv,dist:0,think:t===10?Yv:null}));Wv={firstframe:46,lastframe:65,frames:Qv,endfunc:ha};var ey=Array.from({length:6},()=>({ai:Nc,dist:0}));Kv={firstframe:66,lastframe:71,frames:ey,endfunc:ha};var ty=Array.from({length:10},()=>({ai:Nc,dist:0}));Pc={firstframe:84,lastframe:93,frames:ty,endfunc:jv};var mr=.1;function ny(e,t,n){te(e,mr,n)}function ry(e,t,n){ce(e,t,mr,n)}function iy(e,t,n){se(e,t,mr,n)}function ay(e,t,n){ne(e,t,mr,n)}function Cc(e,t,n){ie(e,t)}var fa,Dc,Fc,sy,oy,Uc;function cy(e){e.monsterinfo.current_move=fa}function uy(e){e.monsterinfo.current_move=Dc}function ga(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Fc:e.monsterinfo.current_move=fa}function my(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(N(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function dy(e){e.monsterinfo.nextframe=Uc.lastframe,e.nextthink=-1}var ly=Array.from({length:46},()=>({ai:ny,dist:0}));fa={firstframe:0,lastframe:45,frames:ly,endfunc:cy};var hy=Array.from({length:46},()=>({ai:ry,dist:5}));Dc={firstframe:0,lastframe:45,frames:hy,endfunc:uy};var fy=Array.from({length:46},()=>({ai:iy,dist:10}));Fc={firstframe:0,lastframe:45,frames:fy,endfunc:ga};var gy=Array.from({length:20},(e,t)=>({ai:ay,dist:0,think:t===10?my:null}));sy={firstframe:46,lastframe:65,frames:gy,endfunc:ga};var py=Array.from({length:6},()=>({ai:Cc,dist:0}));oy={firstframe:66,lastframe:71,frames:py,endfunc:ga};var _y=Array.from({length:10},()=>({ai:Cc,dist:0}));Uc={firstframe:84,lastframe:93,frames:_y,endfunc:dy};var dr=.1;function vy(e,t,n){te(e,dr,n)}function yy(e,t,n){ce(e,t,dr,n)}function wy(e,t,n){se(e,t,dr,n)}function xy(e,t,n){ne(e,t,dr,n)}function pa(e,t,n){ie(e,t)}var _a,Bc,Gc,Sy,Ay,Hc,Ey;function ky(e){e.monsterinfo.current_move=_a}function My(e){e.monsterinfo.current_move=Bc}function lr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Gc:e.monsterinfo.current_move=_a}function by(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=D(N(r,n));at(e,n,i,5,2,.05,.05,0,t,4)}var Ry=Array.from({length:22},()=>({ai:vy,dist:0}));_a={firstframe:0,lastframe:21,frames:Ry,endfunc:ky};var Ty=Array.from({length:15},()=>({ai:yy,dist:4}));Bc={firstframe:22,lastframe:36,frames:Ty,endfunc:My};var zy=Array.from({length:8},()=>({ai:wy,dist:12}));Gc={firstframe:37,lastframe:44,frames:zy,endfunc:lr};var Ly=Array.from({length:15},(e,t)=>({ai:xy,dist:0,think:t>=5&&t<=7?by:null}));Sy={firstframe:45,lastframe:59,frames:Ly,endfunc:lr};var Ny=Array.from({length:10},()=>({ai:pa,dist:0}));Ay={firstframe:60,lastframe:69,frames:Ny,endfunc:lr};var Oy=Array.from({length:20},()=>({ai:pa,dist:0}));function Iy(e){e.monsterinfo.nextframe=Hc.lastframe,e.nextthink=-1}Hc={firstframe:70,lastframe:89,frames:Oy,endfunc:Iy};var Py=Array.from({length:5},()=>({ai:pa,dist:0}));Ey={firstframe:90,lastframe:94,frames:Py,endfunc:lr};var hr=.1,Cy={x:40,y:-20,z:20},Dy={x:40,y:20,z:20},Fy={x:30,y:0,z:40};function Uy(e,t,n){te(e,hr,n)}function By(e,t,n){ce(e,t,hr,n)}function Gy(e,t,n){se(e,t,hr,n)}function va(e,t,n){ne(e,t,hr,n)}function sn(e,t,n){ie(e,t)}var ya,Vc,Wc,wa,Ii,Hy,Vy,Wy,Ky,Kc;function Xy(e){e.monsterinfo.current_move=ya}function $y(e){e.monsterinfo.current_move=Vc}function Lt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Wc:e.monsterinfo.current_move=ya}function Yy(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&&Qt(e,e.enemy,n)&&Math.random()<.9?e.monsterinfo.current_move=wa:e.monsterinfo.current_move=Ii}function Pi(e,t){let{forward:n,right:r,up:i}=J(e.angles),a={...e.origin},s=G(n,t.x),o=G(r,t.y),c=G(i,t.z);return B(B(B(a,s),o),c)}function jy(e,t){if(!e.enemy)return;let n=Pi(e,Dy),r=D(N(e.enemy.origin,n));Kn(e,n,r,6,4,.05,.05,0,t,4);let i=Pi(e,Cy),a=D(N(e.enemy.origin,i));Kn(e,i,a,6,4,.05,.05,0,t,4)}function qy(e,t){if(!e.enemy)return;let n=Pi(e,Fy),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=D(N(r,n));Go(e,n,i,50,300,100,200,0,t)}function Zy(e){e.monsterinfo.nextframe=Kc.lastframe,e.nextthink=-1}function Jy(e,t){let n=t.spawn();n.classname="monster_makron",n.origin={...e.origin},n.angles={...e.angles}}var Qy=Array.from({length:51},()=>({ai:Uy,dist:0}));ya={firstframe:0,lastframe:50,frames:Qy,endfunc:Xy};var ew=Array.from({length:14},()=>({ai:By,dist:10}));Vc={firstframe:51,lastframe:64,frames:ew,endfunc:$y};var tw=Array.from({length:14},()=>({ai:Gy,dist:10}));Wc={firstframe:51,lastframe:64,frames:tw,endfunc:Lt};var nw=Array.from({length:8},()=>({ai:va,dist:0})),rw={firstframe:65,lastframe:72,frames:nw,endfunc:null},iw=Array.from({length:6},()=>({ai:va,dist:0,think:jy}));wa={firstframe:73,lastframe:78,frames:iw,endfunc:Yy};rw.endfunc=e=>{e.monsterinfo.current_move=wa};var aw=Array.from({length:4},()=>({ai:sn,dist:0}));Ii={firstframe:79,lastframe:82,frames:aw,endfunc:Lt};var sw=Array.from({length:13},(e,t)=>({ai:va,dist:0,think:t===6?qy:null}));Hy={firstframe:83,lastframe:95,frames:sw,endfunc:Lt};var ow=Array.from({length:3},()=>({ai:sn,dist:0}));Vy={firstframe:96,lastframe:98,frames:ow,endfunc:Lt};var cw=Array.from({length:3},()=>({ai:sn,dist:0}));Wy={firstframe:99,lastframe:101,frames:cw,endfunc:Lt};var uw=Array.from({length:25},()=>({ai:sn,dist:0}));Ky={firstframe:102,lastframe:126,frames:uw,endfunc:Lt};var mw=Array.from({length:50},(e,t)=>({ai:sn,dist:0,think:t===49?((n,r)=>{}):t===48?Jy:null}));Kc={firstframe:127,lastframe:176,frames:mw,endfunc:Zy};var fr=.1,dw={x:30,y:28,z:24},lw={x:26,y:16,z:24},hw={x:26,y:-14,z:24};function fw(e,t,n){te(e,fr,n)}function gw(e,t,n){ce(e,t,fr,n)}function pw(e,t,n){se(e,t,fr,n)}function Xc(e,t,n){ne(e,t,fr,n)}function Nt(e,t,n){ie(e,t)}var xa,$c,Yc,_w,jc,vw,yw,ww,xw,qc,Sw;function Aw(e){e.monsterinfo.current_move=xa}function Ew(e){e.monsterinfo.current_move=$c}function tt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Yc:e.monsterinfo.current_move=xa}function Sa(e,t){let{forward:n,right:r,up:i}=J(e.angles),a={...e.origin},s=G(n,t.x),o=G(r,t.y),c=G(i,t.z);return B(B(B(a,s),o),c)}function kw(e,t){if(!e.enemy)return;t.engine.sound?.(e,0,"makron/bfg_fire.wav",1,1,0);let n=Sa(e,dw),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=D(N(r,n));Go(e,n,i,50,300,100,300,0,t)}function Mw(e,t){if(!e.pos1)return;t.engine.sound?.(e,0,"makron/rail_fire.wav",1,1,0);let n=Sa(e,hw),r=D(N(e.pos1,n));Ho(e,n,r,50,100,0,t)}function bw(e){e.enemy&&(e.pos1={...e.enemy.origin},e.pos1={...e.pos1,z:e.pos1.z+(e.enemy.viewheight||0)})}function Rw(e,t){t.engine.sound?.(e,0,"makron/blaster.wav",1,1,0);let n=Sa(e,lw),r=(e.monsterinfo.nextframe||0)-jc.firstframe,i=0,a;if(e.enemy){let s={...e.enemy.origin};s.z+=e.enemy.viewheight||0;let o=N(s,n),u={...Zt(o)};r<=12?u.y-=5*(r-4):u.y-=40-5*(r-12),a=J(u).forward}else{let{forward:s}=J(e.angles);a=s}Ve(e,n,a,15,1e3,0,0,t,1)}function Tw(e){e.monsterinfo.nextframe=qc.lastframe,e.nextthink=-1}var zw=Array.from({length:60},()=>({ai:fw,dist:0}));xa={firstframe:0,lastframe:59,frames:zw,endfunc:Aw};var Lw=Array.from({length:10},()=>({ai:gw,dist:8}));$c={firstframe:60,lastframe:69,frames:Lw,endfunc:Ew};var Nw=Array.from({length:10},()=>({ai:pw,dist:8}));Yc={firstframe:60,lastframe:69,frames:Nw,endfunc:tt};var Ow=Array.from({length:8},(e,t)=>({ai:Xc,dist:0,think:t===3?kw:null}));_w={firstframe:70,lastframe:77,frames:Ow,endfunc:tt};var Iw=Array.from({length:26},(e,t)=>({ai:Nt,dist:0,think:t>=4&&t<=20?Rw:null}));jc={firstframe:78,lastframe:103,frames:Iw,endfunc:tt};var Pw=Array.from({length:16},(e,t)=>({ai:Xc,dist:0,think:t===7?bw:t===8?Mw:null}));vw={firstframe:104,lastframe:119,frames:Pw,endfunc:tt};var Cw=Array.from({length:4},()=>({ai:Nt,dist:0}));yw={firstframe:120,lastframe:123,frames:Cw,endfunc:tt};var Dw=Array.from({length:4},()=>({ai:Nt,dist:0}));ww={firstframe:124,lastframe:127,frames:Dw,endfunc:tt};var Fw=Array.from({length:27},()=>({ai:Nt,dist:0}));xw={firstframe:128,lastframe:154,frames:Fw,endfunc:tt};var Uw=Array.from({length:95},()=>({ai:Nt,dist:0}));qc={firstframe:155,lastframe:249,frames:Uw,endfunc:Tw};var Bw=Array.from({length:13},()=>({ai:Nt,dist:0}));Sw={firstframe:250,lastframe:262,frames:Bw,endfunc:tt};var qt=.1;function Gw(e,t,n){if(e.classname==="monster_medic"&&eu(e,n)){e.monsterinfo.current_move=on;return}te(e,qt,n)}function Hw(e,t,n){ce(e,t,qt,n)}function Vw(e,t,n){e.classname==="monster_medic"&&eu(e,n)?e.monsterinfo.current_move=on:se(e,t,qt,n)}function Ce(e,t,n){ne(e,t,qt,n)}function Aa(e,t,n){ie(e,t)}var Ea,Zc,on,Ww,Jc,Kw,Xw,Qc;function $w(e){e.monsterinfo.current_move=Ea}function Yw(e){e.monsterinfo.current_move=Zc}function cn(e){if(e.classname==="monster_medic"&&e.enemy&&e.enemy.deadflag===2&&Qe(e,e.enemy)<80){e.monsterinfo.current_move=Jc;return}e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=on:e.monsterinfo.current_move=Ea}function jw(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=D(N(e.enemy.origin,n));Ve(e,n,r,2,1e3,0,0,t,10)}function qe(e,t){if(!e.enemy||e.enemy.deadflag!==2)return;if(Qe(e,e.enemy)>400){e.monsterinfo.current_move=on;return}let r=J(e.angles),i=r.forward,a=r.right,s=r.up,o={x:24,y:0,z:6},c=B(e.origin,B(G(i,o.x),B(G(a,o.y),G(s,o.z)))),u=e.enemy.origin;t.multicast(e.origin,1,_e.temp_entity,{te:xe.MEDIC_CABLE_ATTACK,entId:e.index,targetId:e.enemy.index,start:c,end:u})}function qw(e,t){t.engine.sound?.(e,0,"medic/medatck2.wav",1,1,0),qe(e,t)}function Zw(e,t){if(!e.enemy||e.enemy.deadflag!==2)return;let n=e.enemy,r=t.getSpawnFunction(n.classname);if(Qe(e,n)>400){e.enemy=null;return}if(!r)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),n.bad_medic=e;else{let i={entities:t,keyValues:{classname:n.classname},warn:o=>{},free:o=>t.free(o)},a={...n.origin},s={...n.angles};r(n,i),n.origin=a,n.angles=s,t.linkentity(n),n.deadflag=0,n.takedamage=!0,t.finalizeSpawn(n)}e.enemy=null}function eu(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"||a.bad_medic===e||!Qt(e,a,i))return;let s=Qe(e,a);s<r&&(r=s,n=a)}),n?(e.enemy=n,!0):!1}function Jw(e,t){let n=Math.random(),r="monster_soldier_light";n>.8?r="monster_soldier_ssg":n>.5&&(r="monster_soldier");let i=t.getSpawnFunction(r);if(i){let a=J(e.angles),s=G(a.forward,64),o=B(e.origin,s),c={...o,z:o.z+8},u=t.trace(e.origin,{x:-16,y:-16,z:-24},{x:16,y:16,z:32},c,e,pe|st|jn);if(u.fraction<1||u.startsolid||u.allsolid)return;let m=t.spawn();m.origin=c,m.angles={...e.angles},i(m,{entities:t,keyValues:{classname:r},warn:()=>{},free:h=>t.free(h)}),m.enemy=e.enemy,t.multicast(c,1,_e.muzzleflash,{entId:m.index,flash_number:0}),t.engine.sound?.(e,0,"medic/medatck2.wav",1,1,0)}}function Qw(e){e.monsterinfo.nextframe=Qc.lastframe,e.nextthink=-1}var ex=Array.from({length:30},()=>({ai:Gw,dist:0}));Ea={firstframe:0,lastframe:29,frames:ex,endfunc:$w};var tx=Array.from({length:40},()=>({ai:Hw,dist:3}));Zc={firstframe:30,lastframe:69,frames:tx,endfunc:Yw};var nx=Array.from({length:20},()=>({ai:Vw,dist:12}));on={firstframe:70,lastframe:89,frames:nx,endfunc:cn};var rx=Array.from({length:16},(e,t)=>({ai:Ce,dist:0,think:t>=4&&t<=13?jw:null}));Ww={firstframe:90,lastframe:105,frames:rx,endfunc:cn};var ix=[{ai:Ce,dist:0,think:qw},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:qe},{ai:Ce,dist:0,think:Zw}];Jc={firstframe:106,lastframe:114,frames:ix,endfunc:cn};var ax=Array.from({length:6},()=>({ai:Aa,dist:0}));Xw={firstframe:116,lastframe:121,frames:ax,endfunc:cn};var sx=Array.from({length:23},(e,t)=>({ai:Aa,dist:0,think:t===11?Jw:null}));Kw={firstframe:122,lastframe:144,frames:sx,endfunc:cn};var ox=Array.from({length:30},()=>({ai:Aa,dist:0}));Qc={firstframe:161,lastframe:190,frames:ox,endfunc:Qw};var un=.1;function R(e,t,n){te(e,un,n)}function ve(e,t,n){ce(e,t,un,n)}function wt(e,t,n){se(e,t,un,n)}function je(e,t,n){ne(e,t,un,n)}function X(e,t,n){ie(e,t)}function Mi(e,t,n){y1(e,null,t,un)}var tu,nu,Xn,cx,ux,mx,dx,ru,iu;function lx(e){e.monsterinfo.current_move=nu}function hx(e){e.monsterinfo.current_move=tu}function Ot(e){e.monsterinfo.current_move=Xn}function au(e,t,n){if(n.engine.sound?.(e,0,"mutant/mutatck1.wav",1,1,0),!e.enemy)return;let r=N(e.enemy.origin,e.origin);if(Mt(r)>100)return;let a=D(r);le(e.enemy,e,e,a,e.enemy.origin,K,t,0,0,0,n.timeSeconds)}function fx(e,t){au(e,30,t)}function vo(e,t){au(e,30,t)}function At(e,t){e.flags&1&&e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Xn),e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Xn)}function gx(e,t,n,r){e.health<=0||(t&&t.takedamage&&(e.velocity.z>0&&(e.velocity={...e.velocity,z:0}),le(t,e,e,D(e.velocity),e.origin,K,50,0,0,0,0)),(!t||!t.takedamage&&t.solid!==0)&&(e.touch=void 0))}function px(e,t){let n=J(e.angles).forward;e.movetype=7,e.touch=gx,e.velocity=B(G(n,300),{x:0,y:0,z:300}),e.velocity=B(G(n,600),{x:0,y:0,z:250}),e.groundentity=null,t.engine.sound?.(e,0,"mutant/mutatck2.wav",1,1,0)}function _x(e){e.monsterinfo.nextframe=ru.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var vx=[{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0}];tu={firstframe:0,lastframe:50,frames:vx,endfunc:hx};var yx=[{ai:ve,dist:3},{ai:ve,dist:1},{ai:ve,dist:5},{ai:ve,dist:10},{ai:ve,dist:13},{ai:ve,dist:12},{ai:ve,dist:0},{ai:ve,dist:0},{ai:ve,dist:5},{ai:ve,dist:6},{ai:ve,dist:16},{ai:ve,dist:15},{ai:ve,dist:6}];nu={firstframe:51,lastframe:63,frames:yx,endfunc:lx};var wx=[{ai:wt,dist:20},{ai:wt,dist:15},{ai:wt,dist:35},{ai:wt,dist:20},{ai:wt,dist:10},{ai:wt,dist:20}];Xn={firstframe:64,lastframe:69,frames:wx,endfunc:Ot};var xx=[{ai:je,dist:0},{ai:je,dist:0},{ai:je,dist:0,think:vo},{ai:je,dist:0},{ai:je,dist:0,think:fx},{ai:je,dist:0},{ai:je,dist:0,think:vo},{ai:je,dist:0}];cx={firstframe:70,lastframe:77,frames:xx,endfunc:Ot};var Sx=[{ai:Mi,dist:0},{ai:Mi,dist:0},{ai:Mi,dist:0,think:px},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At}];iu={firstframe:93,lastframe:100,frames:Sx,endfunc:Ot};iu.frames[3].ai=(e,t,n)=>{At(e,n),!e.groundentity&&e.frame===99&&(e.groundentity||(e.monsterinfo.nextframe=96))};var Ax=[{ai:X,dist:4},{ai:X,dist:-3},{ai:X,dist:-8},{ai:X,dist:2},{ai:X,dist:5}];ux={firstframe:78,lastframe:82,frames:Ax,endfunc:Ot};var Ex=[{ai:X,dist:-24},{ai:X,dist:11},{ai:X,dist:5},{ai:X,dist:-2}];mx={firstframe:83,lastframe:86,frames:Ex,endfunc:Ot};var kx=[{ai:X,dist:11},{ai:X,dist:0},{ai:X,dist:-2},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0}];dx={firstframe:87,lastframe:92,frames:kx,endfunc:Ot};var Mx=[{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0}];ru={firstframe:101,lastframe:109,frames:Mx,endfunc:_x};var gr=.1,bx=()=>Math.random();function H(e,t,n){te(e,gr,n)}function Be(e,t,n){ce(e,t,gr,n)}function Ge(e,t,n){se(e,t,gr,n)}function me(e,t,n){ne(e,t,gr,n)}function de(e,t,n){ie(e,t)}var ka,su,ou,Rx,Tx,cu,uu,zx,Lx,Ma,mu;function Nx(e,t){t.engine.sound?.(e,0,"parasite/paratck1.wav",1,1,0)}function Ox(e,t){t.engine.sound?.(e,0,"parasite/paratck4.wav",1,1,0)}function xt(e,t){t.engine.sound?.(e,0,"parasite/paridle1.wav",1,2,0)}function Ci(e,t){t.engine.sound?.(e,0,"parasite/paridle2.wav",1,2,0)}function Ix(e){e.monsterinfo.current_move=Ma}function Px(e){bx()<=.8?e.monsterinfo.current_move=Ma:e.monsterinfo.current_move=mu}function du(e){e.monsterinfo.current_move=ka}function ba(e){e.monsterinfo.current_move=su}function lu(e){e.monsterinfo.current_move=uu}function hu(e){e.monsterinfo.aiflags&&e.monsterinfo.aiflags&1?e.monsterinfo.current_move=ka:e.monsterinfo.current_move=ou}function bi(e,t){let n=N(t,e);if(Mt(n)>256)return!1;let a=Zt(n).x;return a<-180&&(a+=360),!(Math.abs(a)>30)}function Re(e,t){if(!e.enemy)return;let n=J(e.angles),r=n.forward,i=n.right,a=n.up,s={x:24,y:0,z:6},o=B(e.origin,B(G(r,s.x),B(G(i,s.y),G(a,s.z)))),c=nf(e.enemy.origin);if(!bi(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.maxs.z-8},!bi(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.mins.z+8},!bi(o,c)))||t.trace(o,c,K,K,e,Jt).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:xe.PARASITE_ATTACK,entId:e.index,start:o,end:c});let h=D(N(o,c));le(e.enemy,e,e,h,e.enemy.origin,K,m,0,8,0,t.timeSeconds),e.health<e.max_health&&(e.health+=m,e.health>e.max_health&&(e.health=e.max_health))}function Cx(e){e.monsterinfo.nextframe=cu.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var Dx=[{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0,think:xt},{ai:H,dist:0},{ai:H,dist:0,think:xt},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0,think:xt},{ai:H,dist:0},{ai:H,dist:0,think:xt},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0,think:xt},{ai:H,dist:0},{ai:H,dist:0,think:xt}];ka={firstframe:83,lastframe:99,frames:Dx,endfunc:du};var Fx=[{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0}];Lx={firstframe:100,lastframe:103,frames:Fx,endfunc:Ix};var Ux=[{ai:H,dist:0,think:Ci},{ai:H,dist:0},{ai:H,dist:0},{ai:H,dist:0,think:Ci},{ai:H,dist:0},{ai:H,dist:0}];Ma={firstframe:104,lastframe:109,frames:Ux,endfunc:Px};var Bx=[{ai:H,dist:0,think:Ci},{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}];mu={firstframe:110,lastframe:117,frames:Bx,endfunc:du};var Gx=[{ai:Ge,dist:0},{ai:Ge,dist:30}];uu={firstframe:68,lastframe:69,frames:Gx,endfunc:hu};var Hx=[{ai:Ge,dist:30},{ai:Ge,dist:30},{ai:Ge,dist:22},{ai:Ge,dist:19},{ai:Ge,dist:24},{ai:Ge,dist:28},{ai:Ge,dist:25}];ou={firstframe:70,lastframe:76,frames:Hx,endfunc:hu};var Vx=[{ai:Be,dist:0},{ai:Be,dist:30,think:ba}];zx={firstframe:68,lastframe:69,frames:Vx,endfunc:ba};var Wx=[{ai:Be,dist:30},{ai:Be,dist:30},{ai:Be,dist:22},{ai:Be,dist:19},{ai:Be,dist:24},{ai:Be,dist:28},{ai:Be,dist:25}];su={firstframe:70,lastframe:76,frames:Wx,endfunc:ba};var Kx=[{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:6},{ai:de,dist:16},{ai:de,dist:-6},{ai:de,dist:-7},{ai:de,dist:0}];Tx={firstframe:57,lastframe:67,frames:Kx,endfunc:lu};var Xx=[{ai:me,dist:0,think:Nx},{ai:me,dist:0},{ai:me,dist:15,think:Re},{ai:me,dist:0,think:Re},{ai:me,dist:0,think:Re},{ai:me,dist:0,think:Re},{ai:me,dist:0,think:Re},{ai:me,dist:-2,think:Re},{ai:me,dist:-2,think:Re},{ai:me,dist:-3,think:Re},{ai:me,dist:-2,think:Re},{ai:me,dist:0,think:Re},{ai:me,dist:-1,think:Re},{ai:me,dist:0,think:Ox},{ai:me,dist:-2},{ai:me,dist:-2},{ai:me,dist:-3},{ai:me,dist:0}];Rx={firstframe:39,lastframe:56,frames:Xx,endfunc:lu};var $x=[{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0},{ai:de,dist:0}];cu={firstframe:32,lastframe:38,frames:$x,endfunc:Cx};var pr=.1;var Yx=2;function jx(e,t,n){te(e,pr,n)}function qx(e,t,n){ce(e,t,pr,n)}function Zx(e,t,n){se(e,t,pr,n)}function fu(e,t,n){ne(e,t,pr,n)}function gu(e,t,n){ie(e,t)}var Ra,pu,_u,Jx,Qx,eS,vu;function tS(e){e.monsterinfo.current_move=Ra}function nS(e){e.monsterinfo.current_move=pu}function _r(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=_u:e.monsterinfo.current_move=Ra}function Ta(e){return{x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight}}function za(e,t){if(!e.enemy){let{forward:r}=J(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 D(N(n,t))}function rS(e,t){if(!e.enemy)return;let n=Ta(e),r=za(e,n);Ve(e,n,r,5,600,0,0,t,1)}function iS(e,t){if(!e.enemy)return;let n=Ta(e),r=za(e,n),i=2,a=4,s=20,o=.15,c=.15;t.engine.sound?.(e,0,"soldier/solatck2.wav",1,1,0),cg(e,n,r,i,a,o,c,s,0,t,3)}function aS(e,t){if(!e.enemy)return;let n=Ta(e),r=za(e,n),i=4,a=4,s=.05,o=.05;t.engine.sound?.(e,0,"soldier/solatck3.wav",1,1,0),at(e,n,r,i,a,s,o,0,t,4)}function sS(e,t){e.spawnflags&Yx?iS(e,t):rS(e,t)}var oS=Array.from({length:30},()=>({ai:jx,dist:0}));Ra={firstframe:0,lastframe:29,frames:oS,endfunc:tS};var cS=Array.from({length:40},()=>({ai:qx,dist:2}));pu={firstframe:30,lastframe:69,frames:cS,endfunc:nS};var uS=Array.from({length:20},()=>({ai:Zx,dist:10}));_u={firstframe:70,lastframe:89,frames:uS,endfunc:_r};var mS=Array.from({length:10},(e,t)=>({ai:fu,dist:0,think:t===5?sS:null}));Jx={firstframe:90,lastframe:99,frames:mS,endfunc:_r};var dS=Array.from({length:10},(e,t)=>({ai:fu,dist:0,think:t>=4&&t<=8?aS:null}));Qx={firstframe:90,lastframe:99,frames:dS,endfunc:_r};var lS=Array.from({length:6},()=>({ai:gu,dist:0}));eS={firstframe:100,lastframe:105,frames:lS,endfunc:_r};var hS=Array.from({length:10},()=>({ai:gu,dist:0}));function fS(e){e.monsterinfo.nextframe=vu.lastframe,e.nextthink=-1}vu={firstframe:106,lastframe:115,frames:hS,endfunc:fS};var yu=.1,gS={x:30,y:30,z:40},pS={x:30,y:-30,z:40},_S={x:20,y:0,z:70};function vS(e,t,n){te(e,yu,n)}function yS(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Na:e.monsterinfo.current_move=vr}function La(e,t,n){ne(e,t,yu,n)}function mn(e,t,n){ie(e,t)}var vr,Na,wS,xS,wu,xu,SS,AS,ES,Su;function kS(e){e.monsterinfo.current_move=vr}function ct(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Na:e.monsterinfo.current_move=vr}function Oa(e,t){let{forward:n,right:r,up:i}=J(e.angles),a={...e.origin},s=G(n,t.x),o=G(r,t.y),c=G(i,t.z);return B(B(B(a,s),o),c)}function MS(e,t){if(!e.enemy)return;let n=Oa(e,pS),r=D(N(e.enemy.origin,n));nn(e,n,r,50,650,0,t)}function bS(e,t){if(!e.enemy)return;let n=Oa(e,_S),r=D(N(e.enemy.origin,n));ug(e,n,r,50,600,0,t)}function RS(e,t){if(!e.enemy)return;let n=Oa(e,gS),r=D(N(e.enemy.origin,n));Kn(e,n,r,6,4,.05,.05,0,t,4)}function TS(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&&Qt(e,e.enemy,n)&&(Math.random()<.3||e.timestamp&&e.timestamp>=Date.now()/1e3)?e.monsterinfo.current_move=wu:e.monsterinfo.current_move=xu}function zS(e){e.monsterinfo.nextframe=Su.lastframe,e.nextthink=-1}var LS=Array.from({length:60},()=>({ai:vS,dist:0}));vr={firstframe:0,lastframe:59,frames:LS,endfunc:kS};var NS=Array.from({length:18},()=>({ai:yS,dist:12}));Na={firstframe:60,lastframe:77,frames:NS,endfunc:ct};var OS=Array.from({length:4},()=>({ai:mn,dist:0}));ES={firstframe:78,lastframe:81,frames:OS,endfunc:ct};var IS=Array.from({length:4},()=>({ai:mn,dist:0}));AS={firstframe:82,lastframe:85,frames:IS,endfunc:ct};var PS=Array.from({length:4},()=>({ai:mn,dist:0}));SS={firstframe:86,lastframe:89,frames:PS,endfunc:ct};var CS=Array.from({length:24},()=>({ai:mn,dist:0}));Su={firstframe:90,lastframe:113,frames:CS,endfunc:zS};var DS=Array.from({length:6},(e,t)=>({ai:La,dist:0,think:t===0||t===3?bS:null}));xS={firstframe:114,lastframe:119,frames:DS,endfunc:ct};var FS=Array.from({length:27},(e,t)=>({ai:La,dist:0,think:t===7||t===10||t===13?MS:null}));wS={firstframe:120,lastframe:146,frames:FS,endfunc:ct};var US=Array.from({length:6},()=>({ai:La,dist:0,think:RS}));wu={firstframe:147,lastframe:152,frames:US,endfunc:TS};var BS=Array.from({length:14},()=>({ai:mn,dist:0}));xu={firstframe:153,lastframe:166,frames:BS,endfunc:ct};var Ia=.1;function GS(e,t,n){te(e,Ia,n)}function HS(e,t,n){ce(e,t,Ia,n)}function VS(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Ca:e.monsterinfo.current_move=yr}function Pa(e,t,n){ne(e,t,Ia,n)}function Au(e,t,n){ie(e,t)}var yr,Eu,Ca,WS,KS,XS,$S,ku;function YS(e){e.monsterinfo.current_move=yr}function jS(e){e.monsterinfo.current_move=Eu}function dn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Ca:e.monsterinfo.current_move=yr}function qS(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(N(e.enemy.origin,n));Ve(e,n,r,30,1e3,0,0,t,1)}function ZS(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(N(e.enemy.origin,n));at(e,n,r,20,2,.05,.05,0,t,4)}function Ri(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(N(e.enemy.origin,n));nn(e,n,r,50,650,0,t)}function JS(e){e.monsterinfo.nextframe=ku.lastframe,e.nextthink=-1}var QS=Array.from({length:30},()=>({ai:GS,dist:0}));yr={firstframe:0,lastframe:29,frames:QS,endfunc:YS};var eA=Array.from({length:16},()=>({ai:HS,dist:5}));Eu={firstframe:30,lastframe:45,frames:eA,endfunc:jS};var tA=Array.from({length:16},()=>({ai:VS,dist:10}));Ca={firstframe:46,lastframe:61,frames:tA,endfunc:dn};var nA=Array.from({length:16},(e,t)=>({ai:Pa,dist:0,think:t>5&&t<12?qS:null}));WS={firstframe:62,lastframe:77,frames:nA,endfunc:dn};var rA=Array.from({length:20},(e,t)=>({ai:Pa,dist:0,think:t%2===0&&t>5?ZS:null}));KS={firstframe:78,lastframe:97,frames:rA,endfunc:dn};var iA=Array.from({length:18},(e,t)=>({ai:Pa,dist:0,think:t===8||t===12||t===16?Ri:null}));XS={firstframe:98,lastframe:115,frames:iA,endfunc:dn};var aA=Array.from({length:6},()=>({ai:Au,dist:0}));$S={firstframe:116,lastframe:121,frames:aA,endfunc:dn};var sA=Array.from({length:16},()=>({ai:Au,dist:0}));ku={firstframe:122,lastframe:137,frames:sA,endfunc:JS};var Da=.1;function oA(e,t,n){te(e,Da,n)}function Fa(e,t,n){se(e,t,Da,n)}function cA(e,t,n){ne(e,t,Da,n)}var Ua,Mu,uA,mA,bu;function dA(e){e.monsterinfo.current_move=Ua}function Ba(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Mu:e.monsterinfo.current_move=Ua}function lA(e,t){if(!e.enemy)return;let n=J(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=D(N(e.enemy.origin,r));t.engine.sound?.(e,0,"turret/fire.wav",1,1,0),Ve(e,r,i,2,1e3,1,0,t)}var hA=Array.from({length:1},()=>({ai:oA,dist:0}));Ua={firstframe:0,lastframe:0,frames:hA,endfunc:dA};var fA=Array.from({length:1},()=>({ai:Fa,dist:0}));Mu={firstframe:0,lastframe:0,frames:fA,endfunc:Ba};var gA=Array.from({length:8},(e,t)=>({ai:cA,dist:0,think:t===4?lA:void 0}));uA={firstframe:1,lastframe:8,frames:gA,endfunc:Ba};var pA=Array.from({length:2},()=>({ai:Fa,dist:0}));mA={firstframe:9,lastframe:10,frames:pA,endfunc:Ba};var _A=Array.from({length:4},()=>({ai:Fa,dist:0}));function vA(e){e.monsterinfo.nextframe=bu.lastframe,e.nextthink=-1,e.deadflag=2,e.solid=0}bu={firstframe:11,lastframe:14,frames:_A,endfunc:vA};var Qk=new Map(Wi.map(e=>[e.name,e]));var yA=2166136261,wA=16777619;function Ru(e,t){let n=e>>>0;for(let r=0;r<t.length;r+=1)n^=t[r]&255,n=Math.imul(n,wA)>>>0;return n>>>0}function Et(e,t){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,t,!0);let i=new Uint8Array(n);return Ru(e,i)}function Di(e,t){let n=new Uint8Array(t.length);for(let r=0;r<t.length;r+=1)n[r]=t.charCodeAt(r)&255;return Ru(e,n)}var Ti=2,xA=1;function we(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function Z(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Un(e,t,n){return e===void 0?n:Z(e,t)}function $n(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function Gn(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let n of e)Z(n,`${t} element`);return e}function SA(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=we(e,"level");return{frameNumber:Un(t.frameNumber,"level.frameNumber",0),timeSeconds:Un(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Un(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Un(t.deltaSeconds,"level.deltaSeconds",0)}}function AA(e){if(e===void 0)return new Ao().getState();let t=we(e,"rng"),n=we(t.mt,"rng.mt"),r=Gn(n.state,"rng.mt.state");return{mt:{index:Z(n.index,"rng.mt.index"),state:r}}}function EA(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=we(t,`thinks[${n}]`);return{time:Z(r.time,`thinks[${n}].time`),entityIndex:Z(r.entityIndex,`thinks[${n}].entityIndex`)}})}function kA(e){if(e===void 0)return{frameNumber:0,sightEntityIndex:null,sightEntityFrame:0,soundEntityIndex:null,soundEntityFrame:0,sound2EntityIndex:null,sound2EntityFrame:0,sightClientIndex:null};let t=we(e,"awareness"),n=(r,i)=>r===null?null:Z(r,i);return{frameNumber:Z(t.frameNumber,"awareness.frameNumber"),sightEntityIndex:n(t.sightEntityIndex,"awareness.sightEntityIndex"),sightEntityFrame:Z(t.sightEntityFrame,"awareness.sightEntityFrame"),soundEntityIndex:n(t.soundEntityIndex,"awareness.soundEntityIndex"),soundEntityFrame:Z(t.soundEntityFrame,"awareness.soundEntityFrame"),sound2EntityIndex:n(t.sound2EntityIndex,"awareness.sound2EntityIndex"),sound2EntityFrame:Z(t.sound2EntityFrame,"awareness.sound2EntityFrame"),sightClientIndex:n(t.sightClientIndex,"awareness.sightClientIndex")}}function MA(e){if(e===void 0)return{};let t=we(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=we(i,r),s={};for(let[o,c]of Object.entries(a))s[o]=Z(c,`${r}.${o}`);n[r]=s;break}if(Array.isArray(i)&&i.length===3){let[a,s,o]=i;n[r]=[Z(a,`${r}[0]`),Z(s,`${r}[1]`),Z(o,`${r}[2]`)];break}throw new Error(`Unsupported entity field value for ${r}`)}}}return n}function bA(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,n)=>{let r=we(t,`entities[${n}]`);return{index:Z(r.index,`entities[${n}].index`),fields:MA(r.fields)}})}function RA(e){let t=we(e,"pool");return{capacity:Z(t.capacity,"pool.capacity"),activeOrder:Gn(t.activeOrder,"pool.activeOrder"),freeList:Gn(t.freeList,"pool.freeList"),pendingFree:Gn(t.pendingFree,"pool.pendingFree")}}function TA(e){let t=we(e,"entities");return{timeSeconds:Z(t.timeSeconds,"entities.timeSeconds"),pool:RA(t.pool),entities:bA(t.entities),thinks:EA(t.thinks),awareness:kA(t.awareness)}}function zA(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=we(t,`cvars[${n}]`);return{name:$n(r.name,`cvars[${n}].name`),value:$n(r.value,`cvars[${n}].value`),flags:Z(r.flags,`cvars[${n}].flags`)}})}function LA(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,n)=>$n(t,`configstrings[${n}]`))}function NA(e){return e===void 0?{}:we(e,"gameState")}function He(e,t){if(t==null)return e;if(typeof t=="number")return Et(e,t);if(typeof t=="string")return Di(e,t);if(typeof t=="boolean")return Et(e,t?1:0);if(Array.isArray(t)){let n=e;for(let r of t)n=He(n,r);return n}if(typeof t=="object"){let n=e,r=Object.keys(t).sort();for(let i of r)n=Di(n,i),n=He(n,t[i]);return n}return e}function OA(e){let t=yA;return t=Et(t,e.version),t=Et(t,e.timestamp),t=Di(t,e.map),t=Et(t,e.difficulty),t=Et(t,e.playtimeSeconds),t=He(t,e.gameState),t=He(t,e.level),t=He(t,e.rng),t=He(t,e.entities),t=He(t,e.cvars),t=He(t,e.configstrings),e.player&&(t=He(t,e.player)),t>>>0}function Tu(e,t={}){let{allowNewerVersion:n=!0}=t,r=typeof e=="string"?JSON.parse(e):e,i=we(r,"save"),a=i.version??Ti,s=Z(a,"version");if(s<xA)throw new Error(`Unsupported save version ${s}`);if(s>Ti&&!n)throw new Error(`Save version ${s} is newer than supported ${Ti}`);let o={version:s,timestamp:Z(i.timestamp,"timestamp"),map:$n(i.map,"map"),difficulty:Z(i.difficulty,"difficulty"),playtimeSeconds:Z(i.playtimeSeconds,"playtimeSeconds"),gameState:NA(i.gameState),level:SA(i.level),rng:AA(i.rng),entities:TA(i.entities),cvars:zA(i.cvars),configstrings:LA(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?Z(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=OA(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var e5=new Set(Wi.filter(e=>e.save).map(e=>e.name));var yo=globalThis.TextEncoder;function kt(e){return Tu({...e},{allowNewerVersion:!0})}function IA(e){return yo?new yo().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var PA=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:kt(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:kt(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:kt(e.save)}))}},CA=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:kt(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:kt(t.save)}))}},Ga=class Kt{constructor(t={}){let{dbName:n=Kt.DEFAULT_DB_NAME,storeName:r=Kt.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new CA(i,n,r):this.adapter=new PA}async save(t,n,r={}){let i=kt(n),a={id:t,name:r.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:IA(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 Tu(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(Kt.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(Kt.QUICK_SLOT,t)}};Ga.DEFAULT_DB_NAME="quake2ts-saves";Ga.DEFAULT_STORE="saves";Ga.QUICK_SLOT="quicksave";var t5=Gi();var n5=[C.Blaster,C.Shotgun,C.SuperShotgun,C.Machinegun,C.Chaingun,C.GrenadeLauncher,C.RocketLauncher,C.HyperBlaster,C.Railgun,C.BFG10K],r5=[U.Shells,U.Bullets,U.Cells,U.Rockets,U.Slugs],i5=[{id:$.QuadDamage,priority:1},{id:$.Invulnerability,priority:2},{id:$.EnviroSuit,priority:3},{id:$.Rebreather,priority:4},{id:$.Silencer,priority:5}];var zu=(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 ln=(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 nt=new Map,DA=["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"],Lu=async(e,t)=>{for(let n of DA)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);nt.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}};var hn=new Map,FA=["d_left","d_right","d_up","d_down"],Nu=async(e,t)=>{for(let n of FA)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);hn.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}},Ou=(e,t)=>{if(!t.damageIndicators)return;let n=e.width,r=e.height,{forward:i,right:a,up:s}=Ut(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=De(m,a),f=De(m,i),g=Math.atan2(f,h)*180/Math.PI,p,l=0,v=0;g>-45&&g<=45?(p=hn.get("d_right"),l=n-(p?.width||0),v=(r-(p?.height||0))/2):g>45&&g<=135?(p=hn.get("d_up"),l=(n-(p?.width||0))/2,v=0):g>135||g<=-135?(p=hn.get("d_left"),l=0,v=(r-(p?.height||0))/2):(p=hn.get("d_down"),l=(n-(p?.width||0))/2,v=r-(p?.height||0)),p&&e.drawPic(l,v,p)}};var Iu=(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 Pu=(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 Cu=(e,t)=>{if(!t.pickupIcon)return;let n=nt.get(t.pickupIcon);if(n){let r=e.width-n.width-10,i=e.height-n.height-10;e.drawPic(r,i,n)}};var UA=!1;var Du=(e,t,n,r,i,a,s,o,c)=>{let u;n<=25&&(UA?u=[.2,.6,1,1]:u=[1,0,0,1]),a.length>0&&(ln(e,c.HEALTH_X,c.HEALTH_Y,n,a,s,u),ln(e,c.ARMOR_X,c.ARMOR_Y,r,a,s),ln(e,c.AMMO_X,c.AMMO_Y,i,a,s));let m=t.inventory.armor;if(m&&m.armorCount>0){let p=`i_${m.armorType}armor`,l=nt.get(p);l&&e.drawPic(c.ARMOR_X-24,c.ARMOR_Y-2,l)}let d=t.inventory.currentWeapon;if(d){let p=Object.values(zo).find(l=>l.weaponId===d);if(p){let l=`w_${p.id.substring(7)}`,v=nt.get(l);v&&e.drawPic(c.WEAPON_ICON_X,c.WEAPON_ICON_Y,v)}}let h=Array.from(t.inventory.keys).sort(),f=c.WEAPON_ICON_Y-150*c.scale;for(let p of h){let l="";switch(p){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 v=nt.get(l);v&&(e.drawPic(c.WEAPON_ICON_X,f,v),f+=v.height+2)}}let g=c.POWERUP_X;for(let[p,l]of t.inventory.powerups.entries())if(l&&l>o){let v=`p_${p}`,x=nt.get(v);if(x){e.drawPic(g,c.POWERUP_Y,x);let S=Math.ceil((l-o)/1e3);ln(e,g+x.width+2,c.POWERUP_Y,S,a,s),g-=x.width+s*S.toString().length+8}}};var wr=[],Fu=0,Uu=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);wr.push(i)}catch(r){console.error(`Failed to load HUD image: pics/hud/num_${n}.pcx`,r)}wr.length>0&&(Fu=wr[0].width),await ao(e,t),await Lu(e,t),await Nu(e,t)},Bu=(e,t,n,r,i,a,s,o,c,u)=>{e.begin2D(),Pu(e,t),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]);let m=zu(e.width,e.height);Du(e,n,r,i,a,wr,Fu,u,m),Cu(e,t),Ou(e,t),Iu(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),oo(e,e.width,e.height),e.end2D()};var BA=3e3,GA=5e3,HA=4,xr=class{constructor(){this.centerPrintMsg=null;this.notifyMessages=[]}addCenterPrint(t,n){this.centerPrintMsg={text:t,startTime:n,duration:BA}}addNotify(t,n){this.notifyMessages.push({text:t,startTime:n,duration:GA}),this.notifyMessages.length>HA&&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 VA=3e3,Sr=class{constructor(){this.subtitle=null}addSubtitle(t,n){this.subtitle={text:t,startTime:n,duration:VA}}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 Ha=[{type:"null"},{type:"armor",id:Rt.BODY},{type:"armor",id:Rt.COMBAT},{type:"armor",id:Rt.JACKET},{type:"armor",id:Rt.JACKET},{type:"item",id:"item_power_screen"},{type:"item",id:"item_power_shield"},{type:"weapon",id:C.Grapple},{type:"weapon",id:C.Blaster},{type:"weapon",id:C.ChainFist},{type:"weapon",id:C.Shotgun},{type:"weapon",id:C.SuperShotgun},{type:"weapon",id:C.Machinegun},{type:"weapon",id:C.EtfRifle},{type:"weapon",id:C.Chaingun},{type:"ammo",id:U.Grenades},{type:"ammo",id:U.Trap},{type:"ammo",id:U.Tesla},{type:"weapon",id:C.GrenadeLauncher},{type:"weapon",id:C.ProxLauncher},{type:"weapon",id:C.RocketLauncher},{type:"weapon",id:C.HyperBlaster},{type:"weapon",id:C.IonRipper},{type:"weapon",id:C.PlasmaBeam},{type:"weapon",id:C.Railgun},{type:"weapon",id:C.Phalanx},{type:"weapon",id:C.BFG10K},{type:"weapon",id:C.Disruptor},{type:"ammo",id:U.Shells},{type:"ammo",id:U.Bullets},{type:"ammo",id:U.Cells},{type:"ammo",id:U.Rockets},{type:"ammo",id:U.Slugs},{type:"ammo",id:U.MagSlugs},{type:"ammo",id:U.Flechettes},{type:"ammo",id:U.Prox},{type:"ammo",id:U.Nuke},{type:"ammo",id:U.Rounds},{type:"powerup",id:$.QuadDamage},{type:"powerup",id:$.QuadFire},{type:"powerup",id:$.Invulnerability},{type:"powerup",id:$.Invisibility},{type:"powerup",id:$.Silencer},{type:"powerup",id:$.Rebreather},{type:"powerup",id:$.EnviroSuit},{type:"health",id:"ancient_head"},{type:"health",id:"legacy_head"},{type:"health",id:"adrenaline"},{type:"powerup",id:$.Bandolier},{type:"powerup",id:$.AmmoPack},{type:"powerup",id:$.IRGoggles},{type:"powerup",id:$.DoubleDamage},{type:"powerup",id:$.SphereVengeance},{type:"powerup",id:$.SphereHunter},{type:"powerup",id:$.SphereDefender},{type:"powerup",id:$.Doppelganger},{type:"powerup",id:$.TagToken},{type:"key",id:oe.DataCD},{type:"key",id:oe.PowerCube},{type:"key",id:oe.ExplosiveCharges},{type:"key",id:oe.Yellow},{type:"key",id:oe.PowerCore},{type:"key",id:oe.Pyramid},{type:"key",id:oe.DataSpinner},{type:"key",id:oe.Pass},{type:"key",id:oe.Blue},{type:"key",id:oe.Red},{type:"key",id:oe.Green},{type:"key",id:oe.CommanderHead},{type:"key",id:oe.Airstrike},{type:"key",id:oe.NukeContainer},{type:"key",id:oe.Nuke},{type:"health",id:"health_small"},{type:"health",id:"health_medium"},{type:"health",id:"health_large"},{type:"health",id:"health_mega"},{type:"key",id:oe.RedFlag},{type:"key",id:oe.BlueFlag},{type:"powerup",id:$.TechResistance},{type:"powerup",id:$.TechStrength},{type:"powerup",id:$.TechHaste},{type:"powerup",id:$.TechRegeneration},{type:"powerup",id:$.Flashlight},{type:"powerup",id:$.Compass}];var WA=2048,Ar=class{constructor(t,n){this.configstrings=new Array(WA).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&_s){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=dt();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&Qr&&(t.modelindex=n.modelindex),r&ti&&(t.modelindex2=n.modelindex2),r&ni&&(t.modelindex3=n.modelindex3),r&ri&&(t.modelindex4=n.modelindex4),r&jr&&(t.frame=n.frame),r&ei&&(t.frame=n.frame),(r&Sn||r&kn)&&(t.skinnum=n.skinnum),(r&xn||r&En)&&(t.effects=n.effects),(r&wn||r&An)&&(t.renderfx=n.renderfx),r&Kr&&(t.origin.x=n.origin.x),r&Xr&&(t.origin.y=n.origin.y),r&Zr&&(t.origin.z=n.origin.z),r&Jr&&(t.angles.x=n.angles.x),r&$r&&(t.angles.y=n.angles.y),r&Yr&&(t.angles.z=n.angles.z),r&ii&&(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&ai&&(t.sound=n.sound),r&qr&&(t.event=n.event),r&si&&(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>=Ha.length)break;let m=Ha[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:rt.None,gravity:n.gravity,deltaAngles:o,client:{inventory:r,weaponStates:{states:new Map},buttons:0},health:n.stats[1],armor:n.stats[4],ammo:n.stats[2],blend:[0,0,0,0],damageAlpha:0,damageIndicators:[],stats:[...n.stats],kick_angles:ht,gunoffset:ht,gunangles:ht,gunindex:0,onGround:!1,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32}}}getPredictionState(t){if(!this.latestFrame)return it();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 pt(s,n,Math.max(0,Math.min(1,a)))}}return n}get latestServerFrame(){return this.latestFrame?.serverFrame??0}};var It=class{constructor(){this.strings=new Map;this.models=[];this.sounds=[];this.images=[]}set(t,n){if(this.strings.set(t,n),t>=ae.Models&&t<ae.Models+Gt){let r=t-ae.Models;this.models[r]=n}else if(t>=ae.Sounds&&t<ae.Sounds+Ht){let r=t-ae.Sounds;this.sounds[r]=n}else if(t>=ae.Images&&t<ae.Images+Vt){let r=t-ae.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 Er=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 kr=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} (${Gu(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} (${Gu(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 Gu(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 Mr=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 fn=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 br=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 Rr=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 Hu(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 g=Date.now();Math.floor(g/500)%2===0&&(f+="_")}}else m.type==="toggle"&&m.getValue&&(f+=`: ${m.getValue()}`);if(d===t.selectedIndex){let v=f.replace(/\^[0-9]/g,"").length*8,x=(n-v)/2;e.drawString(x-16,h,"\r")}e.drawCenterString(h,f)})}var gn=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&Bt.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 Tr=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 zr=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 Lr=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 Nr=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 KA=[{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"}],ut=class{constructor(t=KA){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 Vu(){return new ut}function Va(e){return e}function pn(e){return e.trim().toLowerCase()}var XA=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}}},Or=(v=>(v.Forward="+forward",v.Back="+back",v.MoveLeft="+moveleft",v.MoveRight="+moveright",v.MoveUp="+moveup",v.MoveDown="+movedown",v.Jump="+jump",v.Crouch="+crouch",v.Attack="+attack",v.Use="+use",v.Holster="+holster",v.TurnLeft="+left",v.TurnRight="+right",v.LookUp="+lookup",v.LookDown="+lookdown",v.SpeedModifier="+speed",v.Zoom="+zoom",v))(Or||{}),$A={"+attack":Ne.Attack,"+use":Ne.Use,"+holster":Ne.Holster,"+jump":Ne.Jump,"+crouch":Ne.Crouch},YA=new Map(Object.values(Or).map(e=>[pn(e),e]));function jA(e){return YA.get(pn(e))}function _n(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var Pt=class{constructor(t={},n=new ut){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??zs,this.sideSpeed=t.sideSpeed??Ls,this.upSpeed=t.upSpeed??Ns,this.yawSpeed=t.yawSpeed??Os,this.pitchSpeed=t.pitchSpeed??Is,this.sensitivity=t.sensitivity??Ps,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=_n()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!0,r,n)}handleKeyUp(t,n=_n()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!1,r,n)}handleMouseButtonDown(t,n=_n()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!0,r,n)}handleMouseButtonUp(t,n=_n()){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=_n(),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 y=this.gamepadLook.y*(this.invertGamepadY?-1:1);m={x:m.x+y*a*this.gamepadLookScale,y:m.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let y=this.touchLook.y*(this.invertMouseY?-1:1);m={x:m.x+y*a,y:m.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let y=this.sampleMouseDelta(),M=Ds(y,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});m={x:m.x+M.x,y:m.y+M.y,z:0}}let d=Cs(this.viewAngles,m);this.viewAngles=d;let h=this.sample("+forward",t,n),f=this.sample("+back",t,n),g=this.sample("+moveleft",t,n),p=this.sample("+moveright",t,n),l=this.sample("+moveup",t,n),v=this.sample("+movedown",t,n),x=this.sample("+speed",t,n),S=this.sample("+jump",t,n),A=this.sample("+crouch",t,n),E=this.runByDefault?x.active?.5:1:x.active?1:.5,w=this.forwardSpeed*(h.fraction-f.fraction)*E,O=this.sideSpeed*(p.fraction-g.fraction)*E,I=this.upSpeed*(l.fraction-v.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(w+=this.forwardSpeed*this.gamepadMove.y*E,O+=this.sideSpeed*this.gamepadMove.x*E),(this.touchMove.x!==0||this.touchMove.y!==0)&&(w+=this.forwardSpeed*this.touchMove.y*E,O+=this.sideSpeed*this.touchMove.x*E),this.jumpAddsUpMove&&S.fraction>0&&(I+=this.upSpeed*S.fraction),this.crouchAddsDownMove&&A.fraction>0&&(I-=this.upSpeed*A.fraction),w=this.clampMove(w,this.forwardSpeed),O=this.clampMove(O,this.sideSpeed),I=this.clampMove(I,this.upSpeed);let V=this.collectButtonBits(t,n),_=Math.min(Math.max(Math.round(t),1),XA);return(this.anyPressed||V!==Ne.None)&&(V|=Ne.Any),this.anyPressed=!1,{msec:_,buttons:V,angles:{...this.viewAngles},forwardmove:w,sidemove:O,upmove:I,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=jA(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=Ne.None;for(let[i,a]of Object.entries($A)){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 Ir=class{constructor(t,n=new Pt(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}};var Ka={x:0,y:0,z:0};function Pr(e,t,n){return e+(t-e)*n}function Xa(e,t,n){return Pr(e,t,n)}function qA(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:Pr(u.origin.x,c.origin.x,n),y:Pr(u.origin.y,c.origin.y,n),z:Pr(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)},g=c.frame,p=u.frame,l=j.create();j.translate(l,l,[h.x,h.y,h.z]),j.rotateZ(l,l,f.z*Math.PI/180),j.rotateY(l,l,f.y*Math.PI/180),j.rotateX(l,l,f.x*Math.PI/180),d.header.magic===844121161?a.push({type:"md2",model:d,blend:{frame0:p,frame1:g,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:p,frame1:g,lerp:n},transform:l})}return a}function ZA(e){let t=new Fn(e.engine.trace),n=new Dn,r=new xr,i=new Sr,a=new vs,s=new Ar(e),o=new Mr,c=new zr,u=new Lr,m=new Nr,d=new gn(new Tr),h,f;s.onCenterPrint=_=>r.addCenterPrint(_,s.latestFrame?.serverFrame??0),s.onPrint=(_,y)=>r.addNotify(y,s.latestFrame?.serverFrame??0);let g=new It;a.setHandler(s);let p,l,v,x,S=!1,E=io(e,{get tickRate(){return 10},get frameTimeMs(){return p?.timeMs??0},get serverFrame(){return s.latestServerFrame},get serverProtocol(){return 34},get configStrings(){return g},getClientName:_=>`Player ${_}`,getKeyBinding:_=>`[${_}]`,get inAutoDemo(){return S}}),w=ro(E),O=90,I=!1;if(e.host){f=new fn(o,e.host),h=new Rr(o,f,e.host);let _=new Map;if(e.host.cvars){for(let y of e.host.cvars.list())_.set(y.name,{value:y.string,setValue:M=>e.host.cvars.setValue(y.name,M)});d.loadCvars(_)}}if(e.host?.commands&&(e.host.commands.register("playdemo",_=>{if(_.length<1){console.log("usage: playdemo <filename>");return}let y=_[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 _=so();console.log(`Crosshair changed to index ${_}`)},"Cycle through available crosshairs"),e.host.commands.register("+zoom",()=>{I=!0},"Zoom in view"),e.host.commands.register("-zoom",()=>{I=!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:Bt.Archive,onChange:y=>{let M=y.number;isNaN(M)||(O=Math.max(1,Math.min(179,M)))},description:"Field of view"});let _=e.host.cvars.get("fov");if(_){let y=_.number;isNaN(y)||(O=Math.max(1,Math.min(179,y)))}}return{loadingScreen:c,errorDialog:u,init(_){this.Init(_)},Init(_){p=_,_?.state&&t.setAuthoritative(_),w.Init(),e.engine.assets&&e.engine.renderer&&(c.start(100,"Loading assets..."),Uu(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(_){return o.isActive(),t.enqueueCommand(_)},handleInput(_,y){if(!o.isActive())return!1;if(!y)return!0;let M=_.toLowerCase();return M==="arrowup"||M==="w"?o.handleInput("up"):M==="arrowdown"||M==="s"?o.handleInput("down"):M==="arrowleft"||M==="a"?o.handleInput("left"):M==="arrowright"||M==="d"?o.handleInput("right"):M==="enter"||M===" "?o.handleInput("select"):M==="escape"?o.getState().activeMenu?.parent?o.handleInput("back"):!1:_.length===1?o.handleInput("char",_):_==="Backspace"?o.handleInput("left"):!0},toggleMenu(){if(o.isActive()){if(o.closeAll(),e.host?.cvars){let _=e.host.cvars.list().map(y=>({name:y.name,value:y.string,flags:y.flags}));d.saveCvars(_)}}else h&&o.pushMenu(h.createPauseMenu())},createMainMenu(_,y,M,F,P){let ee=new kr(o,y,M,F,P),ue=f;if(!ue){if(!e.host)throw new Error("Cannot create Main Menu: EngineHost is missing");ue=new fn(o,e.host)}let fe=e.engine.assets,We={findByExtension:mt=>fe?fe.listFiles(mt):[]},vn=new br(o,We,mt=>{console.log(`Starting map: ${mt}`),e.host?.commands.execute(`map ${mt}`)}),Wu=new Er(o,ee,{..._,optionsFactory:ue,mapsFactory:vn,onSetDifficulty:mt=>{e.host?.cvars&&e.host.cvars.setValue("skill",mt.toString())}});return{menuSystem:o,factory:Wu}},render(_){let y=a.getState(),M=[];y===Dt.Playing?l=s.getPredictionState():(_.latest?.state&&(t.setAuthoritative(_.latest),p=_.latest),_.previous?.state&&_.latest?.state?(l=pt(_.previous.state,_.latest.state,_.alpha),_.latest.state.packetEntities&&_.previous.state.packetEntities&&(M=qA(_.latest.state.packetEntities,_.previous.state.packetEntities,_.alpha,g,e))):l=_.latest?.state??_.previous?.state??t.getPredictedState());let F=_.latest&&_.previous?Math.max(0,_.latest.timeMs-_.previous.timeMs):0;v=n.sample(l,F);let P={};if(l){let{origin:ee,viewAngles:ue}=l;x=new ps,x.position=q.fromValues(ee.x,ee.y,ee.z);let fe=v?.offset??{x:0,y:0,z:0};q.add(x.position,x.position,[fe.x,fe.y,fe.z]);let We=v?.angles??{x:0,y:0,z:0};x.angles=q.fromValues(ue.x+We.x,ue.y+We.y,ue.z+We.z),x.fov=I?40:O,x.aspect=4/3,e.engine.renderer&&(x.aspect=e.engine.renderer.width/e.engine.renderer.height)}if(e.engine.renderer&&x){let ee;if(e.engine.assets){let ue=g.getModelName(1);if(ue){let fe=e.engine.assets.getMap(ue)}}e.engine.renderer.renderFrame({camera:x,world:ee,dlights:[]},M)}if(e.engine.renderer&&l&&l.client){let ee=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},ue=_.latest?.timeMs??0;this.DrawHUD(ee,ue)}return P},DrawHUD(_,y){if(e.engine.renderer){if(l&&l.client){let M={origin:l.origin,velocity:l.velocity,viewAngles:l.viewAngles,onGround:Fe(l.pmFlags,Ee.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,stats:[],kick_angles:Ka,gunoffset:Ka,gunangles:Ka,gunindex:0},F=a.getState(),P=F===Dt.Playing||F===Dt.Paused?(s.latestFrame?.serverFrame||0)*100:y;Bu(e.engine.renderer,M,l.client,l.health??0,l.armor??0,l.ammo??0,_,r,i,P)}o.isActive()&&Hu(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(w.Shutdown(),p=void 0,l=void 0,e.host?.cvars){let _=e.host.cvars.list().map(y=>({name:y.name,value:y.string,flags:y.flags}));d.saveCvars(_)}},get prediction(){return t},get lastRendered(){return l},get view(){return n},get lastView(){return v},get camera(){return x},demoPlayback:a,ParseCenterPrint(_){let y=p?.timeMs??0;r.addCenterPrint(_,y)},ParseNotify(_){let y=p?.timeMs??0;r.addNotify(_,y)},showSubtitle(_,y){let M=p?.timeMs??0;i.addSubtitle(_,M)},ParseConfigString(_,y){if(g.set(_,y),e.engine.assets){let M=e.engine.assets;if(_>=ae.Models&&_<ae.Models+Gt){let F=y.split(".").pop()?.toLowerCase();F==="md2"?M.loadMd2Model(y).catch(P=>console.warn(`Failed to precache MD2 ${y}`,P)):F==="sp2"?M.loadSprite(y).catch(P=>console.warn(`Failed to precache Sprite ${y}`,P)):F==="md3"&&M.loadMd3Model(y).catch(P=>console.warn(`Failed to precache MD3 ${y}`,P))}else _>=ae.Sounds&&_<ae.Sounds+Ht?M.loadSound(y).catch(F=>console.warn(`Failed to precache sound ${y}`,F)):_>=ae.Images&&_<ae.Images+Vt&&M.loadTexture(y).then(F=>{e.engine.renderer&&e.engine.renderer.registerTexture(y,F)}).catch(F=>console.warn(`Failed to precache image ${y}`,F))}},demoHandler:s,configStrings:g}}return ju(JA);})();
|
|
141
|
+
}`;var _s=class{constructor(){this._position=q.create(),this._angles=q.create(),this._bobAngles=q.create(),this._bobOffset=q.create(),this._kickAngles=q.create(),this._rollAngle=0,this._fov=90,this._aspect=1,this._near=.1,this._far=1e3,this._viewMatrix=j.create(),this._projectionMatrix=j.create(),this._viewProjectionMatrix=j.create(),this._dirty=!0}get position(){return this._position}set position(e){q.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){q.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){q.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){q.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){q.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=j.create();return j.perspective(t,e*Pt,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;j.perspective(this._projectionMatrix,this._fov*Pt,this._aspect,this._near,this._far);let e=j.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*Pt,a=n*Pt,s=r*Pt,o=j.create();j.identity(o),j.rotateZ(o,o,-a),j.rotateY(o,o,-i),j.rotateX(o,o,-s);let c=j.create();j.multiply(c,e,o);let u=q.add(q.create(),this._position,this._bobOffset),d=q.negate(q.create(),u),m=q.create();q.transformMat4(m,d,o);let h=q.fromValues(m[1]||0,m[2]||0,m[0]||0);j.copy(this._viewMatrix,c),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],j.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var kl=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 xl(t)}}reset(){this.offset=0}getOffset(){return this.offset}},Kr=1,Xr=2,$r=4,Yr=8,jr=16,qr=32,ps=64,Tl=128,Ml=256,Zr=512,Jr=1024,Qr=2048,wn=4096,Sn=16384,bl=32768,xn=65536,ei=1<<17,An=1<<18,En=1<<19,ti=1<<20,ni=1<<21,ri=1<<22,Rl=1<<23,ii=1<<24,kn=1<<25,ai=1<<26,si=1<<27,Ll=1,Nl=2,zl=128,mt=()=>({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}),us=()=>({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)}),Ol=class{constructor(e,t){this.protocolVersion=0,this.isDemo=Ll,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=mt();this.parseDelta(mt(),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===zl){let o=this.stream.readByte();for(let c=0;c<o;c++)this.stream.readByte()}this.isDemo===Nl&&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=us(),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:us(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let n=mt();this.parseDelta(mt(),n,t.number,t.bits),e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Tl&&(e|=this.stream.readByte()<<8),e&bl&&(e|=this.stream.readByte()<<16),e&Rl&&(e|=this.stream.readByte()<<24);let t;return e&Ml?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&Qr&&(t.modelindex=this.stream.readByte()),r&ti&&(t.modelindex2=this.stream.readByte()),r&ni&&(t.modelindex3=this.stream.readByte()),r&ri&&(t.modelindex4=this.stream.readByte()),r&jr&&(t.frame=this.stream.readByte()),r&ei&&(t.frame=this.stream.readShort()),r&xn&&r&kn?t.skinnum=this.stream.readLong():r&xn?t.skinnum=this.stream.readByte():r&kn&&(t.skinnum=this.stream.readShort()),r&Sn&&r&En?t.effects=this.stream.readLong():r&Sn?t.effects=this.stream.readByte():r&En&&(t.effects=this.stream.readShort()),r&wn&&r&An?t.renderfx=this.stream.readLong():r&wn?t.renderfx=this.stream.readByte():r&An&&(t.renderfx=this.stream.readShort()),r&Kr&&(t.origin.x=this.stream.readCoord()),r&Xr&&(t.origin.y=this.stream.readCoord()),r&Zr&&(t.origin.z=this.stream.readCoord()),r&Jr&&(t.angles.x=this.stream.readAngle()),r&$r&&(t.angles.y=this.stream.readAngle()),r&Yr&&(t.angles.z=this.stream.readAngle()),r&ii&&this.stream.readPos(t.old_origin),r&ai&&(t.sound=this.stream.readByte()),r&qr?t.event=this.stream.readByte():t.event=0,r&si&&(t.solid=this.stream.readShort())}},Dt=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(Dt||{}),vs=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 kl(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 Ol(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Il=Object.defineProperty,ys=(e,t)=>{for(var n in t)Il(e,n,{get:t[n],enumerable:!0})},ht={x:0,y:0,z:0};var r5=Math.PI/180;function Ft(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function ft(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function De(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Cl(e){return De(e,e)}function Rn(e){return Math.sqrt(Cl(e))}function ws(e){let t=Rn(e);return t===0?e:ft(e,1/t)}var Ss=0,xs=1,As=2,Pl=Math.PI/180,i5=180/Math.PI;function oi(e,t){switch(t){case Ss:return e.x;case xs:return e.y;case As:default:return e.z}}function ci(e){return e*Pl}function lt(e){let t=e%360;return t<0?360+t:t}function Ut(e){let t=ci(oi(e,xs)),n=ci(oi(e,Ss)),r=ci(oi(e,As)),i=Math.sin(t),a=Math.cos(t),s=Math.sin(n),o=Math.cos(n),c=Math.sin(r),u=Math.cos(r),d={x:o*a,y:o*i,z:-s},m={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:d,right:m,up:h}}var Ne=1,Xe=2;var di=8,mi=16,Dl=32;var Fl=16384;var Ln=65536,Es=1<<17,Ul=1<<18,Bl=1<<19,Gl=1<<20,Hl=1<<21,Vl=1<<22,Wl=1<<23,a5=1<<24,Nn=1<<25,Kl=1<<26,s5=1<<27,o5=1<<28,c5=1<<29,zn=1<<30,u5=1<<31;var d5=1<<25,m5=1<<28,l5=1<<29,h5=1<<30,f5=1<<31;var g5=Ne|Xe,_5=Ne|Ln|Xe|Nn|zn,p5=Ne|Ln|Xe,v5=Ne|Es|Xe|Nn|zn,y5=Dl|di|mi,w5=Ne|mi|di,Xl=Ne|Nn|zn|Xe|Kl,S5=Ul|Bl|Gl|Hl|Vl|Wl,x5=Ne|di|mi|Nn|zn,A5=Ne|Ln|Xe,E5=Ne|Xe,k5=Ne|Ln|Xe|Es,T5=Xl|Fl;var M5=Number.MAX_SAFE_INTEGER-1;var Bt=(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))(Bt||{});var ks=256;var $l=256,Gt=8192,Ht=2048,Vt=512,Yl=256,jl=ks*2,ql=256,ui=32;var ae=(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.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Gt]="Sounds",e[e.Images=e.Sounds+Ht]="Images",e[e.Lights=e.Images+Vt]="Lights",e[e.ShadowLights=e.Lights+$l]="ShadowLights",e[e.Items=e.ShadowLights+ql]="Items",e[e.PlayerSkins=e.Items+Yl]="PlayerSkins",e[e.General=e.PlayerSkins+ks]="General",e[e.WheelWeapons=e.General+jl]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ui]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ui]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ui]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(ae||{}),b5=ae.MaxConfigStrings;var Zl={};ys(Zl,{addReplayFrame:()=>t0,createReplaySession:()=>e0,deserializeReplay:()=>Ql,serializeReplay:()=>Jl});function Jl(e){return JSON.stringify(e,null,2)}function Ql(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 e0(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function t0(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var nt=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(nt||{});var Ee=(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))(Ee||{});function Fe(e,t){return(e&t)!==0}var li=(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))(li||{}),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 Ts(e){let{velocity:t,frametime:n,onGround:r,groundIsSlick:i,onLadder:a,waterlevel:s,pmFriction:o,pmStopSpeed:c,pmWaterFriction:u}=e,d=Rn(t);if(d<1)return{x:0,y:0,z:t.z};let m=0;if(r&&!i||a){let g=d<c?c:d;m+=g*o*n}s>0&&!a&&(m+=d*u*s*n);let h=d-m;if(h<0&&(h=0),h===d)return t;let f=h/d;return ft(t,f)}function hi(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=De(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 Ms(e){let{velocity:t,wishdir:n,wishspeed:r,accel:i,frametime:a}=e,s=Math.min(r,30),o=De(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 bs(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=Rn(a);if(s>i){let o=i/s;a=ft(a,o),s=i}return{wishdir:s===0?a:ws(a),wishspeed:s}}function Rs(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=Ft(a,{x:0,y:0,z:r.upmove}):r.upmove<-10?a=Ft(a,{x:0,y:0,z:r.upmove}):a=Ft(a,{x:0,y:0,z:10});let s=Rn(a);if(s>i){let o=i/s;a=ft(a,o),s=i}return s*=.5,{wishdir:s===0?a:ws(a),wishspeed:s}}function n0(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function r0(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function fi(e){let{pmFlags:t,cmdAngles:n,deltaAngles:r}=e,i;(t&32)!==0?i={x:0,y:n.y+r.y,z:0}:(i=n0(n,r),i={...i,x:r0(i.x)});let a=Ut(i);return{viewangles:i,...a}}var Ls=200,Ns=200,zs=200,Os=140,Is=150,Cs=3;function i0(e){let t=lt(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function Ps(e,t){return{x:i0(e.x+t.x),y:lt(e.y+t.y),z:lt(e.z+t.z)}}function Ds(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 rt=(e=>(e[e.STAT_HEALTH_ICON=0]="STAT_HEALTH_ICON",e[e.STAT_HEALTH=1]="STAT_HEALTH",e[e.STAT_AMMO_ICON=2]="STAT_AMMO_ICON",e[e.STAT_AMMO=3]="STAT_AMMO",e[e.STAT_ARMOR_ICON=4]="STAT_ARMOR_ICON",e[e.STAT_ARMOR=5]="STAT_ARMOR",e[e.STAT_SELECTED_ICON=6]="STAT_SELECTED_ICON",e[e.STAT_PICKUP_ICON=7]="STAT_PICKUP_ICON",e[e.STAT_PICKUP_STRING=8]="STAT_PICKUP_STRING",e[e.STAT_TIMER_ICON=9]="STAT_TIMER_ICON",e[e.STAT_TIMER=10]="STAT_TIMER",e[e.STAT_HELPICON=11]="STAT_HELPICON",e[e.STAT_SELECTED_ITEM=12]="STAT_SELECTED_ITEM",e[e.STAT_LAYOUTS=13]="STAT_LAYOUTS",e[e.STAT_FRAGS=14]="STAT_FRAGS",e[e.STAT_FLASHES=15]="STAT_FLASHES",e[e.STAT_CHASE=16]="STAT_CHASE",e[e.STAT_SPECTATOR=17]="STAT_SPECTATOR",e[e.STAT_CTF_TEAM1_PIC=18]="STAT_CTF_TEAM1_PIC",e[e.STAT_CTF_TEAM1_CAPS=19]="STAT_CTF_TEAM1_CAPS",e[e.STAT_CTF_TEAM2_PIC=20]="STAT_CTF_TEAM2_PIC",e[e.STAT_CTF_TEAM2_CAPS=21]="STAT_CTF_TEAM2_CAPS",e[e.STAT_CTF_FLAG_PIC=22]="STAT_CTF_FLAG_PIC",e[e.STAT_CTF_JOINED_TEAM1_PIC=23]="STAT_CTF_JOINED_TEAM1_PIC",e[e.STAT_CTF_JOINED_TEAM2_PIC=24]="STAT_CTF_JOINED_TEAM2_PIC",e[e.STAT_CTF_TEAM1_HEADER=25]="STAT_CTF_TEAM1_HEADER",e[e.STAT_CTF_TEAM2_HEADER=26]="STAT_CTF_TEAM2_HEADER",e[e.STAT_CTF_TECH=27]="STAT_CTF_TECH",e[e.STAT_CTF_ID_VIEW=28]="STAT_CTF_ID_VIEW",e[e.STAT_CTF_MATCH=29]="STAT_CTF_MATCH",e[e.STAT_CTF_ID_VIEW_COLOR=30]="STAT_CTF_ID_VIEW_COLOR",e[e.STAT_CTF_TEAMINFO=31]="STAT_CTF_TEAMINFO",e[e.STAT_WEAPONS_OWNED_1=32]="STAT_WEAPONS_OWNED_1",e[e.STAT_WEAPONS_OWNED_2=33]="STAT_WEAPONS_OWNED_2",e[e.STAT_AMMO_INFO_START=34]="STAT_AMMO_INFO_START",e[e.STAT_POWERUP_INFO_START=41]="STAT_POWERUP_INFO_START",e[e.STAT_KEY_A=44]="STAT_KEY_A",e[e.STAT_KEY_B=45]="STAT_KEY_B",e[e.STAT_KEY_C=46]="STAT_KEY_C",e[e.STAT_ACTIVE_WHEEL_WEAPON=47]="STAT_ACTIVE_WHEEL_WEAPON",e[e.STAT_COOP_RESPAWN=48]="STAT_COOP_RESPAWN",e[e.STAT_LIVES=49]="STAT_LIVES",e[e.STAT_HIT_MARKER=50]="STAT_HIT_MARKER",e[e.STAT_SELECTED_ITEM_NAME=51]="STAT_SELECTED_ITEM_NAME",e[e.STAT_HEALTH_BARS=52]="STAT_HEALTH_BARS",e[e.STAT_ACTIVE_WEAPON=53]="STAT_ACTIVE_WEAPON",e[e.STAT_LAST=54]="STAT_LAST",e))(rt||{}),a0=12,s0=9,R5=Math.ceil(a0*s0/16),o0=23,c0=2,L5=Math.ceil(o0*c0/16);var u0={};ys(u0,{U_ANGLE1:()=>_0,U_ANGLE2:()=>p0,U_ANGLE3:()=>v0,U_EFFECTS:()=>S0,U_EVENT:()=>E0,U_FRAME:()=>y0,U_MODEL:()=>m0,U_MODEL2:()=>T0,U_MODEL3:()=>M0,U_MODEL4:()=>b0,U_MOREBITS:()=>k0,U_NUMBER:()=>d0,U_ORIGIN1:()=>h0,U_ORIGIN2:()=>f0,U_ORIGIN3:()=>g0,U_REMOVE:()=>R0,U_RENDERFX:()=>x0,U_SKIN:()=>w0,U_SOLID:()=>A0,U_SOUND:()=>l0});var d0=1,m0=2,l0=4,h0=8,f0=16,g0=32,_0=64,p0=128,v0=256,y0=512,w0=1024,S0=2048,x0=4096,A0=8192,E0=16384,k0=32768,T0=1,M0=2,b0=4,R0=32768;var Fs=(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.MagSlugs=6]="MagSlugs",e[e.Trap=7]="Trap",e[e.Flechettes=8]="Flechettes",e[e.Tesla=9]="Tesla",e[e.Disruptor=10]="Disruptor",e[e.Prox=11]="Prox",e[e.Nuke=12]="Nuke",e[e.Rounds=13]="Rounds",e))(Fs||{}),N5=Object.keys(Fs).length/2;var L0=Object.defineProperty,N0=(e,t)=>{for(var n in t)L0(e,n,{get:t[n],enumerable:!0})},In=null,On=[1,1,1,1],Us=["ch1","ch2","ch3"],gi=[null,null,null],z0=e=>{for(let t=0;t<Us.length;t++){let n=Us[t];try{gi[t]=e.Draw_RegisterPic(`pics/${n}.pcx`)}catch{if(t===0)try{gi[t]=e.Draw_RegisterPic("pics/crosshair.pcx")}catch{e.Com_Print(`Failed to load crosshair image
|
|
142
|
+
`)}}}In=gi[0]},O0=(e,t,n)=>{if(In){let r=e.Draw_GetPicSize(In),i=(t-r.width)/2,a=(n-r.height)/2;e.SCR_DrawColorPic(i,a,In,{x:On[0],y:On[1],z:On[2]},On[3])}},Ks=new Map,I0=["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"],C0=e=>{for(let t of I0)try{let n=e.Draw_RegisterPic(`pics/${t}.pcx`);Ks.set(t,n)}catch{e.Com_Print(`Failed to load HUD image: pics/${t}.pcx
|
|
143
|
+
`)}},P0=new Map,D0=["d_left","d_right","d_up","d_down"],F0=e=>{for(let t of D0)try{let n=e.Draw_RegisterPic(`pics/${t}.pcx`);P0.set(t,n)}catch{e.Com_Print(`Failed to load HUD image: pics/${t}.pcx
|
|
144
|
+
`)}},U0=(e,t,n,r)=>{(!t.damageAlpha||t.damageAlpha<=0)&&(!t.damageIndicators||t.damageIndicators.length)},Bs=3e3,Gs=5e3,Hs=4,B0=class{constructor(){this.centerPrintMsg=null,this.notifyMessages=[]}addCenterPrint(e,t){this.centerPrintMsg={text:e,startTime:t,duration:Bs}}addNotify(e,t){this.notifyMessages.push({text:e,startTime:t,duration:Gs}),this.notifyMessages.length>Hs&&this.notifyMessages.shift()}setCenterPrint(e,t){this.centerPrintMsg={text:e,startTime:t,duration:Bs}}addNotification(e,t,n){this.notifyMessages.push({text:e,startTime:n,duration:Gs}),this.notifyMessages.length>Hs&&this.notifyMessages.shift()}clearNotifications(){this.notifyMessages=[]}clearCenterPrint(){this.centerPrintMsg=null}drawCenterPrint(e,t,n){if(!this.centerPrintMsg)return;if(t>this.centerPrintMsg.startTime+this.centerPrintMsg.duration){this.centerPrintMsg=null;return}this.centerPrintMsg.text.length*8;let r=n.CENTER_PRINT_Y;e.drawCenterString(r,this.centerPrintMsg.text)}drawNotifications(e,t){for(;this.notifyMessages.length>0&&t>this.notifyMessages[0].startTime+this.notifyMessages[0].duration;)this.notifyMessages.shift();let n=10;for(let r of this.notifyMessages)e.drawString(10,n,r.text),n+=10}},G0=(e,t,n,r)=>{if(!t.blend)return;let[i,a,s,o]=t.blend},H0=(e,t,n,r)=>{if(!t.pickupIcon)return;let i=Ks.get(t.pickupIcon);if(i){let a=e.Draw_GetPicSize(i),s=n-a.width-10,o=r-a.height-10;e.SCR_DrawPic(s,o,i)}},_i=(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]),d=i[u];d&&(s?e.SCR_DrawColorPic(t+c*a,n,d,{x:s[0],y:s[1],z:s[2]},s[3]):e.SCR_DrawPic(t+c*a,n,d))}},V0=(e,t,n,r,i,a)=>{let s=t.stats[rt.STAT_HEALTH]||0,o=t.stats[rt.STAT_ARMOR]||0,c=t.stats[rt.STAT_AMMO]||0;t.stats[rt.STAT_ARMOR_ICON],t.stats[rt.STAT_AMMO_ICON];let u;if(s<=25&&(u=[1,0,0,1]),n.length>0&&(_i(e,a.HEALTH_X,a.HEALTH_Y,s,n,r,u),_i(e,a.ARMOR_X,a.ARMOR_Y,o,n,r),_i(e,a.AMMO_X,a.AMMO_Y,c,n,r)),t.pickupIcon){let d=e.Draw_RegisterPic(t.pickupIcon);d&&e.SCR_DrawPic(a.WEAPON_ICON_X,a.WEAPON_ICON_Y,d)}},pi=640,gt=480,W0=(e,t)=>{let n=e/pi,r=t/gt,i=Math.min(n,r);return{HEALTH_X:100*i,HEALTH_Y:t-(gt-450)*i,ARMOR_X:200*i,ARMOR_Y:t-(gt-450)*i,AMMO_X:e-(pi-540)*i,AMMO_Y:t-(gt-450)*i,CENTER_PRINT_X:e/2,CENTER_PRINT_Y:100*i,WEAPON_ICON_X:10*i,WEAPON_ICON_Y:t-(gt-450)*i,POWERUP_X:e-(pi-610)*i,POWERUP_Y:t-(gt-450)*i,scale:i}},he=null,Si=[],Xs=0,K0=new B0;function X0(e){he=e}function $0(){if(he){Si.length=0;for(let e=0;e<10;e++)try{let t=he.Draw_RegisterPic(`pics/hud/num_${e}.pcx`);Si.push(t),e===0&&(Xs=he.Draw_GetPicSize(t).width)}catch{he.Com_Print(`Warning: Failed to load HUD image: pics/hud/num_${e}.pcx
|
|
145
|
+
`)}z0(he),C0(he),F0(he)}}function Y0(e,t,n,r,i,a,s){if(!he){console.error("CG_DrawHUD: cgame imports not initialized");return}let o=he.CL_ClientTime(),c=W0(n.width,n.height);if(G0(he,s,n.width,n.height),V0(he,s,Si,Xs,o,c),H0(he,s,n.width,n.height),U0(he,s,n.width,n.height),s.centerPrint){let u=s.centerPrint.split(`
|
|
146
|
+
`),d=n.height/2-u.length*10;for(let m of u)he.SCR_DrawCenterString(d,m),d+=16}O0(he,n.width,n.height)}function Pn(){return K0}var vi=1e-6,Cn=typeof Float32Array<"u"?Float32Array:Array,Vs=Math.random;function yi(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var j0={};N0(j0,{add:()=>eh,angle:()=>Ah,bezier:()=>gh,ceil:()=>th,clone:()=>q0,copy:()=>J0,create:()=>$s,cross:()=>mh,dist:()=>Nh,distance:()=>Js,div:()=>Lh,divide:()=>Zs,dot:()=>xi,equals:()=>Mh,exactEquals:()=>Th,floor:()=>nh,forEach:()=>Ch,fromValues:()=>Z0,hermite:()=>fh,inverse:()=>uh,len:()=>Oh,length:()=>Ys,lerp:()=>lh,max:()=>ih,min:()=>rh,mul:()=>Rh,multiply:()=>qs,negate:()=>ch,normalize:()=>dh,random:()=>_h,rotateX:()=>wh,rotateY:()=>Sh,rotateZ:()=>xh,round:()=>ah,scale:()=>sh,scaleAndAdd:()=>oh,set:()=>Q0,slerp:()=>hh,sqrDist:()=>zh,sqrLen:()=>Ih,squaredDistance:()=>Qs,squaredLength:()=>eo,str:()=>kh,sub:()=>bh,subtract:()=>js,transformMat3:()=>vh,transformMat4:()=>ph,transformQuat:()=>yh,zero:()=>Eh});function $s(){var e=new Cn(3);return Cn!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function q0(e){var t=new Cn(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Ys(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Z0(e,t,n){var r=new Cn(3);return r[0]=e,r[1]=t,r[2]=n,r}function J0(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Q0(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function eh(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function js(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function qs(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function Zs(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function th(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function nh(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function rh(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 ih(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 ah(e,t){return e[0]=yi(t[0]),e[1]=yi(t[1]),e[2]=yi(t[2]),e}function sh(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function oh(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 Js(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 Qs(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 eo(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function ch(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function uh(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function dh(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 xi(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function mh(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 lh(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 hh(e,t,n,r){var i=Math.acos(Math.min(Math.max(xi(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 fh(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),d=s*(3-2*a);return e[0]=t[0]*o+n[0]*c+r[0]*u+i[0]*d,e[1]=t[1]*o+n[1]*c+r[1]*u+i[1]*d,e[2]=t[2]*o+n[2]*c+r[2]*u+i[2]*d,e}function gh(e,t,n,r,i,a){var s=1-a,o=s*s,c=a*a,u=o*s,d=3*a*o,m=3*c*s,h=c*a;return e[0]=t[0]*u+n[0]*d+r[0]*m+i[0]*h,e[1]=t[1]*u+n[1]*d+r[1]*m+i[1]*h,e[2]=t[2]*u+n[2]*d+r[2]*m+i[2]*h,e}function _h(e,t){t=t===void 0?1:t;var n=Vs()*2*Math.PI,r=Vs()*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 ph(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 vh(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 yh(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],d=i*u-a*c,m=a*o-r*u,h=r*c-i*o;return d=d+d,m=m+m,h=h+h,e[0]=o+s*d+i*h-a*m,e[1]=c+s*m+a*d-r*h,e[2]=u+s*h+r*m-i*d,e}function wh(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 Sh(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 xh(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 Ah(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&&xi(e,t)/c;return Math.acos(Math.min(Math.max(u,-1),1))}function Eh(e){return e[0]=0,e[1]=0,e[2]=0,e}function kh(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Th(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Mh(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)<=vi*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(r-s)<=vi*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-o)<=vi*Math.max(1,Math.abs(i),Math.abs(o))}var bh=js,Rh=qs,Lh=Zs,Nh=Js,zh=Qs,Oh=Ys,Ih=eo,Ch=(function(){var e=$s();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 Ph={runPitch:.002,runRoll:.01,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function Dh(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 Fh(e,t,n){return t?e>210?n/400:e>100?n/800:n/1600:0}function Uh(e,t,n,r,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let a=Fh(t,r,i),s=e+a,c=Fe(n,Ee.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 Dn=class{constructor(e={}){this.bobTime=0,this.bobCycle=0,this.bobCycleRun=0,this.bobFracSin=0,this.settings={...Ph,...e}}addKick(e){e.durationMs<=0||(this.kick={...e,remainingMs:e.durationMs})}get last(){return this.lastSample}sample(e,t){let{forward:n,right:r}=Ut(fi({pmFlags:e.pmFlags,cmdAngles:e.viewAngles,deltaAngles:e.deltaAngles??ht}).viewangles),i=Math.sqrt(e.velocity.x*e.velocity.x+e.velocity.y*e.velocity.y),a=Fe(e.pmFlags,Ee.OnGround),s=Uh(this.bobTime,i,e.pmFlags,a,t);this.bobTime=s.bobTime,this.bobCycle=s.bobCycle,this.bobCycleRun=s.bobCycleRun,this.bobFracSin=s.bobFracSin;let o=De(e.velocity,n)*this.settings.runPitch,c=De(e.velocity,r),u=c<0?-1:1,m=Math.abs(c)*this.settings.runRoll;m>2&&(m=2),m*=u;let h=this.bobFracSin*this.settings.bobPitch*i,f=this.bobFracSin*this.settings.bobRoll*i;Fe(e.pmFlags,Ee.Ducked)&&a&&(h*=6,f*=6),o+=Math.min(h,this.settings.maxBobAngle),f=Math.min(f,this.settings.maxBobAngle),this.bobCycle&1&&(f=-f),m+=f;let g=Math.min(this.bobFracSin*i*this.settings.bobUp,this.settings.maxBobHeight),_=0,l=0;if(this.kick&&this.kick.remainingMs>0){let A=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));_+=A*this.kick.pitch,l+=A*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-t),this.kick.remainingMs===0&&(this.kick=void 0)}let x={angles:{x:o+_,y:0,z:m+l},offset:Dh({x:0,y:0,z:g}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:i};return this.lastSample=x,x}},Bh={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},to=800,Ue={x:0,y:0,z:0},Gh=250;function it(){return{origin:Ue,velocity:Ue,viewAngles:Ue,onGround:!1,pmFlags:Ee.OnGround,pmType:li.Normal,waterLevel:nt.None,gravity:to,deltaAngles:Ue,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:0,damageIndicators:[],blend:[0,0,0,0],stats:[],kick_angles:Ue,gunoffset:Ue,gunangles:Ue,gunindex:0,pickupIcon:void 0,centerPrint:void 0,notify:void 0,client:void 0,health:0,armor:0,ammo:0}}function Ws(e){return e?{...it(),...e,origin:{...e.origin},velocity:{...e.velocity},viewAngles:{...e.viewAngles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:Ue,blend:e.blend?[...e.blend]:[0,0,0,0],damageIndicators:e.damageIndicators?[...e.damageIndicators]:[],stats:e.stats?[...e.stats]:[]}:it()}function ge(e,t,n){return e+(t-e)*n}function wi(e,t,n){let r=lt(t-e);return r>180&&(r-=360),lt(e+r*n)}function _t(e,t,n){let r=Math.max(0,Math.min(n,1));return{...t,origin:{x:ge(e.origin.x,t.origin.x,r),y:ge(e.origin.y,t.origin.y,r),z:ge(e.origin.z,t.origin.z,r)},velocity:{x:ge(e.velocity.x,t.velocity.x,r),y:ge(e.velocity.y,t.velocity.y,r),z:ge(e.velocity.z,t.velocity.z,r)},viewAngles:{x:wi(e.viewAngles.x,t.viewAngles.x,r),y:wi(e.viewAngles.y,t.viewAngles.y,r),z:wi(e.viewAngles.z,t.viewAngles.z,r)},damageAlpha:ge(e.damageAlpha,t.damageAlpha,r),blend:[ge(e.blend[0],t.blend[0],r),ge(e.blend[1],t.blend[1],r),ge(e.blend[2],t.blend[2],r),ge(e.blend[3],t.blend[3],r)],health:ge(e.health||0,t.health||0,r),armor:ge(e.armor||0,t.armor||0,r),ammo:ge(e.ammo||0,t.ammo||0,r)}}function Hh(e,t,n,r){let i=Math.min(Math.max(t.msec,0),Gh)/1e3,a=Fe(e.pmFlags,Ee.OnGround),s=Fe(e.pmFlags,Ee.OnLadder),o=Ts({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:d}=fi({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??Ue}),m=e.waterLevel>nt.None?Rs({forward:u,right:d,cmd:t,maxSpeed:n.pmWaterSpeed}):bs({forward:u,right:d,cmd:t,maxSpeed:n.pmMaxSpeed});if(e.waterLevel>nt.None)o=hi({velocity:o,wishdir:m.wishdir,wishspeed:m.wishspeed,accel:n.pmWaterAccelerate,frametime:i});else if(a||s){let g=Fe(e.pmFlags,Ee.Ducked)?n.pmDuckSpeed:n.pmMaxSpeed,_=m.wishspeed>g?{wishdir:m.wishdir,wishspeed:g}:m;o=hi({velocity:o,wishdir:_.wishdir,wishspeed:_.wishspeed,accel:n.pmAccelerate,frametime:i})}else o=Ms({velocity:o,wishdir:m.wishdir,wishspeed:m.wishspeed,accel:n.pmAirAccelerate,frametime:i}),o={...o,z:o.z-(e.gravity??to)*i};let f=r(e.origin,Ft(e.origin,ft(o,i))).endpos;return{...e,origin:f,velocity:o,viewAngles:c}}var Fn=class{constructor(e,t={}){this.baseFrame={frame:0,timeMs:0,state:it()},this.commands=[],this.predicted=it(),this.settings={...Bh,...t},this.trace=e,this.predicted=this.baseFrame.state??it()}setAuthoritative(e){let t=Ws(e.state);return this.baseFrame={...e,state:t},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>e.frame),this.recompute()}enqueueCommand(e){return this.commands.push(e),this.recompute()}getPredictedState(){return this.predicted}recompute(){let e=Ws(this.baseFrame.state);for(let t of this.commands)e=Hh(e,t,this.settings,this.trace);return this.predicted=e,e}},Ae=null;function Vh(){if(!Ae){console.error("CGame Init: cgame imports not set");return}Ae.Com_Print(`===== CGame Initialization =====
|
|
147
|
+
`),X0(Ae),Ae.Com_Print(`CGame initialized
|
|
148
|
+
`)}function Wh(){Ae&&Ae.Com_Print(`CGame shutdown
|
|
149
|
+
`),Ae=null}function Kh(e,t,n,r,i,a,s){Y0(e,t,n,r,i,a,s)}function Xh(){$0()}function $h(e){return 0}function Yh(e){return 0}function jh(e){return[]}function qh(e,t){return 0}function Zh(e){return 0}function Jh(e){return 0}function Qh(e){}function ef(e,t){}function tf(e,t,n){if(!Ae)return;Pn().setCenterPrint(e,Ae.CL_ClientTime())}function nf(e,t,n){if(!Ae)return;Pn().addNotification(t,n,Ae.CL_ClientTime())}function rf(e){Pn().clearNotifications()}function af(e){Pn().clearCenterPrint()}function sf(e){return{x:0,y:0,z:0}}function of(e){return null}function no(e){return Ae=e,{Init:Vh,Shutdown:Wh,DrawHUD:Kh,TouchPics:Xh,LayoutFlags:$h,GetActiveWeaponWheelWeapon:Yh,GetOwnedWeaponWheelWeapons:jh,GetWeaponWheelAmmoCount:qh,GetPowerupWheelCount:Zh,GetHitMarkerDamage:Jh,Pmove:Qh,ParseConfigString:ef,ParseCenterPrint:tf,NotifyMessage:nf,ClearNotify:rf,ClearCenterprint:af,GetMonsterFlashOffset:sf,GetExtension:of}}function ro(e,t){let n=new Map,r=new Set,i=()=>e.engine.renderer;return{get tick_rate(){return t.tickRate},get frame_time_s(){return t.frameTimeMs/1e3},get frame_time_ms(){return t.frameTimeMs},Com_Print:a=>{console.log(`[CGAME] ${a}`)},Com_Error:a=>{console.error(`[CGAME ERROR] ${a}`)},get_configstring:a=>t.configStrings.get(a)||"",TagMalloc:(a,s)=>({}),TagFree:a=>{},FreeTags:a=>{},cvar:(a,s,o)=>{let c=e.host?.cvars?.get(a);return c||null},cvar_set:(a,s)=>{e.host?.cvars?.setValue(a,s)},cvar_forceset:(a,s)=>{e.host?.cvars?.setValue(a,s)},CL_FrameValid:()=>!0,CL_FrameTime:()=>t.frameTimeMs,CL_ClientTime:()=>t.frameTimeMs,CL_ServerFrame:()=>t.serverFrame,CL_ServerProtocol:()=>t.serverProtocol,CL_GetClientName:a=>t.getClientName(a),CL_GetClientPic:a=>"",CL_GetClientDogtag:a=>"",CL_GetKeyBinding:a=>t.getKeyBinding(a),Draw_RegisterPic:a=>(n.has(a)||r.has(a)||(r.add(a),e.engine.assets&&e.engine.assets.loadTexture(a).then(s=>{if(e.engine.renderer){let o=e.engine.renderer.registerTexture(a,s);n.set(a,o)}r.delete(a)}).catch(s=>{console.warn(`[CGameImport] Failed to load pic: ${a}`,s),r.delete(a)})),a),Draw_GetPicSize:a=>{let s=a,o=n.get(s);return o?{width:o.width,height:o.height}:{width:0,height:0}},SCR_DrawChar:(a,s,o)=>{i()?.drawString(a,s,String.fromCharCode(o))},SCR_DrawPic:(a,s,o)=>{let c=o,u=n.get(c);u&&i()?.drawPic(a,s,u)},SCR_DrawColorPic:(a,s,o,c,u)=>{let d=o,m=n.get(d);m&&i()?.drawPic(a,s,m,[c.x,c.y,c.z,u])},SCR_DrawFontString:(a,s,o)=>{i()?.drawString(a,s,o)},SCR_DrawCenterString:(a,s)=>{i()?.drawCenterString(a,s)},SCR_MeasureFontString:a=>a.replace(/\^[0-9]/g,"").length*8,SCR_FontLineHeight:()=>8,SCR_SetAltTypeface:a=>{},SCR_DrawBind:(a,s,o)=>{let c=t.getKeyBinding(o);i()?.drawString(a,s,`[${o}]`)},Localize:a=>a,CL_GetTextInput:()=>"",CL_GetWarnAmmoCount:()=>5,CL_InAutoDemoLoop:()=>t.inAutoDemo,PM_Trace:(a,s,o,c)=>e.engine.trace(a,s,o,c)}}var Oe=null,$e=0,cf=[1,1,1,1],pt=!0,Wt=["ch1","ch2","ch3"],vt=[null,null,null],io=async(e,t)=>{for(let n=0;n<Wt.length;n++){let r=Wt[n];try{let i=await t.loadTexture(`pics/${r}.pcx`);vt[n]=e.registerTexture(r,i)}catch{if(n===0)try{let a=await t.loadTexture("pics/crosshair.pcx");vt[n]=e.registerTexture("crosshair",a)}catch{console.error("Failed to load crosshair image")}}}Oe=vt[0]};var ao=()=>{if(pt?($e++,$e>=Wt.length&&(pt=!1,$e=0)):(pt=!0,$e=0),pt){if(Oe=vt[$e],!Oe){let e=!1;for(let t=0;t<Wt.length;t++){let n=($e+t)%Wt.length;if(vt[n]){$e=n,Oe=vt[n],e=!0;break}}e||(Oe=null)}}else Oe=null;return pt?$e:-1},so=(e,t,n)=>{if(pt&&Oe){let r=(t-Oe.width)/2,i=(n-Oe.height)/2;e.drawPic(r,i,Oe,cf)}};var uf=Object.defineProperty,yo=(e,t)=>{for(var n in t)uf(e,n,{get:t[n],enumerable:!0})},K={x:0,y:0,z:0};var B5=Math.PI/180;function df(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 z(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 wo(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function mf(e){return wo(e,e)}function Tt(e){return Math.sqrt(mf(e))}function D(e){let t=Tt(e);return t===0?e:B(e,1/t)}function lf(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 hf(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 Fi=0,Ui=1,So=2,ff=Math.PI/180,gf=180/Math.PI;function Xt(e,t){switch(t){case Fi:return e.x;case Ui:return e.y;case So:default:return e.z}}function Bn(e){return e*ff}function Li(e){return e*gf}function Ni(e){let t=e%360;return t<0?360+t:t}function J(e){let t=Bn(Xt(e,Ui)),n=Bn(Xt(e,Fi)),r=Bn(Xt(e,So)),i=Math.sin(t),a=Math.cos(t),s=Math.sin(n),o=Math.cos(n),c=Math.sin(r),u=Math.cos(r),d={x:o*a,y:o*i,z:-s},m={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:d,right:m,up:h}}function Bi(e){let t=Xt(e,Fi),n=Xt(e,Ui);if(t===0)return n===0?0:n>0?90:270;let r=Li(Math.atan2(n,t));return r<0?r+360:r}function Zt(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=Li(Math.atan2(n,t)):n>0?i=90:i=270,i<0&&(i+=360);let a=Math.sqrt(t*t+n*n),s=Li(Math.atan2(r,a));return s<0&&(s+=360),{x:-s,y:i,z:0}}var Ie=624,_f=397,pf=2567483615,vf=2147483648,yf=2147483647,Ai=4294967296,wf=class{constructor(e=5489){this.state=new Uint32Array(Ie),this.index=Ie,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<Ie;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=Ie}nextUint32(){this.index>=Ie&&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<Ie;e++){let t=this.state[e]&vf|this.state[(e+1)%Ie]&yf,n=this.state[(e+_f)%Ie]^t>>>1;(t&1)!==0&&(n^=pf),this.state[e]=n>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==Ie)throw new Error(`Expected ${Ie} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},xo=class{constructor(e={}){this.mt=new wf(e.seed)}seed(e){this.mt.seed(e)}frandom(){return this.mt.nextUint32()/Ai}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=Ai-Ai%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 Gi(e){return new xo(e)}var _e=1,Ze=2;var Hi=8,Vi=16,Sf=32;var xf=16384;var Yn=65536,Ao=1<<17,Af=1<<18,Ef=1<<19,kf=1<<20,Tf=1<<21,Mf=1<<22,bf=1<<23,G5=1<<24,st=1<<25,jn=1<<26,H5=1<<27,V5=1<<28,W5=1<<29,Mt=1<<30,K5=1<<31;var X5=1<<25,$5=1<<28,Y5=1<<29,j5=1<<30,q5=1<<31,Rf=_e|Ze,Z5=_e|Yn|Ze|st|Mt,J5=_e|Yn|Ze,Hn=_e|Ao|Ze|st|Mt,Lf=Sf|Hi|Vi,Q5=_e|Vi|Hi,Jt=_e|st|Mt|Ze|jn,ek=Af|Ef|kf|Tf|Mf|bf,tk=_e|Hi|Vi|st|Mt,nk=_e|Yn|Ze,rk=_e|Ze,ik=_e|Yn|Ze|Ao,ak=Jt|xf,sk=Number.MAX_SAFE_INTEGER-1;var Eo=256,Nf=256,zf=8192,Of=2048,If=512,Cf=256,Pf=Eo*2,Df=256,Ei=32,ko=(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.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",e[e.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",e[e.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+zf]="Sounds",e[e.Images=e.Sounds+Of]="Images",e[e.Lights=e.Images+If]="Lights",e[e.ShadowLights=e.Lights+Nf]="ShadowLights",e[e.Items=e.ShadowLights+Df]="Items",e[e.PlayerSkins=e.Items+Cf]="PlayerSkins",e[e.General=e.PlayerSkins+Eo]="General",e[e.WheelWeapons=e.General+Pf]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ei]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ei]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ei]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(ko||{}),ok=ko.MaxConfigStrings,Ff={};yo(Ff,{addReplayFrame:()=>Hf,createReplaySession:()=>Gf,deserializeReplay:()=>Bf,serializeReplay:()=>Uf});function Uf(e){return JSON.stringify(e,null,2)}function Bf(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 Gf(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Hf(e,t,n,r){e.frames.push({serverFrame:n,cmd:t,timestamp:Date.now()-r})}var pe=(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))(pe||{}),Se=(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))(Se||{});var $=(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))($||{});var Vf=12,Wf=9,ck=Math.ceil(Vf*Wf/16),Kf=23,Xf=2,uk=Math.ceil(Kf*Xf/16);var $f={};yo($f,{U_ANGLE1:()=>e1,U_ANGLE2:()=>t1,U_ANGLE3:()=>n1,U_EFFECTS:()=>a1,U_EVENT:()=>c1,U_FRAME:()=>r1,U_MODEL:()=>jf,U_MODEL2:()=>d1,U_MODEL3:()=>m1,U_MODEL4:()=>l1,U_MOREBITS:()=>u1,U_NUMBER:()=>Yf,U_ORIGIN1:()=>Zf,U_ORIGIN2:()=>Jf,U_ORIGIN3:()=>Qf,U_REMOVE:()=>h1,U_RENDERFX:()=>s1,U_SKIN:()=>i1,U_SOLID:()=>o1,U_SOUND:()=>qf});var Yf=1,jf=2,qf=4,Zf=8,Jf=16,Qf=32,e1=64,t1=128,n1=256,r1=512,i1=1024,a1=2048,s1=4096,o1=8192,c1=16384,u1=32768,d1=1,m1=2,l1=4,h1=32768;var P=(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))(P||{}),W=(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.MagSlugs=6]="MagSlugs",e[e.Trap=7]="Trap",e[e.Flechettes=8]="Flechettes",e[e.Tesla=9]="Tesla",e[e.Disruptor=10]="Disruptor",e[e.Prox=11]="Prox",e[e.Nuke=12]="Nuke",e[e.Rounds=13]="Rounds",e))(W||{}),dk=Object.keys(W).length/2,ye=(e=>(e.Shells="ammo_shells",e.Bullets="ammo_bullets",e.Rockets="ammo_rockets",e.Grenades="ammo_grenades",e.Cells="ammo_cells",e.Slugs="ammo_slugs",e))(ye||{});function qe(e,t){return(e&t)!==0}var bt=(e=>(e.BODY="body",e.COMBAT="combat",e.JACKET="jacket",e))(bt||{}),f1={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 g1(e,t,n){if(e<=0||qe(t,130)||!n.armorType||n.armorCount<=0)return{saved:0,remainingArmor:n.armorCount};let r=f1[n.armorType],i=qe(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 _1(e,t,n,r,i,a={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(qe(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:s}=J(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,d=i.type==="screen"||u?1:2,m=i.type==="screen"?e/3:2*e/3;m=Math.max(1,m);let h=i.cellCount*d;qe(t,4)&&(h=Math.max(1,Math.floor(h/2))),h>m&&(h=Math.floor(m));let f=h/d;qe(t,4)&&(f*=2),f=Math.max(1,Math.floor(f));let g=Math.max(d,f),_=Math.max(0,i.cellCount-g);return{saved:h,remainingCells:_}}var mk={[ye.Shells]:{id:ye.Shells,ammoType:W.Shells,quantity:10,weaponAmmo:!1},[ye.Bullets]:{id:ye.Bullets,ammoType:W.Bullets,quantity:50,weaponAmmo:!1},[ye.Rockets]:{id:ye.Rockets,ammoType:W.Rockets,quantity:5,weaponAmmo:!1},[ye.Grenades]:{id:ye.Grenades,ammoType:W.Grenades,quantity:5,weaponAmmo:!0},[ye.Cells]:{id:ye.Cells,ammoType:W.Cells,quantity:50,weaponAmmo:!1},[ye.Slugs]:{id:ye.Slugs,ammoType:W.Slugs,quantity:10,weaponAmmo:!1}};var oe=(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))(oe||{});var p1={...K};var lk=Object.freeze({aiflags:0,last_sighting:p1,trail_time:0,pausetime:0});var Wi=[{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:"style",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}],v1=20,y1=440,w1=940,ki=32,S1=1<<24,Vn=1;function oo(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 Je(e,t){let n=oo(e),r=oo(t),i=hf(n.mins,n.maxs,r.mins,r.maxs);return Math.sqrt(i)}function x1(e){return e<=v1?"melee":e<=y1?"near":e<=w1?"mid":"far"}function Yt(e,t){let{forward:n}=J(e.angles),r=D(z(t.origin,e.origin)),i=wo(r,n);return(e.spawnflags&Vn)!==0&&e.trail_time===0&&e.enemy===null?i>.15:i>-.3}function Qt(e,t,n,r){if((t.flags&S1)!==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 A1(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=Bi(n)}function To(e){e.angles.y=Ni(e.ideal_yaw)}function E1(e,t,n){e.enemy&&(e.goalentity=e.enemy,A1(e,e.enemy),To(e),(e.monsterinfo.aiflags&1)!==0?e.monsterinfo.stand?.(e,n):(e.monsterinfo.run?.(e,n),e.attack_finished_time=t.timeSeconds+1))}function k1(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){E1(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 T1(e,t,n,r){let i=Je(e,t),a=x1(i);return a==="far"||t.light_level<=5||!Qt(e,t,r,{throughGlass:!1})?!1:a==="near"?n.timeSeconds<=t.show_hostile||Yt(e,t):a==="mid"?Yt(e,t):!0}function M1(e,t,n,r,i){if((e.spawnflags&Vn)!==0){if(!Qt(e,t,i))return!1}else if(r.canHear&&!r.canHear(e,t))return!1;let a=z(t.origin,e.origin);return Tt(a)>1e3||r.areasConnected&&!r.areasConnected(e,t)?!1:(e.ideal_yaw=Bi(a),To(e),e.monsterinfo.aiflags|=4,e.enemy=t,!0)}function b1(e,t){return t.sightEntity&&t.sightEntityFrame>=t.frameNumber-1&&(e.spawnflags&Vn)===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&Vn)===0?{candidate:t.sound2Entity,heardit:!0}:t.sightClient?{candidate:t.sightClient,heardit:!1}:{candidate:null,heardit:!1}}function R1(e){return(e.flags&ki)!==0?!0:(e.svflags&4)!==0&&e.enemy?(e.enemy.flags&ki)!==0:!!(e.enemy&&(e.enemy.flags&ki)!==0)}function Ki(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}=b1(e,t);if(!a||!a.inUse)return!1;if(a===e.enemy)return!0;if(R1(a))return!1;if(s){if(!M1(e,a,t,i,r))return!1}else{if(!T1(e,a,t,r))return!1;e.monsterinfo.aiflags&=-5,e.enemy=a}return k1(e,t,n),(e.monsterinfo.aiflags&4)===0&&e.monsterinfo.sight?.(e,e.enemy),!0}function Mo(e,t){if(t===0)return{x:0,y:0,z:0};let n=Bn(e);return{x:Math.cos(n)*t,y:Math.sin(n)*t,z:0}}function Xi(e,t,n){let r=Mo(t,n),i=e.origin;return i.x+=r.x,i.y+=r.y,i.z+=r.z,!0}function en(e,t){let n=Ni(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=Ni(n+a)}function ie(e,t){Xi(e,e.angles.y,t)}function qn(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=Bi(n)}function te(e,t,n){Ki(e,n.targetAwareness,n,n.trace)||en(e,t)}function ce(e,t,n,r){if(!Ki(e,r.targetAwareness,r,r.trace)&&(qn(e,e.goalentity),en(e,n),t!==0&&Xi(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&Je(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 se(e,t,n,r){if((e.monsterinfo.aiflags&1)!==0){e.monsterinfo.stand?.(e,r);return}Ki(e,r.targetAwareness,r,r.trace),qn(e,e.enemy??e.goalentity),en(e,n),!(e.monsterinfo.checkattack&&e.monsterinfo.checkattack(e,r))&&t!==0&&bo(e,e.angles.y,t,r)}function L1(e,t,n,r){t&&qn(e,t),en(e,r),n!==0&&Xi(e,e.angles.y,n)}function ne(e,t,n,r){qn(e,e.enemy),en(e,n),!(e.monsterinfo.checkattack&&e.monsterinfo.checkattack(e,r))&&t!==0&&bo(e,e.angles.y,t,r)}function N1(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,Hn);if(e.groundentity=r.ent,!e.groundentity&&!r.allsolid&&!r.startsolid&&r.fraction===1){let i=t.pointcontents(n);i&Lf?(e.waterlevel=1,e.watertype=i):(e.waterlevel=0,e.watertype=0)}}function z1(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,Hn).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,Hn).fraction<1))return!0;return!1}function bo(e,t,n,r){if((e.flags&3)===0&&e.movetype!==1&&!e.groundentity&&e.waterlevel===0)return!1;let i=Mo(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,Hn).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&&!z1(e,r)?(e.origin.x=o.x,e.origin.y=o.y,e.origin.z=o.z,!1):((e.flags&3)===0&&N1(e,r),!0)}var O1=Wi.filter(e=>e.save||e.type==="callback"),hk=new Map(O1.map(e=>[e.name,e]));var fk=1/40;function I1(e,t){let n=e.states.get(t);return n||(n={lastFireTime:0},e.states.set(t,n)),n}var C1=1;function P1(e,t){if(!e.client)return;let n=I1(e.client.weaponStates,P.Chaingun);!(e.client.buttons&C1)&&n.spinupCount&&n.spinupCount>0&&(t.sound(e,0,"weapons/chngnd1a.wav",1,0,0),n.spinupCount=0)}var Ro={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:P.Blaster,ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:P.Shotgun,ammoType:W.Shells,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:P.SuperShotgun,ammoType:W.Shells,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:P.Machinegun,ammoType:W.Bullets,initialAmmo:50,pickupAmmo:50,fireRate:.1,think:P1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:P.Chaingun,ammoType:W.Bullets,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:P.GrenadeLauncher,ammoType:W.Grenades,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:P.RocketLauncher,ammoType:W.Rockets,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:P.HyperBlaster,ammoType:W.Cells,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:P.Railgun,ammoType:W.Slugs,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:P.BFG10K,ammoType:W.Cells,initialAmmo:50,pickupAmmo:50,fireRate:1}};function D1(e,t){if(!e)return 1;let n=e.client;if(!n)return 1;let r=1;return n.quad_time&&n.quad_time>t&&(r*=4),n.double_time&&n.double_time>t&&(r*=2),r}function F1(e,t,n,r,i){if(qe(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=D(n),u=B(o,(t===e?1600:500)*r/s);return e.velocity=U(e.velocity,u),u}function U1(e,t,n,r,i){let a=r,s=0,o=0,c,u;if(e.powerArmor){let d=_1(r,i,t,n,e.powerArmor);s=d.saved,c=d.remainingCells,a-=s}if(e.regularArmor){let d=g1(a,i,e.regularArmor);o=d.saved,u=d.remainingArmor,a-=o}return[Math.max(0,a),s,o,c,u]}function co(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 le(e,t,n,r,i,a,s,o,c,u,d,m){if(!e.takedamage)return null;let h=D1(n,d),f=s*h,g=o*h;if(!qe(c,32)&&((e.flags??0)&1)!==0&&f>0)return{take:0,psave:0,asave:f,knocked:{x:0,y:0,z:0},killed:!1};let l=F1(e,n,r,g,c),[v,S,x,A,E]=U1(e,i,a,f,c);e.powerArmor&&A!==void 0&&(e.powerArmor.cellCount=A),e.regularArmor&&(e.regularArmor.armorCount=E??e.regularArmor.armorCount);let w=v;w>0&&(e.health-=w,m&&!qe(c,1024)&&(e.classname==="player"||e.monsterinfo)&&m(i,1,pe.temp_entity,Se.BLOOD,i,a));let O=e.health<=0;return O?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:S,asave:x,knocked:l,killed:O,remainingCells:A,remainingArmor:E}}function $i(e,t,n,r,i,a,s,o,c,u={},d){let m=[],h=co(t),f=u.canDamage??(()=>!0);for(let g of e){if(g===i||!g.takedamage||!f(g,t))continue;let _=g.mins&&g.maxs?lf(h,U(g.origin,g.mins),U(g.origin,g.maxs)):co(g),l=z(h,_),v=Tt(l);if(a>0&&v>a)continue;let S=r-.5*v;if(S<=0)continue;let x=g===n?S*.5:S,A=D(z(g.origin,h)),E=le(g,t,n,A,_,A,x,x,s|1,o,c,d);m.push({target:g,result:E,appliedDamage:x})}return m}var gk=Gi();var Zn=.1,$t=80,Lo=Gi();function B1(){return Lo.frandom()}function No(e,t){return Math.floor(Lo.frandom()*(t-e+1)+e)}function xt(e,t,n){te(e,Zn,n)}function ke(e,t,n){ce(e,t,Zn,n)}function yt(e,t,n){se(e,t,Zn,n)}function Q(e,t,n){ne(e,t,Zn,n)}function N(e,t,n){ie(e,t)}var jt={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 Re(e,t){t.sound(e,2,jt.footstep,1,1,0)}function Wn(e,t){e.monsterinfo.current_move=t,e.monsterinfo.nextframe=t.firstframe,e.frame=t.firstframe,e.monsterinfo.aiflags&=-129}function G1(e,t){}var Yi,zo,H1,Oo,V1,W1,K1,X1,$1,Io,Y1;function j1(e,t){Wn(e,Yi)}function q1(e,t){e.monsterinfo.aiflags&1||e.enemy||B1()>.15||(Wn(e,zo),t.sound(e,1,jt.idle,1,2,0))}var Z1=[{ai:xt,dist:0,think:q1},{ai:xt,dist:0},{ai:xt,dist:0},{ai:xt,dist:0},{ai:xt,dist:0}];Yi={firstframe:0,lastframe:4,frames:Z1,endfunc:null};var J1=Array.from({length:20},()=>({ai:xt,dist:0}));zo={firstframe:5,lastframe:24,frames:J1,endfunc:j1};var Q1=[{ai:ke,dist:9.1},{ai:ke,dist:6.3},{ai:ke,dist:4.9},{ai:ke,dist:6.7,think:Re},{ai:ke,dist:6},{ai:ke,dist:8.2},{ai:ke,dist:7.2},{ai:ke,dist:6.1},{ai:ke,dist:4.9},{ai:ke,dist:4.7,think:Re},{ai:ke,dist:4.7}];H1={firstframe:25,lastframe:35,frames:Q1,endfunc:null};var eg=[{ai:yt,dist:21},{ai:yt,dist:11,think:Re},{ai:yt,dist:21},{ai:yt,dist:25,think:G1},{ai:yt,dist:18,think:Re},{ai:yt,dist:19}];Oo={firstframe:36,lastframe:41,frames:eg,endfunc:null};function tn(e,t){e.monsterinfo.aiflags&1?Wn(e,Yi):Wn(e,Oo)}function Co(e,t,n,r,i){let a={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},s=J(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*$t,y:a.y+s.y*$t,z:a.z+s.z*$t},u=i.trace(a,null,null,c,e,536870913);return!u.ent||!u.ent.takedamage?!1:(le(u.ent,e,e,s,u.endpos,u.plane?.normal||K,n,r,0,0,i.timeSeconds,i.multicast.bind(i)),!0)}function tg(e,t){Co(e,{x:$t,y:0,z:-24},No(5,11),80,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+1.2)}function Po(e,t){t.sound(e,1,jt.punch,1,1,0)}var ng=[{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0,think:Po},{ai:Q,dist:0,think:tg},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0}];V1={firstframe:67,lastframe:74,frames:ng,endfunc:tn};function rg(e,t){Co(e,{x:$t,y:0,z:-4},No(15,21),400,t)||(e.monsterinfo.melee_debounce_time=t.timeSeconds+2.5)}var ig=[{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0,think:Re},{ai:Q,dist:0},{ai:Q,dist:0,think:Po},{ai:Q,dist:0},{ai:Q,dist:0,think:rg},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0},{ai:Q,dist:0}];W1={firstframe:75,lastframe:86,frames:ig,endfunc:tn};function Do(e,t){t.sound(e,1,jt.thud,1,1,0),t.sound(e,2,jt.explod,.75,1,0);let{forward:n,right:r}=J(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,pe.temp_entity,Se.BERSERK_SLAM,s.endpos),e.gravity=1,e.velocity={x:0,y:0,z:0};let o=8,c=300,u=165,d=t.findByRadius(s.endpos,u*2);for(let m of d){if(m===e||!m.takedamage)continue;let h=Math.sqrt(Math.pow(m.origin.x-s.endpos.x,2)+Math.pow(m.origin.y-s.endpos.y,2)+Math.pow(m.origin.z-s.endpos.z,2)),f=Math.max(0,1-h/u);if(f<=0)continue;let g=Math.max(1,o*f*f),_=c*f*f,l=D(z(m.origin,s.endpos));if(le(m,e,e,l,m.origin,l,g,_,1,0,t.timeSeconds,t.multicast.bind(t)),m.client){let v={...m.velocity};v.z=Math.max(270,v.z),m.velocity=v}}}function ag(e,t,n,r,i){if(e.health<=0){e.touch=void 0;return}}function ji(e,t){e.velocity.z<0?e.gravity=2.25*(800/800):e.gravity=5.25*(800/800)}function sg(e,t){if(!e.enemy)return;let n=z(e.enemy.origin,e.origin),i=Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)*1.95,a=D({x:n.x,y:n.y,z:0}),s=Zt(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,d,m)=>{ag(c,u,d,m,t),c.groundentity&&(c.frame=104,Do(c,t),c.touch=void 0)},ji(e,t)}function og(e,t){if(ji(e,t),e.groundentity){e.monsterinfo.attack_finished=0,e.monsterinfo.aiflags&=-2049,e.frame=104,e.touch&&(Do(e,t),e.touch=void 0);return}t.timeSeconds>(e.monsterinfo.attack_finished||0)?e.monsterinfo.nextframe=89:e.monsterinfo.nextframe=91}var cg=[{ai:Q,dist:0},{ai:Q,dist:0},{ai:N,dist:0,think:sg},{ai:N,dist:0,think:ji},{ai:N,dist:0,think:og},{ai:N,dist:0,think:Re},{ai:N,dist:0},{ai:N,dist:0,think:Re},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0,think:Re}];K1={firstframe:87,lastframe:109,frames:cg,endfunc:tn};var ug=[{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0}];X1={firstframe:149,lastframe:152,frames:ug,endfunc:tn};var dg=Array.from({length:20},(e,t)=>({ai:N,dist:0,think:t%5===4?Re:void 0}));$1={firstframe:153,lastframe:172,frames:dg,endfunc:tn};function Fo(e,t){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.monsterinfo.nextframe=Io.lastframe,e.nextthink=-1,e.deadflag=2}var mg=[{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0,think:Re},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0}];Io={firstframe:173,lastframe:185,frames:mg,endfunc:Fo};var lg=[{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0,think:Re},{ai:N,dist:0},{ai:N,dist:0},{ai:N,dist:0}];Y1={firstframe:186,lastframe:193,frames:lg,endfunc:Fo};function hg(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,d,m,h)=>{if(d===u.owner)return;d&&d.takedamage&&le(d,u,u.owner,u.velocity,u.origin,m?m.normal:K,i,0,0,8,e.timeSeconds,e.multicast.bind(e));let f=e.findByRadius(u.origin,120);$i(f,u,u.owner,a,u.owner,120,0,9,e.timeSeconds,{},e.multicast.bind(e)),e.multicast(u.origin,2,pe.temp_entity,Se.ROCKET_EXPLOSION,u.origin),e.free(u)},e.finalizeSpawn(c)}function Uo(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);$i(u,c,c.owner,i,c.owner,120,0,6,e.timeSeconds,{},e.multicast.bind(e)),e.multicast(c.origin,2,pe.temp_entity,Se.GRENADE_EXPLOSION,c.origin),e.free(c)};s.touch=(c,u,d,m)=>{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 fg(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,d,m)=>{u!==c.owner&&(u&&u.takedamage?le(u,c,c.owner,c.velocity,c.origin,d?d.normal:K,i,1,0,s,e.timeSeconds,e.multicast.bind(e)):d&&e.multicast(c.origin,1,pe.temp_entity,Se.BLASTER,c.origin,d.normal),e.free(c))},e.finalizeSpawn(o)}function gg(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=D(z(a,i)),o={x:i.x+s.x*2048,y:i.y+s.y*2048,z:i.z+s.z*2048},c=16,u=[],d=[],m={...i};try{for(let f=0;f<c;f++){let g=e.trace(m,null,null,o,t,_e|st|Mt|jn);if(!g.ent||g.fraction>=1||(g.ent.takedamage&&g.ent!==t.owner&&le(g.ent,t,t.owner,s,g.endpos,K,r,1,4,12,e.timeSeconds,e.multicast.bind(e)),!(g.ent.svflags&4)&&!g.ent.client&&g.ent.classname!=="misc_explobox"))break;u.push(g.ent),d.push(g.ent.solid),g.ent.solid=0,m={...g.endpos}}let h=e.trace(i,null,null,o,t,_e);e.multicast(t.origin,2,pe.temp_entity,Se.BFG_LASER,i,h.endpos)}finally{for(let h=0;h<u.length;h++)u[h].solid=d[h]}}function _g(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,Rf).fraction<1||gg(t,e,i,n)}t.scheduleThink(e,t.timeSeconds+.1)}function pg(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=z(e.origin,i),s=Tt(a),o=e.dmg_radius||100,c=(e.radius_dmg||200)*(1-Math.sqrt(s/o));c>0&&le(r,e,e.owner,e.velocity,i,K,Math.floor(c),0,4,14,t.timeSeconds,t.multicast.bind(t))}}if(e.frame++,e.frame>=5){t.free(e);return}t.scheduleThink(e,t.timeSeconds+.1)}function vg(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,d,m)=>{if(u===c.owner)return;u&&u.takedamage&&le(u,c,c.owner,c.velocity,c.origin,d?d.normal:K,200,0,4,13,e.timeSeconds,e.multicast.bind(e));let h=e.findByRadius(c.origin,100);$i(h,c,c.owner,200,u,100,4,13,e.timeSeconds,{},e.multicast.bind(e)),e.multicast(c.origin,2,pe.temp_entity,Se.BFG_BIGEXPLOSION,c.origin),c.solid=0,c.touch=void 0,c.velocity=K,c.modelindex=e.modelIndex("sprites/s_bfg3.sp2"),c.frame=0,c.enemy=u,c.think=(f,g)=>pg(f,g),e.scheduleThink(c,e.timeSeconds+.1)},o.think=(c,u)=>_g(c,u),e.scheduleThink(o,e.timeSeconds+.016),e.finalizeSpawn(o)}function uo(){return 2*Math.random()-1}function Kn(e,t,n,r,i,a,s,o,c,u=0){let d=n;if(a>0||s>0){let f=Zt(n),{right:g,up:_}=J(f),l=uo()*a,v=uo()*s;d={x:n.x+g.x*l+_.x*v,y:n.y+g.y*l+_.y*v,z:n.z+g.z*l+_.z*v},d=D(d)}let m=U(t,B(d,8192)),h=c.trace(t,m,K,K,e,Jt);!h.ent||h.fraction===1||le(h.ent,e,e,d,h.endpos,h.plane?.normal||K,r,i,18,u,c.timeSeconds)}var at=Kn;function yg(e,t,n,r,i,a,s,o,c,u,d=2){for(let m=0;m<o;m++)at(e,t,n,r,i,a,s,c,u,d)}function Ve(e,t,n,r,i,a,s,o,c=1){fg(o,e,t,n,r,i,c)}function wg(e,t,n,r,i,a,s){Uo(s,e,t,n,r,i)}function nn(e,t,n,r,i,a,s){hg(s,e,t,n,r,120,i)}function Bo(e,t,n,r,i,a,s,o,c){vg(c,e,t,n,r,i,s)}function Go(e,t,n,r,i,a,s){let o=U(t,B(n,8192)),c=s.trace(t,o,K,K,e,Jt);s.multicast(t,2,pe.temp_entity,Se.RAILTRAIL,t,c.endpos),c.ent&&c.ent.takedamage&&le(c.ent,e,e,n,c.endpos,K,r,i,6,11,s.timeSeconds)}function rn(e,t,n,r,i){if(!e.enemy)return!1;let{forward:a}=J(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,K,K,e,Jt);if(u.ent===e.enemy||u.ent&&u.ent.takedamage){let d=D(z(u.endpos,s));return le(u.ent,e,e,d,u.endpos,u.plane?.normal||K,n,r,0,0,i.timeSeconds),!0}return!1}function Sg(e,t,n,r,i,a,s,o){nn(e,t,n,r,i,a,o)}function mo(e,t){let n={...e.origin},r=U(n,B(e.movedir,2048)),i=t.trace(n,r,K,K,e,_e|st|Mt|jn);e.dmg>0&&i.ent&&i.ent.takedamage&&i.ent!==e.owner&&le(i.ent,e,e.owner,e.movedir,i.endpos,K,e.dmg,0,4,31,t.timeSeconds),i.ent&&i.ent.solid===3&&t.multicast(i.endpos,1,pe.temp_entity,Se.LASER_SPARKS,10,i.endpos,i.plane?.normal||K,e.skin),t.linkentity(e)}function xg(e,t){e.owner&&(e.owner.beam===e&&(e.owner.beam=null),e.owner.beam2===e&&(e.owner.beam2=null)),t.free(e)}function lo(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?xg(s,o):s.nextthink=o.timeSeconds+.1},a.postthink=(s,o)=>{r(s,o),mo(s,o)},n?e.beam2=a:e.beam=a),a.timestamp=i.timeSeconds+.2,a.nextthink=i.timeSeconds+.01,r(a,i),mo(a,i)}var qi=.1,Ag={x:0,y:30,z:-15},Eg={x:0,y:15,z:0},kg={x:0,y:-15,z:0},Tg={x:0,y:-30,z:-15},Mg={x:30,y:20,z:0},bg={x:30,y:-20,z:0};function Rg(e,t,n){te(e,qi,n)}function Lg(e,t,n){ce(e,t,qi,n)}function Jn(e,t,n){ne(e,t,qi,n)}function Zi(e,t,n){ie(e,t)}var Ji,Ho,Vo,Ng,Wo,Ko,zg,Og,Ig,Xo;function Cg(e){e.monsterinfo.current_move=Ji}function Pg(e){e.monsterinfo.current_move=Ho}function an(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Vo:e.monsterinfo.current_move=Ji}function $o(e){e.monsterinfo.current_move=Wo}function Dg(e){e.enemy&&Yt(e,e.enemy)&&Math.random()<=.7?$o(e):e.monsterinfo.current_move=Ko}function zi(e,t){let{forward:n,right:r,up:i}=J(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 Fg(e,t){if(!e.enemy)return;t.engine.sound?.(e,1,"boss2/machgun.wav",1,1,0);let n=zi(e,Mg),r=D(z(e.enemy.origin,n));at(e,n,r,6,4,.1,.05,0,t,4);let i=zi(e,bg),a=D(z(e.enemy.origin,i));at(e,i,a,6,4,.1,.05,0,t,4)}function Ug(e,t){if(!e.enemy)return;let n=[Ag,Eg,kg,Tg],r=n[Math.floor(Math.random()*n.length)],i=zi(e,r),a=D(z(e.enemy.origin,i));nn(e,i,a,50,500,0,t)}function Bg(e){e.monsterinfo.nextframe=Xo.lastframe,e.nextthink=-1}var Yo=Array.from({length:20},()=>({ai:Lg,dist:10}));Ho={firstframe:0,lastframe:19,frames:Yo,endfunc:Pg};Vo={firstframe:0,lastframe:19,frames:Yo,endfunc:an};var Gg=Array.from({length:21},()=>({ai:Rg,dist:0}));Ji={firstframe:29,lastframe:49,frames:Gg,endfunc:Cg};var Hg=Array.from({length:9},(e,t)=>({ai:Jn,dist:2,think:t===8?$o:null}));Ng={firstframe:50,lastframe:58,frames:Hg,endfunc:null};var Vg=Array.from({length:6},()=>({ai:Jn,dist:2,think:Fg}));Wo={firstframe:59,lastframe:64,frames:Vg,endfunc:Dg};var Wg=Array.from({length:4},()=>({ai:Jn,dist:2}));Ko={firstframe:65,lastframe:68,frames:Wg,endfunc:an};var Kg=Array.from({length:21},(e,t)=>({ai:Jn,dist:2,think:t===12?Ug:null}));zg={firstframe:69,lastframe:89,frames:Kg,endfunc:an};var Xg=Array.from({length:18},()=>({ai:Zi,dist:0}));Og={firstframe:90,lastframe:107,frames:Xg,endfunc:an};var $g=Array.from({length:4},()=>({ai:Zi,dist:0}));Ig={firstframe:108,lastframe:111,frames:$g,endfunc:an};var Yg=Array.from({length:49},()=>({ai:Zi,dist:0}));Xo={firstframe:112,lastframe:160,frames:Yg,endfunc:Bg};var Qn=.1,Qi=80,er=Math.random;function jo(e,t,n){te(e,Qn,n)}function Te(e,t,n){ce(e,t,Qn,n)}function Me(e,t,n){se(e,t,Qn,n)}function k(e,t,n){ne(e,t,Qn,n)}function R(e,t,n){ie(e,t)}var ea,jg,qg,qo,Zo,Zg,Jg,Qg,e_,t_,n_,r_,i_,a_;function Jo(e){e.monsterinfo.current_move=ea}function Qe(e){e.monsterinfo.power_armor_type=1,e.monsterinfo.aiflags&4?e.monsterinfo.current_move=ea:e.monsterinfo.current_move=qo}function s_(e,t){t.engine.sound?.(e,0,"brain/melee1.wav",1,1,0)}function o_(e,t){let n={x:Qi,y:e.maxs.x,z:8};rn(e,n,15+Math.floor(er()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function c_(e,t){t.engine.sound?.(e,0,"brain/melee2.wav",1,1,0)}function u_(e,t){let n={x:Qi,y:e.mins.x,z:8};rn(e,n,15+Math.floor(er()*5),40,t)?t.engine.sound?.(e,0,"brain/melee3.wav",1,1,0):e.monsterinfo.melee_debounce_time=t.timeSeconds+3}function Qo(e,t){e.count=0,e.monsterinfo.power_armor_type=0,t.engine.sound?.(e,0,"brain/brnatck1.wav",1,1,0)}function ec(e,t){rn(e,{x:Qi,y:0,z:8},10+Math.floor(er()*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 tc(e){e.monsterinfo.power_armor_type=1,e.count&&(e.count=0,e.monsterinfo.current_move=Zo)}function ho(e,t){if(!e.enemy)return;let n=J(e.angles).forward,r={...e.origin};r.z+=24;let i={...e.enemy.origin};if(t.trace(r,i,K,K,e,1610612739).ent!==e.enemy)return;t.engine.sound?.(e,0,"brain/brnatck3.wav",1,1,0),t.multicast(e.origin,1,pe.temp_entity,Se.PARASITE_ATTACK,e,r,i);let s=z(r,i);le(e.enemy,e,e,s,e.enemy.origin,K,5,0,0,37,t.timeSeconds),e.origin={...e.origin,z:e.origin.z+1};let o=J(e.angles).forward;e.enemy.velocity=B(o,-1200)}var fo=[{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}],go=[{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 d_(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=J(n.angles),s=n.frame-0;(s<0||s>=fo.length)&&(s=0);let o=fo[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=D(z(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function m_(e,t){let n=e.owner;if(!n||!n.inUse||!n.enemy)return;let{forward:r,right:i,up:a}=J(n.angles),s=n.frame-0;(s<0||s>=go.length)&&(s=0);let o=go[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=D(z(n.enemy.origin,c));e.origin=c,e.movedir=u,t.linkentity(e)}function Ce(e,t){lo(e,1,!1,d_,t),lo(e,1,!0,m_,t)}function l_(e){er()<.5&&e.enemy&&e.enemy.health>0&&(e.frame=0)}function h_(e){return e.monsterinfo.aiflags&16||(e.monsterinfo.aiflags|=16),!0}function f_(e){}function g_(e){e.monsterinfo.aiflags&=-17}var __=Array.from({length:30},()=>({ai:jo,dist:0}));ea={firstframe:162,lastframe:191,frames:__,endfunc:Jo};var p_=Array.from({length:30},()=>({ai:jo,dist:0}));jg={firstframe:192,lastframe:221,frames:p_,endfunc:Jo};var v_=[{ai:Te,dist:7},{ai:Te,dist:2},{ai:Te,dist:3},{ai:Te,dist:3},{ai:Te,dist:1},{ai:Te,dist:0},{ai:Te,dist:0},{ai:Te,dist:9},{ai:Te,dist:-4},{ai:Te,dist:-1},{ai:Te,dist:2}];qg={firstframe:0,lastframe:10,frames:v_,endfunc:null};var y_=[{ai:Me,dist:9},{ai:Me,dist:2},{ai:Me,dist:3},{ai:Me,dist:3},{ai:Me,dist:1},{ai:Me,dist:0},{ai:Me,dist:0},{ai:Me,dist:10},{ai:Me,dist:-4},{ai:Me,dist:-1},{ai:Me,dist:2}];qo={firstframe:0,lastframe:10,frames:y_,endfunc:null};var w_=[{ai:k,dist:8},{ai:k,dist:3},{ai:k,dist:5},{ai:k,dist:0},{ai:k,dist:-3,think:s_},{ai:k,dist:0},{ai:k,dist:-5},{ai:k,dist:-7,think:o_},{ai:k,dist:0},{ai:k,dist:6,think:c_},{ai:k,dist:1},{ai:k,dist:2,think:u_},{ai:k,dist:-3},{ai:k,dist:6},{ai:k,dist:-1},{ai:k,dist:-3},{ai:k,dist:2},{ai:k,dist:-11}];Zo={firstframe:53,lastframe:70,frames:w_,endfunc:Qe};var S_=[{ai:k,dist:5},{ai:k,dist:-4},{ai:k,dist:-4},{ai:k,dist:-3},{ai:k,dist:0,think:Qo},{ai:k,dist:0},{ai:k,dist:13,think:ec},{ai:k,dist:0},{ai:k,dist:2},{ai:k,dist:0},{ai:k,dist:-9,think:tc},{ai:k,dist:0},{ai:k,dist:4},{ai:k,dist:3},{ai:k,dist:2},{ai:k,dist:-3},{ai:k,dist:-6}];Zg={firstframe:71,lastframe:87,frames:S_,endfunc:Qe};var x_=[{ai:k,dist:5},{ai:k,dist:-4},{ai:k,dist:-4},{ai:k,dist:-3},{ai:k,dist:0,think:Qo},{ai:k,dist:0,think:ho},{ai:k,dist:13},{ai:k,dist:0,think:ec},{ai:k,dist:2},{ai:k,dist:0,think:ho},{ai:k,dist:-9,think:tc},{ai:k,dist:0},{ai:k,dist:4},{ai:k,dist:3},{ai:k,dist:2},{ai:k,dist:-3},{ai:k,dist:-6}];Jg={firstframe:71,lastframe:87,frames:x_,endfunc:Qe};var A_=[{ai:k,dist:9,think:Ce},{ai:k,dist:2,think:Ce},{ai:k,dist:3,think:Ce},{ai:k,dist:3,think:Ce},{ai:k,dist:1,think:Ce},{ai:k,dist:0,think:Ce},{ai:k,dist:0,think:Ce},{ai:k,dist:10,think:Ce},{ai:k,dist:-4,think:Ce},{ai:k,dist:-1,think:Ce},{ai:k,dist:2,think:l_}];Qg={firstframe:0,lastframe:10,frames:A_,endfunc:Qe};var E_=[{ai:R,dist:-6},{ai:R,dist:-2},{ai:R,dist:-6},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:2},{ai:R,dist:0},{ai:R,dist:2},{ai:R,dist:1},{ai:R,dist:7},{ai:R,dist:0},{ai:R,dist:3},{ai:R,dist:-1}];e_={firstframe:88,lastframe:108,frames:E_,endfunc:Qe};var k_=[{ai:R,dist:-2},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:3},{ai:R,dist:1},{ai:R,dist:-2}];t_={firstframe:109,lastframe:116,frames:k_,endfunc:Qe};var T_=[{ai:R,dist:-2},{ai:R,dist:2},{ai:R,dist:1},{ai:R,dist:3},{ai:R,dist:0},{ai:R,dist:-4}];n_={firstframe:117,lastframe:122,frames:T_,endfunc:Qe};var M_=Array.from({length:18},()=>({ai:R,dist:0}));r_={firstframe:123,lastframe:140,frames:M_,endfunc:nc};var b_=[{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:0},{ai:R,dist:9},{ai:R,dist:0}];i_={firstframe:141,lastframe:145,frames:b_,endfunc:nc};var R_=[{ai:R,dist:0},{ai:R,dist:-2,think:h_},{ai:R,dist:17,think:f_},{ai:R,dist:-3},{ai:R,dist:-1,think:g_},{ai:R,dist:-5},{ai:R,dist:-6},{ai:R,dist:-6}];a_={firstframe:146,lastframe:153,frames:R_,endfunc:Qe};function nc(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var tr=.1,L_=80,Rt=Math.random;function rc(e,t,n){te(e,tr,n)}function N_(e,t,n){ce(e,t,tr,n)}function z_(e,t,n){se(e,t,tr,n)}function L(e,t,n){ne(e,t,tr,n)}function Lt(e,t,n){ie(e,t)}var ta,ic,ac,O_,na,Oi,I_,ra,sc,C_,P_,D_,F_,U_,B_,oc;function cc(e){e.monsterinfo.current_move=ta}function G_(e){e.monsterinfo.current_move=ic}function ot(e){if(e.monsterinfo.aiflags&4){e.monsterinfo.current_move=ta;return}e.monsterinfo.current_move=ac}function H_(e){e.monsterinfo.aiflags&4||e.enemy||Rt()<=.3&&(e.monsterinfo.current_move=oc)}function V_(e,t){Rt()<.5?t.engine.sound?.(e,2,"chick/chkidle1.wav",1,0,0):t.engine.sound?.(e,2,"chick/chkidle2.wav",1,0,0)}function W_(e,t){let n={x:L_,y:e.mins.x,z:10};t.engine.sound?.(e,0,"chick/chkatck3.wav",1,1,0),rn(e,n,10+Math.floor(Rt()*6),100,t)}function K_(e,t){let{forward:n,right:r}=J(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,d=!!e.monsterinfo.blindfire,m=K;if(d&&e.monsterinfo.blind_fire_target)m=e.monsterinfo.blind_fire_target;else if(e.enemy)m=e.enemy.origin;else return;let h=z(m,c);!d&&e.enemy&&(Rt()<.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=D(h);e.skin>1?Sg(e,c,f,50,u,0,.075,t):nn(e,c,f,50,u,0,t)}function X_(e,t){if(t.engine.sound?.(e,0,"chick/chkatck1.wav",1,1,0),e.monsterinfo.blindfire&&e.monsterinfo.blind_fire_target){let n=z(e.monsterinfo.blind_fire_target,e.origin);e.ideal_yaw=Zt(n).y}}function $_(e,t){t.engine.sound?.(e,0,"chick/chkatck5.wav",1,1,0)}function Y_(e){e.monsterinfo.current_move=na}function j_(e){if(e.monsterinfo.blindfire){e.monsterinfo.blindfire=!1,e.monsterinfo.current_move=Oi;return}if(e.enemy&&e.enemy.health>0&&Rt()<=.6){e.monsterinfo.current_move=na;return}e.monsterinfo.current_move=Oi}function q_(e){if(e.enemy&&e.enemy.health>0&&Rt()<=.9){e.monsterinfo.current_move=ra;return}e.monsterinfo.current_move=sc}function Z_(e){e.monsterinfo.current_move=ra}var J_=Array.from({length:30},(e,t)=>({ai:rc,dist:0,think:t===8?(n,r)=>V_(n,r):null}));oc={firstframe:201,lastframe:230,frames:J_,endfunc:cc};var Q_=Array.from({length:30},(e,t)=>({ai:rc,dist:0,think:t===29?H_:null}));ta={firstframe:101,lastframe:130,frames:Q_,endfunc:cc};var ep=Array.from({length:10},()=>({ai:N_,dist:6}));ic={firstframe:171,lastframe:180,frames:ep,endfunc:G_};var tp=Array.from({length:10},()=>({ai:z_,dist:12}));ac={firstframe:171,lastframe:180,frames:tp,endfunc:ot};var np=Array.from({length:5},()=>({ai:Lt,dist:0}));C_={firstframe:90,lastframe:94,frames:np,endfunc:ot};var rp=Array.from({length:5},()=>({ai:Lt,dist:0}));P_={firstframe:95,lastframe:99,frames:rp,endfunc:ot};var ip=Array.from({length:21},()=>({ai:Lt,dist:0}));D_={firstframe:100,lastframe:120,frames:ip,endfunc:ot};var ap=Array.from({length:12},()=>({ai:Lt,dist:0}));F_={firstframe:48,lastframe:59,frames:ap,endfunc:uc};var sp=Array.from({length:23},()=>({ai:Lt,dist:0}));U_={firstframe:60,lastframe:82,frames:sp,endfunc:uc};function uc(e){e.mins={x:-16,y:-16,z:0},e.maxs={x:16,y:16,z:16},e.movetype=7,e.nextthink=-1}var op=[{ai:L,dist:0,think:X_},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:4},{ai:L,dist:0},{ai:L,dist:-3},{ai:L,dist:3},{ai:L,dist:5},{ai:L,dist:7},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0},{ai:L,dist:0,think:Y_}];O_={firstframe:0,lastframe:12,frames:op,endfunc:null};var cp=[{ai:L,dist:19,think:K_},{ai:L,dist:-6},{ai:L,dist:-5},{ai:L,dist:-2},{ai:L,dist:-7},{ai:L,dist:0},{ai:L,dist:1},{ai:L,dist:10,think:$_},{ai:L,dist:4},{ai:L,dist:5},{ai:L,dist:6},{ai:L,dist:6},{ai:L,dist:4},{ai:L,dist:3,think:j_}];na={firstframe:13,lastframe:26,frames:cp,endfunc:null};var up=[{ai:L,dist:-3},{ai:L,dist:0},{ai:L,dist:-6},{ai:L,dist:-4},{ai:L,dist:-2}];Oi={firstframe:27,lastframe:31,frames:up,endfunc:ot};var dp=[{ai:L,dist:1},{ai:L,dist:8},{ai:L,dist:3}];I_={firstframe:32,lastframe:34,frames:dp,endfunc:Z_};var mp=[{ai:L,dist:1},{ai:L,dist:7,think:W_},{ai:L,dist:-7},{ai:L,dist:1},{ai:L,dist:-1},{ai:L,dist:1},{ai:L,dist:0},{ai:L,dist:1},{ai:L,dist:-2,think:q_}];ra={firstframe:35,lastframe:43,frames:mp,endfunc:null};var lp=[{ai:L,dist:-6},{ai:L,dist:-1},{ai:L,dist:-6},{ai:L,dist:0}];sc={firstframe:44,lastframe:47,frames:lp,endfunc:ot};var hp=Array.from({length:7},()=>({ai:Lt,dist:0}));B_={firstframe:83,lastframe:89,frames:hp,endfunc:ot};var nr=.1,fp=80,gp=24;function _p(e,t,n){te(e,nr,n)}function pp(e,t,n){ce(e,t,nr,n)}function dc(e,t,n){se(e,t,nr,n)}function re(e,t,n){ne(e,t,nr,n)}function ia(e,t,n){ie(e,t)}var vp,yp,mc,lc,wp,Sp,xp,Ap;function Ep(e){e.monsterinfo.current_move=lc}function aa(e){e.monsterinfo.current_move=mc}function _o(e,t){rn(e,{x:fp,y:0,z:0},5,0,t)}function kp(e,t){t.engine.sound?.(e,0,"flipper/flpatck1.wav",1,1,0)}var Tp=[{ai:_p,dist:0}];vp={firstframe:41,lastframe:41,frames:Tp,endfunc:null};var Mp=Array.from({length:24},()=>({ai:dc,dist:gp}));lc={firstframe:70,lastframe:93,frames:Mp,endfunc:null};var bp=Array.from({length:6},()=>({ai:dc,dist:8}));mc={firstframe:65,lastframe:70,frames:bp,endfunc:Ep};var Rp=Array.from({length:24},()=>({ai:pp,dist:4}));yp={firstframe:41,lastframe:64,frames:Rp,endfunc:null};var Lp=Array.from({length:5},()=>({ai:ia,dist:0}));Sp={firstframe:99,lastframe:103,frames:Lp,endfunc:aa};var Np=Array.from({length:5},()=>({ai:ia,dist:0}));xp={firstframe:94,lastframe:98,frames:Np,endfunc:aa};var zp=[{ai:re,dist:0,think:kp},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0,think:_o},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0},{ai:re,dist:0,think:_o},{ai:re,dist:0}];wp={firstframe:0,lastframe:19,frames:zp,endfunc:aa};function Op(e){e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8},e.movetype=7,e.nextthink=-1}var Ip=Array.from({length:56},()=>({ai:ia,dist:0}));Ap={firstframe:104,lastframe:159,frames:Ip,endfunc:Op};var rr=.1;function Cp(e,t,n){te(e,rr,n)}function Pp(e,t,n){ce(e,t,rr,n)}function Dp(e,t,n){se(e,t,rr,n)}function Fp(e,t,n){ne(e,t,rr,n)}function hc(e,t,n){ie(e,t)}var sa,fc,gc,Up,Bp,_c;function Gp(e){e.monsterinfo.current_move=sa}function Hp(e){e.monsterinfo.current_move=fc}function oa(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=gc:e.monsterinfo.current_move=sa}function Vp(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(z(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function Wp(e){e.monsterinfo.nextframe=_c.lastframe,e.nextthink=-1}var Kp=Array.from({length:46},()=>({ai:Cp,dist:0}));sa={firstframe:0,lastframe:45,frames:Kp,endfunc:Gp};var Xp=Array.from({length:46},()=>({ai:Pp,dist:5}));fc={firstframe:0,lastframe:45,frames:Xp,endfunc:Hp};var $p=Array.from({length:46},()=>({ai:Dp,dist:10}));gc={firstframe:0,lastframe:45,frames:$p,endfunc:oa};var Yp=Array.from({length:20},(e,t)=>({ai:Fp,dist:0,think:t===10?Vp:null}));Up={firstframe:46,lastframe:65,frames:Yp,endfunc:oa};var jp=Array.from({length:6},()=>({ai:hc,dist:0}));Bp={firstframe:66,lastframe:71,frames:jp,endfunc:oa};var qp=Array.from({length:10},()=>({ai:hc,dist:0}));_c={firstframe:84,lastframe:93,frames:qp,endfunc:Wp};var ir=.1;function Zp(e,t,n){te(e,ir,n)}function Jp(e,t,n){ce(e,t,ir,n)}function Qp(e,t,n){se(e,t,ir,n)}function ev(e,t,n){ne(e,t,ir,n)}function pc(e,t,n){ie(e,t)}var ca,vc,yc,tv,nv,wc;function rv(e){e.monsterinfo.current_move=ca}function iv(e){e.monsterinfo.current_move=vc}function ua(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=yc:e.monsterinfo.current_move=ca}function av(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(z(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function sv(e,t){if(!e.enemy)return;let n=5+Math.random()*5;Je(e,e.enemy)<=80&&Yt(e,e.enemy)&&le(e.enemy,e,e,D(z(e.enemy.origin,e.origin)),e.enemy.origin,K,n,5,2,0,t.timeSeconds)}function ov(e){e.monsterinfo.nextframe=wc.lastframe,e.nextthink=-1}var cv=Array.from({length:46},()=>({ai:Zp,dist:0}));ca={firstframe:0,lastframe:45,frames:cv,endfunc:rv};var uv=Array.from({length:46},()=>({ai:Jp,dist:5}));vc={firstframe:0,lastframe:45,frames:uv,endfunc:iv};var dv=Array.from({length:46},()=>({ai:Qp,dist:10}));yc={firstframe:0,lastframe:45,frames:dv,endfunc:ua};var mv=Array.from({length:20},(e,t)=>({ai:ev,dist:0,think:t===10?av:t===12?sv:null}));tv={firstframe:46,lastframe:65,frames:mv,endfunc:ua};var lv=Array.from({length:6},()=>({ai:pc,dist:0}));nv={firstframe:66,lastframe:71,frames:lv,endfunc:ua};var hv=Array.from({length:10},()=>({ai:pc,dist:0}));wc={firstframe:84,lastframe:93,frames:hv,endfunc:ov};var ar=.1;function fv(e,t,n){te(e,ar,n)}function gv(e,t,n){ce(e,t,ar,n)}function _v(e,t,n){se(e,t,ar,n)}function Sc(e,t,n){ne(e,t,ar,n)}function xc(e,t,n){ie(e,t)}var da,Ac,Ec,pv,vv,yv,kc;function wv(e){e.monsterinfo.current_move=da}function Sv(e){e.monsterinfo.current_move=Ac}function sr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Ec:e.monsterinfo.current_move=da}function xv(e){return e<=80?"melee":e<=500?"near":e<=1e3?"mid":"far"}function Av(e,t){if(!e.enemy||!Yt(e,e.enemy))return;let n=Je(e,e.enemy);if(xv(n)!=="melee")return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},i=D(z(e.enemy.origin,r));le(e.enemy,e,e,i,e.origin,{x:0,y:0,z:0},20,10,0,0,t.timeSeconds)}function Ev(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(z(e.enemy.origin,n));Go(e,n,r,50,100,0,t)}function kv(e){e.monsterinfo.nextframe=kc.lastframe,e.nextthink=-1}var Tv=Array.from({length:30},()=>({ai:fv,dist:0}));da={firstframe:0,lastframe:29,frames:Tv,endfunc:wv};var Mv=Array.from({length:40},()=>({ai:gv,dist:3}));Ac={firstframe:30,lastframe:69,frames:Mv,endfunc:Sv};var bv=Array.from({length:20},()=>({ai:_v,dist:12}));Ec={firstframe:70,lastframe:89,frames:bv,endfunc:sr};var Rv=Array.from({length:10},(e,t)=>({ai:Sc,dist:0,think:t===5?Av:null}));pv={firstframe:90,lastframe:99,frames:Rv,endfunc:sr};var Lv=Array.from({length:12},(e,t)=>({ai:Sc,dist:0,think:t===6?Ev:null}));vv={firstframe:100,lastframe:111,frames:Lv,endfunc:sr};var Nv=Array.from({length:6},()=>({ai:xc,dist:0}));yv={firstframe:112,lastframe:117,frames:Nv,endfunc:sr};var zv=Array.from({length:12},()=>({ai:xc,dist:0}));kc={firstframe:118,lastframe:129,frames:zv,endfunc:kv};var or=.1;function Ov(e,t,n){te(e,or,n)}function Iv(e,t,n){ce(e,t,or,n)}function Cv(e,t,n){se(e,t,or,n)}function Tc(e,t,n){ne(e,t,or,n)}function Mc(e,t,n){ie(e,t)}var ma,bc,Rc,Pv,Dv,Fv,Lc;function Uv(e){e.monsterinfo.current_move=ma}function Bv(e){e.monsterinfo.current_move=bc}function cr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Rc:e.monsterinfo.current_move=ma}function Gv(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},r=D(z(e.enemy.origin,n)),i=10,a=2;t.engine.sound?.(e,0,"gunner/gunatck2.wav",1,1,0),at(e,n,r,i,a,0,0,0,t,5)}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=D(z(e.enemy.origin,n)),i=50,a=600;t.engine.sound?.(e,0,"gunner/gunatck3.wav",1,1,0),Uo(t,e,n,r,i,a)}var Vv=Array.from({length:30},()=>({ai:Ov,dist:0}));ma={firstframe:0,lastframe:29,frames:Vv,endfunc:Uv};var Wv=Array.from({length:40},()=>({ai:Iv,dist:2}));bc={firstframe:30,lastframe:69,frames:Wv,endfunc:Bv};var Kv=Array.from({length:20},()=>({ai:Cv,dist:10}));Rc={firstframe:70,lastframe:89,frames:Kv,endfunc:cr};var Xv=Array.from({length:10},(e,t)=>({ai:Tc,dist:0,think:t>=2&&t<=8?Gv:null}));Pv={firstframe:90,lastframe:99,frames:Xv,endfunc:cr};var $v=Array.from({length:10},(e,t)=>({ai:Tc,dist:0,think:t===5?Hv:null}));Dv={firstframe:100,lastframe:109,frames:$v,endfunc:cr};var Yv=Array.from({length:8},()=>({ai:Mc,dist:0}));Fv={firstframe:110,lastframe:117,frames:Yv,endfunc:cr};var jv=Array.from({length:15},()=>({ai:Mc,dist:0}));function qv(e){e.monsterinfo.nextframe=Lc.lastframe,e.nextthink=-1}Lc={firstframe:118,lastframe:132,frames:jv,endfunc:qv};var ur=.1;function Zv(e,t,n){te(e,ur,n)}function Jv(e,t,n){ce(e,t,ur,n)}function Qv(e,t,n){se(e,t,ur,n)}function ey(e,t,n){ne(e,t,ur,n)}function Nc(e,t,n){ie(e,t)}var la,zc,Oc,ty,ny,Ic;function ry(e){e.monsterinfo.current_move=la}function iy(e){e.monsterinfo.current_move=zc}function ha(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Oc:e.monsterinfo.current_move=la}function ay(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(z(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function sy(e){e.monsterinfo.nextframe=Ic.lastframe,e.nextthink=-1}var oy=Array.from({length:46},()=>({ai:Zv,dist:0}));la={firstframe:0,lastframe:45,frames:oy,endfunc:ry};var cy=Array.from({length:46},()=>({ai:Jv,dist:5}));zc={firstframe:0,lastframe:45,frames:cy,endfunc:iy};var uy=Array.from({length:46},()=>({ai:Qv,dist:10}));Oc={firstframe:0,lastframe:45,frames:uy,endfunc:ha};var dy=Array.from({length:20},(e,t)=>({ai:ey,dist:0,think:t===10?ay:null}));ty={firstframe:46,lastframe:65,frames:dy,endfunc:ha};var my=Array.from({length:6},()=>({ai:Nc,dist:0}));ny={firstframe:66,lastframe:71,frames:my,endfunc:ha};var ly=Array.from({length:10},()=>({ai:Nc,dist:0}));Ic={firstframe:84,lastframe:93,frames:ly,endfunc:sy};var dr=.1;function hy(e,t,n){te(e,dr,n)}function fy(e,t,n){ce(e,t,dr,n)}function gy(e,t,n){se(e,t,dr,n)}function _y(e,t,n){ne(e,t,dr,n)}function Cc(e,t,n){ie(e,t)}var fa,Pc,Dc,py,vy,Fc;function yy(e){e.monsterinfo.current_move=fa}function wy(e){e.monsterinfo.current_move=Pc}function ga(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Dc:e.monsterinfo.current_move=fa}function Sy(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},r=D(z(e.enemy.origin,n));Ve(e,n,r,5,1e3,0,0,t,1)}function xy(e){e.monsterinfo.nextframe=Fc.lastframe,e.nextthink=-1}var Ay=Array.from({length:46},()=>({ai:hy,dist:0}));fa={firstframe:0,lastframe:45,frames:Ay,endfunc:yy};var Ey=Array.from({length:46},()=>({ai:fy,dist:5}));Pc={firstframe:0,lastframe:45,frames:Ey,endfunc:wy};var ky=Array.from({length:46},()=>({ai:gy,dist:10}));Dc={firstframe:0,lastframe:45,frames:ky,endfunc:ga};var Ty=Array.from({length:20},(e,t)=>({ai:_y,dist:0,think:t===10?Sy:null}));py={firstframe:46,lastframe:65,frames:Ty,endfunc:ga};var My=Array.from({length:6},()=>({ai:Cc,dist:0}));vy={firstframe:66,lastframe:71,frames:My,endfunc:ga};var by=Array.from({length:10},()=>({ai:Cc,dist:0}));Fc={firstframe:84,lastframe:93,frames:by,endfunc:xy};var mr=.1;function Ry(e,t,n){te(e,mr,n)}function Ly(e,t,n){ce(e,t,mr,n)}function Ny(e,t,n){se(e,t,mr,n)}function zy(e,t,n){ne(e,t,mr,n)}function _a(e,t,n){ie(e,t)}var pa,Uc,Bc,Oy,Iy,Gc,Cy;function Py(e){e.monsterinfo.current_move=pa}function Dy(e){e.monsterinfo.current_move=Uc}function lr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Bc:e.monsterinfo.current_move=pa}function Fy(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=D(z(r,n));at(e,n,i,5,2,.05,.05,0,t,4)}var Uy=Array.from({length:22},()=>({ai:Ry,dist:0}));pa={firstframe:0,lastframe:21,frames:Uy,endfunc:Py};var By=Array.from({length:15},()=>({ai:Ly,dist:4}));Uc={firstframe:22,lastframe:36,frames:By,endfunc:Dy};var Gy=Array.from({length:8},()=>({ai:Ny,dist:12}));Bc={firstframe:37,lastframe:44,frames:Gy,endfunc:lr};var Hy=Array.from({length:15},(e,t)=>({ai:zy,dist:0,think:t>=5&&t<=7?Fy:null}));Oy={firstframe:45,lastframe:59,frames:Hy,endfunc:lr};var Vy=Array.from({length:10},()=>({ai:_a,dist:0}));Iy={firstframe:60,lastframe:69,frames:Vy,endfunc:lr};var Wy=Array.from({length:20},()=>({ai:_a,dist:0}));function Ky(e){e.monsterinfo.nextframe=Gc.lastframe,e.nextthink=-1}Gc={firstframe:70,lastframe:89,frames:Wy,endfunc:Ky};var Xy=Array.from({length:5},()=>({ai:_a,dist:0}));Cy={firstframe:90,lastframe:94,frames:Xy,endfunc:lr};var hr=.1,$y={x:40,y:-20,z:20},Yy={x:40,y:20,z:20},jy={x:30,y:0,z:40};function qy(e,t,n){te(e,hr,n)}function Zy(e,t,n){ce(e,t,hr,n)}function Jy(e,t,n){se(e,t,hr,n)}function va(e,t,n){ne(e,t,hr,n)}function sn(e,t,n){ie(e,t)}var ya,Hc,Vc,wa,Ii,Qy,ew,tw,nw,Wc;function rw(e){e.monsterinfo.current_move=ya}function iw(e){e.monsterinfo.current_move=Hc}function Nt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Vc:e.monsterinfo.current_move=ya}function aw(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&&Qt(e,e.enemy,n)&&Math.random()<.9?e.monsterinfo.current_move=wa:e.monsterinfo.current_move=Ii}function Ci(e,t){let{forward:n,right:r,up:i}=J(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 sw(e,t){if(!e.enemy)return;let n=Ci(e,Yy),r=D(z(e.enemy.origin,n));Kn(e,n,r,6,4,.05,.05,0,t,4);let i=Ci(e,$y),a=D(z(e.enemy.origin,i));Kn(e,i,a,6,4,.05,.05,0,t,4)}function ow(e,t){if(!e.enemy)return;let n=Ci(e,jy),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=D(z(r,n));Bo(e,n,i,50,300,100,200,0,t)}function cw(e){e.monsterinfo.nextframe=Wc.lastframe,e.nextthink=-1}function uw(e,t){let n=t.spawn();n.classname="monster_makron",n.origin={...e.origin},n.angles={...e.angles}}var dw=Array.from({length:51},()=>({ai:qy,dist:0}));ya={firstframe:0,lastframe:50,frames:dw,endfunc:rw};var mw=Array.from({length:14},()=>({ai:Zy,dist:10}));Hc={firstframe:51,lastframe:64,frames:mw,endfunc:iw};var lw=Array.from({length:14},()=>({ai:Jy,dist:10}));Vc={firstframe:51,lastframe:64,frames:lw,endfunc:Nt};var hw=Array.from({length:8},()=>({ai:va,dist:0})),fw={firstframe:65,lastframe:72,frames:hw,endfunc:null},gw=Array.from({length:6},()=>({ai:va,dist:0,think:sw}));wa={firstframe:73,lastframe:78,frames:gw,endfunc:aw};fw.endfunc=e=>{e.monsterinfo.current_move=wa};var _w=Array.from({length:4},()=>({ai:sn,dist:0}));Ii={firstframe:79,lastframe:82,frames:_w,endfunc:Nt};var pw=Array.from({length:13},(e,t)=>({ai:va,dist:0,think:t===6?ow:null}));Qy={firstframe:83,lastframe:95,frames:pw,endfunc:Nt};var vw=Array.from({length:3},()=>({ai:sn,dist:0}));ew={firstframe:96,lastframe:98,frames:vw,endfunc:Nt};var yw=Array.from({length:3},()=>({ai:sn,dist:0}));tw={firstframe:99,lastframe:101,frames:yw,endfunc:Nt};var ww=Array.from({length:25},()=>({ai:sn,dist:0}));nw={firstframe:102,lastframe:126,frames:ww,endfunc:Nt};var Sw=Array.from({length:50},(e,t)=>({ai:sn,dist:0,think:t===49?((n,r)=>{}):t===48?uw:null}));Wc={firstframe:127,lastframe:176,frames:Sw,endfunc:cw};var fr=.1,xw={x:30,y:28,z:24},Aw={x:26,y:16,z:24},Ew={x:26,y:-14,z:24};function kw(e,t,n){te(e,fr,n)}function Tw(e,t,n){ce(e,t,fr,n)}function Mw(e,t,n){se(e,t,fr,n)}function Kc(e,t,n){ne(e,t,fr,n)}function zt(e,t,n){ie(e,t)}var Sa,Xc,$c,bw,Yc,Rw,Lw,Nw,zw,jc,Ow;function Iw(e){e.monsterinfo.current_move=Sa}function Cw(e){e.monsterinfo.current_move=Xc}function et(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=$c:e.monsterinfo.current_move=Sa}function xa(e,t){let{forward:n,right:r,up:i}=J(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 Pw(e,t){if(!e.enemy)return;t.engine.sound?.(e,0,"makron/bfg_fire.wav",1,1,0);let n=xa(e,xw),r={...e.enemy.origin};r.z+=e.enemy.viewheight||0;let i=D(z(r,n));Bo(e,n,i,50,300,100,300,0,t)}function Dw(e,t){if(!e.pos1)return;t.engine.sound?.(e,0,"makron/rail_fire.wav",1,1,0);let n=xa(e,Ew),r=D(z(e.pos1,n));Go(e,n,r,50,100,0,t)}function Fw(e){e.enemy&&(e.pos1={...e.enemy.origin},e.pos1={...e.pos1,z:e.pos1.z+(e.enemy.viewheight||0)})}function Uw(e,t){t.engine.sound?.(e,0,"makron/blaster.wav",1,1,0);let n=xa(e,Aw),r=(e.monsterinfo.nextframe||0)-Yc.firstframe,i=0,a;if(e.enemy){let s={...e.enemy.origin};s.z+=e.enemy.viewheight||0;let o=z(s,n),u={...Zt(o)};r<=12?u.y-=5*(r-4):u.y-=40-5*(r-12),a=J(u).forward}else{let{forward:s}=J(e.angles);a=s}Ve(e,n,a,15,1e3,0,0,t,1)}function Bw(e){e.monsterinfo.nextframe=jc.lastframe,e.nextthink=-1}var Gw=Array.from({length:60},()=>({ai:kw,dist:0}));Sa={firstframe:0,lastframe:59,frames:Gw,endfunc:Iw};var Hw=Array.from({length:10},()=>({ai:Tw,dist:8}));Xc={firstframe:60,lastframe:69,frames:Hw,endfunc:Cw};var Vw=Array.from({length:10},()=>({ai:Mw,dist:8}));$c={firstframe:60,lastframe:69,frames:Vw,endfunc:et};var Ww=Array.from({length:8},(e,t)=>({ai:Kc,dist:0,think:t===3?Pw:null}));bw={firstframe:70,lastframe:77,frames:Ww,endfunc:et};var Kw=Array.from({length:26},(e,t)=>({ai:zt,dist:0,think:t>=4&&t<=20?Uw:null}));Yc={firstframe:78,lastframe:103,frames:Kw,endfunc:et};var Xw=Array.from({length:16},(e,t)=>({ai:Kc,dist:0,think:t===7?Fw:t===8?Dw:null}));Rw={firstframe:104,lastframe:119,frames:Xw,endfunc:et};var $w=Array.from({length:4},()=>({ai:zt,dist:0}));Lw={firstframe:120,lastframe:123,frames:$w,endfunc:et};var Yw=Array.from({length:4},()=>({ai:zt,dist:0}));Nw={firstframe:124,lastframe:127,frames:Yw,endfunc:et};var jw=Array.from({length:27},()=>({ai:zt,dist:0}));zw={firstframe:128,lastframe:154,frames:jw,endfunc:et};var qw=Array.from({length:95},()=>({ai:zt,dist:0}));jc={firstframe:155,lastframe:249,frames:qw,endfunc:Bw};var Zw=Array.from({length:13},()=>({ai:zt,dist:0}));Ow={firstframe:250,lastframe:262,frames:Zw,endfunc:et};var qt=.1;function Jw(e,t,n){if(e.classname==="monster_medic"&&Qc(e,n)){e.monsterinfo.current_move=on;return}te(e,qt,n)}function Qw(e,t,n){ce(e,t,qt,n)}function eS(e,t,n){e.classname==="monster_medic"&&Qc(e,n)?e.monsterinfo.current_move=on:se(e,t,qt,n)}function Pe(e,t,n){ne(e,t,qt,n)}function Aa(e,t,n){ie(e,t)}var Ea,qc,on,tS,Zc,nS,rS,Jc;function iS(e){e.monsterinfo.current_move=Ea}function aS(e){e.monsterinfo.current_move=qc}function cn(e){if(e.classname==="monster_medic"&&e.enemy&&e.enemy.deadflag===2&&Je(e,e.enemy)<80){e.monsterinfo.current_move=Zc;return}e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=on:e.monsterinfo.current_move=Ea}function sS(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=D(z(e.enemy.origin,n));Ve(e,n,r,2,1e3,0,0,t,10)}function je(e,t){if(!e.enemy||e.enemy.deadflag!==2)return;if(Je(e,e.enemy)>400){e.monsterinfo.current_move=on;return}let r=J(e.angles),i=r.forward,a=r.right,s=r.up,o={x:24,y:0,z:6},c=U(e.origin,U(B(i,o.x),U(B(a,o.y),B(s,o.z)))),u=e.enemy.origin;t.multicast(e.origin,1,pe.temp_entity,{te:Se.MEDIC_CABLE_ATTACK,entId:e.index,targetId:e.enemy.index,start:c,end:u})}function oS(e,t){t.engine.sound?.(e,0,"medic/medatck2.wav",1,1,0),je(e,t)}function cS(e,t){if(!e.enemy||e.enemy.deadflag!==2)return;let n=e.enemy,r=t.getSpawnFunction(n.classname);if(Je(e,n)>400){e.enemy=null;return}if(!r)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),n.bad_medic=e;else{let i={entities:t,keyValues:{classname:n.classname},warn:o=>{},free:o=>t.free(o)},a={...n.origin},s={...n.angles};r(n,i),n.origin=a,n.angles=s,t.linkentity(n),n.deadflag=0,n.takedamage=!0,t.finalizeSpawn(n)}e.enemy=null}function Qc(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,d)=>{let m=t.trace(a,s,o,c,u,d);return{fraction:m.fraction,ent:m.ent}};return t.forEachEntity(a=>{if(a===e||a.deadflag!==2||!a.monsterinfo||a.classname==="monster_medic"||a.bad_medic===e||!Qt(e,a,i))return;let s=Je(e,a);s<r&&(r=s,n=a)}),n?(e.enemy=n,!0):!1}function uS(e,t){let n=Math.random(),r="monster_soldier_light";n>.8?r="monster_soldier_ssg":n>.5&&(r="monster_soldier");let i=t.getSpawnFunction(r);if(i){let a=J(e.angles),s=B(a.forward,64),o=U(e.origin,s),c={...o,z:o.z+8},u=t.trace(e.origin,{x:-16,y:-16,z:-24},{x:16,y:16,z:32},c,e,_e|st|jn);if(u.fraction<1||u.startsolid||u.allsolid)return;let d=t.spawn();d.origin=c,d.angles={...e.angles},i(d,{entities:t,keyValues:{classname:r},warn:()=>{},free:h=>t.free(h)}),d.enemy=e.enemy,t.multicast(c,1,pe.muzzleflash,{entId:d.index,flash_number:0}),t.engine.sound?.(e,0,"medic/medatck2.wav",1,1,0)}}function dS(e){e.monsterinfo.nextframe=Jc.lastframe,e.nextthink=-1}var mS=Array.from({length:30},()=>({ai:Jw,dist:0}));Ea={firstframe:0,lastframe:29,frames:mS,endfunc:iS};var lS=Array.from({length:40},()=>({ai:Qw,dist:3}));qc={firstframe:30,lastframe:69,frames:lS,endfunc:aS};var hS=Array.from({length:20},()=>({ai:eS,dist:12}));on={firstframe:70,lastframe:89,frames:hS,endfunc:cn};var fS=Array.from({length:16},(e,t)=>({ai:Pe,dist:0,think:t>=4&&t<=13?sS:null}));tS={firstframe:90,lastframe:105,frames:fS,endfunc:cn};var gS=[{ai:Pe,dist:0,think:oS},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:je},{ai:Pe,dist:0,think:cS}];Zc={firstframe:106,lastframe:114,frames:gS,endfunc:cn};var _S=Array.from({length:6},()=>({ai:Aa,dist:0}));rS={firstframe:116,lastframe:121,frames:_S,endfunc:cn};var pS=Array.from({length:23},(e,t)=>({ai:Aa,dist:0,think:t===11?uS:null}));nS={firstframe:122,lastframe:144,frames:pS,endfunc:cn};var vS=Array.from({length:30},()=>({ai:Aa,dist:0}));Jc={firstframe:161,lastframe:190,frames:vS,endfunc:dS};var un=.1;function b(e,t,n){te(e,un,n)}function ve(e,t,n){ce(e,t,un,n)}function wt(e,t,n){se(e,t,un,n)}function Ye(e,t,n){ne(e,t,un,n)}function X(e,t,n){ie(e,t)}function Ti(e,t,n){L1(e,null,t,un)}var eu,tu,Xn,yS,wS,SS,xS,nu,ru;function AS(e){e.monsterinfo.current_move=tu}function ES(e){e.monsterinfo.current_move=eu}function Ot(e){e.monsterinfo.current_move=Xn}function iu(e,t,n){if(n.engine.sound?.(e,0,"mutant/mutatck1.wav",1,1,0),!e.enemy)return;let r=z(e.enemy.origin,e.origin);if(Tt(r)>100)return;let a=D(r);le(e.enemy,e,e,a,e.enemy.origin,K,t,0,0,0,n.timeSeconds)}function kS(e,t){iu(e,30,t)}function po(e,t){iu(e,30,t)}function At(e,t){e.flags&1&&e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Xn),e.groundentity&&(e.movetype=5,e.monsterinfo.current_move=Xn)}function TS(e,t,n,r){e.health<=0||(t&&t.takedamage&&(e.velocity.z>0&&(e.velocity={...e.velocity,z:0}),le(t,e,e,D(e.velocity),e.origin,K,50,0,0,0,0)),(!t||!t.takedamage&&t.solid!==0)&&(e.touch=void 0))}function MS(e,t){let n=J(e.angles).forward;e.movetype=7,e.touch=TS,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 bS(e){e.monsterinfo.nextframe=nu.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var RS=[{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0},{ai:b,dist:0}];eu={firstframe:0,lastframe:50,frames:RS,endfunc:ES};var LS=[{ai:ve,dist:3},{ai:ve,dist:1},{ai:ve,dist:5},{ai:ve,dist:10},{ai:ve,dist:13},{ai:ve,dist:12},{ai:ve,dist:0},{ai:ve,dist:0},{ai:ve,dist:5},{ai:ve,dist:6},{ai:ve,dist:16},{ai:ve,dist:15},{ai:ve,dist:6}];tu={firstframe:51,lastframe:63,frames:LS,endfunc:AS};var NS=[{ai:wt,dist:20},{ai:wt,dist:15},{ai:wt,dist:35},{ai:wt,dist:20},{ai:wt,dist:10},{ai:wt,dist:20}];Xn={firstframe:64,lastframe:69,frames:NS,endfunc:Ot};var zS=[{ai:Ye,dist:0},{ai:Ye,dist:0},{ai:Ye,dist:0,think:po},{ai:Ye,dist:0},{ai:Ye,dist:0,think:kS},{ai:Ye,dist:0},{ai:Ye,dist:0,think:po},{ai:Ye,dist:0}];yS={firstframe:70,lastframe:77,frames:zS,endfunc:Ot};var OS=[{ai:Ti,dist:0},{ai:Ti,dist:0},{ai:Ti,dist:0,think:MS},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At},{ai:X,dist:0,think:At}];ru={firstframe:93,lastframe:100,frames:OS,endfunc:Ot};ru.frames[3].ai=(e,t,n)=>{At(e,n),!e.groundentity&&e.frame===99&&(e.groundentity||(e.monsterinfo.nextframe=96))};var IS=[{ai:X,dist:4},{ai:X,dist:-3},{ai:X,dist:-8},{ai:X,dist:2},{ai:X,dist:5}];wS={firstframe:78,lastframe:82,frames:IS,endfunc:Ot};var CS=[{ai:X,dist:-24},{ai:X,dist:11},{ai:X,dist:5},{ai:X,dist:-2}];SS={firstframe:83,lastframe:86,frames:CS,endfunc:Ot};var PS=[{ai:X,dist:11},{ai:X,dist:0},{ai:X,dist:-2},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0}];xS={firstframe:87,lastframe:92,frames:PS,endfunc:Ot};var DS=[{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0},{ai:X,dist:0}];nu={firstframe:101,lastframe:109,frames:DS,endfunc:bS};var gr=.1,FS=()=>Math.random();function G(e,t,n){te(e,gr,n)}function Be(e,t,n){ce(e,t,gr,n)}function Ge(e,t,n){se(e,t,gr,n)}function de(e,t,n){ne(e,t,gr,n)}function me(e,t,n){ie(e,t)}var ka,au,su,US,BS,ou,cu,GS,HS,Ta,uu;function VS(e,t){t.engine.sound?.(e,0,"parasite/paratck1.wav",1,1,0)}function WS(e,t){t.engine.sound?.(e,0,"parasite/paratck4.wav",1,1,0)}function St(e,t){t.engine.sound?.(e,0,"parasite/paridle1.wav",1,2,0)}function Pi(e,t){t.engine.sound?.(e,0,"parasite/paridle2.wav",1,2,0)}function KS(e){e.monsterinfo.current_move=Ta}function XS(e){FS()<=.8?e.monsterinfo.current_move=Ta:e.monsterinfo.current_move=uu}function du(e){e.monsterinfo.current_move=ka}function Ma(e){e.monsterinfo.current_move=au}function mu(e){e.monsterinfo.current_move=cu}function lu(e){e.monsterinfo.aiflags&&e.monsterinfo.aiflags&1?e.monsterinfo.current_move=ka:e.monsterinfo.current_move=su}function Mi(e,t){let n=z(t,e);if(Tt(n)>256)return!1;let a=Zt(n).x;return a<-180&&(a+=360),!(Math.abs(a)>30)}function be(e,t){if(!e.enemy)return;let n=J(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=df(e.enemy.origin);if(!Mi(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.maxs.z-8},!Mi(o,c)&&(c={...c,z:e.enemy.origin.z+e.enemy.mins.z+8},!Mi(o,c)))||t.trace(o,c,K,K,e,Jt).ent!==e.enemy)return;let d=2,m=e.frame;m===41?(d=5,t.engine.sound?.(e.enemy,0,"parasite/paratck2.wav",1,1,0)):(m===42&&t.engine.sound?.(e,0,"parasite/paratck3.wav",1,1,0),d=2),t.multicast(e.origin,0,pe.temp_entity,{te:Se.PARASITE_ATTACK,entId:e.index,start:o,end:c});let h=D(z(o,c));le(e.enemy,e,e,h,e.enemy.origin,K,d,0,8,0,t.timeSeconds),e.health<e.max_health&&(e.health+=d,e.health>e.max_health&&(e.health=e.max_health))}function $S(e){e.monsterinfo.nextframe=ou.lastframe,e.nextthink=-1,e.mins={x:-16,y:-16,z:-24},e.maxs={x:16,y:16,z:-8}}var YS=[{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0,think:St},{ai:G,dist:0},{ai:G,dist:0,think:St},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0,think:St},{ai:G,dist:0},{ai:G,dist:0,think:St},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0,think:St},{ai:G,dist:0},{ai:G,dist:0,think:St}];ka={firstframe:83,lastframe:99,frames:YS,endfunc:du};var jS=[{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0}];HS={firstframe:100,lastframe:103,frames:jS,endfunc:KS};var qS=[{ai:G,dist:0,think:Pi},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0,think:Pi},{ai:G,dist:0},{ai:G,dist:0}];Ta={firstframe:104,lastframe:109,frames:qS,endfunc:XS};var ZS=[{ai:G,dist:0,think:Pi},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0},{ai:G,dist:0}];uu={firstframe:110,lastframe:117,frames:ZS,endfunc:du};var JS=[{ai:Ge,dist:0},{ai:Ge,dist:30}];cu={firstframe:68,lastframe:69,frames:JS,endfunc:lu};var QS=[{ai:Ge,dist:30},{ai:Ge,dist:30},{ai:Ge,dist:22},{ai:Ge,dist:19},{ai:Ge,dist:24},{ai:Ge,dist:28},{ai:Ge,dist:25}];su={firstframe:70,lastframe:76,frames:QS,endfunc:lu};var ex=[{ai:Be,dist:0},{ai:Be,dist:30,think:Ma}];GS={firstframe:68,lastframe:69,frames:ex,endfunc:Ma};var tx=[{ai:Be,dist:30},{ai:Be,dist:30},{ai:Be,dist:22},{ai:Be,dist:19},{ai:Be,dist:24},{ai:Be,dist:28},{ai:Be,dist:25}];au={firstframe:70,lastframe:76,frames:tx,endfunc:Ma};var nx=[{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:6},{ai:me,dist:16},{ai:me,dist:-6},{ai:me,dist:-7},{ai:me,dist:0}];BS={firstframe:57,lastframe:67,frames:nx,endfunc:mu};var rx=[{ai:de,dist:0,think:VS},{ai:de,dist:0},{ai:de,dist:15,think:be},{ai:de,dist:0,think:be},{ai:de,dist:0,think:be},{ai:de,dist:0,think:be},{ai:de,dist:0,think:be},{ai:de,dist:-2,think:be},{ai:de,dist:-2,think:be},{ai:de,dist:-3,think:be},{ai:de,dist:-2,think:be},{ai:de,dist:0,think:be},{ai:de,dist:-1,think:be},{ai:de,dist:0,think:WS},{ai:de,dist:-2},{ai:de,dist:-2},{ai:de,dist:-3},{ai:de,dist:0}];US={firstframe:39,lastframe:56,frames:rx,endfunc:mu};var ix=[{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0},{ai:me,dist:0}];ou={firstframe:32,lastframe:38,frames:ix,endfunc:$S};var _r=.1;var ax=2;function sx(e,t,n){te(e,_r,n)}function ox(e,t,n){ce(e,t,_r,n)}function cx(e,t,n){se(e,t,_r,n)}function hu(e,t,n){ne(e,t,_r,n)}function fu(e,t,n){ie(e,t)}var ba,gu,_u,ux,dx,mx,pu;function lx(e){e.monsterinfo.current_move=ba}function hx(e){e.monsterinfo.current_move=gu}function pr(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=_u:e.monsterinfo.current_move=ba}function Ra(e){return{x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight}}function La(e,t){if(!e.enemy){let{forward:r}=J(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 D(z(n,t))}function fx(e,t){if(!e.enemy)return;let n=Ra(e),r=La(e,n);Ve(e,n,r,5,600,0,0,t,1)}function gx(e,t){if(!e.enemy)return;let n=Ra(e),r=La(e,n),i=2,a=4,s=20,o=.15,c=.15;t.engine.sound?.(e,0,"soldier/solatck2.wav",1,1,0),yg(e,n,r,i,a,o,c,s,0,t,3)}function _x(e,t){if(!e.enemy)return;let n=Ra(e),r=La(e,n),i=4,a=4,s=.05,o=.05;t.engine.sound?.(e,0,"soldier/solatck3.wav",1,1,0),at(e,n,r,i,a,s,o,0,t,4)}function px(e,t){e.spawnflags&ax?gx(e,t):fx(e,t)}var vx=Array.from({length:30},()=>({ai:sx,dist:0}));ba={firstframe:0,lastframe:29,frames:vx,endfunc:lx};var yx=Array.from({length:40},()=>({ai:ox,dist:2}));gu={firstframe:30,lastframe:69,frames:yx,endfunc:hx};var wx=Array.from({length:20},()=>({ai:cx,dist:10}));_u={firstframe:70,lastframe:89,frames:wx,endfunc:pr};var Sx=Array.from({length:10},(e,t)=>({ai:hu,dist:0,think:t===5?px:null}));ux={firstframe:90,lastframe:99,frames:Sx,endfunc:pr};var xx=Array.from({length:10},(e,t)=>({ai:hu,dist:0,think:t>=4&&t<=8?_x:null}));dx={firstframe:90,lastframe:99,frames:xx,endfunc:pr};var Ax=Array.from({length:6},()=>({ai:fu,dist:0}));mx={firstframe:100,lastframe:105,frames:Ax,endfunc:pr};var Ex=Array.from({length:10},()=>({ai:fu,dist:0}));function kx(e){e.monsterinfo.nextframe=pu.lastframe,e.nextthink=-1}pu={firstframe:106,lastframe:115,frames:Ex,endfunc:kx};var vu=.1,Tx={x:30,y:30,z:40},Mx={x:30,y:-30,z:40},bx={x:20,y:0,z:70};function Rx(e,t,n){te(e,vu,n)}function Lx(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=za:e.monsterinfo.current_move=vr}function Na(e,t,n){ne(e,t,vu,n)}function dn(e,t,n){ie(e,t)}var vr,za,Nx,zx,yu,wu,Ox,Ix,Cx,Su;function Px(e){e.monsterinfo.current_move=vr}function ct(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=za:e.monsterinfo.current_move=vr}function Oa(e,t){let{forward:n,right:r,up:i}=J(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 Dx(e,t){if(!e.enemy)return;let n=Oa(e,Mx),r=D(z(e.enemy.origin,n));nn(e,n,r,50,650,0,t)}function Fx(e,t){if(!e.enemy)return;let n=Oa(e,bx),r=D(z(e.enemy.origin,n));wg(e,n,r,50,600,0,t)}function Ux(e,t){if(!e.enemy)return;let n=Oa(e,Tx),r=D(z(e.enemy.origin,n));Kn(e,n,r,6,4,.05,.05,0,t,4)}function Bx(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&&Qt(e,e.enemy,n)&&(Math.random()<.3||e.timestamp&&e.timestamp>=Date.now()/1e3)?e.monsterinfo.current_move=yu:e.monsterinfo.current_move=wu}function Gx(e){e.monsterinfo.nextframe=Su.lastframe,e.nextthink=-1}var Hx=Array.from({length:60},()=>({ai:Rx,dist:0}));vr={firstframe:0,lastframe:59,frames:Hx,endfunc:Px};var Vx=Array.from({length:18},()=>({ai:Lx,dist:12}));za={firstframe:60,lastframe:77,frames:Vx,endfunc:ct};var Wx=Array.from({length:4},()=>({ai:dn,dist:0}));Cx={firstframe:78,lastframe:81,frames:Wx,endfunc:ct};var Kx=Array.from({length:4},()=>({ai:dn,dist:0}));Ix={firstframe:82,lastframe:85,frames:Kx,endfunc:ct};var Xx=Array.from({length:4},()=>({ai:dn,dist:0}));Ox={firstframe:86,lastframe:89,frames:Xx,endfunc:ct};var $x=Array.from({length:24},()=>({ai:dn,dist:0}));Su={firstframe:90,lastframe:113,frames:$x,endfunc:Gx};var Yx=Array.from({length:6},(e,t)=>({ai:Na,dist:0,think:t===0||t===3?Fx:null}));zx={firstframe:114,lastframe:119,frames:Yx,endfunc:ct};var jx=Array.from({length:27},(e,t)=>({ai:Na,dist:0,think:t===7||t===10||t===13?Dx:null}));Nx={firstframe:120,lastframe:146,frames:jx,endfunc:ct};var qx=Array.from({length:6},()=>({ai:Na,dist:0,think:Ux}));yu={firstframe:147,lastframe:152,frames:qx,endfunc:Bx};var Zx=Array.from({length:14},()=>({ai:dn,dist:0}));wu={firstframe:153,lastframe:166,frames:Zx,endfunc:ct};var Ia=.1;function Jx(e,t,n){te(e,Ia,n)}function Qx(e,t,n){ce(e,t,Ia,n)}function eA(e,t,n){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Pa:e.monsterinfo.current_move=yr}function Ca(e,t,n){ne(e,t,Ia,n)}function xu(e,t,n){ie(e,t)}var yr,Au,Pa,tA,nA,rA,iA,Eu;function aA(e){e.monsterinfo.current_move=yr}function sA(e){e.monsterinfo.current_move=Au}function mn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=Pa:e.monsterinfo.current_move=yr}function oA(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(z(e.enemy.origin,n));Ve(e,n,r,30,1e3,0,0,t,1)}function cA(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(z(e.enemy.origin,n));at(e,n,r,20,2,.05,.05,0,t,4)}function bi(e,t){if(!e.enemy)return;let n={x:e.origin.x,y:e.origin.y,z:e.origin.z+(e.viewheight||0)},r=D(z(e.enemy.origin,n));nn(e,n,r,50,650,0,t)}function uA(e){e.monsterinfo.nextframe=Eu.lastframe,e.nextthink=-1}var dA=Array.from({length:30},()=>({ai:Jx,dist:0}));yr={firstframe:0,lastframe:29,frames:dA,endfunc:aA};var mA=Array.from({length:16},()=>({ai:Qx,dist:5}));Au={firstframe:30,lastframe:45,frames:mA,endfunc:sA};var lA=Array.from({length:16},()=>({ai:eA,dist:10}));Pa={firstframe:46,lastframe:61,frames:lA,endfunc:mn};var hA=Array.from({length:16},(e,t)=>({ai:Ca,dist:0,think:t>5&&t<12?oA:null}));tA={firstframe:62,lastframe:77,frames:hA,endfunc:mn};var fA=Array.from({length:20},(e,t)=>({ai:Ca,dist:0,think:t%2===0&&t>5?cA:null}));nA={firstframe:78,lastframe:97,frames:fA,endfunc:mn};var gA=Array.from({length:18},(e,t)=>({ai:Ca,dist:0,think:t===8||t===12||t===16?bi:null}));rA={firstframe:98,lastframe:115,frames:gA,endfunc:mn};var _A=Array.from({length:6},()=>({ai:xu,dist:0}));iA={firstframe:116,lastframe:121,frames:_A,endfunc:mn};var pA=Array.from({length:16},()=>({ai:xu,dist:0}));Eu={firstframe:122,lastframe:137,frames:pA,endfunc:uA};var Da=.1;function vA(e,t,n){te(e,Da,n)}function Fa(e,t,n){se(e,t,Da,n)}function yA(e,t,n){ne(e,t,Da,n)}var Ua,ku,wA,SA,Tu;function xA(e){e.monsterinfo.current_move=Ua}function Ba(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=ku:e.monsterinfo.current_move=Ua}function AA(e,t){if(!e.enemy)return;let n=J(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=D(z(e.enemy.origin,r));t.engine.sound?.(e,0,"turret/fire.wav",1,1,0),Ve(e,r,i,2,1e3,1,0,t)}var EA=Array.from({length:1},()=>({ai:vA,dist:0}));Ua={firstframe:0,lastframe:0,frames:EA,endfunc:xA};var kA=Array.from({length:1},()=>({ai:Fa,dist:0}));ku={firstframe:0,lastframe:0,frames:kA,endfunc:Ba};var TA=Array.from({length:8},(e,t)=>({ai:yA,dist:0,think:t===4?AA:void 0}));wA={firstframe:1,lastframe:8,frames:TA,endfunc:Ba};var MA=Array.from({length:2},()=>({ai:Fa,dist:0}));SA={firstframe:9,lastframe:10,frames:MA,endfunc:Ba};var bA=Array.from({length:4},()=>({ai:Fa,dist:0}));function RA(e){e.monsterinfo.nextframe=Tu.lastframe,e.nextthink=-1,e.deadflag=2,e.solid=0}Tu={firstframe:11,lastframe:14,frames:bA,endfunc:RA};var _k=new Map(Wi.map(e=>[e.name,e]));var LA=2166136261,NA=16777619;function Mu(e,t){let n=e>>>0;for(let r=0;r<t.length;r+=1)n^=t[r]&255,n=Math.imul(n,NA)>>>0;return n>>>0}function Et(e,t){let n=new ArrayBuffer(8);new DataView(n).setFloat64(0,t,!0);let i=new Uint8Array(n);return Mu(e,i)}function Di(e,t){let n=new Uint8Array(t.length);for(let r=0;r<t.length;r+=1)n[r]=t.charCodeAt(r)&255;return Mu(e,n)}var Ri=2,zA=1;function we(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function Z(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Un(e,t,n){return e===void 0?n:Z(e,t)}function $n(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function Gn(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let n of e)Z(n,`${t} element`);return e}function OA(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=we(e,"level");return{frameNumber:Un(t.frameNumber,"level.frameNumber",0),timeSeconds:Un(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Un(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Un(t.deltaSeconds,"level.deltaSeconds",0)}}function IA(e){if(e===void 0)return new xo().getState();let t=we(e,"rng"),n=we(t.mt,"rng.mt"),r=Gn(n.state,"rng.mt.state");return{mt:{index:Z(n.index,"rng.mt.index"),state:r}}}function CA(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=we(t,`thinks[${n}]`);return{time:Z(r.time,`thinks[${n}].time`),entityIndex:Z(r.entityIndex,`thinks[${n}].entityIndex`)}})}function PA(e){if(e===void 0)return{frameNumber:0,sightEntityIndex:null,sightEntityFrame:0,soundEntityIndex:null,soundEntityFrame:0,sound2EntityIndex:null,sound2EntityFrame:0,sightClientIndex:null};let t=we(e,"awareness"),n=(r,i)=>r===null?null:Z(r,i);return{frameNumber:Z(t.frameNumber,"awareness.frameNumber"),sightEntityIndex:n(t.sightEntityIndex,"awareness.sightEntityIndex"),sightEntityFrame:Z(t.sightEntityFrame,"awareness.sightEntityFrame"),soundEntityIndex:n(t.soundEntityIndex,"awareness.soundEntityIndex"),soundEntityFrame:Z(t.soundEntityFrame,"awareness.soundEntityFrame"),sound2EntityIndex:n(t.sound2EntityIndex,"awareness.sound2EntityIndex"),sound2EntityFrame:Z(t.sound2EntityFrame,"awareness.sound2EntityFrame"),sightClientIndex:n(t.sightClientIndex,"awareness.sightClientIndex")}}function DA(e){if(e===void 0)return{};let t=we(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=we(i,r),s={};for(let[o,c]of Object.entries(a))s[o]=Z(c,`${r}.${o}`);n[r]=s;break}if(Array.isArray(i)&&i.length===3){let[a,s,o]=i;n[r]=[Z(a,`${r}[0]`),Z(s,`${r}[1]`),Z(o,`${r}[2]`)];break}throw new Error(`Unsupported entity field value for ${r}`)}}}return n}function FA(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,n)=>{let r=we(t,`entities[${n}]`);return{index:Z(r.index,`entities[${n}].index`),fields:DA(r.fields)}})}function UA(e){let t=we(e,"pool");return{capacity:Z(t.capacity,"pool.capacity"),activeOrder:Gn(t.activeOrder,"pool.activeOrder"),freeList:Gn(t.freeList,"pool.freeList"),pendingFree:Gn(t.pendingFree,"pool.pendingFree")}}function BA(e){let t=we(e,"entities");return{timeSeconds:Z(t.timeSeconds,"entities.timeSeconds"),pool:UA(t.pool),entities:FA(t.entities),thinks:CA(t.thinks),awareness:PA(t.awareness)}}function GA(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=we(t,`cvars[${n}]`);return{name:$n(r.name,`cvars[${n}].name`),value:$n(r.value,`cvars[${n}].value`),flags:Z(r.flags,`cvars[${n}].flags`)}})}function HA(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,n)=>$n(t,`configstrings[${n}]`))}function VA(e){return e===void 0?{}:we(e,"gameState")}function He(e,t){if(t==null)return e;if(typeof t=="number")return Et(e,t);if(typeof t=="string")return Di(e,t);if(typeof t=="boolean")return Et(e,t?1:0);if(Array.isArray(t)){let n=e;for(let r of t)n=He(n,r);return n}if(typeof t=="object"){let n=e,r=Object.keys(t).sort();for(let i of r)n=Di(n,i),n=He(n,t[i]);return n}return e}function WA(e){let t=LA;return t=Et(t,e.version),t=Et(t,e.timestamp),t=Di(t,e.map),t=Et(t,e.difficulty),t=Et(t,e.playtimeSeconds),t=He(t,e.gameState),t=He(t,e.level),t=He(t,e.rng),t=He(t,e.entities),t=He(t,e.cvars),t=He(t,e.configstrings),e.player&&(t=He(t,e.player)),t>>>0}function bu(e,t={}){let{allowNewerVersion:n=!0}=t,r=typeof e=="string"?JSON.parse(e):e,i=we(r,"save"),a=i.version??Ri,s=Z(a,"version");if(s<zA)throw new Error(`Unsupported save version ${s}`);if(s>Ri&&!n)throw new Error(`Save version ${s} is newer than supported ${Ri}`);let o={version:s,timestamp:Z(i.timestamp,"timestamp"),map:$n(i.map,"map"),difficulty:Z(i.difficulty,"difficulty"),playtimeSeconds:Z(i.playtimeSeconds,"playtimeSeconds"),gameState:VA(i.gameState),level:OA(i.level),rng:IA(i.rng),entities:BA(i.entities),cvars:GA(i.cvars),configstrings:HA(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?Z(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=WA(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var pk=new Set(Wi.filter(e=>e.save).map(e=>e.name));var vo=globalThis.TextEncoder;function kt(e){return bu({...e},{allowNewerVersion:!0})}function KA(e){return vo?new vo().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var XA=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:kt(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:kt(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:kt(e.save)}))}},$A=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:kt(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:kt(t.save)}))}},Ga=class Kt{constructor(t={}){let{dbName:n=Kt.DEFAULT_DB_NAME,storeName:r=Kt.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new $A(i,n,r):this.adapter=new XA}async save(t,n,r={}){let i=kt(n),a={id:t,name:r.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:KA(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 bu(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(Kt.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(Kt.QUICK_SLOT,t)}};Ga.DEFAULT_DB_NAME="quake2ts-saves";Ga.DEFAULT_STORE="saves";Ga.QUICK_SLOT="quicksave";var vk=Gi();var yk=[P.Blaster,P.Shotgun,P.SuperShotgun,P.Machinegun,P.Chaingun,P.GrenadeLauncher,P.RocketLauncher,P.HyperBlaster,P.Railgun,P.BFG10K],wk=[{id:$.QuadDamage,priority:1},{id:$.Invulnerability,priority:2},{id:$.EnviroSuit,priority:3},{id:$.Rebreather,priority:4},{id:$.Silencer,priority:5}];var Ru=(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 ln=(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]),d=i[u];d&&e.drawPic(t+c*a,n,d,s)}};var tt=new Map,YA=["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"],Lu=async(e,t)=>{for(let n of YA)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);tt.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}};var hn=new Map,jA=["d_left","d_right","d_up","d_down"],Nu=async(e,t)=>{for(let n of jA)try{let r=await t.loadTexture(`pics/${n}.pcx`),i=e.registerTexture(n,r);hn.set(n,i)}catch{console.error(`Failed to load HUD image: pics/${n}.pcx`)}},zu=(e,t)=>{if(!t.damageIndicators)return;let n=e.width,r=e.height,{forward:i,right:a,up:s}=Ut(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:u}=o,d={...c},m=Math.sqrt(d.x*d.x+d.y*d.y+d.z*d.z);m>0&&(d.x/=m,d.y/=m,d.z/=m);let h=De(d,a),f=De(d,i),g=Math.atan2(f,h)*180/Math.PI,_,l=0,v=0;g>-45&&g<=45?(_=hn.get("d_right"),l=n-(_?.width||0),v=(r-(_?.height||0))/2):g>45&&g<=135?(_=hn.get("d_up"),l=(n-(_?.width||0))/2,v=0):g>135||g<=-135?(_=hn.get("d_left"),l=0,v=(r-(_?.height||0))/2):(_=hn.get("d_down"),l=(n-(_?.width||0))/2,v=r-(_?.height||0)),_&&e.drawPic(l,v,_)}};var Ou=(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 Iu=(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 Cu=(e,t)=>{if(!t.pickupIcon)return;let n=tt.get(t.pickupIcon);if(n){let r=e.width-n.width-10,i=e.height-n.height-10;e.drawPic(r,i,n)}};var qA=!1;var Pu=(e,t,n,r,i,a,s,o,c)=>{let u;n<=25&&(qA?u=[.2,.6,1,1]:u=[1,0,0,1]),a.length>0&&(ln(e,c.HEALTH_X,c.HEALTH_Y,n,a,s,u),ln(e,c.ARMOR_X,c.ARMOR_Y,r,a,s),ln(e,c.AMMO_X,c.AMMO_Y,i,a,s));let d=t.inventory.armor;if(d&&d.armorCount>0){let _=`i_${d.armorType}armor`,l=tt.get(_);l&&e.drawPic(c.ARMOR_X-24,c.ARMOR_Y-2,l)}let m=t.inventory.currentWeapon;if(m){let _=Object.values(Ro).find(l=>l.weaponId===m);if(_){let l=`w_${_.id.substring(7)}`,v=tt.get(l);v&&e.drawPic(c.WEAPON_ICON_X,c.WEAPON_ICON_Y,v)}}let h=Array.from(t.inventory.keys).sort(),f=c.WEAPON_ICON_Y-150*c.scale;for(let _ of h){let l="";switch(_){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 v=tt.get(l);v&&(e.drawPic(c.WEAPON_ICON_X,f,v),f+=v.height+2)}}let g=c.POWERUP_X;for(let[_,l]of t.inventory.powerups.entries())if(l&&l>o){let v=`p_${_}`,S=tt.get(v);if(S){e.drawPic(g,c.POWERUP_Y,S);let x=Math.ceil((l-o)/1e3);ln(e,g+S.width+2,c.POWERUP_Y,x,a,s),g-=S.width+s*x.toString().length+8}}};var wr=[],Du=0,Fu=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);wr.push(i)}catch(r){console.error(`Failed to load HUD image: pics/hud/num_${n}.pcx`,r)}wr.length>0&&(Du=wr[0].width),await io(e,t),await Lu(e,t),await Nu(e,t)},Uu=(e,t,n,r,i,a,s,o,c,u)=>{e.begin2D(),Iu(e,t),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]);let d=Ru(e.width,e.height);Pu(e,n,r,i,a,wr,Du,u,d),Cu(e,t),zu(e,t),Ou(e,s),o.drawCenterPrint(e,u,d),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),so(e,e.width,e.height),e.end2D()};var ZA=3e3,JA=5e3,QA=4,Sr=class{constructor(){this.centerPrintMsg=null;this.notifyMessages=[]}addCenterPrint(t,n){this.centerPrintMsg={text:t,startTime:n,duration:ZA}}addNotify(t,n){this.notifyMessages.push({text:t,startTime:n,duration:JA}),this.notifyMessages.length>QA&&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 eE=3e3,xr=class{constructor(){this.subtitle=null}addSubtitle(t,n){this.subtitle={text:t,startTime:n,duration:eE}}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 Ha=[{type:"null"},{type:"armor",id:bt.BODY},{type:"armor",id:bt.COMBAT},{type:"armor",id:bt.JACKET},{type:"armor",id:bt.JACKET},{type:"item",id:"item_power_screen"},{type:"item",id:"item_power_shield"},{type:"weapon",id:P.Grapple},{type:"weapon",id:P.Blaster},{type:"weapon",id:P.ChainFist},{type:"weapon",id:P.Shotgun},{type:"weapon",id:P.SuperShotgun},{type:"weapon",id:P.Machinegun},{type:"weapon",id:P.EtfRifle},{type:"weapon",id:P.Chaingun},{type:"ammo",id:W.Grenades},{type:"ammo",id:W.Trap},{type:"ammo",id:W.Tesla},{type:"weapon",id:P.GrenadeLauncher},{type:"weapon",id:P.ProxLauncher},{type:"weapon",id:P.RocketLauncher},{type:"weapon",id:P.HyperBlaster},{type:"weapon",id:P.IonRipper},{type:"weapon",id:P.PlasmaBeam},{type:"weapon",id:P.Railgun},{type:"weapon",id:P.Phalanx},{type:"weapon",id:P.BFG10K},{type:"weapon",id:P.Disruptor},{type:"ammo",id:W.Shells},{type:"ammo",id:W.Bullets},{type:"ammo",id:W.Cells},{type:"ammo",id:W.Rockets},{type:"ammo",id:W.Slugs},{type:"ammo",id:W.MagSlugs},{type:"ammo",id:W.Flechettes},{type:"ammo",id:W.Prox},{type:"ammo",id:W.Nuke},{type:"ammo",id:W.Rounds},{type:"powerup",id:$.QuadDamage},{type:"powerup",id:$.QuadFire},{type:"powerup",id:$.Invulnerability},{type:"powerup",id:$.Invisibility},{type:"powerup",id:$.Silencer},{type:"powerup",id:$.Rebreather},{type:"powerup",id:$.EnviroSuit},{type:"health",id:"ancient_head"},{type:"health",id:"legacy_head"},{type:"health",id:"adrenaline"},{type:"powerup",id:$.Bandolier},{type:"powerup",id:$.AmmoPack},{type:"powerup",id:$.IRGoggles},{type:"powerup",id:$.DoubleDamage},{type:"powerup",id:$.SphereVengeance},{type:"powerup",id:$.SphereHunter},{type:"powerup",id:$.SphereDefender},{type:"powerup",id:$.Doppelganger},{type:"powerup",id:$.TagToken},{type:"key",id:oe.DataCD},{type:"key",id:oe.PowerCube},{type:"key",id:oe.ExplosiveCharges},{type:"key",id:oe.Yellow},{type:"key",id:oe.PowerCore},{type:"key",id:oe.Pyramid},{type:"key",id:oe.DataSpinner},{type:"key",id:oe.Pass},{type:"key",id:oe.Blue},{type:"key",id:oe.Red},{type:"key",id:oe.Green},{type:"key",id:oe.CommanderHead},{type:"key",id:oe.Airstrike},{type:"key",id:oe.NukeContainer},{type:"key",id:oe.Nuke},{type:"health",id:"health_small"},{type:"health",id:"health_medium"},{type:"health",id:"health_large"},{type:"health",id:"health_mega"},{type:"key",id:oe.RedFlag},{type:"key",id:oe.BlueFlag},{type:"powerup",id:$.TechResistance},{type:"powerup",id:$.TechStrength},{type:"powerup",id:$.TechHaste},{type:"powerup",id:$.TechRegeneration},{type:"powerup",id:$.Flashlight},{type:"powerup",id:$.Compass}];var tE=2048,Ar=class{constructor(t,n){this.configstrings=new Array(tE).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&ps){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=mt();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&Qr&&(t.modelindex=n.modelindex),r&ti&&(t.modelindex2=n.modelindex2),r&ni&&(t.modelindex3=n.modelindex3),r&ri&&(t.modelindex4=n.modelindex4),r&jr&&(t.frame=n.frame),r&ei&&(t.frame=n.frame),(r&xn||r&kn)&&(t.skinnum=n.skinnum),(r&Sn||r&En)&&(t.effects=n.effects),(r&wn||r&An)&&(t.renderfx=n.renderfx),r&Kr&&(t.origin.x=n.origin.x),r&Xr&&(t.origin.y=n.origin.y),r&Zr&&(t.origin.z=n.origin.z),r&Jr&&(t.angles.x=n.angles.x),r&$r&&(t.angles.y=n.angles.y),r&Yr&&(t.angles.z=n.angles.z),r&ii&&(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&ai&&(t.sound=n.sound),r&qr&&(t.event=n.event),r&si&&(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,d=a??0;s&&s>0?this.imports.engine.audio.sound(s,0,n,c,u,d):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>=Ha.length)break;let d=Ha[c];switch(d.type){case"weapon":r.ownedWeapons.add(d.id);break;case"ammo":r.ammo.counts[d.id]||(r.ammo.counts[d.id]=0),r.ammo.counts[d.id]=u;break;case"armor":r.armor={armorType:d.id,armorCount:u};break;case"powerup":r.powerups.set(d.id,u);break;case"key":r.keys.add(d.id);break;case"health":break;case"item":r.items.add(d.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:nt.None,gravity:n.gravity,deltaAngles:o,client:{inventory:r,weaponStates:{states:new Map},buttons:0},health:n.stats[1],armor:n.stats[4],ammo:n.stats[2],blend:[0,0,0,0],damageAlpha:0,damageIndicators:[],stats:[...n.stats],kick_angles:ht,gunoffset:ht,gunangles:ht,gunindex:0,onGround:!1,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32}}}getPredictionState(t){if(!this.latestFrame)return it();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 _t(s,n,Math.max(0,Math.min(1,a)))}}return n}get latestServerFrame(){return this.latestFrame?.serverFrame??0}};var It=class{constructor(){this.strings=new Map;this.models=[];this.sounds=[];this.images=[]}set(t,n){if(this.strings.set(t,n),t>=ae.Models&&t<ae.Models+Gt){let r=t-ae.Models;this.models[r]=n}else if(t>=ae.Sounds&&t<ae.Sounds+Ht){let r=t-ae.Sounds;this.sounds[r]=n}else if(t>=ae.Images&&t<ae.Images+Vt){let r=t-ae.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 Er=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 kr=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} (${Bu(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} (${Bu(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 Bu(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 Tr=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 fn=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 Mr=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 br=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 Gu(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((d,m)=>{let h=u+40+m*o,f=d.label;if(d.type==="input"&&d.getValue){if(f+=`: ${d.getValue()}`,m===t.selectedIndex){let g=Date.now();Math.floor(g/500)%2===0&&(f+="_")}}else d.type==="toggle"&&d.getValue&&(f+=`: ${d.getValue()}`);if(m===t.selectedIndex){let v=f.replace(/\^[0-9]/g,"").length*8,S=(n-v)/2;e.drawString(S-16,h,"\r")}e.drawCenterString(h,f)})}var gn=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&Bt.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 Rr=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 Lr=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 Nr=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 zr=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 nE=[{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"}],ut=class{constructor(t=nE){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 Hu(){return new ut}function Va(e){return e}function _n(e){return e.trim().toLowerCase()}var rE=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}}},Or=(v=>(v.Forward="+forward",v.Back="+back",v.MoveLeft="+moveleft",v.MoveRight="+moveright",v.MoveUp="+moveup",v.MoveDown="+movedown",v.Jump="+jump",v.Crouch="+crouch",v.Attack="+attack",v.Use="+use",v.Holster="+holster",v.TurnLeft="+left",v.TurnRight="+right",v.LookUp="+lookup",v.LookDown="+lookdown",v.SpeedModifier="+speed",v.Zoom="+zoom",v))(Or||{}),iE={"+attack":ze.Attack,"+use":ze.Use,"+holster":ze.Holster,"+jump":ze.Jump,"+crouch":ze.Crouch},aE=new Map(Object.values(Or).map(e=>[_n(e),e]));function sE(e){return aE.get(_n(e))}function pn(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var Ct=class{constructor(t={},n=new ut){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??Ls,this.sideSpeed=t.sideSpeed??Ns,this.upSpeed=t.upSpeed??zs,this.yawSpeed=t.yawSpeed??Os,this.pitchSpeed=t.pitchSpeed??Is,this.sensitivity=t.sensitivity??Cs,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=pn()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!0,r,n)}handleKeyUp(t,n=pn()){let r=t,i=this.bindings.getBinding(r);i&&this.applyCommand(i,!1,r,n)}handleMouseButtonDown(t,n=pn()){let r=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(r),!0,r,n)}handleMouseButtonUp(t,n=pn()){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=pn(),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),d={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 y=this.gamepadLook.y*(this.invertGamepadY?-1:1);d={x:d.x+y*a*this.gamepadLookScale,y:d.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let y=this.touchLook.y*(this.invertMouseY?-1:1);d={x:d.x+y*a,y:d.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let y=this.sampleMouseDelta(),T=Ds(y,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});d={x:d.x+T.x,y:d.y+T.y,z:0}}let m=Ps(this.viewAngles,d);this.viewAngles=m;let h=this.sample("+forward",t,n),f=this.sample("+back",t,n),g=this.sample("+moveleft",t,n),_=this.sample("+moveright",t,n),l=this.sample("+moveup",t,n),v=this.sample("+movedown",t,n),S=this.sample("+speed",t,n),x=this.sample("+jump",t,n),A=this.sample("+crouch",t,n),E=this.runByDefault?S.active?.5:1:S.active?1:.5,w=this.forwardSpeed*(h.fraction-f.fraction)*E,O=this.sideSpeed*(_.fraction-g.fraction)*E,I=this.upSpeed*(l.fraction-v.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(w+=this.forwardSpeed*this.gamepadMove.y*E,O+=this.sideSpeed*this.gamepadMove.x*E),(this.touchMove.x!==0||this.touchMove.y!==0)&&(w+=this.forwardSpeed*this.touchMove.y*E,O+=this.sideSpeed*this.touchMove.x*E),this.jumpAddsUpMove&&x.fraction>0&&(I+=this.upSpeed*x.fraction),this.crouchAddsDownMove&&A.fraction>0&&(I-=this.upSpeed*A.fraction),w=this.clampMove(w,this.forwardSpeed),O=this.clampMove(O,this.sideSpeed),I=this.clampMove(I,this.upSpeed);let H=this.collectButtonBits(t,n),p=Math.min(Math.max(Math.round(t),1),rE);return(this.anyPressed||H!==ze.None)&&(H|=ze.Any),this.anyPressed=!1,{msec:p,buttons:H,angles:{...this.viewAngles},forwardmove:w,sidemove:O,upmove:I,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 d=u.pressed||u.value>this.gamepadDeadZone,m=this.gamepadButtonCode(a,c);d&&r.add(m);let h=this.gamepadButtons.get(m)??!1;d!==h&&(this.applyCommand(this.bindings.getBinding(m),d,m,t),this.gamepadButtons.set(m,d))}}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=sE(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(iE)){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 Ir=class{constructor(t,n=new Ct(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}};var Ka={x:0,y:0,z:0};function Cr(e,t,n){return e+(t-e)*n}function Xa(e,t,n){return Cr(e,t,n)}function oE(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,d=r.getModelName(c.modelIndex);if(!d)continue;let m=s.getMd2Model(d)||s.getMd3Model(d);if(!m)continue;let h={x:Cr(u.origin.x,c.origin.x,n),y:Cr(u.origin.y,c.origin.y,n),z:Cr(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)},g=c.frame,_=u.frame,l=j.create();j.translate(l,l,[h.x,h.y,h.z]),j.rotateZ(l,l,f.z*Math.PI/180),j.rotateY(l,l,f.y*Math.PI/180),j.rotateX(l,l,f.x*Math.PI/180),m.header.magic===844121161?a.push({type:"md2",model:m,blend:{frame0:_,frame1:g,lerp:n},transform:l,skin:c.skinNum>0?r.getImageName(c.skinNum):void 0}):m.header.magic===860898377&&a.push({type:"md3",model:m,blend:{frame0:_,frame1:g,lerp:n},transform:l})}return a}function cE(e){let t=new Fn(e.engine.trace),n=new Dn,r=new Sr,i=new xr,a=new vs,s=new Ar(e),o=new Tr,c=new Lr,u=new Nr,d=new zr,m=new gn(new Rr),h,f;s.onCenterPrint=p=>r.addCenterPrint(p,s.latestFrame?.serverFrame??0),s.onPrint=(p,y)=>r.addNotify(y,s.latestFrame?.serverFrame??0);let g=new It;a.setHandler(s);let _,l,v,S,x=!1,E=ro(e,{get tickRate(){return 10},get frameTimeMs(){return _?.timeMs??0},get serverFrame(){return s.latestServerFrame},get serverProtocol(){return 34},get configStrings(){return g},getClientName:p=>`Player ${p}`,getKeyBinding:p=>`[${p}]`,get inAutoDemo(){return x}}),w=no(E),O=90,I=!1;if(e.host){f=new fn(o,e.host),h=new br(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:T=>e.host.cvars.setValue(y.name,T)});m.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=ao();console.log(`Crosshair changed to index ${p}`)},"Cycle through available crosshairs"),e.host.commands.register("+zoom",()=>{I=!0},"Zoom in view"),e.host.commands.register("-zoom",()=>{I=!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:Bt.Archive,onChange:y=>{let T=y.number;isNaN(T)||(O=Math.max(1,Math.min(179,T)))},description:"Field of view"});let p=e.host.cvars.get("fov");if(p){let y=p.number;isNaN(y)||(O=Math.max(1,Math.min(179,y)))}}return{loadingScreen:c,errorDialog:u,init(p){this.Init(p)},Init(p){_=p,p?.state&&t.setAuthoritative(p),w.Init(),e.engine.assets&&e.engine.renderer&&(c.start(100,"Loading assets..."),Fu(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 T=p.toLowerCase();return T==="arrowup"||T==="w"?o.handleInput("up"):T==="arrowdown"||T==="s"?o.handleInput("down"):T==="arrowleft"||T==="a"?o.handleInput("left"):T==="arrowright"||T==="d"?o.handleInput("right"):T==="enter"||T===" "?o.handleInput("select"):T==="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}));m.saveCvars(p)}}else h&&o.pushMenu(h.createPauseMenu())},createMainMenu(p,y,T,F,C){let ee=new kr(o,y,T,F,C),ue=f;if(!ue){if(!e.host)throw new Error("Cannot create Main Menu: EngineHost is missing");ue=new fn(o,e.host)}let fe=e.engine.assets,We={findByExtension:dt=>fe?fe.listFiles(dt):[]},vn=new Mr(o,We,dt=>{console.log(`Starting map: ${dt}`),e.host?.commands.execute(`map ${dt}`)}),Vu=new Er(o,ee,{...p,optionsFactory:ue,mapsFactory:vn,onSetDifficulty:dt=>{e.host?.cvars&&e.host.cvars.setValue("skill",dt.toString())}});return{menuSystem:o,factory:Vu}},render(p){let y=a.getState(),T=[];y===Dt.Playing?l=s.getPredictionState():(p.latest?.state&&(t.setAuthoritative(p.latest),_=p.latest),p.previous?.state&&p.latest?.state?(l=_t(p.previous.state,p.latest.state,p.alpha),p.latest.state.packetEntities&&p.previous.state.packetEntities&&(T=oE(p.latest.state.packetEntities,p.previous.state.packetEntities,p.alpha,g,e))):l=p.latest?.state??p.previous?.state??t.getPredictedState());let F=p.latest&&p.previous?Math.max(0,p.latest.timeMs-p.previous.timeMs):0;v=n.sample(l,F);let C={};if(l){let{origin:ee,viewAngles:ue}=l;S=new _s,S.position=q.fromValues(ee.x,ee.y,ee.z);let fe=v?.offset??{x:0,y:0,z:0};q.add(S.position,S.position,[fe.x,fe.y,fe.z]);let We=v?.angles??{x:0,y:0,z:0};S.angles=q.fromValues(ue.x+We.x,ue.y+We.y,ue.z+We.z),S.fov=I?40:O,S.aspect=4/3,e.engine.renderer&&(S.aspect=e.engine.renderer.width/e.engine.renderer.height)}if(e.engine.renderer&&S){let ee;if(e.engine.assets){let ue=g.getModelName(1);if(ue){let fe=e.engine.assets.getMap(ue)}}e.engine.renderer.renderFrame({camera:S,world:ee,dlights:[]},T)}if(e.engine.renderer&&l&&l.client){let ee=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},ue=p.latest?.timeMs??0;this.DrawHUD(ee,ue)}return C},DrawHUD(p,y){if(e.engine.renderer){if(l&&l.client){let T={origin:l.origin,velocity:l.velocity,viewAngles:l.viewAngles,onGround:Fe(l.pmFlags,Ee.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,stats:[],kick_angles:Ka,gunoffset:Ka,gunangles:Ka,gunindex:0},F=a.getState(),C=F===Dt.Playing||F===Dt.Paused?(s.latestFrame?.serverFrame||0)*100:y;Uu(e.engine.renderer,T,l.client,l.health??0,l.armor??0,l.ammo??0,p,r,i,C)}o.isActive()&&Gu(e.engine.renderer,o.getState(),e.engine.renderer.width,e.engine.renderer.height),l&&l.client&&d.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(w.Shutdown(),_=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}));m.saveCvars(p)}},get prediction(){return t},get lastRendered(){return l},get view(){return n},get lastView(){return v},get camera(){return S},demoPlayback:a,ParseCenterPrint(p){let y=_?.timeMs??0;r.addCenterPrint(p,y)},ParseNotify(p){let y=_?.timeMs??0;r.addNotify(p,y)},showSubtitle(p,y){let T=_?.timeMs??0;i.addSubtitle(p,T)},ParseConfigString(p,y){if(g.set(p,y),e.engine.assets){let T=e.engine.assets;if(p>=ae.Models&&p<ae.Models+Gt){let F=y.split(".").pop()?.toLowerCase();F==="md2"?T.loadMd2Model(y).catch(C=>console.warn(`Failed to precache MD2 ${y}`,C)):F==="sp2"?T.loadSprite(y).catch(C=>console.warn(`Failed to precache Sprite ${y}`,C)):F==="md3"&&T.loadMd3Model(y).catch(C=>console.warn(`Failed to precache MD3 ${y}`,C))}else p>=ae.Sounds&&p<ae.Sounds+Ht?T.loadSound(y).catch(F=>console.warn(`Failed to precache sound ${y}`,F)):p>=ae.Images&&p<ae.Images+Vt&&T.loadTexture(y).then(F=>{e.engine.renderer&&e.engine.renderer.registerTexture(y,F)}).catch(F=>console.warn(`Failed to precache image ${y}`,F))}},demoHandler:s,configStrings:g}}return Yu(uE);})();
|
|
150
150
|
//# sourceMappingURL=index.global.js.map
|