Cleanup nations (Part 3) 🧹 Remove nation strength (#2649)

## Description:

This PR removes the nation strength. Reasoning:

- It is currently unused. The backstory can be found in #2498
- It forces map-makers to do balancing work, which is probably not a
good idea
- It increases map-making work
- It increases nation balancing complexity by a lot (we need to have all
the json files in mind)
- It makes humans avoid map areas completely because there is always
that one, same, strong nation
- The map lead Nikola123 wants to "not deal with the stupid nations and
their balancing"

If the goal of nation strength was to make them feel different I would
suggest a nation personality system. Nations that love to boat, love to
ally, love to nuke, love to fullsend, etc.

Link to a discord discussion about nation strength:


https://discord.com/channels/1359946986937258015/1360078040222142564/1450973197251117218

## Please complete the following:

- [X] I have added screenshots for all UI updates
- [X] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [X] I have added relevant tests to the test directory
- [X] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

FloPinguin
This commit is contained in:
FloPinguin
2025-12-19 19:10:01 -08:00
committed by GitHub
parent af1e05961c
commit e554ffb1b0
80 changed files with 1179 additions and 2950 deletions
+1 -7
View File
@@ -61,13 +61,7 @@ export async function createGameRunner(
(n) =>
new Nation(
new Cell(n.coordinates[0], n.coordinates[1]),
new PlayerInfo(
n.name,
PlayerType.Nation,
null,
random.nextID(),
n.strength,
),
new PlayerInfo(n.name, PlayerType.Nation, null, random.nextID()),
),
);
-1
View File
@@ -94,7 +94,6 @@ export interface Config {
userSettings(): UserSettings;
playerTeams(): TeamCountConfig;
useNationStrengthForStartManpower(): boolean;
startManpower(playerInfo: PlayerInfo): number;
troopIncreaseRate(player: Player | PlayerView): number;
goldAdditionRate(player: Player | PlayerView): Gold;
+4 -15
View File
@@ -802,31 +802,20 @@ export class DefaultConfig implements Config {
}
}
useNationStrengthForStartManpower(): boolean {
// Currently disabled: Nations became harder to play against due to AI improvements
// nation strength multiplier was unintentionally disabled during those AI improvements (playerInfo.nation was undefined),
// Re-enabling this without rebalancing Nation difficulty elsewhere may make them overpowered
return false;
}
startManpower(playerInfo: PlayerInfo): number {
if (playerInfo.playerType === PlayerType.Bot) {
return 10_000;
}
if (playerInfo.playerType === PlayerType.Nation) {
const strength = this.useNationStrengthForStartManpower()
? (playerInfo.nationStrength ?? 1)
: 1;
switch (this._gameConfig.difficulty) {
case Difficulty.Easy:
return 18_750 * strength;
return 18_750;
case Difficulty.Medium:
return 25_000 * strength; // Like humans
return 25_000; // Like humans
case Difficulty.Hard:
return 31_250 * strength;
return 31_250;
case Difficulty.Impossible:
return 37_500 * strength;
return 37_500;
default:
assertNever(this._gameConfig.difficulty);
}
-1
View File
@@ -418,7 +418,6 @@ export class PlayerInfo {
public readonly clientID: ClientID | null,
// TODO: make player id the small id
public readonly id: PlayerID,
public readonly nationStrength?: number,
) {
this.clan = getClanTag(name);
}
-1
View File
@@ -28,7 +28,6 @@ export interface Nation {
coordinates: [number, number];
flag: string;
name: string;
strength: number;
}
export async function loadTerrainMap(