触手扫击修正:非扫击侧保持待机(不再双侧齐扫);触发=9秒一次左右随机+玩家靠近(横向52px/下方95px)立即触发对应侧
This commit is contained in:
parent
a821ea5c91
commit
946f0e072d
@ -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"});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user