钢琴血量2500→5000翻倍;夺权者X体量放大(P1整体1.25x=参考图占屏2/3宽母舰,P2战机1.15x加厚),判定rr[0]52→58同步,发射点/炮位按放大后坐标同步;修复换二阶段机身瞬移:移动从绝对正弦公式改速度积分定位(usp/amp突变位置也连续),y振幅缓变。仅语法检查通过,未运行验证
This commit is contained in:
parent
14647da88b
commit
f3e93b2ff2
@ -82,7 +82,7 @@ function drawUsurper(b,t,fl,ph2,mp){
|
|||||||
const jt=mp||0;
|
const jt=mp||0;
|
||||||
// —— P2粗壮宽翼战机(壳下常存,mp渐显;宽翼+厚机身+三引擎,绝不细瘦) ——
|
// —— P2粗壮宽翼战机(壳下常存,mp渐显;宽翼+厚机身+三引擎,绝不细瘦) ——
|
||||||
if(ph2>=1){const di=mp!==null?mp:1;
|
if(ph2>=1){const di=mp!==null?mp:1;
|
||||||
ctx.save();ctx.globalAlpha=di;const ds=0.7+0.3*di;ctx.scale(ds,ds);
|
ctx.save();ctx.globalAlpha=di;const ds=(0.7+0.3*di)*1.15;ctx.scale(ds,ds);
|
||||||
for(const sd of[-1,1]){ // 后掠宽翼(翼展±30)
|
for(const sd of[-1,1]){ // 后掠宽翼(翼展±30)
|
||||||
poly([sd*11,0,sd*28,-13,sd*32,-7,sd*13,8],"#c9d6e2");
|
poly([sd*11,0,sd*28,-13,sd*32,-7,sd*13,8],"#c9d6e2");
|
||||||
poly([sd*11,0,sd*28,-13,sd*26,-10,sd*12,3],"#e8f4ff"); // 翼面受光
|
poly([sd*11,0,sd*28,-13,sd*26,-10,sd*12,3],"#e8f4ff"); // 翼面受光
|
||||||
@ -104,8 +104,8 @@ function drawUsurper(b,t,fl,ph2,mp){
|
|||||||
px(sd*5-1.5,-38-(t%4),3,3+(t%4),t%6<3?"#7fd8ff":"#43b8ff");}
|
px(sd*5-1.5,-38-(t%4),3,3+(t%4),t%6<3?"#7fd8ff":"#43b8ff");}
|
||||||
px(-1.5,-34,3,3,"#5a6c80");px(-1,-39-(t%4),2,2+(t%4),"#7fd8ff");
|
px(-1.5,-34,3,3,"#5a6c80");px(-1,-39-(t%4),2,2+(t%4),"#7fd8ff");
|
||||||
ctx.restore();ctx.globalAlpha=1;}
|
ctx.restore();ctx.globalAlpha=1;}
|
||||||
// —— P1巨舰(变形=甲板抛离飞走+舰体淡出) ——
|
// —— P1巨舰(变形=甲板抛离飞走+舰体淡出;整体1.25倍放大=参考图体量) ——
|
||||||
if(ph2===0||mp!==null){const hullA=1-jt;
|
if(ph2===0||mp!==null){ctx.save();ctx.scale(1.25,1.25);const hullA=1-jt;
|
||||||
if(hullA>0.02){ctx.save();ctx.globalAlpha=hullA;
|
if(hullA>0.02){ctx.save();ctx.globalAlpha=hullA;
|
||||||
// 主舰体:三段式宽塔(厚重霸气)
|
// 主舰体:三段式宽塔(厚重霸气)
|
||||||
poly([0,36,-24,14,-20,-14,-12,-36,12,-36,20,-14,24,14],"#d8e4f0");
|
poly([0,36,-24,14,-20,-14,-12,-36,12,-36,20,-14,24,14],"#d8e4f0");
|
||||||
@ -149,7 +149,7 @@ function drawUsurper(b,t,fl,ph2,mp){
|
|||||||
px(tx3-1,dy-12,1.5,5,"#5a6c80");px(tx3+1,dy-12,1.5,5,"#5a6c80");
|
px(tx3-1,dy-12,1.5,5,"#5a6c80");px(tx3+1,dy-12,1.5,5,"#5a6c80");
|
||||||
px(tx3-1.5,dy-14,2,2,"#ff3355");px(tx3+0.5,dy-14,2,2,"#ff3355");}
|
px(tx3-1.5,dy-14,2,2,"#ff3355");px(tx3+0.5,dy-14,2,2,"#ff3355");}
|
||||||
ctx.restore();ctx.globalAlpha=1;}
|
ctx.restore();ctx.globalAlpha=1;}
|
||||||
}
|
ctx.restore();}
|
||||||
}
|
}
|
||||||
/* ---- 暗黑魔碟:8扇区缝合装甲碟+红能量窗/裂纹+紫红竖瞳魔眼 ----
|
/* ---- 暗黑魔碟:8扇区缝合装甲碟+红能量窗/裂纹+紫红竖瞳魔眼 ----
|
||||||
变形沿用原机制(mp优先):P2圆环绕顶轴外旋裂开+魔眼点亮;P3爆甲壳板飞离+铆钉伸长成刺+犄角炮台 */
|
变形沿用原机制(mp优先):P2圆环绕顶轴外旋裂开+魔眼点亮;P3爆甲壳板飞离+铆钉伸长成刺+犄角炮台 */
|
||||||
|
|||||||
@ -192,9 +192,9 @@ const BOSSES=[
|
|||||||
{name:"太空原种",sub:"SPACE SPAWN",hp:1350,col:"#ff8fc8",r:20,rr:[20,34],ryy:[26,18],wide:1,main:"spawn",minors:["wiggle","spikeSnipe","sporeArc","tentBeam","mawSnipe","wingRain"],phases:2},
|
{name:"太空原种",sub:"SPACE SPAWN",hp:1350,col:"#ff8fc8",r:20,rr:[20,34],ryy:[26,18],wide:1,main:"spawn",minors:["wiggle","spikeSnipe","sporeArc","tentBeam","mawSnipe","wingRain"],phases:2},
|
||||||
{name:"歼灭者",sub:"ANNIHILATOR",hp:1700,col:"#b05ce8",r:22,main:"annihilate",minors:["aimSpread","spawnMine"],phases:3},
|
{name:"歼灭者",sub:"ANNIHILATOR",hp:1700,col:"#b05ce8",r:22,main:"annihilate",minors:["aimSpread","spawnMine"],phases:3},
|
||||||
{name:"暗黑突击",sub:"DARK ASSAULT",hp:2100,col:"#ff3355",r:9,rr:[9,10,11],ryy:[5,6,7],main:"assault",minors:["rain","aimSpread"],phases:3},
|
{name:"暗黑突击",sub:"DARK ASSAULT",hp:2100,col:"#ff3355",r:9,rr:[9,10,11],ryy:[5,6,7],main:"assault",minors:["rain","aimSpread"],phases:3},
|
||||||
{name:"激光钢琴",sub:"LASER PIANO",hp:2500,col:"#43e8ff",r:26,rr:[100,100],ryy:[30,30],main:"piano",minors:["topRain","pedal"],phases:2,static:1},
|
{name:"激光钢琴",sub:"LASER PIANO",hp:5000,col:"#43e8ff",r:26,rr:[100,100],ryy:[30,30],main:"piano",minors:["topRain","pedal"],phases:2,static:1},
|
||||||
{name:"母巢核心",sub:"HIVE CORE",hp:2800,col:"#ff9a3d",r:22,main:"hive",minors:["spawnMini","aimSpread","ring"],phases:3},
|
{name:"母巢核心",sub:"HIVE CORE",hp:2800,col:"#ff9a3d",r:22,main:"hive",minors:["spawnMini","aimSpread","ring"],phases:3},
|
||||||
{name:"夺权者X",sub:"USURPER X",hp:3700,col:"#e8f4ff",r:24,rr:[52,26],ryy:[34,40],wide:1,main:"usurper",minors:["deckVolley","pillar","aimSpread"],phases:2},
|
{name:"夺权者X",sub:"USURPER X",hp:3700,col:"#e8f4ff",r:24,rr:[58,26],ryy:[34,40],wide:1,main:"usurper",minors:["deckVolley","pillar","aimSpread"],phases:2},
|
||||||
{name:"暗黑魔碟",sub:"DARK SAUCER",hp:4500,col:"#8a5cff",r:24,rr:[30,32,34],main:"saucer",minors:["ringBig","coneFan","crossEye","dartSpiral"],phases:3},
|
{name:"暗黑魔碟",sub:"DARK SAUCER",hp:4500,col:"#8a5cff",r:24,rr:[30,32,34],main:"saucer",minors:["ringBig","coneFan","crossEye","dartSpiral"],phases:3},
|
||||||
{name:"黑石要塞",sub:"BLACKSTONE",hp:3400,col:"#5cff9d",r:30,rr:[34,37],ryy:[26,28],wide:1,main:"blackstone",minors:["deckGuns","crackRift","starLine"],phases:2},
|
{name:"黑石要塞",sub:"BLACKSTONE",hp:3400,col:"#5cff9d",r:30,rr:[34,37],ryy:[26,28],wide:1,main:"blackstone",minors:["deckGuns","crackRift","starLine"],phases:2},
|
||||||
{name:"泰伦虫族母舰",sub:"TYRANID HIVESHIP",hp:3200,col:"#7dff8a",r:26,rr:[26,29,32],ryy:[36,38,40],main:"hivespawn",minors:["sporeBloom","tentSweep","acidGas"],phases:3}
|
{name:"泰伦虫族母舰",sub:"TYRANID HIVESHIP",hp:3200,col:"#7dff8a",r:26,rr:[26,29,32],ryy:[36,38,40],main:"hivespawn",minors:["sporeBloom","tentSweep","acidGas"],phases:3}
|
||||||
@ -300,7 +300,9 @@ function updateBoss(){
|
|||||||
// —— 常规移动 ——
|
// —— 常规移动 ——
|
||||||
if(def.static){b.x+=(W/2-b.x)*0.05;b.y+=(52-b.y)*0.02;}
|
if(def.static){b.x+=(W/2-b.x)*0.05;b.y+=(52-b.y)*0.02;}
|
||||||
else if(b.idx===3){b.x=W/2+Math.sin(b.mt*0.034)*62;b.y=b.ty+Math.sin(b.mt*0.021)*18;} // 暗黑突击:小体型高机动(空闲大幅提速)
|
else if(b.idx===3){b.x=W/2+Math.sin(b.mt*0.034)*62;b.y=b.ty+Math.sin(b.mt*0.021)*18;} // 暗黑突击:小体型高机动(空闲大幅提速)
|
||||||
else if(b.idx===6){const usp=b.phase>=1?0.028:0.008;b.x=W/2+Math.sin(b.mt*usp)*(b.phase>=1?70:44);b.y=b.ty+Math.sin(b.mt*0.011)*(b.phase>=1?12:8);} // 夺权者X:P1巨大笨重→P2紧凑灵活
|
else if(b.idx===6){const usp=b.phase>=1?0.028:0.008,amp=b.phase>=1?70:44;
|
||||||
|
b.x=clamp(b.x+amp*usp*Math.cos(b.mt*usp),30,W-30); // 速度积分定位:换阶段参数突变也不瞬移
|
||||||
|
b.yA=(b.yA||8)+((b.phase>=1?12:8)-b.yA)*0.05;b.y=b.ty+Math.sin(b.mt*0.011)*b.yA;} // 夺权者X:P1巨大笨重→P2紧凑灵活
|
||||||
else{b.x=W/2+Math.sin(b.mt*0.013)*(def.wide?44:70);b.y=b.ty+Math.sin(b.mt*0.011)*(def.wide?8:12);} // 通用游走提速+上下浮动(钢琴站桩除外)
|
else{b.x=W/2+Math.sin(b.mt*0.013)*(def.wide?44:70);b.y=b.ty+Math.sin(b.mt*0.011)*(def.wide?8:12);} // 通用游走提速+上下浮动(钢琴站桩除外)
|
||||||
b.mt++;
|
b.mt++;
|
||||||
const fm=b.fireM*(1+0.22*b.phase);
|
const fm=b.fireM*(1+0.22*b.phase);
|
||||||
@ -309,7 +311,7 @@ function updateBoss(){
|
|||||||
const span=46*(0.22+0.78*(b.phase>=1?1:0.62));
|
const span=46*(0.22+0.78*(b.phase>=1?1:0.62));
|
||||||
ebul(b.x+rnd(-span,span),b.y+rnd(-10,2),Math.PI/2+rnd(-0.08,0.08),rnd(2.2,3.4),"orbR",12);}
|
ebul(b.x+rnd(-span,span),b.y+rnd(-10,2),Math.PI/2+rnd(-0.08,0.08),rnd(2.2,3.4),"orbR",12);}
|
||||||
if(b.idx===6&&b.deckT>0){b.deckT--; // 夺权者X:甲板齐射——炮口逐个点亮(前摇26帧)后6发垂直弹雨
|
if(b.idx===6&&b.deckT>0){b.deckT--; // 夺权者X:甲板齐射——炮口逐个点亮(前摇26帧)后6发垂直弹雨
|
||||||
if(b.deckT===0)for(const sd of[-1,1])for(const gx of[14,24,44])ebul(b.x+sd*gx,b.y+6,Math.PI/2,2.6,"dartB",14);}
|
if(b.deckT===0)for(const sd of[-1,1])for(const gx of[18,30,55])ebul(b.x+sd*gx,b.y+9,Math.PI/2,2.6,"dartB",14);}
|
||||||
if(b.idx===8){ // 黑石要塞:亚空间主炮序列(纹路充能52帧→巨柱扫动80帧)
|
if(b.idx===8){ // 黑石要塞:亚空间主炮序列(纹路充能52帧→巨柱扫动80帧)
|
||||||
if(!b.plT||b.plT<=0)b.plT=Math.round((b.phase>=1?380:460)/fm);
|
if(!b.plT||b.plT<=0)b.plT=Math.round((b.phase>=1?380:460)/fm);
|
||||||
else{
|
else{
|
||||||
@ -432,7 +434,7 @@ function bossMain(b,def,fm){
|
|||||||
case "usurper": // 夺权者X:蓝白长钉无人机(P1两架/P2四架僚机);P2周期性巨宽核心激光(压制其他攻击)
|
case "usurper": // 夺权者X:蓝白长钉无人机(P1两架/P2四架僚机);P2周期性巨宽核心激光(压制其他攻击)
|
||||||
if(ph===0){
|
if(ph===0){
|
||||||
if(!b.fn0){b.fn0=1;spawnFunnels(b,2);}
|
if(!b.fn0){b.fn0=1;spawnFunnels(b,2);}
|
||||||
for(const sd of[-1,1]){const px2=b.x+sd*14,py2=b.y+6,a6=Math.atan2(ap2.y-py2,ap2.x-px2);
|
for(const sd of[-1,1]){const px2=b.x+sd*18,py2=b.y+9,a6=Math.atan2(ap2.y-py2,ap2.x-px2);
|
||||||
ebul(px2,py2,a6,4.4,"dartS",15);} // 发射点=最下甲板炮口(与drawUsurper同源)
|
ebul(px2,py2,a6,4.4,"dartS",15);} // 发射点=最下甲板炮口(与drawUsurper同源)
|
||||||
b.mainT=Math.round(46/fm);
|
b.mainT=Math.round(46/fm);
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user