From a85e31932c2e8acc53c3fe3cb843e44fbd18ea0e Mon Sep 17 00:00:00 2001 From: Tim Felgentreff <timfelgentreff@gmail.com> Date: Tue, 22 Dec 2020 17:53:39 +0100 Subject: [PATCH] add game types that are useful for training AIs --- src/game/game.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++ src/include/settings.h | 4 +++- src/tolua/game.pkg | 2 ++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/game/game.cpp b/src/game/game.cpp index d07bba4b8..435100586 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -690,6 +690,7 @@ static void GameTypeLeftVsRight() */ static void GameTypeManVsMachine() { + Map.NoFogOfWar = true; for (int i = 0; i < PlayerMax - 1; ++i) { if (Players[i].Type != PlayerPerson && Players[i].Type != PlayerComputer) { continue; @@ -738,6 +739,42 @@ static void GameTypeManTeamVsMachine() } } +/** +** Machine vs Machine +*/ +static void GameTypeMachineVsMachine() +{ + Map.Reveal(); + for (int i = 0; i < PlayerMax - 1; ++i) { + if (Players[i].Type == PlayerComputer) { + for (int j = i + 1; j < PlayerMax - 1; ++j) { + if (Players[j].Type == PlayerComputer) { + CommandDiplomacy(i, DiplomacyEnemy, j); + CommandDiplomacy(j, DiplomacyEnemy, i); + } else { + CommandDiplomacy(i, DiplomacyNeutral, j); + CommandDiplomacy(j, DiplomacyNeutral, i); + } + } + } + } +} + +/** + ** Machine vs Machine Training + */ +static void GameTypeMachineVsMachineTraining() +{ + Assert(!IsNetworkGame()); + GameTypeMachineVsMachine(); + FastForwardCycle = LONG_MAX; + SyncHash = 0; + InitSyncRand(); + for (int i = 0; i < MyRand() % 100; i++) { + SyncRand(); + } +} + /*---------------------------------------------------------------------------- -- Game creation ----------------------------------------------------------------------------*/ @@ -871,6 +908,13 @@ void CreateGame(const std::string &filename, CMap *map) break; case SettingsGameTypeManTeamVsMachine: GameTypeManTeamVsMachine(); + break; + case SettingsGameTypeMachineVsMachine: + GameTypeMachineVsMachine(); + break; + case SettingsGameTypeMachineVsMachineTraining: + GameTypeMachineVsMachineTraining(); + break; // Future game type ideas #if 0 diff --git a/src/include/settings.h b/src/include/settings.h index 409519b83..9508cfd99 100644 --- a/src/include/settings.h +++ b/src/include/settings.h @@ -101,7 +101,9 @@ enum GameTypes { SettingsGameTypeTopVsBottom, SettingsGameTypeLeftVsRight, SettingsGameTypeManVsMachine, - SettingsGameTypeManTeamVsMachine + SettingsGameTypeManTeamVsMachine, + SettingsGameTypeMachineVsMachine, + SettingsGameTypeMachineVsMachineTraining // Future game type ideas #if 0 diff --git a/src/tolua/game.pkg b/src/tolua/game.pkg index bfc1b63ce..e085a08a8 100644 --- a/src/tolua/game.pkg +++ b/src/tolua/game.pkg @@ -80,5 +80,7 @@ enum GameTypes { SettingsGameTypeLeftVsRight, SettingsGameTypeManVsMachine, SettingsGameTypeManTeamVsMachine, + SettingsGameTypeMachineVsMachine, + SettingsGameTypeMachineVsMachineTraining, };