import { Difficulty, Game, GameMapType, Gold, Player, PlayerID, PlayerInfo, TerraNullius, Tick, UnitInfo, UnitType, } from "../game/Game"; import { Colord, colord } from "colord"; import { GameConfig, GameID } from "../Schemas"; import { GameMap, TileRef } from "../game/GameMap"; import { PlayerView } from "../game/GameView"; import { UserSettings } from "../game/UserSettings"; export enum GameEnv { Dev, Preprod, Prod, } export interface ServerConfig { turnIntervalMs(): number; gameCreationRate(): number; lobbyMaxPlayers(map: GameMapType): number; discordRedirectURI(): string; numWorkers(): number; workerIndex(gameID: GameID): number; workerPath(gameID: GameID): string; workerPort(gameID: GameID): number; workerPortByIndex(workerID: number): number; env(): GameEnv; region(): string; adminToken(): string; adminHeader(): string; // Only available on the server gitCommit(): string; r2Bucket(): string; r2Endpoint(): string; r2AccessKey(): string; r2SecretKey(): string; } export interface Config { samHittingChance(): number; samCooldown(): Tick; spawnImmunityDuration(): Tick; serverConfig(): ServerConfig; gameConfig(): GameConfig; theme(): Theme; percentageTilesOwnedToWin(): number; numBots(): number; spawnNPCs(): boolean; disableNukes(): boolean; bots(): number; infiniteGold(): boolean; infiniteTroops(): boolean; instantBuild(): boolean; numSpawnPhaseTurns(): number; userSettings(): UserSettings; startManpower(playerInfo: PlayerInfo): number; populationIncreaseRate(player: Player | PlayerView): number; goldAdditionRate(player: Player | PlayerView): number; troopAdjustmentRate(player: Player): number; attackTilesPerTick( attckTroops: number, attacker: Player, defender: Player | TerraNullius, numAdjacentTilesWithEnemy: number, ): number; attackLogic( gm: Game, attackTroops: number, attacker: Player, defender: Player | TerraNullius, tileToConquer: TileRef, ): { attackerTroopLoss: number; defenderTroopLoss: number; tilesPerTickUsed: number; }; attackAmount(attacker: Player, defender: Player | TerraNullius): number; radiusPortSpawn(): number; // When computing likelihood of trading for any given port, the X closest port // are twice more likely to be selected. X is determined below. proximityBonusPortsNb(totalPorts: number): number; maxPopulation(player: Player | PlayerView): number; cityPopulationIncrease(): number; boatAttackAmount(attacker: Player, defender: Player | TerraNullius): number; boatMaxNumber(): number; allianceDuration(): Tick; allianceRequestCooldown(): Tick; targetDuration(): Tick; targetCooldown(): Tick; emojiMessageCooldown(): Tick; emojiMessageDuration(): Tick; donateCooldown(): Tick; defaultDonationAmount(sender: Player): number; unitInfo(type: UnitType): UnitInfo; tradeShipGold(dist: number): Gold; tradeShipSpawnRate(numberOfPorts: number): number; defensePostRange(): number; defensePostDefenseBonus(): number; falloutDefenseModifier(percentOfFallout: number): number; difficultyModifier(difficulty: Difficulty): number; // 0-1 traitorDefenseDebuff(): number; } export interface Theme { territoryColor(playerInfo: PlayerInfo): Colord; specialBuildingColor(playerInfo: PlayerInfo): Colord; borderColor(playerInfo: PlayerInfo): Colord; defendedBorderColor(playerInfo: PlayerInfo): Colord; terrainColor(gm: GameMap, tile: TileRef): Colord; backgroundColor(): Colord; falloutColor(): Colord; font(): string; textColor(playerInfo: PlayerInfo): string; // unit color for alternate view selfColor(): Colord; allyColor(): Colord; enemyColor(): Colord; spawnHighlightColor(): Colord; }