diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index 0fb16b4903..8fe4a0f6bc 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -151,7 +151,7 @@ export interface Config { defensePostRange(): number; SAMCooldown(): number; SiloCooldown(): number; - defensePostDefenseBonus(): number; + defensePostDefenseBonus(level: number): number; defensePostSpeedBonus(): number; falloutDefenseModifier(percentOfFallout: number): number; difficultyModifier(difficulty: Difficulty): number; diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index ee7b8d1ab6..932345abbc 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -306,11 +306,20 @@ export class DefaultConfig implements Config { return 30; } - defensePostDefenseBonus(): number { - return 5; + defensePostDefenseBonus(level: number): number { + if (level < 1) { + throw new Error( + `Invalid defense post level: ${level}. Level must be >= 1`, + ); + } + const baseValue = 5; + const maxIncrease = 1.5; + const k = 2; + return baseValue + maxIncrease * ((level - 1) / (level - 1 + k)); } defensePostSpeedBonus(): number { + // This bonus is currently a fixed value. return 3; } @@ -496,6 +505,7 @@ export class DefaultConfig implements Config { ), territoryBound: true, constructionDuration: this.instantBuild() ? 0 : 5 * 10, + upgradable: true, }; case UnitType.SAMLauncher: return { @@ -665,7 +675,7 @@ export class DefaultConfig implements Config { UnitType.DefensePost, )) { if (dp.unit.owner() === defender) { - mag *= this.defensePostDefenseBonus(); + mag *= this.defensePostDefenseBonus(dp.unit.level()); speed *= this.defensePostSpeedBonus(); break; }