@vimp-games/tanks 0.6.5 → 0.7.0
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/dist/assets/{vimp_tanks_core_bg-BwZfbGdm.wasm → vimp_tanks_core_bg-Km6ohK8q.wasm} +0 -0
- package/dist/client-DG0BHnHZ.js +1 -0
- package/dist/core-node/vimp_tanks_core.d.ts +10 -0
- package/dist/core-node/vimp_tanks_core.js +23 -0
- package/dist/core-node/vimp_tanks_core_bg.wasm +0 -0
- package/dist/core-node/vimp_tanks_core_bg.wasm.d.ts +2 -0
- package/dist/host-CZOBVbIN.js +1 -0
- package/dist/manifest.json +6 -6
- package/dist/maps/garden.json +1 -1
- package/package.json +2 -2
- package/dist/client-Cqzi-yIP.js +0 -1
- package/dist/host-BFQfiYDe.js +0 -1
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as C,Assets as H,Sprite as I,Spritesheet as ct,Rectangle as M,Graphics as T,Text as lt,Ticker as P,Particle as dt,ParticleContainer as at,BlurFilter as q}from"pixi.js";const _t=3;class Z{__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,tt.unregister(this),t}free(){const t=this.__destroy_into_raw();d.__wbg_clientcore_free(t,0)}apply_aim(t,e,i,s){d.clientcore_apply_aim(this.__wbg_ptr,t,e,i,s)}apply_input(t,e,i){const s=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),o=D,r=F(e,d.__wbindgen_malloc,d.__wbindgen_realloc),a=D;d.clientcore_apply_input(this.__wbg_ptr,s,o,r,a,i)}cycle_weapon(t){d.clientcore_cycle_weapon(this.__wbg_ptr,t)}debug_json(){let t,e;try{const i=d.clientcore_debug_json(this.__wbg_ptr);return t=i[0],e=i[1],L(i[0],i[1])}finally{d.__wbindgen_free(t,e,1)}}decode_frame(t){let e,i;try{const s=et(t,d.__wbindgen_malloc),o=D,r=d.clientcore_decode_frame(this.__wbg_ptr,s,o);return e=r[0],i=r[1],L(r[0],r[1])}finally{d.__wbindgen_free(e,i,1)}}hot_ptr(){return d.clientcore_hot_ptr(this.__wbg_ptr)>>>0}hot_values(){const t=d.clientcore_hot_values(this.__wbg_ptr);var e=pt(t[0],t[1]).slice();return d.__wbindgen_free(t[0],t[1]*4,4),e}my_game_id(){return d.clientcore_my_game_id(this.__wbg_ptr)}constructor(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D,s=d.clientcore_new(e,i);if(s[2])throw it(s[1]);return this.__wbg_ptr=s[0],tt.register(this,this.__wbg_ptr,this),this}offset(){return d.clientcore_offset(this.__wbg_ptr)}push_frame(t,e){const i=et(t,d.__wbindgen_malloc),s=D;return d.clientcore_push_frame(this.__wbg_ptr,i,s,e)!==0}reset(){d.clientcore_reset(this.__wbg_ptr)}resync(){d.clientcore_resync(this.__wbg_ptr)}sample(t){return d.clientcore_sample(this.__wbg_ptr,t)>>>0}set_active(t){d.clientcore_set_active(this.__wbg_ptr,t)}set_map(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D,s=d.clientcore_set_map(this.__wbg_ptr,e,i);if(s[1])throw it(s[0])}set_model(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D;d.clientcore_set_model(this.__wbg_ptr,e,i)}sync_panel(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D;d.clientcore_sync_panel(this.__wbg_ptr,e,i)}take_divergence(){let t,e;try{const i=d.clientcore_take_divergence(this.__wbg_ptr);return t=i[0],e=i[1],L(i[0],i[1])}finally{d.__wbindgen_free(t,e,1)}}take_frames(){let t,e;try{const i=d.clientcore_take_frames(this.__wbg_ptr);return t=i[0],e=i[1],L(i[0],i[1])}finally{d.__wbindgen_free(t,e,1)}}try_fire(t){const e=d.clientcore_try_fire(this.__wbg_ptr,t);let i;return e[0]!==0&&(i=L(e[0],e[1]).slice(),d.__wbindgen_free(e[0],e[1]*1,1)),i}}Symbol.dispose&&(Z.prototype[Symbol.dispose]=Z.prototype.free);function ut(){return{__proto__:null,"./vimp_tanks_core_bg.js":{__proto__:null,__wbg_Error_92b29b0548f8b746:function(t,e){return Error(L(t,e))},__wbg___wbindgen_throw_344f42d3211c4765:function(t,e){throw new Error(L(t,e))},__wbindgen_init_externref_table:function(){const t=d.__wbindgen_externrefs,e=t.grow(4);t.set(0,void 0),t.set(e+0,void 0),t.set(e+1,null),t.set(e+2,!0),t.set(e+3,!1)}}}}const tt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(n=>d.__wbg_clientcore_free(n,1));typeof FinalizationRegistry>"u"||new FinalizationRegistry(n=>d.__wbg_gamecore_free(n,1));function pt(n,t){return n=n>>>0,ft().subarray(n/4,n/4+t)}let O=null;function ft(){return(O===null||O.byteLength===0)&&(O=new Float32Array(d.memory.buffer)),O}function L(n,t){return gt(n>>>0,t)}let N=null;function U(){return(N===null||N.byteLength===0)&&(N=new Uint8Array(d.memory.buffer)),N}function et(n,t){const e=t(n.length*1,1)>>>0;return U().set(n,e/1),D=n.length,e}function F(n,t,e){if(e===void 0){const a=W.encode(n),c=t(a.length,1)>>>0;return U().subarray(c,c+a.length).set(a),D=a.length,c}let i=n.length,s=t(i,1)>>>0;const o=U();let r=0;for(;r<i;r++){const a=n.charCodeAt(r);if(a>127)break;o[s+r]=a}if(r!==i){r!==0&&(n=n.slice(r)),s=e(s,i,i=r+n.length*3,1)>>>0;const a=U().subarray(s+r,s+i),c=W.encodeInto(n,a);r+=c.written,s=e(s,i,r,1)>>>0}return D=r,s}function it(n){const t=d.__wbindgen_externrefs.get(n);return d.__externref_table_dealloc(n),t}let $=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});$.decode();const mt=2146435072;let j=0;function gt(n,t){return j+=t,j>=mt&&($=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),$.decode(),j=t),$.decode(U().subarray(n,n+t))}const W=new TextEncoder;"encodeInto"in W||(W.encodeInto=function(n,t){const e=W.encode(n);return t.set(e),{read:n.length,written:e.length}});let D=0,d;function yt(n,t){return d=n.exports,O=null,N=null,d.__wbindgen_start(),d}async function xt(n,t){if(typeof Response=="function"&&n instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(n,t)}catch(s){if(n.ok&&e(n.type)&&n.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",s);else throw s}const i=await n.arrayBuffer();return await WebAssembly.instantiate(i,t)}else{const i=await WebAssembly.instantiate(n,t);return i instanceof WebAssembly.Instance?{instance:i,module:n}:i}function e(i){switch(i){case"basic":case"cors":case"default":return!0}return!1}}async function wt(n){if(d!==void 0)return d;n!==void 0&&(Object.getPrototypeOf(n)===Object.prototype?{module_or_path:n}=n:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),n===void 0&&(n=new URL("/assets/vimp_tanks_core_bg-Km6ohK8q.wasm",import.meta.url));const t=ut();(typeof n=="string"||typeof Request=="function"&&n instanceof Request||typeof URL=="function"&&n instanceof URL)&&(n=fetch(n));const{instance:e,module:i}=await xt(await n,t);return yt(e)}const St='@charset "UTF-8";#panel table td#panel-bullet:before{content:"bullet: "}#panel table td#panel-bomb:before{content:"bomb: "}#panel table td#panel-time:before{content:"time: "}#vimp{background:#222;position:absolute;inset:0;margin:auto;z-index:1}#radar{position:absolute;right:1%;top:35px;z-index:2;border-radius:50%;background-color:#00be5acc;box-shadow:inset 0 0 47px #ee6,0 0 0 3px #054}#team1{color:#f56}#team2{color:#7ed}#spectators{color:#fe5}#team1 tHead tr,#team2 tHead tr,#spectators tHead tr{border-bottom:1px solid #888;text-transform:capitalize;font-weight:700}#team1 tBody tr,#team2 tBody tr{border-bottom:1px solid #444}#team1 tHead td:first-child:before{content:"team1 ("}#team1 tHead td:first-child:after{content:")"}#team2 tHead td:first-child:before{content:"team2 ("}#team2 tHead td:first-child:after{content:")"}#spectators tHead td:first-child:before{content:"spectators"}#spectators tBody td:nth-child(1){padding:0 1%;line-height:1.4em}#spectators tBody td:nth-child(2),#spectators tBody td:nth-child(3),#spectators tBody td:nth-child(4),#spectators tBody td:nth-child(5){display:none}',k=(n,t,e)=>n+(t-n)*e,Q=(n,t,e)=>Math.min(e,Math.max(t,n)),bt=n=>n*(Math.PI/180),Tt=n=>{for(;n>Math.PI;)n-=Math.PI*2;for(;n<-Math.PI;)n+=Math.PI*2;return n},v=(n,t)=>Math.random()*(t-n)+n;class Mt extends C{constructor(t,e,i){if(super(),this._baseTexturePromise=null,this._assetUrl=null,this._renderer=i.renderer,this._imageBase=null,this.scale=t.scale,this.sprite=null,this.mapSprite=null,typeof i.assetsBase!="string"){console.error("Map: сервис assetsBase недоступен — карта останется пустой. Объявите assetsBase в componentDependencies и запустите игру на vimp-engine >= 0.9.0");return}this._imageBase=`${i.assetsBase}img/`,t.type==="static"?(this._assetUrl=`${this._imageBase}${t.spriteSheet.img}`,this._baseTexturePromise=H.load(this._assetUrl),this._map=t.map,this._tiles=t.tiles,this._spriteSheetData=t.spriteSheet,this._step=t.step,this.zIndex=t.layer||1,this.createStatic()):t.type==="dynamic"&&(this._assetUrl=`${this._imageBase}${t.img}`,this._baseTexturePromise=H.load(this._assetUrl),this.zIndex=t.layer||2,this._rotation=bt(t.angle),this._width=t.width,this._height=t.height,this._x=t.position[0],this._y=t.position[1],this.createDynamic())}async createDynamic(){try{const t=await this._baseTexturePromise;this.sprite=new I(t),this.sprite.x=this._x,this.sprite.y=this._y,this.sprite.width=this._width,this.sprite.height=this._height,this.sprite.rotation=this._rotation,this.addChild(this.sprite)}catch(t){console.error(`Failed to create dynamic map with asset ${this._assetUrl}:`,t)}}async createStatic(){try{const t={};this._spriteSheetData.frames.forEach((h,f)=>{const[_,m,u,g]=h;t[`frame${f}`]={frame:{x:_,y:m,w:u,h:g}}});const e={frames:t,meta:{scale:"1"}},i=await this._baseTexturePromise,s=new ct(i,e);await s.parse();const o=this._map[0].length*this._step,r=this._map.length*this._step,a=new C;for(let h=0,f=this._map.length;h<f;h+=1)for(let _=0,m=this._map[h].length;_<m;_+=1){const u=this._map[h][_];if(this._tiles.includes(u)){const g=`frame${u}`,p=s.textures[g];if(p){const y=new I(p);y.x=_*this._step,y.y=h*this._step,a.addChild(y)}else console.warn(`Texture not found. Tile: ${u}, sprite: ${g}`)}}const c=this._renderer.generateTexture({target:a,frame:new M(0,0,o,r)});a.destroy({children:!0}),this.mapSprite=new I(c),this.addChild(this.mapSprite)}catch(t){console.error(`Failed to create static map with asset ${this._assetUrl}:`,t)}}update(t){this.sprite&&(this.sprite.x=t[0]/this.scale.x,this.sprite.y=t[1]/this.scale.y,this.sprite.rotation=t[2])}destroy(t){this.mapSprite&&(this.mapSprite.destroy({children:!0,texture:!0,textureSource:!0}),this.mapSprite=null),super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this._assetUrl&&H.cache.has(this._assetUrl)&&H.unload(this._assetUrl).catch(e=>console.warn(`Failed to unload asset ${this._assetUrl} (was in cache):`,e)),this.sprite=null,this._baseTexturePromise=null,this._assetUrl=null,this._map=null,this._tiles=null,this._spriteSheetData=null,this._renderer=null}}class kt extends C{constructor(t){super(),this._map=t.map,this._physicsStatic=t.physicsStatic,this._step=t.step,this.zIndex=2,this.scale=t.scale,this.radarGraphics=new T,this.addChild(this.radarGraphics),this.createRadarMap()}createRadarMap(){const t=this.radarGraphics;if(t.clear(),Array.isArray(this._map))for(let e=0;e<this._map.length;e+=1){const i=this._map[e];if(Array.isArray(i))for(let s=0;s<i.length;s+=1){const o=i[s];this._physicsStatic.includes(o)&&t.rect(s*this._step,e*this._step,this._step/2,this._step/2)}}t.fill(16777215)}update(){}destroy(t){super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this.radarGraphics=null,this._map=null,this._physicsStatic=null}}class vt extends C{constructor(t,e){super(),this.zIndex=2,this._textures=e.tankRadarTexture,this.body=new I,this.body.anchor.set(.5),this.addChild(this.body),this.x=t[0]||0,this.y=t[1]||0,this._condition=t[7],this._teamId=t[9],this.scale.set(5,5),this.create()}create(){this._condition===0?this.body.texture=this._textures.destroyed:this._teamId===1?this.body.texture=this._textures.liveTeamId1:this._teamId===2&&(this.body.texture=this._textures.liveTeamId2)}update(t){this.x=t[0],this.y=t[1];const e=t[7],i=t[9];let s=!1;e!==void 0&&e!==this._condition&&(this._condition=e,s=!0),i!==void 0&&i!==this._teamId&&(this._teamId=i,s=!0),s&&this.create()}destroy(t){super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this.body=null,this._textures=null}}const It=1,st=1.1,Ct=1.18,Dt=.9,At=1;function Pt(n){const t=Q(n,0,1),e=Math.max(0,n-1),i=k(It,st,t)+(Ct-st)*e,s=k(Dt,At,t);return{rate:i,volumeFactor:s}}class Et extends C{constructor(t,e,i){super(),this.zIndex=3,this.body=new I,this.gun=new I,this.wreck=new I,this.body.anchor.set(.5),this.wreck.anchor.set(.5),this.addChild(this.body,this.gun,this.wreck),this._textures=e.tankTexture,this.x=t[0]||0,this.y=t[1]||0,this.rotation=t[2]||0,this.gun.rotation=t[3]||0,this._engineLoad=t[6]||0,this._condition=t[7],this._size=t[8],this._teamId=t[9];const s=this._teamId===1?this._textures.liveTeamId1:this._textures.liveTeamId2,o=s?s.gunAnchor:null;o?this.gun.anchor.set(o.x,o.y):this.gun.anchor.set(.5);const a=this._size/10;this.body.scale.set(a),this.gun.scale.set(a),this.wreck.scale.set(a),this._soundManager=i.soundManager,this._soundId=null;const c=this._soundManager.getSoundConfig("tankEngine");this._baseEngineVolume=c?.volume||0,this._hasEngineSound=!!c,this.create()}_initSounds(){this._soundId||this._condition===0||!this._hasEngineSound||(this._soundId=this._soundManager.registerSound("tankEngine",this._getSoundData()))}_getSoundData(){const{rate:t,volumeFactor:e}=Pt(this._engineLoad);return{position:{x:this.x,y:this.y},rate:t,volume:this._baseEngineVolume*e}}create(){if(this._condition===0)this.body.visible=!1,this.gun.visible=!1,this.wreck.texture=this._textures.destroyed,this.wreck.visible=!0,this.gun.rotation=0,this.destroySounds();else{this.wreck.visible=!1;let t;this._teamId===1?t=this._textures.liveTeamId1:this._teamId===2&&(t=this._textures.liveTeamId2),this.body.texture=t.body,this.gun.texture=t.gun,this.body.visible=!0,this.gun.visible=!0,this._initSounds()}}update(t){this.x=t[0],this.y=t[1],this.rotation=t[2],this.gun.rotation=t[3],this._engineLoad=t[6],this._condition>0&&(this._soundId===null?this._initSounds():this._soundManager.updateSoundData(this._soundId,this._getSoundData()));const e=t[7],i=t[9];let s=!1;e!==void 0&&e!==this._condition&&(this._condition=e,s=!0),i!==void 0&&i!==this._teamId&&(this._teamId=i,s=!0),s&&this.create()}destroySounds(){this._soundId&&(this._soundManager.unregisterSound(this._soundId),this._soundId=null)}destroy(t){this.destroySounds(),super.destroy({children:!0,texture:!1,textureSource:!1,...t})}}class Rt extends C{constructor(t,e,i){super(),this.zIndex=2,this.body=new I(e.bombTexture),this.body.anchor.set(.5),this.x=t[0],this.y=t[1],this.rotation=t[2],this._size=t[3],this._totalDurationMs=t[4],this._soundManager=i.soundManager,this._soundId=null;const s=e.bombTexture.width,o=this._size/s;this.body.scale.set(o);const r=64,a=this._size/1.2/r;this.text=new lt({style:{fontFamily:"Arial",fontSize:r,fill:16777215,align:"center"}}),this.text.anchor.set(.5),this.text.scale.set(a),this.text.x=0,this.text.y=0,this._accumulatedTimeMs=0,this._secondsLeft="",this.addChild(this.body,this.text),this._updateTimerDisplay(this._totalDurationMs),this._tickListener=c=>this._updateTimer(c.deltaMS),P.shared.add(this._tickListener),this._soundId=this._soundManager.registerSound("bombHasBeenPlanted",{position:{x:this.x,y:this.y}})}_updateTimer(t){this._accumulatedTimeMs+=t;const e=Math.max(0,this._totalDurationMs-this._accumulatedTimeMs);this._updateTimerDisplay(e),e<=0&&(this._stopTimer(),this._updateTimerDisplay(0))}_updateTimerDisplay(t){const e=Math.round(t/1e3);this._secondsLeft!==e&&(this._secondsLeft=e,this.text.text=`${this._secondsLeft}`)}update(t){this.x=t[0],this.y=t[1],this.rotation=t[2],this._soundId&&(this._soundManager.updateSoundData(this._soundId,{position:{x:this.x,y:this.y}})||(this._soundId=null))}_stopTimer(){this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null)}destroy(t){this._stopTimer(),this._soundId&&(this._soundManager.releaseSound(this._soundId),this._soundId=null),super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this.body=null,this.text=null}}class V extends C{constructor(t){super(),this._tickListener=null,this._isStarted=!1,this.isComplete=!1,this.onComplete=t}run(){this.isComplete||this._isStarted||(this._isStarted=!0,this._tickListener=t=>this._update(t.deltaMS),P.shared.add(this._tickListener),this._onEffectStart(),this.isComplete||this._update(0))}_onEffectStart(){}_update(){}_completeEffect(){this.isComplete||(this.isComplete=!0,this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null),typeof this.onComplete=="function"&&this.onComplete())}destroy(t){this.isComplete=!0,this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null),this.parent&&this.parent.removeChild(this),super.destroy({texture:!1,textureSource:!1,...t,children:!0})}}const nt=50;class Lt extends V{constructor(t,e,i,s,o){super(s);const r=o.explosionTexture;this.x=t,this.y=e,this._radius=i,this._durationMs=3e3,this._elapsedMs=0;const a=this._radius/nt;this._mainBody=new I(r),this._mainBody.anchor.set(.5),this._mainBody.tint=11393254,this._mainBody.scale.set(a),this._core=new I(r),this._core.anchor.set(.5),this._core.tint=13882323,this._core.scale.set(a),this.addChild(this._mainBody,this._core)}_update(t){if(!this.isComplete)if(this._elapsedMs+=t,this._elapsedMs<=this._durationMs){const e=this._elapsedMs/this._durationMs;this._draw(e)}else this._completeEffect()}_draw(t){const e=o=>o*o,i=this._radius/nt;this._mainBody.alpha=.6*(1-e(t));const s=Math.min(1,t*1.5);this._core.alpha=.7-s,this._core.scale.set(i*(1-s))}destroy(t){super.destroy(t)}}const K=[],Y={get(n){if(K.length>0){const t=K.pop();return t.texture=n,t.alpha=1,t.scaleX=1,t.scaleY=1,t.rotation=0,t.tint=16777215,t.anchorX=.5,t.anchorY=.5,t}return new dt({texture:n,anchorX:.5,anchorY:.5})},release(n){n&&K.push(n)}},rt=400,ot=800;class Ft extends V{constructor(t){super(),this.explosionTexture=t.explosionTexture,this._particleContainer=new at({texture:this.explosionTexture,boundsArea:new M(-rt/2,-ot/2,rt,ot),dynamicProperties:{position:!0,vertex:!0,rotation:!0,color:!0}}),this.addChild(this._particleContainer),this._particles=[],this._isSpawning=!0,this._particleSpawnRateMs=50,this._particleMaxLifeMs=2e3,this._minStartScale=.02,this._maxStartScale=.05,this._startAlpha=.1,this._initialOffsetX=15,this._initialOffsetY=15,this._lastSpawnTime=0;for(let e=0;e<30;e+=1)this._createParticle()}stopSpawning(){this._isSpawning=!1}_createParticle(){const t=Y.get(this.explosionTexture),e=.2+Math.random()*.4,i=Math.floor(e*255);t.tint=i<<16|i<<8|i;const s=this._minStartScale+Math.random()*(this._maxStartScale-this._minStartScale),o=.6+Math.random()*.8,r=.6+Math.random()*.8;t.scaleX=s*o,t.scaleY=s*r,t.alpha=this._startAlpha+Math.random()*.1,t.rotation=Math.random()*Math.PI*2,t.x=(Math.random()-.5)*this._initialOffsetX,t.y=(Math.random()-.5)*this._initialOffsetY;const a={view:t,life:0,maxLife:this._particleMaxLifeMs*(.7+Math.random()*.6),aspectRatioX:o,aspectRatioY:r,vx:(Math.random()-.5)*.2,vy:-.3-Math.random()*.4,swaySpeed:.002+Math.random()*.003,swayAmp:.025+Math.random()*.05,swayOffset:Math.random()*100,rotationSpeed:(Math.random()-.5)*.05,targetScale:.08+Math.random()*.08,startScale:s};this._particleContainer.addParticle(t),this._particles.push(a)}_update(t){if(!this.isComplete){if(t=Math.min(t,100),this._isSpawning)for(this._lastSpawnTime+=t;this._lastSpawnTime>this._particleSpawnRateMs;)this._createParticle(),this._lastSpawnTime-=this._particleSpawnRateMs;for(let e=this._particles.length-1;e>=0;e-=1){const i=this._particles[e],s=i.view;if(i.life+=t,i.life>=i.maxLife)this._particleContainer.removeParticle(s),Y.release(s),this._particles.splice(e,1);else{const o=i.life/i.maxLife;i.vy*=.98,i.vx*=.95;const r=Math.sin(i.life*i.swaySpeed+i.swayOffset)*i.swayAmp;s.x+=(i.vx+r)*(t/16),s.y+=i.vy*(t/16),s.rotation+=i.rotationSpeed*(t/16);const a=1-Math.pow(1-o,3),c=i.startScale+(i.targetScale-i.startScale)*a;if(s.scaleX=c*i.aspectRatioX,s.scaleY=c*i.aspectRatioY,o<.1)s.alpha=o/.1*this._startAlpha;else if(o>.4){const h=(o-.4)/.6;s.alpha=this._startAlpha*(1-h)}else s.alpha=this._startAlpha}}!this._isSpawning&&this._particles.length===0&&this._isStarted&&(this._completeEffect(),this.destroyed||this.destroy())}}destroy(t){for(let e=0;e<this._particles.length;e+=1)Y.release(this._particles[e].view);this._particles=[],super.destroy(t)}}const Xt=50,Yt=15;class zt extends V{constructor(t,e,i,s){super(i),this._assets=s,this.x=t,this.y=e,this._funnelDurationMs=2e4,this._funnelFadeDurationMs=4e3,this._elapsedMs=0,this._isFading=!1,this._smokeDurationMs=4e3,this._smokeSpawningStopped=!1,this._funnel=this._createFunnelSprite(),this._smoke=new Ft(this._assets),this.addChild(this._funnel,this._smoke)}_createFunnelSprite(){const t=this._assets.funnelTexture,e=new I(t);e.anchor.set(.5),e.tint=3815994;const i=Yt/(Xt*2);return e.scale.set(i),e}_onEffectStart(){super._onEffectStart(),this._smoke&&this._smoke.run()}_update(t){if(this.isComplete)return;this._elapsedMs+=t,!this._smokeSpawningStopped&&this._elapsedMs>=this._smokeDurationMs&&(this._smoke.stopSpawning(),this._smokeSpawningStopped=!0);const e=this._funnelDurationMs-this._elapsedMs;if(e<=this._funnelFadeDurationMs){this._isFading||(this._isFading=!0);const i=e/this._funnelFadeDurationMs;this._funnel.alpha=Math.max(0,i)}e<=0&&this._completeEffect()}destroy(t){this._smoke&&(this._smoke.destroy(),this._smoke=null),this._funnel=null,super.destroy(t)}}class Bt extends C{constructor(t,e,i){super(),this.originX=t[0],this.originY=t[1],this.radius=t[2],this._assets=e,this._soundManager=i.soundManager,this.x=this.originX,this.y=this.originY,this.explosion=null,this.funnel=null,this._isDestroyed=!1,this._soundId=this._soundManager.registerSound("explosion",{position:{x:this.originX,y:this.originY}})}run(){if(this._isDestroyed)return;const t=this.parent;this.funnel=new zt(this.originX,this.originY,this._onFunnelComplete.bind(this),this._assets),this.funnel.zIndex=2,t.addChild(this.funnel),this.explosion=new Lt(this.originX,this.originY,this.radius,this._onExplosionComplete.bind(this),this._assets),this.explosion.zIndex=4,t.addChild(this.explosion),this.funnel.run(),this.explosion.run()}_onExplosionComplete(){this._isDestroyed||this.explosion&&(this.explosion.destroy(),this.explosion=null)}_onFunnelComplete(){this._isDestroyed||this.destroy()}destroy(){this._isDestroyed||(this._isDestroyed=!0,this._soundId&&(this._soundManager.unregisterSound(this._soundId),this._soundId=null),this.explosion&&(this.explosion.destroy(),this.explosion=null),this.funnel&&(this.funnel.destroy(),this.funnel=null),this.parent&&this.parent.removeChild(this),super.destroy({children:!0}))}}const X=400,Ot=0,Nt=0,b={particleLifetime:{min:800,max:1800},particleStartSizeFactor:{1:2,2:1,0:.25},particleEndSizeFactor:{1:3,2:2,0:1},particleStartAlpha:.08,particleEndAlpha:0,particleColor:3355443,particleSpawnRate:{1:60,2:50,0:30},particleInitialVelocity:{away:{min:-10,max:100},side:{min:-30,max:30}},airResistance:.92,particleVelocityVariance:10,streamOffsetFactor:.1,burstParticleCount:3};class Ut extends C{constructor(t,e){super(),this.zIndex=4,this._smokeTexture=e.smokeTexture,this._emitterX=t[0],this._emitterY=t[1],this._emitterRotation=t[2],this._emitterVX=t[4],this._emitterVY=t[5],this._engineLoad=t[6],this._condition=t[7],this._size=t[8],this._width=this._size*4,this._height=this._size*3,this._particleScaleMultiplier=Math.max(.5,Math.sqrt(this._width*this._height*.001)),this._particles=[],this._particleContainer=new at({texture:this._smokeTexture,boundsArea:new M(this._emitterX-X,this._emitterY-X,X*2,X*2),dynamicProperties:{position:!0,vertex:!0,rotation:!0,color:!0}}),this.addChild(this._particleContainer),this._timeSinceLastSpawn=0,this._tickListener=i=>this._updateParticles(i.deltaMS),P.shared.add(this._tickListener)}update(t){const e=this._condition;this._emitterX=t[0],this._emitterY=t[1],this._emitterRotation=t[2],this._emitterVX=t[4],this._emitterVY=t[5],this._engineLoad=t[6],this._condition=t[7],this._particleContainer.boundsArea.x=this._emitterX-X,this._particleContainer.boundsArea.y=this._emitterY-X,this._condition!==e&&this._condition!==3&&this._triggerSmokeBurst()}_triggerSmokeBurst(){let t=0;if(this._condition===1?t=2:(this._condition===2||this._condition===0)&&(t=1),t>0){const e=b.burstParticleCount,i=Math.ceil(e/t);for(let s=0;s<i;s+=1)for(let o=0;o<t;o+=1)this.spawnParticle(o,t,!0)}}_updateParticles(t){if(t<=0)return;const e=t/1e3;this._timeSinceLastSpawn+=t;let i=0;this._condition===3?i=0:this._condition===1?i=2:(this._condition===2||this._condition===0)&&(i=1);const s=b.particleSpawnRate[this._condition]||0,o=s>0?1e3/s:1/0;if(i>0&&s>0)for(;this._timeSinceLastSpawn>=o;){for(let c=0;c<i;c+=1)this.spawnParticle(c,i);this._timeSinceLastSpawn-=o}else this._timeSinceLastSpawn=0;const a=1-Math.pow(b.airResistance,t/16);for(let c=this._particles.length-1;c>=0;c-=1){const h=this._particles[c];if(h.age+=t,h.age>=h.lifetime){this._particleContainer.removeParticle(h.view),Y.release(h.view),this._particles.splice(c,1);continue}h.vx=h.vx+(Ot-h.vx)*a,h.vy=h.vy+(Nt-h.vy)*a,h.x+=h.vx*e,h.y+=h.vy*e;const f=h.age/h.lifetime,_=1-(1-f)*(1-f),m=k(h.startSizeFactor,h.endSizeFactor,_),u=k(h.startAlpha,h.endAlpha,f),g=m*this._particleScaleMultiplier,p=h.view;p.x=h.x,p.y=h.y,p.scaleX=g,p.scaleY=g,p.alpha=u,p.rotation+=h.rotSpeed*e}}spawnParticle(t,e,i=!1){const s=v(b.particleLifetime.min,b.particleLifetime.max);let o=b.particleStartSizeFactor[this._condition]||.3,r=b.particleEndSizeFactor[this._condition]||1,a=b.particleStartAlpha,c=1;i&&(o*=2,r*=2.5,a=.8,c=2);const h=this._emitterRotation,f=h+Math.PI,_=Math.cos(f),m=Math.sin(f),u=h+Math.PI/2,g=Math.cos(u),p=Math.sin(u);let y=0;const x=this._width/2*b.streamOffsetFactor;e===2?y=t===0?-x:x:e===3&&(y=(t-1)*x);const w=this._height*.22,S=this._emitterX+_*w+g*y,l=this._emitterY+m*w+p*y;let R=v(b.particleInitialVelocity.away.min,b.particleInitialVelocity.away.max),z=v(b.particleInitialVelocity.side.min,b.particleInitialVelocity.side.max);R*=c,z*=c;let E=_*R+g*z,B=m*R+p*z;const G=b.particleVelocityVariance;E+=v(-G,G),B+=v(-G,G),E+=this._emitterVX,B+=this._emitterVY;const A=Y.get(this._smokeTexture);A.tint=b.particleColor,A.x=S,A.y=l,A.alpha=a;const J=o*this._particleScaleMultiplier;A.scaleX=J,A.scaleY=J,A.rotation=v(0,Math.PI*2);const ht={view:A,x:S,y:l,vx:E,vy:B,age:0,lifetime:s,startSizeFactor:o,endSizeFactor:r,startAlpha:a,endAlpha:b.particleEndAlpha,rotSpeed:v(-1,1)};this._particleContainer.addParticle(A),this._particles.push(ht)}_stopTimer(){this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null)}destroy(t){this._stopTimer();for(let e=0;e<this._particles.length;e+=1)Y.release(this._particles[e].view);this._particles=[],super.destroy({texture:!1,textureSource:!1,...t,children:!0})}}class Wt extends I{constructor(t,e,i,s,o,r,a){super(a),this.anchor.set(.5),this.x=t,this.y=e,this.rotation=i,this.width=o,this.height=s,this.alpha=r,this._initialAlpha=r,this._elapsedTime=0,this._fadeDuration=1800+Math.random()*700}update(t){this._elapsedTime+=t;const e=Math.min(this._elapsedTime/this._fadeDuration,1);return this.alpha=(1-e)*this._initialAlpha,e>=1}}class Vt extends C{constructor(t,e){super(),this.zIndex=1,this._currentX=t[0]||0,this._currentY=t[1]||0,this._currentRotation=t[2]||0,this._engineLoad=t[6]||0,this._condition=t[7],this._size=t[8],this._prevX=this._currentX,this._prevY=this._currentY,this._prevRotation=this._currentRotation,this._prevSpeed=0,this._prevAngularSpeed=0,this._assets=e,this._trackMarkCooldown=2,this._lastTrackMarkTime=0,this._minAbsAccelerationForMark=4,this._minAngularSpeedForMark=.02,this._minRotationAccelerationForMark=.4,this._minSpeedForRotationMarks=1.4,this._trackWidth=this._size*.4,this._trackLength=this._size*.5;const i=this._size*3;this._trackOffset=i/2*.7,this._backwardOffset=i*.4,this._trackInitialAlpha=.4,this._tickListener=s=>this._internalUpdate(s.deltaMS),P.shared.add(this._tickListener)}update(t){this._currentX=t[0],this._currentY=t[1],this._currentRotation=t[2],this._engineLoad=t[6],this._condition=t[7]}_internalUpdate(t){if(t<=0)return;for(let u=this.children.length-1;u>=0;u-=1){const g=this.children[u];g.update(t)&&g.destroy()}const e=this._currentX-this._prevX,i=this._currentY-this._prevY,s=Math.sqrt(e*e+i*i),o=Tt(this._currentRotation-this._prevRotation),r=Math.abs(o),a=s-this._prevSpeed,c=Math.abs(a),h=r-this._prevAngularSpeed,f=Math.abs(h),_=performance.now();let m=!1;this._condition!==0&&_-this._lastTrackMarkTime>this._trackMarkCooldown&&(c>this._minAbsAccelerationForMark&&(m=!0),s>this._minSpeedForRotationMarks&&(r>this._minAngularSpeedForMark||f>this._minRotationAccelerationForMark)&&(m=!0)),this._engineLoad>1&&(m=!0),m&&(this.createTrackMarksAtPreviousPosition(),this._lastTrackMarkTime=_),this._prevX=this._currentX,this._prevY=this._currentY,this._prevRotation=this._currentRotation,this._prevSpeed=s,this._prevAngularSpeed=r}createTrackMarksAtPreviousPosition(){for(let t=-1;t<=1;t+=2){const e=Math.cos(this._prevRotation+Math.PI/2)*this._trackOffset*t,i=Math.sin(this._prevRotation+Math.PI/2)*this._trackOffset*t,s=-Math.cos(this._prevRotation)*this._backwardOffset,o=-Math.sin(this._prevRotation)*this._backwardOffset,r=this._prevX+e+s,a=this._prevY+i+o,c=new Wt(r,a,this._prevRotation,this._trackWidth,this._trackLength,this._trackInitialAlpha,this._assets.trackMarkTexture);this.addChild(c)}}_stopTimer(){this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null)}destroy(t){this._stopTimer(),super.destroy({children:!0,texture:!1,textureSource:!1,...t})}}class Gt extends V{constructor(t,e,i,s,o){super(o),this.startPositionX=t,this.startPositionY=e,this.endPositionX=i,this.endPositionY=s,this.config={color:16777113,alphaStart:1,alphaEnd:.6,trailLength:55,tracerSpeed:19e3,minDuration:45,maxDuration:80,trailShrinkPower:1,trailStartOffset:30,segmentCount:12,segmentRadius:1,alphaPulseFrequency:.1,alphaPulseAmplitude:.15},this.graphics=new T,this.addChild(this.graphics),this.elapsedTime=0,this.dx=this.endPositionX-this.startPositionX,this.dy=this.endPositionY-this.startPositionY,this.totalDist=Math.hypot(this.dx,this.dy),this.totalDist>.001?(this.nx=this.dx/this.totalDist,this.ny=this.dy/this.totalDist,this.animationDuration=this.totalDist/this.config.tracerSpeed*1e3):(this.nx=0,this.ny=0,this.totalDist=0,this.animationDuration=this.config.minDuration),this.animationDuration=Math.max(this.config.minDuration,this.animationDuration),this.animationDuration=Math.min(this.config.maxDuration,this.animationDuration),this.animationDuration<=0&&(this.animationDuration=this.config.minDuration)}_drawSegment(t,e,i,s,o){this.graphics.circle(t,e,i),this.graphics.fill({color:s,alpha:Q(o,0,1)})}_update(t){if(this.isComplete)return;this.elapsedTime+=t,this.graphics.clear();const e=Math.min(this.elapsedTime/this.animationDuration,1);if(e>0){const i=k(this.startPositionX,this.endPositionX,e),s=k(this.startPositionY,this.endPositionY,e),o=k(this.config.alphaStart,this.config.alphaEnd,e),r=Math.sin(this.elapsedTime*this.config.alphaPulseFrequency)*this.config.alphaPulseAmplitude;let a=o+r;a=Q(a,0,this.config.alphaStart);const c=Math.pow(e,this.config.trailShrinkPower),h=k(this.config.trailLength,0,c),f=this.totalDist*e;if(f>=this.config.trailStartOffset){let _=f;this.totalDist>.001&&(_=Math.max(0,f-this.config.trailStartOffset));const m=Math.min(_,h);let u,g;this.totalDist>.001?(u=i-this.nx*m,g=s-this.ny*m):(u=i,g=s);const p=Math.hypot(i-u,s-g);if(p<this.config.segmentRadius*.5&&this.totalDist===0)this._drawSegment(i,s,this.config.segmentRadius,this.config.color,a);else if(p>=this.config.segmentRadius*.5){const y=Math.max(1,this.config.segmentCount);for(let x=0;x<y;x++){let w=.5;y>1&&(w=x/(y-1));const S=k(u,i,w),l=k(g,s,w),R=k(1,.8,w);this._drawSegment(S,l,this.config.segmentRadius,this.config.color,a*R)}}}}this.elapsedTime>=this.animationDuration&&(this.graphics.clear(),this._completeEffect())}destroy(t){this.graphics&&this.graphics.clear(),super.destroy(t)}}const Ht=10;class $t extends V{constructor(t,e,i,s,o,r){super(o),this.x=t,this.y=e,this._assets=r,this._particleTexture=this._assets.impactParticleTexture,this.config={particleCount:v(2,4),particleMinSize:1,particleMaxSize:3,minInitialSpeed:10,maxInitialSpeed:300,minLifetime:8e3,maxLifetime:15e3,color:[3355443,2236962,4473924],fadeOutStart:.8,impactDirectionX:i,impactDirectionY:s,spreadAngle:60,dragCoefficient:13,minSpeedThreshold:1,lingerDuration:6e3},this.config.impactDirectionX===0&&this.config.impactDirectionY===0?this.useOmnidirectionalSpread=!0:this.useOmnidirectionalSpread=!1,this.particlesData=[],this.elapsedTime=0,this._createParticles()}_createParticles(){let t;this.useOmnidirectionalSpread||(t=Math.atan2(this.config.impactDirectionY,this.config.impactDirectionX));const i=this.config.spreadAngle*(Math.PI/180)/2;for(let s=0,o=this.config.particleCount;s<o;s+=1){let r;this.useOmnidirectionalSpread?r=Math.random()*Math.PI*2:r=t+v(-i,i);const a=v(this.config.minInitialSpeed,this.config.maxInitialSpeed),c=new I(this._particleTexture);c.anchor.set(.5);const h={sprite:c,x:0,y:0,vx:Math.cos(r)*a,vy:Math.sin(r)*a,size:v(this.config.particleMinSize,this.config.particleMaxSize),color:Array.isArray(this.config.color)?this.config.color[Math.floor(Math.random()*this.config.color.length)]:this.config.color,lifetime:v(this.config.minLifetime,this.config.maxLifetime),age:0,alpha:1,active:!0,isMoving:!0,timeSinceStopped:0};c.tint=h.color,this.particlesData.push(h),this.addChild(c)}}_update(t){if(this.isComplete)return;this.elapsedTime+=t;const e=t/1e3;let i=0;for(let s=0,o=this.particlesData.length;s<o;s+=1){const r=this.particlesData[s];if(!r.active)continue;if(i+=1,r.age+=t,r.isMoving){const f=Math.hypot(r.vx,r.vy);if(f>0){const m=f*this.config.dragCoefficient*e,u=Math.max(0,1-m/f);r.vx*=u,r.vy*=u}r.x+=r.vx*e,r.y+=r.vy*e,Math.hypot(r.vx,r.vy)<this.config.minSpeedThreshold&&(r.isMoving=!1,r.vx=0,r.vy=0)}else r.timeSinceStopped+=t;const a=r.age/r.lifetime;if(!r.isMoving&&r.timeSinceStopped>=this.config.lingerDuration){const f=r.timeSinceStopped-this.config.lingerDuration,_=Math.min(500,r.lifetime*(1-this.config.fadeOutStart));r.alpha=k(1,0,Math.min(f/_,1))}else if(a>=this.config.fadeOutStart){const f=r.age-r.lifetime*this.config.fadeOutStart,_=r.lifetime*(1-this.config.fadeOutStart);r.alpha=_>0?k(1,0,Math.min(f/_,1)):0}(r.age>=r.lifetime||r.alpha<.01)&&(r.active=!1,r.alpha=0);const c=r.sprite;c.position.set(r.x,r.y),c.alpha=r.alpha,c.visible=r.active;const h=r.size/Ht;c.scale.set(h)}i===0&&this._isStarted&&this._completeEffect()}destroy(t){this.particlesData=[],super.destroy(t)}}class qt extends C{constructor(t,e,i){super(),this.zIndex=2,this.startPositionX=t[0],this.startPositionY=t[1],this.endPositionX=t[2],this.endPositionY=t[3],this.soundPositionX=t[4],this.soundPositionY=t[5],this.hit=t[6],this._assets=e,this._soundManager=i.soundManager,this.tracer=null,this.impact=null,this._isDestroyed=!1,this._visualsComplete=!1,this._soundComplete=!1,this._soundId=this._soundManager.registerSound("shot",{position:{x:this.soundPositionX,y:this.soundPositionY}},()=>{this._soundComplete=!0,this._soundId=null,this._tryDestroy()}),this._soundId||(this._soundComplete=!0)}run(){this._isDestroyed||(this.tracer=new Gt(this.startPositionX,this.startPositionY,this.endPositionX,this.endPositionY,this._onTracerComplete.bind(this)),this.addChild(this.tracer),this.tracer.run())}_onTracerComplete(){if(!this._isDestroyed)if(this.hit){const t=this.endPositionX-this.startPositionX,e=this.endPositionY-this.startPositionY,i=Math.hypot(t,e);let s=0,o=0;i>.001&&(s=-(t/i),o=-(e/i)),this.impact=new $t(this.endPositionX,this.endPositionY,s,o,this._onImpactComplete.bind(this),this._assets),this.addChild(this.impact),this.impact.run()}else this._visualsComplete=!0,this._tryDestroy()}_onImpactComplete(){this._isDestroyed||(this._visualsComplete=!0,this._tryDestroy())}_tryDestroy(){this._visualsComplete&&this._soundComplete&&this.destroy()}destroy(){this._isDestroyed||(this._isDestroyed=!0,this._soundId&&(this._soundManager.unregisterSound(this._soundId),this._soundId=null),this.tracer&&(this.tracer.destroy(),this.tracer=null),this.impact&&(this.impact.destroy(),this.impact=null),this.parent&&this.parent.removeChild(this),super.destroy({children:!0}))}}const jt={Map:Mt,MapRadar:kt,TankRadar:vt,Tank:Et,Bomb:Rt,ExplosionEffect:Bt,Smoke:Ut,Tracks:Vt,ShotEffect:qt};function Kt(n,t){const{radius:e,blur:i,color:s}=n,o=new T;o.circle(e+i,e+i,e),o.fill(s),o.filters=[new q({strength:i,quality:40})];const r=t.generateTexture({target:o,frame:new M(0,0,(e+i)*2,(e+i)*2)});return o.destroy(!0),r}function Zt(n,t){const{baseRadius:e,irregularity:i,blur:s,numPoints:o}=n,r=new T,a=(e+i+s)*2,c=a/2,h=[];for(let _=0;_<o;_+=1){const m=_/o*Math.PI*2,u=e+v(-i,i);h.push(c+u*Math.cos(m),c+u*Math.sin(m))}r.poly(h).fill(16777215),r.filters=[new q({strength:s,quality:10})];const f=t.generateTexture({target:r,frame:new M(0,0,a,a)});return r.destroy(!0),f}function Qt(n,t){const{radius:e,blur:i,color:s}=n,o=new T;o.circle(e+i,e+i,e),o.fill(s),o.filters=[new q({strength:i,quality:40})];const r=t.generateTexture({target:o,frame:new M(0,0,(e+i)*2,(e+i)*2)});return o.destroy(!0),r}function Jt(n,t){const{colors:e}=n,i={},s=10,o=s*4,r=s*3,a=15658734,c=f=>{const _=new T,m=new T,u=o,g=r;_.rect(-u/2,-g/2,u,g).fill(5592405).rect(-u/2+1,-g/2+1,u-2,g-2).fill(10066329).rect(-u/2+2,-g/2+2,u-4,g-4).fill(13421772).rect(-u/2+3,-g/2+3,u-6,g-6).fill(a),m.moveTo(1.33*s,-.42*s).lineTo(.42*s,-1*s).lineTo(-.42*s,-1*s).lineTo(-1.33*s,-.42*s).lineTo(-1.33*s,.42*s).lineTo(-.42*s,1*s).lineTo(.42*s,1*s).lineTo(1.33*s,.42*s).closePath().fill(f).stroke({width:.17*s,color:11184810}).moveTo(2.33*s,-.25*s).lineTo(.25*s,-.25*s).lineTo(.25*s,.25*s).lineTo(2.33*s,.25*s).closePath().stroke({width:.17*s,color:11184810}).fill(f);const p=_.getBounds(),y=t.generateTexture({target:_,frame:new M(p.x,p.y,p.width,p.height)}),x=m.getBounds(),w=t.generateTexture({target:m,frame:new M(x.x,x.y,x.width,x.height)}),S={x:-x.x/x.width,y:-x.y/x.height};return _.destroy(!0),m.destroy(!0),{body:y,gun:w,gunAnchor:S}},h=()=>{const f=new C,_=new T,m=new T;f.addChild(_,m);const u=3815994,g=2434341,p=3158064,y=1579032,x=5263440,w=o,S=r,l=s;_.moveTo(-w/2-l*.1,-S/2+l*.2).lineTo(w/2+l*.2,-S/2-l*.1).lineTo(w/2-l*.1,S/2+l*.3).lineTo(-w/2+l*.3,S/2-l*.2).closePath().fill(u).stroke({width:l*.2,color:x,alignment:.5}),_.moveTo(-w/2+l*.4,-S/2+l*.5).lineTo(w/2-l*.3,-S/2+l*.2).lineTo(w/2-l*.4,S/2-l*.1).lineTo(-w/2+l*.2,S/2-l*.4).closePath().fill(g),_.circle(w*.15,S*.1,l*1.2).fill(y),_.circle(-w*.3,-S*.25,l*.5).fill(y),m.position.set(l*.3,-l*.2);const R=[l*1.1,-l*.7,l*.2,-l*1,-l*.6,-l*.9,-l*1.3,-l*.2,-l*1.1,l*.6,-l*.2,l*1,l*.7,l*.8,l*1.3,l*.1];m.poly(R).fill(p).stroke({width:l*.15,color:x,alignment:0});const z=[l*.8,-l*.25,l*1.5,-l*.4,l*1.4,l*.15,l*.7,l*.05];m.poly(z).fill(p).stroke({width:l*.1,color:x,alignment:0}),m.circle(l*.1,-l*.2,l*.4).fill(y);const E=f.getBounds(),B=t.generateTexture({target:f,frame:new M(E.x,E.y,E.width,E.height)});return f.destroy({children:!0}),B};return i.liveTeamId1=c(e.teamId1),i.liveTeamId2=c(e.teamId2),i.destroyed=h(),i}function te(n,t){const{radius:e,borderWidth:i,crossSize:s,crossThickness:o,colors:r}=n,a={},c=(e+i)*2,h=c/2,f=15658734,_=3355443,m=g=>{const p=new T;p.circle(h,h,e).fill(f),p.circle(h,h,e-i).fill(g);const y=t.generateTexture({target:p,frame:new M(0,0,c,c)});return p.destroy(!0),y},u=()=>{const g=new T,p=s/2;g.moveTo(h-p,h-p).lineTo(h+p,h+p).moveTo(h-p,h+p).lineTo(h+p,h-p).stroke({width:o,color:_});const y=t.generateTexture({target:g,frame:new M(0,0,c,c)});return g.destroy(!0),y};return a.liveTeamId1=m(r.teamId1),a.liveTeamId2=m(r.teamId2),a.destroyed=u(),a}function ee(n,t){const{colorOuter:e,colorInner:i}=n,s=new T,o=20,r=1;s.rect(0,0,o,o).fill(e),s.rect(r,r,o-r*2,o-r*2).fill(i);const a=t.generateTexture({target:s,frame:new M(0,0,o,o)});return s.destroy(!0),a}function ie(n,t){const{width:e,length:i,color:s}=n,o=new T;o.rect(0,0,i,e).fill(s);const r=t.generateTexture({target:o,frame:new M(0,0,i,e)});return o.destroy(!0),r}function se(n,t){const{radius:e,blur:i,color:s}=n,o=new T,r=(e+i)*2,a=r/2;o.circle(a,a,e),o.fill(s),o.filters=[new q({strength:i,quality:10})];const c=t.generateTexture({target:o,frame:new M(0,0,r,r)});return o.destroy(!0),c}const ne={explosionTexture:Kt,funnelTexture:Zt,smokeTexture:Qt,tankTexture:Jt,tankRadarTexture:te,bombTexture:ee,trackMarkTexture:ie,impactParticleTexture:se},re=n=>(n??"").split(/[?#]/)[0].endsWith(".js"),oe=n=>import(n),he={id:"tanks",engineApi:_t,async createClientCore(n,{wasmUrl:t}){if(re(t)){const i=await oe(t);return{core:new i.ClientCore(n),memory:null}}const e=await wt({module_or_path:t});return{core:new Z(n),memory:e.memory}},parts:jt,bakers:ne,styles:St,hooks:{onAuth(n,t){n.set_model(t.model)},onPanel(n,t){n.sync_panel(JSON.stringify(t))},onLocalAction(n,t,e,i){return t!=="down"?null:e==="fire"?n.try_fire(i)||null:((e==="nextWeapon"||e==="prevWeapon")&&n.cycle_weapon(e==="prevWeapon"),null)}}};export{he as default};
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
export class ClientCore {
|
|
11
11
|
free(): void;
|
|
12
12
|
[Symbol.dispose](): void;
|
|
13
|
+
/**
|
|
14
|
+
* Ввод указателем: мировая точка + биты состояния — в историю
|
|
15
|
+
* предикта.
|
|
16
|
+
*/
|
|
17
|
+
apply_aim(x: number, y: number, flags: number, local_now: number): void;
|
|
13
18
|
/**
|
|
14
19
|
* Ввод игрока: action ('down'/'up') + имя клавиши — в историю
|
|
15
20
|
* предикта.
|
|
@@ -131,6 +136,11 @@ export class GameCore {
|
|
|
131
136
|
* (аналог Game.getAlivePlayers для меты).
|
|
132
137
|
*/
|
|
133
138
|
alive_players(): Float32Array;
|
|
139
|
+
/**
|
|
140
|
+
* Ввод указателем: seq + мировая точка + биты состояния
|
|
141
|
+
* (wire-формат 'seq:aim:x:y:flags' разбирает JS-оболочка).
|
|
142
|
+
*/
|
|
143
|
+
apply_aim(game_id: number, seq: number, x: number, y: number, flags: number): void;
|
|
134
144
|
/**
|
|
135
145
|
* Ввод игрока: seq + action ('down'/'up') + имя клавиши
|
|
136
146
|
* (wire-формат 'seq:action:name' разбирает JS-оболочка).
|
|
@@ -17,6 +17,17 @@ class ClientCore {
|
|
|
17
17
|
const ptr = this.__destroy_into_raw();
|
|
18
18
|
wasm.__wbg_clientcore_free(ptr, 0);
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Ввод указателем: мировая точка + биты состояния — в историю
|
|
22
|
+
* предикта.
|
|
23
|
+
* @param {number} x
|
|
24
|
+
* @param {number} y
|
|
25
|
+
* @param {number} flags
|
|
26
|
+
* @param {number} local_now
|
|
27
|
+
*/
|
|
28
|
+
apply_aim(x, y, flags, local_now) {
|
|
29
|
+
wasm.clientcore_apply_aim(this.__wbg_ptr, x, y, flags, local_now);
|
|
30
|
+
}
|
|
20
31
|
/**
|
|
21
32
|
* Ввод игрока: action ('down'/'up') + имя клавиши — в историю
|
|
22
33
|
* предикта.
|
|
@@ -294,6 +305,18 @@ class GameCore {
|
|
|
294
305
|
wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
|
|
295
306
|
return v1;
|
|
296
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Ввод указателем: seq + мировая точка + биты состояния
|
|
310
|
+
* (wire-формат 'seq:aim:x:y:flags' разбирает JS-оболочка).
|
|
311
|
+
* @param {number} game_id
|
|
312
|
+
* @param {number} seq
|
|
313
|
+
* @param {number} x
|
|
314
|
+
* @param {number} y
|
|
315
|
+
* @param {number} flags
|
|
316
|
+
*/
|
|
317
|
+
apply_aim(game_id, seq, x, y, flags) {
|
|
318
|
+
wasm.gamecore_apply_aim(this.__wbg_ptr, game_id, seq, x, y, flags);
|
|
319
|
+
}
|
|
297
320
|
/**
|
|
298
321
|
* Ввод игрока: seq + action ('down'/'up') + имя клавиши
|
|
299
322
|
* (wire-формат 'seq:action:name' разбирает JS-оболочка).
|
|
Binary file
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
export const memory: WebAssembly.Memory;
|
|
4
4
|
export const __wbg_clientcore_free: (a: number, b: number) => void;
|
|
5
5
|
export const __wbg_gamecore_free: (a: number, b: number) => void;
|
|
6
|
+
export const clientcore_apply_aim: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
6
7
|
export const clientcore_apply_input: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
7
8
|
export const clientcore_cycle_weapon: (a: number, b: number) => void;
|
|
8
9
|
export const clientcore_debug_json: (a: number) => [number, number];
|
|
@@ -24,6 +25,7 @@ export const clientcore_take_divergence: (a: number) => [number, number];
|
|
|
24
25
|
export const clientcore_take_frames: (a: number) => [number, number];
|
|
25
26
|
export const clientcore_try_fire: (a: number, b: number) => [number, number];
|
|
26
27
|
export const gamecore_alive_players: (a: number) => [number, number];
|
|
28
|
+
export const gamecore_apply_aim: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
27
29
|
export const gamecore_apply_input: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
28
30
|
export const gamecore_body_has_events: (a: number) => number;
|
|
29
31
|
export const gamecore_clear: (a: number) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class O{__destroy_into_raw(){const e=this.__wbg_ptr;return this.__wbg_ptr=0,x.unregister(this),e}free(){const e=this.__destroy_into_raw();s.__wbg_gamecore_free(e,0)}alive_players(){const e=s.gamecore_alive_players(this.__wbg_ptr);var a=I(e[0],e[1]).slice();return s.__wbindgen_free(e[0],e[1]*4,4),a}apply_aim(e,a,n,r,o){s.gamecore_apply_aim(this.__wbg_ptr,e,a,n,r,o)}apply_input(e,a,n,r){const o=h(n,s.__wbindgen_malloc,s.__wbindgen_realloc),i=d,c=h(r,s.__wbindgen_malloc,s.__wbindgen_realloc),p=d;s.gamecore_apply_input(this.__wbg_ptr,e,a,o,i,c,p)}body_has_events(){return s.gamecore_body_has_events(this.__wbg_ptr)!==0}clear(){s.gamecore_clear(this.__wbg_ptr)}debug_json(){let e,a;try{const n=s.gamecore_debug_json(this.__wbg_ptr);return e=n[0],a=n[1],y(n[0],n[1])}finally{s.__wbindgen_free(e,a,1)}}deserialize_state(e){const a=W(e,s.__wbindgen_malloc),n=d,r=s.gamecore_deserialize_state(this.__wbg_ptr,a,n);if(r[1])throw g(r[0])}frame_bytes(){const e=s.gamecore_frame_bytes(this.__wbg_ptr);var a=F(e[0],e[1]).slice();return s.__wbindgen_free(e[0],e[1]*1,1),a}frame_ptr(){return s.gamecore_frame_ptr(this.__wbg_ptr)>>>0}is_alive(e){return s.gamecore_is_alive(this.__wbg_ptr,e)!==0}last_input_seq(e){return s.gamecore_last_input_seq(this.__wbg_ptr,e)>>>0}load_map(e){const a=h(e,s.__wbindgen_malloc,s.__wbindgen_realloc),n=d,r=s.gamecore_load_map(this.__wbg_ptr,a,n);if(r[1])throw g(r[0])}map_info(){let e,a;try{const n=s.gamecore_map_info(this.__wbg_ptr);return e=n[0],a=n[1],y(n[0],n[1])}finally{s.__wbindgen_free(e,a,1)}}constructor(e){const a=h(e,s.__wbindgen_malloc,s.__wbindgen_realloc),n=d,r=s.gamecore_new(a,n);if(r[2])throw g(r[1]);return this.__wbg_ptr=r[0],x.register(this,this.__wbg_ptr,this),this}pack_body(){const e=s.gamecore_pack_body(this.__wbg_ptr);if(e[1])throw g(e[0])}pack_frame(e,a,n,r,o,i,c,p){var l=L(c)?0:h(c,s.__wbindgen_malloc,s.__wbindgen_realloc),m=d;return s.gamecore_pack_frame(this.__wbg_ptr,e,a,n,r,o,i,l,m,p)>>>0}players_data(){let e,a;try{const n=s.gamecore_players_data(this.__wbg_ptr);return e=n[0],a=n[1],y(n[0],n[1])}finally{s.__wbindgen_free(e,a,1)}}position_of(e){const a=s.gamecore_position_of(this.__wbg_ptr,e);var n=I(a[0],a[1]).slice();return s.__wbindgen_free(a[0],a[1]*4,4),n}remove_actor(e){s.gamecore_remove_actor(this.__wbg_ptr,e)}remove_players_and_shots(){let e,a;try{const n=s.gamecore_remove_players_and_shots(this.__wbg_ptr);return e=n[0],a=n[1],y(n[0],n[1])}finally{s.__wbindgen_free(e,a,1)}}remove_scripted_actor(e){s.gamecore_remove_scripted_actor(this.__wbg_ptr,e)}reset_actor(e,a,n,r,o){s.gamecore_reset_actor(this.__wbg_ptr,e,a,n,r,o)}reset_all_vitals(){s.gamecore_reset_all_vitals(this.__wbg_ptr)}serialize_state(){const e=s.gamecore_serialize_state(this.__wbg_ptr);if(e[3])throw g(e[2]);var a=F(e[0],e[1]).slice();return s.__wbindgen_free(e[0],e[1]*1,1),a}spawn_actor(e,a,n,r,o,i){const c=h(a,s.__wbindgen_malloc,s.__wbindgen_realloc),p=d,l=s.gamecore_spawn_actor(this.__wbg_ptr,e,c,p,n,r,o,i);if(l[1])throw g(l[0])}spawn_scripted_actor(e,a,n,r,o,i){const c=h(a,s.__wbindgen_malloc,s.__wbindgen_realloc),p=d,l=s.gamecore_spawn_scripted_actor(this.__wbg_ptr,e,c,p,n,r,o,i);if(l[1])throw g(l[0])}step(e){s.gamecore_step(this.__wbg_ptr,e)}take_events(){let e,a;try{const n=s.gamecore_take_events(this.__wbg_ptr);return e=n[0],a=n[1],y(n[0],n[1])}finally{s.__wbindgen_free(e,a,1)}}}Symbol.dispose&&(O.prototype[Symbol.dispose]=O.prototype.free);function V(){return{__proto__:null,"./vimp_tanks_core_bg.js":{__proto__:null,__wbg_Error_92b29b0548f8b746:function(e,a){return Error(y(e,a))},__wbg___wbindgen_throw_344f42d3211c4765:function(e,a){throw new Error(y(e,a))},__wbindgen_init_externref_table:function(){const e=s.__wbindgen_externrefs,a=e.grow(4);e.set(0,void 0),e.set(a+0,void 0),e.set(a+1,null),e.set(a+2,!0),e.set(a+3,!1)}}}}typeof FinalizationRegistry>"u"||new FinalizationRegistry(t=>s.__wbg_clientcore_free(t,1));const x=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(t=>s.__wbg_gamecore_free(t,1));function I(t,e){return t=t>>>0,z().subarray(t/4,t/4+e)}function F(t,e){return t=t>>>0,v().subarray(t/1,t/1+e)}let S=null;function z(){return(S===null||S.byteLength===0)&&(S=new Float32Array(s.memory.buffer)),S}function y(t,e){return Y(t>>>0,e)}let k=null;function v(){return(k===null||k.byteLength===0)&&(k=new Uint8Array(s.memory.buffer)),k}function L(t){return t==null}function W(t,e){const a=e(t.length*1,1)>>>0;return v().set(t,a/1),d=t.length,a}function h(t,e,a){if(a===void 0){const c=T.encode(t),p=e(c.length,1)>>>0;return v().subarray(p,p+c.length).set(c),d=c.length,p}let n=t.length,r=e(n,1)>>>0;const o=v();let i=0;for(;i<n;i++){const c=t.charCodeAt(i);if(c>127)break;o[r+i]=c}if(i!==n){i!==0&&(t=t.slice(i)),r=a(r,n,n=i+t.length*3,1)>>>0;const c=v().subarray(r+i,r+n),p=T.encodeInto(t,c);i+=p.written,r=a(r,n,i,1)>>>0}return d=i,r}function g(t){const e=s.__wbindgen_externrefs.get(t);return s.__externref_table_dealloc(t),e}let E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});E.decode();const U=2146435072;let A=0;function Y(t,e){return A+=e,A>=U&&(E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),E.decode(),A=e),E.decode(v().subarray(t,t+e))}const T=new TextEncoder;"encodeInto"in T||(T.encodeInto=function(t,e){const a=T.encode(t);return e.set(a),{read:t.length,written:a.length}});let d=0,s;function j(t,e){return s=t.exports,S=null,k=null,s.__wbindgen_start(),s}async function P(t,e){if(typeof Response=="function"&&t instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(t,e)}catch(r){if(t.ok&&a(t.type)&&t.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",r);else throw r}const n=await t.arrayBuffer();return await WebAssembly.instantiate(n,e)}else{const n=await WebAssembly.instantiate(t,e);return n instanceof WebAssembly.Instance?{instance:n,module:t}:n}function a(n){switch(n){case"basic":case"cors":case"default":return!0}return!1}}async function q(t){if(s!==void 0)return s;t!==void 0&&(Object.getPrototypeOf(t)===Object.prototype?{module_or_path:t}=t:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),t===void 0&&(t=new URL("/assets/vimp_tanks_core_bg-Km6ohK8q.wasm",import.meta.url));const e=V();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:a,module:n}=await P(await t,e);return j(a)}const G={setId:"c1",scale:.2,spriteSheet:{img:"tiles3.png",frames:[[0,64,32,32],[0,192,32,32],[96,64,32,32]]},layers:{1:[0,1],4:[2]},step:32,physicsStatic:[1],physicsDynamic:(function(){const n=[];for(let l=0;l<20;l+=1)for(let m=0;m<1;m+=1){const _=(104+m*3)*32+48,R=(45+l*3)*32+48;n.push({density:20,layer:3,position:[_,R],angle:0,width:96,height:96,img:"b1.png",linearDamping:8,angularDamping:16})}return n})(),respawns:{team1:[[448,1840,0],[256,2304,0],[448,2688,0],[256,3e3,0],[256,512,0],[448,832,0],[256,1152,0],[448,3648,0],[256,3968,0],[448,4288,0]],team2:[[6272,1840,180],[6464,2304,180],[6272,2688,180],[6464,3e3,180],[6464,512,180],[6272,832,180],[6464,1152,180],[6272,3648,180],[6464,3968,180],[6272,4288,180]]},map:(function(){const a={floor:0,wall:1,effect:2},n=Array.from({length:150},()=>Array(210).fill(a.floor));for(let o=0;o<150;o++)for(let i=0;i<210;i++)(o<2||o>=148||i<2||i>=208)&&(n[o][i]=a.wall);const r=(o,i,c,p)=>{for(let l=i;l<=p;l++)for(let m=o;m<=c;m++)m>=0&&m<210&&l>=0&&l<150&&(n[l][m]=a.wall)};r(50,0,51,30),r(50,119,51,149),r(158,0,159,30),r(158,119,159,149),r(80,30,130,31),r(80,118,130,119);for(let o=64;o<86;o++)for(let i=2;i<208;i++)(i+o)%2===0?n[o][i]=a.effect:n[o][i]=a.floor;return n})()},N=[],M=32,u=(t,e,a,n)=>{for(let r=0;r<a;r+=1){const o=n?[t*M,(e+r)*M]:[(t+r)*M,e*M];N.push({density:100,layer:3,position:o,angle:0,img:"b1.png",width:32,height:32,linearDamping:5,angularDamping:14})}};u(30,2,10,!0);u(2,30,10,!1);u(30,22,9,!0);u(22,30,9,!1);const f=120,B=30;u(f-B-1,f-12,10,!0);u(f-12,f-B-1,10,!1);u(f-B-1,f-31,9,!0);u(f-31,f-B-1,9,!1);const H={setId:"c1",spriteSheet:{img:"tiles3.png",frames:[[96,0,32,32],[32,32,32,32],[64,32,32,32],[0,96,32,32]]},layers:{1:[0,1,2],4:[3]},step:32,physicsStatic:[2],physicsDynamic:[...N],respawns:{team1:[[320,320,45],[320,480,45],[320,640,45],[480,320,45],[480,480,45],[480,640,45],[640,320,45],[640,480,45],[640,640,45],[800,400,45]],team2:[[3520,3520,225],[3520,3360,225],[3520,3200,225],[3360,3520,225],[3360,3360,225],[3360,3200,225],[3200,3520,225],[3200,3360,225],[3200,3200,225],[3040,3440,225]]},map:(function(){const a={stone:0,grass:1,wall:2,water:3},n=Array.from({length:120},()=>Array(120).fill(a.grass)),r=()=>{for(let l=0;l<120;l+=1)for(let m=0;m<120;m+=1)(l===0||l===119||m===0||m===119)&&(n[l][m]=a.wall)},o=(l,m,_,R=.5)=>{for(let b=m-_;b<=m+_;b+=1)for(let w=l-_;w<=l+_;w+=1)w>0&&w<119&&b>0&&b<119&&Math.sqrt((w-l)**2+(b-m)**2)<=_&&Math.random()<R&&(n[b][w]=a.wall)};r();const i=Math.floor(120/2),c=Math.floor(120/2),p=22;for(let l=c-p;l<=c+p;l+=1)for(let m=i-p;m<=i+p;m+=1)Math.sqrt((m-i)**2+(l-c)**2)<=p&&(n[l][m]=a.stone);for(let l=c-10;l<=c+10;l+=1)for(let m=i-10;m<=i+10;m+=1)Math.sqrt((m-i)**2+(l-c)**2)<=10&&(n[l][m]=a.water);return o(35,85,12,.7),o(85,35,12,.7),o(20,60,8,.6),o(60,20,8,.6),o(100,60,8,.6),o(60,100,8,.6),n})()},X={setId:"c1",scale:.6,spriteSheet:{img:"tiles.png",frames:[[480,64,32,32],[128,224,32,32],[160,0,32,32],[0,64,32,32],[0,64,32,32]]},layers:{1:[0,2,4],2:[1],4:[3]},physicsStatic:[1],physicsDynamic:[],step:32,respawns:{team1:[[130,520,0],[130,620,0],[130,720,0],[130,820,0],[230,520,0],[230,620,0],[230,720,0],[230,820,0],[330,620,0],[330,720,0]],team2:[[1600,520,180],[1600,620,180],[1600,720,180],[1600,820,180],[1500,520,180],[1500,620,180],[1500,720,180],[1500,820,180],[1400,620,180],[1400,720,180]]},map:(function(){const t=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,4,4,4,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,3,3,3,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,3,3,3,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,2,2,4,3,3,3,4,2,2,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,3,3,3,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,4,4,4,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],e=[];for(const a of t){const n=[],r=[];for(const o of a)n.push(o,o),r.push(o,o);e.push(n,r)}return e})()},K={canopy:G,garden:H,"pool mini":X},C={m1:{constructor:"Tank",currentWeapon:"w1",size:2,accelerationFactor:1e3,brakingFactor:10,maxForwardSpeed:260,maxReverseSpeed:-130,baseTurnTorqueFactor:215,damping:{linear:3,angular:100},fixture:{density:200,friction:.5,restitution:.1},lateralGrip:20,turnSpeedThreshold:10,baseTurnFactorRatio:.8,reverseTurnMultiplier:.7,throttleIncreaseRate:2,throttleDecreaseRate:2.5,strainFactor:1.5,maxGunAngle:1.4,gunRotationSpeed:3,gunCenterSpeed:10}},$={w1:{type:"hitscan",impulseMagnitude:5e3,damage:40,range:1500,fireRate:.01,spread:0,consumption:1,cameraShake:{intensity:20,duration:200}},w2:{type:"explosive",constructor:"Bomb",time:300,shotOutcomeId:"w2e",size:8,fireRate:.1,damage:70,radius:50,impulseMagnitude:2e6,cameraShake:{intensity:30,duration:400}}},Q={m1:{id:1,kind:"indexed8",class:"hot",fields:[{name:"x",ty:"f32",interp:"lerp"},{name:"y",ty:"f32",interp:"lerp"},{name:"angle",ty:"f32",interp:"lerpAngle"},{name:"gunRotation",ty:"f32",interp:"lerpAngle"},{name:"vx",ty:"f32",interp:"lerp"},{name:"vy",ty:"f32",interp:"lerp"},{name:"engineLoad",ty:"f32",interp:"lerp"},{name:"condition",ty:"u8"},{name:"size",ty:"u8"},{name:"team",ty:"u8"}]},w1:{id:2,kind:"list16",class:"event",fields:[{name:"startX",ty:"f32"},{name:"startY",ty:"f32"},{name:"endX",ty:"f32"},{name:"endY",ty:"f32"},{name:"bodyX",ty:"f32"},{name:"bodyY",ty:"f32"},{name:"wasHit",ty:"u8"},{name:"shooterId",ty:"u8"}]},w2:{id:3,kind:"indexed32",class:"event",fields:[{name:"x",ty:"f32"},{name:"y",ty:"f32"},{name:"angle",ty:"f32"},{name:"size",ty:"u8"},{name:"time",ty:"u16"},{name:"ownerId",ty:"u8"}]},w2e:{id:4,kind:"list16",class:"event",fields:[{name:"x",ty:"f32"},{name:"y",ty:"f32"},{name:"radius",ty:"f32"}]},c1:{id:5,kind:"indexedNoNull8",class:"hot",fields:[{name:"x",ty:"f32",interp:"lerp"},{name:"y",ty:"f32",interp:"lerp"},{name:"angle",ty:"f32",interp:"lerpAngle"}]},c2:{id:6,kind:"indexedNoNull8",class:"hot",fields:[{name:"x",ty:"f32",interp:"lerp"},{name:"y",ty:"f32",interp:"lerp"},{name:"angle",ty:"f32",interp:"lerpAngle"}]}},Z={parts:{models:C,weapons:$,mapConstructor:"Map",hitscanService:"HitscanService",friendlyFire:!1},snapshot:Q,soundCues:{roundStart:"roundStart",victory:"victory",defeat:"defeat",frag:"frag",death:"gameOver"},initialVote:"teamChange",maps:K,mapScale:.3,currentMap:"pool mini",mapsInVote:4,mapSetId:"c1",roomDefaults:{maxPlayers:8},roomForm:[{name:"maxPlayers",control:"text",label:"Max players",numeric:!0},{name:"roundTime",control:"text",label:"Round time",unit:"s",numeric:!0},{name:"mapTime",control:"text",label:"Map time",unit:"s",numeric:!0},{name:"friendlyFire",control:"checkbox",label:"Friendly fire"},{name:"map",control:"select",label:"Map",source:"maps"}],stat:{name:{key:0,bodyMethod:"=",headSync:!0,headMethod:"#"},status:{key:1,bodyMethod:"=",bodyValue:"",headValue:""},score:{key:2,bodyMethod:"+",bodyValue:0,headMethod:"+",headValue:0},deaths:{key:3,bodyMethod:"+",bodyValue:0,headMethod:"+",headValue:0},latency:{key:4,bodyMethod:"="}},playerState:{defaultState:{}},panel:{fields:{health:{key:"h",value:100},w1:{key:"w1",value:200},w2:{key:"w2",value:100}},activeKey:"wa"},scripted:{namePrefix:"Bot",defaultModel:"m1"},spectatorTeam:"spectators",teams:{team1:1,team2:2,spectators:3},playerKeys:{forward:{key:1},back:{key:2},left:{key:4},right:{key:8},gunCenter:{key:16,type:1},gunLeft:{key:32},gunRight:{key:64},fire:{key:128,type:1},nextWeapon:{key:256,type:1},prevWeapon:{key:512,type:1}}},J={roundStart:{file:"round-start",priority:200,volume:.3},victory:{file:"victory",priority:200,volume:.3},defeat:{file:"defeat",priority:200,volume:.3},frag:{file:"frag",priority:150,volume:.3},hit:{file:"hit",priority:150,volume:.3},gameOver:{file:"game-over",priority:150,volume:.3},shot:{file:"shot",priority:100,volume:.4},explosion:{file:"explosion",priority:100,volume:.4},bombHasBeenPlanted:{file:"bomb-has-been-planted",priority:90,volume:.4},tankEngine:{file:"tank-engine",priority:50,loop:!0,volume:.5}},ee={codecList:["webm","mp3"],path:"/sounds/",sounds:J},te={parts:{gameSets:{c1:["Map","MapRadar"],c2:["Map"],m1:["Tank","TankRadar","Smoke","Tracks"],w1:["ShotEffect"],w2:["Bomb"],w2e:["ExplosionEffect"]},entitiesOnCanvas:{Map:"vimp",MapRadar:"radar",TankRadar:"radar",Tank:"vimp",ShotEffect:"vimp",Bomb:"vimp",ExplosionEffect:"vimp",Smoke:"vimp",Tracks:"vimp"},bakedAssets:{vimp:[{name:"explosionTexture",component:"ExplosionEffect",params:{radius:50,blur:2,color:16777215}},{name:"impactParticleTexture",component:"ShotEffect",params:{radius:4,blur:1,color:16777215}},{name:"funnelTexture",component:"ExplosionEffect",params:{baseRadius:25,irregularity:5,blur:40,numPoints:12}},{name:"smokeTexture",component:"Smoke",params:{radius:3,blur:1,color:16777215}},{name:"tankTexture",component:"Tank",params:{colors:{teamId1:5579298,teamId2:2250018}}},{name:"bombTexture",component:"Bomb",params:{colorOuter:16777215,colorInner:986895}},{name:"trackMarkTexture",component:"Tracks",params:{width:4,length:5,color:1710610}}],radar:[{name:"tankRadarTexture",component:"TankRadar",params:{radius:6,borderWidth:2,crossSize:9,crossThickness:1.5,colors:{teamId1:5579298,teamId2:2250018}}}]},componentDependencies:{renderer:["Map"],assetsBase:["Map"],soundManager:["ExplosionEffect","ShotEffect","Bomb","Tank"]},sounds:ee},initIdList:["vimp","radar","panel","chat"],modules:{canvasManager:{canvases:{vimp:{width:960,height:600,aspectRatio:"16:9",baseScale:"5:1",dynamicCamera:!0,shakeCamera:!0},radar:{width:150,height:150,fixSize:"150",baseScale:"1:8"}}},controls:{keySetList:[{78:"nextPlayer",80:"prevPlayer"},{87:"forward",83:"back",65:"left",68:"right",85:"gunCenter",75:"gunLeft",76:"gunRight",74:"fire",78:"nextWeapon",80:"prevWeapon"}]},chat:{params:{messages:{s:["Team {0} is full. Your current team: {1}","Your team: {0}","Your new team: {0}","Your new status: spectator","⚔️ {0} killed {1}","⚡ {0} joined the game","👋 {0} left the game"],v:["A vote has been created","Voting has started","Your vote has been accepted","Voting is temporarily unavailable","Vote passed","Vote failed"],m:["Current map: {0}","Next map: {0}"],c:["Command not found","Your rank: {0}"],n:["Invalid name","{0} changed name to {1}"],b:["Only active players can use /bot","Invalid bot count","Invalid team name","{0} bot(s) created for {1}","All bots removed from {0}","{0} bot(s) created","All bots removed"]}}},panel:{keys:{t:"time",h:"health",wa:"activeWeapon",w1:"bullet",w2:"bomb"},fields:[{name:"health",elem:"panel-health",type:"bar",max:100,blocks:30},{name:"bullet",elem:"panel-bullet",type:"weapon"},{name:"bomb",elem:"panel-bomb",type:"weapon"},{name:"time",elem:"panel-time",type:"time"}]},stat:{params:{columns:["names","status","score","deaths","latency"],heads:{1:"team1",2:"team2"},bodies:{1:"team1",2:"team2",3:"spectators"},sortList:{team1:[[2,!0],[3,!1]],team2:[[2,!0],[3,!1]]}}},vote:{params:{templates:{teamChange:["Choose a team","teams",!0],mapChangeBySystem:["Choose the next map"],mapChangeByUser:["{0} suggested the map: {1}",["Yes","No"]],createBotsForTeam:["{0} suggests creating {1} bot(s) to {2}. Agree?",["Yes","No"]],removeBotsForTeam:["{0} suggests removing all bots from {1}. Agree?",["Yes","No"]],createBots:["{0} suggests creating {1} bot(s) to the game. Agree?",["Yes","No"]],removeBots:["{0} suggests removing all bots from the game. Agree?",["Yes","No"]]},menu:[["teamChange",["Switch team","teams"]],["mapChange",["Suggest map","maps"]]]}}},gameInform:{list:["{0} WINS!","ROUND START!","GAME OVER!"]}},ae={elems:{authId:"auth",errorId:"auth-error",enterId:"auth-enter",fieldsId:"auth-fields",titleId:"auth-title",informsId:"auth-informs"},texts:{title:"Tank Battle",sections:[{heading:"Controls",lines:[{keys:"w, a, s, d",text:"move the tank"},{keys:"k, l",text:"turn the gun"},{keys:"u",text:"center the gun"},{keys:"j",text:"fire"},{keys:"n, p",text:"switch weapon/player",last:!0},{keys:"c",text:"chat/command line"},{keys:"m",text:"menu"},{keys:"<Tab>",text:"stats",last:!0}]},{heading:"Command line",lines:[{keys:"/name <name>",text:"change nickname"},{keys:"/mapname",text:"show current map name"},{keys:"/timeleft",text:"map time left"},{separator:!0},{keys:"/bot <count>",text:"add bot(s)"},{keys:"/bot <count> <team>",text:"add to team"},{keys:"/bot 0",text:"remove all bots"},{keys:"/bot 0 <team>",text:"remove from team"}]}]},params:[{name:"model",value:"m1",options:{control:"select",label:"Model",options:Object.keys(C),validator:"isValidModel",storage:"model"}}],validators:{isValidModel:t=>t in C}};function D(t,e,a){a?(t.scripted.removeScripted(a),e>0?(e=t.scripted.createScripted(e,a),t.chat.pushSystem("BOT_CREATED_FOR_TEAM",[e,a])):t.chat.pushSystem("BOT_REMOVED_FROM_TEAM",[a])):(t.scripted.removeScripted(),e>0?(e=t.scripted.createScripted(e,null),t.chat.pushSystem("BOT_CREATED",[e])):t.chat.pushSystem("BOT_REMOVED")),t.roundManager.initiateNewRound()}function ne(t,e,a,n){const r=t.participants.get(e).name,o="botManagement";let i,c;if(!t.voteCoordinator.canCreateVote(o,e))return;n?a>0?(i="createBotsForTeam",c=[r,a,n]):(i="removeBotsForTeam",c=[r,n]):a>0?(i="createBots",c=[r,a]):(i="removeBots",c=[r]);const p={name:i,params:c},l=t.participants.getHumans().map(m=>m.gameId).filter(m=>m!==e);t.voteCoordinator.createVote({voteName:i,voteCategory:o,payload:p,resultFunc:m=>{m==="Yes"?(t.chat.pushSystem("VOTE_PASSED"),D(t,a,n)):t.chat.pushSystem("VOTE_FAILED")},userList:l,gameId:e})}const re={name:"/bot",handler(t,e,a){if(t.participants.get(e).teamId===t.spectatorId){t.chat.pushSystemByUser(e,"BOT_PLAYERS_ONLY");return}const r=parseInt(a[0],10),o=a[1]||null;if(isNaN(r)||r<0){t.chat.pushSystemByUser(e,"BOT_INVALID_COUNT");return}if(o&&(!t.teams[o]||o===t.spectatorTeam)){t.chat.pushSystemByUser(e,"BOT_INVALID_TEAM");return}if(r===0){if(o&&t.scripted.getCountForTeam(o)===0){t.chat.pushSystemByUser(e,"BOT_REMOVED_FROM_TEAM",[o]);return}if(t.scripted.getCount()===0){t.chat.pushSystemByUser(e,"BOT_REMOVED");return}}t.participants.getHumans().filter(c=>c.teamId!==t.spectatorId).length<=1?D(t,r,o):ne(t,e,r,o)}};function se(t){const e=Math.floor(t/1e3),a=String(Math.floor(e/60)).padStart(2,"0"),n=String(e%60).padStart(2,"0");return`${a}:${n}`}const oe={name:"/name",handler(t,e,a){t.roundManager.changeName(e,a.join(" "))}},ie={name:"/nr",handler(t,e){t.isDevMode?t.roundManager.initiateNewRound():t.chat.pushSystemByUser(e,"COMMANDS_NOT_FOUND")}},le={name:"/timeleft",handler(t,e){t.chat.pushSystemByUser(e,[se(t.timerManager.getMapTimeLeft())])}},ce={name:"/mapname",handler(t,e){t.chat.pushSystemByUser(e,[t.roundManager.currentMap])}},me={name:"/rank",handler(t,e){t.chat.pushSystemByUser(e,"RANK",[t.playerDataSync.getRank(e)])}},pe={BOT_PLAYERS_ONLY:"b:0",BOT_INVALID_COUNT:"b:1",BOT_INVALID_TEAM:"b:2",BOT_CREATED_FOR_TEAM:"b:3",BOT_REMOVED_FROM_TEAM:"b:4",BOT_CREATED:"b:5",BOT_REMOVED:"b:6"};class de{constructor({participants:e,coreAdapter:a,panel:n,stat:r,scripted:o}){this._participants=e,this._coreAdapter=a,this._panel=n,this._stat=r,this._model=o.defaultModel,this._respawns=null}createMap(e){this._respawns=e.respawns}createScripted(e,a=null){if(!this._respawns)return 0;const n=this._participants.getPlayableTeams();let r=0;for(let o=0;o<e&&!this._participants.isFull;o+=1){let i=a;if(i||(i=n.sort((l,m)=>this._participants.getTeamSize(l)-this._participants.getTeamSize(m))[0]),!i||!this._respawns[i]||this._participants.getTeamSize(i)>=this._respawns[i].length)continue;const c=this._participants.createScripted({team:i,model:this._model}),p=this._participants.get(c);this._stat.addUser(c,p.teamId,{name:p.name,status:"dead",latency:"BOT"}),this._panel.addUser(c),r+=1}return r}removeScripted(e=null){(e?this._participants.getScripted().filter(n=>n.team===e):this._participants.getScripted()).forEach(n=>this._removeBotById(n.gameId))}removeOneForHuman(e){for(const a of this._participants.getScripted())if(a.team===e)return this._removeBotById(a.gameId),!0;return!1}_removeBotById(e){const a=this._participants.get(e);!a||!a.isScripted||(this._stat.removeUser(e,a.teamId),this._panel.removeUser(e),this._coreAdapter.removePlayer(e),this._participants.remove(e))}getBotById(e){const a=this._participants.get(e);return a&&a.isScripted?a:void 0}getBots(){return this._participants.getScripted()}getCount(){return this._participants.getScripted().length}getCountForTeam(e){return this._participants.getScripted().filter(a=>a.team===e).length}getCountsPerTeam(){const e={};for(const a of this._participants.getScripted())e[a.team]=(e[a.team]||0)+1;return e}}function _e(t){return{scripted:new de(t)}}const fe=t=>(t??"").split(/[?#]/)[0].endsWith(".js"),ue=t=>import(t),he={id:"tanks",engineApi:3,async createCore(t,{wasmUrl:e}){if(fe(e)){const a=await ue(e);return new a.GameCore(t)}return await q({module_or_path:e}),new O(t)},gameConfig:Z,authSchema:ae,chatCommands:[re,oe,ie,le,ce,me],systemMessages:pe,createModules:_e,buildClientGameConfig:()=>te};export{he as default};
|
package/dist/manifest.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "tanks",
|
|
3
3
|
"engineApi": 3,
|
|
4
|
-
"version": "
|
|
5
|
-
"title": "
|
|
4
|
+
"version": "6affb3ab6ef80ae5",
|
|
5
|
+
"title": "Tanks",
|
|
6
6
|
"entries": {
|
|
7
|
-
"client": "/games/tanks/client-
|
|
8
|
-
"host": "/games/tanks/host-
|
|
9
|
-
"wasm": "/games/tanks/assets/vimp_tanks_core_bg-
|
|
7
|
+
"client": "/games/tanks/client-DG0BHnHZ.js",
|
|
8
|
+
"host": "/games/tanks/host-CZOBVbIN.js",
|
|
9
|
+
"wasm": "/games/tanks/assets/vimp_tanks_core_bg-Km6ohK8q.wasm",
|
|
10
10
|
"wasmNode": "./core-node/vimp_tanks_core.js"
|
|
11
11
|
},
|
|
12
12
|
"assetsBase": "/games/tanks/",
|
|
13
13
|
"maps": {
|
|
14
|
-
"version": "
|
|
14
|
+
"version": "171b864217fdf5f4",
|
|
15
15
|
"list": [
|
|
16
16
|
"canopy",
|
|
17
17
|
"garden",
|
package/dist/maps/garden.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"setId":"c1","spriteSheet":{"img":"tiles3.png","frames":[[96,0,32,32],[32,32,32,32],[64,32,32,32],[0,96,32,32]]},"layers":{"1":[0,1,2],"4":[3]},"step":32,"physicsStatic":[2],"physicsDynamic":[{"density":100,"layer":3,"position":[960,64],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,96],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,128],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,160],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,192],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,224],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,256],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,288],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,320],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,352],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[64,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[96,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[128,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[160,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[192,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[224,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[256,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[288,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[320,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[352,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,704],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,736],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,768],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,800],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,832],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,864],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,896],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,928],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[704,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[736,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[768,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[800,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[832,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[864,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[896,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[928,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3456],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3488],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3520],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3552],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3584],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3616],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3648],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3680],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3712],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3744],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3456,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3488,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3520,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3552,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3584,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3616,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3648,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3680,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3712,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3744,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2880],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2912],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2944],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2976],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3008],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3040],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3072],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3104],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2880,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2912,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2944,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2976,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3008,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3040,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3072,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3104,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14}],"respawns":{"team1":[[320,320,45],[320,480,45],[320,640,45],[480,320,45],[480,480,45],[480,640,45],[640,320,45],[640,480,45],[640,640,45],[800,400,45]],"team2":[[3520,3520,225],[3520,3360,225],[3520,3200,225],[3360,3520,225],[3360,3360,225],[3360,3200,225],[3200,3520,225],[3200,3360,225],[3200,3200,225],[3040,3440,225]]},"map":[[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,2,1,2,1,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,1,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,1,1,2,1,1,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,1,2,2,2,2,2,2,2,1,1,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,2,1,2,2,2,2,1,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,1,1,2,2,2,2,2,2,2,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,2,1,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,2,1,2,2,2,1,2,2,2,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,1,2,1,2,2,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,1,2,2,1,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,1,2,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,1,2,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,2,2,1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,1,2,2,2,1,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,2,1,1,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,1,2,2,2,2,1,1,1,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,1,1,1,2,1,2,2,2,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,2,2,1,1,1,2,2,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,1,2,2,2,1,2,2,2,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,2,2,2,2,1,2,1,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,2,2,2,1,1,2,2,1,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,2,2,2,2,2,1,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,1,2,1,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,2,2,1,2,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,2,2,2,1,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,2,2,2,2,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,2,1,1,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,2,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]]}
|
|
1
|
+
{"setId":"c1","spriteSheet":{"img":"tiles3.png","frames":[[96,0,32,32],[32,32,32,32],[64,32,32,32],[0,96,32,32]]},"layers":{"1":[0,1,2],"4":[3]},"step":32,"physicsStatic":[2],"physicsDynamic":[{"density":100,"layer":3,"position":[960,64],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,96],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,128],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,160],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,192],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,224],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,256],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,288],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,320],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,352],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[64,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[96,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[128,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[160,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[192,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[224,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[256,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[288,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[320,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[352,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,704],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,736],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,768],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,800],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,832],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,864],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,896],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,928],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[704,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[736,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[768,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[800,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[832,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[864,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[896,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[928,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[960,960],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3456],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3488],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3520],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3552],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3584],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3616],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3648],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3680],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3712],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3744],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3456,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3488,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3520,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3552,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3584,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3616,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3648,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3680,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3712,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3744,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2880],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2912],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2944],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2976],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3008],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3040],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3072],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,3104],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2848,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2880,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2912,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2944,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[2976,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3008,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3040,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3072,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14},{"density":100,"layer":3,"position":[3104,2848],"angle":0,"img":"b1.png","width":32,"height":32,"linearDamping":5,"angularDamping":14}],"respawns":{"team1":[[320,320,45],[320,480,45],[320,640,45],[480,320,45],[480,480,45],[480,640,45],[640,320,45],[640,480,45],[640,640,45],[800,400,45]],"team2":[[3520,3520,225],[3520,3360,225],[3520,3200,225],[3360,3520,225],[3360,3360,225],[3360,3200,225],[3200,3520,225],[3200,3360,225],[3200,3200,225],[3040,3440,225]]},"map":[[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,2,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,2,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,2,1,2,1,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,2,2,1,2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,1,1,2,2,1,2,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,1,1,2,2,1,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,2,2,1,1,2,1,2,2,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,1,1,2,2,1,1,1,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,1,2,2,2,2,2,1,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,1,2,2,2,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,1,1,1,1,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,1,2,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,2,1,2,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,1,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,1,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,1,2,2,2,1,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,2,1,2,1,1,2,2,1,1,1,1,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,1,1,2,1,2,2,1,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,2,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,1,1,2,2,2,1,2,2,2,2,1,2,1,1,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,1,2,1,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,2,2,2,1,2,2,1,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,2,2,1,1,1,1,2,2,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,1,2,1,1,2,2,2,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,2,2,1,2,2,2,1,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,1,2,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,2,2,1,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,2,1,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vimp-games/tanks",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "VIMP Tanks — игра-плагин для движка VIMP",
|
|
5
5
|
"homepage": "https://github.com/lgick/vimp-tanks#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"globals": "^16.2.0",
|
|
50
50
|
"happy-dom": "^20.10.6",
|
|
51
51
|
"pixi.js": "8.19.0",
|
|
52
|
-
"vimp-engine": "^0.
|
|
52
|
+
"vimp-engine": "^0.11.0",
|
|
53
53
|
"vite": "^7.1.11",
|
|
54
54
|
"vitest": "^4.1.9"
|
|
55
55
|
}
|
package/dist/client-Cqzi-yIP.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Container as C,Assets as H,Sprite as I,Spritesheet as ct,Rectangle as M,Graphics as T,Text as lt,Ticker as P,Particle as dt,ParticleContainer as at,BlurFilter as q}from"pixi.js";const _t=3;class Z{__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,tt.unregister(this),t}free(){const t=this.__destroy_into_raw();d.__wbg_clientcore_free(t,0)}apply_input(t,e,i){const s=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),o=D,r=F(e,d.__wbindgen_malloc,d.__wbindgen_realloc),a=D;d.clientcore_apply_input(this.__wbg_ptr,s,o,r,a,i)}cycle_weapon(t){d.clientcore_cycle_weapon(this.__wbg_ptr,t)}debug_json(){let t,e;try{const i=d.clientcore_debug_json(this.__wbg_ptr);return t=i[0],e=i[1],L(i[0],i[1])}finally{d.__wbindgen_free(t,e,1)}}decode_frame(t){let e,i;try{const s=et(t,d.__wbindgen_malloc),o=D,r=d.clientcore_decode_frame(this.__wbg_ptr,s,o);return e=r[0],i=r[1],L(r[0],r[1])}finally{d.__wbindgen_free(e,i,1)}}hot_ptr(){return d.clientcore_hot_ptr(this.__wbg_ptr)>>>0}hot_values(){const t=d.clientcore_hot_values(this.__wbg_ptr);var e=pt(t[0],t[1]).slice();return d.__wbindgen_free(t[0],t[1]*4,4),e}my_game_id(){return d.clientcore_my_game_id(this.__wbg_ptr)}constructor(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D,s=d.clientcore_new(e,i);if(s[2])throw it(s[1]);return this.__wbg_ptr=s[0],tt.register(this,this.__wbg_ptr,this),this}offset(){return d.clientcore_offset(this.__wbg_ptr)}push_frame(t,e){const i=et(t,d.__wbindgen_malloc),s=D;return d.clientcore_push_frame(this.__wbg_ptr,i,s,e)!==0}reset(){d.clientcore_reset(this.__wbg_ptr)}resync(){d.clientcore_resync(this.__wbg_ptr)}sample(t){return d.clientcore_sample(this.__wbg_ptr,t)>>>0}set_active(t){d.clientcore_set_active(this.__wbg_ptr,t)}set_map(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D,s=d.clientcore_set_map(this.__wbg_ptr,e,i);if(s[1])throw it(s[0])}set_model(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D;d.clientcore_set_model(this.__wbg_ptr,e,i)}sync_panel(t){const e=F(t,d.__wbindgen_malloc,d.__wbindgen_realloc),i=D;d.clientcore_sync_panel(this.__wbg_ptr,e,i)}take_divergence(){let t,e;try{const i=d.clientcore_take_divergence(this.__wbg_ptr);return t=i[0],e=i[1],L(i[0],i[1])}finally{d.__wbindgen_free(t,e,1)}}take_frames(){let t,e;try{const i=d.clientcore_take_frames(this.__wbg_ptr);return t=i[0],e=i[1],L(i[0],i[1])}finally{d.__wbindgen_free(t,e,1)}}try_fire(t){const e=d.clientcore_try_fire(this.__wbg_ptr,t);let i;return e[0]!==0&&(i=L(e[0],e[1]).slice(),d.__wbindgen_free(e[0],e[1]*1,1)),i}}Symbol.dispose&&(Z.prototype[Symbol.dispose]=Z.prototype.free);function ut(){return{__proto__:null,"./vimp_tanks_core_bg.js":{__proto__:null,__wbg_Error_92b29b0548f8b746:function(t,e){return Error(L(t,e))},__wbg___wbindgen_throw_344f42d3211c4765:function(t,e){throw new Error(L(t,e))},__wbindgen_init_externref_table:function(){const t=d.__wbindgen_externrefs,e=t.grow(4);t.set(0,void 0),t.set(e+0,void 0),t.set(e+1,null),t.set(e+2,!0),t.set(e+3,!1)}}}}const tt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(n=>d.__wbg_clientcore_free(n,1));typeof FinalizationRegistry>"u"||new FinalizationRegistry(n=>d.__wbg_gamecore_free(n,1));function pt(n,t){return n=n>>>0,ft().subarray(n/4,n/4+t)}let O=null;function ft(){return(O===null||O.byteLength===0)&&(O=new Float32Array(d.memory.buffer)),O}function L(n,t){return gt(n>>>0,t)}let N=null;function U(){return(N===null||N.byteLength===0)&&(N=new Uint8Array(d.memory.buffer)),N}function et(n,t){const e=t(n.length*1,1)>>>0;return U().set(n,e/1),D=n.length,e}function F(n,t,e){if(e===void 0){const a=W.encode(n),c=t(a.length,1)>>>0;return U().subarray(c,c+a.length).set(a),D=a.length,c}let i=n.length,s=t(i,1)>>>0;const o=U();let r=0;for(;r<i;r++){const a=n.charCodeAt(r);if(a>127)break;o[s+r]=a}if(r!==i){r!==0&&(n=n.slice(r)),s=e(s,i,i=r+n.length*3,1)>>>0;const a=U().subarray(s+r,s+i),c=W.encodeInto(n,a);r+=c.written,s=e(s,i,r,1)>>>0}return D=r,s}function it(n){const t=d.__wbindgen_externrefs.get(n);return d.__externref_table_dealloc(n),t}let $=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});$.decode();const mt=2146435072;let j=0;function gt(n,t){return j+=t,j>=mt&&($=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),$.decode(),j=t),$.decode(U().subarray(n,n+t))}const W=new TextEncoder;"encodeInto"in W||(W.encodeInto=function(n,t){const e=W.encode(n);return t.set(e),{read:n.length,written:e.length}});let D=0,d;function yt(n,t){return d=n.exports,O=null,N=null,d.__wbindgen_start(),d}async function xt(n,t){if(typeof Response=="function"&&n instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(n,t)}catch(s){if(n.ok&&e(n.type)&&n.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",s);else throw s}const i=await n.arrayBuffer();return await WebAssembly.instantiate(i,t)}else{const i=await WebAssembly.instantiate(n,t);return i instanceof WebAssembly.Instance?{instance:i,module:n}:i}function e(i){switch(i){case"basic":case"cors":case"default":return!0}return!1}}async function wt(n){if(d!==void 0)return d;n!==void 0&&(Object.getPrototypeOf(n)===Object.prototype?{module_or_path:n}=n:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),n===void 0&&(n=new URL("/assets/vimp_tanks_core_bg-BwZfbGdm.wasm",import.meta.url));const t=ut();(typeof n=="string"||typeof Request=="function"&&n instanceof Request||typeof URL=="function"&&n instanceof URL)&&(n=fetch(n));const{instance:e,module:i}=await xt(await n,t);return yt(e)}const St='@charset "UTF-8";#panel table td#panel-bullet:before{content:"bullet: "}#panel table td#panel-bomb:before{content:"bomb: "}#panel table td#panel-time:before{content:"time: "}#vimp{background:#222;position:absolute;inset:0;margin:auto;z-index:1}#radar{position:absolute;right:1%;top:35px;z-index:2;border-radius:50%;background-color:#00be5acc;box-shadow:inset 0 0 47px #ee6,0 0 0 3px #054}#team1{color:#f56}#team2{color:#7ed}#spectators{color:#fe5}#team1 tHead tr,#team2 tHead tr,#spectators tHead tr{border-bottom:1px solid #888;text-transform:capitalize;font-weight:700}#team1 tBody tr,#team2 tBody tr{border-bottom:1px solid #444}#team1 tHead td:first-child:before{content:"team1 ("}#team1 tHead td:first-child:after{content:")"}#team2 tHead td:first-child:before{content:"team2 ("}#team2 tHead td:first-child:after{content:")"}#spectators tHead td:first-child:before{content:"spectators"}#spectators tBody td:nth-child(1){padding:0 1%;line-height:1.4em}#spectators tBody td:nth-child(2),#spectators tBody td:nth-child(3),#spectators tBody td:nth-child(4),#spectators tBody td:nth-child(5){display:none}',k=(n,t,e)=>n+(t-n)*e,Q=(n,t,e)=>Math.min(e,Math.max(t,n)),bt=n=>n*(Math.PI/180),Tt=n=>{for(;n>Math.PI;)n-=Math.PI*2;for(;n<-Math.PI;)n+=Math.PI*2;return n},v=(n,t)=>Math.random()*(t-n)+n;class Mt extends C{constructor(t,e,i){if(super(),this._baseTexturePromise=null,this._assetUrl=null,this._renderer=i.renderer,this._imageBase=null,this.scale=t.scale,this.sprite=null,this.mapSprite=null,typeof i.assetsBase!="string"){console.error("Map: сервис assetsBase недоступен — карта останется пустой. Объявите assetsBase в componentDependencies и запустите игру на vimp-engine >= 0.9.0");return}this._imageBase=`${i.assetsBase}img/`,t.type==="static"?(this._assetUrl=`${this._imageBase}${t.spriteSheet.img}`,this._baseTexturePromise=H.load(this._assetUrl),this._map=t.map,this._tiles=t.tiles,this._spriteSheetData=t.spriteSheet,this._step=t.step,this.zIndex=t.layer||1,this.createStatic()):t.type==="dynamic"&&(this._assetUrl=`${this._imageBase}${t.img}`,this._baseTexturePromise=H.load(this._assetUrl),this.zIndex=t.layer||2,this._rotation=bt(t.angle),this._width=t.width,this._height=t.height,this._x=t.position[0],this._y=t.position[1],this.createDynamic())}async createDynamic(){try{const t=await this._baseTexturePromise;this.sprite=new I(t),this.sprite.x=this._x,this.sprite.y=this._y,this.sprite.width=this._width,this.sprite.height=this._height,this.sprite.rotation=this._rotation,this.addChild(this.sprite)}catch(t){console.error(`Failed to create dynamic map with asset ${this._assetUrl}:`,t)}}async createStatic(){try{const t={};this._spriteSheetData.frames.forEach((h,f)=>{const[_,m,u,g]=h;t[`frame${f}`]={frame:{x:_,y:m,w:u,h:g}}});const e={frames:t,meta:{scale:"1"}},i=await this._baseTexturePromise,s=new ct(i,e);await s.parse();const o=this._map[0].length*this._step,r=this._map.length*this._step,a=new C;for(let h=0,f=this._map.length;h<f;h+=1)for(let _=0,m=this._map[h].length;_<m;_+=1){const u=this._map[h][_];if(this._tiles.includes(u)){const g=`frame${u}`,p=s.textures[g];if(p){const y=new I(p);y.x=_*this._step,y.y=h*this._step,a.addChild(y)}else console.warn(`Texture not found. Tile: ${u}, sprite: ${g}`)}}const c=this._renderer.generateTexture({target:a,frame:new M(0,0,o,r)});a.destroy({children:!0}),this.mapSprite=new I(c),this.addChild(this.mapSprite)}catch(t){console.error(`Failed to create static map with asset ${this._assetUrl}:`,t)}}update(t){this.sprite&&(this.sprite.x=t[0]/this.scale.x,this.sprite.y=t[1]/this.scale.y,this.sprite.rotation=t[2])}destroy(t){this.mapSprite&&(this.mapSprite.destroy({children:!0,texture:!0,textureSource:!0}),this.mapSprite=null),super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this._assetUrl&&H.cache.has(this._assetUrl)&&H.unload(this._assetUrl).catch(e=>console.warn(`Failed to unload asset ${this._assetUrl} (was in cache):`,e)),this.sprite=null,this._baseTexturePromise=null,this._assetUrl=null,this._map=null,this._tiles=null,this._spriteSheetData=null,this._renderer=null}}class kt extends C{constructor(t){super(),this._map=t.map,this._physicsStatic=t.physicsStatic,this._step=t.step,this.zIndex=2,this.scale=t.scale,this.radarGraphics=new T,this.addChild(this.radarGraphics),this.createRadarMap()}createRadarMap(){const t=this.radarGraphics;if(t.clear(),Array.isArray(this._map))for(let e=0;e<this._map.length;e+=1){const i=this._map[e];if(Array.isArray(i))for(let s=0;s<i.length;s+=1){const o=i[s];this._physicsStatic.includes(o)&&t.rect(s*this._step,e*this._step,this._step/2,this._step/2)}}t.fill(16777215)}update(){}destroy(t){super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this.radarGraphics=null,this._map=null,this._physicsStatic=null}}class vt extends C{constructor(t,e){super(),this.zIndex=2,this._textures=e.tankRadarTexture,this.body=new I,this.body.anchor.set(.5),this.addChild(this.body),this.x=t[0]||0,this.y=t[1]||0,this._condition=t[7],this._teamId=t[9],this.scale.set(5,5),this.create()}create(){this._condition===0?this.body.texture=this._textures.destroyed:this._teamId===1?this.body.texture=this._textures.liveTeamId1:this._teamId===2&&(this.body.texture=this._textures.liveTeamId2)}update(t){this.x=t[0],this.y=t[1];const e=t[7],i=t[9];let s=!1;e!==void 0&&e!==this._condition&&(this._condition=e,s=!0),i!==void 0&&i!==this._teamId&&(this._teamId=i,s=!0),s&&this.create()}destroy(t){super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this.body=null,this._textures=null}}const It=1,st=1.1,Ct=1.18,Dt=.9,At=1;function Pt(n){const t=Q(n,0,1),e=Math.max(0,n-1),i=k(It,st,t)+(Ct-st)*e,s=k(Dt,At,t);return{rate:i,volumeFactor:s}}class Et extends C{constructor(t,e,i){super(),this.zIndex=3,this.body=new I,this.gun=new I,this.wreck=new I,this.body.anchor.set(.5),this.wreck.anchor.set(.5),this.addChild(this.body,this.gun,this.wreck),this._textures=e.tankTexture,this.x=t[0]||0,this.y=t[1]||0,this.rotation=t[2]||0,this.gun.rotation=t[3]||0,this._engineLoad=t[6]||0,this._condition=t[7],this._size=t[8],this._teamId=t[9];const s=this._teamId===1?this._textures.liveTeamId1:this._textures.liveTeamId2,o=s?s.gunAnchor:null;o?this.gun.anchor.set(o.x,o.y):this.gun.anchor.set(.5);const a=this._size/10;this.body.scale.set(a),this.gun.scale.set(a),this.wreck.scale.set(a),this._soundManager=i.soundManager,this._soundId=null;const c=this._soundManager.getSoundConfig("tankEngine");this._baseEngineVolume=c?.volume||0,this._hasEngineSound=!!c,this.create()}_initSounds(){this._soundId||this._condition===0||!this._hasEngineSound||(this._soundId=this._soundManager.registerSound("tankEngine",this._getSoundData()))}_getSoundData(){const{rate:t,volumeFactor:e}=Pt(this._engineLoad);return{position:{x:this.x,y:this.y},rate:t,volume:this._baseEngineVolume*e}}create(){if(this._condition===0)this.body.visible=!1,this.gun.visible=!1,this.wreck.texture=this._textures.destroyed,this.wreck.visible=!0,this.gun.rotation=0,this.destroySounds();else{this.wreck.visible=!1;let t;this._teamId===1?t=this._textures.liveTeamId1:this._teamId===2&&(t=this._textures.liveTeamId2),this.body.texture=t.body,this.gun.texture=t.gun,this.body.visible=!0,this.gun.visible=!0,this._initSounds()}}update(t){this.x=t[0],this.y=t[1],this.rotation=t[2],this.gun.rotation=t[3],this._engineLoad=t[6],this._condition>0&&(this._soundId===null?this._initSounds():this._soundManager.updateSoundData(this._soundId,this._getSoundData()));const e=t[7],i=t[9];let s=!1;e!==void 0&&e!==this._condition&&(this._condition=e,s=!0),i!==void 0&&i!==this._teamId&&(this._teamId=i,s=!0),s&&this.create()}destroySounds(){this._soundId&&(this._soundManager.unregisterSound(this._soundId),this._soundId=null)}destroy(t){this.destroySounds(),super.destroy({children:!0,texture:!1,textureSource:!1,...t})}}class Rt extends C{constructor(t,e,i){super(),this.zIndex=2,this.body=new I(e.bombTexture),this.body.anchor.set(.5),this.x=t[0],this.y=t[1],this.rotation=t[2],this._size=t[3],this._totalDurationMs=t[4],this._soundManager=i.soundManager,this._soundId=null;const s=e.bombTexture.width,o=this._size/s;this.body.scale.set(o);const r=64,a=this._size/1.2/r;this.text=new lt({style:{fontFamily:"Arial",fontSize:r,fill:16777215,align:"center"}}),this.text.anchor.set(.5),this.text.scale.set(a),this.text.x=0,this.text.y=0,this._accumulatedTimeMs=0,this._secondsLeft="",this.addChild(this.body,this.text),this._updateTimerDisplay(this._totalDurationMs),this._tickListener=c=>this._updateTimer(c.deltaMS),P.shared.add(this._tickListener),this._soundId=this._soundManager.registerSound("bombHasBeenPlanted",{position:{x:this.x,y:this.y}})}_updateTimer(t){this._accumulatedTimeMs+=t;const e=Math.max(0,this._totalDurationMs-this._accumulatedTimeMs);this._updateTimerDisplay(e),e<=0&&(this._stopTimer(),this._updateTimerDisplay(0))}_updateTimerDisplay(t){const e=Math.round(t/1e3);this._secondsLeft!==e&&(this._secondsLeft=e,this.text.text=`${this._secondsLeft}`)}update(t){this.x=t[0],this.y=t[1],this.rotation=t[2],this._soundId&&(this._soundManager.updateSoundData(this._soundId,{position:{x:this.x,y:this.y}})||(this._soundId=null))}_stopTimer(){this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null)}destroy(t){this._stopTimer(),this._soundId&&(this._soundManager.releaseSound(this._soundId),this._soundId=null),super.destroy({children:!0,texture:!1,textureSource:!1,...t}),this.body=null,this.text=null}}class V extends C{constructor(t){super(),this._tickListener=null,this._isStarted=!1,this.isComplete=!1,this.onComplete=t}run(){this.isComplete||this._isStarted||(this._isStarted=!0,this._tickListener=t=>this._update(t.deltaMS),P.shared.add(this._tickListener),this._onEffectStart(),this.isComplete||this._update(0))}_onEffectStart(){}_update(){}_completeEffect(){this.isComplete||(this.isComplete=!0,this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null),typeof this.onComplete=="function"&&this.onComplete())}destroy(t){this.isComplete=!0,this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null),this.parent&&this.parent.removeChild(this),super.destroy({texture:!1,textureSource:!1,...t,children:!0})}}const nt=50;class Lt extends V{constructor(t,e,i,s,o){super(s);const r=o.explosionTexture;this.x=t,this.y=e,this._radius=i,this._durationMs=3e3,this._elapsedMs=0;const a=this._radius/nt;this._mainBody=new I(r),this._mainBody.anchor.set(.5),this._mainBody.tint=11393254,this._mainBody.scale.set(a),this._core=new I(r),this._core.anchor.set(.5),this._core.tint=13882323,this._core.scale.set(a),this.addChild(this._mainBody,this._core)}_update(t){if(!this.isComplete)if(this._elapsedMs+=t,this._elapsedMs<=this._durationMs){const e=this._elapsedMs/this._durationMs;this._draw(e)}else this._completeEffect()}_draw(t){const e=o=>o*o,i=this._radius/nt;this._mainBody.alpha=.6*(1-e(t));const s=Math.min(1,t*1.5);this._core.alpha=.7-s,this._core.scale.set(i*(1-s))}destroy(t){super.destroy(t)}}const K=[],Y={get(n){if(K.length>0){const t=K.pop();return t.texture=n,t.alpha=1,t.scaleX=1,t.scaleY=1,t.rotation=0,t.tint=16777215,t.anchorX=.5,t.anchorY=.5,t}return new dt({texture:n,anchorX:.5,anchorY:.5})},release(n){n&&K.push(n)}},rt=400,ot=800;class Ft extends V{constructor(t){super(),this.explosionTexture=t.explosionTexture,this._particleContainer=new at({texture:this.explosionTexture,boundsArea:new M(-rt/2,-ot/2,rt,ot),dynamicProperties:{position:!0,vertex:!0,rotation:!0,color:!0}}),this.addChild(this._particleContainer),this._particles=[],this._isSpawning=!0,this._particleSpawnRateMs=50,this._particleMaxLifeMs=2e3,this._minStartScale=.02,this._maxStartScale=.05,this._startAlpha=.1,this._initialOffsetX=15,this._initialOffsetY=15,this._lastSpawnTime=0;for(let e=0;e<30;e+=1)this._createParticle()}stopSpawning(){this._isSpawning=!1}_createParticle(){const t=Y.get(this.explosionTexture),e=.2+Math.random()*.4,i=Math.floor(e*255);t.tint=i<<16|i<<8|i;const s=this._minStartScale+Math.random()*(this._maxStartScale-this._minStartScale),o=.6+Math.random()*.8,r=.6+Math.random()*.8;t.scaleX=s*o,t.scaleY=s*r,t.alpha=this._startAlpha+Math.random()*.1,t.rotation=Math.random()*Math.PI*2,t.x=(Math.random()-.5)*this._initialOffsetX,t.y=(Math.random()-.5)*this._initialOffsetY;const a={view:t,life:0,maxLife:this._particleMaxLifeMs*(.7+Math.random()*.6),aspectRatioX:o,aspectRatioY:r,vx:(Math.random()-.5)*.2,vy:-.3-Math.random()*.4,swaySpeed:.002+Math.random()*.003,swayAmp:.025+Math.random()*.05,swayOffset:Math.random()*100,rotationSpeed:(Math.random()-.5)*.05,targetScale:.08+Math.random()*.08,startScale:s};this._particleContainer.addParticle(t),this._particles.push(a)}_update(t){if(!this.isComplete){if(t=Math.min(t,100),this._isSpawning)for(this._lastSpawnTime+=t;this._lastSpawnTime>this._particleSpawnRateMs;)this._createParticle(),this._lastSpawnTime-=this._particleSpawnRateMs;for(let e=this._particles.length-1;e>=0;e-=1){const i=this._particles[e],s=i.view;if(i.life+=t,i.life>=i.maxLife)this._particleContainer.removeParticle(s),Y.release(s),this._particles.splice(e,1);else{const o=i.life/i.maxLife;i.vy*=.98,i.vx*=.95;const r=Math.sin(i.life*i.swaySpeed+i.swayOffset)*i.swayAmp;s.x+=(i.vx+r)*(t/16),s.y+=i.vy*(t/16),s.rotation+=i.rotationSpeed*(t/16);const a=1-Math.pow(1-o,3),c=i.startScale+(i.targetScale-i.startScale)*a;if(s.scaleX=c*i.aspectRatioX,s.scaleY=c*i.aspectRatioY,o<.1)s.alpha=o/.1*this._startAlpha;else if(o>.4){const h=(o-.4)/.6;s.alpha=this._startAlpha*(1-h)}else s.alpha=this._startAlpha}}!this._isSpawning&&this._particles.length===0&&this._isStarted&&(this._completeEffect(),this.destroyed||this.destroy())}}destroy(t){for(let e=0;e<this._particles.length;e+=1)Y.release(this._particles[e].view);this._particles=[],super.destroy(t)}}const Xt=50,Yt=15;class zt extends V{constructor(t,e,i,s){super(i),this._assets=s,this.x=t,this.y=e,this._funnelDurationMs=2e4,this._funnelFadeDurationMs=4e3,this._elapsedMs=0,this._isFading=!1,this._smokeDurationMs=4e3,this._smokeSpawningStopped=!1,this._funnel=this._createFunnelSprite(),this._smoke=new Ft(this._assets),this.addChild(this._funnel,this._smoke)}_createFunnelSprite(){const t=this._assets.funnelTexture,e=new I(t);e.anchor.set(.5),e.tint=3815994;const i=Yt/(Xt*2);return e.scale.set(i),e}_onEffectStart(){super._onEffectStart(),this._smoke&&this._smoke.run()}_update(t){if(this.isComplete)return;this._elapsedMs+=t,!this._smokeSpawningStopped&&this._elapsedMs>=this._smokeDurationMs&&(this._smoke.stopSpawning(),this._smokeSpawningStopped=!0);const e=this._funnelDurationMs-this._elapsedMs;if(e<=this._funnelFadeDurationMs){this._isFading||(this._isFading=!0);const i=e/this._funnelFadeDurationMs;this._funnel.alpha=Math.max(0,i)}e<=0&&this._completeEffect()}destroy(t){this._smoke&&(this._smoke.destroy(),this._smoke=null),this._funnel=null,super.destroy(t)}}class Bt extends C{constructor(t,e,i){super(),this.originX=t[0],this.originY=t[1],this.radius=t[2],this._assets=e,this._soundManager=i.soundManager,this.x=this.originX,this.y=this.originY,this.explosion=null,this.funnel=null,this._isDestroyed=!1,this._soundId=this._soundManager.registerSound("explosion",{position:{x:this.originX,y:this.originY}})}run(){if(this._isDestroyed)return;const t=this.parent;this.funnel=new zt(this.originX,this.originY,this._onFunnelComplete.bind(this),this._assets),this.funnel.zIndex=2,t.addChild(this.funnel),this.explosion=new Lt(this.originX,this.originY,this.radius,this._onExplosionComplete.bind(this),this._assets),this.explosion.zIndex=4,t.addChild(this.explosion),this.funnel.run(),this.explosion.run()}_onExplosionComplete(){this._isDestroyed||this.explosion&&(this.explosion.destroy(),this.explosion=null)}_onFunnelComplete(){this._isDestroyed||this.destroy()}destroy(){this._isDestroyed||(this._isDestroyed=!0,this._soundId&&(this._soundManager.unregisterSound(this._soundId),this._soundId=null),this.explosion&&(this.explosion.destroy(),this.explosion=null),this.funnel&&(this.funnel.destroy(),this.funnel=null),this.parent&&this.parent.removeChild(this),super.destroy({children:!0}))}}const X=400,Ot=0,Nt=0,b={particleLifetime:{min:800,max:1800},particleStartSizeFactor:{1:2,2:1,0:.25},particleEndSizeFactor:{1:3,2:2,0:1},particleStartAlpha:.08,particleEndAlpha:0,particleColor:3355443,particleSpawnRate:{1:60,2:50,0:30},particleInitialVelocity:{away:{min:-10,max:100},side:{min:-30,max:30}},airResistance:.92,particleVelocityVariance:10,streamOffsetFactor:.1,burstParticleCount:3};class Ut extends C{constructor(t,e){super(),this.zIndex=4,this._smokeTexture=e.smokeTexture,this._emitterX=t[0],this._emitterY=t[1],this._emitterRotation=t[2],this._emitterVX=t[4],this._emitterVY=t[5],this._engineLoad=t[6],this._condition=t[7],this._size=t[8],this._width=this._size*4,this._height=this._size*3,this._particleScaleMultiplier=Math.max(.5,Math.sqrt(this._width*this._height*.001)),this._particles=[],this._particleContainer=new at({texture:this._smokeTexture,boundsArea:new M(this._emitterX-X,this._emitterY-X,X*2,X*2),dynamicProperties:{position:!0,vertex:!0,rotation:!0,color:!0}}),this.addChild(this._particleContainer),this._timeSinceLastSpawn=0,this._tickListener=i=>this._updateParticles(i.deltaMS),P.shared.add(this._tickListener)}update(t){const e=this._condition;this._emitterX=t[0],this._emitterY=t[1],this._emitterRotation=t[2],this._emitterVX=t[4],this._emitterVY=t[5],this._engineLoad=t[6],this._condition=t[7],this._particleContainer.boundsArea.x=this._emitterX-X,this._particleContainer.boundsArea.y=this._emitterY-X,this._condition!==e&&this._condition!==3&&this._triggerSmokeBurst()}_triggerSmokeBurst(){let t=0;if(this._condition===1?t=2:(this._condition===2||this._condition===0)&&(t=1),t>0){const e=b.burstParticleCount,i=Math.ceil(e/t);for(let s=0;s<i;s+=1)for(let o=0;o<t;o+=1)this.spawnParticle(o,t,!0)}}_updateParticles(t){if(t<=0)return;const e=t/1e3;this._timeSinceLastSpawn+=t;let i=0;this._condition===3?i=0:this._condition===1?i=2:(this._condition===2||this._condition===0)&&(i=1);const s=b.particleSpawnRate[this._condition]||0,o=s>0?1e3/s:1/0;if(i>0&&s>0)for(;this._timeSinceLastSpawn>=o;){for(let c=0;c<i;c+=1)this.spawnParticle(c,i);this._timeSinceLastSpawn-=o}else this._timeSinceLastSpawn=0;const a=1-Math.pow(b.airResistance,t/16);for(let c=this._particles.length-1;c>=0;c-=1){const h=this._particles[c];if(h.age+=t,h.age>=h.lifetime){this._particleContainer.removeParticle(h.view),Y.release(h.view),this._particles.splice(c,1);continue}h.vx=h.vx+(Ot-h.vx)*a,h.vy=h.vy+(Nt-h.vy)*a,h.x+=h.vx*e,h.y+=h.vy*e;const f=h.age/h.lifetime,_=1-(1-f)*(1-f),m=k(h.startSizeFactor,h.endSizeFactor,_),u=k(h.startAlpha,h.endAlpha,f),g=m*this._particleScaleMultiplier,p=h.view;p.x=h.x,p.y=h.y,p.scaleX=g,p.scaleY=g,p.alpha=u,p.rotation+=h.rotSpeed*e}}spawnParticle(t,e,i=!1){const s=v(b.particleLifetime.min,b.particleLifetime.max);let o=b.particleStartSizeFactor[this._condition]||.3,r=b.particleEndSizeFactor[this._condition]||1,a=b.particleStartAlpha,c=1;i&&(o*=2,r*=2.5,a=.8,c=2);const h=this._emitterRotation,f=h+Math.PI,_=Math.cos(f),m=Math.sin(f),u=h+Math.PI/2,g=Math.cos(u),p=Math.sin(u);let y=0;const x=this._width/2*b.streamOffsetFactor;e===2?y=t===0?-x:x:e===3&&(y=(t-1)*x);const w=this._height*.22,S=this._emitterX+_*w+g*y,l=this._emitterY+m*w+p*y;let R=v(b.particleInitialVelocity.away.min,b.particleInitialVelocity.away.max),z=v(b.particleInitialVelocity.side.min,b.particleInitialVelocity.side.max);R*=c,z*=c;let E=_*R+g*z,B=m*R+p*z;const G=b.particleVelocityVariance;E+=v(-G,G),B+=v(-G,G),E+=this._emitterVX,B+=this._emitterVY;const A=Y.get(this._smokeTexture);A.tint=b.particleColor,A.x=S,A.y=l,A.alpha=a;const J=o*this._particleScaleMultiplier;A.scaleX=J,A.scaleY=J,A.rotation=v(0,Math.PI*2);const ht={view:A,x:S,y:l,vx:E,vy:B,age:0,lifetime:s,startSizeFactor:o,endSizeFactor:r,startAlpha:a,endAlpha:b.particleEndAlpha,rotSpeed:v(-1,1)};this._particleContainer.addParticle(A),this._particles.push(ht)}_stopTimer(){this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null)}destroy(t){this._stopTimer();for(let e=0;e<this._particles.length;e+=1)Y.release(this._particles[e].view);this._particles=[],super.destroy({texture:!1,textureSource:!1,...t,children:!0})}}class Wt extends I{constructor(t,e,i,s,o,r,a){super(a),this.anchor.set(.5),this.x=t,this.y=e,this.rotation=i,this.width=o,this.height=s,this.alpha=r,this._initialAlpha=r,this._elapsedTime=0,this._fadeDuration=1800+Math.random()*700}update(t){this._elapsedTime+=t;const e=Math.min(this._elapsedTime/this._fadeDuration,1);return this.alpha=(1-e)*this._initialAlpha,e>=1}}class Vt extends C{constructor(t,e){super(),this.zIndex=1,this._currentX=t[0]||0,this._currentY=t[1]||0,this._currentRotation=t[2]||0,this._engineLoad=t[6]||0,this._condition=t[7],this._size=t[8],this._prevX=this._currentX,this._prevY=this._currentY,this._prevRotation=this._currentRotation,this._prevSpeed=0,this._prevAngularSpeed=0,this._assets=e,this._trackMarkCooldown=2,this._lastTrackMarkTime=0,this._minAbsAccelerationForMark=4,this._minAngularSpeedForMark=.02,this._minRotationAccelerationForMark=.4,this._minSpeedForRotationMarks=1.4,this._trackWidth=this._size*.4,this._trackLength=this._size*.5;const i=this._size*3;this._trackOffset=i/2*.7,this._backwardOffset=i*.4,this._trackInitialAlpha=.4,this._tickListener=s=>this._internalUpdate(s.deltaMS),P.shared.add(this._tickListener)}update(t){this._currentX=t[0],this._currentY=t[1],this._currentRotation=t[2],this._engineLoad=t[6],this._condition=t[7]}_internalUpdate(t){if(t<=0)return;for(let u=this.children.length-1;u>=0;u-=1){const g=this.children[u];g.update(t)&&g.destroy()}const e=this._currentX-this._prevX,i=this._currentY-this._prevY,s=Math.sqrt(e*e+i*i),o=Tt(this._currentRotation-this._prevRotation),r=Math.abs(o),a=s-this._prevSpeed,c=Math.abs(a),h=r-this._prevAngularSpeed,f=Math.abs(h),_=performance.now();let m=!1;this._condition!==0&&_-this._lastTrackMarkTime>this._trackMarkCooldown&&(c>this._minAbsAccelerationForMark&&(m=!0),s>this._minSpeedForRotationMarks&&(r>this._minAngularSpeedForMark||f>this._minRotationAccelerationForMark)&&(m=!0)),this._engineLoad>1&&(m=!0),m&&(this.createTrackMarksAtPreviousPosition(),this._lastTrackMarkTime=_),this._prevX=this._currentX,this._prevY=this._currentY,this._prevRotation=this._currentRotation,this._prevSpeed=s,this._prevAngularSpeed=r}createTrackMarksAtPreviousPosition(){for(let t=-1;t<=1;t+=2){const e=Math.cos(this._prevRotation+Math.PI/2)*this._trackOffset*t,i=Math.sin(this._prevRotation+Math.PI/2)*this._trackOffset*t,s=-Math.cos(this._prevRotation)*this._backwardOffset,o=-Math.sin(this._prevRotation)*this._backwardOffset,r=this._prevX+e+s,a=this._prevY+i+o,c=new Wt(r,a,this._prevRotation,this._trackWidth,this._trackLength,this._trackInitialAlpha,this._assets.trackMarkTexture);this.addChild(c)}}_stopTimer(){this._tickListener&&(P.shared.remove(this._tickListener),this._tickListener=null)}destroy(t){this._stopTimer(),super.destroy({children:!0,texture:!1,textureSource:!1,...t})}}class Gt extends V{constructor(t,e,i,s,o){super(o),this.startPositionX=t,this.startPositionY=e,this.endPositionX=i,this.endPositionY=s,this.config={color:16777113,alphaStart:1,alphaEnd:.6,trailLength:55,tracerSpeed:19e3,minDuration:45,maxDuration:80,trailShrinkPower:1,trailStartOffset:30,segmentCount:12,segmentRadius:1,alphaPulseFrequency:.1,alphaPulseAmplitude:.15},this.graphics=new T,this.addChild(this.graphics),this.elapsedTime=0,this.dx=this.endPositionX-this.startPositionX,this.dy=this.endPositionY-this.startPositionY,this.totalDist=Math.hypot(this.dx,this.dy),this.totalDist>.001?(this.nx=this.dx/this.totalDist,this.ny=this.dy/this.totalDist,this.animationDuration=this.totalDist/this.config.tracerSpeed*1e3):(this.nx=0,this.ny=0,this.totalDist=0,this.animationDuration=this.config.minDuration),this.animationDuration=Math.max(this.config.minDuration,this.animationDuration),this.animationDuration=Math.min(this.config.maxDuration,this.animationDuration),this.animationDuration<=0&&(this.animationDuration=this.config.minDuration)}_drawSegment(t,e,i,s,o){this.graphics.circle(t,e,i),this.graphics.fill({color:s,alpha:Q(o,0,1)})}_update(t){if(this.isComplete)return;this.elapsedTime+=t,this.graphics.clear();const e=Math.min(this.elapsedTime/this.animationDuration,1);if(e>0){const i=k(this.startPositionX,this.endPositionX,e),s=k(this.startPositionY,this.endPositionY,e),o=k(this.config.alphaStart,this.config.alphaEnd,e),r=Math.sin(this.elapsedTime*this.config.alphaPulseFrequency)*this.config.alphaPulseAmplitude;let a=o+r;a=Q(a,0,this.config.alphaStart);const c=Math.pow(e,this.config.trailShrinkPower),h=k(this.config.trailLength,0,c),f=this.totalDist*e;if(f>=this.config.trailStartOffset){let _=f;this.totalDist>.001&&(_=Math.max(0,f-this.config.trailStartOffset));const m=Math.min(_,h);let u,g;this.totalDist>.001?(u=i-this.nx*m,g=s-this.ny*m):(u=i,g=s);const p=Math.hypot(i-u,s-g);if(p<this.config.segmentRadius*.5&&this.totalDist===0)this._drawSegment(i,s,this.config.segmentRadius,this.config.color,a);else if(p>=this.config.segmentRadius*.5){const y=Math.max(1,this.config.segmentCount);for(let x=0;x<y;x++){let w=.5;y>1&&(w=x/(y-1));const S=k(u,i,w),l=k(g,s,w),R=k(1,.8,w);this._drawSegment(S,l,this.config.segmentRadius,this.config.color,a*R)}}}}this.elapsedTime>=this.animationDuration&&(this.graphics.clear(),this._completeEffect())}destroy(t){this.graphics&&this.graphics.clear(),super.destroy(t)}}const Ht=10;class $t extends V{constructor(t,e,i,s,o,r){super(o),this.x=t,this.y=e,this._assets=r,this._particleTexture=this._assets.impactParticleTexture,this.config={particleCount:v(2,4),particleMinSize:1,particleMaxSize:3,minInitialSpeed:10,maxInitialSpeed:300,minLifetime:8e3,maxLifetime:15e3,color:[3355443,2236962,4473924],fadeOutStart:.8,impactDirectionX:i,impactDirectionY:s,spreadAngle:60,dragCoefficient:13,minSpeedThreshold:1,lingerDuration:6e3},this.config.impactDirectionX===0&&this.config.impactDirectionY===0?this.useOmnidirectionalSpread=!0:this.useOmnidirectionalSpread=!1,this.particlesData=[],this.elapsedTime=0,this._createParticles()}_createParticles(){let t;this.useOmnidirectionalSpread||(t=Math.atan2(this.config.impactDirectionY,this.config.impactDirectionX));const i=this.config.spreadAngle*(Math.PI/180)/2;for(let s=0,o=this.config.particleCount;s<o;s+=1){let r;this.useOmnidirectionalSpread?r=Math.random()*Math.PI*2:r=t+v(-i,i);const a=v(this.config.minInitialSpeed,this.config.maxInitialSpeed),c=new I(this._particleTexture);c.anchor.set(.5);const h={sprite:c,x:0,y:0,vx:Math.cos(r)*a,vy:Math.sin(r)*a,size:v(this.config.particleMinSize,this.config.particleMaxSize),color:Array.isArray(this.config.color)?this.config.color[Math.floor(Math.random()*this.config.color.length)]:this.config.color,lifetime:v(this.config.minLifetime,this.config.maxLifetime),age:0,alpha:1,active:!0,isMoving:!0,timeSinceStopped:0};c.tint=h.color,this.particlesData.push(h),this.addChild(c)}}_update(t){if(this.isComplete)return;this.elapsedTime+=t;const e=t/1e3;let i=0;for(let s=0,o=this.particlesData.length;s<o;s+=1){const r=this.particlesData[s];if(!r.active)continue;if(i+=1,r.age+=t,r.isMoving){const f=Math.hypot(r.vx,r.vy);if(f>0){const m=f*this.config.dragCoefficient*e,u=Math.max(0,1-m/f);r.vx*=u,r.vy*=u}r.x+=r.vx*e,r.y+=r.vy*e,Math.hypot(r.vx,r.vy)<this.config.minSpeedThreshold&&(r.isMoving=!1,r.vx=0,r.vy=0)}else r.timeSinceStopped+=t;const a=r.age/r.lifetime;if(!r.isMoving&&r.timeSinceStopped>=this.config.lingerDuration){const f=r.timeSinceStopped-this.config.lingerDuration,_=Math.min(500,r.lifetime*(1-this.config.fadeOutStart));r.alpha=k(1,0,Math.min(f/_,1))}else if(a>=this.config.fadeOutStart){const f=r.age-r.lifetime*this.config.fadeOutStart,_=r.lifetime*(1-this.config.fadeOutStart);r.alpha=_>0?k(1,0,Math.min(f/_,1)):0}(r.age>=r.lifetime||r.alpha<.01)&&(r.active=!1,r.alpha=0);const c=r.sprite;c.position.set(r.x,r.y),c.alpha=r.alpha,c.visible=r.active;const h=r.size/Ht;c.scale.set(h)}i===0&&this._isStarted&&this._completeEffect()}destroy(t){this.particlesData=[],super.destroy(t)}}class qt extends C{constructor(t,e,i){super(),this.zIndex=2,this.startPositionX=t[0],this.startPositionY=t[1],this.endPositionX=t[2],this.endPositionY=t[3],this.soundPositionX=t[4],this.soundPositionY=t[5],this.hit=t[6],this._assets=e,this._soundManager=i.soundManager,this.tracer=null,this.impact=null,this._isDestroyed=!1,this._visualsComplete=!1,this._soundComplete=!1,this._soundId=this._soundManager.registerSound("shot",{position:{x:this.soundPositionX,y:this.soundPositionY}},()=>{this._soundComplete=!0,this._soundId=null,this._tryDestroy()}),this._soundId||(this._soundComplete=!0)}run(){this._isDestroyed||(this.tracer=new Gt(this.startPositionX,this.startPositionY,this.endPositionX,this.endPositionY,this._onTracerComplete.bind(this)),this.addChild(this.tracer),this.tracer.run())}_onTracerComplete(){if(!this._isDestroyed)if(this.hit){const t=this.endPositionX-this.startPositionX,e=this.endPositionY-this.startPositionY,i=Math.hypot(t,e);let s=0,o=0;i>.001&&(s=-(t/i),o=-(e/i)),this.impact=new $t(this.endPositionX,this.endPositionY,s,o,this._onImpactComplete.bind(this),this._assets),this.addChild(this.impact),this.impact.run()}else this._visualsComplete=!0,this._tryDestroy()}_onImpactComplete(){this._isDestroyed||(this._visualsComplete=!0,this._tryDestroy())}_tryDestroy(){this._visualsComplete&&this._soundComplete&&this.destroy()}destroy(){this._isDestroyed||(this._isDestroyed=!0,this._soundId&&(this._soundManager.unregisterSound(this._soundId),this._soundId=null),this.tracer&&(this.tracer.destroy(),this.tracer=null),this.impact&&(this.impact.destroy(),this.impact=null),this.parent&&this.parent.removeChild(this),super.destroy({children:!0}))}}const jt={Map:Mt,MapRadar:kt,TankRadar:vt,Tank:Et,Bomb:Rt,ExplosionEffect:Bt,Smoke:Ut,Tracks:Vt,ShotEffect:qt};function Kt(n,t){const{radius:e,blur:i,color:s}=n,o=new T;o.circle(e+i,e+i,e),o.fill(s),o.filters=[new q({strength:i,quality:40})];const r=t.generateTexture({target:o,frame:new M(0,0,(e+i)*2,(e+i)*2)});return o.destroy(!0),r}function Zt(n,t){const{baseRadius:e,irregularity:i,blur:s,numPoints:o}=n,r=new T,a=(e+i+s)*2,c=a/2,h=[];for(let _=0;_<o;_+=1){const m=_/o*Math.PI*2,u=e+v(-i,i);h.push(c+u*Math.cos(m),c+u*Math.sin(m))}r.poly(h).fill(16777215),r.filters=[new q({strength:s,quality:10})];const f=t.generateTexture({target:r,frame:new M(0,0,a,a)});return r.destroy(!0),f}function Qt(n,t){const{radius:e,blur:i,color:s}=n,o=new T;o.circle(e+i,e+i,e),o.fill(s),o.filters=[new q({strength:i,quality:40})];const r=t.generateTexture({target:o,frame:new M(0,0,(e+i)*2,(e+i)*2)});return o.destroy(!0),r}function Jt(n,t){const{colors:e}=n,i={},s=10,o=s*4,r=s*3,a=15658734,c=f=>{const _=new T,m=new T,u=o,g=r;_.rect(-u/2,-g/2,u,g).fill(5592405).rect(-u/2+1,-g/2+1,u-2,g-2).fill(10066329).rect(-u/2+2,-g/2+2,u-4,g-4).fill(13421772).rect(-u/2+3,-g/2+3,u-6,g-6).fill(a),m.moveTo(1.33*s,-.42*s).lineTo(.42*s,-1*s).lineTo(-.42*s,-1*s).lineTo(-1.33*s,-.42*s).lineTo(-1.33*s,.42*s).lineTo(-.42*s,1*s).lineTo(.42*s,1*s).lineTo(1.33*s,.42*s).closePath().fill(f).stroke({width:.17*s,color:11184810}).moveTo(2.33*s,-.25*s).lineTo(.25*s,-.25*s).lineTo(.25*s,.25*s).lineTo(2.33*s,.25*s).closePath().stroke({width:.17*s,color:11184810}).fill(f);const p=_.getBounds(),y=t.generateTexture({target:_,frame:new M(p.x,p.y,p.width,p.height)}),x=m.getBounds(),w=t.generateTexture({target:m,frame:new M(x.x,x.y,x.width,x.height)}),S={x:-x.x/x.width,y:-x.y/x.height};return _.destroy(!0),m.destroy(!0),{body:y,gun:w,gunAnchor:S}},h=()=>{const f=new C,_=new T,m=new T;f.addChild(_,m);const u=3815994,g=2434341,p=3158064,y=1579032,x=5263440,w=o,S=r,l=s;_.moveTo(-w/2-l*.1,-S/2+l*.2).lineTo(w/2+l*.2,-S/2-l*.1).lineTo(w/2-l*.1,S/2+l*.3).lineTo(-w/2+l*.3,S/2-l*.2).closePath().fill(u).stroke({width:l*.2,color:x,alignment:.5}),_.moveTo(-w/2+l*.4,-S/2+l*.5).lineTo(w/2-l*.3,-S/2+l*.2).lineTo(w/2-l*.4,S/2-l*.1).lineTo(-w/2+l*.2,S/2-l*.4).closePath().fill(g),_.circle(w*.15,S*.1,l*1.2).fill(y),_.circle(-w*.3,-S*.25,l*.5).fill(y),m.position.set(l*.3,-l*.2);const R=[l*1.1,-l*.7,l*.2,-l*1,-l*.6,-l*.9,-l*1.3,-l*.2,-l*1.1,l*.6,-l*.2,l*1,l*.7,l*.8,l*1.3,l*.1];m.poly(R).fill(p).stroke({width:l*.15,color:x,alignment:0});const z=[l*.8,-l*.25,l*1.5,-l*.4,l*1.4,l*.15,l*.7,l*.05];m.poly(z).fill(p).stroke({width:l*.1,color:x,alignment:0}),m.circle(l*.1,-l*.2,l*.4).fill(y);const E=f.getBounds(),B=t.generateTexture({target:f,frame:new M(E.x,E.y,E.width,E.height)});return f.destroy({children:!0}),B};return i.liveTeamId1=c(e.teamId1),i.liveTeamId2=c(e.teamId2),i.destroyed=h(),i}function te(n,t){const{radius:e,borderWidth:i,crossSize:s,crossThickness:o,colors:r}=n,a={},c=(e+i)*2,h=c/2,f=15658734,_=3355443,m=g=>{const p=new T;p.circle(h,h,e).fill(f),p.circle(h,h,e-i).fill(g);const y=t.generateTexture({target:p,frame:new M(0,0,c,c)});return p.destroy(!0),y},u=()=>{const g=new T,p=s/2;g.moveTo(h-p,h-p).lineTo(h+p,h+p).moveTo(h-p,h+p).lineTo(h+p,h-p).stroke({width:o,color:_});const y=t.generateTexture({target:g,frame:new M(0,0,c,c)});return g.destroy(!0),y};return a.liveTeamId1=m(r.teamId1),a.liveTeamId2=m(r.teamId2),a.destroyed=u(),a}function ee(n,t){const{colorOuter:e,colorInner:i}=n,s=new T,o=20,r=1;s.rect(0,0,o,o).fill(e),s.rect(r,r,o-r*2,o-r*2).fill(i);const a=t.generateTexture({target:s,frame:new M(0,0,o,o)});return s.destroy(!0),a}function ie(n,t){const{width:e,length:i,color:s}=n,o=new T;o.rect(0,0,i,e).fill(s);const r=t.generateTexture({target:o,frame:new M(0,0,i,e)});return o.destroy(!0),r}function se(n,t){const{radius:e,blur:i,color:s}=n,o=new T,r=(e+i)*2,a=r/2;o.circle(a,a,e),o.fill(s),o.filters=[new q({strength:i,quality:10})];const c=t.generateTexture({target:o,frame:new M(0,0,r,r)});return o.destroy(!0),c}const ne={explosionTexture:Kt,funnelTexture:Zt,smokeTexture:Qt,tankTexture:Jt,tankRadarTexture:te,bombTexture:ee,trackMarkTexture:ie,impactParticleTexture:se},re=n=>(n??"").split(/[?#]/)[0].endsWith(".js"),oe=n=>import(n),he={id:"tanks",engineApi:_t,async createClientCore(n,{wasmUrl:t}){if(re(t)){const i=await oe(t);return{core:new i.ClientCore(n),memory:null}}const e=await wt({module_or_path:t});return{core:new Z(n),memory:e.memory}},parts:jt,bakers:ne,styles:St,hooks:{onAuth(n,t){n.set_model(t.model)},onPanel(n,t){n.sync_panel(JSON.stringify(t))},onLocalAction(n,t,e,i){return t!=="down"?null:e==="fire"?n.try_fire(i)||null:((e==="nextWeapon"||e==="prevWeapon")&&n.cycle_weapon(e==="prevWeapon"),null)}}};export{he as default};
|
package/dist/host-BFQfiYDe.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
class R{__destroy_into_raw(){const e=this.__wbg_ptr;return this.__wbg_ptr=0,C.unregister(this),e}free(){const e=this.__destroy_into_raw();s.__wbg_gamecore_free(e,0)}alive_players(){const e=s.gamecore_alive_players(this.__wbg_ptr);var t=I(e[0],e[1]).slice();return s.__wbindgen_free(e[0],e[1]*4,4),t}apply_input(e,t,r,n){const i=h(r,s.__wbindgen_malloc,s.__wbindgen_realloc),o=d,c=h(n,s.__wbindgen_malloc,s.__wbindgen_realloc),p=d;s.gamecore_apply_input(this.__wbg_ptr,e,t,i,o,c,p)}body_has_events(){return s.gamecore_body_has_events(this.__wbg_ptr)!==0}clear(){s.gamecore_clear(this.__wbg_ptr)}debug_json(){let e,t;try{const r=s.gamecore_debug_json(this.__wbg_ptr);return e=r[0],t=r[1],y(r[0],r[1])}finally{s.__wbindgen_free(e,t,1)}}deserialize_state(e){const t=L(e,s.__wbindgen_malloc),r=d,n=s.gamecore_deserialize_state(this.__wbg_ptr,t,r);if(n[1])throw g(n[0])}frame_bytes(){const e=s.gamecore_frame_bytes(this.__wbg_ptr);var t=F(e[0],e[1]).slice();return s.__wbindgen_free(e[0],e[1]*1,1),t}frame_ptr(){return s.gamecore_frame_ptr(this.__wbg_ptr)>>>0}is_alive(e){return s.gamecore_is_alive(this.__wbg_ptr,e)!==0}last_input_seq(e){return s.gamecore_last_input_seq(this.__wbg_ptr,e)>>>0}load_map(e){const t=h(e,s.__wbindgen_malloc,s.__wbindgen_realloc),r=d,n=s.gamecore_load_map(this.__wbg_ptr,t,r);if(n[1])throw g(n[0])}map_info(){let e,t;try{const r=s.gamecore_map_info(this.__wbg_ptr);return e=r[0],t=r[1],y(r[0],r[1])}finally{s.__wbindgen_free(e,t,1)}}constructor(e){const t=h(e,s.__wbindgen_malloc,s.__wbindgen_realloc),r=d,n=s.gamecore_new(t,r);if(n[2])throw g(n[1]);return this.__wbg_ptr=n[0],C.register(this,this.__wbg_ptr,this),this}pack_body(){const e=s.gamecore_pack_body(this.__wbg_ptr);if(e[1])throw g(e[0])}pack_frame(e,t,r,n,i,o,c,p){var l=W(c)?0:h(c,s.__wbindgen_malloc,s.__wbindgen_realloc),m=d;return s.gamecore_pack_frame(this.__wbg_ptr,e,t,r,n,i,o,l,m,p)>>>0}players_data(){let e,t;try{const r=s.gamecore_players_data(this.__wbg_ptr);return e=r[0],t=r[1],y(r[0],r[1])}finally{s.__wbindgen_free(e,t,1)}}position_of(e){const t=s.gamecore_position_of(this.__wbg_ptr,e);var r=I(t[0],t[1]).slice();return s.__wbindgen_free(t[0],t[1]*4,4),r}remove_actor(e){s.gamecore_remove_actor(this.__wbg_ptr,e)}remove_players_and_shots(){let e,t;try{const r=s.gamecore_remove_players_and_shots(this.__wbg_ptr);return e=r[0],t=r[1],y(r[0],r[1])}finally{s.__wbindgen_free(e,t,1)}}remove_scripted_actor(e){s.gamecore_remove_scripted_actor(this.__wbg_ptr,e)}reset_actor(e,t,r,n,i){s.gamecore_reset_actor(this.__wbg_ptr,e,t,r,n,i)}reset_all_vitals(){s.gamecore_reset_all_vitals(this.__wbg_ptr)}serialize_state(){const e=s.gamecore_serialize_state(this.__wbg_ptr);if(e[3])throw g(e[2]);var t=F(e[0],e[1]).slice();return s.__wbindgen_free(e[0],e[1]*1,1),t}spawn_actor(e,t,r,n,i,o){const c=h(t,s.__wbindgen_malloc,s.__wbindgen_realloc),p=d,l=s.gamecore_spawn_actor(this.__wbg_ptr,e,c,p,r,n,i,o);if(l[1])throw g(l[0])}spawn_scripted_actor(e,t,r,n,i,o){const c=h(t,s.__wbindgen_malloc,s.__wbindgen_realloc),p=d,l=s.gamecore_spawn_scripted_actor(this.__wbg_ptr,e,c,p,r,n,i,o);if(l[1])throw g(l[0])}step(e){s.gamecore_step(this.__wbg_ptr,e)}take_events(){let e,t;try{const r=s.gamecore_take_events(this.__wbg_ptr);return e=r[0],t=r[1],y(r[0],r[1])}finally{s.__wbindgen_free(e,t,1)}}}Symbol.dispose&&(R.prototype[Symbol.dispose]=R.prototype.free);function V(){return{__proto__:null,"./vimp_tanks_core_bg.js":{__proto__:null,__wbg_Error_92b29b0548f8b746:function(e,t){return Error(y(e,t))},__wbg___wbindgen_throw_344f42d3211c4765:function(e,t){throw new Error(y(e,t))},__wbindgen_init_externref_table:function(){const e=s.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}typeof FinalizationRegistry>"u"||new FinalizationRegistry(a=>s.__wbg_clientcore_free(a,1));const C=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(a=>s.__wbg_gamecore_free(a,1));function I(a,e){return a=a>>>0,z().subarray(a/4,a/4+e)}function F(a,e){return a=a>>>0,v().subarray(a/1,a/1+e)}let k=null;function z(){return(k===null||k.byteLength===0)&&(k=new Float32Array(s.memory.buffer)),k}function y(a,e){return P(a>>>0,e)}let S=null;function v(){return(S===null||S.byteLength===0)&&(S=new Uint8Array(s.memory.buffer)),S}function W(a){return a==null}function L(a,e){const t=e(a.length*1,1)>>>0;return v().set(a,t/1),d=a.length,t}function h(a,e,t){if(t===void 0){const c=T.encode(a),p=e(c.length,1)>>>0;return v().subarray(p,p+c.length).set(c),d=c.length,p}let r=a.length,n=e(r,1)>>>0;const i=v();let o=0;for(;o<r;o++){const c=a.charCodeAt(o);if(c>127)break;i[n+o]=c}if(o!==r){o!==0&&(a=a.slice(o)),n=t(n,r,r=o+a.length*3,1)>>>0;const c=v().subarray(n+o,n+r),p=T.encodeInto(a,c);o+=p.written,n=t(n,r,o,1)>>>0}return d=o,n}function g(a){const e=s.__wbindgen_externrefs.get(a);return s.__externref_table_dealloc(a),e}let E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});E.decode();const Y=2146435072;let B=0;function P(a,e){return B+=e,B>=Y&&(E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),E.decode(),B=e),E.decode(v().subarray(a,a+e))}const T=new TextEncoder;"encodeInto"in T||(T.encodeInto=function(a,e){const t=T.encode(a);return e.set(t),{read:a.length,written:t.length}});let d=0,s;function j(a,e){return s=a.exports,k=null,S=null,s.__wbindgen_start(),s}async function U(a,e){if(typeof Response=="function"&&a instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(a,e)}catch(n){if(a.ok&&t(a.type)&&a.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",n);else throw n}const r=await a.arrayBuffer();return await WebAssembly.instantiate(r,e)}else{const r=await WebAssembly.instantiate(a,e);return r instanceof WebAssembly.Instance?{instance:r,module:a}:r}function t(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function G(a){if(s!==void 0)return s;a!==void 0&&(Object.getPrototypeOf(a)===Object.prototype?{module_or_path:a}=a:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),a===void 0&&(a=new URL("/assets/vimp_tanks_core_bg-BwZfbGdm.wasm",import.meta.url));const e=V();(typeof a=="string"||typeof Request=="function"&&a instanceof Request||typeof URL=="function"&&a instanceof URL)&&(a=fetch(a));const{instance:t,module:r}=await U(await a,e);return j(t)}const q={setId:"c1",scale:.2,spriteSheet:{img:"tiles3.png",frames:[[0,64,32,32],[0,192,32,32],[96,64,32,32]]},layers:{1:[0,1],4:[2]},step:32,physicsStatic:[1],physicsDynamic:(function(){const r=[];for(let l=0;l<20;l+=1)for(let m=0;m<1;m+=1){const _=(104+m*3)*32+48,A=(45+l*3)*32+48;r.push({density:20,layer:3,position:[_,A],angle:0,width:96,height:96,img:"b1.png",linearDamping:8,angularDamping:16})}return r})(),respawns:{team1:[[448,1840,0],[256,2304,0],[448,2688,0],[256,3e3,0],[256,512,0],[448,832,0],[256,1152,0],[448,3648,0],[256,3968,0],[448,4288,0]],team2:[[6272,1840,180],[6464,2304,180],[6272,2688,180],[6464,3e3,180],[6464,512,180],[6272,832,180],[6464,1152,180],[6272,3648,180],[6464,3968,180],[6272,4288,180]]},map:(function(){const t={floor:0,wall:1,effect:2},r=Array.from({length:150},()=>Array(210).fill(t.floor));for(let i=0;i<150;i++)for(let o=0;o<210;o++)(i<2||i>=148||o<2||o>=208)&&(r[i][o]=t.wall);const n=(i,o,c,p)=>{for(let l=o;l<=p;l++)for(let m=i;m<=c;m++)m>=0&&m<210&&l>=0&&l<150&&(r[l][m]=t.wall)};n(50,0,51,30),n(50,119,51,149),n(158,0,159,30),n(158,119,159,149),n(80,30,130,31),n(80,118,130,119);for(let i=64;i<86;i++)for(let o=2;o<208;o++)(o+i)%2===0?r[i][o]=t.effect:r[i][o]=t.floor;return r})()},D=[],M=32,u=(a,e,t,r)=>{for(let n=0;n<t;n+=1){const i=r?[a*M,(e+n)*M]:[(a+n)*M,e*M];D.push({density:100,layer:3,position:i,angle:0,img:"b1.png",width:32,height:32,linearDamping:5,angularDamping:14})}};u(30,2,10,!0);u(2,30,10,!1);u(30,22,9,!0);u(22,30,9,!1);const f=120,x=30;u(f-x-1,f-12,10,!0);u(f-12,f-x-1,10,!1);u(f-x-1,f-31,9,!0);u(f-31,f-x-1,9,!1);const H={setId:"c1",spriteSheet:{img:"tiles3.png",frames:[[96,0,32,32],[32,32,32,32],[64,32,32,32],[0,96,32,32]]},layers:{1:[0,1,2],4:[3]},step:32,physicsStatic:[2],physicsDynamic:[...D],respawns:{team1:[[320,320,45],[320,480,45],[320,640,45],[480,320,45],[480,480,45],[480,640,45],[640,320,45],[640,480,45],[640,640,45],[800,400,45]],team2:[[3520,3520,225],[3520,3360,225],[3520,3200,225],[3360,3520,225],[3360,3360,225],[3360,3200,225],[3200,3520,225],[3200,3360,225],[3200,3200,225],[3040,3440,225]]},map:(function(){const t={stone:0,grass:1,wall:2,water:3},r=Array.from({length:120},()=>Array(120).fill(t.grass)),n=()=>{for(let l=0;l<120;l+=1)for(let m=0;m<120;m+=1)(l===0||l===119||m===0||m===119)&&(r[l][m]=t.wall)},i=(l,m,_,A=.5)=>{for(let b=m-_;b<=m+_;b+=1)for(let w=l-_;w<=l+_;w+=1)w>0&&w<119&&b>0&&b<119&&Math.sqrt((w-l)**2+(b-m)**2)<=_&&Math.random()<A&&(r[b][w]=t.wall)};n();const o=Math.floor(120/2),c=Math.floor(120/2),p=22;for(let l=c-p;l<=c+p;l+=1)for(let m=o-p;m<=o+p;m+=1)Math.sqrt((m-o)**2+(l-c)**2)<=p&&(r[l][m]=t.stone);for(let l=c-10;l<=c+10;l+=1)for(let m=o-10;m<=o+10;m+=1)Math.sqrt((m-o)**2+(l-c)**2)<=10&&(r[l][m]=t.water);return i(35,85,12,.7),i(85,35,12,.7),i(20,60,8,.6),i(60,20,8,.6),i(100,60,8,.6),i(60,100,8,.6),r})()},X={setId:"c1",scale:.6,spriteSheet:{img:"tiles.png",frames:[[480,64,32,32],[128,224,32,32],[160,0,32,32],[0,64,32,32],[0,64,32,32]]},layers:{1:[0,2,4],2:[1],4:[3]},physicsStatic:[1],physicsDynamic:[],step:32,respawns:{team1:[[130,520,0],[130,620,0],[130,720,0],[130,820,0],[230,520,0],[230,620,0],[230,720,0],[230,820,0],[330,620,0],[330,720,0]],team2:[[1600,520,180],[1600,620,180],[1600,720,180],[1600,820,180],[1500,520,180],[1500,620,180],[1500,720,180],[1500,820,180],[1400,620,180],[1400,720,180]]},map:(function(){const a=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,4,4,4,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,3,3,3,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,3,3,3,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,2,2,4,3,3,3,4,2,2,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,3,3,3,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,4,4,4,4,4,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],e=[];for(const t of a){const r=[],n=[];for(const i of t)r.push(i,i),n.push(i,i);e.push(r,n)}return e})()},K={canopy:q,garden:H,"pool mini":X},O={m1:{constructor:"Tank",currentWeapon:"w1",size:2,accelerationFactor:1e3,brakingFactor:10,maxForwardSpeed:260,maxReverseSpeed:-130,baseTurnTorqueFactor:215,damping:{linear:3,angular:100},fixture:{density:200,friction:.5,restitution:.1},lateralGrip:20,turnSpeedThreshold:10,baseTurnFactorRatio:.8,reverseTurnMultiplier:.7,throttleIncreaseRate:2,throttleDecreaseRate:2.5,strainFactor:1.5,maxGunAngle:1.4,gunRotationSpeed:3,gunCenterSpeed:10}},Z={w1:{type:"hitscan",impulseMagnitude:5e3,damage:40,range:1500,fireRate:.01,spread:0,consumption:1,cameraShake:{intensity:20,duration:200}},w2:{type:"explosive",constructor:"Bomb",time:300,shotOutcomeId:"w2e",size:8,fireRate:.1,damage:70,radius:50,impulseMagnitude:2e6,cameraShake:{intensity:30,duration:400}}},$={m1:{id:1,kind:"indexed8",class:"hot",fields:[{name:"x",ty:"f32",interp:"lerp"},{name:"y",ty:"f32",interp:"lerp"},{name:"angle",ty:"f32",interp:"lerpAngle"},{name:"gunRotation",ty:"f32",interp:"lerpAngle"},{name:"vx",ty:"f32",interp:"lerp"},{name:"vy",ty:"f32",interp:"lerp"},{name:"engineLoad",ty:"f32",interp:"lerp"},{name:"condition",ty:"u8"},{name:"size",ty:"u8"},{name:"team",ty:"u8"}]},w1:{id:2,kind:"list16",class:"event",fields:[{name:"startX",ty:"f32"},{name:"startY",ty:"f32"},{name:"endX",ty:"f32"},{name:"endY",ty:"f32"},{name:"bodyX",ty:"f32"},{name:"bodyY",ty:"f32"},{name:"wasHit",ty:"u8"},{name:"shooterId",ty:"u8"}]},w2:{id:3,kind:"indexed32",class:"event",fields:[{name:"x",ty:"f32"},{name:"y",ty:"f32"},{name:"angle",ty:"f32"},{name:"size",ty:"u8"},{name:"time",ty:"u16"},{name:"ownerId",ty:"u8"}]},w2e:{id:4,kind:"list16",class:"event",fields:[{name:"x",ty:"f32"},{name:"y",ty:"f32"},{name:"radius",ty:"f32"}]},c1:{id:5,kind:"indexedNoNull8",class:"hot",fields:[{name:"x",ty:"f32",interp:"lerp"},{name:"y",ty:"f32",interp:"lerp"},{name:"angle",ty:"f32",interp:"lerpAngle"}]},c2:{id:6,kind:"indexedNoNull8",class:"hot",fields:[{name:"x",ty:"f32",interp:"lerp"},{name:"y",ty:"f32",interp:"lerp"},{name:"angle",ty:"f32",interp:"lerpAngle"}]}},Q={parts:{models:O,weapons:Z,mapConstructor:"Map",hitscanService:"HitscanService",friendlyFire:!1},snapshot:$,soundCues:{roundStart:"roundStart",victory:"victory",defeat:"defeat",frag:"frag",death:"gameOver"},initialVote:"teamChange",maps:K,mapScale:.3,currentMap:"pool mini",mapsInVote:4,mapSetId:"c1",roomDefaults:{maxPlayers:8},roomForm:[{name:"maxPlayers",control:"text",label:"Max players",numeric:!0},{name:"roundTime",control:"text",label:"Round time",unit:"s",numeric:!0},{name:"mapTime",control:"text",label:"Map time",unit:"s",numeric:!0},{name:"friendlyFire",control:"checkbox",label:"Friendly fire"},{name:"map",control:"select",label:"Map",source:"maps"}],stat:{name:{key:0,bodyMethod:"=",headSync:!0,headMethod:"#"},status:{key:1,bodyMethod:"=",bodyValue:"",headValue:""},score:{key:2,bodyMethod:"+",bodyValue:0,headMethod:"+",headValue:0},deaths:{key:3,bodyMethod:"+",bodyValue:0,headMethod:"+",headValue:0},latency:{key:4,bodyMethod:"="}},playerState:{defaultState:{}},panel:{fields:{health:{key:"h",value:100},w1:{key:"w1",value:200},w2:{key:"w2",value:100}},activeKey:"wa"},scripted:{namePrefix:"Bot",defaultModel:"m1"},spectatorTeam:"spectators",teams:{team1:1,team2:2,spectators:3},playerKeys:{forward:{key:1},back:{key:2},left:{key:4},right:{key:8},gunCenter:{key:16,type:1},gunLeft:{key:32},gunRight:{key:64},fire:{key:128,type:1},nextWeapon:{key:256,type:1},prevWeapon:{key:512,type:1}}},J={roundStart:{file:"round-start",priority:200,volume:.3},victory:{file:"victory",priority:200,volume:.3},defeat:{file:"defeat",priority:200,volume:.3},frag:{file:"frag",priority:150,volume:.3},hit:{file:"hit",priority:150,volume:.3},gameOver:{file:"game-over",priority:150,volume:.3},shot:{file:"shot",priority:100,volume:.4},explosion:{file:"explosion",priority:100,volume:.4},bombHasBeenPlanted:{file:"bomb-has-been-planted",priority:90,volume:.4},tankEngine:{file:"tank-engine",priority:50,loop:!0,volume:.5}},ee={codecList:["webm","mp3"],path:"/sounds/",sounds:J},te={parts:{gameSets:{c1:["Map","MapRadar"],c2:["Map"],m1:["Tank","TankRadar","Smoke","Tracks"],w1:["ShotEffect"],w2:["Bomb"],w2e:["ExplosionEffect"]},entitiesOnCanvas:{Map:"vimp",MapRadar:"radar",TankRadar:"radar",Tank:"vimp",ShotEffect:"vimp",Bomb:"vimp",ExplosionEffect:"vimp",Smoke:"vimp",Tracks:"vimp"},bakedAssets:{vimp:[{name:"explosionTexture",component:"ExplosionEffect",params:{radius:50,blur:2,color:16777215}},{name:"impactParticleTexture",component:"ShotEffect",params:{radius:4,blur:1,color:16777215}},{name:"funnelTexture",component:"ExplosionEffect",params:{baseRadius:25,irregularity:5,blur:40,numPoints:12}},{name:"smokeTexture",component:"Smoke",params:{radius:3,blur:1,color:16777215}},{name:"tankTexture",component:"Tank",params:{colors:{teamId1:5579298,teamId2:2250018}}},{name:"bombTexture",component:"Bomb",params:{colorOuter:16777215,colorInner:986895}},{name:"trackMarkTexture",component:"Tracks",params:{width:4,length:5,color:1710610}}],radar:[{name:"tankRadarTexture",component:"TankRadar",params:{radius:6,borderWidth:2,crossSize:9,crossThickness:1.5,colors:{teamId1:5579298,teamId2:2250018}}}]},componentDependencies:{renderer:["Map"],assetsBase:["Map"],soundManager:["ExplosionEffect","ShotEffect","Bomb","Tank"]},sounds:ee},initIdList:["vimp","radar","panel","chat"],modules:{canvasManager:{canvases:{vimp:{width:960,height:600,aspectRatio:"16:9",baseScale:"5:1",dynamicCamera:!0,shakeCamera:!0},radar:{width:150,height:150,fixSize:"150",baseScale:"1:8"}}},controls:{keySetList:[{78:"nextPlayer",80:"prevPlayer"},{87:"forward",83:"back",65:"left",68:"right",85:"gunCenter",75:"gunLeft",76:"gunRight",74:"fire",78:"nextWeapon",80:"prevWeapon"}]},chat:{params:{messages:{s:["Team {0} is full. Your current team: {1}","Your team: {0}","Your new team: {0}","Your new status: spectator","⚔️ {0} killed {1}","⚡ {0} joined the game","👋 {0} left the game"],v:["A vote has been created","Voting has started","Your vote has been accepted","Voting is temporarily unavailable","Vote passed","Vote failed"],m:["Current map: {0}","Next map: {0}"],c:["Command not found","Your rank: {0}"],n:["Invalid name","{0} changed name to {1}"],b:["Only active players can use /bot","Invalid bot count","Invalid team name","{0} bot(s) created for {1}","All bots removed from {0}","{0} bot(s) created","All bots removed"]}}},panel:{keys:{t:"time",h:"health",wa:"activeWeapon",w1:"bullet",w2:"bomb"},fields:[{name:"health",elem:"panel-health",type:"bar",max:100,blocks:30},{name:"bullet",elem:"panel-bullet",type:"weapon"},{name:"bomb",elem:"panel-bomb",type:"weapon"},{name:"time",elem:"panel-time",type:"time"}]},stat:{params:{columns:["names","status","score","deaths","latency"],heads:{1:"team1",2:"team2"},bodies:{1:"team1",2:"team2",3:"spectators"},sortList:{team1:[[2,!0],[3,!1]],team2:[[2,!0],[3,!1]]}}},vote:{params:{templates:{teamChange:["Choose a team","teams",!0],mapChangeBySystem:["Choose the next map"],mapChangeByUser:["{0} suggested the map: {1}",["Yes","No"]],createBotsForTeam:["{0} suggests creating {1} bot(s) to {2}. Agree?",["Yes","No"]],removeBotsForTeam:["{0} suggests removing all bots from {1}. Agree?",["Yes","No"]],createBots:["{0} suggests creating {1} bot(s) to the game. Agree?",["Yes","No"]],removeBots:["{0} suggests removing all bots from the game. Agree?",["Yes","No"]]},menu:[["teamChange",["Switch team","teams"]],["mapChange",["Suggest map","maps"]]]}}},gameInform:{list:["{0} WINS!","ROUND START!","GAME OVER!"]}},ae={elems:{authId:"auth",errorId:"auth-error",enterId:"auth-enter",fieldsId:"auth-fields",titleId:"auth-title",informsId:"auth-informs"},texts:{title:"Tank Battle",sections:[{heading:"Controls",lines:[{keys:"w, a, s, d",text:"move the tank"},{keys:"k, l",text:"turn the gun"},{keys:"u",text:"center the gun"},{keys:"j",text:"fire"},{keys:"n, p",text:"switch weapon/player",last:!0},{keys:"c",text:"chat/command line"},{keys:"m",text:"menu"},{keys:"<Tab>",text:"stats",last:!0}]},{heading:"Command line",lines:[{keys:"/name <name>",text:"change nickname"},{keys:"/mapname",text:"show current map name"},{keys:"/timeleft",text:"map time left"},{separator:!0},{keys:"/bot <count>",text:"add bot(s)"},{keys:"/bot <count> <team>",text:"add to team"},{keys:"/bot 0",text:"remove all bots"},{keys:"/bot 0 <team>",text:"remove from team"}]}]},params:[{name:"model",value:"m1",options:{control:"select",label:"Model",options:Object.keys(O),validator:"isValidModel",storage:"model"}}],validators:{isValidModel:a=>a in O}};function N(a,e,t){t?(a.scripted.removeScripted(t),e>0?(e=a.scripted.createScripted(e,t),a.chat.pushSystem("BOT_CREATED_FOR_TEAM",[e,t])):a.chat.pushSystem("BOT_REMOVED_FROM_TEAM",[t])):(a.scripted.removeScripted(),e>0?(e=a.scripted.createScripted(e,null),a.chat.pushSystem("BOT_CREATED",[e])):a.chat.pushSystem("BOT_REMOVED")),a.roundManager.initiateNewRound()}function re(a,e,t,r){const n=a.participants.get(e).name,i="botManagement";let o,c;if(!a.voteCoordinator.canCreateVote(i,e))return;r?t>0?(o="createBotsForTeam",c=[n,t,r]):(o="removeBotsForTeam",c=[n,r]):t>0?(o="createBots",c=[n,t]):(o="removeBots",c=[n]);const p={name:o,params:c},l=a.participants.getHumans().map(m=>m.gameId).filter(m=>m!==e);a.voteCoordinator.createVote({voteName:o,voteCategory:i,payload:p,resultFunc:m=>{m==="Yes"?(a.chat.pushSystem("VOTE_PASSED"),N(a,t,r)):a.chat.pushSystem("VOTE_FAILED")},userList:l,gameId:e})}const ne={name:"/bot",handler(a,e,t){if(a.participants.get(e).teamId===a.spectatorId){a.chat.pushSystemByUser(e,"BOT_PLAYERS_ONLY");return}const n=parseInt(t[0],10),i=t[1]||null;if(isNaN(n)||n<0){a.chat.pushSystemByUser(e,"BOT_INVALID_COUNT");return}if(i&&(!a.teams[i]||i===a.spectatorTeam)){a.chat.pushSystemByUser(e,"BOT_INVALID_TEAM");return}if(n===0){if(i&&a.scripted.getCountForTeam(i)===0){a.chat.pushSystemByUser(e,"BOT_REMOVED_FROM_TEAM",[i]);return}if(a.scripted.getCount()===0){a.chat.pushSystemByUser(e,"BOT_REMOVED");return}}a.participants.getHumans().filter(c=>c.teamId!==a.spectatorId).length<=1?N(a,n,i):re(a,e,n,i)}},se={BOT_PLAYERS_ONLY:"b:0",BOT_INVALID_COUNT:"b:1",BOT_INVALID_TEAM:"b:2",BOT_CREATED_FOR_TEAM:"b:3",BOT_REMOVED_FROM_TEAM:"b:4",BOT_CREATED:"b:5",BOT_REMOVED:"b:6"};class ie{constructor({participants:e,coreAdapter:t,panel:r,stat:n,scripted:i}){this._participants=e,this._coreAdapter=t,this._panel=r,this._stat=n,this._model=i.defaultModel,this._respawns=null}createMap(e){this._respawns=e.respawns}createScripted(e,t=null){if(!this._respawns)return 0;const r=this._participants.getPlayableTeams();let n=0;for(let i=0;i<e&&!this._participants.isFull;i+=1){let o=t;if(o||(o=r.sort((l,m)=>this._participants.getTeamSize(l)-this._participants.getTeamSize(m))[0]),!o||!this._respawns[o]||this._participants.getTeamSize(o)>=this._respawns[o].length)continue;const c=this._participants.createScripted({team:o,model:this._model}),p=this._participants.get(c);this._stat.addUser(c,p.teamId,{name:p.name,status:"dead",latency:"BOT"}),this._panel.addUser(c),n+=1}return n}removeScripted(e=null){(e?this._participants.getScripted().filter(r=>r.team===e):this._participants.getScripted()).forEach(r=>this._removeBotById(r.gameId))}removeOneForHuman(e){for(const t of this._participants.getScripted())if(t.team===e)return this._removeBotById(t.gameId),!0;return!1}_removeBotById(e){const t=this._participants.get(e);!t||!t.isScripted||(this._stat.removeUser(e,t.teamId),this._panel.removeUser(e),this._coreAdapter.removePlayer(e),this._participants.remove(e))}getBotById(e){const t=this._participants.get(e);return t&&t.isScripted?t:void 0}getBots(){return this._participants.getScripted()}getCount(){return this._participants.getScripted().length}getCountForTeam(e){return this._participants.getScripted().filter(t=>t.team===e).length}getCountsPerTeam(){const e={};for(const t of this._participants.getScripted())e[t.team]=(e[t.team]||0)+1;return e}}function oe(a){return{scripted:new ie(a)}}const le=a=>(a??"").split(/[?#]/)[0].endsWith(".js"),ce=a=>import(a),me={id:"tanks",engineApi:3,async createCore(a,{wasmUrl:e}){if(le(e)){const t=await ce(e);return new t.GameCore(a)}return await G({module_or_path:e}),new R(a)},gameConfig:Q,authSchema:ae,chatCommands:[ne],systemMessages:se,createModules:oe,buildClientGameConfig:()=>te};export{me as default};
|