ref: support loading sprites with truncated palette
This commit is contained in:
parent
9f322df498
commit
4f2249ed8e
2 changed files with 22 additions and 20 deletions
|
@ -164,7 +164,7 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, ui
|
||||||
if( pin->version == SPRITE_VERSION_Q1 || pin->version == SPRITE_VERSION_32 )
|
if( pin->version == SPRITE_VERSION_Q1 || pin->version == SPRITE_VERSION_32 )
|
||||||
numi = NULL;
|
numi = NULL;
|
||||||
else if( pin->version == SPRITE_VERSION_HL )
|
else if( pin->version == SPRITE_VERSION_HL )
|
||||||
numi = (const short *)((const byte*)buffer + sizeof( dsprite_hl_t ));
|
numi = (const short *)((const byte *)buffer + sizeof( dsprite_hl_t ));
|
||||||
|
|
||||||
r_texFlags = texFlags;
|
r_texFlags = texFlags;
|
||||||
sprite_version = pin->version;
|
sprite_version = pin->version;
|
||||||
|
@ -179,31 +179,32 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, ui
|
||||||
pframetype = ((const byte*)buffer + sizeof( dsprite_q1_t )); // pinq1 + 1
|
pframetype = ((const byte*)buffer + sizeof( dsprite_q1_t )); // pinq1 + 1
|
||||||
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
||||||
}
|
}
|
||||||
else if( *numi == 256 )
|
else if( *numi <= 256 )
|
||||||
{
|
{
|
||||||
const byte *src = (const byte *)(numi+1);
|
const byte *src = (const byte *)(numi+1);
|
||||||
rgbdata_t *pal;
|
rgbdata_t *pal;
|
||||||
|
size_t pal_bytes = *numi * 3;
|
||||||
|
|
||||||
// install palette
|
// install palette
|
||||||
switch( psprite->texFormat )
|
switch( psprite->texFormat )
|
||||||
{
|
{
|
||||||
case SPR_INDEXALPHA:
|
case SPR_INDEXALPHA:
|
||||||
pal = gEngfuncs.FS_LoadImage( "#gradient.pal", src, 768 );
|
pal = gEngfuncs.FS_LoadImage( "#gradient.pal", src, pal_bytes );
|
||||||
break;
|
break;
|
||||||
case SPR_ALPHTEST:
|
case SPR_ALPHTEST:
|
||||||
pal = gEngfuncs.FS_LoadImage( "#masked.pal", src, 768 );
|
pal = gEngfuncs.FS_LoadImage( "#masked.pal", src, pal_bytes );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pal = gEngfuncs.FS_LoadImage( "#normal.pal", src, 768 );
|
pal = gEngfuncs.FS_LoadImage( "#normal.pal", src, pal_bytes );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pframetype = (const byte *)(src + 768);
|
pframetype = (const byte *)(src + pal_bytes);
|
||||||
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gEngfuncs.Con_DPrintf( S_ERROR "%s has wrong number of palette colors %i (should be 256)\n", mod->name, *numi );
|
gEngfuncs.Con_DPrintf( S_ERROR "%s has wrong number of palette colors %i (should be less or equal than 256)\n", mod->name, *numi );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,31 +165,32 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, ui
|
||||||
pframetype = ((const byte *)buffer + sizeof( dsprite_q1_t )); // pinq1 + 1
|
pframetype = ((const byte *)buffer + sizeof( dsprite_q1_t )); // pinq1 + 1
|
||||||
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
||||||
}
|
}
|
||||||
else if( *numi == 256 )
|
else if( *numi <= 256 )
|
||||||
{
|
{
|
||||||
const byte *src = (const byte *)( numi + 1 );
|
const byte *src = (const byte *)(numi+1);
|
||||||
rgbdata_t *pal;
|
rgbdata_t *pal;
|
||||||
|
size_t pal_bytes = *numi * 3;
|
||||||
|
|
||||||
// install palette
|
// install palette
|
||||||
switch( psprite->texFormat )
|
switch( psprite->texFormat )
|
||||||
{
|
{
|
||||||
case SPR_INDEXALPHA:
|
case SPR_INDEXALPHA:
|
||||||
pal = gEngfuncs.FS_LoadImage( "#gradient.pal", src, 768 );
|
pal = gEngfuncs.FS_LoadImage( "#gradient.pal", src, pal_bytes );
|
||||||
break;
|
break;
|
||||||
case SPR_ALPHTEST:
|
case SPR_ALPHTEST:
|
||||||
pal = gEngfuncs.FS_LoadImage( "#masked.pal", src, 768 );
|
pal = gEngfuncs.FS_LoadImage( "#masked.pal", src, pal_bytes );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pal = gEngfuncs.FS_LoadImage( "#normal.pal", src, 768 );
|
pal = gEngfuncs.FS_LoadImage( "#normal.pal", src, pal_bytes );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pframetype = (const byte *)( src + 768 );
|
pframetype = (const byte *)(src + pal_bytes);
|
||||||
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gEngfuncs.Con_DPrintf( S_ERROR "%s has wrong number of palette colors %i (should be 256)\n", mod->name, *numi );
|
gEngfuncs.Con_DPrintf( S_ERROR "%s has wrong number of palette colors %i (should be less or equal than 256)\n", mod->name, *numi );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue