From 2561fee6091fec2248a102e951cc108f3e2ea4b7 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 14 Oct 2006 12:55:02 +0000 Subject: Display a different message from the normal WAD directory warning if players are mixing Freedoom/Original IWADs. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 698 --- src/net_client.c | 20 ++++++++++++++++++-- src/net_client.h | 4 +++- src/net_gui.c | 30 +++++++++++++++++++++++++++--- src/net_server.c | 13 +++++++++++-- 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/src/net_client.c b/src/net_client.c index bc31740d..39272dd0 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.c 694 2006-10-11 22:55:06Z fraggle $ +// $Id: net_client.c 698 2006-10-14 12:55:02Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -250,6 +250,10 @@ char net_player_names[MAXPLAYERS][MAXPLAYERNAME]; md5_digest_t net_server_wad_md5sum; md5_digest_t net_server_deh_md5sum; +// Is the server a freedoom game? + +unsigned int net_server_is_freedoom; + // Player number int net_player_number; @@ -287,6 +291,10 @@ static unsigned int gamedata_recv_time; md5_digest_t net_local_wad_md5sum; md5_digest_t net_local_deh_md5sum; +// Are we playing with the freedoom IWAD? + +unsigned int net_local_is_freedoom; + // Average time between sending our ticcmd and receiving from the server static fixed_t average_latency; @@ -642,6 +650,7 @@ static void NET_CL_ParseWaitingData(net_packet_t *packet) char *player_names[MAXPLAYERS]; char *player_addr[MAXPLAYERS]; md5_digest_t wad_md5sum, deh_md5sum; + unsigned int server_is_freedoom; size_t i; if (!NET_ReadInt8(packet, &num_players) @@ -683,7 +692,8 @@ static void NET_CL_ParseWaitingData(net_packet_t *packet) } if (!NET_ReadMD5Sum(packet, wad_md5sum) - || !NET_ReadMD5Sum(packet, deh_md5sum)) + || !NET_ReadMD5Sum(packet, deh_md5sum) + || !NET_ReadInt8(packet, &server_is_freedoom)) { return; } @@ -702,6 +712,7 @@ static void NET_CL_ParseWaitingData(net_packet_t *packet) memcpy(net_server_wad_md5sum, wad_md5sum, sizeof(md5_digest_t)); memcpy(net_server_deh_md5sum, deh_md5sum, sizeof(md5_digest_t)); + net_server_is_freedoom = server_is_freedoom; net_client_received_wait_data = true; } @@ -1188,6 +1199,7 @@ static void NET_CL_SendSYN(void) NET_WriteInt8(packet, drone); NET_WriteMD5Sum(packet, net_local_wad_md5sum); NET_WriteMD5Sum(packet, net_local_deh_md5sum); + NET_WriteInt8(packet, net_local_is_freedoom); NET_WriteString(packet, net_player_name); NET_Conn_SendPacket(&client_connection, packet); NET_FreePacket(packet); @@ -1214,6 +1226,10 @@ boolean NET_CL_Connect(net_addr_t *addr) W_Checksum(net_local_wad_md5sum); DEH_Checksum(net_local_deh_md5sum); + // Are we playing with the Freedoom IWAD? + + net_local_is_freedoom = W_CheckNumForName("FREEDOOM") >= 0; + // create a new network I/O context and add just the // necessary module diff --git a/src/net_client.h b/src/net_client.h index abc0f5bd..58488db6 100644 --- a/src/net_client.h +++ b/src/net_client.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.h 689 2006-10-06 17:06:05Z fraggle $ +// $Id: net_client.h 698 2006-10-14 12:55:02Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -97,8 +97,10 @@ extern boolean drone; extern md5_digest_t net_server_wad_md5sum; extern md5_digest_t net_server_deh_md5sum; +extern unsigned int net_server_is_freedoom; extern md5_digest_t net_local_wad_md5sum; extern md5_digest_t net_local_deh_md5sum; +extern unsigned int net_local_is_freedoom; #endif /* #ifndef NET_CLIENT_H */ diff --git a/src/net_gui.c b/src/net_gui.c index aa08c950..7ef9d909 100644 --- a/src/net_gui.c +++ b/src/net_gui.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_gui.c 697 2006-10-14 11:53:08Z fraggle $ +// $Id: net_gui.c 698 2006-10-14 12:55:02Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -192,6 +192,7 @@ static void UpdateGUI(void) static void CheckMD5Sums(void) { boolean correct_wad, correct_deh; + boolean same_freedoom; txt_window_t *window; if (!net_client_received_wait_data || had_warning) @@ -203,8 +204,9 @@ static void CheckMD5Sums(void) sizeof(md5_digest_t)) == 0; correct_deh = memcmp(net_local_deh_md5sum, net_server_deh_md5sum, sizeof(md5_digest_t)) == 0; + same_freedoom = net_server_is_freedoom == net_local_is_freedoom; - if (correct_wad && correct_deh) + if (correct_wad && correct_deh && same_freedoom) { return; } @@ -213,13 +215,35 @@ static void CheckMD5Sums(void) TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, NULL); - if (!correct_wad) + if (!same_freedoom) + { + // If Freedoom and Doom IWADs are mixed, the WAD directory + // will be wrong, but this is not neccessarily a problem. + // Display a different message to the WAD directory message. + + if (net_local_is_freedoom) + { + TXT_AddWidget(window, TXT_NewLabel + ("You are using the Freedoom IWAD to play with players\n" + "using an official Doom IWAD. Make sure that you are\n" + "playing the same levels as other players.\n")); + } + else + { + TXT_AddWidget(window, TXT_NewLabel + ("You are using an official IWAD to play with players\n" + "using the Freedoom IWAD. Make sure that you are\n" + "playing the same levels as other players.\n")); + } + } + else if (!correct_wad) { TXT_AddWidget(window, TXT_NewLabel ("Your WAD directory does not match other players in the game.\n" "Check that you have loaded the exact same WAD files as other\n" "players.\n")); } + if (!correct_deh) { TXT_AddWidget(window, TXT_NewLabel diff --git a/src/net_server.c b/src/net_server.c index ed664a93..9223588c 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_server.c 694 2006-10-11 22:55:06Z fraggle $ +// $Id: net_server.c 698 2006-10-14 12:55:02Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -226,6 +226,10 @@ typedef struct md5_digest_t wad_md5sum; md5_digest_t deh_md5sum; + // Is this client is playing with the Freedoom IWAD? + + unsigned int is_freedoom; + } net_client_t; // structure used for the recv window @@ -560,6 +564,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, unsigned int cl_gamemode, cl_gamemission; unsigned int cl_recording_lowres; unsigned int cl_drone; + unsigned int is_freedoom; md5_digest_t deh_md5sum, wad_md5sum; char *player_name; char *client_version; @@ -601,7 +606,8 @@ static void NET_SV_ParseSYN(net_packet_t *packet, || !NET_ReadInt8(packet, &cl_recording_lowres) || !NET_ReadInt8(packet, &cl_drone) || !NET_ReadMD5Sum(packet, wad_md5sum) - || !NET_ReadMD5Sum(packet, deh_md5sum)) + || !NET_ReadMD5Sum(packet, deh_md5sum) + || !NET_ReadInt8(packet, &is_freedoom)) { return; } @@ -696,6 +702,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, memcpy(client->wad_md5sum, wad_md5sum, sizeof(md5_digest_t)); memcpy(client->deh_md5sum, deh_md5sum, sizeof(md5_digest_t)); + client->is_freedoom = is_freedoom; // Check the connecting client is playing the same game as all // the other clients @@ -1323,11 +1330,13 @@ static void NET_SV_SendWaitingData(net_client_t *client) { NET_WriteMD5Sum(packet, controller->wad_md5sum); NET_WriteMD5Sum(packet, controller->deh_md5sum); + NET_WriteInt8(packet, controller->is_freedoom); } else { NET_WriteMD5Sum(packet, client->wad_md5sum); NET_WriteMD5Sum(packet, client->deh_md5sum); + NET_WriteInt8(packet, client->is_freedoom); } // send packet to client and free -- cgit v1.2.3