mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-01 21:51:08 +00:00
renders: use converted to QBSP format map
Mod_LoadValidateLumps is fully removed.
This commit is contained in:
parent
606451cc9c
commit
c3af9815e6
8 changed files with 68 additions and 241 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue