Merge branch 'libccy:PR-Branch' into PR-Branch

This commit is contained in:
157 2023-12-04 18:51:47 +08:00 committed by GitHub
commit 2671d97551
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 2285 additions and 2210 deletions

View File

@ -4,9 +4,7 @@ https://spmario233.github.io/noname/index.html (图片素材加载速度较慢
客户端下载戳这里: 客户端下载戳这里:
GitHub https://github.com/libccy/noname/releases/tag/SSS GitHub https://github.com/libccy/noname/releases/tag/chromium77-client
Coding https://nakamurayuri.coding.net/p/noname/d/noname/git/releases/SSS
网页端推荐使用Chrome系内核浏览器游玩不推荐使用低版本Firefox浏览器 网页端推荐使用Chrome系内核浏览器游玩不推荐使用低版本Firefox浏览器

View File

@ -950,7 +950,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:['gainAfter','loseAsyncAfter']}, trigger:{player:['gainAfter','loseAsyncAfter']},
forced:true, forced:true,
filter:(event,player)=>{ filter:(event,player)=>{
if(player==_status.currentPhase) return false; // if(player==_status.currentPhase) return false;
if(event.getParent('phaseDraw',true)) return false;
const evt=player.getHistory('gain')[0];
if(!evt) return false;
if(event.name=='gain'){
if(evt!=event||event.getlx===false) return false;
}
else if(evt.getParent()!=event) return false;
const hs=player.getCards('h'); const hs=player.getCards('h');
if(!hs.length) return false; if(!hs.length) return false;
const cards=event.getg(player); const cards=event.getg(player);
@ -998,17 +1005,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.give(cards,target,true); player.give(cards,target,true);
event.color=get.color(cards[0],player); event.color=get.color(cards[0],player);
'step 1' 'step 1'
if(target.isIn()){
var num=Math.min(Math.abs(target.getHp()-player.getHp()),5);
if(num>0) player.draw(num);
}
'step 2'
if(event.color=='red'){ if(event.color=='red'){
if(target.getHp()<=player.getHp()&&target.isDamaged()) target.recover(); if(target.getHp()<=player.getHp()&&target.isDamaged()) target.recover();
} }
else if(event.color=='black'){ else if(event.color=='black'){
if(target.getHp()>=player.getHp()) target.loseHp() if(target.getHp()>=player.getHp()) target.loseHp()
} }
'step 2'
if(target.isIn()){
var num=Math.min(Math.abs(target.getHp()-player.getHp()),5);
if(num>0) player.draw(num);
}
}, },
ai:{ ai:{
combo:'dclingkong', combo:'dclingkong',
@ -1944,17 +1951,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.draw(2); target.draw(2);
'step 1' 'step 1'
var marked=target.hasMark('dcjizhong'); var marked=target.hasMark('dcjizhong');
var cards=target.getCards('h');
if(marked){ if(marked){
if(target.countCards('h')) target.chooseToDiscard('集众:弃置三张手牌',3,true); if(cards.length<=3) event._result={bool:true,cards:cards};
event.finish(); else target.chooseCard(`集众:交给${get.translation(player)}三张手牌`,3,true);
} }
else{ else{
target.chooseToDiscard('集众:弃置三张手牌,或点击“取消”获得“信众”标记',3); target.chooseCard(`集众:交给${get.translation(player)}三张手牌,或点击“取消”获得“信众”标记`,3).set('ai',card=>{
if(get.event('goon')) return 20-get.value(card);
return 1-get.value(card);
}).set('goon',get.attitude(target,player)>0);
} }
'step 2' 'step 2'
if(!result.bool){ if(!result.bool){
target.addMark('dcjizhong',1); target.addMark('dcjizhong',1);
} }
else{
target.give(result.cards,player);
}
}, },
marktext:'信', marktext:'信',
intro:{ intro:{
@ -2035,8 +2049,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
forced:true, forced:true,
content:function(){ content:function(){
player.loseHp();
player.draw(2); player.draw(2);
player.loseHp();
} }
}, },
//董绾 //董绾
@ -11291,11 +11305,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcmoyu_info:'出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌然后其可以对你使用一张无距离限制的【杀】且此【杀】伤害基数为XX为你于本回合发动此技能的次数。若此【杀】对你造成了伤害你令此技能于本回合失效。', dcmoyu_info:'出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌然后其可以对你使用一张无距离限制的【杀】且此【杀】伤害基数为XX为你于本回合发动此技能的次数。若此【杀】对你造成了伤害你令此技能于本回合失效。',
zhangchu:'张楚', zhangchu:'张楚',
dcjizhong:'集众', dcjizhong:'集众',
dcjizhong_info:'出牌阶段限一次。你可以令一名其他角色摸两张牌然后其选择一项1.若其没有“信众”标记其获得“信众”标记2.弃置三张手牌。', dcjizhong_info:'出牌阶段限一次。你可以令一名其他角色摸两张牌然后其选择一项1.若其没有“信众”标记其获得“信众”标记2.交给你三张手牌。',
dcrihui:'日彗', dcrihui:'日彗',
dcrihui_info:'每回合限一次。当你使用普通锦囊牌或黑色基本牌结算结束后若此牌的目标数为1且目标不为你且其没有“信众”则所有有“信众”的角色依次视为对其使用一张与此牌牌名和属性相同的牌有“信众”则你可以获得其区域里的一张牌。', dcrihui_info:'每回合限一次。当你使用普通锦囊牌或黑色基本牌结算结束后若此牌的目标数为1且目标不为你且其没有“信众”则所有有“信众”的角色依次视为对其使用一张与此牌牌名和属性相同的牌有“信众”则你可以获得其区域里的一张牌。',
dcguangshi:'光噬', dcguangshi:'光噬',
dcguangshi_info:'锁定技。准备阶段,若所有其他角色均有“信众”,你失去1点体力并摸两张牌。', dcguangshi_info:'锁定技。准备阶段,若所有其他角色均有“信众”,你摸两张牌并失去1点体力。',
dongwan:'董绾', dongwan:'董绾',
dcshengdu:'生妒', dcshengdu:'生妒',
dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段得到牌后,你摸等量的牌。', dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段得到牌后,你摸等量的牌。',
@ -11344,9 +11358,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yue_zhoufei_prefix:'乐', yue_zhoufei_prefix:'乐',
dclingkong:'灵箜', dclingkong:'灵箜',
dclingkong_tag:'箜篌', dclingkong_tag:'箜篌',
dclingkong_info:'锁定技。①游戏开始时,你将所有手牌标记为“箜篌”。②你的“箜篌”牌不计入手牌上限。③当你于回合外得牌后,系统随机将其中的一张牌标记为“箜篌”。', dclingkong_info:'锁定技。①游戏开始时,你将所有手牌标记为“箜篌”。②你的“箜篌”牌不计入手牌上限。③当你于回合内首次于摸牌阶段外得牌后,系统随机将其中的一张牌标记为“箜篌”。',
dcxianshu:'贤淑', dcxianshu:'贤淑',
dcxianshu_info:'出牌阶段,你可以将一张“箜篌”正面向上交给一名其他角色。若此牌为红色且该角色的体力值不大于你则其回复1点体力若此牌为黑色且该角色的体力值不小于你则其失去1点体力。此技能结算完成后你摸X张牌X为你与其的体力值之差且至多为5。', dcxianshu_info:'出牌阶段,你可以将一张“箜篌”正面向上交给一名其他角色然后你摸X张牌X为你与其的体力值之差且至多为5。若此牌为红色且该角色的体力值不大于你则其回复1点体力若此牌为黑色且该角色的体力值不小于你则其失去1点体力。',
dc_zhangmancheng:'张曼成', dc_zhangmancheng:'张曼成',
dclvecheng:'掠城', dclvecheng:'掠城',
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。', dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',

