Support Inverse Mod in type effectiveness display (#2668)

* Type effectiveness: Support Inverse Mod

* Support Inverse Mod in Hardcore Mode

* fix trailing spaces
This commit is contained in:
iforgetwhyimhere 2026-05-01 14:32:36 -04:00 committed by GitHub
parent 4d8221c18e
commit f52c98107f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1839,6 +1839,7 @@ export class BattleTooltips {
return 1;
}
const hardcoreMode = this.battle.hardcoreMode;
const inverse = this.battle.rules['Inverse Mod'];
const targetTypes = target.getTypeList();
const sourceAbility = source.effectiveAbility();
// Mold Breaker doesn't ignore _everything_, but it sure ignores everything that affects effectiveness
@ -1905,7 +1906,15 @@ export class BattleTooltips {
factor = 1;
break;
}
factor = 0;
// Inverse replaces immunities with weaknesses. This has to
// be coded here, else it won't calculate secondary type's
// effectiveness. It sets a resistance to be consistent with
// the inversion done at the end.
if (inverse) {
factor *= 0.5;
} else {
factor = 0;
}
} else if (move.id === 'freezedry' && targetType === 'Water') {
factor *= 2;
} else {
@ -1970,11 +1979,20 @@ export class BattleTooltips {
return factor * otherFactor === 0 ? 0 : 1;
}
if (hardcoreMode && dex.gen <= 9) {
if (factor > 2) return 2;
if (factor < 0.5) return 0.5;
if (factor > 2) factor = 2;
if (factor < 0.5) factor = 0.5;
if (inverse && dex.gen >= 7) return 1 / factor;
return factor;
}
if (hardcoreMode) return factor;
if (hardcoreMode) {
if (inverse && dex.gen >= 7) return 1 / factor;
return factor;
}
// Inverse Mod reverses effectiveness
if (inverse) {
return 1 / (factor * otherFactor);
}
return factor * otherFactor;
}
getMoveTypeText(move: Dex.Move, value: ModifiableValue, forMaxMove?: boolean | Dex.Move) {