Rebalance weapon tiers via quantitative DPS/range/accuracy/pool scoring
tools/score_weapons.js ranks the arsenal with a behavior-aware model: effective DPS (bounce/boomerang/AoE/DoT multipliers), real engagement range, spread-based accuracy, and damage pool per ammo load. Tier moves: - Cleaver Cadence 0->1 (440px range + return re-hit outguns the starters) - Bile Blunderbuss 1->2 (134 effDPS + slow + pools is secretly a heavy) - The Cauterizer 2->3 (252 effDPS, highest sustained DPS in the game) - The Tenderizer 2->3 (134 effDPS AoE, outscores Spinal Tap) Tiers now: T0 repeater/marrow, T1 cleaver/saw/hemophage/eye, T2 bile/guthook/fleshmasher/trapqueen/redhand, T3 cauterizer/tenderizer/ spinaltap/swarmjar. Smoke test pins the 2/4/5/4 distribution.
This commit is contained in:
1 parent
d5b1828df4
commit
f71d202850
4 files changed
+162
-60
No files matched your search
@@ -147,6 +147,8 @@ check('every weapon has layered render and muzzle geometry', Object.values(ctx.W
|
||||
Number.isFinite(w.torsoW) && Number.isFinite(w.torsoFwd) && Number.isFinite(w.muzzle) && w.muzzle > 0));
|
||||
check('every weapon has finite impact punch metadata', Object.values(ctx.WEAPONS).every(w => Number.isFinite(w.punch) && w.punch > 0));
|
||||
check('arsenal still contains exactly 16 weapons', Object.keys(ctx.WEAPONS).length === 16);
|
||||
check('quantitative tier rebalance: 2/4/5/4 distribution', [0, 1, 2, 3].every(t => Object.values(ctx.WEAPONS).filter(w => w.tier === t).length === [2, 4, 5, 4][t]));
|
||||
check('every drop tier has at least one weapon', [0, 1, 2, 3].every(t => Object.values(ctx.WEAPONS).some(w => w.tier === t)));
|
||||
check('visceral DSP and fallback events are wired',
|
||||
['punch', 'duck', 'wallHit', 'lifesteal'].every(name => typeof ctx.Sfx[name] === 'function'));
|
||||
const missingSfxFiles = Object.values(ctx.SfxBank.FILES).filter(file => {
|
||||
|
||||
Reference in new issue
Block a user