@@ -549,6 +549,25 @@ void CClientIFP::InsertAnimationDummySequence(std::unique_ptr<CAnimBlendSequence
549549
550550void CClientIFP::CopyDummyKeyFrameByBoneID (BYTE* pKeyFrames, DWORD dwBoneID)
551551{
552+ /* FrameData structure:
553+ *
554+ struct KeyFrame
555+ {
556+ short quaternionX;
557+ short quaternionY;
558+ short quaternionZ;
559+ short quaternionW;
560+ short time;
561+ };
562+
563+ struct KeyFrameCompressed : KeyFrame
564+ {
565+ short translationX;
566+ short translationY;
567+ short translationZ;
568+ };
569+ */
570+
552571 switch (dwBoneID)
553572 {
554573 case eBoneType::NORMAL: // Normal or Root, both are same
@@ -784,7 +803,8 @@ constexpr bool CClientIFP::IsKeyFramesTypeRoot(eFrameType iFrameType)
784803
785804std::int32_t CClientIFP::GetBoneIDFromName (const SString& strBoneName)
786805{
787- if (strBoneName == " root" )
806+ // Some cutscene animations have different names like Root suitcase-1, etc
807+ if (strBoneName == " root" || strBoneName.substr (0 , 4 ) == " root" )
788808 return eBoneType::NORMAL;
789809 if (strBoneName == " normal" )
790810 return eBoneType::NORMAL;
@@ -860,6 +880,72 @@ std::int32_t CClientIFP::GetBoneIDFromName(const SString& strBoneName)
860880 if (strBoneName == " rtoe0" )
861881 return eBoneType::R_TOE_0;
862882
883+ // Cutscene bones
884+ if (strBoneName == " rthumb1" )
885+ return eBoneType::R_Thumb1;
886+ if (strBoneName == " rthumb2" )
887+ return eBoneType::R_Thumb2;
888+ if (strBoneName == " lthumb1" )
889+ return eBoneType::L_Thumb1;
890+ if (strBoneName == " lthumb2" )
891+ return eBoneType::L_Thumb2;
892+ if (strBoneName == " llip11" )
893+ return eBoneType::LLIP11;
894+ if (strBoneName == " jaw22" )
895+ return eBoneType::JAW22;
896+ if (strBoneName == " headnub" )
897+ return eBoneType::HEADNUB;
898+ if (strBoneName == " lfinger0nub" )
899+ return eBoneType::L_Finger0Nub;
900+ if (strBoneName == " rfinger0nub" )
901+ return eBoneType::R_Finger0Nub;
902+ if (strBoneName == " ltoe0nub" )
903+ return eBoneType::L_Toe0Nub;
904+ if (strBoneName == " rtoe0nub" )
905+ return eBoneType::R_Toe0Nub;
906+ if (strBoneName == " rbrow1" )
907+ return eBoneType::R_BROW1;
908+ if (strBoneName == " rbrow2" )
909+ return eBoneType::R_BROW2;
910+ if (strBoneName == " lbrow1" )
911+ return eBoneType::L_BROW1;
912+ if (strBoneName == " lbrow2" )
913+ return eBoneType::L_BROW2;
914+ if (strBoneName == " rlid" )
915+ return eBoneType::R_LID;
916+ if (strBoneName == " llid" )
917+ return eBoneType::L_LID;
918+ if (strBoneName == " rtlip3" )
919+ return eBoneType::R_TLIP3;
920+ if (strBoneName == " ltlip3" )
921+ return eBoneType::L_TLIP3;
922+ if (strBoneName == " rtlip1" )
923+ return eBoneType::R_TLIP1;
924+ if (strBoneName == " rtlip2" )
925+ return eBoneType::R_TLIP2;
926+ if (strBoneName == " ltlip1" )
927+ return eBoneType::L_TLIP1;
928+ if (strBoneName == " ltlip2" )
929+ return eBoneType::L_TLIP2;
930+ if (strBoneName == " rcorner" )
931+ return eBoneType::R_CORNER;
932+ if (strBoneName == " lcorner" )
933+ return eBoneType::L_CORNER;
934+ if (strBoneName == " jaw1" )
935+ return eBoneType::JAW1;
936+ if (strBoneName == " jaw2" )
937+ return eBoneType::JAW2;
938+ if (strBoneName == " llip1" )
939+ return eBoneType::LLIP1;
940+ if (strBoneName == " reye" )
941+ return eBoneType::R_EYE;
942+ if (strBoneName == " leye" )
943+ return eBoneType::L_EYE;
944+ if (strBoneName == " rcheek" )
945+ return eBoneType::R_CHEEK;
946+ if (strBoneName == " lcheek" )
947+ return eBoneType::L_CHEEK;
948+
863949 // for GTA 3
864950 if (strBoneName == " player" )
865951 return eBoneType::NORMAL;
@@ -976,12 +1062,79 @@ SString CClientIFP::GetCorrectBoneNameFromID(const std::int32_t& iBoneID)
9761062 if (iBoneID == eBoneType::R_TOE_0)
9771063 return " R Toe0" ;
9781064
1065+ // Cutscene bones
1066+ if (iBoneID == eBoneType::R_Thumb1)
1067+ return " RThumb1" ;
1068+ if (iBoneID == eBoneType::R_Thumb2)
1069+ return " RThumb2" ;
1070+ if (iBoneID == eBoneType::LLIP11)
1071+ return " llip11" ;
1072+ if (iBoneID == eBoneType::L_Thumb1)
1073+ return " LThumb1" ;
1074+ if (iBoneID == eBoneType::L_Thumb2)
1075+ return " LThumb2" ;
1076+ if (iBoneID == eBoneType::JAW22)
1077+ return " jaw22" ;
1078+ if (iBoneID == eBoneType::HEADNUB)
1079+ return " HeadNub" ;
1080+ if (iBoneID == eBoneType::L_Finger0Nub)
1081+ return " L Finger0Nub" ;
1082+ if (iBoneID == eBoneType::R_Finger0Nub)
1083+ return " R Finger0Nub" ;
1084+ if (iBoneID == eBoneType::L_Toe0Nub)
1085+ return " L Toe0Nub" ;
1086+ if (iBoneID == eBoneType::R_Toe0Nub)
1087+ return " R Toe0Nub" ;
1088+ if (iBoneID == eBoneType::R_BROW1)
1089+ return " rbrow1" ;
1090+ if (iBoneID == eBoneType::R_BROW2)
1091+ return " rbrow2" ;
1092+ if (iBoneID == eBoneType::L_BROW2)
1093+ return " lbrow2" ;
1094+ if (iBoneID == eBoneType::L_BROW1)
1095+ return " lbrow1" ;
1096+ if (iBoneID == eBoneType::R_LID)
1097+ return " rlid" ;
1098+ if (iBoneID == eBoneType::L_LID)
1099+ return " llid" ;
1100+ if (iBoneID == eBoneType::R_TLIP3)
1101+ return " rtlip3" ;
1102+ if (iBoneID == eBoneType::L_TLIP3)
1103+ return " ltlip3" ;
1104+ if (iBoneID == eBoneType::R_TLIP1)
1105+ return " rtlip1" ;
1106+ if (iBoneID == eBoneType::R_TLIP2)
1107+ return " rtlip2" ;
1108+ if (iBoneID == eBoneType::L_TLIP1)
1109+ return " ltlip1" ;
1110+ if (iBoneID == eBoneType::L_TLIP2)
1111+ return " ltlip2" ;
1112+ if (iBoneID == eBoneType::R_CORNER)
1113+ return " rcorner" ;
1114+ if (iBoneID == eBoneType::L_CORNER)
1115+ return " lcorner" ;
1116+ if (iBoneID == eBoneType::JAW1)
1117+ return " jaw1" ;
1118+ if (iBoneID == eBoneType::JAW2)
1119+ return " jaw2" ;
1120+ if (iBoneID == eBoneType::LLIP1)
1121+ return " llip1" ;
1122+ if (iBoneID == eBoneType::R_EYE)
1123+ return " reye" ;
1124+ if (iBoneID == eBoneType::L_EYE)
1125+ return " leye" ;
1126+ if (iBoneID == eBoneType::R_CHEEK)
1127+ return " rcheek" ;
1128+ if (iBoneID == eBoneType::L_CHEEK)
1129+ return " lcheek" ;
1130+
9791131 return " " ;
9801132}
9811133
9821134SString CClientIFP::GetCorrectBoneNameFromName (const SString& strBoneName)
9831135{
984- if (strBoneName == " root" )
1136+ // Some cutscene animations have different names like Root suitcase-1, etc
1137+ if (strBoneName == " root" || strBoneName.substr (0 , 4 ) == " root" )
9851138 return " Normal" ;
9861139 if (strBoneName == " normal" )
9871140 return " Normal" ;
@@ -1057,6 +1210,72 @@ SString CClientIFP::GetCorrectBoneNameFromName(const SString& strBoneName)
10571210 if (strBoneName == " rtoe0" )
10581211 return " R Toe0" ;
10591212
1213+ // Cutscene bones
1214+ if (strBoneName == " rthumb1" )
1215+ return " RThumb1" ;
1216+ if (strBoneName == " rthumb2" )
1217+ return " RThumb2" ;
1218+ if (strBoneName == " llip11" )
1219+ return " llip11" ;
1220+ if (strBoneName == " lthumb1" )
1221+ return " LThumb1" ;
1222+ if (strBoneName == " lthumb2" )
1223+ return " LThumb2" ;
1224+ if (strBoneName == " jaw22" )
1225+ return " jaw22" ;
1226+ if (strBoneName == " headnub" )
1227+ return " HeadNub" ;
1228+ if (strBoneName == " lfinger0nub" )
1229+ return " L Finger0Nub" ;
1230+ if (strBoneName == " rfinger0nub" )
1231+ return " R Finger0Nub" ;
1232+ if (strBoneName == " ltoe0nub" )
1233+ return " L Toe0Nub" ;
1234+ if (strBoneName == " rtoe0nub" )
1235+ return " R Toe0Nub" ;
1236+ if (strBoneName == " rbrow1" )
1237+ return " rbrow1" ;
1238+ if (strBoneName == " rbrow2" )
1239+ return " rbrow2" ;
1240+ if (strBoneName == " lbrow1" )
1241+ return " lbrow1" ;
1242+ if (strBoneName == " lbrow2" )
1243+ return " lbrow2" ;
1244+ if (strBoneName == " rlid" )
1245+ return " rlid" ;
1246+ if (strBoneName == " llid" )
1247+ return " llid" ;
1248+ if (strBoneName == " rtlip3" )
1249+ return " rtlip3" ;
1250+ if (strBoneName == " ltlip3" )
1251+ return " ltlip3" ;
1252+ if (strBoneName == " rtlip1" )
1253+ return " rtlip1" ;
1254+ if (strBoneName == " rtlip2" )
1255+ return " rtlip2" ;
1256+ if (strBoneName == " ltlip1" )
1257+ return " ltlip1" ;
1258+ if (strBoneName == " ltlip2" )
1259+ return " ltlip2" ;
1260+ if (strBoneName == " rcorner" )
1261+ return " rcorner" ;
1262+ if (strBoneName == " lcorner" )
1263+ return " lcorner" ;
1264+ if (strBoneName == " jaw1" )
1265+ return " jaw1" ;
1266+ if (strBoneName == " jaw2" )
1267+ return " jaw2" ;
1268+ if (strBoneName == " llip1" )
1269+ return " llip1" ;
1270+ if (strBoneName == " reye" )
1271+ return " reye" ;
1272+ if (strBoneName == " leye" )
1273+ return " leye" ;
1274+ if (strBoneName == " rcheek" )
1275+ return " rcheek" ;
1276+ if (strBoneName == " lcheek" )
1277+ return " lcheek" ;
1278+
10601279 // For GTA 3
10611280 if (strBoneName == " player" )
10621281 return " Normal" ;
0 commit comments