@@ -3494,6 +3494,64 @@ Bone 52: "face_always_":
34943494
34953495*/
34963496
3497+ #ifdef JK2_MODE
3498+ int NewToOldRemapTable[53 ] = {
3499+ 0 , // JKA Bone 00 model_root to JK2 Bone 00 model_root
3500+ 1 , // JKA Bone 01 pelvis to JK2 Bone 01 pelvis
3501+ 2 , // JKA Bone 02 Motion to JK2 Bone 02 Motion
3502+ 3 , // JKA Bone 03 lfemurYZ to JK2 Bone 03 lfemurYZ
3503+ 4 , // JKA Bone 04 lfemurX to JK2 Bone 04 lfemurX
3504+ 5 , // JKA Bone 05 ltibia to JK2 Bone 05 ltibia
3505+ 6 , // JKA Bone 06 ltalus to JK2 Bone 06 ltalus
3506+ 8 , // JKA Bone 07 rfemurYZ to JK2 Bone 08 rfemurYZ
3507+ 9 , // JKA Bone 08 rfemurX to JK2 Bone 09 rfemurX
3508+ 10 , // JKA Bone 09 rtibia to JK2 Bone 10 rtibia
3509+ 11 , // JKA Bone 10 rtalus to JK2 Bone 11 rtalus
3510+ 13 , // JKA Bone 11 lower_lumbar to JK2 Bone 13 lower_lumbar
3511+ 14 , // JKA Bone 12 upper_lumbar to JK2 Bone 14 upper_lumbar
3512+ 15 , // JKA Bone 13 thoracic to JK2 Bone 15 thoracic
3513+ 16 , // JKA Bone 14 cervical to JK2 Bone 16 cervical
3514+ 17 , // JKA Bone 15 cranium to JK2 Bone 17 cranium
3515+ 18 , // JKA Bone 16 ceyebrow to JK2 Bone 18 ceyebrow
3516+ 19 , // JKA Bone 17 jaw to JK2 Bone 19 jaw
3517+ 20 , // JKA Bone 18 lblip2 to JK2 Bone 20 lblip2
3518+ 21 , // JKA Bone 19 leye to JK2 Bone 21 leye
3519+ 22 , // JKA Bone 20 rblip2 to JK2 Bone 22 rblip2
3520+ 23 , // JKA Bone 21 ltlip2 to JK2 Bone 23 ltlip2
3521+ 24 , // JKA Bone 22 rtlip2 to JK2 Bone 24 rtlip2
3522+ 25 , // JKA Bone 23 reye to JK2 Bone 25 reye
3523+ 26 , // JKA Bone 24 rclavical to JK2 Bone 26 rclavical
3524+ 27 , // JKA Bone 25 rhumerus to JK2 Bone 27 rhumerus
3525+ 28 , // JKA Bone 26 rhumerusX to JK2 Bone 28 rhumerusX
3526+ 29 , // JKA Bone 27 rradius to JK2 Bone 29 rradius
3527+ 30 , // JKA Bone 28 rradiusX to JK2 Bone 30 rradiusX
3528+ 31 , // JKA Bone 29 rhand to JK2 Bone 31 rhand
3529+ 36 , // JKA Bone 30 r_d1_j1 to JK2 Bone 36 r_d1_j1
3530+ 37 , // JKA Bone 31 r_d1_j2 to JK2 Bone 37 r_d1_j2
3531+ 39 , // JKA Bone 32 r_d2_j1 to JK2 Bone 39 r_d2_j1
3532+ 40 , // JKA Bone 33 r_d2_j2 to JK2 Bone 40 r_d2_j2
3533+ 45 , // JKA Bone 34 r_d4_j1 to JK2 Bone 45 r_d4_j1
3534+ 46 , // JKA Bone 35 r_d4_j2 to JK2 Bone 46 r_d4_j2
3535+ 48 , // JKA Bone 36 rhang_tag_bone to JK2 Bone 48 rhang_tag_bone
3536+ 49 , // JKA Bone 37 lclavical to JK2 Bone 49 lclavical
3537+ 50 , // JKA Bone 38 lhumerus to JK2 Bone 50 lhumerus
3538+ 51 , // JKA Bone 39 lhumerusX to JK2 Bone 51 lhumerusX
3539+ 52 , // JKA Bone 40 lradius to JK2 Bone 52 lradius
3540+ 53 , // JKA Bone 41 lradiusX to JK2 Bone 53 lradiusX
3541+ 54 , // JKA Bone 42 lhand to JK2 Bone 54 lhand
3542+ 59 , // JKA Bone 43 l_d4_j1 to JK2 Bone 59 l_d4_j1
3543+ 60 , // JKA Bone 44 l_d4_j2 to JK2 Bone 60 l_d4_j2
3544+ 65 , // JKA Bone 45 l_d2_j1 to JK2 Bone 65 l_d2_j1
3545+ 66 , // JKA Bone 46 l_d2_j2 to JK2 Bone 66 l_d2_j2
3546+ 68 , // JKA Bone 47 l_d1_j1 to JK2 Bone 68 l_d1_j1
3547+ 69 , // JKA Bone 48 l_d1_j2 to JK2 Bone 69 l_d1_j2
3548+ 3 , // JKA Bone 49 ltail to JK2 Bone 03 lfemurYZ
3549+ 8 , // JKA Bone 50 rtail to JK2 Bone 08 rfemurYZ
3550+ 54 , // JKA Bone 51 lhang_tag_bone to JK2 Bone 54 lhand
3551+ 71 // JKA Bone 52 face to JK2 Bone 71 face
3552+ };
3553+ #endif
3554+
34973555qboolean R_LoadMDXM ( model_t *mod, void *buffer, const char *mod_name, qboolean &bAlreadyCached ) {
34983556 int i, l, j;
34993557 mdxmHeader_t *pinmodel, *mdxm;
@@ -3601,6 +3659,12 @@ qboolean R_LoadMDXM( model_t *mod, void *buffer, const char *mod_name, qboolean
36013659 {
36023660 isAnOldModelFile = true ;
36033661 }
3662+ #else
3663+ bool isANewModelFile = false ;
3664+ if (mdxm->numBones == 53 && strstr (mdxm->animName , " _humanoid" ))
3665+ {
3666+ isANewModelFile = true ;
3667+ }
36043668#endif
36053669
36063670 if (!mdxm->animIndex )
@@ -3661,6 +3725,15 @@ qboolean R_LoadMDXM( model_t *mod, void *buffer, const char *mod_name, qboolean
36613725 {
36623726 surfInfo->name [strlen (surfInfo->name )-4 ]=0 ; // remove "_off" from name
36633727 }
3728+ #else
3729+ if ( isANewModelFile )
3730+ {
3731+ Q_strlwr (surfInfo->name ); // just in case
3732+ if ( !strcmp ( &surfInfo->name [strlen (surfInfo->name )-4 ]," _off" ) )
3733+ {
3734+ surfInfo->name [strlen (surfInfo->name )-4 ]=0 ; // remove "_off" from name
3735+ }
3736+ }
36643737#endif
36653738
36663739 if ( surfInfo->shader [0 ] == ' [' )
@@ -3802,6 +3875,23 @@ qboolean R_LoadMDXM( model_t *mod, void *buffer, const char *mod_name, qboolean
38023875 }
38033876 }
38043877 }
3878+ #else
3879+ if (isANewModelFile)
3880+ {
3881+ int *boneRef = (int *) ( (byte *)surf + surf->ofsBoneReferences );
3882+ for ( j = 0 ; j < surf->numBoneReferences ; j++ )
3883+ {
3884+ assert (boneRef[j] >= 0 && boneRef[j] < 53 );
3885+ if (boneRef[j] >= 0 && boneRef[j] < 53 )
3886+ {
3887+ boneRef[j]=NewToOldRemapTable[boneRef[j]];
3888+ }
3889+ else
3890+ {
3891+ boneRef[j]=0 ;
3892+ }
3893+ }
3894+ }
38053895#endif
38063896 // find the next surface
38073897 surf = (mdxmSurface_t *)( (byte *)surf + surf->ofsEnd );
0 commit comments