"use strict"; /* ================= 机体(各具特色) ================= */ const SHIPS={ falcon:{name:"猎鹰",spr:"ship0",cost:0,trait:"均衡型 · 无短板", mod:{spd:1,dmg:1,lives:0,crit:0,dodge:0,hitR:0,mag:1,bombs:0,shield:0,drone:0,droneBoost:1}}, ghost:{name:"幽灵",spr:"ship1",cost:800,trait:"高速 · 闪避+12% · 判定更小", mod:{spd:1.18,dmg:0.95,lives:-1,crit:0,dodge:0.12,hitR:-0.6,mag:1,bombs:0,shield:0,drone:0,droneBoost:1}}, bastion:{name:"堡垒",spr:"ship2",cost:1500,trait:"重装 · 命+2 · 血量+30 · 自带护盾", mod:{spd:0.85,dmg:1.1,lives:2,crit:0,dodge:0,hitR:0.5,mag:1.4,bombs:0,shield:1,drone:0,droneBoost:1,hp:30}}, valkyrie:{name:"女武神",spr:"ship3",cost:3000,trait:"自带僚机 · 僚机火力+50%", mod:{spd:1.05,dmg:1,lives:0,crit:0,dodge:0,hitR:0,mag:1,bombs:0,shield:0,drone:1,droneBoost:1.5}}, asura:{name:"修罗",spr:"ship4",cost:5000,trait:"暴击+15% · 伤害+10% · 命-1", mod:{spd:1,dmg:1.1,lives:-1,crit:0.15,dodge:0,hitR:0,mag:1,bombs:1,shield:0,drone:0,droneBoost:1}} }; /* ================= 军械库:25 主武器 ================= beh: 行为引擎类型 lvl(w): 该等级的战斗参数 */ const WEAPONS={ vulcan:{name:"火神机炮",spr:"trcr",rare:0,beh:"streams",ds:"!?神神?!", lvl:w=>({n:1+Math.floor(w/2),dmg:7*(1+.22*(w-1)),int:8,spd:5.4,gap:6})}, shotgun:{name:"超级霰弹",spr:"pelt",rare:0,beh:"streams",ds:"“友谊颗粒”", lvl:w=>({n:5+2*w,dmg:4.2*(1+.18*(w-1)),int:22,spd:5.5,fan:0.5,gap:2,skipMid:1})}, needle:{name:"蜂针刺弹",spr:"ndl",rare:0,beh:"streams",ds:"这可是吐了剧毒的飞刀", lvl:w=>({n:1+Math.floor(w/3),dmg:2.6*(1+.2*(w-1)),int:3,spd:7,gap:4,poison:100})}, flame:{name:"火焰喷射器",icon:"flame",rare:0,beh:"flame",ds:"让火焰净化一切", lvl:w=>({n:3+Math.floor(w/2),dmg:1.1*(1+.22*(w-1)),range:70+8*w,burst:34+4*w,cd:Math.max(46,74-5*w)})}, shotgun2:{name:"霜冻霰弹",spr:"shard",rare:1,beh:"streams",ds:"冷冷冷", lvl:w=>({n:3+w,dmg:3*(1+.18*(w-1)),int:23,spd:5.2,fan:0.42,gap:2,slow:80+25*w})}, tesla:{name:"电弧发生器",icon:"chain",rare:1,beh:"tesla",ds:"?!电电!?", lvl:w=>({n:1+Math.floor(w/2),dmg:8*(1+.25*(w-1)),int:44-2*w,range:110})}, railgun:{name:"电磁炮",icon:"rail",rare:2,beh:"rail",ds:"带轮子的垃圾桶", lvl:w=>({dmg:55*(1+.3*(w-1)),charge:120-10*w,spd:11,zone:24+4*w})}, deathray:{name:"死光",icon:"laser",rare:2,beh:"deathray",ds:"记得带镜子", lvl:w=>({dps:0.9*(1+.28*(w-1)),charge:160-12*w,beam:55,width:5+2*w})}, crescent:{name:"月牙斩",spr:"cres",rare:1,beh:"crescent",ds:"青豆?", lvl:w=>({dmg:44*(1+.24*(w-1)),int:120,spd:3.4})}, fission:{name:"分裂弹",spr:"fiss",rare:1,beh:"fission",ds:"四阶村长", lvl:w=>({dmg:6*(1+.22*(w-1)),int:20,spd:5.2,split:3+Math.floor(w/2),splitAt:26})}, frost:{name:"冰冻枪",spr:"icelance",rare:1,beh:"frost",ds:"冷冷冷冷", lvl:w=>({dmg:6*(1+.2*(w-1)),int:16,spd:6,freeze:70+25*w})}, swarm:{name:"蜂巢导弹",spr:"msl2",rare:1,beh:"homing",ds:"不可用于对付肉山", lvl:w=>({n:1+w,dmg:2.2*(1+.2*(w-1)),int:22,spd:3.2,aoe:10})}, bubble:{name:"重力泡泡",spr:"bub",rare:1,beh:"bubble",ds:"天呐!是海绵宝宝", lvl:w=>({dmg:18*(1+.25*(w-1)),int:26,spd:1.4,aoe:30+4*w})}, starfall:{name:"流星火雨",spr:"met",rare:2,beh:"starfall",ds:"天火", lvl:w=>({n:3+Math.floor(w/2),dmg:16*(1+.25*(w-1)),int:150-8*w,aoe:16})}, boomerang:{name:"回旋镖",spr:"boomer",rare:0,beh:"boom",ds:"但愿不会打到自己", lvl:w=>({n:1+Math.floor(w/2),dmg:7*(1+.22*(w-1)),int:21,spd:4.8})}, singularity:{name:"奇点炮",spr:"sing",rare:2,beh:"sing",ds:"雷工蛋?", lvl:w=>({dmg:40*(1+.3*(w-1)),int:200,pull:88,aoe:62,fuse:160})}, // 牵引/爆炸范围与射程增强 wavecannon:{name:"波动炮",spr:"waveb",rare:2,beh:"wave",ds:"炼狱无双波动炮", lvl:w=>({dmg:32*(1+.3*(w-1)),charge:100-8*w,spd:5,width:14+6*w})}, holy:{name:"圣光弹",spr:"holyo",rare:2,beh:"holy",ds:"哇哦", lvl:w=>({dmg:13*(1+.25*(w-1)),int:65,spd:3,len:16+3*w})}, thundercall:{name:"落雷术",spr:"thnd",rare:1,beh:"thunder",ds:"何方道友在此渡劫", lvl:w=>({n:2+Math.floor(w/2),dmg:12*(1+.25*(w-1)),int:90-4*w,aoe:13})}, arcshu:{name:"电弧手里剑",spr:"shuri",rare:2,beh:"shuriken",ds:"这个很熟悉了吧", lvl:w=>({dmg:6*(1+.22*(w-1)),int:95-4*w,spd:2.2,zapDmg:5*(1+.25*(w-1)),pulse:7})}, // 电弧释放速度×3 volt:{name:"电能机炮",spr:"voltb",rare:1,beh:"volt",ds:"疑似电大", lvl:w=>({n:1+Math.floor(w/3),dmg:3.2*(1+.2*(w-1)),int:5,spd:6.2,gap:5,chain:2+Math.floor(w/2)})}, dawn:{name:"黎明重炮",spr:"dawnsh",rare:2,beh:"dawn",ds:"祖宗发射器", lvl:w=>({dmg:70*(1+.3*(w-1)),charge:170-12*w,spd:5,aoe:30+3*w})}, proto:{name:"协议武装",spr:"protb",rare:2,beh:"protocol",ds:"搜索,歼灭", lvl:w=>({dmg:3*(1+.2*(w-1)),int:6,spd:6.5,heavy:120-8*w,hdmg:36*(1+.28*(w-1)),haoe:26+3*w})}, nebula:{name:"星云奥秘",spr:"neb",rare:2,beh:"nebula",ds:"字面意思", lvl:w=>({dmg:12*(1+.25*(w-1)),int:100-5*w,spd:1.6,stars:10+2*w})}, loiter:{name:"巡飞弹",spr:"loms",rare:1,beh:"loiter",ds:"堵桥来", lvl:w=>({dmg:22*(1+.25*(w-1)),int:68-5*w,spd:4.2,zone:20+3*w,fire:95+15*w})} }; const MAINS=Object.keys(WEAPONS); /* ================= 18 副武器 ================= */ const SUBS={ broad:{name:"侧舷火炮",spr:"broad",rare:0,max:5,beh:"broad",ds:l=>`舷炮斜向前方45°齐射,Lv${l+1}`}, sweep:{name:"探照扫射",icon:"laser",rare:1,max:5,beh:"sweep",ds:l=>`往复摆动的扫描光束,Lv${l+1}`}, leech:{name:"寄生电浆",icon:"chain",rare:1,max:3,beh:"leech",ds:l=>`命中附着电浆水蛭,吸血回复结构,Lv${l+1}`}, orbit:{name:"环绕光刃",spr:"blade",rare:1,max:4,beh:"orbit",ds:l=>`光刃+1(当前${l+1}把)`}, sats:{name:"卫星屏障",spr:"sat",rare:1,max:3,beh:"sats",ds:l=>`环绕卫星可格挡敌弹,Lv${l+1}`}, pd:{name:"点防御炮",spr:"dGun",rare:1,max:4,beh:"pd",ds:l=>`自动拦截来袭敌弹(不打贴身弹),Lv${l+1}`}, slowfield:{name:"时间力场",spr:"grv",rare:2,max:3,beh:"slowfield",ds:l=>"力场内敌人与敌弹大幅减速,Lv"+(l+1)}, flares:{name:"热诱弹舱",spr:"flare",rare:0,max:4,beh:"flares",ds:l=>"扇形抛射4枚缓速热诱弹,各诱爆一枚敌弹,Lv"+(l+1)}, seeker:{name:"索敌浮游炮",spr:"dGun2",rare:1,max:3,beh:"seeker",ds:l=>"离机索敌的浮游炮,Lv"+(l+1)}, beamdrone:{name:"光束浮游炮",spr:"dBeam",rare:2,max:3,beh:"beamdrone",ds:l=>"环绕发射光束的浮游单元,Lv"+(l+1)}, frostnova:{name:"冰霜新星",spr:"frost",rare:1,max:3,beh:"frostnova",ds:l=>"周期性冻结周围敌人,Lv"+(l+1)}, thorns:{name:"反伤棘甲",icon:"crit",rare:1,max:3,beh:"thorns",ds:l=>"撞击你的敌人遭到反噬,Lv"+(l+1)}, sticky:{name:"粘着炸弹",spr:"sticky",rare:0,max:3,beh:"sticky",ds:l=>"粘附敌人的定时高爆炸弹,Lv"+(l+1)}, magnetar:{name:"磁暴环",icon:"mag",rare:2,max:3,beh:"magnetar",ds:l=>"周期性电磁脉冲,消弹伤敌,Lv"+(l+1)}, executor:{name:"斩首巡航弹",spr:"cmsl",rare:2,max:3,beh:"executor",ds:l=>"巡航导弹猎杀最强之敌,Lv"+(l+1)}, airstrike:{name:"空爆弹",spr:"amsl",rare:1,max:5,beh:"airstrike",ds:l=>"双弹侧掠折向直上,穿透机身沿途轰炸,Lv"+(l+1)}, repair:{name:"修复无人机",spr:"dHeal",rare:1,max:3,beh:"repair",ds:l=>"持续修复机体结构,Lv"+(l+1)} }; const SUB_KEYS=Object.keys(SUBS); /* ================= 12 僚机 ================= */ const DRONES={ gunner:{name:"机枪僚机",spr:"dGun",rare:0,max:3,beh:"aim",ds:l=>"协同瞄准射击,Lv"+(l+1)}, gunner2:{name:"双翼机枪手",spr:"dGun2",rare:1,max:3,beh:"aim2",ds:l=>"双管僚机,Lv"+(l+1)}, sniperd:{name:"狙击僚机",spr:"dSnip",rare:1,max:3,beh:"snipe",ds:l=>"高伤点射,Lv"+(l+1)}, beamer:{name:"光束僚机",spr:"dBeam",rare:2,max:3,beh:"beam",ds:l=>"周期光束,Lv"+(l+1)}, bomber:{name:"轰炸僚机",spr:"dBomb",rare:1,max:3,beh:"bomb",ds:l=>"投掷爆炸弹,Lv"+(l+1)}, frostd:{name:"冰霜僚机",spr:"dFrost",rare:1,max:3,beh:"frostD",ds:l=>"减速弹,Lv"+(l+1)}, teslaD:{name:"电弧僚机",spr:"dTesla",rare:2,max:3,beh:"teslaD",ds:l=>"近身电击,Lv"+(l+1)}, rammer:{name:"冲撞僚机",spr:"dRam",rare:1,max:3,beh:"melee",big:1.6,ds:l=>"高速环绕撞击,Lv"+(l+1)}, healer:{name:"修复僚机",spr:"dHeal",rare:1,max:3,beh:"heal",ds:l=>"缓慢回复结构值,Lv"+(l+1)}, shieldd:{name:"护盾僚机",spr:"dShield",rare:2,max:3,beh:"block",big:1.5,ds:l=>"环绕格挡敌弹,Lv"+(l+1)}, missileD:{name:"导弹僚机",spr:"dMsl",rare:1,max:3,beh:"missile",ds:l=>"追踪导弹,Lv"+(l+1)}, bladeD:{name:"刃舞僚机",spr:"dBlade",rare:1,max:3,beh:"bladeD",ds:l=>"投掷回旋刃,Lv"+(l+1)}, sweeper:{name:"扫射僚机",spr:"dSweep",rare:1,max:3,beh:"sweep",ds:l=>"扇形区域来回扫射,火力覆盖,Lv"+(l+1)} }; const DRONE_KEYS=Object.keys(DRONES); /* ================= 8 被动强化 ================= */ const PASSIVES={ fire:{name:"火控雷达",icon:"fire",rare:0,max:5,ds:()=>"射速 +12%"}, crit:{name:"暴击芯片",icon:"crit",rare:1,max:4,ds:()=>"暴击率 +8%"}, shield:{name:"能量护盾",icon:"shield",rare:1,max:3,ds:l=>l?"护盾充能加快":"获得可格挡的护盾"}, nano:{name:"纳米修复",icon:"nano",rare:1,max:3,ds:()=>"血量上限+25 并回复40"}, mag:{name:"引力核心",icon:"mag",rare:0,max:3,ds:()=>"拾取范围 +60%"}, bounty:{name:"赏金协议",icon:null,spr:"coin",rare:0,max:3,ds:()=>"星币获取 +30%"}, odcore:{name:"超频核心",icon:null,spr:"odc",rare:1,max:3,ds:()=>"暴走充能+30%,时长+1s"}, ghost:{name:"幽灵装甲",icon:"ghost",rare:2,max:2,ds:()=>"闪避率 +10%"} }; const PAS_KEYS=Object.keys(PASSIVES); /* ---- 主武器火力衰减与敌人动态缩放 ---- 装备数量 → 每把武器伤害系数:[1]100% [2]80% [3]60% [4]50% [5]45% 总火力 = 系数×数量;敌人血量与数量随总火力提升 */ const WMUL=[0,1,0.8,0.6,0.5,0.45]; function wCount(){return Math.max(1,G.loadout.length);} function wMul(){return WMUL[clamp(wCount(),1,5)];} function totWMul(){return wMul()*wCount();} function enemyScale(){return 1+0.22*(totWMul()-1);} // 血量缩放 function budgetScale(){return 1+0.22*(totWMul()-1);} // 数量缩放