shithub: rott

ref: ee35eec9bac04ce55e5fe1ae1eeb5428b47d91a8
dir: /src/rt_net.h/

View raw version
/*
Copyright (C) 1994-1995  Apogee Software, Ltd.
Copyright (C) 2002-2015  icculus.org, GNU/Linux port
Copyright (C) 2017-2018  Steven LeVesque

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

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.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/
//***************************************************************************
//
//   RT_NET.H - Network stuff
//
//***************************************************************************

#ifndef _rt_net_public
#define _rt_net_public

#include "develop.h"
#include "rottnet.h"
#include "rt_actor.h"
#include "rt_battl.h"
#include "rt_playr.h"
#include "rt_main.h"


#define MAXCMDS  256

#define COM_DELTA   1
#define COM_REQUEST 2
#define COM_FIXUP   3
#define COM_TEXT    4
#define COM_PAUSE   5
#define COM_QUIT    6
#define COM_SYNC    7
#define COM_REMRID  8
#define COM_RESPAWN 10
#define COM_UNPAUSE 11
#define COM_SERVER  12
#define COM_START   13
#define COM_GAMEDESC 15
#define COM_GAMEPLAY 16
#define COM_GAMEMASTER 17
#define COM_GAMEACK 18
#define COM_ENDGAME  19
#define COM_SYNCTIME 20
#if (SYNCCHECK==1)
#define COM_SYNCCHECK 21
#endif
#define COM_SOUNDANDDELTA  22
#define COM_EXIT    23
#define COM_GAMEEND 24
#define COM_DELTANULL 25

#define CHECKSYNCTIME  (VBLCOUNTER<<2)

#define NETSYNCSERVERTIME (VBLCOUNTER)
#define MODEMSYNCSERVERTIME (VBLCOUNTER/4)

#define DUMMYPACKETSIZE 20


#define COM_MAXTEXTSTRINGLENGTH 33

// Sound defines for Remote ridicule

#define COM_SOUND_START_TRANSMISSION  (0xff)
#define COM_SOUND_END_TRANSMISSION    (0xfe)
#define COM_SOUND_NORMAL_TRANSMISSION (0xfd)
#define COM_SOUND_BUFFERSIZE 256

// Demo Delta Structure
typedef struct DemoType {
    int   time;
    short momx;
    short momy;
    word  dangle;
    word  buttons;
} DemoType;

// Demo Header Structure
typedef struct DemoHeaderType {
    gametype demostate;
} DemoHeaderType;

// Movement Queue Structure
typedef struct MoveType {
    byte  type;
    int   time;
    short momx;
    short momy;
    word  dangle;
    word  buttons;
    char  Sounddata[];
} MoveType;

typedef struct NullMoveType {
    byte  type;
    int   time;
} NullMoveType;

typedef struct {

    void * Commands[MAXCMDS];

} CommandType;

typedef struct {

    byte CommandStates[MAXCMDS];

} CommandStatusType;

typedef MoveType COM_SoundAndDeltaType;

// uncomment for live remote ridicule
typedef struct {
    byte  type;
    byte  data[COM_SOUND_BUFFERSIZE];
//  char  data[COM_MAXTEXTSTRINGLENGTH];
} COM_SoundType;

typedef struct {
    byte  type;
    int   synctime;
} COM_SyncType;

typedef struct {
    byte  type;
    int   time;
    int   synctime;
    int   x;
    int   y;
    int   z;
    word  angle;
    word  randomindex;
} COM_CheckSyncType;

typedef struct {
    byte  type;
    int   time;
    byte  numpackets;
    byte  data;
} COM_ServerHeaderType;

typedef struct {
    byte  type;
    int   time;
    byte   numpackets;
} COM_RequestType;

typedef struct {
    byte  type;
    int   time;
    byte  towho;
    char  string[COM_MAXTEXTSTRINGLENGTH];
} COM_TextType;

#define MSG_DIRECTED_TO_ALL  255
#define MSG_DIRECTED_TO_TEAM 254

typedef struct {
    byte  type;
    int   time;
    byte  player;
    byte  num;
    byte  towho;
} COM_RemoteRidiculeType;

typedef struct {
    byte  type;
    int   time;
    byte  numpackets;
    byte  data;
} COM_FixupType;

typedef struct {
    byte  type;
    int   time;
} COM_QuitType;

typedef struct {
    byte  type;
    int   time;
} COM_ExitType;

typedef struct {
    byte  type;
    int   time;
} COM_GameEndType;

typedef struct {
    byte  character;    // which character
    byte  uniformcolor; // which color
    char  codename[MAXCODENAMELENGTH];  // codename
} COM_PlayerDescriptionType;

typedef struct {
    byte  type;
    byte  player;    // which player
    byte  violence;
    byte  Product;
    unsigned Version;

    COM_PlayerDescriptionType playerdescription;
} COM_GamePlayerType;

typedef struct {
    byte  type;
    byte  level;
    word  mapcrc;
    byte  violence;
    byte  Product;
    byte  mode;
    unsigned Version;
    boolean teamplay;
    specials SpecialsTimes;
    battle_type options;
    char  battlefilename[20];
    int   randomseed;
    boolean ludicrousgibs;
    COM_PlayerDescriptionType players[MAXPLAYERS];
} COM_GameMasterType;

typedef struct {
    byte  type;
    byte  player; // which player
} COM_GameAckType;

typedef struct {
    byte  type;
    int   time;
} COM_EndGameType;

typedef struct {
    byte  type;
    int   time;
} COM_RespawnType;

typedef struct {
    byte  type;
    int   time;
} COM_PauseType;

typedef struct {
    byte  type;
    int   time;
} COM_UnPauseType;

extern boolean  demorecord,
       demoplayback;
extern byte     *demoptr,
       *lastdemoptr,
       *demobuffer;
extern boolean  demodone;
extern int      predemo_violence;

void     ControlPlayer (void);
void     ControlRemote (objtype * ob);
void     ControlPlayerObj (objtype * ob);
void InitializeGameCommands( void );
void ShutdownGameCommands( void );
void UpdateClientControls ( void );
void StartupClientControls ( void );
void ShutdownClientControls ( void );
void ProcessServer ( void );
void ServerLoop( void );
void SendPlayerDescription( void );
void SetGameDescription( void * pkt );
void SendGameDescription( void );
void SendGameAck( void );
void SendGameStart( void );
void SetupGamePlayer ( void );
void SetupGameMaster ( void );
void SetNormalHorizon (objtype * ob);
void SaveDemo (int demonumber);
void LoadDemo (int demonumber);
void RecordDemo ( void );
void SetupDemo ( void );
void FreeDemo ( void );
boolean DemoExists (int demonumber);

void AddEndGameCommand ( void );
void AddTextMessage ( char * message, int length, int towho );
void AddEndGameCommand ( void );
void AddPauseStateCommand ( int type );
void AddRespawnCommand ( void );
void RecordDemoCmd (void);
void ResetCurrentCommand ( void );
void AddRemoteRidiculeCommand ( int player, int towho, int num );
void ProcessRemoteRidicule ( void * pkt );
void SyncToServer( void );
void AddQuitCommand ( void );
void AddExitCommand ( void );
void AddGameEndCommand ( void );
boolean PlayerInGame ( int p );
boolean ConsoleIsServer ( void );

extern boolean IsServer;
extern boolean standalone;
extern boolean    playerdead;

extern boolean    modemgame;
extern boolean    networkgame;
extern int        numplayers;
extern int        server;

extern boolean    GamePaused;
extern boolean    battlegibs;

extern boolean    remoteridicule;

#if (SYNCCHECK==1)
extern int        lastsynccheck;
extern COM_CheckSyncType PlayerSync[MAXPLAYERS];
void CheckForSyncCheck ( void );
#endif

int GamePacketSize( void );

#endif