server: support of load original game library

This commit is contained in:
Denis Pauk 2024-03-24 12:32:30 +02:00
parent 32047010a2
commit f7dc2777c5
6 changed files with 35 additions and 24 deletions

View file

@ -169,16 +169,6 @@ typedef unsigned char byte;
#define PRINTF_ATTR(FMT, VARGS) __attribute__((format(printf, FMT , VARGS )))
#endif
/* per-level limits Quake 2 Protocol version 26 */
#define MAX_CLIENTS_Q2DEMO 256 /* absolute limit */
#define MAX_EDICTS_Q2DEMO 1024 /* must change protocol to increase more */
#define MAX_LIGHTSTYLES_Q2DEMO 256
#define MAX_MODELS_Q2DEMO 256 /* these are sent over the net as bytes */
#define MAX_SOUNDS_Q2DEMO 256 /* so they cannot be blindly increased */
#define MAX_IMAGES_Q2DEMO 256
#define MAX_ITEMS_Q2DEMO 256
#define MAX_GENERAL_Q2DEMO (MAX_CLIENTS_Q2DEMO * 2) /* general config strings */
/* per-level limits */
#define MAX_CLIENTS 256 /* absolute limit */
#define MAX_EDICTS 1024 /* must change protocol to increase more */
@ -1164,16 +1154,6 @@ typedef enum
#define CS_MAXCLIENTS 30
#define CS_MAPCHECKSUM 31 /* for catching cheater maps */
/* CS structure Quake 2 Protocol version 26 */
#define CS_MODELS_Q2DEMO 32
#define CS_SOUNDS_Q2DEMO (CS_MODELS_Q2DEMO + MAX_MODELS_Q2DEMO)
#define CS_IMAGES_Q2DEMO (CS_SOUNDS_Q2DEMO + MAX_SOUNDS_Q2DEMO)
#define CS_LIGHTS_Q2DEMO (CS_IMAGES_Q2DEMO + MAX_IMAGES_Q2DEMO)
#define CS_ITEMS_Q2DEMO (CS_LIGHTS_Q2DEMO + MAX_LIGHTSTYLES_Q2DEMO)
#define CS_PLAYERSKINS_Q2DEMO (CS_ITEMS_Q2DEMO + MAX_ITEMS_Q2DEMO)
#define CS_GENERAL_Q2DEMO (CS_PLAYERSKINS_Q2DEMO + MAX_CLIENTS_Q2DEMO)
#define MAX_CONFIGSTRINGS_Q2DEMO (CS_GENERAL_Q2DEMO + MAX_GENERAL_Q2DEMO)
#define CS_MODELS 32
#define CS_SOUNDS (CS_MODELS + MAX_MODELS)
#define CS_IMAGES (CS_SOUNDS + MAX_SOUNDS)

View file

@ -27,6 +27,26 @@
#include "header/shared.h"
#include "header/common.h"
/* per-level limits Quake 2 Protocol version 26 */
#define MAX_CLIENTS_Q2DEMO 256 /* absolute limit */
#define MAX_EDICTS_Q2DEMO 1024 /* must change protocol to increase more */
#define MAX_LIGHTSTYLES_Q2DEMO 256
#define MAX_MODELS_Q2DEMO 256 /* these are sent over the net as bytes */
#define MAX_SOUNDS_Q2DEMO 256 /* so they cannot be blindly increased */
#define MAX_IMAGES_Q2DEMO 256
#define MAX_ITEMS_Q2DEMO 256
#define MAX_GENERAL_Q2DEMO (MAX_CLIENTS_Q2DEMO * 2) /* general config strings */
/* CS structure Quake 2 Protocol version 26 */
#define CS_MODELS_Q2DEMO 32
#define CS_SOUNDS_Q2DEMO (CS_MODELS_Q2DEMO + MAX_MODELS_Q2DEMO)
#define CS_IMAGES_Q2DEMO (CS_SOUNDS_Q2DEMO + MAX_SOUNDS_Q2DEMO)
#define CS_LIGHTS_Q2DEMO (CS_IMAGES_Q2DEMO + MAX_IMAGES_Q2DEMO)
#define CS_ITEMS_Q2DEMO (CS_LIGHTS_Q2DEMO + MAX_LIGHTSTYLES_Q2DEMO)
#define CS_PLAYERSKINS_Q2DEMO (CS_ITEMS_Q2DEMO + MAX_ITEMS_Q2DEMO)
#define CS_GENERAL_Q2DEMO (CS_PLAYERSKINS_Q2DEMO + MAX_CLIENTS_Q2DEMO)
#define MAX_CONFIGSTRINGS_Q2DEMO (CS_GENERAL_Q2DEMO + MAX_GENERAL_Q2DEMO)
/* Convert from current protocol to internal */
int
P_ConvertConfigStringFrom(int i, int protocol)

View file

@ -35,6 +35,7 @@
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
#define GAME_API_R97_VERSION 3
#define GAME_API_VERSION 4
/* edict->svflags */

View file

@ -458,7 +458,8 @@ SV_InitGameProgs(void)
Com_Error(ERR_DROP, "failed to load game DLL");
}
if (ge->apiversion != GAME_API_VERSION)
if (ge->apiversion != GAME_API_VERSION &&
ge->apiversion != GAME_API_R97_VERSION)
{
Com_Error(ERR_DROP, "game is version %i, not %i", ge->apiversion,
GAME_API_VERSION);

View file

@ -75,9 +75,18 @@ SV_New_f(void)
gamedir = (char *)Cvar_VariableString("gamedir");
/* send the serverdata */
if (ge->apiversion == GAME_API_R97_VERSION)
{
/* backward compatibility */
sv_client->protocol = PROTOCOL_RR97_VERSION;
}
else
{
sv_client->protocol = PROTOCOL_VERSION;
}
MSG_WriteByte(&sv_client->netchan.message, svc_serverdata);
MSG_WriteLong(&sv_client->netchan.message, PROTOCOL_VERSION);
MSG_WriteLong(&sv_client->netchan.message, sv_client->protocol);
MSG_WriteLong(&sv_client->netchan.message, svs.spawncount);
MSG_WriteByte(&sv_client->netchan.message, sv.attractloop);
MSG_WriteString(&sv_client->netchan.message, gamedir);