触手扫击修正:非扫击侧保持待机(不再双侧齐扫);触发=9秒一次左右随机+玩家靠近(横向52px/下方95px)立即触发对应侧

This commit is contained in:
JOJO 2026-08-06 01:11:00 +08:00
parent a821ea5c91
commit 946f0e072d

View File

@ -50,7 +50,7 @@ function tentSegs(b,side,opF){ // 触手7节局部坐标相对Boss中心
const pts=[];opF=opF===undefined?1:opF; const pts=[];opF=opF===undefined?1:opF;
for(let i=0;i<7;i++){ for(let i=0;i<7;i++){
let ang=Math.sin((b.t-i*2.2)*0.06)*0.07*side,stretch=1,glow=0; let ang=Math.sin((b.t-i*2.2)*0.06)*0.07*side,stretch=1,glow=0;
if(b.tent){const s=tentPose(b.tent,side,b.t-i*2.2);ang=s.ang;stretch=s.stretch;glow=s.glow;} if(b.tent&&b.tent.side===side){const s=tentPose(b.tent,side,b.t-i*2.2);ang=s.ang;stretch=s.stretch;glow=s.glow;} // 仅扫击侧动作,另一侧保持待机摆动
const f=i/6,L=40*stretch*f*opF; const f=i/6,L=40*stretch*f*opF;
pts.push({x:side*9+Math.sin(ang)*L,y:24+Math.cos(ang)*L,glow}); pts.push({x:side*9+Math.sin(ang)*L,y:24+Math.cos(ang)*L,glow});
} }
@ -312,20 +312,25 @@ function updateBoss(){
if(b.plT===90){b.warpChg=0;bossBeam(b.x,b.y+6,b.x,H+8,b.phase>=1?24:20,"#5cff9d",10,80,30,{b,ox:0,oy:6,followX2:true,sweep:1,amp:b.phase>=1?70:50});} if(b.plT===90){b.warpChg=0;bossBeam(b.x,b.y+6,b.x,H+8,b.phase>=1?24:20,"#5cff9d",10,80,30,{b,ox:0,oy:6,followX2:true,sweep:1,amp:b.phase>=1?70:50});}
} }
} }
if(b.idx===10&&b.tent){const tn=b.tent; // 泰伦:触手扫击(前摇→横扫→顿挫→收回;触手即碰撞体) if(b.idx===10){ // 泰伦触手扫击9秒一次左右随机 + 玩家靠近立即触发对应侧
if(tn.warn>0){tn.warn--;if(tn.warn<=0){tn.act=45;tn.hitDone=false;}} if(b.phase>=1&&!b.tent){const p=G.p;
else if(tn.act>0){tn.act--; if(p.dead<=0&&Math.abs(p.x-b.x)<52&&p.y>b.y&&p.y<b.y+95){
if(!tn.hitDone){ // 扫击+顿挫全期:玩家与触手各节线段做点-线段碰撞 b.tent={side:p.x<b.x?-1:1,warn:50,act:0,rec:0,trail:null};SFX.warn();}}
const p=G.p; if(b.tent){const tn=b.tent; // 前摇→横扫→顿挫→收回;触手即碰撞体
if(p.dead<=0){const pts=tentSegs(b,tn.side),lx=p.x-b.x,ly=p.y-b.y; if(tn.warn>0){tn.warn--;if(tn.warn<=0){tn.act=45;tn.hitDone=false;}}
for(let i=1;i<7;i++){const f=i/6,sr=3.2*(1-f*0.45)+G.stat.hitR+1; else if(tn.act>0){tn.act--;
const ax=pts[i-1].x,ay=pts[i-1].y,dx=pts[i].x-ax,dy=pts[i].y-ay,L2=dx*dx+dy*dy||1; if(!tn.hitDone){ // 扫击+顿挫全期:玩家与触手各节线段做点-线段碰撞
const tt=clamp(((lx-ax)*dx+(ly-ay)*dy)/L2,0,1),cx=ax+dx*tt,cy=ay+dy*tt; const p=G.p;
if(dist2(lx,ly,cx,cy)<sr*sr){tn.hitDone=true;hitPlayer(28);break;}}} if(p.dead<=0){const pts=tentSegs(b,tn.side),lx=p.x-b.x,ly=p.y-b.y;
for(let i=1;i<7;i++){const f=i/6,sr=3.2*(1-f*0.45)+G.stat.hitR+1;
const ax=pts[i-1].x,ay=pts[i-1].y,dx=pts[i].x-ax,dy=pts[i].y-ay,L2=dx*dx+dy*dy||1;
const tt=clamp(((lx-ax)*dx+(ly-ay)*dy)/L2,0,1),cx=ax+dx*tt,cy=ay+dy*tt;
if(dist2(lx,ly,cx,cy)<sr*sr){tn.hitDone=true;hitPlayer(28);break;}}}
}
if(tn.act<=0)tn.rec=40;
} }
if(tn.act<=0)tn.rec=40; else if(tn.rec>0){tn.rec--;if(tn.rec<=0)b.tent=null;}
} }
else if(tn.rec>0){tn.rec--;if(tn.rec<=0)b.tent=null;}
} }
const lck=(b.laserT||0)>0; // 巨宽核心激光期间压制其他攻击 const lck=(b.laserT||0)>0; // 巨宽核心激光期间压制其他攻击
// —— 主攻击 —— // —— 主攻击 ——
@ -491,7 +496,7 @@ function bossMinor(b,mk,fm){
case "tentSweep": // 泰伦触手扫击P2+随机一侧触手前摇后拉蓄力→60°扇形挥鞭 case "tentSweep": // 泰伦触手扫击P2+随机一侧触手前摇后拉蓄力→60°扇形挥鞭
if(b.phase<1){b.minorT=80;break;} if(b.phase<1){b.minorT=80;break;}
if(!b.tent){b.tent={side:pick([-1,1]),warn:50,act:0,rec:0,trail:null};SFX.warn();} if(!b.tent){b.tent={side:pick([-1,1]),warn:50,act:0,rec:0,trail:null};SFX.warn();}
b.minorT=Math.round(560/fm);break; b.minorT=Math.round(540/fm);break; // 自动扫击9秒一次
case "acidGas": // 泰伦酸蚀气体P3触手末端释放毒雾向下飘 case "acidGas": // 泰伦酸蚀气体P3触手末端释放毒雾向下飘
if(b.phase<2){b.minorT=80;break;} if(b.phase<2){b.minorT=80;break;}
for(const sd of[-1,1])G.zones.push({x:b.x+sd*16,y:b.y+30,r:19,vy:0.75,life:520,col:"#a8ff5c",kind:"gas"}); for(const sd of[-1,1])G.zones.push({x:b.x+sd*16,y:b.y+30,r:19,vy:0.75,life:520,col:"#a8ff5c",kind:"gas"});