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