engine: temporarily disable swapping extended header

This commit is contained in:
Alibek Omarov
2026-04-23 20:30:25 +05:00
committed by a1batross
parent b60afd73e9
commit e1b29e2da3

View File

@@ -94,19 +94,6 @@ le_struct_begin( studiohdr_swap )
le_struct_field( studiohdr_t, transitionindex )
le_struct_end();
le_struct_begin( studiohdr2_swap )
le_struct_field( studiohdr2_t, numposeparameters )
le_struct_field( studiohdr2_t, poseparamindex )
le_struct_field( studiohdr2_t, numikautoplaylocks )
le_struct_field( studiohdr2_t, ikautoplaylockindex )
le_struct_field( studiohdr2_t, numikchains )
le_struct_field( studiohdr2_t, ikchainindex )
le_struct_field( studiohdr2_t, keyvalueindex )
le_struct_field( studiohdr2_t, keyvaluesize )
le_struct_field( studiohdr2_t, numhitboxsets )
le_struct_field( studiohdr2_t, hitboxsetindex )
le_struct_end();
le_struct_begin( mstudiobone_swap )
le_struct_field( mstudiobone_t, parent )
le_struct_field( mstudiobone_t, unused )
@@ -132,6 +119,7 @@ le_struct_begin( mstudiobbox_swap )
le_struct_end();
le_struct_begin( mstudioseqgroup_swap )
// should we even swap seqgroup?
le_struct_field( mstudioseqgroup_t, unused )
le_struct_field( mstudioseqgroup_t, unused2 )
le_struct_end();
@@ -174,9 +162,7 @@ le_struct_begin( mstudioattachment_swap )
le_struct_field( mstudioattachment_t, flags )
le_struct_field( mstudioattachment_t, bone )
le_struct_array( mstudioattachment_t, org, 3 )
le_struct_array( mstudioattachment_t, vectors[0], 3 )
le_struct_array( mstudioattachment_t, vectors[1], 3 )
le_struct_array( mstudioattachment_t, vectors[2], 3 )
le_struct_array( mstudioattachment_t, vectors, 3 * 3 )
le_struct_end();
le_struct_begin( mstudiobodyparts_swap )
@@ -219,29 +205,6 @@ le_struct_begin( mstudioanim_swap )
le_struct_array( mstudioanim_t, offset, 6 )
le_struct_end();
le_struct_begin( mstudioposeparamdesc_swap )
le_struct_field( mstudioposeparamdesc_t, flags )
le_struct_field( mstudioposeparamdesc_t, start )
le_struct_field( mstudioposeparamdesc_t, end )
le_struct_field( mstudioposeparamdesc_t, loop )
le_struct_end();
le_struct_begin( mstudioikchain_swap )
le_struct_field( mstudioikchain_t, linktype )
le_struct_field( mstudioikchain_t, numlinks )
le_struct_field( mstudioikchain_t, linkindex )
le_struct_end();
le_struct_begin( mstudioiklink_swap )
le_struct_field( mstudioiklink_t, bone )
le_struct_array( mstudioiklink_t, kneeDir, 3 )
le_struct_end();
le_struct_begin( mstudiohitboxset_swap )
le_struct_field( mstudiohitboxset_t, numhitboxes )
le_struct_field( mstudiohitboxset_t, hitboxindex )
le_struct_end();
/*
====================
Mod_InitStudioHull
@@ -1001,7 +964,7 @@ static int Mod_StudioBodyVariations( model_t *mod )
return count;
}
static qboolean Mod_SwapStudioModel( void *buffer, size_t buffersize )
static qboolean Mod_SwapStudioModel( const char *name, void *buffer, size_t buffersize )
{
studiohdr_t *phdr = buffer;
byte *mod_base = buffer;
@@ -1014,6 +977,14 @@ static qboolean Mod_SwapStudioModel( void *buffer, size_t buffersize )
if( phdr->ident != IDSTUDIOHEADER || phdr->version != STUDIO_VERSION )
return false;
#if XASH_BIG_ENDIAN
if( phdr->studiohdr2index > 0 && phdr->studiohdr2index < phdr->length )
{
Con_Printf( S_ERROR "byteswapping extended studio model \"%s\" is unsupoprted\n", name );
return false;
}
#endif
for( int i = 0; i < phdr->numbones; i++ )
le_struct_swap( mstudiobone_swap, (mstudiobone_t *)( mod_base + phdr->boneindex ) + i );
@@ -1062,27 +1033,6 @@ static qboolean Mod_SwapStudioModel( void *buffer, size_t buffersize )
for( int i = 0; i < phdr->numskinfamilies * phdr->numskinref; i++ )
pskinref[i] = LittleShort( pskinref[i] );
if( phdr->studiohdr2index > 0 && phdr->studiohdr2index < phdr->length )
{
studiohdr2_t *phdr2 = (studiohdr2_t *)( mod_base + phdr->studiohdr2index );
le_struct_swap( studiohdr2_swap, phdr2 );
for( int i = 0; i < phdr2->numposeparameters; i++ )
le_struct_swap( mstudioposeparamdesc_swap, (mstudioposeparamdesc_t *)( mod_base + phdr2->poseparamindex ) + i );
for( int i = 0; i < phdr2->numhitboxsets; i++ )
le_struct_swap( mstudiohitboxset_swap, (mstudiohitboxset_t *)( mod_base + phdr2->hitboxsetindex ) + i );
for( int i = 0; i < phdr2->numikchains; i++ )
{
mstudioikchain_t *pikchain = (mstudioikchain_t *)( mod_base + phdr2->ikchainindex ) + i;
le_struct_swap( mstudioikchain_swap, pikchain );
for( int j = 0; j < pikchain->numlinks; j++ )
le_struct_swap( mstudioiklink_swap, (mstudioiklink_t *)( mod_base + pikchain->linkindex ) + j );
}
}
return true;
}
@@ -1098,7 +1048,7 @@ static studiohdr_t *R_StudioLoadHeader( model_t *mod, void *buffer, size_t buffe
if( !buffer )
return NULL;
if( !Mod_SwapStudioModel( buffer, buffersize ))
if( !Mod_SwapStudioModel( mod->name, buffer, buffersize ))
{
phdr = (studiohdr_t *)buffer;
Con_Printf( S_ERROR "%s has wrong version number (%i should be %i)\n", mod->name, phdr->version, STUDIO_VERSION );