删除兽人战斗月亮(Boss 11->10个):移除BOSSES条目/rok主攻击/rockRain小攻击/绘制分支/rockb精灵,黑石9->8泰伦10->9索引重编号;新增项目记忆boss_design_standard
This commit is contained in:
parent
7e32320ee8
commit
b9a59ae172
@ -196,7 +196,6 @@ const BOSSES=[
|
|||||||
{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:["chain","pillar","aimSpread"],phases:2},
|
{name:"夺权者X",sub:"USURPER X",hp:3700,col:"#e8f4ff",r:24,rr:[52,26],ryy:[34,40],wide:1,main:"usurper",minors:["chain","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:"ORK ROK",hp:2000,col:"#c8752a",r:26,rr:[26,29],ryy:[24,26],main:"rok",minors:["rockRain","spawnMini","snipe"],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:"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}
|
||||||
];
|
];
|
||||||
@ -256,7 +255,7 @@ function updateFunnels(){
|
|||||||
}
|
}
|
||||||
function startBoss(){
|
function startBoss(){
|
||||||
const seq=[0,1,2,3,4,6]; // 闯关顺序:stage6=夺权者X压轴;母巢/魔碟在无尽轮换
|
const seq=[0,1,2,3,4,6]; // 闯关顺序:stage6=夺权者X压轴;母巢/魔碟在无尽轮换
|
||||||
const idx=G.mode==="rush"?G.rushIdx:(G.mode==="stage"?seq[Math.min(5,G.stage-1)]:(G.bossN%11));
|
const idx=G.mode==="rush"?G.rushIdx:(G.mode==="stage"?seq[Math.min(5,G.stage-1)]:(G.bossN%10));
|
||||||
const cyc=G.mode==="stage"?0:Math.floor(G.bossN/8);
|
const cyc=G.mode==="stage"?0:Math.floor(G.bossN/8);
|
||||||
const b=BOSSES[idx],n=tierN();
|
const b=BOSSES[idx],n=tierN();
|
||||||
const hpM=(G.diff===1?BAL.hard.hp:1)*(1+0.35*cyc)*(G.mode==="endless"?1+0.55*G.bossN+0.1*G.wave:1+0.12*(G.stage-1))*(G.mode==="rush"?3:1); // Boss挑战模式血量倍数(调平衡改这里)
|
const hpM=(G.diff===1?BAL.hard.hp:1)*(1+0.35*cyc)*(G.mode==="endless"?1+0.55*G.bossN+0.1*G.wave:1+0.12*(G.stage-1))*(G.mode==="rush"?3:1); // Boss挑战模式血量倍数(调平衡改这里)
|
||||||
@ -304,7 +303,7 @@ function updateBoss(){
|
|||||||
b.mt++;
|
b.mt++;
|
||||||
const fm=b.fireM*(1+0.22*b.phase);
|
const fm=b.fireM*(1+0.22*b.phase);
|
||||||
if(b.fnT>0)b.fnT--;if(b.plT>0)b.plT--;if(b.eyeT>0)b.eyeT--;if(b.hornT>0)b.hornT--;if(b.laserT>0)b.laserT--; // 帧级技能计时器
|
if(b.fnT>0)b.fnT--;if(b.plT>0)b.plT--;if(b.eyeT>0)b.eyeT--;if(b.hornT>0)b.hornT--;if(b.laserT>0)b.laserT--; // 帧级技能计时器
|
||||||
if(b.idx===9){ // 黑石要塞:亚空间主炮序列(纹路充能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{
|
||||||
if(b.plT===142){b.laserT=142;b.warpChg=0.001;SFX.warn();}
|
if(b.plT===142){b.laserT=142;b.warpChg=0.001;SFX.warn();}
|
||||||
@ -312,7 +311,7 @@ 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){ // 泰伦触手扫击:9秒一次左右随机 + 玩家靠近立即触发对应侧
|
if(b.idx===9){ // 泰伦触手扫击:9秒一次左右随机 + 玩家靠近立即触发对应侧
|
||||||
if(b.phase>=1&&!b.tent){const p=G.p;
|
if(b.phase>=1&&!b.tent){const p=G.p;
|
||||||
if(p.dead<=0&&Math.abs(p.x-b.x)<52&&p.y>b.y&&p.y<b.y+95){
|
if(p.dead<=0&&Math.abs(p.x-b.x)<52&&p.y>b.y&&p.y<b.y+95){
|
||||||
b.tent={side:p.x<b.x?-1:1,warn:50,act:0,rec:0,trail:null};SFX.warn();}}
|
b.tent={side:p.x<b.x?-1:1,warn:50,act:0,rec:0,trail:null};SFX.warn();}}
|
||||||
@ -395,11 +394,6 @@ function bossMain(b,def,fm){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
b.mainT=4;break;}
|
b.mainT=4;break;}
|
||||||
case "rok": // 兽人战斗月亮:獠牙碎石扇 + 每三轮巨口主炮(重型缓速弹)
|
|
||||||
for(let i=-3;i<=3;i++)ebul(b.x+i*7,b.y+18,a0+i*0.14,1.9+0.15*ph,"rockb",15);
|
|
||||||
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": { // 黑石要塞:五重旋转花瓣弹幕(往复旋摆);签名亚空间主炮见updateBoss帧级序列
|
case "blackstone": { // 黑石要塞:五重旋转花瓣弹幕(往复旋摆);签名亚空间主炮见updateBoss帧级序列
|
||||||
const base=Math.sin(b.t*0.008)*1.1;
|
const base=Math.sin(b.t*0.008)*1.1;
|
||||||
for(let k=0;k<5;k++)ebul(b.x,b.y,k*TAU/5+base,1.55,"orbG",13);
|
for(let k=0;k<5;k++)ebul(b.x,b.y,k*TAU/5+base,1.55,"orbG",13);
|
||||||
@ -476,7 +470,6 @@ function bossMinor(b,mk,fm){
|
|||||||
case "coneFan": for(let i=-2;i<=2;i++)ebul(b.x,b.y+8,a0+i*0.15,2.9,"dartP",14);b.minorT=Math.round(150/fm);break; // 魔碟:瞄准锥扇
|
case "coneFan": for(let i=-2;i<=2;i++)ebul(b.x,b.y+8,a0+i*0.15,2.9,"dartP",14);b.minorT=Math.round(150/fm);break; // 魔碟:瞄准锥扇
|
||||||
case "crossEye": for(const sd of[-1,1])bossBeam(b.x+sd*9,b.y-3,ap2.x-sd*26,H+8,3.5,"#ff3355",22,24,18,{b,ox:sd*9,oy:-3});b.minorT=Math.round(230/fm);break; // 魔碟:交叉赤瞳(斜线X)
|
case "crossEye": for(const sd of[-1,1])bossBeam(b.x+sd*9,b.y-3,ap2.x-sd*26,H+8,3.5,"#ff3355",22,24,18,{b,ox:sd*9,oy:-3});b.minorT=Math.round(230/fm);break; // 魔碟:交叉赤瞳(斜线X)
|
||||||
case "dartSpiral": for(let arm=0;arm<3;arm++)ebul(b.x,b.y,b.t*0.11+arm*TAU/3,2.0,"dartP",13);b.minorT=Math.round(46/fm);break; // 魔碟:三臂锥弹螺旋
|
case "dartSpiral": for(let arm=0;arm<3;arm++)ebul(b.x,b.y,b.t*0.11+arm*TAU/3,2.0,"dartP",13);b.minorT=Math.round(46/fm);break; // 魔碟:三臂锥弹螺旋
|
||||||
case "rockRain": for(let i=0;i<4;i++)ebul(rnd(25,W-25),-6,Math.PI/2+rnd(-0.08,0.08),1.7,"rockb",15);b.minorT=Math.round(150/fm);break; // 兽人月:碎石雨
|
|
||||||
case "deckGuns": { // 黑石:甲板炮群——五臂侧舷齐射交叉火力网
|
case "deckGuns": { // 黑石:甲板炮群——五臂侧舷齐射交叉火力网
|
||||||
const rt=b.t*0.0032;
|
const rt=b.t*0.0032;
|
||||||
for(let k=0;k<5;k++){const a=rt+k*TAU/5,gx=b.x+Math.sin(a)*22,gy=b.y-Math.cos(a)*22;
|
for(let k=0;k<5;k++){const a=rt+k*TAU/5,gx=b.x+Math.sin(a)*22,gy=b.y-Math.cos(a)*22;
|
||||||
|
|||||||
23
js/render.js
23
js/render.js
@ -40,7 +40,7 @@ function drawBoss(){
|
|||||||
let ph2=b.phase,sc=1,ox=0,oy=0,flashA=0,mp=null;
|
let ph2=b.phase,sc=1,ox=0,oy=0,flashA=0,mp=null;
|
||||||
if(b.transT>0){const prog=1-b.transT/70;
|
if(b.transT>0){const prog=1-b.transT/70;
|
||||||
ox=rnd(-1.6,1.6);oy=rnd(-1.2,1.2);
|
ox=rnd(-1.6,1.6);oy=rnd(-1.2,1.2);
|
||||||
if(b.idx===1||b.idx===3||b.idx===4||b.idx===6||b.idx===7||b.idx===8||b.idx===9||b.idx===10){mp=prog;if(prog>0.75)flashA=(1-prog)*1.6;}
|
if(b.idx===1||b.idx===3||b.idx===4||b.idx===6||b.idx===7||b.idx===8||b.idx===9){mp=prog;if(prog>0.75)flashA=(1-prog)*1.6;}
|
||||||
else{sc=prog<0.5?1-0.16*(prog*2):0.84+0.16*((prog-0.5)*2);
|
else{sc=prog<0.5?1-0.16*(prog*2):0.84+0.16*((prog-0.5)*2);
|
||||||
if(prog<0.5)ph2=b.phase-1;
|
if(prog<0.5)ph2=b.phase-1;
|
||||||
flashA=prog<0.5?prog*0.8:(1-prog)*0.8;}}
|
flashA=prog<0.5?prog*0.8:(1-prog)*0.8;}}
|
||||||
@ -109,24 +109,7 @@ function drawBoss(){
|
|||||||
circ(0,-14,8,fl||"#43b8ff");circ(0,-14,4,"#bfefff");
|
circ(0,-14,8,fl||"#43b8ff");circ(0,-14,4,"#bfefff");
|
||||||
px(-2,-36,4,18,"#43b8ff");px(-2,0,4,34,"#43b8ff");
|
px(-2,-36,4,18,"#43b8ff");px(-2,0,4,34,"#43b8ff");
|
||||||
ctx.restore();ctx.globalAlpha=1;}
|
ctx.restore();ctx.globalAlpha=1;}
|
||||||
}else if(b.idx===8){ // 兽人战斗月亮:锯齿岩月+发光兽人图腾;二阶段岩缝熔光、舷炮伸出(连续生长)
|
}else if(b.idx===8){ // 黑石要塞:厚重箭头臂+五棱金字塔核心(俯视五芒星堡,缓慢旋转);纹路充能=主炮前摇
|
||||||
const op=mp!==null?mp:(ph2>=1?1:0);
|
|
||||||
poly([0,-34,20,-28,32,-12,34,8,24,26,8,34,-12,32,-28,22,-34,2,-30,-18,-14,-30],"#6a5a48"); // 岩体
|
|
||||||
poly([0,-34,20,-28,32,-12,34,8,24,26,8,34,0,32],"#52452f"); // 背光面
|
|
||||||
for(let i=0;i<5;i++){const px8=-27+i*11,py8=-24+(i%2)*11;px(px8,py8,9,7,"#8a8578");px(px8+3,py8+2,2,2,"#3a3430");} // 铆接铁板
|
|
||||||
px(-31,-8,6,10,"#3a3430");px(25,-8,6,10,"#3a3430"); // 侧舷炮座(常存)
|
|
||||||
const bl8=4+op*9; // 炮管自炮座连续伸出
|
|
||||||
px(-30,-4,4,bl8,"#241f1a");px(26,-4,4,bl8,"#241f1a");
|
|
||||||
px(-30,-4+bl8,4,2,fl||"#ff7a2a");px(26,-4+bl8,4,2,fl||"#ff7a2a"); // 炮口
|
|
||||||
ctx.globalAlpha=0.55+0.45*op; // 兽人图腾脸:发光随阶段增强
|
|
||||||
px(-15,-8,9,8,fl||"#ff7a2a");px(6,-8,9,8,fl||"#ff7a2a"); // 怒目
|
|
||||||
poly([-16,10,-11,16,-6,10,-1,16,4,10,9,16,14,10,16,14,10,20,0,23,-10,20,-16,14],fl||"#ffb02a"); // 獠牙巨口
|
|
||||||
ctx.globalAlpha=1;
|
|
||||||
if(op>0){const cl=3+op*9; // 岩缝开裂生长(缝内透熔光)
|
|
||||||
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){ // 黑石要塞:厚重箭头臂+五棱金字塔核心(俯视五芒星堡,缓慢旋转);纹路充能=主炮前摇
|
|
||||||
const op=mp!==null?mp:(ph2>=1?1:0);
|
const op=mp!==null?mp:(ph2>=1?1:0);
|
||||||
const chg=Math.max(b.warpChg||0,ph2>=1?0.55:0); // P2纹路常亮半格,主炮充能满亮
|
const chg=Math.max(b.warpChg||0,ph2>=1?0.55:0); // P2纹路常亮半格,主炮充能满亮
|
||||||
ctx.save();ctx.rotate(t*0.0032); // 整体缓慢旋转
|
ctx.save();ctx.rotate(t*0.0032); // 整体缓慢旋转
|
||||||
@ -156,7 +139,7 @@ function drawBoss(){
|
|||||||
if(chg>0)circ(0,0,5+chg*3.5,`rgba(92,255,157,${chg*0.3})`); // 充能光晕
|
if(chg>0)circ(0,0,5+chg*3.5,`rgba(92,255,157,${chg*0.3})`); // 充能光晕
|
||||||
circ(0,0,4.5,"#0a2418");circ(0,0,3,fl||"#5cff9d");circ(0,0,1.3,"#d6ffe8"); // 亚空间核心
|
circ(0,0,4.5,"#0a2418");circ(0,0,3,fl||"#5cff9d");circ(0,0,1.3,"#d6ffe8"); // 亚空间核心
|
||||||
ctx.restore();
|
ctx.restore();
|
||||||
}else if(b.idx===10){ // 泰伦母舰:锥形生物舰(头下尾上);P2头背甲壳裂开露眼+伸出触手;P3触手间展开环齿嘴
|
}else if(b.idx===9){ // 泰伦母舰:锥形生物舰(头下尾上);P2头背甲壳裂开露眼+伸出触手;P3触手间展开环齿嘴
|
||||||
let op2,op3;
|
let op2,op3;
|
||||||
if(ph2===0){op2=mp!==null?mp:0;op3=0;}
|
if(ph2===0){op2=mp!==null?mp:0;op3=0;}
|
||||||
else if(ph2===1){op2=1;op3=mp!==null?mp:0;}
|
else if(ph2===1){op2=1;op3=mp!==null?mp:0;}
|
||||||
|
|||||||
@ -107,7 +107,7 @@ function orb(c1,c2){
|
|||||||
".HHCCCHH.",
|
".HHCCCHH.",
|
||||||
"...HHH..."],{H:halo,W:"#ffffff",C:c2});
|
"...HHH..."],{H:halo,W:"#ffffff",C:c2});
|
||||||
}
|
}
|
||||||
const BHALO={orbR:"#ff5566",orbP:"#b05ce8",orbG:"#5cff9d",orbO:"#ff9a3d",dartB:"#3a8cd8",flowr:"#ff8fc8",dartS:"#5ec4ff",dartP:"#b98cff",rockb:"#8a7a62",shardB:"#5cff9d",spikeB:"#e8dcc0"};
|
const BHALO={orbR:"#ff5566",orbP:"#b05ce8",orbG:"#5cff9d",orbO:"#ff9a3d",dartB:"#3a8cd8",flowr:"#ff8fc8",dartS:"#5ec4ff",dartP:"#b98cff",shardB:"#5cff9d",spikeB:"#e8dcc0"};
|
||||||
SPR.dartB=bake(["KCCCK",".CCC.",".CWC.","..C.."],{K:"#0d2433",C:"#3a8cd8",W:"#cfeaff"}); // 蓝色锥形敌弹(Boss弹幕)
|
SPR.dartB=bake(["KCCCK",".CCC.",".CWC.","..C.."],{K:"#0d2433",C:"#3a8cd8",W:"#cfeaff"}); // 蓝色锥形敌弹(Boss弹幕)
|
||||||
SPR.flowr=bake([
|
SPR.flowr=bake([
|
||||||
"....P....",".P..P..P.","..PPPPP..",".PPWWWPP.","PPPWWWPPP",
|
"....P....",".P..P..P.","..PPPPP..",".PPWWWPP.","PPPWWWPPP",
|
||||||
@ -116,7 +116,6 @@ SPR.flowr=bake([
|
|||||||
SPR.dartS=bake(["CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","WW","WW"],
|
SPR.dartS=bake(["CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","WW","WW"],
|
||||||
{W:"#f2fbff",C:"#5ec4ff"}); // 夺权者X:蓝白细长钉(2×12,白尖朝运动方向)
|
{W:"#f2fbff",C:"#5ec4ff"}); // 夺权者X:蓝白细长钉(2×12,白尖朝运动方向)
|
||||||
SPR.dartP=bake(["KPPPK",".PPP.",".PWP.","..P.."],{K:"#2a1040",P:"#b98cff",W:"#ead9ff"}); // 暗黑魔碟:紫锥弹
|
SPR.dartP=bake(["KPPPK",".PPP.",".PWP.","..P.."],{K:"#2a1040",P:"#b98cff",W:"#ead9ff"}); // 暗黑魔碟:紫锥弹
|
||||||
SPR.rockb=bake([".KKK.","KSSSK","KSWSK","KSSSK",".KKK."],{K:"#3a2f26",S:"#8a7a62",W:"#c8bca8"}); // 兽人战斗月亮:碎石弹
|
|
||||||
SPR.shardB=bake([".K.","KSK","KSK","KWK",".K."],{K:"#1a2436",S:"#46587a",W:"#5cff9d"}); // 黑石要塞:黑石碎片(绿芯,按飞行方向偏转)
|
SPR.shardB=bake([".K.","KSK","KSK","KWK",".K."],{K:"#1a2436",S:"#46587a",W:"#5cff9d"}); // 黑石要塞:黑石碎片(绿芯,按飞行方向偏转)
|
||||||
SPR.orbR=orb("#ffe9e9","#ff5566");SPR.orbP=orb("#f4e9ff","#b05ce8");
|
SPR.orbR=orb("#ffe9e9","#ff5566");SPR.orbP=orb("#f4e9ff","#b05ce8");
|
||||||
SPR.orbG=orb("#e9ffe9","#5cff9d");SPR.orbO=orb("#fff4d9","#ff9a3d");
|
SPR.orbG=orb("#e9ffe9","#5cff9d");SPR.orbO=orb("#fff4d9","#ff9a3d");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user