1 //-------------------------------------------------------------------------
2 /*
3 Copyright (C) 2010-2019 EDuke32 developers and contributors
4 Copyright (C) 2019 Nuke.YKT
5 
6 This file is part of NBlood.
7 
8 NBlood is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License version 2
10 as published by the Free Software Foundation.
11 
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 
16 See the GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 */
22 //-------------------------------------------------------------------------
23 #pragma once
24 #include "compat.h"
25 #include "build.h"
26 #include "controls.h"
27 
28 enum PACKETMODE {
29     PACKETMODE_0 = 0,
30     PACKETMODE_1,
31     PACKETMODE_2,
32     PACKETMODE_3,
33 };
34 
35 enum NETWORKMODE {
36     NETWORK_NONE = 0,
37     NETWORK_SERVER,
38     NETWORK_CLIENT
39 };
40 
41 #define kNetDefaultPort 23513
42 
43 extern char packet[576];
44 extern bool gStartNewGame;
45 extern PACKETMODE gPacketMode;
46 extern ClockTicks gNetFifoClock;
47 extern int gNetFifoTail;
48 extern int gNetFifoHead[8];
49 extern int gPredictTail;
50 extern int gNetFifoMasterTail;
51 extern GINPUT gFifoInput[256][8];
52 extern int myMinLag[8];
53 extern int otherMinLag;
54 extern int myMaxLag;
55 extern unsigned int gChecksum[4];
56 extern unsigned int gCheckFifo[256][8][4];
57 extern int gCheckHead[8];
58 extern int gSendCheckTail;
59 extern int gCheckTail;
60 extern int gInitialNetPlayers;
61 extern int gBufferJitter;
62 extern int gPlayerReady[8];
63 extern bool bNoResend;
64 extern bool gRobust;
65 extern bool bOutOfSync;
66 extern bool ready2send;
67 extern NETWORKMODE gNetMode;
68 extern char gNetAddress[32];
69 extern int gNetPort;
70 
71 
72 struct PKT_STARTGAME {
73     short version;
74     char gameType, difficulty, monsterSettings, weaponSettings, itemSettings, respawnSettings;
75     char episodeId, levelId;
76     int unk;
77     char userMap, userMapName[BMAX_PATH];
78     int weaponsV10x;
79     bool bFriendlyFire;
80     bool bKeepKeysOnRespawn;
81 };
82 
83 extern PKT_STARTGAME gPacketStartGame;
84 
85 
PutPacketByte(char * & p,int a2)86 inline void PutPacketByte(char *&p, int a2)
87 {
88     //dassert(p - packet + 1 < sizeof(packet));
89     *p++ = a2;
90 }
91 
PutPacketWord(char * & p,int a2)92 inline void PutPacketWord(char *&p, int a2)
93 {
94     //dassert(p - packet + 2 < sizeof(packet));
95     *(short*)p = a2;
96     p += 2;
97 }
98 
PutPacketDWord(char * & p,int a2)99 inline void PutPacketDWord(char *&p, int a2)
100 {
101     //dassert(p - packet + 4 < sizeof(packet));
102     *(int*)p = a2;
103     p += 4;
104 }
105 
PutPacketBuffer(char * & p,const void * pBuffer,int size)106 inline void PutPacketBuffer(char *&p, const void *pBuffer, int size)
107 {
108     //dassert(p + size < packet + sizeof(packet));
109     memcpy(p, pBuffer, size);
110     p += size;
111 }
112 
GetPacketByte(char * & p)113 inline char GetPacketByte(char *&p)
114 {
115     return *p++;
116 }
117 
GetPacketWord(char * & p)118 inline short GetPacketWord(char *&p)
119 {
120     short t = *(short*)p;
121     p += 2;
122     return t;
123 }
124 
GetPacketDWord(char * & p)125 inline int GetPacketDWord(char *&p)
126 {
127     int t = *(int*)p;
128     p += 4;
129     return t;
130 }
131 
GetPacketBuffer(char * & p,void * pBuffer,int size)132 inline void GetPacketBuffer(char *&p, void *pBuffer, int size)
133 {
134     //dassert(p + size < packet + sizeof(packet));
135     memcpy(pBuffer, p, size);
136     p += size;
137 }
138 
139 void sub_79760(void);
140 void netResetToSinglePlayer(void);
141 void netBroadcastMessage(int nPlayer, const char *pzMessage);
142 void netWaitForEveryone(char a1);
143 void sub_7AC28(const char *pzString);
144 void netGetPackets(void);
145 void netBroadcastTaunt(int nPlayer, int nTaunt);
146 void CalcGameChecksum(void);
147 void netBroadcastPlayerLogoff(int nPlayer);
148 void netBroadcastMyLogoff(bool bRestart);
149 void netInitialize(bool bConsole);
150 void netBroadcastPlayerInfo(int nPlayer);
151 void netCheckSync(void);
152 void netMasterUpdate(void);
153 void netGetInput(void);
154 void netPlayerQuit(int nPlayer);
155 void netUpdate(void);
156 void netDeinitialize(void);
157 void netBroadcastNewGame(void);
158