mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-22 12:41:21 +00:00
Add support for external entity files (.ent files).
This was ported from KMQ2.
This commit is contained in:
parent
08037e7328
commit
d036868600
3 changed files with 55 additions and 3 deletions
|
@ -1610,16 +1610,60 @@ CMod_LoadVisibility(lump_t *l)
|
|||
}
|
||||
|
||||
void
|
||||
CMod_LoadEntityString(lump_t *l)
|
||||
CMod_LoadEntityString(lump_t *l, char *name)
|
||||
{
|
||||
/*
|
||||
* Port from Knightmare's kmquake2: support for .ent files.
|
||||
*/
|
||||
if (sv_entfile->value)
|
||||
{
|
||||
char s[MAX_QPATH];
|
||||
char *buffer = NULL;
|
||||
int nameLen, bufLen;
|
||||
|
||||
nameLen = strlen(name);
|
||||
strcpy(s, name);
|
||||
s[nameLen-3] = 'e'; s[nameLen-2] = 'n'; s[nameLen-1] = 't';
|
||||
bufLen = FS_LoadFile (s, (void **)&buffer);
|
||||
if (buffer != NULL && bufLen > 1)
|
||||
{
|
||||
if (bufLen + 1 > sizeof(map_entitystring)) /* jit fix */
|
||||
{
|
||||
Com_Printf ("CMod_LoadEntityString: .ent file %s too large: %i > %i.\n", s, bufLen, sizeof(map_entitystring));
|
||||
FS_FreeFile (buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
Com_Printf ("CMod_LoadEntityString: .ent file %s loaded.\n", s);
|
||||
numentitychars = bufLen;
|
||||
memcpy (map_entitystring, buffer, bufLen);
|
||||
map_entitystring[bufLen] = 0; /* jit entity bug - null terminate the entity string! */
|
||||
FS_FreeFile (buffer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* If the .ent file is too small, don't load. */
|
||||
else if (bufLen != -1)
|
||||
{
|
||||
Com_Printf ("CMod_LoadEntityString: .ent file %s too small.\n", s);
|
||||
FS_FreeFile (buffer);
|
||||
}
|
||||
/* Fall back to bsp entity string if no .ent file loaded */
|
||||
}
|
||||
/*
|
||||
* End of the kmquake2 .ent file support port.
|
||||
*/
|
||||
|
||||
numentitychars = l->filelen;
|
||||
|
||||
if (l->filelen > MAX_MAP_ENTSTRING)
|
||||
/* if (l->filelen > MAX_MAP_ENTSTRING) */
|
||||
if (l->filelen + 1 > sizeof(map_entitystring)) /* jit fix */
|
||||
{
|
||||
Com_Error(ERR_DROP, "Map has too large entity lump");
|
||||
}
|
||||
|
||||
memcpy(map_entitystring, cmod_base + l->fileofs, l->filelen);
|
||||
map_entitystring[l->filelen] = 0; /* jit entity bug - null terminate the entity string! */
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1707,7 +1751,8 @@ CM_LoadMap(char *name, qboolean clientload, unsigned *checksum)
|
|||
CMod_LoadAreas(&header.lumps[LUMP_AREAS]);
|
||||
CMod_LoadAreaPortals(&header.lumps[LUMP_AREAPORTALS]);
|
||||
CMod_LoadVisibility(&header.lumps[LUMP_VISIBILITY]);
|
||||
CMod_LoadEntityString(&header.lumps[LUMP_ENTITIES]);
|
||||
/* From kmquake2: adding an extra parameter for .ent support. */
|
||||
CMod_LoadEntityString(&header.lumps[LUMP_ENTITIES], name);
|
||||
|
||||
FS_FreeFile(buf);
|
||||
|
||||
|
|
|
@ -720,6 +720,9 @@ extern cvar_t *dedicated;
|
|||
extern cvar_t *host_speeds;
|
||||
extern cvar_t *log_stats;
|
||||
|
||||
/* Ported from kmquake2: .ent file support - whether to use .ent file or not */
|
||||
extern cvar_t *sv_entfile;
|
||||
|
||||
/* Hack for portable client */
|
||||
extern qboolean is_portable;
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ cvar_t *maxclients; /* rename sv_maxclients */
|
|||
cvar_t *sv_showclamp;
|
||||
cvar_t *hostname;
|
||||
cvar_t *public_server; /* should heartbeats be sent */
|
||||
cvar_t *sv_entfile; /* From kmquake2: whether to use .ent file */
|
||||
|
||||
void Master_Shutdown(void);
|
||||
void SV_ConnectionlessPacket(void);
|
||||
|
@ -609,6 +610,9 @@ SV_Init(void)
|
|||
|
||||
public_server = Cvar_Get("public", "0", 0);
|
||||
|
||||
/* From kmquake2: whether to use .ent file. */
|
||||
sv_entfile = Cvar_Get("sv_entfile", "1", CVAR_ARCHIVE);
|
||||
|
||||
SZ_Init(&net_message, net_message_buffer, sizeof(net_message_buffer));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue