Description
Currently players in Network room cannot see whether or not other players are match compatible. If not all clients are compatible, then runtime mismatch can occur.
We need a feature to block game from starting when at least one peer client is not compatible with host client. Perhaps incompatible peers should be unable to join game room. On the other hand perhaps it is ok if all players can join any game room, and just show incompatible Icon/Hash/Version next to player name. This way players can still chat and communicate organizational matters at their own discretion. Originally, incompatible players are blocked from match entry in GameSpy Lobby, but not in Network lobby.
Technically, game needs to generate game hash from all relevant files - Code and Data. Game hash is expected to be identical across all clients using the same kind of game version install. (Caution: Different executable for different Operating System). Using a different Mod or critically modified INI, W3D will change hash. Hash can then be compared with peers.
Hash itself is not easily human readable. Generally, single hash can only be associated with local game version. To recognize peer hashes as game version names, we need database of hash to names relations. This perhaps needs Patch Loader support. Patch Loader can provide list of known mods to game process (Thyme). And game client can then recognize different remote hashes with that list. Or remote clients send sufficient metadata alongside client hash, then Patch Loader integration is not required.
GenTool: Implement game hash in Network Player Table to allow players to see whether or not other players are compatible for a given match session. If players's game hashes are not matching, then match session eventually will mismatch after match start sooner or later.
We need GenTool player table for network room and encode information about game hash. Then in turn we can read the game hash of other GenTool players and present it to user. For that we need to copy the String class implementation and everything related to that from Thyme to GenTool, because it would be a definite requirement to be able to allocate Game Strings.
The result should be ok enough to at least be able to see whether or not all players are compatible before pressing the START GAME button - IF these players use GenTool. So Game Host could kick all non compatible players which is very suitable for a Network like Hamachi or Radmin. In case of GameRanger, players would need to quit the game and wait for new players to join, which would be a bit more hassle, but there is nothing else we can do. Other mods would benefit from this implementation too in turn if kept generic.