diff --git a/star-raid/js/enemies.js b/star-raid/js/enemies.js index 761998e..b1e0148 100644 --- a/star-raid/js/enemies.js +++ b/star-raid/js/enemies.js @@ -390,31 +390,31 @@ function bossMain(b,def,fm){ b.mainT=Math.round(10/fm);break;} case "assault": // 暗黑突击:启动冲撞(锚点记当前位置,冲撞归来后正弦从此继续) b.dashSt={ph:"tele",t:52};b.ax=b.x;b.ay=b.y;b.mainT=9999;break; - case "piano": { // 激光钢琴:21键,五种模式随机——顺扫/反扫/乱序/齐射/滑奏(每次重抽,不固定轮换) + case "piano": { // 激光钢琴:21键,四种模式轮换——顺扫(逼走位)/反扫/乱序/齐射 if(!b.keys)b.keys={n:21,seq:[],i:0,t:2,hot:-1,hotT:0,hotList:null,mode:3}; const ks=b.keys,n=ks.n; if(ks.hotT>0){ks.hotT--; if(ks.hotT===0){const list=ks.hotList||[ks.hot]; for(const kh of list){if(kh<0)continue;const kx=-(n-1)*5+kh*10; // 与drawPiano键位一致(整数键距10) - bossBeam(b.x+kx,b.y+18,b.x+kx,H+8,4,"#43e8ff",7,22,18,{b,ox:kx,oy:18,followX2:true});} // 光束动画完整放完(22帧:全亮+渐隐),只加快扫速与前摇 + bossBeam(b.x+kx,b.y+18,b.x+kx,H+8,4,"#43e8ff",7,22,18,{b,ox:kx,oy:18,followX2:true});} ks.hotList=null;ks.hot=-1;SFX.eshoot();}} ks.t--; if(ks.t<=0&&ks.hotT<=0){ - if(ks.i>=ks.seq.length){ // 布下一局:随机抽模式(5种) - ks.mode=rndi(0,5); + if(ks.i>=ks.seq.length){ // 布下一局:轮换模式(5种) + ks.mode=(ks.mode+1)%5; if(ks.mode===0){ks.seq=[];for(let i=0;i=3;i--)ks.seq.push(i);} // 反扫止于3号:最左3键永远安全 else if(ks.mode===2){ks.seq=shuffled(n);} else if(ks.mode===3){ks.seq=[];for(let i=0;i<6+ph*2;i++)ks.seq.push(-1);} // -1=齐射标记 else{ks.seq=[];for(let i=0;i=0;i--)ks.seq.push(i);} // 滑奏:顺扫到尾立刻反扫回来 - ks.i=0;ks.t=Math.round(14/fm); // 局间停顿统一(P1/P2同节奏,不再阶段差异) + ks.i=0;ks.t=Math.round((ph?14:22)/fm); }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);} // 齐射:慢50% - else if(ks.mode<=1||ks.mode===4){ks.hot=cur;ks.hotT=1;ks.hotT0=1;ks.t=1;} // 顺扫/反扫/滑奏:极限扫速(每帧一条,0.3秒扫完全屏);光束动画完整22帧不缩短 - else{if(ph>=1){ks.hotList=[cur,ks.i=1){ks.hotList=[cur,ks.i