shithub: choc

Download patch

ref: 79b77612579be43566fcbac7a153da22b4cd9dd7
parent: 1432f924ba8bce62b212b57909a69fc4fdee8270
author: Simon Howard <fraggle@gmail.com>
date: Sat Jan 7 15:08:11 EST 2006

Send player name and address in the waiting data packets. Display these
on the waiting screen, and improve the waiting screen appearance.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 262

--- a/src/net_client.c
+++ b/src/net_client.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.c 252 2006-01-02 21:50:26Z fraggle $
+// $Id: net_client.c 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.9  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.8  2006/01/02 21:50:26  fraggle
 // Restructure the waiting screen code.  Establish our own separate event
 // loop while waiting for the game to start, to avoid affecting the original
@@ -105,6 +109,11 @@
 
 int net_clients_in_game;
 
+// Nmaes of all players
+
+char net_player_addresses[MAXPLAYERS][MAXPLAYERNAME];
+char net_player_names[MAXPLAYERS][MAXPLAYERNAME];
+
 // Waiting for the game to start?
 
 boolean net_waiting_for_start = false;
@@ -126,6 +135,9 @@
 {
     unsigned int num_players;
     unsigned int is_controller;
+    char *player_names[MAXPLAYERS];
+    char *player_addr[MAXPLAYERS];
+    int i;
 
     if (!NET_ReadInt8(packet, &num_players)
      || !NET_ReadInt8(packet, &is_controller))
@@ -135,8 +147,36 @@
         return;
     }
 
+    if (num_players > MAXPLAYERS)
+    {
+        // Invalid number of players
+
+        return;
+    }
+ 
+    // Read the player names
+
+    for (i=0; i<num_players; ++i)
+    {
+        player_names[i] = NET_ReadString(packet);
+        player_addr[i] = NET_ReadString(packet);
+
+        if (player_names[i] == NULL || player_addr[i] == NULL)
+        {
+            return;
+        }
+    }
+
     net_clients_in_game = num_players;
     net_client_controller = is_controller != 0;
+
+    for (i=0; i<num_players; ++i)
+    {
+        strncpy(net_player_names[i], player_names[i], MAXPLAYERNAME);
+        net_player_names[i][MAXPLAYERNAME-1] = '\0';
+        strncpy(net_player_addresses[i], player_addr[i], MAXPLAYERNAME);
+        net_player_addresses[i][MAXPLAYERNAME-1] = '\0';
+    }
 }
 
 // Received an ACK
--- a/src/net_client.h
+++ b/src/net_client.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.h 252 2006-01-02 21:50:26Z fraggle $
+// $Id: net_client.h 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.7  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.6  2006/01/02 21:50:26  fraggle
 // Restructure the waiting screen code.  Establish our own separate event
 // loop while waiting for the game to start, to avoid affecting the original
@@ -51,9 +55,12 @@
 #ifndef NET_CLIENT_H
 #define NET_CLIENT_H
 
+#include "doomdef.h"
 #include "doomtype.h"
 #include "net_defs.h"
 
+#define MAXPLAYERNAME 30
+
 boolean NET_CL_Connect(net_addr_t *addr);
 void NET_CL_Disconnect(void);
 void NET_CL_Run(void);
@@ -62,6 +69,8 @@
 extern boolean net_client_controller;
 extern int net_clients_in_game;
 extern boolean net_waiting_for_start;
+extern char net_player_names[MAXPLAYERS][MAXPLAYERNAME];
+extern char net_player_addresses[MAXPLAYERS][MAXPLAYERNAME];
 
 #endif /* #ifndef NET_CLIENT_H */
 
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_gui.c 252 2006-01-02 21:50:26Z fraggle $
+// $Id: net_gui.c 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.3  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.2  2006/01/02 21:50:26  fraggle
 // Restructure the waiting screen code.  Establish our own separate event
 // loop while waiting for the game to start, to avoid affecting the original
@@ -52,6 +56,9 @@
 #include "w_wad.h"
 #include "z_zone.h"
 
+static patch_t *player_face;
+static patch_t *player_backdrops[4];
+
 extern void M_WriteText(int x, int y, char *string);
 
 static void Drawer(void)
@@ -59,6 +66,7 @@
     patch_t *backdrop;
     int backdrop_lumpnum;
     char buf[128];
+    int i, y;
 
     // Use INTERPIC or TITLEPIC if we don't have it
 
@@ -75,17 +83,32 @@
     
     V_DrawPatch(0, 0, 0, backdrop);
 
-    sprintf(buf, "%i clients connected to server.", net_clients_in_game);
+    // draw players
 
-    M_WriteText(32, 100, buf);
+    y = 100 - 16 * net_clients_in_game - 24;
+    
+    M_WriteText(32, y, "Players currently waiting:");
 
+    y += 24;
+
+    for (i=0; i<net_clients_in_game; ++i)
+    {
+        V_DrawPatch(32, y, 0, player_backdrops[i]);
+        V_DrawPatch(32, y, 0, player_face);
+        M_WriteText(80, y+12, net_player_names[i]);
+        M_WriteText(200, y+12, net_player_addresses[i]);
+        y += 32;
+    }
+
+    y += 16;
+
     if (net_client_controller)
     {
-        M_WriteText(32, 150, "Press space to start the game...");
+        M_WriteText(32, y, "Press space to start the game...");
     }
     else
     {
-        M_WriteText(32, 150, "Waiting for the game to start...");
+        M_WriteText(32, y, "Waiting for the game to start...");
     }
 }
 
@@ -104,6 +127,20 @@
     }
 }
 
+static void NET_InitGUI(void)
+{
+    char buf[8];
+    int i;
+
+    player_face = W_CacheLumpName("STFST01", PU_STATIC);
+
+    for (i=0 ; i<MAXPLAYERS ; i++)
+    {
+        sprintf(buf, "STPB%d", i);
+        player_backdrops[i] = W_CacheLumpName(buf, PU_STATIC);
+    }
+}
+
 // Displays a graphical screen while waiting for the game to start.
 
 void NET_WaitForStart(void)
@@ -117,6 +154,8 @@
     {
         return;
     }
+
+    NET_InitGUI();
 
     last_tic_time = I_GetTime();
 
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_server.c 251 2006-01-02 21:48:37Z fraggle $
+// $Id: net_server.c 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.11  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.10  2006/01/02 21:48:37  fraggle
 // fix client connected function
 //
@@ -396,7 +400,11 @@
 static void NET_SV_SendWaitingData(net_client_t *client)
 {
     net_packet_t *packet;
+    int num_clients;
+    int i;
 
+    num_clients = NET_SV_NumClients();
+
     // time to send the client another status packet
 
     packet = NET_NewPacket(10);
@@ -404,11 +412,28 @@
 
     // include the number of clients waiting
 
-    NET_WriteInt8(packet, NET_SV_NumClients());
+    NET_WriteInt8(packet, num_clients);
 
     // indicate whether the client is the controller
 
     NET_WriteInt8(packet, NET_SV_Controller() == client);
+
+    // send the address of all players
+
+    for (i=0; i<num_clients; ++i)
+    {
+        char *addr;
+
+        // name
+
+        NET_WriteString(packet, "Player");
+
+        // address
+
+        addr = NET_AddrToString(clients[i].addr);
+
+        NET_WriteString(packet, addr);
+    }
     
     // send packet to client and free