Util.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "Util.h"
  2. #include "CFTTFileSystem_PAK.h"
  3. #include "memctrl.h"
  4. #include "XMATH.h"
  5. #include "TGame.h"
  6. int g_iPakOpen[100];
  7. CFTTFileSystem_PAK *g_pPakFileSystem[100];
  8. CFTTFile *g_pPakFile[100];
  9. const char *sPakFile[] = {
  10. "PKG:Data/flags.pak",
  11. "PKG:Data/nis.pak"};
  12. //-------------------------------------------------------------------------------------------------
  13. //00178670
  14. void UTILCOL_CheckSpheresOverlap(TPoint3D, int, TPoint3D, int) {
  15. }
  16. //-------------------------------------------------------------------------------------------------
  17. //001786E4
  18. int UTILCOL_RayCircleTest(TPoint *, int, TPoint *, TPoint *, int) {
  19. return 0;
  20. }
  21. //-------------------------------------------------------------------------------------------------
  22. //0017875C
  23. void UTILCOL_LengthenBone(TPoint3D *, TPoint3D *, int) {
  24. }
  25. //-------------------------------------------------------------------------------------------------
  26. //001787A0
  27. bool UTILCOL_CapsuleCapsuleCheck(TPoint3D tp3d0, TPoint3D tp3d1, TPoint3D tp3d2, TPoint3D tp3d3, int i4, int i5, int i6, int i7) {
  28. /*
  29. * 描述:这个函数寄存器对不上,摆弄了多次后无法与原汇编一致。但功能看起来比较明确。
  30. */
  31. TPoint3D var_2C;
  32. TPoint3D var_38;
  33. TPoint3D var_44;
  34. TPoint3D var_50;
  35. TPoint3D var_5C;
  36. TPoint3D var_68;
  37. int var_6C;
  38. int var_70;
  39. var_2C.point_0.dx_0 = tp3d0.point_0.dx_0;
  40. var_38.point_0.dx_0 = tp3d1.point_0.dx_0;
  41. var_2C.point_0.dy_4 = tp3d0.point_0.dy_4;
  42. var_2C.dz_8 = tp3d0.dz_8;
  43. var_38.point_0.dy_4 = tp3d1.point_0.dy_4;
  44. var_38.dz_8 = tp3d1.dz_8;
  45. var_44.point_0.dy_4 = tp3d2.point_0.dy_4;
  46. var_44.dz_8 = tp3d2.dz_8;
  47. var_50.point_0.dx_0 = tp3d3.point_0.dx_0;
  48. var_50.point_0.dy_4 = tp3d3.point_0.dy_4;
  49. var_50.dz_8 = tp3d3.dz_8;
  50. var_44.point_0.dx_0 = tp3d2.point_0.dx_0;
  51. var_5C.point_0.dx_0 = (tp3d0.point_0.dx_0 + tp3d1.point_0.dx_0) / 2;
  52. var_5C.point_0.dy_4 = (tp3d0.point_0.dy_4 + tp3d1.point_0.dy_4) / 2;
  53. var_5C.dz_8 = (tp3d1.dz_8 + tp3d0.dz_8) / 2;
  54. var_68.point_0.dy_4 = (tp3d3.point_0.dy_4 + tp3d2.point_0.dy_4) / 2;
  55. var_68.point_0.dx_0 = (tp3d3.point_0.dx_0 + tp3d2.point_0.dx_0) / 2;
  56. var_68.dz_8 = (tp3d3.dz_8 + tp3d2.dz_8) / 2;
  57. int r5_i = i5 + i4 + (i7 + i6) / 2;
  58. // 0017882E
  59. if (XMATH_Distance3D(&var_5C, &var_68) <= r5_i) {
  60. // 00178832
  61. // 00178846
  62. if (XMATH_LineLineDistance(&var_2C, &var_38, &var_44, &var_50, &var_6C, &var_70) < i4 + i5) {
  63. // 0017884A
  64. tGame.mTMath_6734.field_370.point_0.dx_0 = var_2C.point_0.dx_0 + var_6C * (var_38.point_0.dx_0 + var_2C.point_0.dx_0) / 4096;
  65. tGame.mTMath_6734.field_370.point_0.dy_4 = var_2C.point_0.dy_4 + var_6C * (var_38.point_0.dy_4 + var_2C.point_0.dy_4) / 4096;
  66. tGame.mTMath_6734.field_370.dz_8 = var_2C.dz_8 + var_6C * (var_38.dz_8 - var_2C.dz_8) / 4096;
  67. tGame.mTMath_6734.field_37C.point_0.dx_0 = var_44.point_0.dy_4 + var_70 * (var_50.point_0.dy_4 - var_44.point_0.dy_4) / 4096;
  68. tGame.mTMath_6734.field_37C.point_0.dy_4 = var_44.point_0.dx_0 + var_70 * (var_50.point_0.dx_0 - var_44.point_0.dx_0) / 4096;
  69. tGame.mTMath_6734.field_37C.dz_8 = var_44.dz_8 + var_70 * (var_50.dz_8 - var_44.dz_8) / 4096;
  70. tGame.mTMath_6734.field_388[0] = i4;
  71. tGame.mTMath_6734.field_388[1] = i5;
  72. return 1;
  73. }
  74. }
  75. // loc_178900
  76. return 0;
  77. }
  78. //-------------------------------------------------------------------------------------------------
  79. //001F5080 //^_^ UtilOpenPak(0, "PAK");
  80. void UtilOpenPak(int a0, char const *pFileType) {
  81. for (int dr6 = 0; dr6 <= 99; dr6++) { //loc_1F50AC
  82. //loc_1F5092
  83. if (a0 == dr6) {
  84. if (g_iPakOpen[a0] == 0)
  85. continue;
  86. return;
  87. }
  88. //loc_1F509E
  89. if (g_iPakOpen[dr6] != 0) {
  90. UtilClosePak(dr6);
  91. }
  92. }
  93. //001F50B0
  94. CFTTFile* r6_pFile = CFTTFileSystem::fopen(sPakFile[a0], "rb", EFTTMemHeapID_0);
  95. g_pPakFileSystem[a0] = new CFTTFileSystem_PAK;
  96. g_pPakFileSystem[a0]->Initialise(r6_pFile, EFTTMemHeapID_0);
  97. CFTTFileSystem::Register(g_pPakFileSystem[a0], pFileType);
  98. g_iPakOpen[a0] = 1;
  99. }
  100. //-------------------------------------------------------------------------------------------------
  101. //001F510C //^_^
  102. void UtilClosePak(int a0) {
  103. if (g_iPakOpen[a0]) {
  104. CFTTFileSystem::Deregister(g_pPakFileSystem[a0], nullptr);
  105. //001F5136
  106. if (g_pPakFileSystem[a0] != nullptr) {
  107. delete g_pPakFileSystem[a0];
  108. }
  109. //001F5140
  110. g_pPakFileSystem[a0] = nullptr;
  111. if (g_pPakFile[a0] != nullptr) {
  112. delete g_pPakFile[a0];
  113. }
  114. //loc_1F5154
  115. g_pPakFile[a0] = nullptr;
  116. g_iPakOpen[a0] = 0;
  117. }
  118. //locret_1F515E
  119. }
  120. //-------------------------------------------------------------------------------------------------
  121. //001F5170 //^_^
  122. bool UtilIsPackOpen(int a0) {
  123. return g_iPakOpen[a0] != 0;
  124. }
  125. //-------------------------------------------------------------------------------------------------