View File

@ -4197,7 +4197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
var check=0; var check=0;
if(player.hasHistory('gain',evt=>{ if(player.hasHistory('gain',evt=>{
return evt.getParent(2)==event&&evt.cards.length>=2; return evt.getParent(2)==event&&evt.cards.length>=3;
})) check|=1; })) check|=1;
if(game.getGlobalHistory('changeHp',evt=>{ if(game.getGlobalHistory('changeHp',evt=>{
return evt.getParent().name=='recover'&&evt.getParent(2)==event; return evt.getParent().name=='recover'&&evt.getParent(2)==event;
@ -4223,7 +4223,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
if((player.storage.dcxinyou_effect&1)>0) player.loseHp(); if((player.storage.dcxinyou_effect&1)>0) player.loseHp();
if((player.storage.dcxinyou_effect&2)>0) player.chooseToDiscard('心幽:弃置两张牌',2,true,'he'); if((player.storage.dcxinyou_effect&2)>0) player.chooseToDiscard('心幽:请弃置一张牌',1,true,'he');
} }
} }
} }
@ -4547,43 +4547,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
content:function(){ content:function(){
'step 0' 'step 0'
if(lib.skill.dcjinjie.hasPhase(player)){ player.chooseBool(get.prompt('dcjinjie',trigger.player),'令其摸一张牌').set('ai',()=>{
player.chooseBool(get.prompt('dcjinjie',trigger.player),'令其摸一张牌').set('ai',()=>{ return get.attitude(_status.event.player,_status.event.getTrigger().player)>0;
return get.attitude(_status.event.player,_status.event.getTrigger().player)>0; });
});
}
else{
var num=0;
var history=player.actionHistory;
for(var i=history.length-1;i>=0;i--){
for(var evt of history[i].useSkill){
if(evt.skill=='dcjinjie') num++;
}
if(history[i].isRound) break;
}
if(num==0){
player.chooseBool(get.prompt('dcjinjie',trigger.player),'令其回复1点体力').set('ai',()=>{
var player=_status.event.player;
return get.effect(_status.event.getTrigger().player,{name:'tao'},player,player)>0;
});
}
else{
player.chooseToDiscard(get.prompt('dcjinjie',trigger.player),'弃置'+get.cnNumber(num)+'张牌令其回复1点体力','he',num).set('ai',card=>{
if(_status.event.eff>0) return get.value({name:'tao'})-get.value(card);
return 0;
}).set('eff',get.effect(trigger.player,{name:'tao'},player,player)).set('logSkill',['dcjinjie',trigger.player]);
}
event.goto(2);
}
'step 1' 'step 1'
if(result.bool){ if(result.bool){
player.logSkill('dcjinjie',trigger.player); player.logSkill('dcjinjie',trigger.player);
trigger.player.draw(); trigger.player.draw();
} }
event.finish(); else event.finish();
if(lib.skill.dcjinjie.hasPhase(player)) event.finish();
'step 2' 'step 2'
var num=0;
var history=player.actionHistory;
for(var i=history.length-1;i>=0;i--){
for(var evt of history[i].useSkill){
if(evt.skill=='dcjinjie') num++;
}
if(history[i].isRound) break;
}
if(num==0){
player.chooseBool(get.prompt('dcjinjie',trigger.player),'令其回复1点体力').set('ai',()=>{
var player=_status.event.player;
return get.effect(_status.event.getTrigger().player,{name:'tao'},player,player)>0;
});
}
else{
player.chooseToDiscard(get.prompt('dcjinjie',trigger.player),'弃置'+get.cnNumber(num)+'张牌令其回复1点体力','he',num).set('ai',card=>{
if(_status.event.eff>0) return get.value({name:'tao'})-get.value(card);
return 0;
}).set('eff',get.effect(trigger.player,{name:'tao'},player,player));
}
'step 3'
if(result.bool){ if(result.bool){
if(!result.cards||!result.cards.length) player.logSkill('dcjinjie',trigger.player); player.line(trigger.player,'green');
trigger.player.recover(); trigger.player.recover();
} }
}, },
@ -4593,12 +4590,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseZhunbeiBegin'}, trigger:{player:'phaseZhunbeiBegin'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
return game.hasPlayer(current=>current.isHealthy()&&player.canUse('sha',current,false)); return game.hasPlayer(current=>(current.getHp()>player.getHp()||current.countCards('h')>player.countCards('h'))&&player.canUse('sha',current,false));
}, },
content:function(){ content:function(){
'step 0' 'step 0'
player.chooseTarget(get.prompt('dcjue'),'视为对一名未受伤的角色使用一张【杀】',(card,player,target)=>{ player.chooseTarget(get.prompt('dcjue'),'视为对一名体力值或手牌数大于你的角色使用一张【杀】',(card,player,target)=>{
return player.canUse('sha',target,false)&&target.isHealthy(); return player.canUse('sha',target,false)&&(target.getHp()>player.getHp()||target.countCards('h')>player.countCards('h'));
}).set('ai',target=>{ }).set('ai',target=>{
return get.effect(target,{name:'sha'},_status.event.player); return get.effect(target,{name:'sha'},_status.event.player);
}); });
@ -13155,7 +13152,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dczhaohan:'昭汉', dczhaohan:'昭汉',
dczhaohan_info:'摸牌阶段你可以多摸两张牌然后你于得到牌后选择一项1.将两张手牌交给一名没有手牌的角色2.弃置两张手牌。', dczhaohan_info:'摸牌阶段你可以多摸两张牌然后你于得到牌后选择一项1.将两张手牌交给一名没有手牌的角色2.弃置两张手牌。',
dcjinjie:'尽节', dcjinjie:'尽节',
dcjinjie_info:'当一名角色进入濒死状态时,若你本轮:进行过回合,你可以令其摸一张牌;未进行过回合你可以弃置X张手牌令其回复1点体力X为本轮你发动过〖尽节〗的次数。', dcjinjie_info:'当一名角色进入濒死状态时,可以令其摸一张牌。然后若你本轮未进行过回合你可以弃置X张手牌令其回复1点体力X为本轮你发动过〖尽节〗的次数。',
dcjue:'举讹', dcjue:'举讹',
dcjue_info:'准备阶段,你可以视为对一名未受伤的角色使用一张【杀】。', dcjue_info:'准备阶段,你可以视为对一名未受伤的角色使用一张【杀】。',
dc_tengfanglan:'滕芳兰', dc_tengfanglan:'滕芳兰',
@ -13167,7 +13164,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcyuandi:'元嫡', dcyuandi:'元嫡',
dcyuandi_info:'当其他角色于其出牌阶段使用第一张牌时若此牌仅指定其为目标你可以选择一项1.弃置其一张手牌2.你与其各摸一张牌。', dcyuandi_info:'当其他角色于其出牌阶段使用第一张牌时若此牌仅指定其为目标你可以选择一项1.弃置其一张手牌2.你与其各摸一张牌。',
dcxinyou:'心幽', dcxinyou:'心幽',
dcxinyou_info:'出牌阶段限一次。你可以将体力回复至上限并将手牌补至体力上限。若你以此法:获得了至少两张牌你于结束阶段失去1点体力回复了体力你于结束阶段弃置两张牌。', dcxinyou_info:'出牌阶段限一次。你可以将体力回复至上限并将手牌补至体力上限。若你以此法:获得了至少三张牌你于结束阶段失去1点体力回复了体力你于结束阶段弃置一张牌。',
zerong:'笮融', zerong:'笮融',
dccansi:'残肆', dccansi:'残肆',
dccansi_info:'锁定技。准备阶段你回复1点体力然后选择一名其他角色其回复1点体力你视为对其依次使用以下能使用的牌【杀】无距离限制、【决斗】、【火攻】。当其以此法受到1点伤害后你摸两张牌。', dccansi_info:'锁定技。准备阶段你回复1点体力然后选择一名其他角色其回复1点体力你视为对其依次使用以下能使用的牌【杀】无距离限制、【决斗】、【火攻】。当其以此法受到1点伤害后你摸两张牌。',

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
window.config={ window.config={
extension_sources:{ extension_sources:{
'GitHub Proxy':'https://ghproxy.com/https://raw.githubusercontent.com/libccy/noname-extension/master/', 'GitHub Proxy':'https://mirror.ghproxy.com/https://raw.githubusercontent.com/libccy/noname-extension/master/',
FastGit:'https://raw.fgit.cf/libccy/noname-extension/master/', FastGit:'https://raw.fgit.cf/libccy/noname-extension/master/',
GitHub:'https://raw.githubusercontent.com/libccy/noname-extension/master/' GitHub:'https://raw.githubusercontent.com/libccy/noname-extension/master/'
}, },

View File

@ -125,11 +125,11 @@ new Promise(resolve=>{
configprefix:'noname_0.9_', configprefix:'noname_0.9_',
versionOL:27, versionOL:27,
updateURLS:{ updateURLS:{
coding:'https://raw.fgit.cf/libccy/noname', coding:'https://gitcode.net/sinat_33405273/noname/-/raw/',
github:'https://raw.githubusercontent.com/libccy/noname', github:'https://raw.githubusercontent.com/libccy/noname',
}, },
updateURL:'https://raw.githubusercontent.com/libccy/noname', updateURL:'https://raw.githubusercontent.com/libccy/noname',
mirrorURL:'https://raw.fgit.cf/libccy/noname', mirrorURL:'https://gitcode.net/sinat_33405273/noname/-/raw/',
hallURL:'47.99.105.222', hallURL:'47.99.105.222',
assetURL:assetURL, assetURL:assetURL,
userAgent:userAgent, userAgent:userAgent,
@ -1344,7 +1344,7 @@ new Promise(resolve=>{
init:'coding', init:'coding',
unfrequent:true, unfrequent:true,
item:{ item:{
coding:'FastGit', coding:'CSDN',
github:'GitHub', github:'GitHub',
}, },
onclick:function(item){ onclick:function(item){
@ -63673,6 +63673,10 @@ new Promise(resolve=>{
const tip='检测到您的浏览器内核版本小于77请及时升级浏览器或手机webview内核'; const tip='检测到您的浏览器内核版本小于77请及时升级浏览器或手机webview内核';
console.warn(tip); console.warn(tip);
game.print(tip); game.print(tip);
const redirect_tip='您使用的浏览器或无名杀客户端内核版本过低,将在未来的版本被废弃!\n点击“确认”以前往GitHub下载最新版无名杀客户端可能需要科学上网。';
if(confirm(redirect_tip)){
window.open('https://github.com/libccy/noname/releases/tag/chromium77-client');
}
} }
lib.init.init(); lib.init.init();
}); });

View File

@ -68,6 +68,7 @@ window.noname_source_list=[
'game/pressure.js', 'game/pressure.js',
'game/source.js', 'game/source.js',
'game/update.js', 'game/update.js',
'game/src/lib/announce.js',
'image/card/cardtempname_bg.png', 'image/card/cardtempname_bg.png',
'image/flappybird/BG.png', 'image/flappybird/BG.png',
'image/flappybird/botpipe.png', 'image/flappybird/botpipe.png',

View File

@ -1,42 +1,34 @@
window.noname_update={ window.noname_update={
version:'1.10.4', version:'1.10.5',
update:'1.10.3.1', update:'1.10.4',
changeLog:[ changeLog:[
'整合@copcap @PZ157 @mengxinzxz @lieren2023 @CatIgnore @Tipx-L @kuangshen04 @nonameShijian @universe-st @BauxiteAl @Rintim @S-N-O-R-L-A-X @xiaoas @kola-king @Howard-Zhou-77 的Pull Request', '整合@Rintim @copcap @kuangshen04 @mengxinzxz @Ansolve @PZ157 @Tipx-L @nonameShijian @MDYY1 @S-N-O-R-L-A-X @universe-st 的Pull Request',
'《江山如故·转》武将包神贾诩、族王沦、族荀攸、张曼成、星曹仁、吕伯奢、张燕、OL丁尚浣、OL李婉、数学孟优', '《3D精选》武将包更新',
'9人局+10人局、“谋攻篇”游戏模式、“群雄割据”模式常驻', '鲍信、成济成倅、董昭、贾充、吴班、蒯祺、来敏、李遗、马伶俐、刘伶、哪吒、OL费祎、谋小乔、谋卢植、星袁术、孙桓、孙瑜、诸葛若雪、神华佗、乐蔡邕、庞山明、孙綝、袁胤、手杀向朗、界张梁、界司马朗、界诸葛诞、界曹叡、谋黄月英、谋诸葛亮、OL刘焉、侠刘备、侠夏侯子萼、侠夏侯惇、侠张葳、曹轶、田尚衣',
'游戏内对象class化事件handler等新机制', '英文版身份模式机制、欢乐成双四号位保护',
'其他AI优化与bug修复', '其他AI优化与bug修复',
], ],
files:[ files:[
'card/extra.js', 'card/extra.js',
'card/gujian.js',
'card/guozhan.js', 'card/guozhan.js',
'card/gwent.js',
'card/hearth.js',
'card/huanlekapai.js',
'card/mtg.js',
'card/sp.js', 'card/sp.js',
'card/standard.js', 'card/standard.js',
'card/swd.js', 'card/yingbian.js',
'card/yongjian.js', 'card/yongjian.js',
'card/yunchou.js', 'card/yunchou.js',
'card/zhenfa.js', 'card/zhulu.js',
'character/clan.js', 'character/clan.js',
'character/collab.js', 'character/collab.js',
'character/ddd.js',
'character/diy.js', 'character/diy.js',
'character/extra.js', 'character/extra.js',
'character/gujian.js', 'character/gujian.js',
'character/gwent.js',
'character/hearth.js', 'character/hearth.js',
'character/huicui.js', 'character/huicui.js',
'character/jiange.js',
'character/jsrg.js', 'character/jsrg.js',
'character/mobile.js', 'character/mobile.js',
'character/mtg.js',
'character/offline.js', 'character/offline.js',
'character/old.js', 'character/old.js',
'character/ow.js',
'character/rank.js', 'character/rank.js',
'character/refresh.js', 'character/refresh.js',
'character/sb.js', 'character/sb.js',
@ -47,19 +39,19 @@ window.noname_update={
'character/standard.js', 'character/standard.js',
'character/swd.js', 'character/swd.js',
'character/tw.js', 'character/tw.js',
'character/xiake.js',
'character/xianding.js', 'character/xianding.js',
'character/xianjian.js', 'character/xianjian.js',
'character/xinghuoliaoyuan.js', 'character/xinghuoliaoyuan.js',
'character/yijiang.js', 'character/yijiang.js',
'character/yingbian.js', 'character/yingbian.js',
'character/yxs.js', 'character/yxs.js',
'character/zhuogui.js',
'game/config.js', 'game/config.js',
'game/core-js-bundle.js',
'game/game.js', 'game/game.js',
'game/pinyinjs.js', 'game/pinyinjs.js',
'game/source.js',
'game/src/lib/announce.js',
'layout/default/layout.css', 'layout/default/layout.css',
'layout/newlayout/global.css',
'mode/boss.js', 'mode/boss.js',
'mode/brawl.js', 'mode/brawl.js',
'mode/chess.js', 'mode/chess.js',
@ -67,8 +59,7 @@ window.noname_update={
'mode/doudizhu.js', 'mode/doudizhu.js',
'mode/guozhan.js', 'mode/guozhan.js',
'mode/identity.js', 'mode/identity.js',
'mode/stone.js', 'mode/single.js',
'mode/tafang.js',
'mode/versus.js', 'mode/versus.js',
] ]
}; };