import fs from "fs"; import path from "path"; import { Difficulty, Game, GameMapType, GameMode, GameType, PlayerInfo, PlayerType, } from "../../src/core/game/Game"; import { createGame } from "../../src/core/game/GameImpl"; import { genTerrainFromBin } from "../../src/core/game/TerrainMapLoader"; import { UserSettings } from "../../src/core/game/UserSettings"; import { GameConfig } from "../../src/core/Schemas"; import { TestConfig } from "./TestConfig"; import { TestServerConfig } from "./TestServerConfig"; export async function setup( mapName: string, _gameConfig: Partial = {}, humans: PlayerInfo[] = [], ): Promise { // Suppress console.debug for tests. console.debug = () => {}; // Simple binary file loading using fs.readFileSync() const mapBinPath = path.join( __dirname, `../testdata/maps/${mapName}/map.bin`, ); const miniMapBinPath = path.join( __dirname, `../testdata/maps/${mapName}/mini_map.bin`, ); const mapBinBuffer = fs.readFileSync(mapBinPath); const miniMapBinBuffer = fs.readFileSync(miniMapBinPath); // Convert Buffer to string (binary encoding) const mapBinString = mapBinBuffer.toString("binary"); const miniMapBinString = miniMapBinBuffer.toString("binary"); const gameMap = await genTerrainFromBin(mapBinString); const miniGameMap = await genTerrainFromBin(miniMapBinString); // Configure the game const serverConfig = new TestServerConfig(); const gameConfig: GameConfig = { gameMap: GameMapType.Asia, gameMode: GameMode.FFA, gameType: GameType.Singleplayer, difficulty: Difficulty.Medium, disableNPCs: false, bots: 0, infiniteGold: false, infiniteTroops: false, instantBuild: false, ..._gameConfig, }; const config = new TestConfig( serverConfig, gameConfig, new UserSettings(), false, ); return createGame(humans, [], gameMap, miniGameMap, config); } export function playerInfo(name: string, type: PlayerType): PlayerInfo { return new PlayerInfo(undefined, "fr", name, type, null, name); }