123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #include "Util.h"
- #include "CFTTFileSystem_PAK.h"
- #include "TGame.h"
- #include "XMATH.h"
- #include "memctrl.h"
- int g_iPakOpen[100];
- CFTTFileSystem_PAK *g_pPakFileSystem[100];
- CFTTFile *g_pPakFile[100];
- const char *sPakFile[] = {"PKG:Data/flags.pak", "PKG:Data/nis.pak"};
- //-------------------------------------------------------------------------------------------------
- // 00178670
- void UTILCOL_CheckSpheresOverlap(TPoint3D, int, TPoint3D, int) {}
- //-------------------------------------------------------------------------------------------------
- // 001786E4
- int UTILCOL_RayCircleTest(TPoint *, int, TPoint *, TPoint *, int) { return 0; }
- //-------------------------------------------------------------------------------------------------
- // 0017875C
- void UTILCOL_LengthenBone(TPoint3D *, TPoint3D *, int) {}
- //-------------------------------------------------------------------------------------------------
- // 001787A0
- bool UTILCOL_CapsuleCapsuleCheck(TPoint3D tp3d0, TPoint3D tp3d1, TPoint3D tp3d2,
- TPoint3D tp3d3, int i4, int i5, int i6,
- int i7) {
- /*
- * 描述:这个函数寄存器对不上,摆弄了多次后无法与原汇编一致。但功能看起来比较明确。
- */
- TPoint3D var_2C_sp4C;
- TPoint3D var_38_sp40;
- TPoint3D var_44_sp34;
- TPoint3D var_50_sp28;
- TPoint3D var_5C_sp1C;
- TPoint3D var_68_sp10;
- int var_6C_spC;
- int var_70_sp8;
- var_2C_sp4C.point_0.dx_0 = tp3d0.point_0.dx_0;
- var_2C_sp4C.point_0.dy_4 = tp3d0.point_0.dy_4;
- var_2C_sp4C.dz_8 = tp3d0.dz_8;
- var_38_sp40.point_0.dx_0 = tp3d1.point_0.dx_0;
- var_38_sp40.point_0.dy_4 = tp3d1.point_0.dy_4;
- var_38_sp40.dz_8 = tp3d1.dz_8;
- var_44_sp34.point_0.dx_0 = tp3d2.point_0.dx_0;
- var_44_sp34.point_0.dy_4 = tp3d2.point_0.dy_4;
- var_44_sp34.dz_8 = tp3d2.dz_8;
- var_50_sp28.point_0.dx_0 = tp3d3.point_0.dx_0;
- var_50_sp28.point_0.dy_4 = tp3d3.point_0.dy_4;
- var_50_sp28.dz_8 = tp3d3.dz_8;
- var_5C_sp1C.point_0.dx_0 = (tp3d0.point_0.dx_0 + tp3d1.point_0.dx_0) / 2;
- var_5C_sp1C.point_0.dy_4 = (tp3d0.point_0.dy_4 + tp3d1.point_0.dy_4) / 2;
- var_5C_sp1C.dz_8 = (tp3d1.dz_8 + tp3d0.dz_8) / 2;
- var_68_sp10.point_0.dy_4 = (tp3d3.point_0.dy_4 + tp3d2.point_0.dy_4) / 2;
- var_68_sp10.point_0.dx_0 = (tp3d3.point_0.dx_0 + tp3d2.point_0.dx_0) / 2;
- var_68_sp10.dz_8 = (tp3d3.dz_8 + tp3d2.dz_8) / 2;
- int r5_i = i5 + i4 + (i7 + i6) / 2;
- // 0017882E
- if (((int)XMATH_Distance3D(&var_5C_sp1C, &var_68_sp10)) <= r5_i) {
- // 00178832
- // 00178846
- if (XMATH_LineLineDistance(&var_2C_sp4C, &var_38_sp40, &var_44_sp34,
- &var_50_sp28, &var_6C_spC,
- &var_70_sp8) < i4 + i5) {
- // 0017884A
- tGame.mTMath_6734.field_370.point_0.dx_0 =
- var_2C_sp4C.point_0.dx_0 +
- var_6C_spC * (var_38_sp40.point_0.dx_0 - var_2C_sp4C.point_0.dx_0) /
- 4096;
- tGame.mTMath_6734.field_370.point_0.dy_4 =
- var_2C_sp4C.point_0.dy_4 +
- var_6C_spC * (var_38_sp40.point_0.dy_4 - var_2C_sp4C.point_0.dy_4) /
- 4096;
- tGame.mTMath_6734.field_370.dz_8 =
- var_2C_sp4C.dz_8 +
- var_6C_spC * (var_38_sp40.dz_8 - var_2C_sp4C.dz_8) / 4096;
- tGame.mTMath_6734.field_37C.point_0.dx_0 =
- var_44_sp34.point_0.dx_0 +
- var_70_sp8 * (var_50_sp28.point_0.dx_0 - var_44_sp34.point_0.dx_0) /
- 4096;
- tGame.mTMath_6734.field_37C.point_0.dy_4 =
- var_44_sp34.point_0.dy_4 +
- var_70_sp8 * (var_50_sp28.point_0.dy_4 - var_44_sp34.point_0.dy_4) /
- 4096;
- tGame.mTMath_6734.field_37C.dz_8 =
- var_44_sp34.dz_8 +
- var_70_sp8 * (var_50_sp28.dz_8 - var_44_sp34.dz_8) / 4096;
- tGame.mTMath_6734.field_388[0] = i4;
- tGame.mTMath_6734.field_388[1] = i5;
- return 1;
- }
- }
- // loc_178900
- return 0;
- }
- //-------------------------------------------------------------------------------------------------
- // 001F5080 //^_^ UtilOpenPak(0, "PAK");
- void UtilOpenPak(int a0, char const *pFileType) {
- for (int dr6 = 0; dr6 <= 99; dr6++) { // loc_1F50AC
- // loc_1F5092
- if (a0 == dr6) {
- if (g_iPakOpen[a0] == 0) continue;
- return;
- }
- // loc_1F509E
- if (g_iPakOpen[dr6] != 0) {
- UtilClosePak(dr6);
- }
- }
- // 001F50B0
- CFTTFile *r6_pFile =
- CFTTFileSystem::fopen(sPakFile[a0], "rb", EFTTMemHeapID_0);
- g_pPakFileSystem[a0] = new CFTTFileSystem_PAK;
- g_pPakFileSystem[a0]->Initialise(r6_pFile, EFTTMemHeapID_0);
- CFTTFileSystem::Register(g_pPakFileSystem[a0], pFileType);
- g_iPakOpen[a0] = 1;
- }
- //-------------------------------------------------------------------------------------------------
- // 001F510C //^_^
- void UtilClosePak(int a0) {
- if (g_iPakOpen[a0]) {
- CFTTFileSystem::Deregister(g_pPakFileSystem[a0], nullptr);
- // 001F5136
- if (g_pPakFileSystem[a0] != nullptr) {
- delete g_pPakFileSystem[a0];
- }
- // 001F5140
- g_pPakFileSystem[a0] = nullptr;
- if (g_pPakFile[a0] != nullptr) {
- delete g_pPakFile[a0];
- }
- // loc_1F5154
- g_pPakFile[a0] = nullptr;
- g_iPakOpen[a0] = 0;
- }
- // locret_1F515E
- }
- //-------------------------------------------------------------------------------------------------
- // 001F5170 //^_^
- bool UtilIsPackOpen(int a0) { return g_iPakOpen[a0] != 0; }
- //-------------------------------------------------------------------------------------------------
|