Skip to content

Commit

Permalink
Add detection of Tactical-Ops (3.4.0 and 3.5.0, running on UT436 and …
Browse files Browse the repository at this point in the history
…UT469)
  • Loading branch information
LupertEverett authored and dpjudas committed May 3, 2024
1 parent f648685 commit 57a251e
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 3 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ At the time of this writing, SurrealEngine can detect the following UE1 games:
* NERF Arena Blast (v300)
* TNN Outdoors Pro Hunter (v200)
* Rune Classic (v1.10)
* Tactical-Ops: Assault on Terror (v3.4.0 and v3.5.0 - both running under UT436 and UT469 engines)

Clive Barker's Undying (v420) is also in the database, but there is no corresponding SHA1sum for its executable file yet.

Expand Down
17 changes: 17 additions & 0 deletions SurrealEngine/GameFolder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,23 @@ GameLaunchInfo GameFolderSelection::ExamineFolder(const std::string& path)
info.gameVersionString = "1.10";
}
break;
case KnownUE1Games::TACTICAL_OPS_436:
{
info.gameName = "Tactical-Ops: Assault on Terror";
info.engineVersion = 436;
info.engineSubVersion = 0;
info.gameVersionString = "436";
}
break;
case KnownUE1Games::TACTICAL_OPS_469:
{
// exe is identical to UT v469d
info.gameName = "Tactical-Ops: Assault on Terror";
info.engineVersion = 469;
info.engineSubVersion = 3;
info.gameVersionString = "469d";
}
break;
}
}

Expand Down
4 changes: 4 additions & 0 deletions SurrealEngine/UE1GameDatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ std::pair<KnownUE1Games, std::string> FindUE1GameInPath(const std::string& ue1_g
if (it == SHA1Database.end())
return std::make_pair(KnownUE1Games::UE1_GAME_NOT_FOUND, "");

// Hack: Tactical-Ops has a version that contains the exact same UTv469d executable. Handle that here
if (it->second == KnownUE1Games::UT99_469d && executable_name == "TacticalOps.exe")
return std::make_pair(KnownUE1Games::TACTICAL_OPS_469, executable_name);

return std::make_pair(it->second, executable_name);
}
}
Expand Down
16 changes: 13 additions & 3 deletions SurrealEngine/UE1GameDatabase.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ enum class KnownUE1Games
NERF_300,
TNN_200,
RUNE_110,
UNDYING_420
UNDYING_420,
TACTICAL_OPS_436,
TACTICAL_OPS_469,
};

static const std::map<std::string, KnownUE1Games> SHA1Database = {
Expand Down Expand Up @@ -131,7 +133,14 @@ static const std::map<std::string, KnownUE1Games> SHA1Database = {
{"4a517c7f96a27cf7e25534c80d50af8db4065276", KnownUE1Games::RUNE_110},

// TNN Outdoors Pro Hunter
{"f4fbacdaaee360794187c8224f51ea82bd902a43", KnownUE1Games::TNN_200}
{"f4fbacdaaee360794187c8224f51ea82bd902a43", KnownUE1Games::TNN_200},

// Tactical-Ops: Assault On Terror
// v3.4.0 and v3.5.0, running on UT v436 engine
{"3175cee69d3808b70213b171b6e0e635daefaee1", KnownUE1Games::TACTICAL_OPS_436},
// v3.4.0 and v3.5.0, running on UT v469 engine
// Has identical hash to UT v469d executable
// {"78c65e9434b442b15820d863136bb5a44700ad26", KnownUE1Games::TACTICAL_OPS_469},
};

static const std::vector<std::string> knownUE1ExecutableNames = {
Expand All @@ -147,7 +156,8 @@ static const std::vector<std::string> knownUE1ExecutableNames = {
"Nerf.exe",
"Rune.exe",
"Spore.exe",
"TnnHunt.exe"
"TnnHunt.exe",
"TacticalOps.exe"
};

// Returns a pair of UE1-Game type and executable name
Expand Down

0 comments on commit 57a251e

Please sign in to comment.