CFTTModel.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. // CFTTModel - [2020-04-13 11:57:46]
  2. #ifndef _CFTTMODEL_H_
  3. #define _CFTTMODEL_H_
  4. #include "CFTTAnimBlend.h"
  5. #include "CFTTMatSetupData.h"
  6. #include "CFTTMatrix32.h"
  7. #include "CFTTRenderHelper.h"
  8. #include "sh_struct.h"
  9. #include "FTTGraphics.h"
  10. #include "FTTUPtr.h"
  11. #include "CFTTFrustum32.h"
  12. #include "CFTTAABB32.h"
  13. /*
  14. 00217B74 CFTTModel::CFTTModel(ushort,EModelLoadFlags)
  15. 00217BFC CFTTModel::CFTTModel(char const*,CFTTMatSetupData const&,EModelLoadFlags)
  16. 00217C94 CFTTModel::CFTTModel(CFTTFile *,CFTTMatSetupData const&,EModelLoadFlags)
  17. 00218FE0 CFTTModel::CFTTModel(CFTTModel const*,CFTTMatSetupData const&,EModelCopyFlags)
  18. 0021A058 CFTTModel::~CFTTModel()
  19. 0021A64A CFTTModel::~CFTTModel()
  20. 0018A494 CFTTModel::Render()
  21. 002178B8 CFTTModel::SetInsideCulling(bool)
  22. 002178C8 CFTTModel::GetInsideCulling()
  23. 00217930 CFTTModel::InitMembers()
  24. 002179D0 CFTTModel::LoadExtendedHeader(CFTTFile *,int)
  25. 00217C44 CFTTModel::InitModel_Filename(char const*,CFTTMatSetupData const&,EModelLoadFlags)
  26. 00217CDC CFTTModel::InitModel_FileHandle(CFTTFile *,CFTTMatSetupData const&,EModelLoadFlags)
  27. 00217D00 CFTTModel::InitModel(CFTTFile *,CFTTMatSetupData const&,EModelLoadFlags)
  28. 00218EA0 CFTTModel::AllocArrays(int)
  29. 00218F24 CFTTModel::SetVertexType()
  30. 00219028 CFTTModel::CopyModel(CFTTModel const*,CFTTMatSetupData const&,EModelCopyFlags)
  31. 0021A048 CFTTModel::GetNumBones(int)
  32. 0021A658 CFTTModel::GetMaterialIDs(int *,int,int)
  33. 0021A784 CFTTModel::GetMaxNumMaterials()
  34. 0021A7BC CFTTModel::SetupRenderStates(ushort)
  35. 0021A7CC CFTTModel::RestoreRenderStates(ushort)
  36. 0021A7DC CFTTModel::GetInvBindMatrix(uint,uint)
  37. 0021A7F0 CFTTModel::GetTrueBone(uint)
  38. 0021A81C CFTTModel::ModelsFromMeshes(EMeshModelFlags)
  39. 0021A92A CFTTModel::ModelsToMeshes(EMeshModelFlags)
  40. 0021AA74 CFTTModel::DeleteModels()
  41. 0021AAB8 CFTTModel::SetVerts(bool)
  42. 0021AAE4 CFTTModel::SetPhysiqueVerts(int,int)
  43. 0021AAE8 CFTTModel::BuildRenderData(uint,CFTTMatSetupData const*)
  44. 0021AB30 CFTTModel::FreeHWBuffers(bool,bool)
  45. 0021AB70 CFTTModel::CreateVolatileResources()
  46. 0021ABB4 CFTTModel::CreateManagedResources()
  47. 0021ABF2 CFTTModel::PrebuildSkin(float,int)
  48. 0021AC60 CFTTModel::Render(CFTTMatrix32 *,float)
  49. 0021AD98 CFTTModel::RenderPart(CFTTMatrix32 *,float,bool *,int)
  50. 0021AE94 CFTTModel::RenderMaterial(CFTTMatrix32 *,float,int,ushort)
  51. 0021B0D8 CFTTModel::DeleteVolatileResources()
  52. 0021B106 CFTTModel::DeleteManagedResources()
  53. 0021B13A CFTTModel::PrePhysiqueVerts(float)
  54. 0021B13C CFTTModel::PostPhysiqueVerts()
  55. 0021B13E CFTTModel::LoadPlatformModel(CFTTFile *,TFTTPlatformModel *,int,ushort **&,int &)
  56. 0021CC02 CFTTModel::GenerateAnimationDataT(float,TFTTAnimHeader **)
  57. 0021CC4C CFTTModel::GenerateAnimationData(float,TFTTAnimHeader **)
  58. 0021DA94 CFTTModel::GenerateAnimationData_Physique(int,int,float,int,TFTTAnimHeader **)
  59. 0021DE68 CFTTModel::GenerateAnimationData_Hierarchical(int,int,float,int,TFTTAnimHeader **)
  60. vptr_CFTTModel_328700:
  61. CFTTModel::~CFTTModel()
  62. CFTTModel::~CFTTModel()
  63. 0x15C
  64. */
  65. //-------------------------------------------------------------------------------------------------
  66. enum EModelLoadFlags {
  67. EModelLoadFlags_0,
  68. EModelLoadFlags_1,
  69. EModelLoadFlags_2,
  70. EModelLoadFlags_3,
  71. EModelLoadFlags_4,
  72. EModelLoadFlags_5,
  73. EModelLoadFlags_6,
  74. };
  75. //-------------------------------------------------------------------------------------------------
  76. enum EModelCopyFlags {
  77. EModelCopyFlags_0,
  78. EModelCopyFlags_1,
  79. EModelCopyFlags_2,
  80. EModelCopyFlags_3,
  81. EModelCopyFlags_4,
  82. EModelCopyFlags_5,
  83. };
  84. //-------------------------------------------------------------------------------------------------
  85. enum EMeshModelFlags {
  86. EMeshModelFlags_0,
  87. EMeshModelFlags_1,
  88. EMeshModelFlags_2,
  89. EMeshModelFlags_3,
  90. EMeshModelFlags_4,
  91. EMeshModelFlags_5,
  92. EMeshModelFlags_6,
  93. EMeshModelFlags_7,
  94. EMeshModelFlags_8,
  95. EMeshModelFlags_9,
  96. EMeshModelFlags_10,
  97. EMeshModelFlags_11,
  98. EMeshModelFlags_12,
  99. EMeshModelFlags_13,
  100. EMeshModelFlags_14,
  101. EMeshModelFlags_15,
  102. EMeshModelFlags_16,
  103. };
  104. //-------------------------------------------------------------------------------------------------
  105. //结构大小确定为0x12, 具体的类型不确定
  106. #pragma pack(1)
  107. struct CFTTModel_struct_12 {
  108. ushort us_0;
  109. uint field_2;
  110. uint field_6;
  111. int field_A;
  112. ushort field_E;
  113. ushort field_10;
  114. };
  115. #pragma pack()
  116. struct CFTTModel_Wrap_12 {
  117. CFTTModel_struct_12 *pStruct_0;
  118. };
  119. //-------------------------------------------------------------------------------------------------
  120. // 0x14
  121. #pragma pack(1)
  122. struct CFTTModel_struct_14 {
  123. short field_0;
  124. CFTTModel_struct_12 tStr12_2;
  125. };
  126. #pragma pack()
  127. //-------------------------------------------------------------------------------------------------
  128. struct CFTTModel_Wrap_14 {
  129. CFTTModel_struct_14 *pCFTTModel_struct_14_0;
  130. };
  131. //-------------------------------------------------------------------------------------------------
  132. // 0x2C float32x2_t 默认要求8字节对齐, 因此,这里要强制加上4字节对齐
  133. #pragma pack(4)
  134. struct TFTTPlatformModel {
  135. FTM_Section_Head tFTMHead_0;
  136. ushort field_8;
  137. ushort field_A;
  138. float32x2_t tfloat32x2_C;
  139. float32x2_t tfloat32x2_14;
  140. float32x2_t tfloat32x2_1C;
  141. float32x2_t tfloat32x2_24;
  142. };
  143. #pragma pack()
  144. //-------------------------------------------------------------------------------------------------
  145. //大小确定 0xC0 ModelsToMeshes 中确定的
  146. struct CFTTPlatformMesh {
  147. TFTTPlatformModel tPlatformModel_0;
  148. union {
  149. int offset;
  150. uint8 *pData;
  151. } uOPData_2C;
  152. int field_30;
  153. union {
  154. int offset;
  155. ushort *pusData;
  156. } uOPData_34;
  157. int buflen_38;
  158. union {
  159. int offset;
  160. TFTTVertexDescriptor *pTFTTVertexDescriptor;
  161. } uOPData_3C;
  162. int count_40;
  163. union {
  164. int offset;
  165. // CFTTModel_Wrap_14 *pData; //
  166. CFTTModel_struct_14 *list_model;
  167. CFTTModel_struct_12 *list_model_2;
  168. } uOPData_44;
  169. union {
  170. int offset;
  171. uint8 *pData;
  172. } uOPData_48;
  173. int dMatrix32Count_4C; // list_CFTTMatrix32_28[dMeshIndex] count
  174. union {
  175. int offset;
  176. uint8 *pData;
  177. } uOPData_50;
  178. uint dMeshCount_54;
  179. ushort field_58;
  180. ushort field_5A;
  181. float pfloat_array_5C[3];
  182. float pfloat_array_68[3];
  183. CFTTVector32x4 pfTTVector32x4_74;
  184. CFTTVector32x4 pfTTVector32x4_84;
  185. FTTUPtr<CFTTRenderHelper> pCFTTRenderHelper_94;
  186. union {
  187. int offset;
  188. CFTTMatrix32 *pCFTTMatrix32;
  189. } uOPData_98;
  190. int field_9C;
  191. int field_A0;
  192. int field_A4;
  193. int field_A8;
  194. int field_AC;
  195. int field_B0;
  196. int field_B4;
  197. int field_B8;
  198. int field_BC;
  199. };
  200. //-------------------------------------------------------------------------------------------------
  201. struct CFTTModel_TFTTAnimKeyFrame_4 {
  202. union {
  203. // TFTTAnimKeyFrame *pTFTTAnimKeyFrame_0;
  204. TFTTAnimHeader *pTFTTAnimHeader_0;
  205. } u_0;
  206. };
  207. //-------------------------------------------------------------------------------------------------
  208. struct CFTTModel_Bone_8 {
  209. int field_0;
  210. ushort dCFTTMatrix32Count_4;
  211. ushort field_6;
  212. };
  213. //-------------------------------------------------------------------------------------------------
  214. struct CFTTModel_TFTTHierarchyHeader_4 {
  215. TFTTHierarchyHeader *pTFTTHierarchyHeader_0;
  216. };
  217. //-------------------------------------------------------------------------------------------------
  218. // 0x20
  219. // 0021863C 2E40 MOVS R0, #0x20 @ ' '
  220. struct CFTTModel_struct_20 {
  221. int field_0;
  222. int field_4;
  223. int field_8;
  224. int field_C;
  225. int field_10;
  226. int field_14;
  227. int field_18;
  228. int field_1C;
  229. };
  230. //-------------------------------------------------------------------------------------------------
  231. struct TBoneDesInfo {
  232. char info_0[32];
  233. };
  234. //-------------------------------------------------------------------------------------------------
  235. class CFTTPlatformMesh32 {
  236. public:
  237. // copy a1 -> a2
  238. void Convert(CFTTPlatformMesh *pOther); // 0021B26E
  239. CFTTPlatformMesh mesh_0;
  240. };
  241. //-------------------------------------------------------------------------------------------------
  242. // 0x40 //0021B074 6B8 ADD.W R10, R10, #0x40 @ '@' 此处可以判断该结构大小为0x40
  243. class TModelAABBDC {
  244. public:
  245. ~TModelAABBDC();
  246. bool Render(CFTTFrustum32 const &, CFTTVector32 const &); // 002178D8
  247. ushort us_0; // 0021B060 6B8 LDRH.W R3, [R6,R10]
  248. ushort us_2;
  249. CFTTAABB32 tAABB32_4;
  250. int field_34;
  251. CFTTAABB32 *pAABB32_38;
  252. uchar ub_3C;
  253. uchar ub_3D;
  254. uchar ub_3E;
  255. uchar ub_3F;
  256. };
  257. //-------------------------------------------------------------------------------------------------
  258. class TModelSplit {
  259. public:
  260. ~TModelSplit(){
  261. // 0021A61C
  262. };
  263. uchar ub_0;
  264. uchar ub_1;
  265. ushort us_2;
  266. TModelAABBDC *pModelAABBDC_4;
  267. };
  268. //-------------------------------------------------------------------------------------------------
  269. class CFTTModel {
  270. public:
  271. CFTTModel(ushort a1, EModelLoadFlags eFlag); // 00217B74
  272. CFTTModel(char const *, CFTTMatSetupData const &, EModelLoadFlags); // 00217BFC
  273. CFTTModel(CFTTFile *, CFTTMatSetupData const &, EModelLoadFlags); // 00217C94
  274. CFTTModel(CFTTModel const *, CFTTMatSetupData const &, EModelCopyFlags); // 00218FE0
  275. virtual ~CFTTModel(); // 0021A058 0021A64A
  276. void Render(); // 0018A494
  277. static void SetInsideCulling(bool); // 002178B8
  278. static bool GetInsideCulling(); // 002178C8
  279. void InitMembers(); // 00217930
  280. bool LoadExtendedHeader(CFTTFile *, int); // 002179D0
  281. void InitModel_Filename(char const *, CFTTMatSetupData const &, EModelLoadFlags); // 00217C44
  282. void InitModel_FileHandle(CFTTFile *, CFTTMatSetupData const &, EModelLoadFlags); // 00217CDC
  283. bool InitModel(CFTTFile *, CFTTMatSetupData const &, EModelLoadFlags); // 00217D00
  284. void AllocArrays(int); // 00218EA0
  285. void SetVertexType(); // 00218F24
  286. void CopyModel(CFTTModel const *, CFTTMatSetupData const &, EModelCopyFlags); // 00219028
  287. ushort GetNumBones(int) const; // 0021A048
  288. int GetMaterialIDs(int *, int, int); // 0021A658
  289. uint GetMaxNumMaterials(); // 0021A784
  290. void SetupRenderStates(ushort); // 0021A7BC
  291. void RestoreRenderStates(ushort); // 0021A7CC
  292. CFTTMatrix32 *GetInvBindMatrix(uint index, uint a3); // 0021A7DC
  293. bool GetTrueBone(uint); // 0021A7F0
  294. void ModelsFromMeshes(EMeshModelFlags); // 0021A81C
  295. void ModelsToMeshes(EMeshModelFlags); // 0021A92A
  296. void DeleteModels(); // 0021AA74
  297. void SetVerts(bool); // 0021AAB8
  298. void SetPhysiqueVerts(int, int); // 0021AAE4
  299. void BuildRenderData(uint, CFTTMatSetupData const *); // 0021AAE8
  300. void FreeHWBuffers(bool, bool); // 0021AB30
  301. bool CreateVolatileResources(); // 0021AB70
  302. bool CreateManagedResources(); // 0021ABB4
  303. void PrebuildSkin(float, int); // 0021ABF2
  304. void Render(CFTTMatrix32 *, float); // 0021AC60
  305. void RenderPart(CFTTMatrix32 *, float, bool *, int); // 0021AD98
  306. void RenderMaterial(CFTTMatrix32 *, float, int, ushort); // 0021AE94
  307. int DeleteVolatileResources(); // 0021B0D8
  308. void DeleteManagedResources(); // 0021B106
  309. void PrePhysiqueVerts(float); // 0021B13A
  310. void PostPhysiqueVerts(); // 0021B13C
  311. int LoadPlatformModel(CFTTFile *, TFTTPlatformModel *, int, ushort **&ppStruct, int &); // 0021B13E
  312. void GenerateAnimationDataT(float, TFTTAnimHeader **); // 0021CC02
  313. void GenerateAnimationData(float, TFTTAnimHeader **); // 0021CC4C
  314. void GenerateAnimationData_Physique(int, int, float, int, TFTTAnimHeader **); // 0021DA94
  315. void GenerateAnimationData_Hierarchical(int, int, float, int, TFTTAnimHeader **); // 0021DE68
  316. int field_4;
  317. uint dVertexCount_8;
  318. // CFTTModel_Mesh_4 * list_PlatformMesh_C;
  319. CFTTPlatformMesh **ppPlatformMesh_C;
  320. bool bIsCreateManageRes_10; // true 表示已经Create
  321. bool bool_11;
  322. bool bool_12;
  323. bool field_13;
  324. float f_14;
  325. int file_open_err_18;
  326. float f_1C;
  327. int field_20;
  328. CFTTModel_TFTTAnimKeyFrame_4 *pTFTTAnimKeyFrame_24; // loc_217FAE 说明是 TFTTAnimHeader
  329. //还有可能是 TFTTAnimKeyFrame
  330. CFTTMatrix32 **ppCFTTMatrix32_28;
  331. float f_2C;
  332. float f_30;
  333. uint8 byte_34; // bool
  334. float f_38;
  335. float f_3C;
  336. int dAnimBlock_40;
  337. float f_44;
  338. TBone *pTBone_48; // CFTTModel_Bone_8 *list_bones_48;
  339. TBoneDesInfo **ppTBone_4C;
  340. CFTTModel_struct_20 **ppStruct20_50;
  341. uint8 byte_54; //.text:0021ACB2 LDR R1, [R6,#0x54] 这儿是取4个字节
  342. TBoneBlendInfo *list_TBoneBlendInfo_58; // TBoneBlendInfo
  343. CFTTModel_TFTTHierarchyHeader_4 *pTFTTHierarchyHeader_5C; // TFTTHierarchyHeader list CFTTModel_TFTTHierarchyHeader_4
  344. CFTTAnimBlend *pCFTTAnimBlend_60;
  345. int func_64; //没有调用到
  346. int field_68;
  347. ushort dModelCount_6C;
  348. ushort dCount_6E; // list_TCollBlock_7C count
  349. int dTMarkupBlockCount_70; // list_TMarkupBlock_88 count
  350. TFTTModel **ppTFTTModel_74;
  351. int field_78;
  352. TCollBlock *list_TCollBlock_7C; // struct size 0x58
  353. float *list_float_80;
  354. ushort *list_ushort_84;
  355. TMarkupBlock *pTMarkupBlock_88; // 0x5C array
  356. int field_8C;
  357. int field_90;
  358. int field_94;
  359. int **pArray_4_98; //??? 类型暂时未知
  360. TFTTCamera *pTFTTCamera_9C; // 0x38 array
  361. TFTTHelper *pTFTTHelper_A0; // 0x58 array
  362. TFTTSpline *pTFTTSpline_A4; // 0x2C array
  363. TFTTLight *pTFTTLight_A8; // 0x34 array
  364. int dTFTTCameraCount_AC;
  365. int dCount_B0; // list_TFTTHelper_A0 count
  366. int dCount_B4; // list_TFTTSpline_A4 count
  367. int dCount_B8; // list_TFTTLight_A8 count
  368. uint8 *pArray_4_BC;
  369. int dTotalCount_C0; // list_TFTTHelper_A0 all node
  370. TModelSplit **ppTModelSplit_C4;
  371. TPVSBlock *list_TPVSBlock_C8;
  372. int field_CC;
  373. float float_D0;
  374. CFTTVector32 cfttVector32_D4; //001C286E 这一块确定
  375. CFTTVector32 cfttVector32_E0; //001C286E 这一块确定
  376. CFTTVector32 cfttVector32_EC; //001C286E 这一块确定
  377. int field_F8;
  378. int field_FC;
  379. int field_100;
  380. int field_104;
  381. int field_108;
  382. int field_10C;
  383. int field_110;
  384. float float_114;
  385. int field_118;
  386. int field_11C;
  387. int field_120;
  388. int field_124;
  389. float float_128;
  390. int field_12C;
  391. int field_130;
  392. int field_134;
  393. int field_138;
  394. float float_13C;
  395. int field_140;
  396. int field_144;
  397. int field_148;
  398. int field_14C;
  399. float float_150;
  400. int field_154;
  401. int field_158;
  402. static bool ms_bInsideCulling;
  403. };
  404. #endif //_CFTTMODEL_H_