Util.cpp 5.3 KB

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