noname/mode/wuxian.js

773 lines
23 KiB
JavaScript

mode.infinity={
game:{
start:function(){
var next=game.createEvent('load',false);
next.content=function(){
"step 0"
game.import('identity');
if(!lib.storage.version||lib.storage.version<0.833){
localStorage.setItem(lib.config.mode,"{}");
}
"step 1"
ui.create.arena();
ui.auto.hide();
ui.create.cards();
game.finishCards();
game.delay();
"step 2"
if(get.config('save_progress')&&lib.storage.saved) game.loadGame();
else game.prepareGame();
"step 3"
event.trigger('gameStart');
if(get.config('save_progress')&&lib.storage.saved){
var card;
for(var i=0;i<game.players.length;i++){
for(var j=0;j<lib.storage.players[i].handcards.length;j++){
card=get.cardPile(lib.storage.players[i].handcards[j]);
if(get.itemtype(card)=='card'){
if(lib.config.sort_card(card)>0) game.players[i].node.handcards1.appendChild(card);
else game.players[i].node.handcards2.appendChild(card);
}
}
for(var j=0;j<lib.storage.players[i].equips.length;j++){
card=get.cardPile(lib.storage.players[i].equips[j]);
if(get.itemtype(card)=='card'&&get.type(card)=='equip'){
game.players[i].equip(card);
}
}
for(var j=0;j<lib.storage.players[i].judges.length;j++){
card=get.cardPile(lib.storage.players[i].judges[j]);
if(get.itemtype(card)=='card'&&get.type(card)=='delay'){
game.players[i].addJudge(card);
}
}
if(lib.storage.players[i].linked) game.players[i].classList.add('linked');
if(lib.storage.players[i].turnedover) game.players[i].classList.add('turnedover');
if(lib.storage.players[i].out) game.players[i].classList.add('out');
game.players[i].update();
}
event.trigger('gameStart');
game.phaseLoop(game.players[lib.storage.player]);
}
else{
event.trigger('gameStart');
game.gameDraw(game.zhu);
game.phaseLoop(game.zhu);
}
}
},
prepareGame:function(){
var next=game.createEvent('prepareGame',false);
next.content=function(){
"step 0"
_status.list=[];
for(var i in lib.character){
_status.list.push(i);
}
_status.list.remove('zuoci');
_status.list.remove('caiwenji');
var groupSort=function(name){
if(lib.character[name][1]=='wei') return 0;
if(lib.character[name][1]=='shu') return 1;
if(lib.character[name][1]=='wu') return 2;
if(lib.character[name][1]=='qun') return 3;
}
_status.list.sort(function(a,b){
return groupSort(a)-groupSort(b);
});
var dialog=ui.create.dialog('选择角色',[_status.list,'character']);
game.pause();
for(var i=0;i<dialog.buttons.length;i++){
dialog.buttons[i].classList.add('selectable');
}
event.custom.replace.button=function(button){
_status.avatar=button.link;
_status.list.remove(button.link);
dialog.close();
game.resume();
}
"step 1"
ui.auto.show();
ui.create.players(2);
ui.create.me();
ui.learned={};
game.zhu=game.me;
game.me.init(_status.avatar);
game.me.setIdentity('zhu');
game.me.identity='zhu';
game.me.identityShown=true;
game.me.jp=200;
game.me.jpa=200;
game.me.jpe=0;
for(var i=0;i<game.me.skills.length;i++){
game.me.modeSkills.add(game.me.skills[i]);
}
game.me.addSkill(['infinity_learn','infinity_penalty','infinity_jp','infinity_add','infinity_add2']);
game.me.modeSkills.add('infinity_learn','infinity_penalty','infinity_jp','infinity_add','infinity_add2');
for(var i in lib.player){
for(var j in lib.player[i]){
if(!lib.skill[j]||game.me.modeSkills.contains(j)) delete lib.player[i][j];
}
}
game.me.learned={
initiative:['无'],
trigger:['无'],
lock:['无'],
limited:['无'],
};
game.me.learned1='无';
game.me.learned2='无';
game.me.learned3='无';
game.me.learned4='无';
game.me.learned5='无';
game.me.learned6='无';
game.me.learned7='无';
game.players[1].init(_status.list.randomGet());
_status.list.remove(game.players[1].name);
game.players[1].setIdentity('fan');
game.players[1].identity='fan';
game.players[1].identityShown=true;
}
},
loadGame:function(){
var next=game.createEvent('prepareGame',false);
next.content=function(){
"step 0"
_status.list=[];
for(var i in lib.character){
_status.list.push(i);
}
_status.list.remove('zuoci');
_status.list.remove('caiwenji');
for(var i=0;i<lib.storage.players.length;i++){
_status.list.remove(lib.storage.players[i].name);
_status.list.remove(lib.storage.players[i].name2);
}
"step 1"
ui.auto.show();
ui.create.players(lib.storage.players.length);
ui.create.me();
ui.learned={};
game.zhu=game.me;
for(var i=0;i<lib.storage.players.length;i++){
game.players[i].init(lib.storage.players[i].name,lib.storage.players[i].name2);
game.players[i].identity=lib.storage.players[i].identity;
game.players[i].setIdentity();
game.players[i].identityShown=true;
_status.list.remove(game.players[i].name);
_status.list.remove(game.players[i].name2);
game.players[i].hp=lib.storage.players[i].hp;
game.players[i].maxHp=lib.storage.players[i].maxHp;
game.players[i].update();
if(lib.storage.players[i].linked) game.players[i].classList.add('linked');
if(lib.storage.players[i].turnedover) game.players[i].classList.add('turnedover');
if(lib.storage.players[i].out) game.players[i].classList.add('out');
for(var j in lib.storage.players[i].storage){
game.players[i].storage[j]=lib.storage.players[i].storage[j];
}
}
for(var i=0;i<game.me.skills.length;i++){
game.me.modeSkills.add(game.me.skills[i]);
}
game.me.addSkill(['infinity_learn','infinity_penalty','infinity_jp','infinity_add','infinity_add2']);
game.me.modeSkills.add('infinity_learn','infinity_penalty','infinity_jp','infinity_add','infinity_add2');
for(var i in lib.player){
for(var j in lib.player[i]){
if(!lib.skill[j]||game.me.modeSkills.contains(j)) delete lib.player[i][j];
}
}
game.me.jp=lib.storage.jp;
game.me.jpa=lib.storage.jpa;
game.me.jpe=lib.storage.jpe;
game.me.learned=lib.storage.learned;
game.me.learned1=lib.storage.learned1;
game.me.learned2=lib.storage.learned2;
game.me.learned3=lib.storage.learned3;
game.me.learned4=lib.storage.learned4;
game.me.learned5=lib.storage.learned5;
game.me.learned6=lib.storage.learned6;
game.me.learned7=lib.storage.learned7;
if(game.me.learned1!='无') game.me.addSkill(game.me.learned1);
if(game.me.learned2!='无') game.me.addSkill(game.me.learned2);
if(game.me.learned3!='无') game.me.addSkill(game.me.learned3);
if(game.me.learned4!='无') game.me.addSkill(game.me.learned4);
if(game.me.learned5!='无') game.me.addSkill(game.me.learned5);
if(game.me.learned6!='无') game.me.addSkill(game.me.learned6);
if(game.me.learned7!='无') game.me.addSkill(game.me.learned7);
}
},
saveProgress:function(current){
var players=[];
var player=game.me;
var handcards,equips,judges,cards,storage;
var count=0;
do{
handcards=[];equips=[];judges=[];
cards=player.get('h');
for(var i=0;i<cards.length;i++){
handcards.push(cards[i].name);
}
cards=player.get('e');
for(var i=0;i<cards.length;i++){
equips.push(cards[i].name);
}
cards=player.get('j');
for(var i=0;i<cards.length;i++){
judges.push(cards[i].name);
}
storage={};
for(var i in player.storage){
if(typeof player.storage[i]!='object') storage[i]=player.storage[i];
}
players.push({
name:player.name,
name2:player.name2,
handcards:handcards,
equips:equips,
judges:judges,
hp:player.hp,
maxHp:player.maxHp,
identity:player.identity,
linked:player.isLinked(),
turnedover:player.isTurnedOver(),
out:player.isOut(),
storage:storage,
});
player=player.next;
if(count++>20) {alert('!!!');break;}
}
while(player!=game.me);
game.save('player',current.dataset.position);
game.save('players',players);
game.save('jpa',game.me.jpa);
game.save('jpe',game.me.jpe);
game.save('jp',game.me.jp);
game.save('learned',game.me.learned);
game.save('learned1',game.me.learned1);
game.save('learned2',game.me.learned2);
game.save('learned3',game.me.learned3);
game.save('learned4',game.me.learned4);
game.save('learned5',game.me.learned5);
game.save('learned6',game.me.learned6);
game.save('learned7',game.me.learned7);
game.save('saved',true);
},
clearProgress:function(){
localStorage.setItem(lib.config.mode,"{}");
lib.storage={};
},
onOver:function(){
ui.create.control('继续',function(){
while(ui.dialogs.length) ui.dialogs[0].close();
while(ui.controls.length) ui.controls[0].close();
_status.over=false;
if(game.me.isDead()){
game.me.revive(game.me.maxHp);
game.me.draw(4);
}
else{
var player=game.addPlayer();
player.init(_status.list.randomGet());
_status.list.remove(player.name);
if(Math.random()<get.difficulty()/6){
player.init(player.name,_status.list.randomGet());
_status.list.remove(player.name2);
}
player.setIdentity('fan');
player.identity='fan';
player.identityShown=true;
player.draw(get.difficulty());
}
game.loop();
});
}
},
player:{
initiative:{
huoji:100,
luanji:100,
fanjian:150,
duanliang:160,
lianhuan:160,
qiangxi:200,
jiuchi:200,
longdan:200,
wusheng:250,
zhijian:250,
lijian:300,
dimeng:300,
quhu:300,
qixi:300,
longhun:300,
guose:350,
lijian:350,
rende:400,
kanpo:450,
tianyi:450,
tiaoxin:450,
qingguo:500,
gongxin:500,
jieyin:800,
kurou:1000,
zhiheng:2000,
},
trigger:{
shuangxiong:100,
jushou:100,
tiandu:150,
fangzhu:150,
jianxiong:150,
ganglie:150,
mengjin:200,
tieji:200,
yinghun:200,
lieren:200,
tianxiang:200,
fankui:250,
shensu:250,
guanxing:250,
haoshi:250,
luoyi:300,
liegong:300,
yingzi:300,
jieming:300,
fangquan:300,
zaiqi:300,
luoshen:300,
xingshang:300,
tuxi:300,
biyue:350,
yiji:350,
guzheng:350,
buqu:350,
jiang:350,
beige:400,
guicai:400,
shelie:500,
liuli:500,
lianying:500,
leiji:500,
guidao:600,
jizhi:600,
xiaoji:1200,
},
lock:{
huoshou:50,
juxiang:70,
roulin:100,
jiuyuan:100,
hongyan:150,
wushuang:200,
bazhen:300,
mashu:300,
xiangle:300,
qicai:300,
kongcheng:300,
keji:400,
xueyi:500,
weimu:600,
qianxun:650,
wansha:800,
kuanggu:800,
juejing:1000,
// paoxiao:1600,
},
limited:{
niepan:1000,
luanwu:1000,
},
},
element:{
player:{
dieAfter:function(source){
if(this!=game.me){
if(_status.list.learned<10){
_status.list=[];
for(var i in lib.character){
_status.list.push(i);
}
_status.list.remove('zuoci');
_status.list.remove('caiwenji');
_status.list.remove(game.me.name);
}
if(Math.random()<get.difficulty()/6&&game.players.length+game.dead.length>2&&get.population('fan')>0){
game.removePlayer(this);
}
else if(game.players.length+game.dead.length>2&&this.identity!='fan'&&get.population('fan')>0){
game.removePlayer(this);
}
else{
var player=game.replacePlayer(this,_status.list.randomGet());
player.draw(get.difficulty());
player.identity='fan';
player.identityShown=true;
player.setIdentity();
_status.list.remove(player.name);
}
}
if(this.identity=='zhong'&&source==game.me) game.me.discard(game.me.get('h'));
if(source&&this.identity=='fan'){
if(source.identity=='fan') source.draw(get.difficulty());
else source.draw(4-get.difficulty());
}
game.checkResult();
}
}
},
skill:{
infinity_learn:{
trigger:{player:'phaseBefore'},
forced:true,
popup:false,
priority:20,
filter:function(){
return !_status.auto;
},
content:function(){
"step 0"
if(_status.auto) return;
var dialog=ui.create.dialog(),i,j;
var addJpe=function(){
game.me.jpe=0;
var link,skills=[];
for(var i=0;i<10;i++){
if(i==2||i==5||i==8) continue;
link=dialog.content.childNodes[i].querySelector('.toggle').link;
if(link!='无') skills.push(link);
}
var skills2={};
for(var i in lib.player){
for(var j in lib.player[i]){
skills2[j]=lib.player[i][j];
}
}
for(var i=0;i<skills.length;i++){
game.me.jpe+=skills2[skills[i]];
}
ui.jpe.innerHTML=game.me.jpe;
};
dialog.add(ui.create.switcher('initiative1',game.me.learned.initiative,game.me.learned1,addJpe));
dialog.add(ui.create.switcher('initiative2',game.me.learned.initiative,game.me.learned2,addJpe));
dialog.add(ui.create.div('.placeholder'));
dialog.add(ui.create.switcher('trigger1',game.me.learned.trigger,game.me.learned3,addJpe));
dialog.add(ui.create.switcher('trigger2',game.me.learned.trigger,game.me.learned4,addJpe));
dialog.add(ui.create.div('.placeholder'));
dialog.add(ui.create.switcher('lock1',game.me.learned.lock,game.me.learned5,addJpe));
dialog.add(ui.create.switcher('lock2',game.me.learned.lock,game.me.learned6,addJpe));
dialog.add(ui.create.div('.placeholder'));
dialog.add(ui.create.switcher('limited',game.me.learned.limited,game.me.learned7,addJpe));
dialog.add(ui.create.div('.placeholder'));
for(j in lib.player){
(function(j){
for(i in lib.player[j]){
var node=ui.create.line(get.translation(i),player.learned[j].contains(i)?'已学习':lib.player[j][i],
function(){
var toggle=this.parentNode.querySelector('.toggle');
if(toggle.classList.contains('toggle')){
var that=toggle.parentNode;
if(toggle.innerHTML=='已学习') return;
var num=parseInt(toggle.innerHTML);
if(num>game.me.jp){
if(that.node2) return;
that.node2=ui.create.div('.toggle',that).animate('start');
that.node2.innerHTML='点数不足';
that.node2.style.right='56px';
setTimeout(function(){
that.node2.delete();
delete that.node2;
},1000);
return;
}
toggle.innerHTML='已学习';
game.me.jp-=num;
game.me.learned[j].push(toggle.skill);
ui.jp.innerHTML=game.me.jp;
}
});
node.childNodes[1].skill=i;
ui.learned[i]=node;
dialog.add(node);
}
}(j))
dialog.add(ui.create.div('.placeholder'));
}
dialog.add(ui.create.line('摸两张牌',100,function(){
var node=this.parentNode;
if(node.clicked) return;
if(game.me.jp<100){
if(node.node2) return;
node.node2=ui.create.div('.toggle',node).animate('start');
node.node2.innerHTML='点数不足';
node.node2.style.right='56px';
setTimeout(function(){
node.node2.delete();
delete node.node2;
},1000);
return;
}
node.clicked=true;
node.querySelector('.toggle').innerHTML='已选择'
game.me.jpa-=100;
game.me.jp-=100;
ui.jp.innerHTML=game.me.jp;
ui.jpa.innerHTML=game.me.jpa;
game.me.draw(2);
}));
dialog.add(ui.create.line('回复体力',100,function(){
var node=this.parentNode;
if(node.clicked) return;
if(game.me.jp<100){
if(node.node2) return;
node.node2=ui.create.div('.toggle',node).animate('start');
node.node2.innerHTML='点数不足';
node.node2.style.right='56px';
setTimeout(function(){
node.node2.delete();
delete node.node2;
},1000);
return;
}
node.clicked=true;
node.querySelector('.toggle').innerHTML='已选择'
game.me.jpa-=100;
game.me.jp-=100;
ui.jp.innerHTML=game.me.jp;
ui.jpa.innerHTML=game.me.jpa;
game.me.recover();
}));
if(game.me.maxHp<5){
dialog.add(ui.create.line('体力上限',1000,function(){
var node=this.parentNode;
if(node.clicked) return;
if(game.me.jp<1000){
if(node.node2) return;
node.node2=ui.create.div('.toggle',node).animate('start');
node.node2.innerHTML='点数不足';
node.node2.style.right='56px';
setTimeout(function(){
node.node2.delete();
delete node.node2;
},1000);
return;
}
node.clicked=true;
node.querySelector('.toggle').innerHTML='已选择'
game.me.jpa-=1000;
game.me.jp-=1000;
ui.jp.innerHTML=game.me.jp;
ui.jpa.innerHTML=game.me.jpa;
game.me.maxHp++;
game.me.update();
}));
}
dialog.add(ui.create.div('.placeholder'));
dialog.add(ui.create.line('重置技能',function(){
var i,j;
for(i in lib.player){
while(game.me.learned[i].length>1){
j=game.me.learned[i].pop();
ui.learned[j].childNodes[1].innerHTML=lib.player[i][j];
}
}
game.me.jpa=Math.ceil(0.9*game.me.jpa);
game.me.jp=game.me.jpa;
game.me.jpe=0;
for(i=0;i<10;i++){
if(i==2||i==5||i==8) continue;
dialog.content.childNodes[i].querySelector('.toggle').innerHTML='无';
dialog.content.childNodes[i].querySelector('.toggle').link='无';
}
ui.jp.innerHTML=game.me.jp;
ui.jpa.innerHTML=game.me.jpa;
ui.jpe.innerHTML=0;
}));
var jp=ui.create.line('剩余点数',game.me.jp);
ui.jp=jp.childNodes[1];
dialog.add(jp);
var jpe=ui.create.line('装备技能',game.me.jpe);
ui.jpe=jpe.childNodes[1];
dialog.add(jpe);
var jpa=ui.create.line('技能点数',game.me.jpa);
ui.jpa=jpa.childNodes[1];
dialog.add(jpa);
var control=ui.create.control('完成',function(){
game.me.clearSkills();
var link;
for(var i=0;i<10;i++){
if(i==2||i==5||i==8) continue;
link=dialog.content.childNodes[i].querySelector('.toggle').link;
switch(dialog.content.childNodes[i].firstChild.innerHTML){
case '主动技能一':game.me.learned1=link;break;
case '主动技能二':game.me.learned2=link;break;
case '被动技能一':game.me.learned3=link;break;
case '被动技能二':game.me.learned4=link;break;
case '锁定技能一':game.me.learned5=link;break;
case '锁定技能二':game.me.learned6=link;break;
case '限定技':game.me.learned7=link;break;
}
if(link!='无') game.me.addSkill(link);
}
control.close();
dialog.close();
event.finish();
game.resume();
})
game.pause();
"step 1"
while(ui.dialogs.length){
ui.dialogs[0].close();
}
while(ui.controls.length){
ui.controls[0].close();
}
}
},
infinity_jp:{
init:function(){
game.me.storage.infinity_jp=true;
},
group:['jp_damage','jp_kill','jp_use','jp_skill'],
intro:{
content:function(intro,player){
return '技能点数:'+player.jp+'/'+player.jpa;
}
}
},
infinity_add:{
trigger:{player:'phaseAfter'},
forced:true,
popup:false,
filter:function(){
return game.players.length<8;
},
content:function(){
var position,player;
var num=get.population('zhong')+1+Math.min(3,Math.floor(game.me.jpa/1000))-get.population('fan');
if(get.population('zhong')>1) num--;
if(num>0&&Math.random()<get.difficulty()/3){
player=game.addPlayer();
player.init(_status.list.randomGet());
_status.list.remove(player.name);
if(Math.random()<get.difficulty()/6){
player.init(player.name,_status.list.randomGet());
_status.list.remove(player.name2);
}
player.setIdentity('fan');
player.identity='fan';
player.identityShown=true;
player.draw(get.difficulty());
}
else if(num<0&&Math.random()<1/get.difficulty()){
player=game.addPlayer();
player.init(_status.list.randomGet());
_status.list.remove(player.name);
if(Math.random()<0.5/get.difficulty()){
player.init(player.name,_status.list.randomGet());
_status.list.remove(player.name2);
}
player.setIdentity('zhong');
player.identity='zhong';
player.identityShown=true;
player.draw(4-get.difficulty());
}
else if(Math.random()<0.2/(get.population('nei')+1)&&get.population('nei')<2){
player=game.addPlayer();
player.init(_status.list.randomGet());
_status.list.remove(player.name);
player.setIdentity('nei');
player.identity='nei';
player.identityShown=true;
player.draw(2);
}
}
},
infinity_penalty:{
trigger:{player:'phaseEnd'},
forced:true,
popup:false,
content:function(){
var n=Math.floor(player.jpe*get.difficulty()/50);
if(player.jp<n){
game.me.popup('技能点数 -'+player.jp);
game.log(get.translation(game.me)+'扣减了'+player.jp+'点技能点数');
player.jpa-=player.jp;
player.jp=0;
}
else{
game.me.popup('技能点数 -'+n);
game.log(get.translation(game.me)+'扣减了'+n+'点技能点数');
player.jp-=n;
player.jpa-=n;
}
}
},
jp_damage:{
trigger:{source:'damageAfter'},
forced:true,
popup:false,
content:function(){
player.jp+=Math.floor(trigger.num*30*(1.5-get.difficulty()/6));
player.jpa+=Math.floor(trigger.num*30*(1.5-get.difficulty()/6));
game.log(get.translation(game.me)+'获得了'+Math.floor(trigger.num*30*(1.5-get.difficulty()/6))+'点技能点数');
}
},
jp_kill:{
trigger:{source:'dieAfter'},
forced:true,
popup:false,
content:function(){
player.jp+=Math.floor(100*(1.5-get.difficulty()/6));
player.jpa+=Math.floor(100*(1.5-get.difficulty()/6));
game.log(get.translation(game.me)+'获得了'+Math.floor(100*(1.5-get.difficulty()/6))+'点技能点数');
game.me.draw(4-get.difficulty());
}
},
jp_use:{
trigger:{player:'useCardAfter'},
forced:true,
popup:false,
content:function(){
player.jp+=Math.floor(10*(1.5-get.difficulty()/6));
player.jpa+=Math.floor(10*(1.5-get.difficulty()/6));
game.log(get.translation(game.me)+'获得了'+Math.floor(10*(1.5-get.difficulty()/6))+'点技能点数');
}
},
jp_skill:{
trigger:{player:'useSkillAfter'},
forced:true,
popup:false,
content:function(){
player.jp+=Math.floor(20*(1.5-get.difficulty()/6));
player.jpa+=Math.floor(20*(1.5-get.difficulty()/6));
game.log(get.translation(game.me)+'获得了'+Math.floor(20*(1.5-get.difficulty()/6))+'点技能点数');
}
},
},
translate:{
fan:'敌',
zhu:'将',
zhong:'友',
nei:'中',
initiative1_config:'主动技能一',
initiative2_config:'主动技能二',
trigger1_config:'被动技能一',
trigger2_config:'被动技能二',
lock1_config:'锁定技能一',
lock2_config:'锁定技能二',
limited_config:'限定技',
infinity_jp:'技能',
},
config:{
difficulty:true,
player_number:false,
double_character:false,
change_choice:false,
free_choose:false,
change_identity:false,
swap:false,
save_progress:true,
ai_identity:false,
revive:false,
}
}