'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'tafang', canvasUpdates2:[], start:function(){ "step 0" _status.gameDrawed=true; lib.init.css(lib.assetURL+'layout/mode','chess'); lib.init.css(lib.assetURL+'layout/mode','tafang'); game.loadMode('chess'); "step 1" if(get.is.phoneLayout()&&lib.config.touchscreen&& !lib.config.show_round_menu&& !['system','menu'].includes(lib.config.swipe_left)&& !['system','menu'].includes(lib.config.swipe_right)&& !['system','menu'].includes(lib.config.swipe_up)){ ui.roundmenu.style.display=''; } if(lib.config.player_border=='normal'&&(lib.config.layout=='long'||lib.config.layout=='long2')){ ui.arena.classList.add('lslim_player'); } for(var i in result.element){ for(var j in result.element[i]){ if(j!='dieAfter'){ lib.element[i][j]=result.element[i][j]; } } } for(var i in result.ui){ for(var j in result.ui[i]){ ui[i][j]=result.ui[i][j]; } } get.chessDistance=result.get.chessDistance; get.rawAttitude=result.get.rawAttitude; var toLoad=['addChessPlayer','addObstacle','removeObstacle','isChessNeighbour', 'draw2','updateCanvas2','setChessInfo','modeSwapPlayer','initChess']; for(var i=0;i<toLoad.length;i++){ game[toLoad[i]]=result.game[toLoad[i]]; } toLoad=['_attackmove','_phasequeue','_chessmove','_chesscenter','_tempobstacle']; for(var i=0;i<toLoad.length;i++){ lib.skill[toLoad[i]]=result.skill[toLoad[i]]; } ui.placeChess=result.ui.placeChess; ui.click.moveContainer=result.ui.click.moveContainer; for(var i in lib.skill){ if(lib.skill[i].changeSeat){ lib.skill[i]={}; if(lib.translate[i+'_info']){ lib.translate[i+'_info']='此模式下不可用'; } } } // if(!localStorage.getItem(lib.configprefix+'playback')){ // game.loadMap(); // } "step 2" var result='basic_medium'; _status.map=lib.tafang.map[result]; _status.mapname=result; ui.chesssheet=document.createElement('style'); document.head.appendChild(ui.chesssheet); var playback=localStorage.getItem(lib.configprefix+'playback'); lib.mechlist=[]; for(var i in lib.characterPack.mode_tafang){ if(i.indexOf('tafang_mech_')==0){ lib.characterPack.mode_tafang[i][3].push(i+'_skill'); lib.mechlist.push(i); } lib.character[i]=lib.characterPack.mode_tafang[i]; if(!lib.character[i][4]){ lib.character[i][4]=[]; } } ui.create.cardsAsync(); game.finishCards(); game.addGlobalSkill('autoswap'); ui.chessContainer=ui.create.div('#chess-container',ui.arena); ui.chessContainer.move=ui.click.moveContainer; ui.chessContainer.chessLeft=0; ui.chessContainer.chessTop=0; // lib.setScroll(ui.chessContainer); ui.chess=ui.create.div('#chess',ui.chessContainer); ui.canvas2=document.createElement('canvas'); ui.canvas2.id='canvas2'; ui.chess.appendChild(ui.canvas2); ui.ctx2=ui.canvas2.getContext('2d'); game.me=ui.create.player(); if(playback){ for(var i in lib.characterPack){ for(var j in lib.characterPack[i]){ lib.character[j]=lib.character[j]||lib.characterPack[i][j]; } } game.pause(); ui.system.style.display='none'; _status.playback=playback; localStorage.removeItem(lib.configprefix+'playback'); var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); store.get(parseInt(playback)).onsuccess=function(e){ if(e.target.result){ event.video=e.target.result.video; game.resume(); } else{ alert('播放失败:找不到录像'); game.reload(); } } } _status.mylist=[]; _status.enemylist=[]; "step 3" ui.arena.classList.add('chess'); if(event.video){ for(var ii=0;ii<event.video.length;ii++){ if(event.video[ii].type=='init'){ _status.mapname=event.video[ii].content; break; } } _status.map=lib.tafang.map[_status.mapname]; game.playerMap=lib.posmap; } ui.chesswidth=_status.map.size[0]; ui.chessheight=_status.map.size[1]; game.initChess(); var grids=[]; var gridnum=ui.chessheight*ui.chesswidth; for(var i=0;i<gridnum;i++){ grids.push(i); } event.obs=[]; if(!event.video){ var tafanglist=[0,2,3,5,6,8,9,11,12]; for(var i=0;i<ui.chessheight-1;i++){ for(var j=0;j<ui.chesswidth;j++){ if(i>=8&&j!=0&&j!=ui.chesswidth-1) continue; if(tafanglist.includes(j)){ var cg=i*ui.chesswidth+j; grids.remove(cg); game.addObstacle(cg.toString(),false); event.obs.push(cg.toString()); } } } for(var i=0;i<ui.chesswidth;i++){ switch(ui.chesswidth){ case 6:if(i==2||i==3) continue;break; case 9:if(i==3||i==4||i==5) continue;break; case 12:if(i==4||i==5||i==6||i==7) continue;break; } var cg=(ui.chessheight-1)*ui.chesswidth+i; grids.remove(cg); game.addObstacle(cg.toString(),false); event.obs.push(cg.toString()); } } if(lib.config.show_handcardbutton){ lib.setPopped(ui.create.system('手牌',null,true),function(){ var uiintro=ui.create.dialog('hidden'); var added=false; for(var i=0;i<game.players.length;i++){ if(game.players[i].side==game.me.side&&game.players[i]!=game.me){ added=true; uiintro.add(get.translation(game.players[i])); var cards=game.players[i].getCards('h'); if(cards.length){ uiintro.addSmall(cards,true); } else{ uiintro.add('(无)'); } } } if(!added){ uiintro.add('无队友'); } return uiintro; },220); } ui.create.me(); ui.create.fakeme(); ui.chessinfo=ui.create.div('.fakeme.player',ui.me,function(e){ e.stopPropagation(); }); ui.create.div(ui.chessinfo); lib.setScroll(ui.chessinfo.firstChild); game.arrangePlayers(); "step 4" ui.control.style.display=''; if(event.video){ game.playVideoContent(event.video); game.setChessInfo(); return; } _status.videoInited=true; game.addVideo('init',null,_status.mapname); if(game.friendZhu){ game.addVideo('identityText',game.friendZhu,'将'); game.addVideo('identityText',game.enemyZhu,'帅'); if(game.friendViceZhu){ game.addVideo('identityText',game.friendViceZhu,'仕'); game.addVideo('identityText',game.enemyViceZhu,'士'); } } if(event.obs){ game.addVideo('initobs',null,event.obs); } ui.me.querySelector('.fakeme.player').hide(); ui.me.querySelector('.fakeme.avatar').hide(); var list=[]; for(i in lib.character){ if(i.indexOf('treasure_')==0) continue; if(i.indexOf('tafang_mech_')==0) continue; if(lib.character[i][4].includes('minskin')) continue; if(lib.config.forbidchess.includes(i)) continue; if(lib.character[i][4].includes('boss')) continue; if(lib.filter.characterDisabled(i)) continue; list.push(i); } list.randomSort(); _status.characterList=list; _status.friends=[]; _status.enemies=[]; _status.turnCount=0; _status.turnTotal=parseInt(get.config('tafang_turn')); ui.turnCount=ui.create.system('',null,true); _status.remainingCount=0; _status.tafangend=[]; for(var i=0;i<ui.chesswidth;i++){ var tafangdes=ui.chesswidth*(ui.chessheight-1)+i; if(!lib.posmap[tafangdes]){ _status.tafangend.push(tafangdes.toString()); } } lib.init.onfree(); event.trigger('gameStart'); game.phaseLoopTafang(); }, element:{ content:{ chessMechRemove:function(){ game.treasures.remove(player); setTimeout(function(){ player.delete(); },500); delete lib.posmap[player.dataset.position]; game.addVideo('deleteChessPlayer',player); game.addObstacle(player.dataset.position); game.log(get.translation(player)+'使用期限已到'); } }, player:{ dieAfter2:function(){ var player=this; delete lib.posmap[player.dataset.position]; setTimeout(function(){ player.delete(); },500); for(var i=0;i<ui.phasequeue.length;i++){ if(ui.phasequeue[i].link==player){ ui.phasequeue[i].remove(); ui.phasequeue.splice(i,1); break; } } }, dieAfter:function(source){ var player=this; if(_status.friends){ _status.friends.remove(this); } if(_status.enemies){ _status.enemies.remove(this); } if(player==game.me){ for(var i=0;i<game.players.length;i++){ if(game.players[i].side==player.side){ game.modeSwapPlayer(game.players[i]); } } } if(_status.friends.length==0){ ui.fakeme.hide(); this.node.handcards1.delete(); this.node.handcards2.delete(); game.me=ui.create.player(); game.me.side=false; game.addVideo('removeTafangPlayer'); } }, }, }, tafang:{ map:{ basic_small:{ name:'小型战场', size:[6,11], obstacle:[] }, basic_medium:{ name:'中型战场', size:[9,11], }, basic_large:{ name:'大型战场', size:[12,11], }, } }, game:{ minskin:true, singleHandcard:true, chess:true, treasures:[], obstacles:[], getVideoName:function(){ return [get.translation(game.me.name),'塔防模式']; }, addOverDialog:function(dialog){ dialog.classList.add('center'); }, phaseLoopTafang:function(){ var next=game.createEvent('phaseLoop'); next.setContent(function(){ 'step 0' delete _status.roundStart; _status.turnCount++; _status.remainingCount-=_status.friends.length; ui.turnCount.innerHTML='回合'+get.cnNumber(_status.turnCount,true); var dialog=ui.create.dialog('剩余行动点:'+(10+_status.remainingCount),'hidden'); dialog.style.height='260px'; dialog.style.maxHeight='260px'; dialog.style.top='calc(50% - 160px)'; dialog.classList.add('center'); dialog.classList.add('noupdate'); dialog.classList.add('fixed'); event.dialog=dialog; var list=_status.characterList.splice(0,6); list.sort(function(a,b){ return get.rank(a,true)-get.rank(b,true); }); var map={}; var mechlist=lib.mechlist.randomGets(6); mechlist.sort(function(a,b){ return lib.character[a][5]-lib.character[b][5]; }); map.bufang=ui.create.buttons(mechlist,'character',dialog.content); var difficulty=parseInt(get.config('tafang_difficulty')); for(var i=0;i<map.bufang.length;i++){ var button=map.bufang[i]; // button.node.name.style.top='8px'; button.node.intro.classList.add('showintro'); button.node.intro.classList.add('tafang'); button.count=difficulty+lib.character[button.link][5]-2; button.node.intro.innerHTML=get.cnNumber(button.count,true); button._link='布防'; } map.zhaomu=ui.create.buttons(list,'character',dialog.content); for(var i=0;i<map.zhaomu.length;i++){ var button=map.zhaomu[i]; if(lib.config.buttoncharacter_style=='default'){ button.node.group.style.display='none'; } button.node.intro.classList.add('showintro'); button.node.intro.classList.add('tafang'); button.count=difficulty+get.rank(button.link,3.9)+3; button.node.intro.innerHTML=get.cnNumber(button.count,true); button._link='招募'; } if(_status.friends.length){ map.xingdong=ui.create.buttons(_status.friends,'player',dialog.content); for(var i=0;i<map.xingdong.length;i++){ var button=map.xingdong[i]; button.node.intro.classList.add('showintro'); button.node.intro.classList.add('tafang'); if(difficulty<2){ button.count=1; } else{ button.count=2; } button.node.intro.innerHTML=get.cnNumber(button.count,true); button._link='行动'; } } else{ map.xingdong=[]; } var updateSelected=function(){ var count=10+_status.remainingCount; var selected=dialog.querySelectorAll('.button.selected'); var selectedZhaomu=0; for(var i=0;i<selected.length;i++){ count-=selected[i].count; if(selected[i]._link=='招募'){ selectedZhaomu++; } } for(var i in map){ for(var j=0;j<map[i].length;j++){ map[i][j].classList.remove('unselectable'); map[i][j].classList.add('pointerdiv'); if(map[i][j].count>count){ map[i][j].classList.add('unselectable'); map[i][j].classList.remove('pointerdiv'); } else if(i=='zhaomu'&&_status.friends.length+selectedZhaomu>=5){ map[i][j].classList.add('unselectable'); map[i][j].classList.remove('pointerdiv'); } else if(i=='bufang'){ var numbufang=0; for(var k=0;k<game.treasures.length;k++){ if(game.treasures[k].name==map[i][j].link){ numbufang++; } if(numbufang>=3){ map[i][j].classList.add('unselectable'); break; } } } } } ui.dialog.content.firstChild.innerHTML='剩余行动点:'+count; } var clickOrder=0; event.custom.replace.button=function(button){ if(!button.classList.contains('unselectable')|| button.classList.contains('selected')){ button.classList.toggle('selected'); button._clickOrder=clickOrder++; } updateSelected(); } event.custom.add.window=function(clicked){ if(clicked) return; if(event.step>1) return; for(var i in map){ for(var j=0;j<map[i].length;j++){ map[i][j].classList.remove('selected'); map[i][j].classList.remove('unselectable'); } } updateSelected(); } var update=function(link){ for(var i in map){ for(var j=0;j<map[i].length;j++){ if(map[i][j]._link!=link){ map[i][j].style.display='none'; } else{ map[i][j].style.display=''; } } } for(var i=0;i<event.control.childNodes.length;i++){ if(event.control.childNodes[i].innerHTML==link){ event.control.childNodes[i].classList.add('thundertext'); } } _status.lastTafangCommand=link; } event.control=ui.create.control('布防','招募',function(link,node){ if(node.disabled) return; var current=node.parentNode.querySelector('.thundertext'); if(current==node) return; if(current){ current.classList.remove('thundertext'); } update(link); }); // if(!_status.friends.length){ // event.control.lastChild.style.opacity=0.5; // if(_status.lastTafangCommand=='行动'){ // _status.lastTafangCommand='招募'; // } // } if(_status.friends.length>=5){ event.control.childNodes[1].style.opacity=0.5; event.control.childNodes[1].disabled=true; if(_status.lastTafangCommand=='招募'){ _status.lastTafangCommand='布防'; } } _status.imchoosing=true; ui.auto.hide(); var eventdong=function(){ var selected=dialog.querySelectorAll('.button.selected'); event.bufang=[]; event.zhaomu=[]; event.xingdong=_status.friends.slice(0); // var xingdongs=[]; _status.remainingCount+=10; for(var i=0;i<selected.length;i++){ switch(selected[i]._link){ case '布防':event.bufang.push(selected[i].link);break; case '招募':event.zhaomu.push(selected[i].link);break; // case '行动':xingdongs.push(selected[i]);break; } _status.remainingCount-=selected[i].count; } _status.remainingCount=Math.floor(_status.remainingCount/2); // xingdongs.sort(function(a,b){ // return a._clickOrder-b._clickOrder; // }); // for(var i=0;i<xingdongs.length;i++){ // event.xingdong.push(xingdongs[i].link); // } game.resume(); }; event.done=ui.create.control('完成',eventdong); if(_status.lastTafangCommand){ update(_status.lastTafangCommand); } else{ update('招募'); } if(_status.characterList.length<6){ game.over(true); event.done.close(); event.control.close(); return; } setTimeout(function(){ dialog.open(); updateSelected(); },50); event.switchToAuto=eventdong; if(!_status.auto&&10+_status.remainingCount>0){ game.pause(); } else{ eventdong(); } 'step 1' event.dialog.close(); event.control.close(); event.done.close(); delete event.dialog; delete event.control; delete event.done; 'step 2' event.chooseObstacle=false; if(event.bufang.length){ event.obstacles=game.obstacles.slice(0); for(var i=0;i<event.obstacles.length;i++){ event.obstacles[i].classList.add('glow'); } event.chooseObstacle=true; event.currentBufang=event.bufang.shift(); event.dialog=ui.create.dialog('选择一个位置放置【'+get.translation(event.currentBufang)+'】'); if(!_status.auto){ game.pause(); } else{ event.obstacle=event.obstacles.randomGet(); } event.switchToAuto=function(){ event.obstacle=event.obstacles.randomGet(); game.resume(); }; } else{ delete event.bufang; } 'step 3' if(event.dialog){ event.dialog.close(); delete event.dialog; } if(event.chooseObstacle){ game.removeObstacle(event.obstacle.dataset.position); var mech=game.addChessPlayer(event.currentBufang,'treasure',0,event.obstacle.dataset.position); event.chooseObstacle=false; event.goto(2); } else{ if(event.obstacles){ for(var i=0;i<event.obstacles.length;i++){ event.obstacles[i].classList.remove('glow'); } delete event.obstacles; } delete event.obstacle; delete event.currentBufang; } 'step 4' if(event.dialog){ event.dialog.close(); delete event.dialog; } if(event.zhaomu.length){ event.currentZhaomu=event.zhaomu.shift(); event.dialog=ui.create.dialog('选择一个位置安排【'+get.translation(event.currentZhaomu)+'】'); var size=ui.chesswidth*(ui.chessheight-1); var clickGrid=function(){ var player=game.addChessPlayer(event.currentZhaomu,false,4,this.dataset.position); _status.friends.push(player); if(!game.me.name){ game.me=player; game.me.classList.add('current_action'); ui.me.querySelector('.fakeme.avatar').show(); ui.me.querySelector('.fakeme.player').show(); ui.create.fakeme(); ui.handcards1=player.node.handcards1.addTempClass('start').fix(); ui.handcards2=player.node.handcards2.addTempClass('start').fix(); ui.handcards1Container.appendChild(ui.handcards1); ui.handcards2Container.appendChild(ui.handcards2); ui.updatehl(); game.setChessInfo(); game.addVideo('tafangMe',player); } this.delete(); event.redo(); game.resume(); } if(!event.playergrids){ event.playergrids=[] for(var i=ui.chesswidth;i<size;i++){ if(!lib.posmap[i.toString()]){ var grid=ui.create.div('.player.minskin.playerblank.glow',clickGrid,ui.chess); grid.addTempClass('start'); ui.placeChess(grid,i); event.playergrids.push(grid); } } } game.pause(); if(_status.auto){ setTimeout(function(){ clickGrid.call(event.playergrids.randomGet()); },50); } } else{ delete event.zhaomu; } 'step 5' _status.imchoosing=false; ui.auto.show(); game.delay(); if(event.dialog){ event.dialog.close(); delete event.dialog; } if(event.playergrids){ for(var i=0;i<event.playergrids.length;i++){ event.playergrids[i].delete(); } delete event.playergrids; } delete event.currentZhaomu; 'step 6' var shalldelay=false; for(var i=0;i<ui.chesswidth;i++){ if(lib.posmap[i]&&game.players.includes(lib.posmap[i])){ for(var j=0;j<ui.chessheight;j++){ var pos=i+j*ui.chesswidth; if(lib.posmap[pos]&&lib.posmap[pos].movable(0,1)){ break; } } if(j<ui.chessheight){ shalldelay=true; for(var k=j;k>=0;k--){ var pos=i+k*ui.chesswidth; if(lib.posmap[pos]){ lib.posmap[pos].moveDown(); } } } } } if(shalldelay) game.delay(); 'step 7' event.justadded=[]; if(_status.characterList.length){ if(_status.enemies.length<ui.chesswidth*2){ var list1=[]; for(var i=0;i<ui.chesswidth;i++){ if(!lib.posmap[i]){ list1.push(i); } } if(list1.length){ var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove()); _status.enemies.push(enemy); event.justadded.push(enemy.name); if(game.players.length==1){ ui.me.querySelector('.fakeme.player').show(); game.setChessInfo(game.players[0]); } game.delay(); } // var difficulty=get.config('tafang_difficulty'); // if(_status.turnCount>=10&&list1.length&&difficulty>1){ // var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove()); // _status.enemies.push(enemy); // event.justadded.push(enemy.name); // } // if(_status.turnCount>=20&&list1.length&&difficulty>1){ // var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove()); // _status.enemies.push(enemy); // event.justadded.push(enemy.name); // } // if(list1.length&&difficulty>2){ // var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove()); // _status.enemies.push(enemy); // event.justadded.push(enemy.name); // } } } else{ game.over(true); } 'step 8' if(event.xingdong.length){ var toact=event.xingdong.shift(); if(game.players.includes(toact)){ toact.phase(); } event.redo(); } else{ event.xingdong=_status.enemies.slice(0); } 'step 9' if(event.xingdong.length){ var enemy=event.xingdong.shift(); if(!event.justadded.includes(enemy.name)&&game.players.includes(enemy)){ enemy.phase(); } event.redo(); } else{ event.mechlist=game.treasures.slice(0); } 'step 10' if(event.mechlist.length){ var mech=event.mechlist.shift(); var info=lib.skill[mech.name+'_skill']; if(!info.filter||info.filter(mech)){ var next=game.createEvent('chessMech'); next.player=mech; next.setContent(info.content); mech.chessFocus(); if(lib.config.animation&&!lib.config.low_performance){ mech.$epic2(); } game.delay(); } if(--mech.hp<=0){ var next=game.createEvent('chessMechRemove'); next.player=mech; next.setContent('chessMechRemove'); } else{ mech.update(); } event.redo(); } 'step 11' delete event.xingdong; delete event.mechlist; if(_status.turnCount>=_status.turnTotal){ game.over(true); } else{ event.goto(0); game.delay(); } }); }, loadMap:function(){ var next=game.createEvent('loadMap'); next.setContent(function(){ if(!lib.storage.map){ lib.storage.map=['basic_small','basic_medium','basic_large']; } if(!lib.storage.newmap){ lib.storage.newmap=[]; } var sceneview=ui.create.div('.storyscene'); if(!lib.config.touchscreen&&lib.config.mousewheel){ sceneview._scrollspeed=30; sceneview._scrollnum=10; sceneview.onmousewheel=function(){ if(!this.classList.contains('lockscroll')){ ui.click.mousewheel.apply(this,arguments); } }; } lib.setScroll(sceneview); var switchScene=function(){ event.result=this.link; sceneview.delete(); setTimeout(game.resume,300); } var clickScene=function(e){ if(this.classList.contains('unselectable')) return; if(this._clicking) return; if(e&&e.stopPropagation) e.stopPropagation(); if(this.classList.contains('flipped')){ return; } if(this.classList.contains('glow3')){ this.classList.remove('glow3'); lib.storage.newmap.remove(this.name); game.save('newmap',lib.storage.newmap); } var sceneNode=this.parentNode; var current=document.querySelector('.flipped.scene'); if(current){ restoreScene(current,true); } this.content.innerHTML=''; ui.create.div('.menubutton.large.enter','进入',this.content,switchScene).link=this.name; sceneNode.classList.add('lockscroll'); var node=this; node._clicking=true; setTimeout(function(){ node._clicking=false; },700); sceneNode.dx=ui.window.offsetWidth/2-(-sceneNode.scrollLeft+this.offsetLeft+this.offsetWidth/2); if(Math.abs(sceneNode.dx)<20){ sceneNode.dx=0; } if(!sceneNode.sceneInterval&&sceneNode.dx){ sceneNode.sceneInterval=setInterval(function(){ var dx=sceneNode.dx; if(Math.abs(dx)<=2){ sceneNode.scrollLeft-=dx; clearInterval(sceneNode.sceneInterval); delete sceneNode.sceneInterval; } else{ var ddx=dx/Math.sqrt(Math.abs(dx))*1.5; sceneNode.scrollLeft-=ddx; sceneNode.dx-=ddx; } },16); } node.style.transition='all ease-in 0.2s'; node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)'; var onEnd=function(){ node.removeEventListener('webkitTransitionEnd',onEnd); node.classList.add('flipped'); sceneNode.classList.add('lockscroll'); node.style.transition='all ease-out 0.4s'; node.style.transform='perspective(1600px) rotateY(180deg) scale(1)' }; node.listenTransition(onEnd); } ui.click.scene=clickScene; var restoreScene=function(node,forced){ if(node._clicking&&!forced) return; if(node.transformInterval){ clearInterval(node.transformInterval); delete node.transformInterval; } var sceneNode=node.parentNode; node._clicking=true; setTimeout(function(){ node._clicking=false; },700); node.style.transition='all ease-in 0.2s'; node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)'; var onEnd=function(){ node.removeEventListener('webkitTransitionEnd',onEnd); node.classList.remove('flipped'); if(!sceneNode.querySelector('.flipped')){ sceneNode.classList.remove('lockscroll'); } node.style.transition='all ease-out 0.4s'; node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)' }; node.listenTransition(onEnd); } ui.click.scene2=restoreScene; var createScene=function(name){ var scene=lib.tafang.map[name]; var node=ui.create.div('.scene',clickScene); node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)'; node.name=name; node.bgnode=ui.create.div('.background.player',node); node.info=scene; ui.create.div('.avatar.menu',node.bgnode); node.namenode=ui.create.div('.name',node,(scene.name)); if(lib.storage.map.includes(name)){ if(lib.storage.newmap.includes(name)){ node.classList.add('glow3'); } node.namenode.dataset.nature='soilm'; } else{ node.classList.add('unselectable'); node.namenode.innerHTML=('未开启'); } var content=ui.create.div('.menu',node); lib.setScroll(content); node.content=content; sceneview.appendChild(node); return node; } event.custom.add.window=function(){ var current=document.querySelector('.flipped.scene'); if(current){ restoreScene(current); } } for(var i in lib.tafang.map){ createScene(i); } ui.window.appendChild(sceneview.addTempClass('start')); game.pause(); }); }, }, skill:{ tafang_mech_weixingxianjing_skill:{ filter:function(player){ for(var i=0;i<_status.enemies.length;i++){ if(!_status.enemies[i].isTurnedOver()&& get.chessDistance(player,_status.enemies[i])<=2){ return true; } } return false; }, content:function(){ var list=[]; for(var i=0;i<_status.enemies.length;i++){ if(!_status.enemies[i].isTurnedOver()&& get.chessDistance(player,_status.enemies[i])<=2){ list.push(_status.enemies[i]); } } if(list.length){ game.log('小型陷阱发动'); var target=list.randomGet(); target.turnOver(); game.logv(player,'tafang_mech_weixingxianjing_skill',[target]).node.text.style.display='none'; player.line(target,'green'); } } }, tafang_mech_nengliangqiu_skill:{ filter:function(player){ for(var i=0;i<_status.friends.length;i++){ if(get.chessDistance(player,_status.friends[i])<=3){ return true; } } return false; }, content:function(){ var list1=[],list2=[]; for(var i=0;i<_status.friends.length;i++){ if(get.chessDistance(player,_status.friends[i])<=1){ list2.push(_status.friends[i]); } else if(get.chessDistance(player,_status.friends[i])<=3){ list1.push(_status.friends[i]); } // else if(get.chessDistance(player,_status.friends[i])<=4){ // list2.push(_status.friends[i]); // } } if(list2.length){ game.asyncDraw(list2,2); player.line(list2,'green'); } if(list1.length){ game.asyncDraw(list1); player.line(list1,'green'); } if(list1.length||list2.length){ game.log('能量球发动'); game.logv(player,'tafang_mech_nengliangqiu_skill',list1.concat(list2)).node.text.style.display='none'; } } }, tafang_mech_mutong_skill:{ filter:function(player){ for(var i=0;i<_status.enemies.length;i++){ if(get.chessDistance(player,_status.enemies[i])<=3){ return true; } } return false; }, content:function(){ var list=[]; for(var i=0;i<_status.enemies.length;i++){ if(get.chessDistance(player,_status.enemies[i])<=3){ list.push(_status.enemies[i]); } } if(list.length){ game.log('木桶发动'); var targets=list.randomGets(1); game.logv(player,'tafang_mech_mutong_skill',targets).node.text.style.display='none'; player.line(targets,'green'); for(var i=0;i<targets.length;i++){ targets[i].damage('nosource'); } } } }, tafang_mech_guangmingquan_skill:{ filter:function(player){ for(var i=0;i<_status.friends.length;i++){ if(_status.friends[i].hp<_status.friends[i].maxHp&& get.chessDistance(player,_status.friends[i])<=2){ return true; } } return false; }, content:function(){ var list=[]; for(var i=0;i<_status.friends.length;i++){ if(_status.friends[i].hp<_status.friends[i].maxHp&& get.chessDistance(player,_status.friends[i])<=2){ list.push(_status.friends[i]); } } if(list.length){ game.log('光明泉发动'); player.line(list,'green'); game.logv(player,'tafang_mech_guangmingquan_skill',list.slice(0)).node.text.style.display='none'; while(list.length){ list.shift().recover(); } } } }, tafang_mech_jiguanren_skill:{ filter:function(player){ for(var i=0;i<_status.enemies.length;i++){ if(get.chessDistance(player,_status.enemies[i])<=3){ return true; } } return false; }, content:function(){ 'step 0' var list=[]; for(var i=0;i<_status.enemies.length;i++){ if(get.chessDistance(player,_status.enemies[i])<=3){ list.push(_status.enemies[i]); } } if(list.length){ game.log('机关人发动'); player.line(list,'green'); game.logv(player,'tafang_mech_jiguanren_skill',list.slice(0)).node.text.style.display='none'; event.list=list; } else{ event.finish(); } 'step 1' if(event.list.length){ var target=event.list.shift(); var he=target.getCards('he'); if(he.length){ target.discard(he.randomGets(Math.ceil(Math.random()*2))); } event.redo(); } } }, tafang_mech_gongchengche_skill:{ filter:function(player){ for(var i=0;i<_status.enemies.length;i++){ if(get.chessDistance(player,_status.enemies[i])<=2){ return true; } } return false; }, content:function(){ var list=[]; for(var i=0;i<_status.enemies.length;i++){ if(get.chessDistance(player,_status.enemies[i])<=2){ list.push(_status.enemies[i]); } } if(list.length){ game.log('攻城车发动'); var target=list.randomGet(); player.line(target,'fire'); target.damage('fire','nosource'); var he=target.getCards('he'); if(he.length){ target.discard(he.randomGet()); } game.logv(player,'tafang_mech_gongchengche_skill',[target]).node.text.style.display='none'; } } }, }, translate:{ friend:'友', enemy:'敌', neutral:'中', trueColor:"zhu", falseColor:"wei", _chessmove:'移动', mode_tafang_character_config:'塔防模式', mode_tafang_card_config:'塔防模式', tafang_mech_weixingxianjing:'小型陷阱', tafang_mech_weixingxianjing_skill:'捕猎', tafang_mech_weixingxianjing_skill_info:'每一轮令距离你2格以内的一名随机敌人翻面。', tafang_mech_mutong:'木桶', tafang_mech_mutong_skill:'飞滚', tafang_mech_mutong_skill_info:'每一轮对距离3格以内的一名随机敌人造成1点伤害。', tafang_mech_nengliangqiu:'能量球', tafang_mech_nengliangqiu_skill:'充能', tafang_mech_nengliangqiu_skill_info:'每一轮令距离3格以内的所有友方角色摸1张牌,距离1以内改为摸2张。', tafang_mech_jiguanren:'机关人', tafang_mech_jiguanren_skill:'掠夺', tafang_mech_jiguanren_skill_info:'每一轮弃置3格以内的所有敌方角色各1~2张牌。', tafang_mech_gongchengche:'攻城车', tafang_mech_gongchengche_skill:'攻坚', tafang_mech_gongchengche_skill_info:'每一轮对距离2格以内的一名随机敌方角色造成1点火焰伤害,并随机弃置其一张牌。', tafang_mech_guangmingquan:'光明泉', tafang_mech_guangmingquan_skill:'圣疗', tafang_mech_guangmingquan_skill_info:'每一轮令距离2格以内的所有友方角色各回复1点体力。', tafang_mech_dubiaoxianjing:'毒镖陷阱', tafang_mech_dubiaoxianjing_skill:'毒镖', tafang_mech_dubiaoxianjing_skill_info:'每当距离2格以内的一名敌方角色。', tafang_mech_jiqishi:'集合石', tafang_mech_shenmidiaoxiang:'神秘雕像', tafang_mech_shenpanxianjing:'审判之刃', tafang_mech_shiyuansu:'石元素', tafang_mech_wuyashenxiang:'乌鸦神像', }, characterPack:{ mode_tafang:{ // tafang_mech_dubiaoxianjing:['','',4,[],['boss'],2], // tafang_mech_wuyashenxiang:['','',4,[],['boss'],2], // tafang_mech_shenpanxianjing:['','',4,[],['boss'],2], // tafang_mech_shenmidiaoxiang:['','',4,[],['boss'],5], // tafang_mech_shiyuansu:['','',4,[],['boss'],5], // tafang_mech_jiqishi:['','',4,[],['boss'],5], tafang_mech_guangmingquan:['','',3,[],['boss'],3], tafang_mech_nengliangqiu:['','',3,[],['boss'],3], tafang_mech_jiguanren:['','',3,[],['boss'],3], tafang_mech_weixingxianjing:['','',3,[],['boss'],4], tafang_mech_mutong:['','',3,[],['boss'],4], tafang_mech_gongchengche:['','',3,[],['boss'],4], } }, cardPack:{ mode_tafang:[] }, posmap:{}, help:{ '塔防模式': '<ul><li>阻上敌人到达最下方的出口,坚持到给定的回合数即获得胜利<li>'+ '每轮可获得10个行动点,用来布置机关、招募武将。场上每有一个友方武将,行动点数-1。游戏难度将影响不同操作消耗的行动点数。未用完的行动点将减半(向下取整)并累积到下一轮<li>'+ '每一轮在最上方的一个随机位置增加一名敌人,若最上方已有角色,则将其下移一格<li>'+ '战场上最多出现3个相同的机关,每个机关在置入战场3轮后消失。战场上最多招募5名友方角色。<li>'+ '敌方角色到达底部出口时游戏失败,已方角色到达底部出口,将被移出游戏', }, }; });