From c7576c2eb562dff4ef7653c2abd44fe0a4b5e518 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Thu, 6 Aug 2026 13:38:04 +0800 Subject: [PATCH] =?UTF-8?q?Boss=E8=B0=83=E6=95=B4v2=EF=BC=9A=E9=92=A2?= =?UTF-8?q?=E7=90=B4=E5=BD=92=E4=B8=AD=E7=AD=89=EF=BC=9B=E7=AA=81=E5=87=BB?= =?UTF-8?q?=E5=86=B2=E6=92=9E4-10=E7=A7=92(=E4=B8=89=E9=98=B6=E6=AE=B54-8)?= =?UTF-8?q?=EF=BC=9B=E6=AE=8B=E5=BD=B1=E6=94=B9=E4=B8=BA=E5=90=8C=E8=BD=AE?= =?UTF-8?q?=E5=BB=93=E6=9C=BA=E4=BD=93=E7=BA=A2=E5=BD=B1(=E6=8C=89?= =?UTF-8?q?=E8=B7=9D=E7=A6=BB=E9=87=87=E6=A0=B7)=EF=BC=9B=E9=92=A2?= =?UTF-8?q?=E7=90=B4=E9=A1=BA/=E5=8F=8D=E6=89=AB=E9=80=9F=E5=BA=A6+60%?= =?UTF-8?q?=EF=BC=8C=E4=B9=B1=E5=BA=8F=E5=89=8D=E6=91=87=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E9=BD=90=E5=B0=849=E5=B8=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star-raid/js/boss_art.js | 17 +++++++++++++++++ star-raid/js/enemies.js | 14 ++++++++------ star-raid/js/render.js | 9 ++++++--- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/star-raid/js/boss_art.js b/star-raid/js/boss_art.js index a888fa4..f4acc3c 100644 --- a/star-raid/js/boss_art.js +++ b/star-raid/js/boss_art.js @@ -293,4 +293,21 @@ function drawAssault(t,fl,swp,ph,mp){ // 暗黑突击(swp=翼展角;炮管/ if(ph>=1){poly([-52,-14,-24,-3,-22,-1,-50,-11],"#ffdfe5");poly([52,-14,24,-3,22,-1,50,-11],"#ffdfe5");} if(ph>=2){px(-4,-16,8,12,fl||"#ff3355");px(-2,-14,4,8,"#ffdfe5");} } +function drawAssaultGhost(swp,ph){ // 暗黑突击冲撞红色残影:与机体同轮廓同线条(纯红系,供dashTrail叠画) + const sw=swp*Math.PI/180; + for(const sd of[-1,1]){ + const tx=sd*(8+52*Math.sin(sw)),ty=14-52*Math.cos(sw); + poly([sd*4,6,tx,ty,tx-sd*9,ty+11,sd*4,20],"#ff3344"); // 主翼 + poly([tx-sd*2,ty-6,tx+sd*3,ty-14,tx+sd*7,ty-3],"#ff3344");} // 翼尖 + poly([0,38,-5,6,-3,-26,3,-26,5,6],"#ff3344"); // 机身 + px(-2,8,4,8,"#ff8899"); // 中脊亮线 + const guns=[[16,4],[-16,4],[30,-4],[-30,-4],[42,-10],[-42,-10]]; + const gn=ph>=2?6:ph>=1?4:2; + for(let i=0;i=2?4:ph>=1?3:2; + for(let i=0;i=1){poly([-52,-14,-24,-3,-22,-1,-50,-11],"#ff3344");poly([52,-14,24,-3,22,-1,50,-11],"#ff3344");} // 翼展线条 + if(ph>=2)px(-4,-16,8,12,"#ff8899"); // 中核亮块 +} /* ---- Boss光束与浮游炮渲染 ---- */ diff --git a/star-raid/js/enemies.js b/star-raid/js/enemies.js index 5a57faf..e6e132d 100644 --- a/star-raid/js/enemies.js +++ b/star-raid/js/enemies.js @@ -194,7 +194,7 @@ 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,tier:1}, {name:"歼灭者",sub:"ANNIHILATOR",hp:1700,col:"#b05ce8",r:22,main:"annihilate",minors:["aimSpread","spawnMine"],phases:3,tier:0}, {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,tier:2}, - {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,tier:2}, + {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,tier:1}, {name:"母巢核心",sub:"HIVE CORE",hp:2800,col:"#ff9a3d",r:22,main:"hive",minors:["spawnMini","aimSpread","ring"],phases:3,tier:0}, {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,tier:2}, {name:"暗黑魔碟",sub:"DARK SAUCER",hp:4500,col:"#8a5cff",r:24,rr:[30,32,34],main:"saucer",minors:["coneFan","crossEye","dartSpiral"],phases:3,tier:3}, // 间歇期无圆圈弹幕(去ringBig,P3主攻击仍两层) @@ -266,7 +266,7 @@ function startBoss(){ col:b.col,name:b.name,sub:b.sub,fireM:BAL.fireMul(n)*(G.diff===1?BAL.hard.fire:1),dead:false, mainT:100,minorT:9999,minorSet:[],rerollT:340,ax:W/2,ay:64,mt:0,landed:false}; if(b.main==="piano")G.boss.mainT=24; // 激光钢琴:缩短开局空窗 - else if(b.main==="assault")G.boss.mainT=rndi(240,900); // 暗黑突击:首次冲撞4~15秒随机 + else if(b.main==="assault")G.boss.mainT=rndi(240,600); // 暗黑突击:首次冲撞4~10秒随机 G.bossN++;SFX.warn();MUS.start(true); banner("WARNING — "+b.name,"#ff5566",150); } @@ -294,13 +294,14 @@ function updateBoss(){ if(ds.t<=0){const ap3=aimPt(),a=Math.atan2(ap3.y-b.y,ap3.x-b.x); ds.ph="go";ds.t=85;ds.vx=Math.cos(a)*(b.phase>=2?10.8:7.2);ds.vy=Math.sin(a)*(b.phase>=2?10.8:7.2);SFX.warn();}} // 三阶段冲撞速度150% else if(ds.ph==="go"){b.x+=ds.vx;b.y+=ds.vy;ds.t--; - if(b.phase>=1){b.dashTrail=b.dashTrail||[];b.dashTrail.push({x:b.x,y:b.y});if(b.dashTrail.length>7)b.dashTrail.shift();} // 二三阶段:冲锋红色残影 + if(b.phase>=1){const lt=b.dashTrail&&b.dashTrail.length?b.dashTrail[b.dashTrail.length-1]:null; // 二三阶段:冲锋红残影(按距离采样防重叠) + if(!lt||dist2(b.x,b.y,lt.x,lt.y)>144){b.dashTrail=b.dashTrail||[];b.dashTrail.push({x:b.x,y:b.y});if(b.dashTrail.length>8)b.dashTrail.shift();}} if(G.time%9===0){const a5=Math.atan2(aimPt().y-b.y,aimPt().x-b.x);ebul(b.x,b.y,a5,2.7,"orbR",13);} // 冲撞途中瞄准弹 if(ds.t<=0||b.y>H+26||b.y<-46||b.x<-26||b.x>W+26){ds.ph="back";ds.t=b.phase>=2?90:160;}} else{b.dashTrail=null; const k2=b.phase>=2?0.12:0.045; // 三阶段回位更快=惯性更小 b.x+=(b.ax-b.x)*k2;b.y+=(b.ay-b.y)*k2;ds.t--; - if(ds.t<=0||(Math.abs(b.x-b.ax)<5&&Math.abs(b.y-b.ay)<5)){b.dashSt=null;b.mainT=rndi(240,900);}} // 冲撞间隔4~15秒随机 + if(ds.t<=0||(Math.abs(b.x-b.ax)<5&&Math.abs(b.y-b.ay)<5)){b.dashSt=null;b.mainT=b.phase>=2?rndi(240,480):rndi(240,600);}} // 冲撞间隔4~10秒,三阶段4~8秒 updateFunnels();return; } // —— 常规移动 —— @@ -409,8 +410,9 @@ function bossMain(b,def,fm){ ks.i=0;ks.t=Math.round((ph?14:22)/fm); }else{const cur=ks.seq[ks.i++]; if(cur===-1){const pool=shuffled(n);ks.hotList=pool.slice(0,4+ph*2);ks.hotT=9;ks.hotT0=9;ks.t=Math.round((ph?21:30)/fm);} // 齐射:慢50% - else if(ks.mode<=1||ks.mode===4){ks.hot=cur;ks.hotT=1;ks.hotT0=1;ks.t=Math.round((ph?2:3)/fm);} // 顺/反扫/滑奏:前摇快50% - else{if(ph>=1){ks.hotList=[cur,ks.i=1){ks.hotList=[cur,ks.i0){const prog=1-b.transT/70;