raze-gles/source/blood/src/network.h
Christoph Oelckers 0036402be8 - removed most of the network code in Blood.
Mainly to expose the parts that still get used in single player because there's some problems here that need addressing.
ENet is also gone now.
2020-08-03 20:06:27 +02:00

157 lines
3.6 KiB
C

//-------------------------------------------------------------------------
/*
Copyright (C) 2010-2019 EDuke32 developers and contributors
Copyright (C) 2019 Nuke.YKT
This file is part of NBlood.
NBlood is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#pragma once
#include "compat.h"
#include "build.h"
#include "controls.h"
BEGIN_BLD_NS
enum PACKETMODE {
PACKETMODE_0 = 0,
PACKETMODE_1,
PACKETMODE_2,
PACKETMODE_3,
};
enum NETWORKMODE {
NETWORK_NONE = 0,
NETWORK_SERVER,
NETWORK_CLIENT
};
#define kNetDefaultPort 23513
extern char packet[576];
extern bool gStartNewGame;
extern PACKETMODE gPacketMode;
extern ClockTicks gNetFifoClock;
extern int gNetFifoTail;
extern int gNetFifoHead[8];
extern int gPredictTail;
extern int gNetFifoMasterTail;
extern GINPUT gFifoInput[256][8];
extern int myMinLag[8];
extern int otherMinLag;
extern int myMaxLag;
extern unsigned int gChecksum[4];
extern unsigned int gCheckFifo[256][8][4];
extern int gCheckHead[8];
extern int gSendCheckTail;
extern int gCheckTail;
extern int gInitialNetPlayers;
extern int gBufferJitter;
extern int gPlayerReady[8];
extern bool bNoResend;
extern bool gRobust;
extern bool bOutOfSync;
extern bool ready2send;
extern NETWORKMODE gNetMode;
extern char gNetAddress[32];
extern int gNetPort;
struct PKT_STARTGAME {
short version;
char gameType, difficulty, monsterSettings, weaponSettings, itemSettings, respawnSettings;
char episodeId, levelId;
int unk;
char userMap, userMapName[13];
int weaponsV10x;
bool bFriendlyFire;
bool bKeepKeysOnRespawn;
};
extern PKT_STARTGAME gPacketStartGame;
inline void PutPacketByte(char *&p, int a2)
{
//dassert(p - packet + 1 < sizeof(packet));
*p++ = a2;
}
inline void PutPacketWord(char *&p, int a2)
{
//dassert(p - packet + 2 < sizeof(packet));
*(short*)p = a2;
p += 2;
}
inline void PutPacketDWord(char *&p, int a2)
{
//dassert(p - packet + 4 < sizeof(packet));
*(int*)p = a2;
p += 4;
}
inline void PutPacketBuffer(char *&p, const void *pBuffer, int size)
{
//dassert(p + size < packet + sizeof(packet));
memcpy(p, pBuffer, size);
p += size;
}
inline char GetPacketByte(char *&p)
{
return *p++;
}
inline short GetPacketWord(char *&p)
{
short t = *(short*)p;
p += 2;
return t;
}
inline int GetPacketDWord(char *&p)
{
int t = *(int*)p;
p += 4;
return t;
}
inline void GetPacketBuffer(char *&p, void *pBuffer, int size)
{
//dassert(p + size < packet + sizeof(packet));
memcpy(pBuffer, p, size);
p += size;
}
void netReset(void);
void netResetToSinglePlayer(void);
void netWaitForEveryone(char a1);
void netGetPackets(void);
void CalcGameChecksum(void);
void netBroadcastPlayerLogoff(int nPlayer);
void netBroadcastMyLogoff(bool bRestart);
void netInitialize(bool bConsole);
void netBroadcastPlayerInfo(int nPlayer);
void netCheckSync(void);
void netMasterUpdate(void);
void netGetInput(void);
void netPlayerQuit(int nPlayer);
void netDeinitialize(void);
void netBroadcastNewGame(void);
END_BLD_NS