@@ -94,19 +94,6 @@ le_struct_begin( studiohdr_swap )
9494 le_struct_field ( studiohdr_t , transitionindex )
9595le_struct_end ();
9696
97- le_struct_begin ( studiohdr2_swap )
98- le_struct_field ( studiohdr2_t , numposeparameters )
99- le_struct_field ( studiohdr2_t , poseparamindex )
100- le_struct_field ( studiohdr2_t , numikautoplaylocks )
101- le_struct_field ( studiohdr2_t , ikautoplaylockindex )
102- le_struct_field ( studiohdr2_t , numikchains )
103- le_struct_field ( studiohdr2_t , ikchainindex )
104- le_struct_field ( studiohdr2_t , keyvalueindex )
105- le_struct_field ( studiohdr2_t , keyvaluesize )
106- le_struct_field ( studiohdr2_t , numhitboxsets )
107- le_struct_field ( studiohdr2_t , hitboxsetindex )
108- le_struct_end ();
109-
11097le_struct_begin ( mstudiobone_swap )
11198 le_struct_field ( mstudiobone_t , parent )
11299 le_struct_field ( mstudiobone_t , unused )
@@ -132,6 +119,7 @@ le_struct_begin( mstudiobbox_swap )
132119le_struct_end ();
133120
134121le_struct_begin ( mstudioseqgroup_swap )
122+ // should we even swap seqgroup?
135123 le_struct_field ( mstudioseqgroup_t , unused )
136124 le_struct_field ( mstudioseqgroup_t , unused2 )
137125le_struct_end ();
@@ -174,9 +162,7 @@ le_struct_begin( mstudioattachment_swap )
174162 le_struct_field ( mstudioattachment_t , flags )
175163 le_struct_field ( mstudioattachment_t , bone )
176164 le_struct_array ( mstudioattachment_t , org , 3 )
177- le_struct_array ( mstudioattachment_t , vectors [0 ], 3 )
178- le_struct_array ( mstudioattachment_t , vectors [1 ], 3 )
179- le_struct_array ( mstudioattachment_t , vectors [2 ], 3 )
165+ le_struct_array ( mstudioattachment_t , vectors , 3 * 3 )
180166le_struct_end ();
181167
182168le_struct_begin ( mstudiobodyparts_swap )
@@ -219,29 +205,6 @@ le_struct_begin( mstudioanim_swap )
219205 le_struct_array ( mstudioanim_t , offset , 6 )
220206le_struct_end ();
221207
222- le_struct_begin ( mstudioposeparamdesc_swap )
223- le_struct_field ( mstudioposeparamdesc_t , flags )
224- le_struct_field ( mstudioposeparamdesc_t , start )
225- le_struct_field ( mstudioposeparamdesc_t , end )
226- le_struct_field ( mstudioposeparamdesc_t , loop )
227- le_struct_end ();
228-
229- le_struct_begin ( mstudioikchain_swap )
230- le_struct_field ( mstudioikchain_t , linktype )
231- le_struct_field ( mstudioikchain_t , numlinks )
232- le_struct_field ( mstudioikchain_t , linkindex )
233- le_struct_end ();
234-
235- le_struct_begin ( mstudioiklink_swap )
236- le_struct_field ( mstudioiklink_t , bone )
237- le_struct_array ( mstudioiklink_t , kneeDir , 3 )
238- le_struct_end ();
239-
240- le_struct_begin ( mstudiohitboxset_swap )
241- le_struct_field ( mstudiohitboxset_t , numhitboxes )
242- le_struct_field ( mstudiohitboxset_t , hitboxindex )
243- le_struct_end ();
244-
245208/*
246209====================
247210Mod_InitStudioHull
@@ -1004,7 +967,7 @@ static int Mod_StudioBodyVariations( model_t *mod )
1004967 return count ;
1005968}
1006969
1007- static qboolean Mod_SwapStudioModel ( void * buffer , size_t buffersize )
970+ static qboolean Mod_SwapStudioModel ( const char * name , void * buffer , size_t buffersize )
1008971{
1009972 studiohdr_t * phdr = buffer ;
1010973 byte * mod_base = buffer ;
@@ -1017,6 +980,14 @@ static qboolean Mod_SwapStudioModel( void *buffer, size_t buffersize )
1017980 if ( phdr -> ident != IDSTUDIOHEADER || phdr -> version != STUDIO_VERSION )
1018981 return false;
1019982
983+ #if XASH_BIG_ENDIAN
984+ if ( phdr -> studiohdr2index > 0 && phdr -> studiohdr2index < phdr -> length )
985+ {
986+ Con_Printf ( S_ERROR "byteswapping extended studio model \"%s\" is unsupoprted\n" , name );
987+ return false;
988+ }
989+ #endif
990+
1020991 for ( int i = 0 ; i < phdr -> numbones ; i ++ )
1021992 le_struct_swap ( mstudiobone_swap , (mstudiobone_t * )( mod_base + phdr -> boneindex ) + i );
1022993
@@ -1065,27 +1036,6 @@ static qboolean Mod_SwapStudioModel( void *buffer, size_t buffersize )
10651036 for ( int i = 0 ; i < phdr -> numskinfamilies * phdr -> numskinref ; i ++ )
10661037 pskinref [i ] = LittleShort ( pskinref [i ] );
10671038
1068- if ( phdr -> studiohdr2index > 0 && phdr -> studiohdr2index < phdr -> length )
1069- {
1070- studiohdr2_t * phdr2 = (studiohdr2_t * )( mod_base + phdr -> studiohdr2index );
1071- le_struct_swap ( studiohdr2_swap , phdr2 );
1072-
1073- for ( int i = 0 ; i < phdr2 -> numposeparameters ; i ++ )
1074- le_struct_swap ( mstudioposeparamdesc_swap , (mstudioposeparamdesc_t * )( mod_base + phdr2 -> poseparamindex ) + i );
1075-
1076- for ( int i = 0 ; i < phdr2 -> numhitboxsets ; i ++ )
1077- le_struct_swap ( mstudiohitboxset_swap , (mstudiohitboxset_t * )( mod_base + phdr2 -> hitboxsetindex ) + i );
1078-
1079- for ( int i = 0 ; i < phdr2 -> numikchains ; i ++ )
1080- {
1081- mstudioikchain_t * pikchain = (mstudioikchain_t * )( mod_base + phdr2 -> ikchainindex ) + i ;
1082- le_struct_swap ( mstudioikchain_swap , pikchain );
1083-
1084- for ( int j = 0 ; j < pikchain -> numlinks ; j ++ )
1085- le_struct_swap ( mstudioiklink_swap , (mstudioiklink_t * )( mod_base + pikchain -> linkindex ) + j );
1086- }
1087- }
1088-
10891039 return true;
10901040}
10911041
@@ -1101,7 +1051,7 @@ static studiohdr_t *R_StudioLoadHeader( model_t *mod, void *buffer, size_t buffe
11011051 if ( !buffer )
11021052 return NULL ;
11031053
1104- if ( !Mod_SwapStudioModel ( buffer , buffersize ))
1054+ if ( !Mod_SwapStudioModel ( mod -> name , buffer , buffersize ))
11051055 {
11061056 phdr = (studiohdr_t * )buffer ;
11071057 Con_Printf ( S_ERROR "%s has wrong version number (%i should be %i)\n" , mod -> name , phdr -> version , STUDIO_VERSION );
0 commit comments