黑石要塞重做:五箭头构造+中央尖顶+缓慢旋转,二阶段外壳微开露内光

- 五个箭头形构造(72°均布)+中心区+哥特尖顶;整体0.0032rad/帧缓慢旋转
- 光矛改为五臂轮换(armC%5与+2),发射点经src.arm机制精确跟随旋转臂尖
- 二阶段:五个箭头外壳向外微移+中心区两瓣外壳滑开,露出壳下常存的绿色内芯(无凭空出现)
This commit is contained in:
JOJO 2026-08-05 22:58:55 +08:00
parent ceb2b82799
commit 9911714628
3 changed files with 23 additions and 15 deletions

View File

@ -254,7 +254,9 @@ function collide(){
}
// Boss光束预警后伤害点-线段距离判定,每束有命中冷却)
for(const bm of G.bbeams){
if(bm.src&&G.boss&&bm.src.b===G.boss){bm.x1=G.boss.x+bm.src.ox;bm.y1=G.boss.y+bm.src.oy;if(bm.src.followX2)bm.x2=bm.x1;} // 发射点跟随Boss炮台
if(bm.src&&G.boss&&bm.src.b===G.boss){let ox=bm.src.ox||0,oy=bm.src.oy||0;
if(bm.src.arm!==undefined){const ra=G.boss.t*0.0032+bm.src.arm*TAU/5;ox=Math.sin(ra)*31;oy=-Math.cos(ra)*31;} // 黑石要塞:臂尖随整体旋转
bm.x1=G.boss.x+ox;bm.y1=G.boss.y+oy;if(bm.src.followX2)bm.x2=bm.x1;} // 发射点跟随Boss炮台
if(bm.tele>0){bm.tele--;continue;}
bm.life--;
if(bm.cd>0)bm.cd--;

View File

@ -330,11 +330,11 @@ function bossMain(b,def,fm){
b.rokC=(b.rokC||0)+1;
if(b.rokC%(ph?2:3)===0){const mb=ebul(b.x,b.y+26,a0,1.05,"orbO",26);mb.scale=2.4;mb.r=6;SFX.warn();}
b.mainT=Math.round((ph?80:95)/fm);break;
case "blackstone": { // 黑石要塞:四臂光矛成对轮换(臂尖跟随P2周期性亚空间主炮压制其他攻击
case "blackstone": { // 黑石要塞:五箭头臂光矛轮换(臂尖随缓慢旋转跟随P2周期性亚空间主炮压制其他攻击
b.armC=(b.armC||0)+1;
const opA=ph>=1?1:0,arms=[];
for(let k=0;k<4;k++){const a=k*Math.PI/2+(1-opA)*Math.PI/4;arms.push([Math.sin(a)*30,-Math.cos(a)*30]);}
for(const ai of(b.armC%2?[1,3]:[0,2]))bossBeam(b.x+arms[ai][0],b.y+arms[ai][1],b.x+arms[ai][0]*1.5,H+8,3.5,"#5cff9d",20,22,18,{b,ox:arms[ai][0],oy:arms[ai][1]});
const rot=b.t*0.0032,arms=[];
for(let k=0;k<5;k++){const a=rot+k*TAU/5;arms.push([Math.sin(a)*31,-Math.cos(a)*31]);}
for(const ai of[b.armC%5,(b.armC+2)%5])bossBeam(b.x+arms[ai][0],b.y+arms[ai][1],b.x+arms[ai][0]*1.5,H+8,3.5,"#5cff9d",20,22,18,{b,arm:ai});
b.mainT=Math.round(66/fm);
if(ph>=1&&(!b.plT||b.plT<=0)){bossBeam(b.x,b.y+8,b.x,H+8,16,"#5cff9d",46,70,28,{b,ox:0,oy:8,followX2:true});
b.laserT=120;b.plT=Math.round(380/fm);SFX.warn();}

View File

@ -126,18 +126,24 @@ function drawBoss(){
ctx.globalAlpha=0.35+0.45*op;
px(-22,-26,3,cl,fl||"#ff5a2a");px(8,-16,3,cl*0.8,fl||"#ff5a2a");px(-6,0,3,cl*0.6,fl||"#ff5a2a");
ctx.globalAlpha=1;}
}else if(b.idx===9){ // 黑石要塞:四臂石构星堡二阶段臂自X连续旋为十字、核心充能
}else if(b.idx===9){ // 黑石要塞:五个箭头构造+中央尖顶,整体缓慢旋转;二阶段外壳微微打开露内光
const op=mp!==null?mp:(ph2>=1?1:0);
for(let k=0;k<4;k++){const a=k*Math.PI/2+(1-op)*Math.PI/4;
ctx.save();ctx.rotate(a);
poly([-6,2,6,2,3,-30,-3,-30],"#1c2230"); // 黑石臂
px(-4,-24,8,3,"#2e3a4e");px(-4,-14,8,3,"#2e3a4e"); // 石纹
px(-2,-33,4,5,fl||"#5cff9d"); // 臂尖绿晶
ctx.save();ctx.rotate(t*0.0032); // 整体缓慢旋转(光矛臂尖同步跟随)
for(let k=0;k<5;k++){ctx.save();ctx.rotate(k*TAU/5);
poly([-7,3,-3,-23,0,-29,3,-23,7,3,3,5,-3,5],"#2fae6a"); // 箭头内芯荧光(壳下常存)
ctx.save();ctx.translate(0,-op*4); // 二阶段外壳向外微移露缝
poly([-9,2,-4,-25,0,-31,4,-25,9,2,4,6,-4,6],"#1c2230"); // 黑石外壳
px(-2,-26,4,11,"#2e3a4e"); // 壳面石纹
ctx.restore();
ctx.restore();}
poly([0,-17,12,-12,17,0,12,12,0,17,-12,12,-17,0,-12,-12],"#141a26"); // 八角石核
poly([0,-17,12,-12,17,0,12,12,0,17,0,17],"#0d1119"); // 背光面
const cw=4+op*3; // 核心绿瞳充能放大
circ(0,0,cw+3,"#1f6a44");circ(0,0,cw,fl||"#5cff9d");circ(0,0,Math.max(1,cw*0.45),"#d6ffe8");
ctx.restore();
circ(0,0,6,"#1f6a44");circ(0,0,3.5,fl||"#5cff9d"); // 中心内芯(壳下常存)
for(const sd of[-1,1]){ctx.save();ctx.translate(sd*op*3,0); // 中心区外壳两瓣微开
poly([0,-14,sd*12,-10,sd*14,0,sd*12,10,0,14],"#141a26");
ctx.restore();}
poly([-4,-12,4,-12,2,-38,-2,-38],"#1c2230"); // 中央尖顶(哥特塔)
px(-3,-31,6,3,"#2e3a4e");px(-3,-22,6,3,"#2e3a4e");
px(-1,-41,2,4,fl||"#5cff9d"); // 尖顶绿晶
}else if(b.idx===10){ // 泰伦母舰:生物质长舰+前触手;二阶段背甲滑开露荧光器官、触手伸长
const op=mp!==null?mp:(ph2>=1?1:0);
const tl=13+op*11; // 触手连续伸长