From 05f6b251f7c7a119ebf1f0706b09794eb8ab5945 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff <timfelgentreff@gmail.com> Date: Thu, 3 Mar 2022 22:43:07 +0100 Subject: [PATCH] reuse game structures in replay types --- src/game/replay.cpp | 153 ++++++++++++++++++++++---------------------- 1 file changed, 76 insertions(+), 77 deletions(-) diff --git a/src/game/replay.cpp b/src/game/replay.cpp index c21b56566..7c2b65c30 100644 --- a/src/game/replay.cpp +++ b/src/game/replay.cpp @@ -98,14 +98,15 @@ public: class MPPlayer { public: - MPPlayer() : PlayerColor(0), Race(0), Team(0), Type(0) {} + MPPlayer() { + Preset.PlayerColor = 0; + Preset.Race = 0; + Preset.Team = 0; + Preset.Type = 0; + } std::string Name; - std::string AIScript; - int PlayerColor; - int Race; - int Team; - int Type; + SettingsPresets Preset; }; /** @@ -115,10 +116,17 @@ class FullReplay { public: FullReplay() : - MapId(0), Type(0), Race(0), LocalPlayer(0), - Resource(0), NumUnits(0), Difficulty(0), NoFow(false), Inside(false), RevealMap(0), - MapRichness(0), GameType(0), Opponents(0), Commands(NULL) + MapId(0), Type(0), LocalPlayer(0), Commands(NULL) { + ReplaySettings.Resources = 0; + ReplaySettings.NumUnits = 0; + ReplaySettings.Difficulty = 0; + ReplaySettings.NoFogOfWar = false; + ReplaySettings.Inside = false; + ReplaySettings.RevealMap = 0; + ReplaySettings.MapRichness = 0; + ReplaySettings.GameType = 0; + ReplaySettings.Opponents = 0; memset(Engine, 0, sizeof(Engine)); memset(Network, 0, sizeof(Network)); } @@ -131,19 +139,10 @@ public: unsigned MapId; int Type; - int Race; int LocalPlayer; MPPlayer Players[PlayerMax]; - int Resource; - int NumUnits; - int Difficulty; - bool NoFow; - bool Inside; - int RevealMap; - int MapRichness; - int GameType; - int Opponents; + Settings ReplaySettings; int Engine[3]; int Network[3]; LogEntry *Commands; @@ -198,11 +197,11 @@ static FullReplay *StartReplay() for (int i = 0; i < PlayerMax; ++i) { replay->Players[i].Name = Players[i].Name; - replay->Players[i].PlayerColor = GameSettings.Presets[i].PlayerColor; - replay->Players[i].AIScript = Players[i].AiName; // GameSettings.Presets[i].AIScript; - replay->Players[i].Race = Players[i].Race; // GameSettings.Presets[i].Race; - replay->Players[i].Team = Players[i].Team; // GameSettings.Presets[i].Team; - replay->Players[i].Type = Players[i].Type; // GameSettings.Presets[i].Type; + replay->Players[i].Preset.PlayerColor = GameSettings.Presets[i].PlayerColor; + replay->Players[i].Preset.AIScript = Players[i].AiName; // GameSettings.Presets[i].AIScript; + replay->Players[i].Preset.Race = Players[i].Race; // GameSettings.Presets[i].Race; + replay->Players[i].Preset.Team = Players[i].Team; // GameSettings.Presets[i].Team; + replay->Players[i].Preset.Type = Players[i].Type; // GameSettings.Presets[i].Type; } replay->LocalPlayer = ThisPlayer->Index; @@ -211,15 +210,15 @@ static FullReplay *StartReplay() replay->Map = Map.Info.Description; replay->MapId = (signed int)Map.Info.MapUID; replay->MapPath = CurrentMapPath; - replay->Resource = GameSettings.Resources; - replay->NumUnits = GameSettings.NumUnits; - replay->Difficulty = GameSettings.Difficulty; - replay->NoFow = GameSettings.NoFogOfWar; - replay->Inside = GameSettings.Inside; - replay->GameType = GameSettings.GameType; - replay->RevealMap = GameSettings.RevealMap; - replay->MapRichness = GameSettings.MapRichness; - replay->Opponents = GameSettings.Opponents; + replay->ReplaySettings.Resources = GameSettings.Resources; + replay->ReplaySettings.NumUnits = GameSettings.NumUnits; + replay->ReplaySettings.Difficulty = GameSettings.Difficulty; + replay->ReplaySettings.NoFogOfWar = GameSettings.NoFogOfWar; + replay->ReplaySettings.Inside = GameSettings.Inside; + replay->ReplaySettings.GameType = GameSettings.GameType; + replay->ReplaySettings.RevealMap = GameSettings.RevealMap; + replay->ReplaySettings.MapRichness = GameSettings.MapRichness; + replay->ReplaySettings.Opponents = GameSettings.Opponents; replay->Engine[0] = StratagusMajorVersion; replay->Engine[1] = StratagusMinorVersion; @@ -249,11 +248,11 @@ static void ApplyReplaySettings() } for (int i = 0; i < PlayerMax; ++i) { - GameSettings.Presets[i].PlayerColor = CurrentReplay->Players[i].PlayerColor; - GameSettings.Presets[i].AIScript = CurrentReplay->Players[i].AIScript; - GameSettings.Presets[i].Race = CurrentReplay->Players[i].Race; - GameSettings.Presets[i].Team = CurrentReplay->Players[i].Team; - GameSettings.Presets[i].Type = CurrentReplay->Players[i].Type; + GameSettings.Presets[i].PlayerColor = CurrentReplay->Players[i].Preset.PlayerColor; + GameSettings.Presets[i].AIScript = CurrentReplay->Players[i].Preset.AIScript; + GameSettings.Presets[i].Race = CurrentReplay->Players[i].Preset.Race; + GameSettings.Presets[i].Team = CurrentReplay->Players[i].Preset.Team; + GameSettings.Presets[i].Type = CurrentReplay->Players[i].Preset.Type; } if (strcpy_s(CurrentMapPath, sizeof(CurrentMapPath), CurrentReplay->MapPath.c_str()) != 0) { @@ -261,15 +260,15 @@ static void ApplyReplaySettings() // FIXME: need to handle errors better Exit(1); } - GameSettings.Resources = CurrentReplay->Resource; - GameSettings.NumUnits = CurrentReplay->NumUnits; - GameSettings.Difficulty = CurrentReplay->Difficulty; - Map.NoFogOfWar = GameSettings.NoFogOfWar = CurrentReplay->NoFow; - GameSettings.Inside = CurrentReplay->Inside; - GameSettings.GameType = CurrentReplay->GameType; - FlagRevealMap = GameSettings.RevealMap = CurrentReplay->RevealMap; - GameSettings.MapRichness = CurrentReplay->MapRichness; - GameSettings.Opponents = CurrentReplay->Opponents; + GameSettings.Resources = CurrentReplay->ReplaySettings.Resources; + GameSettings.NumUnits = CurrentReplay->ReplaySettings.NumUnits; + GameSettings.Difficulty = CurrentReplay->ReplaySettings.Difficulty; + Map.NoFogOfWar = GameSettings.NoFogOfWar = CurrentReplay->ReplaySettings.NoFogOfWar; + GameSettings.Inside = CurrentReplay->ReplaySettings.Inside; + GameSettings.GameType = CurrentReplay->ReplaySettings.GameType; + FlagRevealMap = GameSettings.RevealMap = CurrentReplay->ReplaySettings.RevealMap; + GameSettings.MapRichness = CurrentReplay->ReplaySettings.MapRichness; + GameSettings.Opponents = CurrentReplay->ReplaySettings.Opponents; // FIXME : check engine version // FIXME : FIXME: check network version @@ -339,8 +338,8 @@ static void SaveFullLog(CFile &file) file.printf(" MapPath = \"%s\",\n", CurrentReplay->MapPath.c_str()); file.printf(" MapId = %u,\n", CurrentReplay->MapId); file.printf(" Type = %d,\n", CurrentReplay->Type); - file.printf(" Race = %d,\n", CurrentReplay->Race); file.printf(" LocalPlayer = %d,\n", CurrentReplay->LocalPlayer); + file.printf(" Race = %d,\n", CurrentReplay->Players[CurrentReplay->LocalPlayer].Preset.Race); file.printf(" Players = {\n"); for (int i = 0; i < PlayerMax; ++i) { if (!CurrentReplay->Players[i].Name.empty()) { @@ -348,23 +347,23 @@ static void SaveFullLog(CFile &file) } else { file.printf("\t{"); } - file.printf(" AIScript = \"%s\",", CurrentReplay->Players[i].AIScript.c_str()); - file.printf(" PlayerColor = %d,", CurrentReplay->Players[i].PlayerColor); - file.printf(" Race = %d,", CurrentReplay->Players[i].Race); - file.printf(" Team = %d,", CurrentReplay->Players[i].Team); - file.printf(" Type = %d }%s", CurrentReplay->Players[i].Type, + file.printf(" AIScript = \"%s\",", CurrentReplay->Players[i].Preset.AIScript.c_str()); + file.printf(" PlayerColor = %d,", CurrentReplay->Players[i].Preset.PlayerColor); + file.printf(" Race = %d,", CurrentReplay->Players[i].Preset.Race); + file.printf(" Team = %d,", CurrentReplay->Players[i].Preset.Team); + file.printf(" Type = %d }%s", CurrentReplay->Players[i].Preset.Type, i != PlayerMax - 1 ? ",\n" : "\n"); } file.printf(" },\n"); - file.printf(" Resource = %d,\n", CurrentReplay->Resource); - file.printf(" NumUnits = %d,\n", CurrentReplay->NumUnits); - file.printf(" Difficulty = %d,\n", CurrentReplay->Difficulty); - file.printf(" NoFow = %s,\n", CurrentReplay->NoFow ? "true" : "false"); - file.printf(" Inside = %s,\n", CurrentReplay->Inside ? "true" : "false"); - file.printf(" RevealMap = %d,\n", CurrentReplay->RevealMap); - file.printf(" GameType = %d,\n", CurrentReplay->GameType); - file.printf(" Opponents = %d,\n", CurrentReplay->Opponents); - file.printf(" MapRichness = %d,\n", CurrentReplay->MapRichness); + file.printf(" Resource = %d,\n", CurrentReplay->ReplaySettings.Resources); + file.printf(" NumUnits = %d,\n", CurrentReplay->ReplaySettings.NumUnits); + file.printf(" Difficulty = %d,\n", CurrentReplay->ReplaySettings.Difficulty); + file.printf(" NoFow = %s,\n", CurrentReplay->ReplaySettings.NoFogOfWar ? "true" : "false"); + file.printf(" Inside = %s,\n", CurrentReplay->ReplaySettings.Inside ? "true" : "false"); + file.printf(" RevealMap = %d,\n", CurrentReplay->ReplaySettings.RevealMap); + file.printf(" GameType = %d,\n", CurrentReplay->ReplaySettings.GameType); + file.printf(" Opponents = %d,\n", CurrentReplay->ReplaySettings.Opponents); + file.printf(" MapRichness = %d,\n", CurrentReplay->ReplaySettings.MapRichness); file.printf(" Engine = { %d, %d, %d },\n", CurrentReplay->Engine[0], CurrentReplay->Engine[1], CurrentReplay->Engine[2]); file.printf(" Network = { %d, %d, %d }\n", @@ -613,7 +612,7 @@ static int CclReplayLog(lua_State *l) } else if (!strcmp(value, "Type")) { replay->Type = LuaToNumber(l, -1); } else if (!strcmp(value, "Race")) { - replay->Race = LuaToNumber(l, -1); + replay->Players[replay->LocalPlayer].Preset.Race = LuaToNumber(l, -1); } else if (!strcmp(value, "LocalPlayer")) { replay->LocalPlayer = LuaToNumber(l, -1); } else if (!strcmp(value, "Players")) { @@ -634,15 +633,15 @@ static int CclReplayLog(lua_State *l) if (!strcmp(value, "Name")) { replay->Players[j].Name = LuaToString(l, -1); } else if (!strcmp(value, "AIScript")) { - replay->Players[j].AIScript = LuaToString(l, -1); + replay->Players[j].Preset.AIScript = LuaToString(l, -1); } else if (!strcmp(value, "PlayerColor")) { - replay->Players[j].PlayerColor = LuaToNumber(l, -1); + replay->Players[j].Preset.PlayerColor = LuaToNumber(l, -1); } else if (!strcmp(value, "Race")) { - replay->Players[j].Race = LuaToNumber(l, -1); + replay->Players[j].Preset.Race = LuaToNumber(l, -1); } else if (!strcmp(value, "Team")) { - replay->Players[j].Team = LuaToNumber(l, -1); + replay->Players[j].Preset.Team = LuaToNumber(l, -1); } else if (!strcmp(value, "Type")) { - replay->Players[j].Type = LuaToNumber(l, -1); + replay->Players[j].Preset.Type = LuaToNumber(l, -1); } else { LuaError(l, "Unsupported key: %s" _C_ value); } @@ -651,23 +650,23 @@ static int CclReplayLog(lua_State *l) lua_pop(l, 1); } } else if (!strcmp(value, "Resource")) { - replay->Resource = LuaToNumber(l, -1); + replay->ReplaySettings.Resources = LuaToNumber(l, -1); } else if (!strcmp(value, "NumUnits")) { - replay->NumUnits = LuaToNumber(l, -1); + replay->ReplaySettings.NumUnits = LuaToNumber(l, -1); } else if (!strcmp(value, "Difficulty")) { - replay->Difficulty = LuaToNumber(l, -1); + replay->ReplaySettings.Difficulty = LuaToNumber(l, -1); } else if (!strcmp(value, "NoFow")) { - replay->NoFow = LuaToBoolean(l, -1); + replay->ReplaySettings.NoFogOfWar = LuaToBoolean(l, -1); } else if (!strcmp(value, "Inside")) { - replay->Inside = LuaToBoolean(l, -1); + replay->ReplaySettings.Inside = LuaToBoolean(l, -1); } else if (!strcmp(value, "RevealMap")) { - replay->RevealMap = LuaToNumber(l, -1); + replay->ReplaySettings.RevealMap = LuaToNumber(l, -1); } else if (!strcmp(value, "GameType")) { - replay->GameType = LuaToNumber(l, -1); + replay->ReplaySettings.GameType = LuaToNumber(l, -1); } else if (!strcmp(value, "Opponents")) { - replay->Opponents = LuaToNumber(l, -1); + replay->ReplaySettings.Opponents = LuaToNumber(l, -1); } else if (!strcmp(value, "MapRichness")) { - replay->MapRichness = LuaToNumber(l, -1); + replay->ReplaySettings.MapRichness = LuaToNumber(l, -1); } else if (!strcmp(value, "Engine")) { if (!lua_istable(l, -1) || lua_rawlen(l, -1) != 3) { LuaError(l, "incorrect argument");