diff options
Diffstat (limited to 'src/net_server.c')
-rw-r--r-- | src/net_server.c | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/src/net_server.c b/src/net_server.c index aedd5f19..8ee33d93 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_server.c 377 2006-02-23 18:20:29Z fraggle $ +// $Id: net_server.c 378 2006-02-23 19:12:02Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,13 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.31 2006/02/23 19:12:02 fraggle +// Add lowres_turn to indicate whether we generate angleturns which are +// 8-bit as opposed to 16-bit. This is used when recording demos without +// -longtics enabled. Sync this option between clients in a netgame, so +// that if one player is recording a Vanilla demo, all clients record +// in lowres. +// // Revision 1.30 2006/02/23 18:20:29 fraggle // Fix bugs in resend code for server->client data // @@ -176,6 +183,10 @@ typedef struct int last_send_time; char *name; + // recording a demo without -longtics + + boolean recording_lowres; + // time query variables int last_time_req_time; @@ -432,6 +443,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, { unsigned int magic; unsigned int cl_gamemode, cl_gamemission; + unsigned int cl_recording_lowres; char *player_name; char *client_version; int i; @@ -453,7 +465,8 @@ static void NET_SV_ParseSYN(net_packet_t *packet, // read the game mode and mission if (!NET_ReadInt16(packet, &cl_gamemode) - || !NET_ReadInt16(packet, &cl_gamemission)) + || !NET_ReadInt16(packet, &cl_gamemission) + || !NET_ReadInt8(packet, &cl_recording_lowres)) { return; } @@ -537,6 +550,10 @@ static void NET_SV_ParseSYN(net_packet_t *packet, return; } + // TODO: Add server option to allow rejecting clients which + // set lowres_turn. This is potentially desirable as the + // presence of such clients affects turning resolution. + // Adopt the game mode and mission of the first connecting client if (num_clients == 0) @@ -557,6 +574,8 @@ static void NET_SV_ParseSYN(net_packet_t *packet, // Activate, initialise connection NET_SV_InitNewClient(client, addr, player_name); + + client->recording_lowres = cl_recording_lowres; } if (client->connection.state == NET_CONN_STATE_WAITING_ACK) @@ -595,14 +614,24 @@ static void NET_SV_ParseGameStart(net_packet_t *packet, net_client_t *client) return; } - // Change server state + // Assign player numbers - server_state = SERVER_IN_GAME; - sv_settings = settings; + NET_SV_AssignPlayers(); - // Send start packets to each connected node + // Check if anyone is recording a demo and set lowres_turn if so. - NET_SV_AssignPlayers(); + settings.lowres_turn = false; + + for (i=0; i<MAXPLAYERS; ++i) + { + if (sv_players[i]->recording_lowres) + { + settings.lowres_turn = true; + break; + } + } + + // Send start packets to each connected node for (i=0; i<MAXPLAYERS; ++i) { @@ -617,6 +646,11 @@ static void NET_SV_ParseGameStart(net_packet_t *packet, net_client_t *client) NET_WriteSettings(startpacket, &settings); } + // Change server state + + server_state = SERVER_IN_GAME; + sv_settings = settings; + memset(recvwindow, 0, sizeof(recvwindow)); recvwindow_start = 0; } @@ -824,7 +858,7 @@ static void NET_SV_ParseGameData(net_packet_t *packet, net_client_t *client) unsigned int time; if (!NET_ReadInt16(packet, &time) - || !NET_ReadTiccmdDiff(packet, &diff, false)) + || !NET_ReadTiccmdDiff(packet, &diff, sv_settings.lowres_turn)) { return; } @@ -923,7 +957,7 @@ static void NET_SV_SendTics(net_client_t *client, int start, int end) // Add command - NET_WriteFullTiccmd(packet, cmd, false); + NET_WriteFullTiccmd(packet, cmd, sv_settings.lowres_turn); } // Send packet |