Skip to content

Commit 74dbea3

Browse files
authored
Merge pull request #1247 from taysta/openjo-jamodels
Support JKA models in OpenJO
2 parents d55a11d + aba3f2c commit 74dbea3

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

code/rd-vanilla/tr_ghoul2.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
34973555
qboolean 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

Comments
 (0)