原种衔接修正:身体加长至y18覆住尾根(尾巴先画压身下,不再分离);P1花弹/P2尾激光发射点精确对齐尾端生殖腔光点(oy=34/40)。仅语法检查通过,未运行验证

This commit is contained in:
JOJO 2026-08-06 02:39:13 +08:00
parent e33327809d
commit 1a7604a7d6
2 changed files with 8 additions and 8 deletions

View File

@ -356,10 +356,10 @@ function bossMain(b,def,fm){
case "spawn": { // 太空原种:花弹从腹末生殖腔喷出(发射点=生殖腔摆动与drawProgenitor同源公式P1三波起手偏左 / P2生殖腔血光柱+翼尖花弹
if(ph===0){const swx=Math.sin(b.t*0.055+2.8)*5.2;
for(let k=0;k<3;k++)for(let i=-2;i<=2;i++){
const bb=ebul(b.x+swx,b.y+30,a0+i*0.16+(k-1)*0.09+[0.2,0.1,0][k],1.5+k*0.2,"flowr",14);
const bb=ebul(b.x+swx,b.y+34,a0+i*0.16+(k-1)*0.09+[0.2,0.1,0][k],1.5+k*0.2,"flowr",14);
bb.grow=0.007;bb.maxS=2.8;bb.scale=0.9;}
b.mainT=Math.round(84/fm);
}else{bossBeam(b.x,b.y+30,b.x+clamp(ap2.x-b.x,-50,50)*0.5,H+10,9,"#ff5c8a",30,44,22,{b,ox:0,oy:30});
}else{bossBeam(b.x,b.y+40,b.x+clamp(ap2.x-b.x,-50,50)*0.5,H+10,9,"#ff5c8a",30,44,22,{b,ox:0,oy:40});
for(const sd of[-1,1])for(let i=0;i<3;i++){
const bb=ebul(b.x+sd*50,b.y-2,Math.PI/2+sd*(0.35+i*0.2),1.6,"flowr",13);
bb.grow=0.008;bb.maxS=3;bb.scale=0.9;}

View File

@ -263,7 +263,7 @@ function drawBoss(){
ctx.fillText(b.transT>0?b.name:(b.name+" "+Math.ceil(pc*100)+"%"),W/2,22);
}
/* ---- Boss 分体绘制助手 ---- */
function drawProgenitor(b,t,fl,tf){ // 太空原种·装甲虫兽tf 0=装甲态→1=血肉态P1小翅芽→P2骨膜巨翼无复眼大颚+感器红缝=虫形压迫感);摆尾与躯体分离悬空
function drawProgenitor(b,t,fl,tf){ // 太空原种·装甲虫兽tf 0=装甲态→1=血肉态P1小翅芽→P2骨膜巨翼无复眼大颚+感器红缝=虫形压迫感);摆尾衔接于躯体之下(尾根被加长的身体覆住,无缝)
ctx.rotate(Math.sin(t*0.05)*0.04); // 悬停微摇
const wS=0.22+0.78*tf; // 翼展P1小翅芽→P2全展同一对翼连续缩放
// —— 骨膜翼一对3根骨刺撑起膜面P1灰甲小翼→P2血红膜+暗红骨,同一几何体罩色) ——
@ -278,7 +278,7 @@ function drawProgenitor(b,t,fl,tf){ // 太空原种·装甲虫兽tf 0=装甲
for(const tp of[[14,-15],[34,-15],[54,-9]])drawSeg(2,-2,tp[0],tp[1],2,"#7a1622",tf); // P2骨刺转暗红
ctx.globalAlpha=1;}
ctx.restore();}
// —— 摆尾:与躯体分离悬空9px空隙5节逐节相位摆动P2节间血红肉显露+整体伸长 ——
// —— 摆尾:先画在躯体下层(尾根被加长的身体覆住,无缝衔接5节逐节相位摆动P2节间血红肉显露+整体伸长 ——
const segH=5.2+tf*1.6,gap=11;
for(let i=4;i>=0;i--){const sw=Math.sin(t*0.055+i*0.7)*(1.2+i),sy=gap+i*segH,hw=9-i*1.5;
if(tf>0&&i<4){ctx.globalAlpha=tf*0.85;px(sw-hw+2,sy+segH-2,(hw-2)*2,2,"#c8202e");ctx.globalAlpha=1;} // 节间血肉环
@ -291,13 +291,13 @@ function drawProgenitor(b,t,fl,tf){ // 太空原种·装甲虫兽tf 0=装甲
circ(swT,tipY+2,1.1,"#ffdfe5");
// —— 壳下血肉(常存于背甲之下,滑开才见;血红,非粉) ——
if(tf>0){ctx.globalAlpha=tf*0.9;
poly([0,-36,9,-29,11,-14,7,0,0,3,-7,0,-11,-14,-9,-29],"#c8202e");
px(-2,-30,4,26,"#e8393a");ctx.globalAlpha=1;}
poly([0,-36,9,-29,11,-14,8,2,5,16,0,20,-5,16,-8,2,-11,-14,-9,-29],"#c8202e");
px(-2,-30,4,46,"#e8393a");ctx.globalAlpha=1;}
// —— 背甲两瓣沿背脊中线裂开P2向外滑开同一多边形平移 ——
for(const sd of[-1,1]){ctx.save();ctx.translate(sd*tf*7,0);
poly([0,-40,sd*11,-37,sd*15,-28,sd*13,-12,sd*9,0,0,2],sd<0?"#c9d6e2":"#9fb0c2");
poly([0,-40,sd*11,-37,sd*15,-28,sd*13,-12,sd*10,4,sd*6,14,0,18],sd<0?"#c9d6e2":"#9fb0c2");
poly([0,-40,sd*11,-37,sd*15,-28,sd*7,-26,sd*5,-36],"#e8f0f6"); // 受光斜面
for(let i=0;i<3;i++)px(sd*(4+i*3.4)-1,-24+i*8,2,5,"#5a6c80"); // 甲片板缝
for(let i=0;i<4;i++)px(sd*(4+i*2.8)-1,-24+i*9,2,5,"#5a6c80"); // 甲片板缝
const crk=Math.max(0,Math.min(1,(tf-0.15)/0.4))*10; // 裂纹随tf生长延长非新增
if(crk>0.5)px(sd*6-1,-18,2,crk,"#8a2a3a");
ctx.restore();}