diff --git a/star-raid/js/combat.js b/star-raid/js/combat.js index 7be2c19..3b48620 100644 --- a/star-raid/js/combat.js +++ b/star-raid/js/combat.js @@ -136,6 +136,10 @@ function updateBullets(){ if(tg){b.dead=true;explodeOnce(b);} else{b.fuse=(b.fuse||0)-1;if(b.fuse<=0){b.dead=true;explodeOnce(b);}} } + if(b.t==="pmol"&&!b.dead){ // 海盗燃烧瓶:抛物线,落地/触敌爆炸并留火场 + b.vy+=b.grav||0.08; + if(b.y>=H-10||b.fuse<=0){b.dead=true;explodeOnce(b);} + } if(!b.back&&b.bt!==undefined){b.bt--;if(b.bt<=0&&!b.dead){b.dead=true;explodeOnce(b);}} if(b.t==="mt"&&b.ty2!==undefined&&b.y<=b.ty2&&!b.dead){b.dead=true;explodeOnce(b);} if(b.t==="s"&&!b.dead){ // 分裂弹:飞行一段距离后自动分裂 diff --git a/star-raid/js/core.js b/star-raid/js/core.js index c94dbc7..660d671 100644 --- a/star-raid/js/core.js +++ b/star-raid/js/core.js @@ -333,6 +333,11 @@ function explodeBullet(b){ for(let i=0;i(G.stage>=3?4:3); if(isBoss){startBoss();return;} - // 预算制生成:不开火的杂兵为主(~70%),射手为少数(~30%且有同屏上限) + // 预算制生成:按种族/层级池抽取,杂兵为主,射手为辅,精英少量 let budget=(6+n*2.2)*(G.mode==="stage"?1+G.stage*0.12:1)*budgetScale(); - const fodder=["scout","weaver","kami"].filter(k=>ENEMIES[k].min<=n); - const shooters=["splitter","mine","gunship","sniper"].filter(k=>ENEMIES[k].min<=n); + const all=Object.keys(ENEMIES).filter(k=>ENEMIES[k].min<=n); + const fodder=all.filter(k=>ENEMIES[k].tier==="grunt"); + const shooters=all.filter(k=>ENEMIES[k].tier==="soldier"); + const elites=all.filter(k=>ENEMIES[k].tier==="elite"); const eC=BAL.eliteC(n)*(G.mutator==="ELITE"?4:1); const shooterCap=2+Math.floor(n/3); - let shooterN=0,delay=30; + const eliteCap=1+Math.floor(n/8); + let shooterN=0,eliteN=0,delay=30; while(budget>0){ - let type; - if(shooters.length&&shooterN