diff --git a/common/bspfile.h b/common/bspfile.h index 2a710cb9..a6fd1bdc 100644 --- a/common/bspfile.h +++ b/common/bspfile.h @@ -32,6 +32,7 @@ BRUSH MODELS #define IDEXTRAHEADER (('H'<<24)+('S'<<16)+('A'<<8)+'X') // little-endian "XASH" #define EXTRA_VERSION 2 // because version 1 was occupied by old versions of XashXT +#define EXTRA_VERSION_3 3 // same as version 2 but with old lightmap resolution (1 luxel per 16 pixels) #define DELUXEMAP_VERSION 1 #define IDDELUXEMAPHEADER (('T'<<24)+('I'<<16)+('L'<<8)+'Q') // little-endian "QLIT" diff --git a/engine/common/model.c b/engine/common/model.c index 8b84ea10..82329113 100644 --- a/engine/common/model.c +++ b/engine/common/model.c @@ -2665,17 +2665,23 @@ Mod_LoadBrushModel */ static void Mod_LoadBrushModel( model_t *mod, const void *buffer, qboolean *loaded ) { - int i, j; - int sample_size; - char *ents; - dheader_t *header; - dmodel_t *bm; + int i, j; + int sample_size; + char *ents; + dheader_t *header; + dextrahdr_t *extrahdr; + dmodel_t *bm; if( loaded ) *loaded = false; header = (dheader_t *)buffer; loadmodel->type = mod_brush; i = header->version; + // BSP31 and BSP30 have different offsets + if( i == XTBSP_VERSION ) + extrahdr = (dextrahdr_t *)((byte *)buffer + sizeof( dheader31_t )); + else extrahdr = (dextrahdr_t *)((byte *)buffer + sizeof( dheader_t )); + switch( i ) { case 28: // get support for quake1 beta @@ -2687,7 +2693,9 @@ static void Mod_LoadBrushModel( model_t *mod, const void *buffer, qboolean *load sample_size = 16; break; case XTBSP_VERSION: - sample_size = 8; + if( extrahdr->id == IDEXTRAHEADER && extrahdr->version == EXTRA_VERSION_3 ) + sample_size = 16; + else sample_size = 8; break; default: MsgDev( D_ERROR, "%s has wrong version number (%i should be %i)", loadmodel->name, i, HLBSP_VERSION );