renders: use converted to QBSP format map

Mod_LoadValidateLumps is fully removed.
This commit is contained in:
Denis Pauk 2024-04-17 01:11:23 +03:00
parent 606451cc9c
commit c3af9815e6
8 changed files with 68 additions and 241 deletions

View file

@ -525,10 +525,11 @@ Mod_LoadQFaces(model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
{
int i, lightgridsize = 0, hunkSize;
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -538,48 +539,17 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
header = (dheader_t *)buffer;
/* Can't detect will use provided */
maptype = r_maptype->value;
i = LittleLong(header->ident);
if ((i != IDBSPHEADER) &&
(i != RBSPHEADER) &&
(i != QBSPHEADER))
{
Com_Error(ERR_DROP, "%s: %s has wrong ident (%i should be %i)",
__func__, mod->name, i, IDBSPHEADER);
}
i = LittleLong(header->version);
if ((i != BSPVERSION) &&
(i != BSPSINVERSION) &&
(i != BSPDKMVERSION))
{
Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)",
__func__, mod->name, i, BSPVERSION);
}
/* swap all the lumps */
mod_base = (byte *)header;
for (i = 0; i < sizeof(dheader_t) / 4; i++)
{
((int *)header)[i] = LittleLong(((int *)header)[i]);
}
maptype = Mod_LoadValidateLumps(mod->name, header);
if (maptype == map_quake2)
{
/* Can't detect use provided */
maptype = r_maptype->value;
}
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)header, maptype);
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)mod_base, map_quake2);
// calculate the needed hunksize from the lumps
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, maptype);
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, map_quake2);
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS],
sizeof(dmodel_t), sizeof(model_t), 0);
@ -651,6 +621,9 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*

View file

@ -526,10 +526,11 @@ Mod_LoadQFaces(gl3model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int modfilelen)
Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int filelen)
{
int i, lightgridsize = 0, hunkSize;
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -539,48 +540,17 @@ Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int modfilelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
header = (dheader_t *)buffer;
/* Can't detect will use provided */
maptype = r_maptype->value;
i = LittleLong(header->ident);
if ((i != IDBSPHEADER) &&
(i != RBSPHEADER) &&
(i != QBSPHEADER))
{
Com_Error(ERR_DROP, "%s: %s has wrong ident (%i should be %i)",
__func__, mod->name, i, IDBSPHEADER);
}
i = LittleLong(header->version);
if ((i != BSPVERSION) &&
(i != BSPSINVERSION) &&
(i != BSPDKMVERSION))
{
Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)",
__func__, mod->name, i, BSPVERSION);
}
/* swap all the lumps */
mod_base = (byte *)header;
for (i = 0; i < sizeof(dheader_t) / 4; i++)
{
((int *)header)[i] = LittleLong(((int *)header)[i]);
}
maptype = Mod_LoadValidateLumps(mod->name, header);
if (maptype == map_quake2)
{
/* Can't detect use provided */
maptype = r_maptype->value;
}
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)header, maptype);
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)mod_base, map_quake2);
// calculate the needed hunksize from the lumps
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, maptype);
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, map_quake2);
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS],
sizeof(dmodel_t), sizeof(gl3model_t), 0);
@ -652,6 +622,9 @@ Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int modfilelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*

View file

@ -526,10 +526,11 @@ Mod_LoadQFaces(gl4model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int modfilelen)
Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int filelen)
{
int i, lightgridsize = 0, hunkSize;
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -539,48 +540,17 @@ Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int modfilelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
header = (dheader_t *)buffer;
/* Can't detect will use provided */
maptype = r_maptype->value;
i = LittleLong(header->ident);
if ((i != IDBSPHEADER) &&
(i != RBSPHEADER) &&
(i != QBSPHEADER))
{
Com_Error(ERR_DROP, "%s: %s has wrong ident (%i should be %i)",
__func__, mod->name, i, IDBSPHEADER);
}
i = LittleLong(header->version);
if ((i != BSPVERSION) &&
(i != BSPSINVERSION) &&
(i != BSPDKMVERSION))
{
Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)",
__func__, mod->name, i, BSPVERSION);
}
/* swap all the lumps */
mod_base = (byte *)header;
for (i = 0; i < sizeof(dheader_t) / 4; i++)
{
((int *)header)[i] = LittleLong(((int *)header)[i]);
}
maptype = Mod_LoadValidateLumps(mod->name, header);
if (maptype == map_quake2)
{
/* Can't detect use provided */
maptype = r_maptype->value;
}
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)header, maptype);
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)mod_base, map_quake2);
// calculate the needed hunksize from the lumps
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, maptype);
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, map_quake2);
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS],
sizeof(dmodel_t), sizeof(gl4model_t), 0);
@ -652,6 +622,9 @@ Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int modfilelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*

View file

@ -541,10 +541,11 @@ Mod_LoadQFaces(model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
{
int i, lightgridsize = 0, hunkSize;
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -554,48 +555,17 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
header = (dheader_t *)buffer;
/* Can't detect will use provided */
maptype = r_maptype->value;
i = LittleLong(header->ident);
if ((i != IDBSPHEADER) &&
(i != RBSPHEADER) &&
(i != QBSPHEADER))
{
Com_Error(ERR_DROP, "%s: %s has wrong ident (%i should be %i)",
__func__, mod->name, i, IDBSPHEADER);
}
i = LittleLong(header->version);
if ((i != BSPVERSION) &&
(i != BSPSINVERSION) &&
(i != BSPDKMVERSION))
{
Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)",
__func__, mod->name, i, BSPVERSION);
}
/* swap all the lumps */
mod_base = (byte *)header;
for (i = 0; i < sizeof(dheader_t) / 4; i++)
{
((int *)header)[i] = LittleLong(((int *)header)[i]);
}
maptype = Mod_LoadValidateLumps(mod->name, header);
if (maptype == map_quake2)
{
/* Can't detect use provided */
maptype = r_maptype->value;
}
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)header, maptype);
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)mod_base, map_quake2);
// calculate the needed hunksize from the lumps
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, maptype);
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, map_quake2);
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS],
sizeof(dmodel_t), sizeof(model_t), 0);
@ -663,6 +633,9 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
mod->numframes = 2; /* regular and alternate animation */
R_InitSkyBox(mod);
/* Free QBSP temporary info */
free(mod_base);
}
/*

View file

@ -500,10 +500,11 @@ Mod_LoadQFaces(model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
{
int i, lightgridsize = 0, hunkSize;
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -513,48 +514,17 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
header = (dheader_t *)buffer;
/* Can't detect will use provided */
maptype = r_maptype->value;
i = LittleLong(header->ident);
if ((i != IDBSPHEADER) &&
(i != RBSPHEADER) &&
(i != QBSPHEADER))
{
Com_Error(ERR_DROP, "%s: %s has wrong ident (%i should be %i)",
__func__, mod->name, i, IDBSPHEADER);
}
i = LittleLong(header->version);
if ((i != BSPVERSION) &&
(i != BSPSINVERSION) &&
(i != BSPDKMVERSION))
{
Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)",
__func__, mod->name, i, BSPVERSION);
}
/* swap all the lumps */
mod_base = (byte *)header;
for (i = 0; i < sizeof(dheader_t) / 4; i++)
{
((int *)header)[i] = LittleLong(((int *)header)[i]);
}
maptype = Mod_LoadValidateLumps(mod->name, header);
if (maptype == map_quake2)
{
/* Can't detect use provided */
maptype = r_maptype->value;
}
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)header, maptype);
bspx_header = Mod_LoadBSPX(modfilelen, (byte*)mod_base, map_quake2);
// calculate the needed hunksize from the lumps
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, maptype);
hunkSize = Mod_CalcNonModelLumpHunkSize(mod_base, header, map_quake2);
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS],
sizeof(dmodel_t), sizeof(model_t), 0);
@ -626,6 +596,9 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*

View file

@ -1014,49 +1014,6 @@ Mod_LoadGetRules(const dheader_t *header, const rule_t **rules)
return map_quake2;
}
maptype_t
Mod_LoadValidateLumps(const char *name, const dheader_t *header)
{
const rule_t *rules = NULL;
qboolean error = false;
maptype_t maptype;
maptype = Mod_LoadGetRules(header, &rules);
if (rules)
{
int s;
for (s = 0; s < HEADER_LUMPS; s++)
{
if (rules[s].size)
{
if (header->lumps[s].filelen % rules[s].size)
{
Com_Printf("%s: Map %s lump #%d: incorrect size %d / " YQ2_COM_PRIdS "\n",
__func__, name, s, header->lumps[s].filelen, rules[s].size);
error = true;
}
}
}
}
Com_Printf("Map %s %c%c%c%c with version %d (%s)\n",
name,
(header->ident >> 0) & 0xFF,
(header->ident >> 8) & 0xFF,
(header->ident >> 16) & 0xFF,
(header->ident >> 24) & 0xFF,
header->version, Mod_MaptypeName(maptype));
if (error || !rules)
{
Com_Error(ERR_DROP, "%s: Map %s has incorrect lumps",
__func__, name);
}
return maptype;
}
/*
* Convert Other games flags to Quake 2 surface flags
*/
@ -1102,6 +1059,7 @@ Mod_Load2QBSP(const char *name, byte *inbuf, size_t filesize, size_t *out_len,
int s, xofs, numlumps;
qboolean error = false;
byte *outbuf;
maptype_t detected_maptype;
for (s = 0; s < sizeof(dheader_t) / 4; s++)
{
@ -1110,7 +1068,12 @@ Mod_Load2QBSP(const char *name, byte *inbuf, size_t filesize, size_t *out_len,
result_size = sizeof(dheader_t);
*maptype = Mod_LoadGetRules(&header, &rules);
detected_maptype = Mod_LoadGetRules(&header, &rules);
if (detected_maptype != map_quake2)
{
/* Use detected maptype only if for sure know */
*maptype = detected_maptype;
}
if (rules)
{

View file

@ -1744,7 +1744,7 @@ CM_LoadCachedMap(const char *name, model_t *mod)
{
int filelen, hunkSize = 0;
byte *cmod_base, *filebuf;
maptype_t maptype;
maptype_t maptype = map_quake2;
dheader_t *header;
size_t length;

View file

@ -55,7 +55,6 @@ extern void Mod_LoadVisibility(const char *name, dvis_t **vis, int *numvisibilit
const byte *mod_base, const lump_t *l);
extern void Mod_LoadPlanes(const char *name, cplane_t **planes, int *numplanes,
const byte *mod_base, const lump_t *l);
extern maptype_t Mod_LoadValidateLumps(const char *name, const dheader_t *header);
extern byte *Mod_Load2QBSP(const char *name, byte *in, size_t filesize,
size_t *out_len, maptype_t *maptype);