RingRacers/src/d_netcmd.h
Sally Coolatta 7dfa597c7d SRB2 -> DRRR copyright in src, acs, android folder
Be consistent with toaster's recent changes to copyright
2024-04-05 02:08:23 -04:00

303 lines
8.2 KiB
C

// DR. ROBOTNIK'S RING RACERS
//-----------------------------------------------------------------------------
// Copyright (C) 2024 by Kart Krew.
// Copyright (C) 2020 by Sonic Team Junior.
// Copyright (C) 2000 by DooM Legacy Team.
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
/// \file d_netcmd.h
/// \brief host/client network commands
/// commands are executed through the command buffer
/// like console commands
#ifndef __D_NETCMD__
#define __D_NETCMD__
#include "command.h"
#include "d_player.h"
#ifdef __cplusplus
extern "C" {
#endif
// console vars
extern consvar_t cv_playername[MAXSPLITSCREENPLAYERS];
extern consvar_t cv_playercolor[MAXSPLITSCREENPLAYERS];
extern consvar_t cv_skin[MAXSPLITSCREENPLAYERS];
extern consvar_t cv_follower[MAXSPLITSCREENPLAYERS];
extern consvar_t cv_followercolor[MAXSPLITSCREENPLAYERS];
extern consvar_t cv_lastprofile[MAXSPLITSCREENPLAYERS];
// current profile loaded.
// Used to know how to make the options menu behave among other things.
extern consvar_t cv_currprofile;
// This is used to save the last profile you used on the title screen.
// that way you can mash n all...
extern consvar_t cv_ttlprofilen;
// CVar that allows starting as many splitscreens as you want with one device
// Intended for use with testing
extern consvar_t cv_splitdevice;
// preferred number of players
extern consvar_t cv_splitplayers;
extern consvar_t cv_seenames;
extern consvar_t cv_usemouse;
extern consvar_t cv_joyscale[MAXSPLITSCREENPLAYERS];
extern consvar_t cv_pointlimit;
extern consvar_t cv_timelimit;
extern consvar_t cv_numlaps;
extern UINT32 timelimitintics, extratimeintics, secretextratime;
extern UINT32 g_pointlimit;
extern consvar_t cv_allowexitlevel;
extern consvar_t cv_autobalance;
extern consvar_t cv_teamscramble;
extern consvar_t cv_scrambleonchange;
extern consvar_t cv_netstat;
extern consvar_t cv_countdowntime;
extern consvar_t cv_mute;
extern consvar_t cv_pause;
extern consvar_t cv_restrictskinchange, cv_allowteamchange, cv_maxplayers;
extern consvar_t cv_spectatorreentry, cv_duelspectatorreentry, cv_antigrief;
// SRB2kart items
extern consvar_t cv_items[NUMKARTRESULTS-1];
extern consvar_t cv_kartspeed;
extern consvar_t cv_kartbumpers;
extern consvar_t cv_kartfrantic;
extern consvar_t cv_kartencore;
extern consvar_t cv_kartspeedometer;
extern consvar_t cv_kartvoices;
extern consvar_t cv_karthorns;
extern consvar_t cv_kartbot;
extern consvar_t cv_karteliminatelast;
extern consvar_t cv_thunderdome;
extern consvar_t cv_kartusepwrlv;
#ifdef DEVELOP
extern consvar_t cv_kartencoremap;
#endif
extern consvar_t cv_votetime;
extern consvar_t cv_botscanvote;
extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugdistribution, cv_kartdebughuddrop;
extern consvar_t cv_kartdebugnodes, cv_kartdebugcolorize, cv_kartdebugdirector;
extern consvar_t cv_spbtest, cv_reducevfx, cv_screenshake;
extern consvar_t cv_kartdebugwaypoints, cv_kartdebugbots;
extern consvar_t cv_kartdebugbotwhip;
extern consvar_t cv_kartdebugstart;
extern consvar_t cv_debugrank;
extern consvar_t cv_battletest;
extern consvar_t cv_bighead;
extern consvar_t cv_shittysigns;
extern consvar_t cv_tastelesstaunts;
extern consvar_t cv_4thgear;
typedef enum {
CV_CAPSULETEST_OFF,
CV_CAPSULETEST_MULTIPLAYER,
CV_CAPSULETEST_TIMEATTACK,
} capsuletest_val_t;
extern consvar_t cv_capsuletest;
extern consvar_t cv_itemfinder;
extern consvar_t cv_inttime, cv_advancemap;
extern consvar_t cv_overtime;
// for F_finale.c
extern consvar_t cv_rollingdemos;
extern consvar_t cv_soundtest;
extern consvar_t cv_maxping;
extern consvar_t cv_lagless;
extern consvar_t cv_pingmeasurement;
extern consvar_t cv_showviewpointtext;
extern consvar_t cv_skipmapcheck;
extern consvar_t cv_sleep;
extern consvar_t cv_perfstats;
extern consvar_t cv_schedule;
extern consvar_t cv_livestudioaudience;
extern char timedemo_name[256];
extern boolean timedemo_csv;
extern char timedemo_csv_id[256];
extern boolean timedemo_quit;
typedef enum
{
XD_NAMEANDCOLOR = 1,
XD_WEAPONPREF, // 2
XD_KICK, // 3
XD_NETVAR, // 4
XD_SAY, // 5
XD_MAP, // 6
XD_EXITLEVEL, // 7
XD_ADDFILE, // 8
XD_PAUSE, // 9
XD_ADDPLAYER, // 10
XD_TEAMCHANGE, // 11
XD_CLEARSCORES, // 12
XD_VERIFIED, // 13
XD_RANDOMSEED, // 14
XD_RUNSOC, // 15
XD_REQADDFILE, // 16
XD_SETMOTD, // 17
XD_DEMOTED, // 18
XD_LUACMD, // 19
XD_LUAVAR, // 20
XD_LUAFILE, // 21
// Ring Racers
XD_SETUPVOTE, // 22
XD_MODIFYVOTE, // 23
XD_PICKVOTE, // 24
XD_REMOVEPLAYER,// 25
XD_PARTYINVITE, // 26
XD_ACCEPTPARTYINVITE, // 27
XD_LEAVEPARTY, // 28
XD_CANCELPARTYINVITE, // 29
XD_CHEAT, // 30
XD_ADDBOT, // 31
XD_DISCORD, // 32
XD_PLAYSOUND, // 33
XD_SCHEDULETASK, // 34
XD_SCHEDULECLEAR, // 35
XD_AUTOMATE, // 36
XD_REQMAPQUEUE, // 37
XD_MAPQUEUE, // 38
XD_CALLZVOTE, // 39
XD_SETZVOTE, // 40
MAXNETXCMD
} netxcmd_t;
extern const char *netxcmdnames[MAXNETXCMD - 1];
#if defined(_MSC_VER)
#pragma pack(1)
#endif
#ifdef _MSC_VER
#pragma warning(disable : 4214)
#endif
//Packet composition for Command_TeamChange_f() ServerTeamChange, etc.
//bitwise structs make packing bits a little easier, but byte alignment harder?
//todo: decide whether to make the other netcommands conform, or just get rid of this experiment.
struct changeteam_packet_t {
UINT32 playernum : 5; // value 0 to 31
UINT32 newteam : 5; // value 0 to 31
UINT32 verification : 1; // value 0 to 1
UINT32 autobalance : 1; // value 0 to 1
UINT32 scrambled : 1; // value 0 to 1
} ATTRPACK;
#ifdef _MSC_VER
#pragma warning(default : 4214)
#endif
struct changeteam_value_t {
UINT16 l; // liitle endian
UINT16 b; // big enian
} ATTRPACK;
//Since we do not want other files/modules to know about this data buffer we union it here with a Short Int.
//Other files/modules will hand the INT16 back to us and we will decode it here.
//We don't have to use a union, but we would then send four bytes instead of two.
typedef union {
changeteam_packet_t packet;
changeteam_value_t value;
} ATTRPACK changeteam_union;
#if defined(_MSC_VER)
#pragma pack()
#endif
// add game commands, needs cleanup
void D_RegisterServerCommands(void);
void D_RegisterClientCommands(void);
void CleanupPlayerName(INT32 playernum, const char *newname);
boolean EnsurePlayerNameIsGood(char *name, INT32 playernum);
void WeaponPref_Send(UINT8 ssplayer);
void WeaponPref_Save(UINT8 **cp, INT32 playernum);
size_t WeaponPref_Parse(const UINT8 *p, INT32 playernum);
void D_SendPlayerConfig(UINT8 n);
void Command_ExitGame_f(void);
void Command_Retry_f(void);
boolean G_GamestateUsesExitLevel(void);
void D_GameTypeChanged(INT32 lastgametype); // not a real _OnChange function anymore
void D_MapChange(UINT16 pmapnum, INT32 pgametype, boolean pencoremode, boolean presetplayers, INT32 pdelay, boolean pskipprecutscene, boolean pforcespecialstage);
void D_SetupVote(INT16 newgametype);
void D_ModifyClientVote(UINT8 player, SINT8 voted);
void D_PickVote(void);
void ObjectPlace_OnChange(void);
void P_SetPlayerSpectator(INT32 playernum);
boolean IsPlayerAdmin(INT32 playernum);
void SetAdminPlayer(INT32 playernum);
void ClearAdminPlayers(void);
void RemoveAdminPlayer(INT32 playernum);
void ItemFinder_OnChange(void);
void D_SetPassword(const char *pw);
struct scheduleTask_t
{
UINT16 basetime;
UINT16 timer;
char *command;
};
extern scheduleTask_t **schedule;
extern size_t schedule_size;
extern size_t schedule_len;
void Schedule_Run(void);
void Schedule_Insert(scheduleTask_t *addTask);
void Schedule_Add(INT16 basetime, INT16 timeleft, const char *command);
void Schedule_Clear(void);
typedef enum
{
AEV_ROUNDSTART,
AEV_INTERMISSIONSTART,
AEV_VOTESTART,
AEV_QUEUESTART,
AEV_QUEUEEND,
AEV__MAX
} automateEvents_t;
void Automate_Run(automateEvents_t type);
void Automate_Set(automateEvents_t type, const char *command);
void Automate_Clear(void);
extern UINT32 livestudioaudience_timer;
void LiveStudioAudience(void);
void D_Cheat(INT32 playernum, INT32 cheat, ...);
// used for the player setup menu
boolean CanChangeSkin(INT32 playernum);
#ifdef __cplusplus
} // extern "C"
#endif
#endif