From 1b4411d96923b16575aeef36c9a4d3c2aea0d64d Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 23 Feb 2006 19:12:02 +0000 Subject: 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. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 378 --- src/d_net.c | 62 +++++++++++++++++++++++++++++++++++------------------- src/doomstat.h | 14 +++++++++++- src/g_game.c | 32 +++++++++++++++++++++++----- src/net_client.c | 23 +++++++++++++++++--- src/net_server.c | 52 +++++++++++++++++++++++++++++++++++++-------- src/net_structrw.c | 13 ++++++++++-- 6 files changed, 154 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/d_net.c b/src/d_net.c index 8e6ec48e..c74c6d03 100644 --- a/src/d_net.c +++ b/src/d_net.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: d_net.c 374 2006-02-19 13:42:27Z fraggle $ +// $Id: d_net.c 378 2006-02-23 19:12:02Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,13 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.18 2006/02/23 19:12:01 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.17 2006/02/19 13:42:27 fraggle // Move tic number expansion code to common code. Parse game data packets // received from the server. @@ -97,7 +104,7 @@ //----------------------------------------------------------------------------- -static const char rcsid[] = "$Id: d_net.c 374 2006-02-19 13:42:27Z fraggle $"; +static const char rcsid[] = "$Id: d_net.c 378 2006-02-23 19:12:02Z fraggle $"; #include "d_main.h" @@ -190,7 +197,7 @@ void NetUpdate (void) // Never go more than a second ahead - if (maketic - gameticdiv > 35) + if (maketic - gameticdiv > 3) break; I_StartTic (); @@ -199,7 +206,7 @@ void NetUpdate (void) //printf ("mk:%i ",maketic); G_BuildTiccmd(&cmd); - if (netgame) + if (netgame && !demoplayback) { NET_CL_SendTiccmd(&cmd, maketic); } @@ -230,6 +237,7 @@ void D_CheckNetGame (void) consoleplayer = 0; netgame = false; ticdup = 1; + lowres_turn = false; for (i=0; i= 20) { diff --git a/src/doomstat.h b/src/doomstat.h index 41925618..969fcd1d 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: doomstat.h 374 2006-02-19 13:42:27Z fraggle $ +// $Id: doomstat.h 378 2006-02-23 19:12:02Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -187,6 +187,11 @@ extern boolean usergame; extern boolean demoplayback; extern boolean demorecording; +// Round angleturn in ticcmds to the nearest 256. This is used when +// recording Vanilla demos in netgames. + +extern boolean lowres_turn; + // Quit after playing a demo from cmdline. extern boolean singledemo; @@ -296,6 +301,13 @@ extern int ticdup; //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.11 2006/02/23 19:12:01 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.10 2006/02/19 13:42:27 fraggle // Move tic number expansion code to common code. Parse game data packets // received from the server. diff --git a/src/g_game.c b/src/g_game.c index 647226ab..e929270f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: g_game.c 374 2006-02-19 13:42:27Z fraggle $ +// $Id: g_game.c 378 2006-02-23 19:12:02Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,13 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.26 2006/02/23 19:12:01 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.25 2006/02/19 13:42:27 fraggle // Move tic number expansion code to common code. Parse game data packets // received from the server. @@ -127,7 +134,7 @@ static const char -rcsid[] = "$Id: g_game.c 374 2006-02-19 13:42:27Z fraggle $"; +rcsid[] = "$Id: g_game.c 378 2006-02-23 19:12:02Z fraggle $"; #include #include @@ -234,6 +241,7 @@ int totalkills, totalitems, totalsecret; // for intermission char demoname[32]; boolean demorecording; boolean longtics; // cph's doom 1.91 longtics hack +boolean lowres_turn; // low resolution turning for longtics boolean demoplayback; boolean netdemo; byte* demobuffer; @@ -563,6 +571,16 @@ void G_BuildTiccmd (ticcmd_t* cmd) sendsave = false; cmd->buttons = BT_SPECIAL | BTS_SAVEGAME | (savegameslot<angleturn = (cmd->angleturn + 128) & 0xff00; + } } @@ -1616,7 +1634,7 @@ void G_ReadDemoTiccmd (ticcmd_t* cmd) } else { - cmd->angleturn = ((unsigned char)*demo_p++)<<8; + cmd->angleturn = ((unsigned char) *demo_p++)<<8; } cmd->buttons = (unsigned char)*demo_p++; @@ -1644,7 +1662,7 @@ void G_WriteDemoTiccmd (ticcmd_t* cmd) } else { - *demo_p++ = (cmd->angleturn+128)>>8; + *demo_p++ = cmd->angleturn >> 8; } *demo_p++ = cmd->buttons; @@ -1693,7 +1711,11 @@ void G_BeginRecording (void) // Check for the longtics parameter, to record hires angle // turns in demos longtics = M_CheckParm("-longtics") != 0; - + + // If not recording a longtics demo, record in low res + + lowres_turn = !longtics; + demo_p = demobuffer; // Save the right version code for this demo diff --git a/src/net_client.c b/src/net_client.c index c8b08fb6..6ac95fd7 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.c 377 2006-02-23 18:20:29Z fraggle $ +// $Id: net_client.c 378 2006-02-23 19:12:02Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,13 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.29 2006/02/23 19:12:01 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.28 2006/02/23 18:20:29 fraggle // Fix bugs in resend code for server->client data // @@ -135,6 +142,7 @@ #include "deh_main.h" #include "g_game.h" #include "i_system.h" +#include "m_argv.h" #include "net_client.h" #include "net_common.h" #include "net_defs.h" @@ -408,7 +416,7 @@ static void NET_CL_SendTics(int start, int end) NET_WriteInt16(packet, sendobj->time); - NET_WriteTiccmdDiff(packet, &sendobj->cmd, false); + NET_WriteTiccmdDiff(packet, &sendobj->cmd, lowres_turn); } // Send the packet @@ -541,6 +549,7 @@ static void NET_CL_ParseGameStart(net_packet_t *packet) startepisode = settings.episode; startmap = settings.map; startskill = settings.skill; + lowres_turn = settings.lowres_turn; memset(recvwindow, 0, sizeof(recvwindow)); recvwindow_start = 0; @@ -676,7 +685,7 @@ static void NET_CL_ParseGameData(net_packet_t *packet) index = seq - recvwindow_start + i; - if (!NET_ReadFullTiccmd(packet, &cmd, false)) + if (!NET_ReadFullTiccmd(packet, &cmd, lowres_turn)) { return; } @@ -896,6 +905,7 @@ static void NET_CL_SendSYN(void) NET_WriteInt32(packet, NET_MAGIC_NUMBER); NET_WriteInt16(packet, gamemode); NET_WriteInt16(packet, gamemission); + NET_WriteInt8(packet, lowres_turn); NET_WriteString(packet, net_player_name); NET_WriteString(packet, PACKAGE_STRING); NET_Conn_SendPacket(&client_connection, packet); @@ -911,6 +921,13 @@ boolean NET_CL_Connect(net_addr_t *addr) server_addr = addr; + // Are we recording a demo? Possibly set lowres turn mode + + if (M_CheckParm("-record") > 0 && M_CheckParm("-longtics") == 0) + { + lowres_turn = true; + } + // create a new network I/O context and add just the // necessary module 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; irecording_lowres) + { + settings.lowres_turn = true; + break; + } + } + + // Send start packets to each connected node for (i=0; imap); NET_WriteInt8(packet, settings->skill); NET_WriteInt8(packet, settings->gameversion); + NET_WriteInt8(packet, settings->lowres_turn); } boolean NET_ReadSettings(net_packet_t *packet, net_gamesettings_t *settings) @@ -80,7 +88,8 @@ boolean NET_ReadSettings(net_packet_t *packet, net_gamesettings_t *settings) && NET_ReadInt8(packet, (unsigned int *) &settings->episode) && NET_ReadInt8(packet, (unsigned int *) &settings->map) && NET_ReadInt8(packet, (unsigned int *) &settings->skill) - && NET_ReadInt8(packet, (unsigned int *) &settings->gameversion); + && NET_ReadInt8(packet, (unsigned int *) &settings->gameversion) + && NET_ReadInt8(packet, (unsigned int *) &settings->lowres_turn); } void NET_WriteTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, -- cgit v1.2.3