Skip to content

Commit 71b28c8

Browse files
committed
Fix Glovz's formula: ammo mult, bonus damage to unarmored, banker's rounding, and add multiplier tweak
1 parent d43d359 commit 71b28c8

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

src/formulas.ts

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,13 @@ const yaamFormula = (
277277
return `${minDamage}-${maxDamage}`;
278278
};
279279

280-
// Glovz Damage Fix v5 formula (from sfall DamageMod.cpp)
281-
// calcDT = armorDT / ammoY (ammo divisor)
282-
// calcDR = (armorDR + ammoDRM) / ammoX (ammo multiplier)
283-
// rawDamage = baseDamage - calcDT
284-
// resistedDamage = calcDR * rawDamage / 100
285-
// rawDamage = (rawDamage - resistedDamage) * multiplyDamage / 2
280+
// Glovz Damage Fix v5.1 formula (from sfall DamageMod.cpp)
281+
// Uses DivRound (round half to even) for intermediate calculations
282+
// calcDT = DivRound(armorDT, ammoY)
283+
// calcDR = DivRound(armorDR + ammoDRM, ammoX)
284+
// resistedDamage = DivRound(calcDR * rawDamage, 100)
285+
// Bonus damage to unarmored (DT<=0 && DR<=0): FMJ +15%, JHP +20%, AP +10%
286+
// v5.1 tweak: rawDamage += DivRound(rawDamage * multiplyDamage * 25, 100)
286287
// Critical: multiplyDamage = 6 instead of 2, armor bypass (DR and DT to 20%)
287288
// Penetrate: DT to 20% (not cumulative with critical)
288289
// Normal difficulty (100), no perks
@@ -313,10 +314,12 @@ const glovzFormula = (
313314
}
314315

315316
// ammoY = divisor (dmg_div)
316-
// ammoX = multiplier (dmg_mult / dmg_div)
317+
// ammoX = multiplier (dmg_mult)
317318
// ammoDRM = dr_mod (if positive, flip to negative)
318-
const ammoY = ammo.dmg_div;
319-
const ammoX = ammo.dmg_mult / ammo.dmg_div;
319+
let ammoY = ammo.dmg_div;
320+
if (ammoY <= 0) ammoY = 1;
321+
let ammoX = ammo.dmg_mult;
322+
if (ammoX <= 0) ammoX = 1;
320323
let ammoDRM = ammo.dr_mod;
321324
if (ammoDRM > 0) ammoDRM = -ammoDRM;
322325

@@ -346,9 +349,24 @@ const glovzFormula = (
346349
if (rawDamage <= 0) return 0;
347350
}
348351

352+
// Bonus damage to unarmored target
353+
if (armorDT <= 0 && armorDR <= 0) {
354+
if (ammoX > 1 && ammoY > 1) {
355+
// FMJ/high-end: +15%
356+
rawDamage += divRound(rawDamage * 15, 100);
357+
} else if (ammoX > 1) {
358+
// JHP: +20%
359+
rawDamage += divRound(rawDamage * 20, 100);
360+
} else if (ammoY > 1) {
361+
// AP: +10%
362+
rawDamage += divRound(rawDamage * 10, 100);
363+
}
364+
}
365+
349366
// multiplyDamage: 6 for single crit, 4 for burst crit, 2 for non-critical
367+
// v5.1 tweak: rawDamage += DivRound(rawDamage * multiplyDamage * 25, 100)
350368
const multiplyDamage = effectiveCritical ? (burst ? 4 : 6) : 2;
351-
rawDamage = Math.floor((rawDamage * multiplyDamage) / 2);
369+
rawDamage += divRound(rawDamage * multiplyDamage * 25, 100);
352370

353371
return Math.max(0, rawDamage);
354372
};

src/modConfig.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ export const modConfigs: Record<string, ModConfig> = {
3232
},
3333
glovz: {
3434
id: 'glovz',
35-
name: 'Glovz',
36-
description: "Glovz's Damage Formula",
35+
name: 'Glovz v5.1',
36+
description: "Glovz's Damage Fix with Multiplier tweak",
3737
formula: 'glovz',
3838
},
3939
};

0 commit comments

Comments
 (0)