332 lines
6.8 KiB
C
Executable File
332 lines
6.8 KiB
C
Executable File
/*
|
|
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
|
|
|
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.
|
|
|
|
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
//***************************************************************************
|
|
//
|
|
// 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[0];
|
|
} 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
|