激光钢琴技能概率重分配

- 扫(顺/反)合占1/4(各1/8)、来回(顺/反)合占1/4(各1/8)——前摇0.3s→0.1s
- 乱序(锁玩家+随机键)独立占1/4、齐射独立占1/4
- 乱序/齐射每次触发随机3~6轮(原固定/只一轮),齐射P1的4连不射大齐射统一为随机键齐射
- 模拟40万局:四组各25%,次数3~6均匀
This commit is contained in:
JOJO 2026-08-06 16:53:13 +08:00
parent 029764d51f
commit 784a8ce0fe

View File

@ -437,18 +437,21 @@ function bossMain(b,def,fm){
ks.hotList=null;ks.hot=-1;SFX.eshoot();}}
ks.t--;
if(ks.t<=0&&ks.hotT<=0){
if(ks.i>=ks.seq.length){ // 布下一局完全随机选模式6种0~5勿写成6——会多占齐射档位稀释乱序局间无间隔
ks.mode=rndi(0,5);
if(ks.i>=ks.seq.length){ // 布下一局:加权随机——扫/来回各合1/4乱序/齐射各1/4局间无间隔
const m=Math.random();
if(m<0.25)ks.mode=rndi(0,1); // 两个扫合1/4各1/8
else if(m<0.5)ks.mode=rndi(2,3); // 两个来回合1/4各1/8
else if(m<0.75)ks.mode=4; // 乱序1/4锁玩家+随机键)
else ks.mode=5; // 齐射1/4
if(ks.mode===0){ks.seq=[];for(let i=0;i<n-3;i++)ks.seq.push(i);} // 顺扫0→17最右3键安全
else if(ks.mode===1){ks.seq=[];for(let i=n-1;i>=3;i--)ks.seq.push(i);} // 反扫20→3最左3键安全
else if(ks.mode===2){ks.seq=[];for(let i=0;i<n-3;i++)ks.seq.push(i);for(let i=n-4;i>=0;i--)ks.seq.push(i);} // 顺滑奏0→17→0最右3键安全
else if(ks.mode===3){ks.seq=[];for(let i=n-1;i>=3;i--)ks.seq.push(i);for(let i=3;i<n;i++)ks.seq.push(i);} // 反滑奏20→3→20最左3键安全
else if(ks.mode===4){ks.seq=[];for(let i=0;i<5+ph*2;i++)ks.seq.push(-2);} // 乱序每次同时随机4/8键发射5+ph*2次
else if(ph>=1){ks.seq=[];for(let i=0;i<6+ph*2;i++)ks.seq.push(-1);} // 齐射P2保持原逻辑随机6键多次
else{ks.seq=[-3];} // 齐射P14连不射其余全射只发射一次
ks.i=0;ks.t=ks.mode<=3?Math.round(18/fm):0; // 扫/滑四种模式开局前蓄力0.3秒,其余无间隔
else if(ks.mode===2){ks.seq=[];for(let i=0;i<n-3;i++)ks.seq.push(i);for(let i=n-4;i>=0;i--)ks.seq.push(i);} // 顺来回0→17→0最右3键安全
else if(ks.mode===3){ks.seq=[];for(let i=n-1;i>=3;i--)ks.seq.push(i);for(let i=3;i<n;i++)ks.seq.push(i);} // 反来回20→3→20最左3键安全
else if(ks.mode===4){ks.seq=[];for(let i=0;i<rndi(3,6);i++)ks.seq.push(-2);} // 乱序每次触发随机3~6轮
else{ks.seq=[];for(let i=0;i<rndi(3,6);i++)ks.seq.push(-1);} // 齐射每次触发随机3~6轮P1/P2统一随机键键数随阶段
ks.i=0;ks.t=ks.mode<=3?Math.round(6/fm):0; // 扫/来回开局前蓄力0.1秒原0.3秒),其余无间隔
}else{const cur=ks.seq[ks.i++];
if(cur===-1){const pool=shuffled(n);ks.hotList=pool.slice(0,4+ph*2);ks.hotT=9;ks.hotT0=9;ks.t=Math.round((ph?21:30)/fm);} // 齐射P2
if(cur===-1){const pool=shuffled(n);ks.hotList=pool.slice(0,4+ph*2);ks.hotT=9;ks.hotT0=9;ks.t=Math.round((ph?21:30)/fm);} // 齐射:随机键
else if(cur===-2){ // 乱序2个随机+2个玩家正上方
const p=G.p,base=-(n-1)*5,relX=p.x-b.x;
const kNear=clamp(Math.round((relX-base)/10),0,n-1);
@ -456,8 +459,7 @@ function bossMain(b,def,fm){
const pool=shuffled(n).filter(k=>k!==kNear&&k!==kNear2);
ks.hotList=[kNear,kNear2].concat(pool.slice(0,2+ph*2));
ks.hotT=9;ks.hotT0=9;ks.t=Math.round((ph?7:10)/fm);}
else if(cur===-3){const safeStart=rndi(0,n-4);const all=[];for(let i=0;i<n;i++)if(i<safeStart||i>=safeStart+4)all.push(i);ks.hotList=all;ks.hotT=9;ks.hotT0=9;ks.t=Math.round((ph?10:15)/fm);} // 齐射P14连不射
else{ks.hot=cur;ks.hotT=1;ks.hotT0=1;ks.t=Math.max(1,Math.round((ph?1:2)/fm));} // 顺/反扫/滑奏:快速
else{ks.hot=cur;ks.hotT=1;ks.hotT0=1;ks.t=Math.max(1,Math.round((ph?1:2)/fm));} // 顺/反扫/来回:快速
}
}
b.mainT=4;break;}