mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 17:01:28 +00:00
oldmp wip
# Conflicts: # source/rr/src/net.cpp
This commit is contained in:
parent
fe80b46d54
commit
c3fc897a3e
6 changed files with 1061 additions and 61 deletions
|
@ -7798,6 +7798,10 @@ int app_main(int argc, char const * const * argv)
|
||||||
g_skillCnt = 4;
|
g_skillCnt = 4;
|
||||||
ud.multimode = 1;
|
ud.multimode = 1;
|
||||||
|
|
||||||
|
g_movesPerPacket = 1;
|
||||||
|
bufferjitter = 1;
|
||||||
|
initsynccrc();
|
||||||
|
|
||||||
// This needs to happen before G_CheckCommandLine() because G_GameExit()
|
// This needs to happen before G_CheckCommandLine() because G_GameExit()
|
||||||
// accesses g_player[0].
|
// accesses g_player[0].
|
||||||
G_MaybeAllocPlayer(0);
|
G_MaybeAllocPlayer(0);
|
||||||
|
@ -8427,9 +8431,26 @@ MAIN_LOOP_RESTART:
|
||||||
|
|
||||||
GAME_STATIC GAME_INLINE int32_t G_MoveLoop()
|
GAME_STATIC GAME_INLINE int32_t G_MoveLoop()
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (numplayers > 1)
|
||||||
|
while (predictfifoplc < g_player[myconnectindex].movefifoend) Net_DoPrediction();
|
||||||
|
|
||||||
Net_GetPackets();
|
Net_GetPackets();
|
||||||
|
|
||||||
return G_DoMoveThings();
|
if (numplayers < 2) bufferjitter = 0;
|
||||||
|
while (g_player[myconnectindex].movefifoend-movefifoplc > bufferjitter)
|
||||||
|
{
|
||||||
|
for(TRAVERSE_CONNECT(i))
|
||||||
|
{
|
||||||
|
if (movefifoplc == g_player[i].movefifoend) break;
|
||||||
|
}
|
||||||
|
if (i >= 0) break;
|
||||||
|
if (G_DoMoveThings()) return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int G_DoMoveThings(void)
|
int G_DoMoveThings(void)
|
||||||
|
@ -8508,11 +8529,13 @@ int G_DoMoveThings(void)
|
||||||
// Moved lower so it is restored correctly by diffs:
|
// Moved lower so it is restored correctly by diffs:
|
||||||
// everyothertime++;
|
// everyothertime++;
|
||||||
|
|
||||||
if (g_netClient) // [75] The server should not overwrite its own randomseed
|
//if (g_netClient) // [75] The server should not overwrite its own randomseed
|
||||||
randomseed = ticrandomseed;
|
// randomseed = ticrandomseed;
|
||||||
|
|
||||||
for (bssize_t TRAVERSE_CONNECT(i))
|
for (bssize_t TRAVERSE_CONNECT(i))
|
||||||
Bmemcpy(g_player[i].inputBits, &inputfifo[(g_netServer && myconnectindex == i)][i], sizeof(input_t));
|
Bmemcpy(g_player[i].inputBits, &inputfifo[movefifoplc&(MOVEFIFOSIZ-1)][i], sizeof(input_t));
|
||||||
|
|
||||||
|
movefifoplc++;
|
||||||
|
|
||||||
G_UpdateInterpolations();
|
G_UpdateInterpolations();
|
||||||
|
|
||||||
|
@ -8532,6 +8555,8 @@ int G_DoMoveThings(void)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Net_GetSyncStat();
|
||||||
|
|
||||||
g_moveThingsCount++;
|
g_moveThingsCount++;
|
||||||
|
|
||||||
if (ud.recstat == 1) G_DemoRecord();
|
if (ud.recstat == 1) G_DemoRecord();
|
||||||
|
@ -8574,24 +8599,24 @@ int G_DoMoveThings(void)
|
||||||
if (ud.pause_on == 0)
|
if (ud.pause_on == 0)
|
||||||
G_MoveWorld();
|
G_MoveWorld();
|
||||||
|
|
||||||
// Net_CorrectPrediction();
|
Net_CorrectPrediction();
|
||||||
|
|
||||||
if (g_netServer)
|
//if (g_netServer)
|
||||||
Net_SendServerUpdates();
|
// Net_SendServerUpdates();
|
||||||
|
|
||||||
if ((everyothertime&1) == 0)
|
if ((everyothertime&1) == 0)
|
||||||
{
|
{
|
||||||
G_AnimateWalls();
|
G_AnimateWalls();
|
||||||
A_MoveCyclers();
|
A_MoveCyclers();
|
||||||
|
|
||||||
if (g_netServer && (everyothertime % 10) == 0)
|
//if (g_netServer && (everyothertime % 10) == 0)
|
||||||
{
|
//{
|
||||||
Net_SendMapUpdate();
|
// Net_SendMapUpdate();
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_netClient) //Slave
|
//if (g_netClient) //Slave
|
||||||
Net_SendClientUpdate();
|
// Net_SendClientUpdate();
|
||||||
|
|
||||||
if (RR && ud.recstat == 0 && ud.multimode < 2 && g_torchCnt)
|
if (RR && ud.recstat == 0 && ud.multimode < 2 && g_torchCnt)
|
||||||
G_DoTorch();
|
G_DoTorch();
|
||||||
|
|
|
@ -84,7 +84,8 @@ G_EXTERN char pus,pub;
|
||||||
G_EXTERN char ready2send;
|
G_EXTERN char ready2send;
|
||||||
#define MAXPLAYERNAME 32
|
#define MAXPLAYERNAME 32
|
||||||
G_EXTERN char szPlayerName[MAXPLAYERNAME];
|
G_EXTERN char szPlayerName[MAXPLAYERNAME];
|
||||||
G_EXTERN char tempbuf[MAXSECTORS<<1],packbuf[PACKBUF_SIZE],buf[1024];
|
G_EXTERN char tempbuf[MAXSECTORS<<1],buf[1024];
|
||||||
|
G_EXTERN uint8_t packbuf[PACKBUF_SIZE];
|
||||||
#define TYPEBUFSIZE 141
|
#define TYPEBUFSIZE 141
|
||||||
G_EXTERN char typebuf[TYPEBUFSIZE];
|
G_EXTERN char typebuf[TYPEBUFSIZE];
|
||||||
|
|
||||||
|
@ -92,6 +93,28 @@ G_EXTERN char typebuf[TYPEBUFSIZE];
|
||||||
G_EXTERN input_t localInput;
|
G_EXTERN input_t localInput;
|
||||||
G_EXTERN input_t recsync[RECSYNCBUFSIZ];
|
G_EXTERN input_t recsync[RECSYNCBUFSIZ];
|
||||||
|
|
||||||
|
//G_EXTERN uint8_t syncstat, syncval[MAXPLAYERS][MOVEFIFOSIZ];
|
||||||
|
//G_EXTERN int32_t syncvalhead[MAXPLAYERS], syncvaltail, syncvaltottail;
|
||||||
|
|
||||||
|
G_EXTERN int32_t avgfvel, avgsvel, avgbits;
|
||||||
|
G_EXTERN fix16_t avgavel, avghorz;
|
||||||
|
G_EXTERN int8_t avgextbits;
|
||||||
|
|
||||||
|
G_EXTERN int32_t movefifosendplc;
|
||||||
|
G_EXTERN int32_t movefifoplc;
|
||||||
|
|
||||||
|
G_EXTERN int32_t predictfifoplc;
|
||||||
|
G_EXTERN vec3_t mypos, omypos, myvel;
|
||||||
|
G_EXTERN fix16_t myhoriz, omyhoriz, myhorizoff, omyhorizoff, myang, omyang;
|
||||||
|
G_EXTERN int16_t mycursectnum, myjumpingcounter;
|
||||||
|
G_EXTERN uint8_t myjumpingtoggle, myonground, myhardlanding, myreturntocenter;
|
||||||
|
|
||||||
|
G_EXTERN vec3_t myposbak[MOVEFIFOSIZ];
|
||||||
|
G_EXTERN fix16_t myhorizbak[MOVEFIFOSIZ], myangbak[MOVEFIFOSIZ];
|
||||||
|
G_EXTERN int32_t myminlag[MAXPLAYERS], mymaxlag, otherminlag, bufferjitter;
|
||||||
|
|
||||||
|
G_EXTERN int32_t g_networkBroadcastMode, g_movesPerPacket;
|
||||||
|
|
||||||
G_EXTERN int32_t g_animWallCnt;
|
G_EXTERN int32_t g_animWallCnt;
|
||||||
G_EXTERN int32_t g_animateCnt;
|
G_EXTERN int32_t g_animateCnt;
|
||||||
G_EXTERN int32_t g_cloudCnt;
|
G_EXTERN int32_t g_cloudCnt;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -65,6 +65,38 @@ enum netchan_t
|
||||||
|
|
||||||
enum DukePacket_t
|
enum DukePacket_t
|
||||||
{
|
{
|
||||||
|
PACKET_TYPE_MASTER_TO_SLAVE,
|
||||||
|
PACKET_TYPE_SLAVE_TO_MASTER,
|
||||||
|
PACKET_TYPE_BROADCAST,
|
||||||
|
SERVER_GENERATED_BROADCAST,
|
||||||
|
PACKET_TYPE_VERSION,
|
||||||
|
|
||||||
|
/* don't change anything above this line */
|
||||||
|
|
||||||
|
PACKET_TYPE_MESSAGE,
|
||||||
|
|
||||||
|
PACKET_TYPE_NEW_GAME,
|
||||||
|
PACKET_TYPE_RTS,
|
||||||
|
PACKET_TYPE_MENU_LEVEL_QUIT,
|
||||||
|
PACKET_TYPE_WEAPON_CHOICE,
|
||||||
|
PACKET_TYPE_PLAYER_OPTIONS,
|
||||||
|
PACKET_TYPE_PLAYER_NAME,
|
||||||
|
PACKET_TYPE_INIT_SETTINGS,
|
||||||
|
|
||||||
|
PACKET_TYPE_USER_MAP,
|
||||||
|
|
||||||
|
PACKET_TYPE_MAP_VOTE,
|
||||||
|
PACKET_TYPE_MAP_VOTE_INITIATE,
|
||||||
|
PACKET_TYPE_MAP_VOTE_CANCEL,
|
||||||
|
|
||||||
|
PACKET_TYPE_LOAD_GAME,
|
||||||
|
PACKET_TYPE_NULL_PACKET,
|
||||||
|
PACKET_TYPE_PLAYER_READY,
|
||||||
|
PACKET_TYPE_FRAGLIMIT_CHANGED,
|
||||||
|
PACKET_TYPE_EOL,
|
||||||
|
PACKET_TYPE_QUIT = 255, // should match mmulti I think
|
||||||
|
|
||||||
|
|
||||||
PACKET_MASTER_TO_SLAVE,
|
PACKET_MASTER_TO_SLAVE,
|
||||||
PACKET_SLAVE_TO_MASTER,
|
PACKET_SLAVE_TO_MASTER,
|
||||||
|
|
||||||
|
@ -116,6 +148,23 @@ enum netmode_t
|
||||||
NET_DEDICATED_SERVER
|
NET_DEDICATED_SERVER
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MAXSYNCBYTES 16
|
||||||
|
#define SYNCFIFOSIZ 1024
|
||||||
|
|
||||||
|
// TENSW: on really bad network connections, the sync FIFO queue can overflow if it is the
|
||||||
|
// same size as the move fifo.
|
||||||
|
#if MOVEFIFOSIZ >= SYNCFIFOSIZ
|
||||||
|
#error "MOVEFIFOSIZ is greater than or equal to SYNCFIFOSIZ!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern char syncstat[MAXSYNCBYTES];
|
||||||
|
extern char g_szfirstSyncMsg[MAXSYNCBYTES][60];
|
||||||
|
|
||||||
|
extern int g_numSyncBytes;
|
||||||
|
extern int g_foundSyncError;
|
||||||
|
extern int syncvaltail, syncvaltottail;
|
||||||
|
|
||||||
|
|
||||||
#define NETMAXACTORS 1024
|
#define NETMAXACTORS 1024
|
||||||
|
|
||||||
#pragma pack(push,1)
|
#pragma pack(push,1)
|
||||||
|
@ -181,6 +230,20 @@ extern newgame_t pendingnewgame;
|
||||||
|
|
||||||
#ifndef NETCODE_DISABLE
|
#ifndef NETCODE_DISABLE
|
||||||
|
|
||||||
|
// Sync
|
||||||
|
void initsynccrc(void);
|
||||||
|
char Net_PlayerSync(void);
|
||||||
|
char Net_PlayerSync2(void);
|
||||||
|
char Net_ActorSync(void);
|
||||||
|
char Net_WeaponSync(void);
|
||||||
|
char Net_MapSync(void);
|
||||||
|
char Net_RandomSync(void);
|
||||||
|
void Net_GetSyncStat(void);
|
||||||
|
void Net_DisplaySyncMsg(void);
|
||||||
|
void Net_AddSyncInfoToPacket(int* j);
|
||||||
|
void Net_GetSyncInfoFromPacket(char* packbuf, int packbufleng, int* j, int otherconnectindex);
|
||||||
|
|
||||||
|
|
||||||
// Connect/Disconnect
|
// Connect/Disconnect
|
||||||
void Net_Connect(const char *srvaddr);
|
void Net_Connect(const char *srvaddr);
|
||||||
void Net_Disconnect(void);
|
void Net_Disconnect(void);
|
||||||
|
@ -190,6 +253,7 @@ void Net_ReceiveDisconnect(ENetEvent *event);
|
||||||
#endif
|
#endif
|
||||||
void Net_GetPackets(void);
|
void Net_GetPackets(void);
|
||||||
#ifndef NETCODE_DISABLE
|
#ifndef NETCODE_DISABLE
|
||||||
|
void Net_SendPacket(int32_t dest, uint8_t* pbuf, int32_t packbufleng);
|
||||||
void Net_HandleServerPackets(void);
|
void Net_HandleServerPackets(void);
|
||||||
void Net_HandleClientPackets(void);
|
void Net_HandleClientPackets(void);
|
||||||
void Net_ParseClientPacket(ENetEvent *event);
|
void Net_ParseClientPacket(ENetEvent *event);
|
||||||
|
@ -264,9 +328,12 @@ void Net_ReceiveMapVoteCancel(uint8_t *pbuf);
|
||||||
//////////
|
//////////
|
||||||
|
|
||||||
void Net_ResetPrediction(void);
|
void Net_ResetPrediction(void);
|
||||||
|
void Net_DoPrediction(void);
|
||||||
|
void Net_CorrectPrediction(void);
|
||||||
void Net_SpawnPlayer(int32_t player);
|
void Net_SpawnPlayer(int32_t player);
|
||||||
void Net_SyncPlayer(ENetEvent *event);
|
void Net_SyncPlayer(ENetEvent *event);
|
||||||
void Net_WaitForServer(void);
|
void Net_WaitForEverybody(void);
|
||||||
|
void Net_Update(void);
|
||||||
void faketimerhandler(void);
|
void faketimerhandler(void);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -341,6 +408,8 @@ void faketimerhandler(void);
|
||||||
//////////
|
//////////
|
||||||
|
|
||||||
#define Net_ResetPrediction(...) ((void)0)
|
#define Net_ResetPrediction(...) ((void)0)
|
||||||
|
#define Net_DoPrediction(...) ((void)0)
|
||||||
|
#define Net_CorrectPrediction(...) ((void)0)
|
||||||
#define Net_RestoreMapState(...) ((void)0)
|
#define Net_RestoreMapState(...) ((void)0)
|
||||||
#define Net_SyncPlayer(...) ((void)0)
|
#define Net_SyncPlayer(...) ((void)0)
|
||||||
#define Net_WaitForServer(...) ((void)0)
|
#define Net_WaitForServer(...) ((void)0)
|
||||||
|
|
|
@ -212,15 +212,14 @@ typedef struct {
|
||||||
DukePlayer_t *ps;
|
DukePlayer_t *ps;
|
||||||
input_t *inputBits;
|
input_t *inputBits;
|
||||||
|
|
||||||
int32_t netsynctime;
|
int32_t movefifoend, syncvalhead, myminlag;
|
||||||
int16_t ping, filler;
|
|
||||||
int32_t pcolor, pteam;
|
int32_t pcolor, pteam;
|
||||||
// NOTE: wchoice[HANDREMOTE_WEAPON .. MAX_WEAPONS-1] unused
|
// NOTE: wchoice[HANDREMOTE_WEAPON .. MAX_WEAPONS-1] unused
|
||||||
uint8_t frags[MAXPLAYERS], wchoice[MAX_WEAPONS];
|
uint8_t frags[MAXPLAYERS], wchoice[MAX_WEAPONS];
|
||||||
|
|
||||||
char vote, gotvote, pingcnt, playerquitflag, ready;
|
char vote, gotvote, playerreadyflag, playerquitflag, connected;
|
||||||
char user_name[32];
|
char user_name[32];
|
||||||
uint32_t revision;
|
char syncval[MAXPLAYERS][MOVEFIFOSIZ];
|
||||||
} playerdata_t;
|
} playerdata_t;
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
|
|
@ -1316,6 +1316,8 @@ void G_DisplayRest(int32_t smoothratio)
|
||||||
if (g_Debug)
|
if (g_Debug)
|
||||||
G_ShowCacheLocks();
|
G_ShowCacheLocks();
|
||||||
|
|
||||||
|
Net_DisplaySyncMsg();
|
||||||
|
|
||||||
#ifndef EDUKE32_TOUCH_DEVICES
|
#ifndef EDUKE32_TOUCH_DEVICES
|
||||||
if (VOLUMEONE)
|
if (VOLUMEONE)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue