From b31b6a89f8661c72329310da0547168b9dc5304a Mon Sep 17 00:00:00 2001 From: Scott Anderson <662325+scottanderson@users.noreply.github.com> Date: Sat, 31 May 2025 23:34:10 -0400 Subject: [PATCH] Equal team sizes --- src/core/configuration/Config.ts | 6 +++++- src/core/configuration/DefaultConfig.ts | 12 ++++++++++-- src/server/MapPlaylist.ts | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index 80c6dbd5e..e6f4af76f 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -29,7 +29,11 @@ export enum GameEnv { export interface ServerConfig { turnIntervalMs(): number; gameCreationRate(): number; - lobbyMaxPlayers(map: GameMapType, mode: GameMode): number; + lobbyMaxPlayers( + map: GameMapType, + mode: GameMode, + numPlayerTeams: number | undefined, + ): number; numWorkers(): number; workerIndex(gameID: GameID): number; workerPath(gameID: GameID): string; diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index 77d9e880e..fcad1d77b 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -137,11 +137,19 @@ export abstract class DefaultServerConfig implements ServerConfig { return 60 * 1000; } - lobbyMaxPlayers(map: GameMapType, mode: GameMode): number { + lobbyMaxPlayers( + map: GameMapType, + mode: GameMode, + numPlayerTeams: number | undefined, + ): number { const [l, m, s] = numPlayersConfig[map] ?? [50, 30, 20]; const r = Math.random(); const base = r < 0.3 ? l : r < 0.6 ? m : s; - return Math.min(mode === GameMode.Team ? Math.ceil(base * 1.5) : base, 150); + let players = mode === GameMode.Team ? Math.ceil(base * 1.5) : base; + if (numPlayerTeams !== undefined) { + players -= players % numPlayerTeams; + } + return Math.min(players, l); } workerIndex(gameID: GameID): number { diff --git a/src/server/MapPlaylist.ts b/src/server/MapPlaylist.ts index dfec2aa3c..cebf4a0b8 100644 --- a/src/server/MapPlaylist.ts +++ b/src/server/MapPlaylist.ts @@ -51,7 +51,7 @@ export class MapPlaylist { // Create the default public game config (from your GameManager) return { gameMap: map, - maxPlayers: config.lobbyMaxPlayers(map, mode), + maxPlayers: config.lobbyMaxPlayers(map, mode, numPlayerTeams), gameType: GameType.Public, difficulty: Difficulty.Medium, infiniteGold: false,